diff --git a/Samples/VizImage/vizImage.html b/Samples/VizImage/vizImage.html index df3d5ade..54b88c6c 100644 --- a/Samples/VizImage/vizImage.html +++ b/Samples/VizImage/vizImage.html @@ -14,7 +14,7 @@ - + diff --git a/Samples/VizImage2/VizImage2.trex b/Samples/VizImage2/VizImage2.trex index 17c9eec2..506eecc2 100644 --- a/Samples/VizImage2/VizImage2.trex +++ b/Samples/VizImage2/VizImage2.trex @@ -7,7 +7,7 @@ 1.6 - http://localhost:8765/Samples/VizImage/vizImage2.html + http://localhost:8765/Samples/VizImage2/vizImage2.html iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAlhJREFUOI2Nkt9vy1EYh5/3bbsvRSySCZbIxI+ZCKsN2TKtSFyIrV2WuRCJuBiJWxfuxCVXbvwFgiEtposgLFJElnbU1SxIZIIRJDKTrdu+53Uhra4mce7Oe57Pcz7JOULFisViwZ+29LAzOSjQYDgz1ZcCvWuXV11MJpN+OS/lm6179teqH0yDqxPTCyKSA8DcDsyOmOprnCaeP7459pdgy969i0LTC3IO/RQMyoHcQN+3cnljW3dNIFC47qDaK3g7BwdTkwBaBELT4ZPOUVWgKl4ZBnjxJPUlMDnTDrp0pmr6RHFeEjjcUUXPDGeSEwDN0Xg8sivxMhJNjGzbHd8PkM3eHRfkrBM5NkcQaY2vUnTlrDIA0NoaX+KLXFFlowr14tvVpqb2MICzmQcKqxvbumv+NAhZGCCIPwEw6QWXKYRL/VUXO0+rAUJiPwAk5MIlgVfwPjjHLCL1APmHN94ZdqeYN+NW/mn6I4BvwQYchcLnwFhJMDiYmlRxAzjpKWZkYkUCcZ2I61wi37tLbYyjiN0fHk5Oz3nGSLSzBbNHCF35R7f6K1/hN9PRhek11FrymfQQQKB4+Gl05P2qNRtmETlXW7e+b2z01dfycGNbfFMAbqNyKp9Jp4rzOT8RYFs0njJkc2iqsCObvTsOsDWWqA5C1uFy+Uz/oXJeKwVT4h0RmPUXhi79vuC0Ku6yOffTK3g9lfxfDQAisY516sg5kfOCiJk7HoLt2cf9b/9LANAc7dznm98PagG1fUOZ9IP5uMB8Q4CPoyNvausapkTt3rNMuvdf3C/o6+czhtdwmwAAAABJRU5ErkJggg== diff --git a/Samples/VizImage2/vizImage2.html b/Samples/VizImage2/vizImage2.html index 84241879..0b30e9af 100644 --- a/Samples/VizImage2/vizImage2.html +++ b/Samples/VizImage2/vizImage2.html @@ -13,8 +13,7 @@ - - + diff --git a/Samples/VizImage2/vizImage2.js b/Samples/VizImage2/vizImage2.js index 53178308..102a755a 100644 --- a/Samples/VizImage2/vizImage2.js +++ b/Samples/VizImage2/vizImage2.js @@ -4,11 +4,11 @@ (function () { $(document).ready(function () { tableau.extensions.initializeAsync().then(function () { - addVizImage(tableau.MarkType.Bar, tableau.MarkType.Bar, 'tableau20_10_0' ); + addVizImage(tableau.MarkType.Bar, tableau.MarkType.Bar, 'tableau20_10_0'); - let markSelector1 = $('#mark-select1'); - let markSelector2 = $('#mark-select2'); - let colorSelector = $('#color-select'); + const markSelector1 = $('#mark-select1'); + const markSelector2 = $('#mark-select2'); + const colorSelector = $('#color-select'); markSelector1.prop('disabled', false); markSelector2.prop('disabled', false); @@ -16,68 +16,68 @@ // updating viz images with new values upon a selector change. markSelector1.change(function () { - addVizImage(markSelector1.val(), markSelector2.val(), colorSelector.val() ); + addVizImage(markSelector1.val(), markSelector2.val(), colorSelector.val()); }); markSelector2.change(function () { - addVizImage(markSelector1.val(), markSelector2.val(), colorSelector.val() ); + addVizImage(markSelector1.val(), markSelector2.val(), colorSelector.val()); }); colorSelector.change(function () { addVizImage(markSelector1.val(), markSelector2.val(), colorSelector.val()); }); - }); + }); }); - function addVizImage (markType1, markType2, colorType) { + function addVizImage (markType1, markType2, colorType) { const vizInputSpec = { - version: 2, - description: 'Example QQConcat viz', - data: { - values: [ - { Segment: 'Consumer', ShipMode: 'First Class', Category: 'Technology', Profit: 11560.75, Sales: 61089.43 }, - { Segment: 'Corporate', ShipMode: 'First Class', Category: 'Technology', Profit: 7235.75, Sales: 39201.43 }, - { Segment: 'Home Office', ShipMode: 'First Class', Category: 'Technology', Profit: 8706.75, Sales: 39074.43 }, - { Segment: 'Consumer', ShipMode: 'First Class', Category: 'Office Supplies', Profit: 7734.74, Sales: 48200.43 }, - { Segment: 'Corporate', ShipMode: 'First Class', Category: 'Office Supplies', Profit: 6299.74, Sales: 31579.43 }, - { Segment: 'Home Office', ShipMode: 'First Class', Category: 'Office Supplies', Profit: 4366.74, Sales: 21552.43 }, - { Segment: 'Consumer', ShipMode: 'First Class', Category: 'Furniture', Profit: 2078.74, Sales: 49880.43 }, - { Segment: 'Corporate', ShipMode: 'First Class', Category: 'Furniture', Profit: 929.75, Sales: 35077.43 }, - { Segment: 'Home Office', ShipMode: 'First Class', Category: 'Furniture', Profit: 58.74, Sales: 25773.43 }, - { Segment: 'Consumer', ShipMode: 'Second Class', Category: 'Technology', Profit: 14430.75, Sales: 72942.43 }, - { Segment: 'Corporate', ShipMode: 'Second Class', Category: 'Technology', Profit: 6819.74, Sales: 41912.43 }, - { Segment: 'Home Office', ShipMode: 'Second Class', Category: 'Technology', Profit: 4902.75, Sales: 27366.43 }, - { Segment: 'Consumer', ShipMode: 'Second Class', Category: 'Office Supplies', Profit: 9752.74, Sales: 71757.43 }, - { Segment: 'Corporate', ShipMode: 'Second Class', Category: 'Office Supplies', Profit: 9809.74, Sales: 62810.43 }, - { Segment: 'Home Office', ShipMode: 'Second Class', Category: 'Office Supplies', Profit: 7506.74, Sales: 26115.43 }, - { Segment: 'Consumer', ShipMode: 'Second Class', Category: 'Furniture', Profit: 763.74, Sales: 86799.43 }, - { Segment: 'Corporate', ShipMode: 'Second Class', Category: 'Furniture', Profit: 1596.74, Sales: 41403.43 }, - { Segment: 'Home Office', ShipMode: 'Second Class', Category: 'Furniture', Profit: 1865.74, Sales: 28086.43 }, - ], + version: 2, + description: 'Example QQConcat viz', + data: { + values: [ + { Segment: 'Consumer', ShipMode: 'First Class', Category: 'Technology', Profit: 11560.75, Sales: 61089.43 }, + { Segment: 'Corporate', ShipMode: 'First Class', Category: 'Technology', Profit: 7235.75, Sales: 39201.43 }, + { Segment: 'Home Office', ShipMode: 'First Class', Category: 'Technology', Profit: 8706.75, Sales: 39074.43 }, + { Segment: 'Consumer', ShipMode: 'First Class', Category: 'Office Supplies', Profit: 7734.74, Sales: 48200.43 }, + { Segment: 'Corporate', ShipMode: 'First Class', Category: 'Office Supplies', Profit: 6299.74, Sales: 31579.43 }, + { Segment: 'Home Office', ShipMode: 'First Class', Category: 'Office Supplies', Profit: 4366.74, Sales: 21552.43 }, + { Segment: 'Consumer', ShipMode: 'First Class', Category: 'Furniture', Profit: 2078.74, Sales: 49880.43 }, + { Segment: 'Corporate', ShipMode: 'First Class', Category: 'Furniture', Profit: 929.75, Sales: 35077.43 }, + { Segment: 'Home Office', ShipMode: 'First Class', Category: 'Furniture', Profit: 58.74, Sales: 25773.43 }, + { Segment: 'Consumer', ShipMode: 'Second Class', Category: 'Technology', Profit: 14430.75, Sales: 72942.43 }, + { Segment: 'Corporate', ShipMode: 'Second Class', Category: 'Technology', Profit: 6819.74, Sales: 41912.43 }, + { Segment: 'Home Office', ShipMode: 'Second Class', Category: 'Technology', Profit: 4902.75, Sales: 27366.43 }, + { Segment: 'Consumer', ShipMode: 'Second Class', Category: 'Office Supplies', Profit: 9752.74, Sales: 71757.43 }, + { Segment: 'Corporate', ShipMode: 'Second Class', Category: 'Office Supplies', Profit: 9809.74, Sales: 62810.43 }, + { Segment: 'Home Office', ShipMode: 'Second Class', Category: 'Office Supplies', Profit: 7506.74, Sales: 26115.43 }, + { Segment: 'Consumer', ShipMode: 'Second Class', Category: 'Furniture', Profit: 763.74, Sales: 86799.43 }, + { Segment: 'Corporate', ShipMode: 'Second Class', Category: 'Furniture', Profit: 1596.74, Sales: 41403.43 }, + { Segment: 'Home Office', ShipMode: 'Second Class', Category: 'Furniture', Profit: 1865.74, Sales: 28086.43 } + ] + }, + vizlayout: { + title: 'Example Combination Chart', + size: { width: 800, height: 600 }, + showcolorlegend: true, + showsizelegend: false, + showrowsgridline: false + }, + columns: [ + { field: 'ShipMode', type: tableau.VizImageEncodingType.Discrete }, + { field: 'Sales', type: tableau.VizImageEncodingType.Continuous }, + { field: 'Profit', type: tableau.VizImageEncodingType.Continuous } + ], + rows: [{ field: 'Segment', type: tableau.VizImageEncodingType.Discrete }], + encodingaxis: 'columns', + defaultencoding: { mark: tableau.MarkType.Bar }, + encodings: [ + { + mark: markType1 }, - vizlayout: { - title: 'Example Combination Chart', - size: {width: 800, height: 600}, - showcolorlegend: true, - showsizelegend:false, - showrowsgridline: false, - }, - columns: [ - { field: 'ShipMode', type: tableau.VizImageEncodingType.Discrete }, - { field: 'Sales', type: tableau.VizImageEncodingType.Continuous }, - { field: 'Profit', type: tableau.VizImageEncodingType.Continuous }, - ], - rows: [{ field: 'Segment', type: tableau.VizImageEncodingType.Discrete }], - encodingaxis: 'columns', - defaultencoding: { mark: tableau.MarkType.Bar }, - encodings: [ - { - mark: markType1, - }, - { + { mark: markType2, - color: { field: 'Category', type: tableau.VizImageEncodingType.Discrete, palette: { name: colorType } }, -}, - ], - }; + color: { field: 'Category', type: tableau.VizImageEncodingType.Discrete, palette: { name: colorType } } + } + ] + }; // defaulting values if null. if (markType1 === null) { @@ -88,24 +88,24 @@ } if (colorType === null) { vizInputSpec.colorType = 'tableau20_10_0'; - } + } // making call to create viz image from the input specifications. tableau.extensions.createVizImageAsync(vizInputSpec).then(function (svg) { - var blob = new Blob([svg], { type: 'image/svg+xml' }); - var url = URL.createObjectURL(blob); - var image = document.createElement('img'); + const blob = new Blob([svg], { type: 'image/svg+xml' }); + const url = URL.createObjectURL(blob); + const image = document.createElement('img'); image.src = url; image.style.maxWidth = '100%'; image.style.maxHeight = '100%'; image.className = 'center-block'; - var vizApiElement = document.getElementById('viz-container'); + const vizApiElement = document.getElementById('viz-container'); // clearing UI and adding in new viz. vizApiElement.innerHTML = ''; vizApiElement.appendChild(image); image.addEventListener('load', function () { return URL.revokeObjectURL(url); }, { once: true }); }, function (err) { console.log(err); - }); + }); } })(); diff --git a/docs/assets/js/search.js b/docs/assets/js/search.js index e93552f3..774d515a 100644 --- a/docs/assets/js/search.js +++ b/docs/assets/js/search.js @@ -1,3 +1,3 @@ var typedoc = typedoc || {}; typedoc.search = typedoc.search || {}; - typedoc.search.data = {"kinds":{"2":"Module","4":"Enumeration","16":"Enumeration member","32":"Variable","256":"Interface","1024":"Property","2048":"Method","65536":"Type literal","2097152":"Object literal","4194304":"Type alias"},"rows":[{"id":0,"kind":2,"name":"Tableau","url":"modules/tableau.html","classes":"tsd-kind-module"},{"id":1,"kind":4,"name":"AnalyticsObjectType","url":"enums/tableau.analyticsobjecttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":2,"kind":16,"name":"Cluster","url":"enums/tableau.analyticsobjecttype.html#cluster","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":3,"kind":16,"name":"Forecast","url":"enums/tableau.analyticsobjecttype.html#forecast","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":4,"kind":16,"name":"TrendLine","url":"enums/tableau.analyticsobjecttype.html#trendline","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":5,"kind":4,"name":"ColumnType","url":"enums/tableau.columntype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":6,"kind":16,"name":"Discrete","url":"enums/tableau.columntype.html#discrete","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ColumnType"},{"id":7,"kind":16,"name":"Continuous","url":"enums/tableau.columntype.html#continuous","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ColumnType"},{"id":8,"kind":4,"name":"ClassNameKey","url":"enums/tableau.classnamekey.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":9,"kind":16,"name":"WorksheetTitle","url":"enums/tableau.classnamekey.html#worksheettitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":10,"kind":16,"name":"Worksheet","url":"enums/tableau.classnamekey.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":11,"kind":16,"name":"Tooltip","url":"enums/tableau.classnamekey.html#tooltip","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":12,"kind":16,"name":"StoryTitle","url":"enums/tableau.classnamekey.html#storytitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":13,"kind":16,"name":"DashboardTitle","url":"enums/tableau.classnamekey.html#dashboardtitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":14,"kind":4,"name":"DashboardObjectType","url":"enums/tableau.dashboardobjecttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":15,"kind":16,"name":"Blank","url":"enums/tableau.dashboardobjecttype.html#blank","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":16,"kind":16,"name":"Worksheet","url":"enums/tableau.dashboardobjecttype.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":17,"kind":16,"name":"QuickFilter","url":"enums/tableau.dashboardobjecttype.html#quickfilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":18,"kind":16,"name":"ParameterControl","url":"enums/tableau.dashboardobjecttype.html#parametercontrol","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":19,"kind":16,"name":"PageFilter","url":"enums/tableau.dashboardobjecttype.html#pagefilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":20,"kind":16,"name":"Legend","url":"enums/tableau.dashboardobjecttype.html#legend","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":21,"kind":16,"name":"Title","url":"enums/tableau.dashboardobjecttype.html#title","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":22,"kind":16,"name":"Text","url":"enums/tableau.dashboardobjecttype.html#text","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":23,"kind":16,"name":"Image","url":"enums/tableau.dashboardobjecttype.html#image","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":24,"kind":16,"name":"WebPage","url":"enums/tableau.dashboardobjecttype.html#webpage","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":25,"kind":16,"name":"Extension","url":"enums/tableau.dashboardobjecttype.html#extension","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":26,"kind":4,"name":"DashboardObjectVisibilityType","url":"enums/tableau.dashboardobjectvisibilitytype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":27,"kind":16,"name":"Show","url":"enums/tableau.dashboardobjectvisibilitytype.html#show","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectVisibilityType"},{"id":28,"kind":16,"name":"Hide","url":"enums/tableau.dashboardobjectvisibilitytype.html#hide","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectVisibilityType"},{"id":29,"kind":4,"name":"DataType","url":"enums/tableau.datatype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":30,"kind":16,"name":"String","url":"enums/tableau.datatype.html#string","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":31,"kind":16,"name":"Int","url":"enums/tableau.datatype.html#int","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":32,"kind":16,"name":"Float","url":"enums/tableau.datatype.html#float","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":33,"kind":16,"name":"Bool","url":"enums/tableau.datatype.html#bool","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":34,"kind":16,"name":"Date","url":"enums/tableau.datatype.html#date","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":35,"kind":16,"name":"DateTime","url":"enums/tableau.datatype.html#datetime","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":36,"kind":16,"name":"Spatial","url":"enums/tableau.datatype.html#spatial","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":37,"kind":4,"name":"DashboardLayoutChange","url":"enums/tableau.dashboardlayoutchange.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":38,"kind":16,"name":"Added","url":"enums/tableau.dashboardlayoutchange.html#added","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":39,"kind":16,"name":"Removed","url":"enums/tableau.dashboardlayoutchange.html#removed","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":40,"kind":16,"name":"IsFloatingChanged","url":"enums/tableau.dashboardlayoutchange.html#isfloatingchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":41,"kind":16,"name":"IsVisibleChanged","url":"enums/tableau.dashboardlayoutchange.html#isvisiblechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":42,"kind":16,"name":"PositionChanged","url":"enums/tableau.dashboardlayoutchange.html#positionchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":43,"kind":16,"name":"SizeChanged","url":"enums/tableau.dashboardlayoutchange.html#sizechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":44,"kind":16,"name":"NameChanged","url":"enums/tableau.dashboardlayoutchange.html#namechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":45,"kind":4,"name":"DateRangeType","url":"enums/tableau.daterangetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":46,"kind":16,"name":"Last","url":"enums/tableau.daterangetype.html#last","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":47,"kind":16,"name":"LastN","url":"enums/tableau.daterangetype.html#lastn","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":48,"kind":16,"name":"Next","url":"enums/tableau.daterangetype.html#next","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":49,"kind":16,"name":"NextN","url":"enums/tableau.daterangetype.html#nextn","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":50,"kind":16,"name":"Current","url":"enums/tableau.daterangetype.html#current","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":51,"kind":16,"name":"ToDate","url":"enums/tableau.daterangetype.html#todate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":52,"kind":4,"name":"EncodingType","url":"enums/tableau.encodingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":53,"kind":16,"name":"Column","url":"enums/tableau.encodingtype.html#column","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":54,"kind":16,"name":"Row","url":"enums/tableau.encodingtype.html#row","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":55,"kind":16,"name":"Page","url":"enums/tableau.encodingtype.html#page","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":56,"kind":16,"name":"Filter","url":"enums/tableau.encodingtype.html#filter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":57,"kind":16,"name":"MarksType","url":"enums/tableau.encodingtype.html#markstype","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":58,"kind":16,"name":"MeasureValues","url":"enums/tableau.encodingtype.html#measurevalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":59,"kind":16,"name":"Color","url":"enums/tableau.encodingtype.html#color","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":60,"kind":16,"name":"Size","url":"enums/tableau.encodingtype.html#size","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":61,"kind":16,"name":"Label","url":"enums/tableau.encodingtype.html#label","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":62,"kind":16,"name":"Detail","url":"enums/tableau.encodingtype.html#detail","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":63,"kind":16,"name":"Tooltip","url":"enums/tableau.encodingtype.html#tooltip","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":64,"kind":16,"name":"Shape","url":"enums/tableau.encodingtype.html#shape","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":65,"kind":16,"name":"Path","url":"enums/tableau.encodingtype.html#path","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":66,"kind":16,"name":"Angle","url":"enums/tableau.encodingtype.html#angle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":67,"kind":4,"name":"FieldAggregationType","url":"enums/tableau.fieldaggregationtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":68,"kind":16,"name":"Sum","url":"enums/tableau.fieldaggregationtype.html#sum","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":69,"kind":16,"name":"Avg","url":"enums/tableau.fieldaggregationtype.html#avg","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":70,"kind":16,"name":"Min","url":"enums/tableau.fieldaggregationtype.html#min","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":71,"kind":16,"name":"Max","url":"enums/tableau.fieldaggregationtype.html#max","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":72,"kind":16,"name":"Stdev","url":"enums/tableau.fieldaggregationtype.html#stdev","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":73,"kind":16,"name":"Stdevp","url":"enums/tableau.fieldaggregationtype.html#stdevp","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":74,"kind":16,"name":"Var","url":"enums/tableau.fieldaggregationtype.html#var","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":75,"kind":16,"name":"Varp","url":"enums/tableau.fieldaggregationtype.html#varp","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":76,"kind":16,"name":"Count","url":"enums/tableau.fieldaggregationtype.html#count","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":77,"kind":16,"name":"Countd","url":"enums/tableau.fieldaggregationtype.html#countd","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":78,"kind":16,"name":"Median","url":"enums/tableau.fieldaggregationtype.html#median","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":79,"kind":16,"name":"Attr","url":"enums/tableau.fieldaggregationtype.html#attr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":80,"kind":16,"name":"None","url":"enums/tableau.fieldaggregationtype.html#none","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":81,"kind":16,"name":"Year","url":"enums/tableau.fieldaggregationtype.html#year","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":82,"kind":16,"name":"Qtr","url":"enums/tableau.fieldaggregationtype.html#qtr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":83,"kind":16,"name":"Month","url":"enums/tableau.fieldaggregationtype.html#month","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":84,"kind":16,"name":"Day","url":"enums/tableau.fieldaggregationtype.html#day","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":85,"kind":16,"name":"Hour","url":"enums/tableau.fieldaggregationtype.html#hour","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":86,"kind":16,"name":"Minute","url":"enums/tableau.fieldaggregationtype.html#minute","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":87,"kind":16,"name":"Second","url":"enums/tableau.fieldaggregationtype.html#second","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":88,"kind":16,"name":"Week","url":"enums/tableau.fieldaggregationtype.html#week","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":89,"kind":16,"name":"Weekday","url":"enums/tableau.fieldaggregationtype.html#weekday","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":90,"kind":16,"name":"MonthYear","url":"enums/tableau.fieldaggregationtype.html#monthyear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":91,"kind":16,"name":"Mdy","url":"enums/tableau.fieldaggregationtype.html#mdy","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":92,"kind":16,"name":"End","url":"enums/tableau.fieldaggregationtype.html#end","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":93,"kind":16,"name":"TruncYear","url":"enums/tableau.fieldaggregationtype.html#truncyear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":94,"kind":16,"name":"TruncQtr","url":"enums/tableau.fieldaggregationtype.html#truncqtr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":95,"kind":16,"name":"TruncMonth","url":"enums/tableau.fieldaggregationtype.html#truncmonth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":96,"kind":16,"name":"TruncWeek","url":"enums/tableau.fieldaggregationtype.html#truncweek","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":97,"kind":16,"name":"TruncDay","url":"enums/tableau.fieldaggregationtype.html#truncday","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":98,"kind":16,"name":"TruncHour","url":"enums/tableau.fieldaggregationtype.html#trunchour","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":99,"kind":16,"name":"TruncMinute","url":"enums/tableau.fieldaggregationtype.html#truncminute","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":100,"kind":16,"name":"TruncSecond","url":"enums/tableau.fieldaggregationtype.html#truncsecond","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":101,"kind":16,"name":"Quart1","url":"enums/tableau.fieldaggregationtype.html#quart1","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":102,"kind":16,"name":"Quart3","url":"enums/tableau.fieldaggregationtype.html#quart3","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":103,"kind":16,"name":"Skewness","url":"enums/tableau.fieldaggregationtype.html#skewness","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":104,"kind":16,"name":"Kurtosis","url":"enums/tableau.fieldaggregationtype.html#kurtosis","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":105,"kind":16,"name":"InOut","url":"enums/tableau.fieldaggregationtype.html#inout","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":106,"kind":16,"name":"User","url":"enums/tableau.fieldaggregationtype.html#user","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":107,"kind":4,"name":"FieldRoleType","url":"enums/tableau.fieldroletype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":108,"kind":16,"name":"Dimension","url":"enums/tableau.fieldroletype.html#dimension","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":109,"kind":16,"name":"Measure","url":"enums/tableau.fieldroletype.html#measure","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":110,"kind":16,"name":"Unknown","url":"enums/tableau.fieldroletype.html#unknown","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":111,"kind":4,"name":"FilterType","url":"enums/tableau.filtertype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":112,"kind":16,"name":"Categorical","url":"enums/tableau.filtertype.html#categorical","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":113,"kind":16,"name":"Range","url":"enums/tableau.filtertype.html#range","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":114,"kind":16,"name":"Hierarchical","url":"enums/tableau.filtertype.html#hierarchical","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":115,"kind":16,"name":"RelativeDate","url":"enums/tableau.filtertype.html#relativedate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":116,"kind":4,"name":"FilterUpdateType","url":"enums/tableau.filterupdatetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":117,"kind":16,"name":"Add","url":"enums/tableau.filterupdatetype.html#add","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":118,"kind":16,"name":"All","url":"enums/tableau.filterupdatetype.html#all","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":119,"kind":16,"name":"Replace","url":"enums/tableau.filterupdatetype.html#replace","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":120,"kind":16,"name":"Remove","url":"enums/tableau.filterupdatetype.html#remove","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":121,"kind":4,"name":"FilterDomainType","url":"enums/tableau.filterdomaintype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":122,"kind":16,"name":"Relevant","url":"enums/tableau.filterdomaintype.html#relevant","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterDomainType"},{"id":123,"kind":16,"name":"Database","url":"enums/tableau.filterdomaintype.html#database","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterDomainType"},{"id":124,"kind":4,"name":"FilterNullOption","url":"enums/tableau.filternulloption.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":125,"kind":16,"name":"NullValues","url":"enums/tableau.filternulloption.html#nullvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":126,"kind":16,"name":"NonNullValues","url":"enums/tableau.filternulloption.html#nonnullvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":127,"kind":16,"name":"AllValues","url":"enums/tableau.filternulloption.html#allvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":128,"kind":4,"name":"IncludeDataValuesOption","url":"enums/tableau.includedatavaluesoption.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":129,"kind":16,"name":"AllValues","url":"enums/tableau.includedatavaluesoption.html#allvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":130,"kind":16,"name":"OnlyNativeValues","url":"enums/tableau.includedatavaluesoption.html#onlynativevalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":131,"kind":16,"name":"OnlyFormattedValues","url":"enums/tableau.includedatavaluesoption.html#onlyformattedvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":132,"kind":4,"name":"MarkType","url":"enums/tableau.marktype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":133,"kind":16,"name":"Bar","url":"enums/tableau.marktype.html#bar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":134,"kind":16,"name":"Line","url":"enums/tableau.marktype.html#line","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":135,"kind":16,"name":"Area","url":"enums/tableau.marktype.html#area","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":136,"kind":16,"name":"Square","url":"enums/tableau.marktype.html#square","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":137,"kind":16,"name":"Circle","url":"enums/tableau.marktype.html#circle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":138,"kind":16,"name":"Shape","url":"enums/tableau.marktype.html#shape","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":139,"kind":16,"name":"Text","url":"enums/tableau.marktype.html#text","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":140,"kind":16,"name":"Map","url":"enums/tableau.marktype.html#map","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":141,"kind":16,"name":"Pie","url":"enums/tableau.marktype.html#pie","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":142,"kind":16,"name":"GanttBar","url":"enums/tableau.marktype.html#ganttbar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":143,"kind":16,"name":"Polygon","url":"enums/tableau.marktype.html#polygon","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":144,"kind":4,"name":"ParameterValueType","url":"enums/tableau.parametervaluetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":145,"kind":16,"name":"All","url":"enums/tableau.parametervaluetype.html#all","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":146,"kind":16,"name":"List","url":"enums/tableau.parametervaluetype.html#list","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":147,"kind":16,"name":"Range","url":"enums/tableau.parametervaluetype.html#range","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":148,"kind":4,"name":"PeriodType","url":"enums/tableau.periodtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":149,"kind":16,"name":"Years","url":"enums/tableau.periodtype.html#years","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":150,"kind":16,"name":"Quarters","url":"enums/tableau.periodtype.html#quarters","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":151,"kind":16,"name":"Months","url":"enums/tableau.periodtype.html#months","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":152,"kind":16,"name":"Weeks","url":"enums/tableau.periodtype.html#weeks","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":153,"kind":16,"name":"Days","url":"enums/tableau.periodtype.html#days","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":154,"kind":16,"name":"Hours","url":"enums/tableau.periodtype.html#hours","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":155,"kind":16,"name":"Minutes","url":"enums/tableau.periodtype.html#minutes","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":156,"kind":16,"name":"Seconds","url":"enums/tableau.periodtype.html#seconds","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":157,"kind":4,"name":"QuickTableCalcType","url":"enums/tableau.quicktablecalctype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":158,"kind":16,"name":"RunningTotal","url":"enums/tableau.quicktablecalctype.html#runningtotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":159,"kind":16,"name":"Difference","url":"enums/tableau.quicktablecalctype.html#difference","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":160,"kind":16,"name":"PercentDifference","url":"enums/tableau.quicktablecalctype.html#percentdifference","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":161,"kind":16,"name":"PercentOfTotal","url":"enums/tableau.quicktablecalctype.html#percentoftotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":162,"kind":16,"name":"Rank","url":"enums/tableau.quicktablecalctype.html#rank","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":163,"kind":16,"name":"Percentile","url":"enums/tableau.quicktablecalctype.html#percentile","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":164,"kind":16,"name":"MovingAverage","url":"enums/tableau.quicktablecalctype.html#movingaverage","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":165,"kind":16,"name":"YTDTotal","url":"enums/tableau.quicktablecalctype.html#ytdtotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":166,"kind":16,"name":"CompoundGrowthRate","url":"enums/tableau.quicktablecalctype.html#compoundgrowthrate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":167,"kind":16,"name":"YearOverYearGrowth","url":"enums/tableau.quicktablecalctype.html#yearoveryeargrowth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":168,"kind":16,"name":"YTDGrowth","url":"enums/tableau.quicktablecalctype.html#ytdgrowth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":169,"kind":16,"name":"Undefined","url":"enums/tableau.quicktablecalctype.html#undefined","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":170,"kind":4,"name":"SelectionUpdateType","url":"enums/tableau.selectionupdatetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":171,"kind":16,"name":"Replace","url":"enums/tableau.selectionupdatetype.html#replace","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":172,"kind":16,"name":"Add","url":"enums/tableau.selectionupdatetype.html#add","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":173,"kind":16,"name":"Remove","url":"enums/tableau.selectionupdatetype.html#remove","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":174,"kind":4,"name":"SheetType","url":"enums/tableau.sheettype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":175,"kind":16,"name":"Dashboard","url":"enums/tableau.sheettype.html#dashboard","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":176,"kind":16,"name":"Story","url":"enums/tableau.sheettype.html#story","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":177,"kind":16,"name":"Worksheet","url":"enums/tableau.sheettype.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":178,"kind":4,"name":"SortDirection","url":"enums/tableau.sortdirection.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":179,"kind":16,"name":"Increasing","url":"enums/tableau.sortdirection.html#increasing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SortDirection"},{"id":180,"kind":16,"name":"Decreasing","url":"enums/tableau.sortdirection.html#decreasing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SortDirection"},{"id":181,"kind":4,"name":"TrendLineModelType","url":"enums/tableau.trendlinemodeltype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":182,"kind":16,"name":"Linear","url":"enums/tableau.trendlinemodeltype.html#linear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":183,"kind":16,"name":"Logarithmic","url":"enums/tableau.trendlinemodeltype.html#logarithmic","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":184,"kind":16,"name":"Exponential","url":"enums/tableau.trendlinemodeltype.html#exponential","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":185,"kind":16,"name":"Polynomial","url":"enums/tableau.trendlinemodeltype.html#polynomial","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":186,"kind":4,"name":"ReplaySpeedType","url":"enums/tableau.replayspeedtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":187,"kind":16,"name":"Slow","url":"enums/tableau.replayspeedtype.html#slow","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":188,"kind":16,"name":"Normal","url":"enums/tableau.replayspeedtype.html#normal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":189,"kind":16,"name":"Fast","url":"enums/tableau.replayspeedtype.html#fast","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":190,"kind":4,"name":"HierarchicalLevelSelectionState","url":"enums/tableau.hierarchicallevelselectionstate.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":191,"kind":16,"name":"AllSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#allselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":192,"kind":16,"name":"NoneSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#noneselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":193,"kind":16,"name":"SomeSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#someselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":194,"kind":16,"name":"UnknownSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#unknownselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":195,"kind":4194304,"name":"ZoneVisibilityType","url":"modules/tableau.html#zonevisibilitytype","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"Tableau"},{"id":196,"kind":2097152,"name":"ZoneVisibilityType","url":"modules/tableau.html#zonevisibilitytype-1","classes":"tsd-kind-object-literal tsd-parent-kind-module","parent":"Tableau"},{"id":197,"kind":256,"name":"MarksCollection","url":"interfaces/markscollection.html","classes":"tsd-kind-interface"},{"id":198,"kind":1024,"name":"data","url":"interfaces/markscollection.html#data","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarksCollection"},{"id":199,"kind":256,"name":"MarkInfo","url":"interfaces/markinfo.html","classes":"tsd-kind-interface"},{"id":200,"kind":1024,"name":"type","url":"interfaces/markinfo.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":201,"kind":1024,"name":"color","url":"interfaces/markinfo.html#color","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":202,"kind":1024,"name":"tupleId","url":"interfaces/markinfo.html#tupleid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":203,"kind":256,"name":"SelectionCriteria","url":"interfaces/selectioncriteria.html","classes":"tsd-kind-interface"},{"id":204,"kind":1024,"name":"fieldName","url":"interfaces/selectioncriteria.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SelectionCriteria"},{"id":205,"kind":1024,"name":"value","url":"interfaces/selectioncriteria.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SelectionCriteria"},{"id":206,"kind":256,"name":"RangeValue","url":"interfaces/rangevalue.html","classes":"tsd-kind-interface"},{"id":207,"kind":1024,"name":"min","url":"interfaces/rangevalue.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":208,"kind":1024,"name":"max","url":"interfaces/rangevalue.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":209,"kind":1024,"name":"nullOption","url":"interfaces/rangevalue.html#nulloption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":210,"kind":4194304,"name":"CategoricalValue","url":"globals.html#categoricalvalue","classes":"tsd-kind-type-alias"},{"id":211,"kind":256,"name":"Column","url":"interfaces/column.html","classes":"tsd-kind-interface"},{"id":212,"kind":1024,"name":"fieldName","url":"interfaces/column.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":213,"kind":1024,"name":"fieldId","url":"interfaces/column.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":214,"kind":1024,"name":"dataType","url":"interfaces/column.html#datatype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":215,"kind":1024,"name":"isReferenced","url":"interfaces/column.html#isreferenced","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":216,"kind":1024,"name":"index","url":"interfaces/column.html#index","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":217,"kind":256,"name":"DataTable","url":"interfaces/datatable.html","classes":"tsd-kind-interface"},{"id":218,"kind":1024,"name":"name","url":"interfaces/datatable.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":219,"kind":1024,"name":"data","url":"interfaces/datatable.html#data","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":220,"kind":1024,"name":"marksInfo","url":"interfaces/datatable.html#marksinfo","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":221,"kind":1024,"name":"columns","url":"interfaces/datatable.html#columns","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":222,"kind":1024,"name":"totalRowCount","url":"interfaces/datatable.html#totalrowcount","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":223,"kind":1024,"name":"isTotalRowCountLimited","url":"interfaces/datatable.html#istotalrowcountlimited","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":224,"kind":1024,"name":"isSummaryData","url":"interfaces/datatable.html#issummarydata","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":225,"kind":256,"name":"DataValue","url":"interfaces/datavalue.html","classes":"tsd-kind-interface"},{"id":226,"kind":1024,"name":"value","url":"interfaces/datavalue.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":227,"kind":1024,"name":"nativeValue","url":"interfaces/datavalue.html#nativevalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":228,"kind":1024,"name":"formattedValue","url":"interfaces/datavalue.html#formattedvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":229,"kind":256,"name":"GetSummaryDataOptions","url":"interfaces/getsummarydataoptions.html","classes":"tsd-kind-interface"},{"id":230,"kind":1024,"name":"ignoreAliases","url":"interfaces/getsummarydataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":231,"kind":1024,"name":"ignoreSelection","url":"interfaces/getsummarydataoptions.html#ignoreselection","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":232,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/getsummarydataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":233,"kind":1024,"name":"maxRows","url":"interfaces/getsummarydataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":234,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/getsummarydataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":235,"kind":256,"name":"GetUnderlyingDataOptions","url":"interfaces/getunderlyingdataoptions.html","classes":"tsd-kind-interface"},{"id":236,"kind":1024,"name":"includeAllColumns","url":"interfaces/getunderlyingdataoptions.html#includeallcolumns","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetUnderlyingDataOptions"},{"id":237,"kind":1024,"name":"ignoreAliases","url":"interfaces/getunderlyingdataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":238,"kind":1024,"name":"ignoreSelection","url":"interfaces/getunderlyingdataoptions.html#ignoreselection","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":239,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/getunderlyingdataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":240,"kind":1024,"name":"maxRows","url":"interfaces/getunderlyingdataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":241,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/getunderlyingdataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":242,"kind":256,"name":"DataSource","url":"interfaces/datasource.html","classes":"tsd-kind-interface"},{"id":243,"kind":1024,"name":"name","url":"interfaces/datasource.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":244,"kind":1024,"name":"id","url":"interfaces/datasource.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":245,"kind":1024,"name":"fields","url":"interfaces/datasource.html#fields","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":246,"kind":1024,"name":"extractUpdateTime","url":"interfaces/datasource.html#extractupdatetime","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":247,"kind":1024,"name":"isExtract","url":"interfaces/datasource.html#isextract","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":248,"kind":1024,"name":"isPublished","url":"interfaces/datasource.html#ispublished","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":249,"kind":2048,"name":"refreshAsync","url":"interfaces/datasource.html#refreshasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":250,"kind":2048,"name":"getActiveTablesAsync","url":"interfaces/datasource.html#getactivetablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":251,"kind":2048,"name":"getConnectionSummariesAsync","url":"interfaces/datasource.html#getconnectionsummariesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":252,"kind":2048,"name":"getUnderlyingDataAsync","url":"interfaces/datasource.html#getunderlyingdataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":253,"kind":2048,"name":"getLogicalTablesAsync","url":"interfaces/datasource.html#getlogicaltablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":254,"kind":2048,"name":"getLogicalTableDataAsync","url":"interfaces/datasource.html#getlogicaltabledataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":255,"kind":256,"name":"Field","url":"interfaces/field.html","classes":"tsd-kind-interface"},{"id":256,"kind":1024,"name":"name","url":"interfaces/field.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":257,"kind":1024,"name":"id","url":"interfaces/field.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":258,"kind":1024,"name":"description","url":"interfaces/field.html#description","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":259,"kind":1024,"name":"dataSource","url":"interfaces/field.html#datasource","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":260,"kind":1024,"name":"role","url":"interfaces/field.html#role","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":261,"kind":1024,"name":"isHidden","url":"interfaces/field.html#ishidden","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":262,"kind":1024,"name":"isGenerated","url":"interfaces/field.html#isgenerated","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":263,"kind":1024,"name":"isCalculatedField","url":"interfaces/field.html#iscalculatedfield","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":264,"kind":1024,"name":"aggregation","url":"interfaces/field.html#aggregation","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":265,"kind":1024,"name":"columnType","url":"interfaces/field.html#columntype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":266,"kind":1024,"name":"isCombinedField","url":"interfaces/field.html#iscombinedfield","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":267,"kind":256,"name":"ConnectionSummary","url":"interfaces/connectionsummary.html","classes":"tsd-kind-interface"},{"id":268,"kind":1024,"name":"name","url":"interfaces/connectionsummary.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":269,"kind":1024,"name":"id","url":"interfaces/connectionsummary.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":270,"kind":1024,"name":"type","url":"interfaces/connectionsummary.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":271,"kind":1024,"name":"serverURI","url":"interfaces/connectionsummary.html#serveruri","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":272,"kind":256,"name":"TableSummary","url":"interfaces/tablesummary.html","classes":"tsd-kind-interface"},{"id":273,"kind":1024,"name":"name","url":"interfaces/tablesummary.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":274,"kind":1024,"name":"id","url":"interfaces/tablesummary.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":275,"kind":1024,"name":"connectionId","url":"interfaces/tablesummary.html#connectionid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":276,"kind":1024,"name":"customSQL","url":"interfaces/tablesummary.html#customsql","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":277,"kind":256,"name":"DataSourceUnderlyingDataOptions","url":"interfaces/datasourceunderlyingdataoptions.html","classes":"tsd-kind-interface"},{"id":278,"kind":1024,"name":"ignoreAliases","url":"interfaces/datasourceunderlyingdataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":279,"kind":1024,"name":"columnsToInclude","url":"interfaces/datasourceunderlyingdataoptions.html#columnstoinclude","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":280,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/datasourceunderlyingdataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":281,"kind":1024,"name":"maxRows","url":"interfaces/datasourceunderlyingdataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":282,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/datasourceunderlyingdataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":283,"kind":256,"name":"LogicalTable","url":"interfaces/logicaltable.html","classes":"tsd-kind-interface"},{"id":284,"kind":1024,"name":"id","url":"interfaces/logicaltable.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"LogicalTable"},{"id":285,"kind":1024,"name":"caption","url":"interfaces/logicaltable.html#caption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"LogicalTable"},{"id":286,"kind":256,"name":"Filter","url":"interfaces/filter.html","classes":"tsd-kind-interface"},{"id":287,"kind":1024,"name":"worksheetName","url":"interfaces/filter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":288,"kind":1024,"name":"filterType","url":"interfaces/filter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":289,"kind":1024,"name":"fieldName","url":"interfaces/filter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":290,"kind":1024,"name":"fieldId","url":"interfaces/filter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":291,"kind":2048,"name":"getFieldAsync","url":"interfaces/filter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":292,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/filter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":293,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/filter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":294,"kind":256,"name":"CategoricalFilter","url":"interfaces/categoricalfilter.html","classes":"tsd-kind-interface"},{"id":295,"kind":1024,"name":"isAllSelected","url":"interfaces/categoricalfilter.html#isallselected","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":296,"kind":1024,"name":"appliedValues","url":"interfaces/categoricalfilter.html#appliedvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":297,"kind":1024,"name":"isExcludeMode","url":"interfaces/categoricalfilter.html#isexcludemode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":298,"kind":2048,"name":"getDomainAsync","url":"interfaces/categoricalfilter.html#getdomainasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":299,"kind":1024,"name":"worksheetName","url":"interfaces/categoricalfilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":300,"kind":1024,"name":"filterType","url":"interfaces/categoricalfilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":301,"kind":1024,"name":"fieldName","url":"interfaces/categoricalfilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":302,"kind":1024,"name":"fieldId","url":"interfaces/categoricalfilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":303,"kind":2048,"name":"getFieldAsync","url":"interfaces/categoricalfilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":304,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/categoricalfilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":305,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/categoricalfilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":306,"kind":256,"name":"HierarchicalFilter","url":"interfaces/hierarchicalfilter.html","classes":"tsd-kind-interface"},{"id":307,"kind":1024,"name":"dimensionName","url":"interfaces/hierarchicalfilter.html#dimensionname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":308,"kind":1024,"name":"hierarchyCaption","url":"interfaces/hierarchicalfilter.html#hierarchycaption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":309,"kind":1024,"name":"numberOfLevels","url":"interfaces/hierarchicalfilter.html#numberoflevels","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":310,"kind":1024,"name":"levelDetails","url":"interfaces/hierarchicalfilter.html#leveldetails","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":311,"kind":1024,"name":"isAllSelected","url":"interfaces/hierarchicalfilter.html#isallselected","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":312,"kind":1024,"name":"appliedValues","url":"interfaces/hierarchicalfilter.html#appliedvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":313,"kind":1024,"name":"worksheetName","url":"interfaces/hierarchicalfilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":314,"kind":1024,"name":"filterType","url":"interfaces/hierarchicalfilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":315,"kind":1024,"name":"fieldName","url":"interfaces/hierarchicalfilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":316,"kind":1024,"name":"fieldId","url":"interfaces/hierarchicalfilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":317,"kind":2048,"name":"getFieldAsync","url":"interfaces/hierarchicalfilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":318,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/hierarchicalfilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":319,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/hierarchicalfilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":320,"kind":256,"name":"RangeFilter","url":"interfaces/rangefilter.html","classes":"tsd-kind-interface"},{"id":321,"kind":1024,"name":"minValue","url":"interfaces/rangefilter.html#minvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":322,"kind":1024,"name":"maxValue","url":"interfaces/rangefilter.html#maxvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":323,"kind":1024,"name":"includeNullValues","url":"interfaces/rangefilter.html#includenullvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":324,"kind":2048,"name":"getDomainAsync","url":"interfaces/rangefilter.html#getdomainasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"RangeFilter"},{"id":325,"kind":1024,"name":"worksheetName","url":"interfaces/rangefilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":326,"kind":1024,"name":"filterType","url":"interfaces/rangefilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":327,"kind":1024,"name":"fieldName","url":"interfaces/rangefilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":328,"kind":1024,"name":"fieldId","url":"interfaces/rangefilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":329,"kind":2048,"name":"getFieldAsync","url":"interfaces/rangefilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":330,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/rangefilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":331,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/rangefilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":332,"kind":256,"name":"RelativeDateFilter","url":"interfaces/relativedatefilter.html","classes":"tsd-kind-interface"},{"id":333,"kind":1024,"name":"anchorDate","url":"interfaces/relativedatefilter.html#anchordate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":334,"kind":1024,"name":"periodType","url":"interfaces/relativedatefilter.html#periodtype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":335,"kind":1024,"name":"rangeType","url":"interfaces/relativedatefilter.html#rangetype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":336,"kind":1024,"name":"rangeN","url":"interfaces/relativedatefilter.html#rangen","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":337,"kind":1024,"name":"worksheetName","url":"interfaces/relativedatefilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":338,"kind":1024,"name":"filterType","url":"interfaces/relativedatefilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":339,"kind":1024,"name":"fieldName","url":"interfaces/relativedatefilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":340,"kind":1024,"name":"fieldId","url":"interfaces/relativedatefilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":341,"kind":2048,"name":"getFieldAsync","url":"interfaces/relativedatefilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":342,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/relativedatefilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":343,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/relativedatefilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":344,"kind":256,"name":"FilterOptions","url":"interfaces/filteroptions.html","classes":"tsd-kind-interface"},{"id":345,"kind":1024,"name":"isExcludeMode","url":"interfaces/filteroptions.html#isexcludemode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FilterOptions"},{"id":346,"kind":256,"name":"RangeFilterOptions","url":"interfaces/rangefilteroptions.html","classes":"tsd-kind-interface"},{"id":347,"kind":1024,"name":"min","url":"interfaces/rangefilteroptions.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":348,"kind":1024,"name":"max","url":"interfaces/rangefilteroptions.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":349,"kind":1024,"name":"nullOption","url":"interfaces/rangefilteroptions.html#nulloption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":350,"kind":256,"name":"RelativeDateFilterOptions","url":"interfaces/relativedatefilteroptions.html","classes":"tsd-kind-interface"},{"id":351,"kind":1024,"name":"anchorDate","url":"interfaces/relativedatefilteroptions.html#anchordate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":352,"kind":1024,"name":"periodType","url":"interfaces/relativedatefilteroptions.html#periodtype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":353,"kind":1024,"name":"rangeType","url":"interfaces/relativedatefilteroptions.html#rangetype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":354,"kind":1024,"name":"rangeN","url":"interfaces/relativedatefilteroptions.html#rangen","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":355,"kind":256,"name":"RangeDomain","url":"interfaces/rangedomain.html","classes":"tsd-kind-interface"},{"id":356,"kind":1024,"name":"type","url":"interfaces/rangedomain.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":357,"kind":1024,"name":"min","url":"interfaces/rangedomain.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":358,"kind":1024,"name":"max","url":"interfaces/rangedomain.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":359,"kind":256,"name":"CategoricalDomain","url":"interfaces/categoricaldomain.html","classes":"tsd-kind-interface"},{"id":360,"kind":1024,"name":"type","url":"interfaces/categoricaldomain.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalDomain"},{"id":361,"kind":1024,"name":"values","url":"interfaces/categoricaldomain.html#values","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalDomain"},{"id":362,"kind":256,"name":"HierarchicalFilterDataValue","url":"interfaces/hierarchicalfilterdatavalue.html","classes":"tsd-kind-interface"},{"id":363,"kind":1024,"name":"value","url":"interfaces/hierarchicalfilterdatavalue.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":364,"kind":1024,"name":"hierarchicalPath","url":"interfaces/hierarchicalfilterdatavalue.html#hierarchicalpath","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":365,"kind":1024,"name":"level","url":"interfaces/hierarchicalfilterdatavalue.html#level","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":366,"kind":256,"name":"HierarchicalLevelDetail","url":"interfaces/hierarchicalleveldetail.html","classes":"tsd-kind-interface"},{"id":367,"kind":1024,"name":"name","url":"interfaces/hierarchicalleveldetail.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevelDetail"},{"id":368,"kind":1024,"name":"levelSelectionState","url":"interfaces/hierarchicalleveldetail.html#levelselectionstate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevelDetail"},{"id":369,"kind":256,"name":"WorkbookFormatting","url":"interfaces/workbookformatting.html","classes":"tsd-kind-interface"},{"id":370,"kind":1024,"name":"formattingSheets","url":"interfaces/workbookformatting.html#formattingsheets","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WorkbookFormatting"},{"id":371,"kind":256,"name":"FormattingSheet","url":"interfaces/formattingsheet.html","classes":"tsd-kind-interface"},{"id":372,"kind":1024,"name":"classNameKey","url":"interfaces/formattingsheet.html#classnamekey","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FormattingSheet"},{"id":373,"kind":1024,"name":"cssProperties","url":"interfaces/formattingsheet.html#cssproperties","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FormattingSheet"},{"id":374,"kind":256,"name":"Workbook","url":"interfaces/workbook.html","classes":"tsd-kind-interface"},{"id":375,"kind":2048,"name":"getAllDataSourcesAsync","url":"interfaces/workbook.html#getalldatasourcesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Workbook"},{"id":376,"kind":256,"name":"Size","url":"interfaces/size.html","classes":"tsd-kind-interface"},{"id":377,"kind":1024,"name":"height","url":"interfaces/size.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Size"},{"id":378,"kind":1024,"name":"width","url":"interfaces/size.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Size"},{"id":379,"kind":256,"name":"Parameter","url":"interfaces/parameter.html","classes":"tsd-kind-interface"},{"id":380,"kind":1024,"name":"name","url":"interfaces/parameter.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":381,"kind":1024,"name":"currentValue","url":"interfaces/parameter.html#currentvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":382,"kind":1024,"name":"dataType","url":"interfaces/parameter.html#datatype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":383,"kind":1024,"name":"allowableValues","url":"interfaces/parameter.html#allowablevalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":384,"kind":1024,"name":"id","url":"interfaces/parameter.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":385,"kind":2048,"name":"changeValueAsync","url":"interfaces/parameter.html#changevalueasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Parameter"},{"id":386,"kind":2048,"name":"addEventListener","url":"interfaces/parameter.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Parameter"},{"id":387,"kind":2048,"name":"removeEventListener","url":"interfaces/parameter.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Parameter"},{"id":388,"kind":256,"name":"ParameterDomainRestriction","url":"interfaces/parameterdomainrestriction.html","classes":"tsd-kind-interface"},{"id":389,"kind":1024,"name":"type","url":"interfaces/parameterdomainrestriction.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":390,"kind":1024,"name":"allowableValues","url":"interfaces/parameterdomainrestriction.html#allowablevalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":391,"kind":1024,"name":"minValue","url":"interfaces/parameterdomainrestriction.html#minvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":392,"kind":1024,"name":"maxValue","url":"interfaces/parameterdomainrestriction.html#maxvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":393,"kind":1024,"name":"stepSize","url":"interfaces/parameterdomainrestriction.html#stepsize","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":394,"kind":1024,"name":"dateStepPeriod","url":"interfaces/parameterdomainrestriction.html#datestepperiod","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":395,"kind":256,"name":"Sheet","url":"interfaces/sheet.html","classes":"tsd-kind-interface"},{"id":396,"kind":1024,"name":"name","url":"interfaces/sheet.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":397,"kind":1024,"name":"sheetType","url":"interfaces/sheet.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":398,"kind":2048,"name":"findParameterAsync","url":"interfaces/sheet.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Sheet"},{"id":399,"kind":1024,"name":"size","url":"interfaces/sheet.html#size","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":400,"kind":2048,"name":"getParametersAsync","url":"interfaces/sheet.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Sheet"},{"id":401,"kind":2048,"name":"addEventListener","url":"interfaces/sheet.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Sheet"},{"id":402,"kind":2048,"name":"removeEventListener","url":"interfaces/sheet.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Sheet"},{"id":403,"kind":256,"name":"Worksheet","url":"interfaces/worksheet.html","classes":"tsd-kind-interface"},{"id":404,"kind":1024,"name":"parentDashboard","url":"interfaces/worksheet.html#parentdashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Worksheet"},{"id":405,"kind":2048,"name":"applyFilterAsync","url":"interfaces/worksheet.html#applyfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":406,"kind":2048,"name":"applyRangeFilterAsync","url":"interfaces/worksheet.html#applyrangefilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":407,"kind":2048,"name":"clearFilterAsync","url":"interfaces/worksheet.html#clearfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":408,"kind":2048,"name":"applyHierarchicalFilterAsync","url":"interfaces/worksheet.html#applyhierarchicalfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":409,"kind":2048,"name":"applyRelativeDateFilterAsync","url":"interfaces/worksheet.html#applyrelativedatefilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":410,"kind":2048,"name":"getDataSourcesAsync","url":"interfaces/worksheet.html#getdatasourcesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":411,"kind":2048,"name":"getFiltersAsync","url":"interfaces/worksheet.html#getfiltersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":412,"kind":2048,"name":"getHighlightedMarksAsync","url":"interfaces/worksheet.html#gethighlightedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":413,"kind":2048,"name":"getSelectedMarksAsync","url":"interfaces/worksheet.html#getselectedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":414,"kind":2048,"name":"getSummaryDataAsync","url":"interfaces/worksheet.html#getsummarydataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":415,"kind":2048,"name":"getSummaryColumnsInfoAsync","url":"interfaces/worksheet.html#getsummarycolumnsinfoasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":416,"kind":2048,"name":"getUnderlyingDataAsync","url":"interfaces/worksheet.html#getunderlyingdataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":417,"kind":2048,"name":"getUnderlyingTablesAsync","url":"interfaces/worksheet.html#getunderlyingtablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":418,"kind":2048,"name":"getUnderlyingTableDataAsync","url":"interfaces/worksheet.html#getunderlyingtabledataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":419,"kind":2048,"name":"selectMarksByValueAsync","url":"interfaces/worksheet.html#selectmarksbyvalueasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":420,"kind":2048,"name":"clearSelectedMarksAsync","url":"interfaces/worksheet.html#clearselectedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":421,"kind":1024,"name":"name","url":"interfaces/worksheet.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":422,"kind":1024,"name":"sheetType","url":"interfaces/worksheet.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":423,"kind":2048,"name":"findParameterAsync","url":"interfaces/worksheet.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":424,"kind":1024,"name":"size","url":"interfaces/worksheet.html#size","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":425,"kind":2048,"name":"getParametersAsync","url":"interfaces/worksheet.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":426,"kind":2048,"name":"addEventListener","url":"interfaces/worksheet.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":427,"kind":2048,"name":"removeEventListener","url":"interfaces/worksheet.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":428,"kind":256,"name":"Dashboard","url":"interfaces/dashboard.html","classes":"tsd-kind-interface"},{"id":429,"kind":1024,"name":"objects","url":"interfaces/dashboard.html#objects","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Dashboard"},{"id":430,"kind":1024,"name":"worksheets","url":"interfaces/dashboard.html#worksheets","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Dashboard"},{"id":431,"kind":2048,"name":"setZoneVisibilityAsync","url":"interfaces/dashboard.html#setzonevisibilityasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":432,"kind":2048,"name":"setDashboardObjectVisibilityAsync","url":"interfaces/dashboard.html#setdashboardobjectvisibilityasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":433,"kind":2048,"name":"getDashboardObjectById","url":"interfaces/dashboard.html#getdashboardobjectbyid","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":434,"kind":2048,"name":"moveAndResizeDashboardObjectsAsync","url":"interfaces/dashboard.html#moveandresizedashboardobjectsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":435,"kind":2048,"name":"replayAnimationAsync","url":"interfaces/dashboard.html#replayanimationasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":436,"kind":2048,"name":"getFiltersAsync","url":"interfaces/dashboard.html#getfiltersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":437,"kind":2048,"name":"applyFilterAsync","url":"interfaces/dashboard.html#applyfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":438,"kind":1024,"name":"name","url":"interfaces/dashboard.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":439,"kind":1024,"name":"sheetType","url":"interfaces/dashboard.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":440,"kind":2048,"name":"findParameterAsync","url":"interfaces/dashboard.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":441,"kind":1024,"name":"size","url":"interfaces/dashboard.html#size","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":442,"kind":2048,"name":"getParametersAsync","url":"interfaces/dashboard.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":443,"kind":2048,"name":"addEventListener","url":"interfaces/dashboard.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":444,"kind":2048,"name":"removeEventListener","url":"interfaces/dashboard.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":445,"kind":256,"name":"DashboardObjectPositionAndSizeUpdate","url":"interfaces/dashboardobjectpositionandsizeupdate.html","classes":"tsd-kind-interface"},{"id":446,"kind":1024,"name":"dashboardObjectID","url":"interfaces/dashboardobjectpositionandsizeupdate.html#dashboardobjectid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":447,"kind":1024,"name":"x","url":"interfaces/dashboardobjectpositionandsizeupdate.html#x","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":448,"kind":1024,"name":"y","url":"interfaces/dashboardobjectpositionandsizeupdate.html#y","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":449,"kind":1024,"name":"width","url":"interfaces/dashboardobjectpositionandsizeupdate.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":450,"kind":1024,"name":"height","url":"interfaces/dashboardobjectpositionandsizeupdate.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":451,"kind":256,"name":"DashboardObject","url":"interfaces/dashboardobject.html","classes":"tsd-kind-interface"},{"id":452,"kind":1024,"name":"dashboard","url":"interfaces/dashboardobject.html#dashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":453,"kind":1024,"name":"type","url":"interfaces/dashboardobject.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":454,"kind":1024,"name":"position","url":"interfaces/dashboardobject.html#position","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":455,"kind":1024,"name":"size","url":"interfaces/dashboardobject.html#size","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":456,"kind":1024,"name":"worksheet","url":"interfaces/dashboardobject.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":457,"kind":1024,"name":"name","url":"interfaces/dashboardobject.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":458,"kind":1024,"name":"isFloating","url":"interfaces/dashboardobject.html#isfloating","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":459,"kind":1024,"name":"isVisible","url":"interfaces/dashboardobject.html#isvisible","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":460,"kind":1024,"name":"id","url":"interfaces/dashboardobject.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":461,"kind":256,"name":"Point","url":"interfaces/point.html","classes":"tsd-kind-interface"},{"id":462,"kind":1024,"name":"x","url":"interfaces/point.html#x","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Point"},{"id":463,"kind":1024,"name":"y","url":"interfaces/point.html#y","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Point"},{"id":464,"kind":256,"name":"HierarchicalLevels","url":"interfaces/hierarchicallevels.html","classes":"tsd-kind-interface"},{"id":465,"kind":1024,"name":"levels","url":"interfaces/hierarchicallevels.html#levels","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevels"},{"id":466,"kind":4194304,"name":"ZoneVisibilityMap","url":"globals.html#zonevisibilitymap","classes":"tsd-kind-type-alias"},{"id":467,"kind":4194304,"name":"DashboardObjectVisibilityMap","url":"globals.html#dashboardobjectvisibilitymap","classes":"tsd-kind-type-alias"},{"id":468,"kind":4194304,"name":"DashboardObjectPositionAndSizeUpdateArray","url":"globals.html#dashboardobjectpositionandsizeupdatearray","classes":"tsd-kind-type-alias"},{"id":469,"kind":256,"name":"DashboardContent","url":"interfaces/dashboardcontent.html","classes":"tsd-kind-interface"},{"id":470,"kind":1024,"name":"dashboard","url":"interfaces/dashboardcontent.html#dashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardContent"},{"id":471,"kind":256,"name":"Environment","url":"interfaces/environment.html","classes":"tsd-kind-interface"},{"id":472,"kind":1024,"name":"apiVersion","url":"interfaces/environment.html#apiversion","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":473,"kind":1024,"name":"context","url":"interfaces/environment.html#context","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":474,"kind":1024,"name":"language","url":"interfaces/environment.html#language","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":475,"kind":1024,"name":"country","url":"interfaces/environment.html#country","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":476,"kind":1024,"name":"workbookFormatting","url":"interfaces/environment.html#workbookformatting","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":477,"kind":1024,"name":"locale","url":"interfaces/environment.html#locale","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":478,"kind":1024,"name":"mode","url":"interfaces/environment.html#mode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":479,"kind":1024,"name":"operatingSystem","url":"interfaces/environment.html#operatingsystem","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":480,"kind":1024,"name":"tableauVersion","url":"interfaces/environment.html#tableauversion","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":481,"kind":256,"name":"Settings","url":"interfaces/settings.html","classes":"tsd-kind-interface"},{"id":482,"kind":2048,"name":"erase","url":"interfaces/settings.html#erase","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":483,"kind":2048,"name":"get","url":"interfaces/settings.html#get","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":484,"kind":2048,"name":"getAll","url":"interfaces/settings.html#getall","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":485,"kind":1024,"name":"isModified","url":"interfaces/settings.html#ismodified","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Settings"},{"id":486,"kind":2048,"name":"saveAsync","url":"interfaces/settings.html#saveasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":487,"kind":2048,"name":"set","url":"interfaces/settings.html#set","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":488,"kind":2048,"name":"addEventListener","url":"interfaces/settings.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Settings"},{"id":489,"kind":2048,"name":"removeEventListener","url":"interfaces/settings.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Settings"},{"id":490,"kind":256,"name":"UI","url":"interfaces/ui.html","classes":"tsd-kind-interface"},{"id":491,"kind":2048,"name":"displayDialogAsync","url":"interfaces/ui.html#displaydialogasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"UI"},{"id":492,"kind":2048,"name":"closeDialog","url":"interfaces/ui.html#closedialog","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"UI"},{"id":493,"kind":256,"name":"DialogOptions","url":"interfaces/dialogoptions.html","classes":"tsd-kind-interface"},{"id":494,"kind":1024,"name":"width","url":"interfaces/dialogoptions.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DialogOptions"},{"id":495,"kind":1024,"name":"height","url":"interfaces/dialogoptions.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DialogOptions"},{"id":496,"kind":256,"name":"Extensions","url":"interfaces/extensions.html","classes":"tsd-kind-interface"},{"id":497,"kind":2048,"name":"initializeAsync","url":"interfaces/extensions.html#initializeasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":498,"kind":2048,"name":"initializeDialogAsync","url":"interfaces/extensions.html#initializedialogasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":499,"kind":1024,"name":"dashboardContent","url":"interfaces/extensions.html#dashboardcontent","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":500,"kind":1024,"name":"environment","url":"interfaces/extensions.html#environment","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":501,"kind":1024,"name":"settings","url":"interfaces/extensions.html#settings","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":502,"kind":1024,"name":"ui","url":"interfaces/extensions.html#ui","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":503,"kind":1024,"name":"workbook","url":"interfaces/extensions.html#workbook","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":504,"kind":1024,"name":"dashboardObjectId","url":"interfaces/extensions.html#dashboardobjectid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":505,"kind":2048,"name":"createVizImageAsync","url":"interfaces/extensions.html#createvizimageasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":506,"kind":2048,"name":"setClickThroughAsync","url":"interfaces/extensions.html#setclickthroughasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":507,"kind":4,"name":"ErrorCodes","url":"enums/tableau.errorcodes.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":508,"kind":16,"name":"APINotInitialized","url":"enums/tableau.errorcodes.html#apinotinitialized","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":509,"kind":16,"name":"VisibilityError","url":"enums/tableau.errorcodes.html#visibilityerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":510,"kind":16,"name":"DialogAlreadyOpen","url":"enums/tableau.errorcodes.html#dialogalreadyopen","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":511,"kind":16,"name":"DialogClosedByUser","url":"enums/tableau.errorcodes.html#dialogclosedbyuser","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":512,"kind":16,"name":"InternalError","url":"enums/tableau.errorcodes.html#internalerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":513,"kind":16,"name":"InvalidDomainDialog","url":"enums/tableau.errorcodes.html#invaliddomaindialog","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":514,"kind":16,"name":"InvalidParameter","url":"enums/tableau.errorcodes.html#invalidparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":515,"kind":16,"name":"MissingFilter","url":"enums/tableau.errorcodes.html#missingfilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":516,"kind":16,"name":"MissingParameter","url":"enums/tableau.errorcodes.html#missingparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":517,"kind":16,"name":"ServerError","url":"enums/tableau.errorcodes.html#servererror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":518,"kind":16,"name":"SettingSaveInProgress","url":"enums/tableau.errorcodes.html#settingsaveinprogress","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":519,"kind":16,"name":"UnsupportedEventName","url":"enums/tableau.errorcodes.html#unsupportedeventname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":520,"kind":16,"name":"UnsupportedMethodForDataSourceType","url":"enums/tableau.errorcodes.html#unsupportedmethodfordatasourcetype","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":521,"kind":4,"name":"ExtensionContext","url":"enums/tableau.extensioncontext.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":522,"kind":16,"name":"Desktop","url":"enums/tableau.extensioncontext.html#desktop","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionContext"},{"id":523,"kind":16,"name":"Server","url":"enums/tableau.extensioncontext.html#server","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionContext"},{"id":524,"kind":4,"name":"ExtensionMode","url":"enums/tableau.extensionmode.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":525,"kind":16,"name":"Authoring","url":"enums/tableau.extensionmode.html#authoring","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionMode"},{"id":526,"kind":16,"name":"Viewing","url":"enums/tableau.extensionmode.html#viewing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionMode"},{"id":527,"kind":4,"name":"TableauEventType","url":"enums/tableau.tableaueventtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":528,"kind":16,"name":"FilterChanged","url":"enums/tableau.tableaueventtype.html#filterchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":529,"kind":16,"name":"MarkSelectionChanged","url":"enums/tableau.tableaueventtype.html#markselectionchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":530,"kind":16,"name":"ParameterChanged","url":"enums/tableau.tableaueventtype.html#parameterchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":531,"kind":16,"name":"SettingsChanged","url":"enums/tableau.tableaueventtype.html#settingschanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":532,"kind":16,"name":"DashboardLayoutChanged","url":"enums/tableau.tableaueventtype.html#dashboardlayoutchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":533,"kind":16,"name":"WorkbookFormattingChanged","url":"enums/tableau.tableaueventtype.html#workbookformattingchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":534,"kind":4,"name":"VizImageEncodingType","url":"enums/tableau.vizimageencodingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":535,"kind":16,"name":"Discrete","url":"enums/tableau.vizimageencodingtype.html#discrete","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageEncodingType"},{"id":536,"kind":16,"name":"Continuous","url":"enums/tableau.vizimageencodingtype.html#continuous","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageEncodingType"},{"id":537,"kind":4,"name":"VizImageSortDirectionType","url":"enums/tableau.vizimagesortdirectiontype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":538,"kind":16,"name":"Ascending","url":"enums/tableau.vizimagesortdirectiontype.html#ascending","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSortDirectionType"},{"id":539,"kind":16,"name":"Descending","url":"enums/tableau.vizimagesortdirectiontype.html#descending","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSortDirectionType"},{"id":540,"kind":4,"name":"VizImagePaletteType","url":"enums/tableau.vizimagepalettetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":541,"kind":16,"name":"CustomDiverging","url":"enums/tableau.vizimagepalettetype.html#customdiverging","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImagePaletteType"},{"id":542,"kind":16,"name":"CustomSequential","url":"enums/tableau.vizimagepalettetype.html#customsequential","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImagePaletteType"},{"id":543,"kind":4,"name":"VizImageSizeSettingType","url":"enums/tableau.vizimagesizesettingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":544,"kind":16,"name":"Fixed","url":"enums/tableau.vizimagesizesettingtype.html#fixed","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingType"},{"id":545,"kind":16,"name":"Manual","url":"enums/tableau.vizimagesizesettingtype.html#manual","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingType"},{"id":546,"kind":4,"name":"VizImageSizeSettingAlignmentType","url":"enums/tableau.vizimagesizesettingalignmenttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":547,"kind":16,"name":"Right","url":"enums/tableau.vizimagesizesettingalignmenttype.html#right","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":548,"kind":16,"name":"Left","url":"enums/tableau.vizimagesizesettingalignmenttype.html#left","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":549,"kind":16,"name":"Center","url":"enums/tableau.vizimagesizesettingalignmenttype.html#center","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":550,"kind":32,"name":"extensions","url":"modules/tableau.html#extensions","classes":"tsd-kind-variable tsd-parent-kind-module","parent":"Tableau"},{"id":551,"kind":256,"name":"TableauWorksheetEvent","url":"interfaces/tableauworksheetevent.html","classes":"tsd-kind-interface"},{"id":552,"kind":1024,"name":"worksheet","url":"interfaces/tableauworksheetevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauWorksheetEvent"},{"id":553,"kind":1024,"name":"sheet","url":"interfaces/tableauworksheetevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauWorksheetEvent"},{"id":554,"kind":1024,"name":"type","url":"interfaces/tableauworksheetevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauWorksheetEvent"},{"id":555,"kind":256,"name":"MarksSelectedEvent","url":"interfaces/marksselectedevent.html","classes":"tsd-kind-interface"},{"id":556,"kind":2048,"name":"getMarksAsync","url":"interfaces/marksselectedevent.html#getmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"MarksSelectedEvent"},{"id":557,"kind":1024,"name":"worksheet","url":"interfaces/marksselectedevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":558,"kind":1024,"name":"sheet","url":"interfaces/marksselectedevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":559,"kind":1024,"name":"type","url":"interfaces/marksselectedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":560,"kind":256,"name":"TableauSheetEvent","url":"interfaces/tableausheetevent.html","classes":"tsd-kind-interface"},{"id":561,"kind":1024,"name":"sheet","url":"interfaces/tableausheetevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauSheetEvent"},{"id":562,"kind":1024,"name":"type","url":"interfaces/tableausheetevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauSheetEvent"},{"id":563,"kind":256,"name":"FilterChangedEvent","url":"interfaces/filterchangedevent.html","classes":"tsd-kind-interface"},{"id":564,"kind":1024,"name":"fieldName","url":"interfaces/filterchangedevent.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FilterChangedEvent"},{"id":565,"kind":2048,"name":"getFilterAsync","url":"interfaces/filterchangedevent.html#getfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"FilterChangedEvent"},{"id":566,"kind":1024,"name":"worksheet","url":"interfaces/filterchangedevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":567,"kind":1024,"name":"sheet","url":"interfaces/filterchangedevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":568,"kind":1024,"name":"type","url":"interfaces/filterchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":569,"kind":256,"name":"WorkbookFormattingChangedEvent","url":"interfaces/workbookformattingchangedevent.html","classes":"tsd-kind-interface"},{"id":570,"kind":1024,"name":"formatting","url":"interfaces/workbookformattingchangedevent.html#formatting","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WorkbookFormattingChangedEvent"},{"id":571,"kind":1024,"name":"type","url":"interfaces/workbookformattingchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"WorkbookFormattingChangedEvent"},{"id":572,"kind":256,"name":"TableauEvent","url":"interfaces/tableauevent.html","classes":"tsd-kind-interface"},{"id":573,"kind":1024,"name":"type","url":"interfaces/tableauevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauEvent"},{"id":574,"kind":256,"name":"ParameterChangedEvent","url":"interfaces/parameterchangedevent.html","classes":"tsd-kind-interface"},{"id":575,"kind":2048,"name":"getParameterAsync","url":"interfaces/parameterchangedevent.html#getparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ParameterChangedEvent"},{"id":576,"kind":1024,"name":"type","url":"interfaces/parameterchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"ParameterChangedEvent"},{"id":577,"kind":256,"name":"SettingsChangedEvent","url":"interfaces/settingschangedevent.html","classes":"tsd-kind-interface"},{"id":578,"kind":1024,"name":"newSettings","url":"interfaces/settingschangedevent.html#newsettings","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingsChangedEvent"},{"id":579,"kind":65536,"name":"__type","url":"interfaces/settingschangedevent.html#newsettings.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"SettingsChangedEvent.newSettings"},{"id":580,"kind":1024,"name":"type","url":"interfaces/settingschangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"SettingsChangedEvent"},{"id":581,"kind":256,"name":"DashboardLayoutChangedEvent","url":"interfaces/dashboardlayoutchangedevent.html","classes":"tsd-kind-interface"},{"id":582,"kind":1024,"name":"dashboardLayoutChangeDetails","url":"interfaces/dashboardlayoutchangedevent.html#dashboardlayoutchangedetails","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardLayoutChangedEvent"},{"id":583,"kind":1024,"name":"type","url":"interfaces/dashboardlayoutchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"DashboardLayoutChangedEvent"},{"id":584,"kind":256,"name":"EventListenerManager","url":"interfaces/eventlistenermanager.html","classes":"tsd-kind-interface"},{"id":585,"kind":2048,"name":"addEventListener","url":"interfaces/eventlistenermanager.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"EventListenerManager"},{"id":586,"kind":2048,"name":"removeEventListener","url":"interfaces/eventlistenermanager.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"EventListenerManager"},{"id":587,"kind":4194304,"name":"DashboardLayoutChangeDetails","url":"globals.html#dashboardlayoutchangedetails","classes":"tsd-kind-type-alias"},{"id":588,"kind":4194304,"name":"TableauEventHandlerFn","url":"globals.html#tableaueventhandlerfn","classes":"tsd-kind-type-alias"},{"id":589,"kind":65536,"name":"__type","url":"globals.html#tableaueventhandlerfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"TableauEventHandlerFn"},{"id":590,"kind":4194304,"name":"TableauEventUnregisterFn","url":"globals.html#tableaueventunregisterfn","classes":"tsd-kind-type-alias"},{"id":591,"kind":65536,"name":"__type","url":"globals.html#tableaueventunregisterfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"TableauEventUnregisterFn"},{"id":592,"kind":256,"name":"TableauError","url":"interfaces/tableauerror.html","classes":"tsd-kind-interface"},{"id":593,"kind":1024,"name":"errorCode","url":"interfaces/tableauerror.html#errorcode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauError"},{"id":594,"kind":1024,"name":"name","url":"interfaces/tableauerror.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":595,"kind":1024,"name":"message","url":"interfaces/tableauerror.html#message","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":596,"kind":1024,"name":"stack","url":"interfaces/tableauerror.html#stack","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":597,"kind":1024,"name":"Error","url":"interfaces/tableauerror.html#error","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauError"},{"id":598,"kind":4,"name":"SharedErrorCodes","url":"enums/sharederrorcodes.html","classes":"tsd-kind-enum"},{"id":599,"kind":16,"name":"InternalError","url":"enums/sharederrorcodes.html#internalerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":600,"kind":16,"name":"InvalidParameter","url":"enums/sharederrorcodes.html#invalidparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":601,"kind":16,"name":"NotActiveSheet","url":"enums/sharederrorcodes.html#notactivesheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":602,"kind":16,"name":"ImplementationError","url":"enums/sharederrorcodes.html#implementationerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":603,"kind":16,"name":"ApiExecutionError","url":"enums/sharederrorcodes.html#apiexecutionerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":604,"kind":16,"name":"Timeout","url":"enums/sharederrorcodes.html#timeout","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"}]}; \ No newline at end of file + typedoc.search.data = {"kinds":{"2":"Module","4":"Enumeration","16":"Enumeration member","32":"Variable","256":"Interface","1024":"Property","2048":"Method","65536":"Type literal","2097152":"Object literal","4194304":"Type alias"},"rows":[{"id":0,"kind":2,"name":"Tableau","url":"modules/tableau.html","classes":"tsd-kind-module"},{"id":1,"kind":4,"name":"AnalyticsObjectType","url":"enums/tableau.analyticsobjecttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":2,"kind":16,"name":"Cluster","url":"enums/tableau.analyticsobjecttype.html#cluster","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":3,"kind":16,"name":"Forecast","url":"enums/tableau.analyticsobjecttype.html#forecast","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":4,"kind":16,"name":"TrendLine","url":"enums/tableau.analyticsobjecttype.html#trendline","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnalyticsObjectType"},{"id":5,"kind":4,"name":"AnnotationType","url":"enums/tableau.annotationtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":6,"kind":16,"name":"Mark","url":"enums/tableau.annotationtype.html#mark","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnnotationType"},{"id":7,"kind":16,"name":"Point","url":"enums/tableau.annotationtype.html#point","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnnotationType"},{"id":8,"kind":16,"name":"Area","url":"enums/tableau.annotationtype.html#area","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.AnnotationType"},{"id":9,"kind":4,"name":"ColumnType","url":"enums/tableau.columntype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":10,"kind":16,"name":"Discrete","url":"enums/tableau.columntype.html#discrete","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ColumnType"},{"id":11,"kind":16,"name":"Continuous","url":"enums/tableau.columntype.html#continuous","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ColumnType"},{"id":12,"kind":4,"name":"ClassNameKey","url":"enums/tableau.classnamekey.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":13,"kind":16,"name":"WorksheetTitle","url":"enums/tableau.classnamekey.html#worksheettitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":14,"kind":16,"name":"Worksheet","url":"enums/tableau.classnamekey.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":15,"kind":16,"name":"Tooltip","url":"enums/tableau.classnamekey.html#tooltip","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":16,"kind":16,"name":"StoryTitle","url":"enums/tableau.classnamekey.html#storytitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":17,"kind":16,"name":"DashboardTitle","url":"enums/tableau.classnamekey.html#dashboardtitle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ClassNameKey"},{"id":18,"kind":4,"name":"DashboardObjectType","url":"enums/tableau.dashboardobjecttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":19,"kind":16,"name":"Blank","url":"enums/tableau.dashboardobjecttype.html#blank","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":20,"kind":16,"name":"Worksheet","url":"enums/tableau.dashboardobjecttype.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":21,"kind":16,"name":"QuickFilter","url":"enums/tableau.dashboardobjecttype.html#quickfilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":22,"kind":16,"name":"ParameterControl","url":"enums/tableau.dashboardobjecttype.html#parametercontrol","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":23,"kind":16,"name":"PageFilter","url":"enums/tableau.dashboardobjecttype.html#pagefilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":24,"kind":16,"name":"Legend","url":"enums/tableau.dashboardobjecttype.html#legend","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":25,"kind":16,"name":"Title","url":"enums/tableau.dashboardobjecttype.html#title","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":26,"kind":16,"name":"Text","url":"enums/tableau.dashboardobjecttype.html#text","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":27,"kind":16,"name":"Image","url":"enums/tableau.dashboardobjecttype.html#image","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":28,"kind":16,"name":"WebPage","url":"enums/tableau.dashboardobjecttype.html#webpage","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":29,"kind":16,"name":"Extension","url":"enums/tableau.dashboardobjecttype.html#extension","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectType"},{"id":30,"kind":4,"name":"DashboardObjectVisibilityType","url":"enums/tableau.dashboardobjectvisibilitytype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":31,"kind":16,"name":"Show","url":"enums/tableau.dashboardobjectvisibilitytype.html#show","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectVisibilityType"},{"id":32,"kind":16,"name":"Hide","url":"enums/tableau.dashboardobjectvisibilitytype.html#hide","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardObjectVisibilityType"},{"id":33,"kind":4,"name":"DataType","url":"enums/tableau.datatype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":34,"kind":16,"name":"String","url":"enums/tableau.datatype.html#string","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":35,"kind":16,"name":"Int","url":"enums/tableau.datatype.html#int","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":36,"kind":16,"name":"Float","url":"enums/tableau.datatype.html#float","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":37,"kind":16,"name":"Bool","url":"enums/tableau.datatype.html#bool","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":38,"kind":16,"name":"Date","url":"enums/tableau.datatype.html#date","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":39,"kind":16,"name":"DateTime","url":"enums/tableau.datatype.html#datetime","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":40,"kind":16,"name":"Spatial","url":"enums/tableau.datatype.html#spatial","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DataType"},{"id":41,"kind":4,"name":"DashboardLayoutChange","url":"enums/tableau.dashboardlayoutchange.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":42,"kind":16,"name":"Added","url":"enums/tableau.dashboardlayoutchange.html#added","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":43,"kind":16,"name":"Removed","url":"enums/tableau.dashboardlayoutchange.html#removed","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":44,"kind":16,"name":"IsFloatingChanged","url":"enums/tableau.dashboardlayoutchange.html#isfloatingchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":45,"kind":16,"name":"IsVisibleChanged","url":"enums/tableau.dashboardlayoutchange.html#isvisiblechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":46,"kind":16,"name":"PositionChanged","url":"enums/tableau.dashboardlayoutchange.html#positionchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":47,"kind":16,"name":"SizeChanged","url":"enums/tableau.dashboardlayoutchange.html#sizechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":48,"kind":16,"name":"NameChanged","url":"enums/tableau.dashboardlayoutchange.html#namechanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DashboardLayoutChange"},{"id":49,"kind":4,"name":"DateRangeType","url":"enums/tableau.daterangetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":50,"kind":16,"name":"Last","url":"enums/tableau.daterangetype.html#last","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":51,"kind":16,"name":"LastN","url":"enums/tableau.daterangetype.html#lastn","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":52,"kind":16,"name":"Next","url":"enums/tableau.daterangetype.html#next","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":53,"kind":16,"name":"NextN","url":"enums/tableau.daterangetype.html#nextn","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":54,"kind":16,"name":"Current","url":"enums/tableau.daterangetype.html#current","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":55,"kind":16,"name":"ToDate","url":"enums/tableau.daterangetype.html#todate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DateRangeType"},{"id":56,"kind":4,"name":"DialogStyle","url":"enums/tableau.dialogstyle.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":57,"kind":16,"name":"Window","url":"enums/tableau.dialogstyle.html#window","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DialogStyle"},{"id":58,"kind":16,"name":"Modal","url":"enums/tableau.dialogstyle.html#modal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DialogStyle"},{"id":59,"kind":16,"name":"Modeless","url":"enums/tableau.dialogstyle.html#modeless","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.DialogStyle"},{"id":60,"kind":4,"name":"EncodingType","url":"enums/tableau.encodingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":61,"kind":16,"name":"Column","url":"enums/tableau.encodingtype.html#column","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":62,"kind":16,"name":"Row","url":"enums/tableau.encodingtype.html#row","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":63,"kind":16,"name":"Page","url":"enums/tableau.encodingtype.html#page","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":64,"kind":16,"name":"Filter","url":"enums/tableau.encodingtype.html#filter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":65,"kind":16,"name":"MarksType","url":"enums/tableau.encodingtype.html#markstype","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":66,"kind":16,"name":"MeasureValues","url":"enums/tableau.encodingtype.html#measurevalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":67,"kind":16,"name":"Color","url":"enums/tableau.encodingtype.html#color","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":68,"kind":16,"name":"Size","url":"enums/tableau.encodingtype.html#size","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":69,"kind":16,"name":"Label","url":"enums/tableau.encodingtype.html#label","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":70,"kind":16,"name":"Detail","url":"enums/tableau.encodingtype.html#detail","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":71,"kind":16,"name":"Tooltip","url":"enums/tableau.encodingtype.html#tooltip","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":72,"kind":16,"name":"Shape","url":"enums/tableau.encodingtype.html#shape","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":73,"kind":16,"name":"Path","url":"enums/tableau.encodingtype.html#path","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":74,"kind":16,"name":"Angle","url":"enums/tableau.encodingtype.html#angle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.EncodingType"},{"id":75,"kind":4,"name":"FieldAggregationType","url":"enums/tableau.fieldaggregationtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":76,"kind":16,"name":"Sum","url":"enums/tableau.fieldaggregationtype.html#sum","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":77,"kind":16,"name":"Avg","url":"enums/tableau.fieldaggregationtype.html#avg","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":78,"kind":16,"name":"Min","url":"enums/tableau.fieldaggregationtype.html#min","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":79,"kind":16,"name":"Max","url":"enums/tableau.fieldaggregationtype.html#max","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":80,"kind":16,"name":"Stdev","url":"enums/tableau.fieldaggregationtype.html#stdev","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":81,"kind":16,"name":"Stdevp","url":"enums/tableau.fieldaggregationtype.html#stdevp","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":82,"kind":16,"name":"Var","url":"enums/tableau.fieldaggregationtype.html#var","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":83,"kind":16,"name":"Varp","url":"enums/tableau.fieldaggregationtype.html#varp","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":84,"kind":16,"name":"Count","url":"enums/tableau.fieldaggregationtype.html#count","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":85,"kind":16,"name":"Countd","url":"enums/tableau.fieldaggregationtype.html#countd","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":86,"kind":16,"name":"Median","url":"enums/tableau.fieldaggregationtype.html#median","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":87,"kind":16,"name":"Attr","url":"enums/tableau.fieldaggregationtype.html#attr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":88,"kind":16,"name":"None","url":"enums/tableau.fieldaggregationtype.html#none","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":89,"kind":16,"name":"Year","url":"enums/tableau.fieldaggregationtype.html#year","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":90,"kind":16,"name":"Qtr","url":"enums/tableau.fieldaggregationtype.html#qtr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":91,"kind":16,"name":"Month","url":"enums/tableau.fieldaggregationtype.html#month","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":92,"kind":16,"name":"Day","url":"enums/tableau.fieldaggregationtype.html#day","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":93,"kind":16,"name":"Hour","url":"enums/tableau.fieldaggregationtype.html#hour","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":94,"kind":16,"name":"Minute","url":"enums/tableau.fieldaggregationtype.html#minute","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":95,"kind":16,"name":"Second","url":"enums/tableau.fieldaggregationtype.html#second","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":96,"kind":16,"name":"Week","url":"enums/tableau.fieldaggregationtype.html#week","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":97,"kind":16,"name":"Weekday","url":"enums/tableau.fieldaggregationtype.html#weekday","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":98,"kind":16,"name":"MonthYear","url":"enums/tableau.fieldaggregationtype.html#monthyear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":99,"kind":16,"name":"Mdy","url":"enums/tableau.fieldaggregationtype.html#mdy","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":100,"kind":16,"name":"End","url":"enums/tableau.fieldaggregationtype.html#end","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":101,"kind":16,"name":"TruncYear","url":"enums/tableau.fieldaggregationtype.html#truncyear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":102,"kind":16,"name":"TruncQtr","url":"enums/tableau.fieldaggregationtype.html#truncqtr","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":103,"kind":16,"name":"TruncMonth","url":"enums/tableau.fieldaggregationtype.html#truncmonth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":104,"kind":16,"name":"TruncWeek","url":"enums/tableau.fieldaggregationtype.html#truncweek","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":105,"kind":16,"name":"TruncDay","url":"enums/tableau.fieldaggregationtype.html#truncday","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":106,"kind":16,"name":"TruncHour","url":"enums/tableau.fieldaggregationtype.html#trunchour","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":107,"kind":16,"name":"TruncMinute","url":"enums/tableau.fieldaggregationtype.html#truncminute","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":108,"kind":16,"name":"TruncSecond","url":"enums/tableau.fieldaggregationtype.html#truncsecond","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":109,"kind":16,"name":"Quart1","url":"enums/tableau.fieldaggregationtype.html#quart1","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":110,"kind":16,"name":"Quart3","url":"enums/tableau.fieldaggregationtype.html#quart3","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":111,"kind":16,"name":"Skewness","url":"enums/tableau.fieldaggregationtype.html#skewness","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":112,"kind":16,"name":"Kurtosis","url":"enums/tableau.fieldaggregationtype.html#kurtosis","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":113,"kind":16,"name":"InOut","url":"enums/tableau.fieldaggregationtype.html#inout","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":114,"kind":16,"name":"User","url":"enums/tableau.fieldaggregationtype.html#user","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldAggregationType"},{"id":115,"kind":4,"name":"FieldRoleType","url":"enums/tableau.fieldroletype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":116,"kind":16,"name":"Dimension","url":"enums/tableau.fieldroletype.html#dimension","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":117,"kind":16,"name":"Measure","url":"enums/tableau.fieldroletype.html#measure","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":118,"kind":16,"name":"Unknown","url":"enums/tableau.fieldroletype.html#unknown","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FieldRoleType"},{"id":119,"kind":4,"name":"FilterType","url":"enums/tableau.filtertype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":120,"kind":16,"name":"Categorical","url":"enums/tableau.filtertype.html#categorical","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":121,"kind":16,"name":"Range","url":"enums/tableau.filtertype.html#range","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":122,"kind":16,"name":"Hierarchical","url":"enums/tableau.filtertype.html#hierarchical","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":123,"kind":16,"name":"RelativeDate","url":"enums/tableau.filtertype.html#relativedate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterType"},{"id":124,"kind":4,"name":"FilterUpdateType","url":"enums/tableau.filterupdatetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":125,"kind":16,"name":"Add","url":"enums/tableau.filterupdatetype.html#add","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":126,"kind":16,"name":"All","url":"enums/tableau.filterupdatetype.html#all","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":127,"kind":16,"name":"Replace","url":"enums/tableau.filterupdatetype.html#replace","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":128,"kind":16,"name":"Remove","url":"enums/tableau.filterupdatetype.html#remove","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterUpdateType"},{"id":129,"kind":4,"name":"FilterDomainType","url":"enums/tableau.filterdomaintype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":130,"kind":16,"name":"Relevant","url":"enums/tableau.filterdomaintype.html#relevant","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterDomainType"},{"id":131,"kind":16,"name":"Database","url":"enums/tableau.filterdomaintype.html#database","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterDomainType"},{"id":132,"kind":4,"name":"FilterNullOption","url":"enums/tableau.filternulloption.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":133,"kind":16,"name":"NullValues","url":"enums/tableau.filternulloption.html#nullvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":134,"kind":16,"name":"NonNullValues","url":"enums/tableau.filternulloption.html#nonnullvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":135,"kind":16,"name":"AllValues","url":"enums/tableau.filternulloption.html#allvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.FilterNullOption"},{"id":136,"kind":4,"name":"IncludeDataValuesOption","url":"enums/tableau.includedatavaluesoption.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":137,"kind":16,"name":"AllValues","url":"enums/tableau.includedatavaluesoption.html#allvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":138,"kind":16,"name":"OnlyNativeValues","url":"enums/tableau.includedatavaluesoption.html#onlynativevalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":139,"kind":16,"name":"OnlyFormattedValues","url":"enums/tableau.includedatavaluesoption.html#onlyformattedvalues","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.IncludeDataValuesOption"},{"id":140,"kind":4,"name":"MarkType","url":"enums/tableau.marktype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":141,"kind":16,"name":"Bar","url":"enums/tableau.marktype.html#bar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":142,"kind":16,"name":"Line","url":"enums/tableau.marktype.html#line","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":143,"kind":16,"name":"Area","url":"enums/tableau.marktype.html#area","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":144,"kind":16,"name":"Square","url":"enums/tableau.marktype.html#square","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":145,"kind":16,"name":"Circle","url":"enums/tableau.marktype.html#circle","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":146,"kind":16,"name":"Shape","url":"enums/tableau.marktype.html#shape","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":147,"kind":16,"name":"Text","url":"enums/tableau.marktype.html#text","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":148,"kind":16,"name":"Map","url":"enums/tableau.marktype.html#map","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":149,"kind":16,"name":"Pie","url":"enums/tableau.marktype.html#pie","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":150,"kind":16,"name":"GanttBar","url":"enums/tableau.marktype.html#ganttbar","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":151,"kind":16,"name":"Polygon","url":"enums/tableau.marktype.html#polygon","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.MarkType"},{"id":152,"kind":4,"name":"ParameterValueType","url":"enums/tableau.parametervaluetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":153,"kind":16,"name":"All","url":"enums/tableau.parametervaluetype.html#all","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":154,"kind":16,"name":"List","url":"enums/tableau.parametervaluetype.html#list","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":155,"kind":16,"name":"Range","url":"enums/tableau.parametervaluetype.html#range","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ParameterValueType"},{"id":156,"kind":4,"name":"PeriodType","url":"enums/tableau.periodtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":157,"kind":16,"name":"Years","url":"enums/tableau.periodtype.html#years","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":158,"kind":16,"name":"Quarters","url":"enums/tableau.periodtype.html#quarters","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":159,"kind":16,"name":"Months","url":"enums/tableau.periodtype.html#months","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":160,"kind":16,"name":"Weeks","url":"enums/tableau.periodtype.html#weeks","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":161,"kind":16,"name":"Days","url":"enums/tableau.periodtype.html#days","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":162,"kind":16,"name":"Hours","url":"enums/tableau.periodtype.html#hours","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":163,"kind":16,"name":"Minutes","url":"enums/tableau.periodtype.html#minutes","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":164,"kind":16,"name":"Seconds","url":"enums/tableau.periodtype.html#seconds","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.PeriodType"},{"id":165,"kind":4,"name":"QuickTableCalcType","url":"enums/tableau.quicktablecalctype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":166,"kind":16,"name":"RunningTotal","url":"enums/tableau.quicktablecalctype.html#runningtotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":167,"kind":16,"name":"Difference","url":"enums/tableau.quicktablecalctype.html#difference","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":168,"kind":16,"name":"PercentDifference","url":"enums/tableau.quicktablecalctype.html#percentdifference","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":169,"kind":16,"name":"PercentOfTotal","url":"enums/tableau.quicktablecalctype.html#percentoftotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":170,"kind":16,"name":"Rank","url":"enums/tableau.quicktablecalctype.html#rank","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":171,"kind":16,"name":"Percentile","url":"enums/tableau.quicktablecalctype.html#percentile","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":172,"kind":16,"name":"MovingAverage","url":"enums/tableau.quicktablecalctype.html#movingaverage","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":173,"kind":16,"name":"YTDTotal","url":"enums/tableau.quicktablecalctype.html#ytdtotal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":174,"kind":16,"name":"CompoundGrowthRate","url":"enums/tableau.quicktablecalctype.html#compoundgrowthrate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":175,"kind":16,"name":"YearOverYearGrowth","url":"enums/tableau.quicktablecalctype.html#yearoveryeargrowth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":176,"kind":16,"name":"YTDGrowth","url":"enums/tableau.quicktablecalctype.html#ytdgrowth","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":177,"kind":16,"name":"Undefined","url":"enums/tableau.quicktablecalctype.html#undefined","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.QuickTableCalcType"},{"id":178,"kind":4,"name":"SelectionUpdateType","url":"enums/tableau.selectionupdatetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":179,"kind":16,"name":"Replace","url":"enums/tableau.selectionupdatetype.html#replace","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":180,"kind":16,"name":"Add","url":"enums/tableau.selectionupdatetype.html#add","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":181,"kind":16,"name":"Remove","url":"enums/tableau.selectionupdatetype.html#remove","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SelectionUpdateType"},{"id":182,"kind":4,"name":"SheetType","url":"enums/tableau.sheettype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":183,"kind":16,"name":"Dashboard","url":"enums/tableau.sheettype.html#dashboard","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":184,"kind":16,"name":"Story","url":"enums/tableau.sheettype.html#story","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":185,"kind":16,"name":"Worksheet","url":"enums/tableau.sheettype.html#worksheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SheetType"},{"id":186,"kind":4,"name":"SortDirection","url":"enums/tableau.sortdirection.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":187,"kind":16,"name":"Increasing","url":"enums/tableau.sortdirection.html#increasing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SortDirection"},{"id":188,"kind":16,"name":"Decreasing","url":"enums/tableau.sortdirection.html#decreasing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.SortDirection"},{"id":189,"kind":4,"name":"TrendLineModelType","url":"enums/tableau.trendlinemodeltype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":190,"kind":16,"name":"Linear","url":"enums/tableau.trendlinemodeltype.html#linear","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":191,"kind":16,"name":"Logarithmic","url":"enums/tableau.trendlinemodeltype.html#logarithmic","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":192,"kind":16,"name":"Exponential","url":"enums/tableau.trendlinemodeltype.html#exponential","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":193,"kind":16,"name":"Polynomial","url":"enums/tableau.trendlinemodeltype.html#polynomial","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TrendLineModelType"},{"id":194,"kind":4,"name":"ReplaySpeedType","url":"enums/tableau.replayspeedtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":195,"kind":16,"name":"Slow","url":"enums/tableau.replayspeedtype.html#slow","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":196,"kind":16,"name":"Normal","url":"enums/tableau.replayspeedtype.html#normal","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":197,"kind":16,"name":"Fast","url":"enums/tableau.replayspeedtype.html#fast","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ReplaySpeedType"},{"id":198,"kind":4,"name":"HierarchicalLevelSelectionState","url":"enums/tableau.hierarchicallevelselectionstate.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":199,"kind":16,"name":"AllSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#allselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":200,"kind":16,"name":"NoneSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#noneselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":201,"kind":16,"name":"SomeSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#someselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":202,"kind":16,"name":"UnknownSelected","url":"enums/tableau.hierarchicallevelselectionstate.html#unknownselected","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.HierarchicalLevelSelectionState"},{"id":203,"kind":4194304,"name":"ZoneVisibilityType","url":"modules/tableau.html#zonevisibilitytype","classes":"tsd-kind-type-alias tsd-parent-kind-module","parent":"Tableau"},{"id":204,"kind":2097152,"name":"ZoneVisibilityType","url":"modules/tableau.html#zonevisibilitytype-1","classes":"tsd-kind-object-literal tsd-parent-kind-module","parent":"Tableau"},{"id":205,"kind":256,"name":"MarksCollection","url":"interfaces/markscollection.html","classes":"tsd-kind-interface"},{"id":206,"kind":1024,"name":"data","url":"interfaces/markscollection.html#data","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarksCollection"},{"id":207,"kind":256,"name":"MarkInfo","url":"interfaces/markinfo.html","classes":"tsd-kind-interface"},{"id":208,"kind":1024,"name":"type","url":"interfaces/markinfo.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":209,"kind":1024,"name":"color","url":"interfaces/markinfo.html#color","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":210,"kind":1024,"name":"tupleId","url":"interfaces/markinfo.html#tupleid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"MarkInfo"},{"id":211,"kind":256,"name":"SelectionCriteria","url":"interfaces/selectioncriteria.html","classes":"tsd-kind-interface"},{"id":212,"kind":1024,"name":"fieldName","url":"interfaces/selectioncriteria.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SelectionCriteria"},{"id":213,"kind":1024,"name":"value","url":"interfaces/selectioncriteria.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SelectionCriteria"},{"id":214,"kind":256,"name":"RangeValue","url":"interfaces/rangevalue.html","classes":"tsd-kind-interface"},{"id":215,"kind":1024,"name":"min","url":"interfaces/rangevalue.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":216,"kind":1024,"name":"max","url":"interfaces/rangevalue.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":217,"kind":1024,"name":"nullOption","url":"interfaces/rangevalue.html#nulloption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeValue"},{"id":218,"kind":4194304,"name":"CategoricalValue","url":"globals.html#categoricalvalue","classes":"tsd-kind-type-alias"},{"id":219,"kind":256,"name":"Column","url":"interfaces/column.html","classes":"tsd-kind-interface"},{"id":220,"kind":1024,"name":"fieldName","url":"interfaces/column.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":221,"kind":1024,"name":"fieldId","url":"interfaces/column.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":222,"kind":1024,"name":"dataType","url":"interfaces/column.html#datatype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":223,"kind":1024,"name":"isReferenced","url":"interfaces/column.html#isreferenced","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":224,"kind":1024,"name":"index","url":"interfaces/column.html#index","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Column"},{"id":225,"kind":256,"name":"DataTable","url":"interfaces/datatable.html","classes":"tsd-kind-interface"},{"id":226,"kind":1024,"name":"name","url":"interfaces/datatable.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":227,"kind":1024,"name":"data","url":"interfaces/datatable.html#data","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":228,"kind":1024,"name":"marksInfo","url":"interfaces/datatable.html#marksinfo","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":229,"kind":1024,"name":"columns","url":"interfaces/datatable.html#columns","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":230,"kind":1024,"name":"totalRowCount","url":"interfaces/datatable.html#totalrowcount","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":231,"kind":1024,"name":"isTotalRowCountLimited","url":"interfaces/datatable.html#istotalrowcountlimited","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":232,"kind":1024,"name":"isSummaryData","url":"interfaces/datatable.html#issummarydata","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTable"},{"id":233,"kind":256,"name":"DataValue","url":"interfaces/datavalue.html","classes":"tsd-kind-interface"},{"id":234,"kind":1024,"name":"value","url":"interfaces/datavalue.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":235,"kind":1024,"name":"nativeValue","url":"interfaces/datavalue.html#nativevalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":236,"kind":1024,"name":"formattedValue","url":"interfaces/datavalue.html#formattedvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataValue"},{"id":237,"kind":256,"name":"GetSummaryDataOptions","url":"interfaces/getsummarydataoptions.html","classes":"tsd-kind-interface"},{"id":238,"kind":1024,"name":"ignoreAliases","url":"interfaces/getsummarydataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":239,"kind":1024,"name":"ignoreSelection","url":"interfaces/getsummarydataoptions.html#ignoreselection","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":240,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/getsummarydataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":241,"kind":1024,"name":"maxRows","url":"interfaces/getsummarydataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":242,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/getsummarydataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetSummaryDataOptions"},{"id":243,"kind":256,"name":"GetUnderlyingDataOptions","url":"interfaces/getunderlyingdataoptions.html","classes":"tsd-kind-interface"},{"id":244,"kind":1024,"name":"includeAllColumns","url":"interfaces/getunderlyingdataoptions.html#includeallcolumns","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"GetUnderlyingDataOptions"},{"id":245,"kind":1024,"name":"ignoreAliases","url":"interfaces/getunderlyingdataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":246,"kind":1024,"name":"ignoreSelection","url":"interfaces/getunderlyingdataoptions.html#ignoreselection","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":247,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/getunderlyingdataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":248,"kind":1024,"name":"maxRows","url":"interfaces/getunderlyingdataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":249,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/getunderlyingdataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"GetUnderlyingDataOptions"},{"id":250,"kind":256,"name":"DataTableReader","url":"interfaces/datatablereader.html","classes":"tsd-kind-interface"},{"id":251,"kind":1024,"name":"totalRowCount","url":"interfaces/datatablereader.html#totalrowcount","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTableReader"},{"id":252,"kind":1024,"name":"pageCount","url":"interfaces/datatablereader.html#pagecount","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataTableReader"},{"id":253,"kind":2048,"name":"getPageAsync","url":"interfaces/datatablereader.html#getpageasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataTableReader"},{"id":254,"kind":2048,"name":"getAllPagesAsync","url":"interfaces/datatablereader.html#getallpagesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataTableReader"},{"id":255,"kind":2048,"name":"releaseAsync","url":"interfaces/datatablereader.html#releaseasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataTableReader"},{"id":256,"kind":256,"name":"DataSource","url":"interfaces/datasource.html","classes":"tsd-kind-interface"},{"id":257,"kind":1024,"name":"name","url":"interfaces/datasource.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":258,"kind":1024,"name":"id","url":"interfaces/datasource.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":259,"kind":1024,"name":"fields","url":"interfaces/datasource.html#fields","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":260,"kind":1024,"name":"extractUpdateTime","url":"interfaces/datasource.html#extractupdatetime","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":261,"kind":1024,"name":"isExtract","url":"interfaces/datasource.html#isextract","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":262,"kind":1024,"name":"isPublished","url":"interfaces/datasource.html#ispublished","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSource"},{"id":263,"kind":2048,"name":"refreshAsync","url":"interfaces/datasource.html#refreshasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":264,"kind":2048,"name":"getActiveTablesAsync","url":"interfaces/datasource.html#getactivetablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":265,"kind":2048,"name":"getConnectionSummariesAsync","url":"interfaces/datasource.html#getconnectionsummariesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":266,"kind":2048,"name":"getUnderlyingDataAsync","url":"interfaces/datasource.html#getunderlyingdataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":267,"kind":2048,"name":"getLogicalTablesAsync","url":"interfaces/datasource.html#getlogicaltablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":268,"kind":2048,"name":"getLogicalTableDataAsync","url":"interfaces/datasource.html#getlogicaltabledataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":269,"kind":2048,"name":"getLogicalTableDataReaderAsync","url":"interfaces/datasource.html#getlogicaltabledatareaderasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"DataSource"},{"id":270,"kind":256,"name":"Field","url":"interfaces/field.html","classes":"tsd-kind-interface"},{"id":271,"kind":1024,"name":"name","url":"interfaces/field.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":272,"kind":1024,"name":"id","url":"interfaces/field.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":273,"kind":1024,"name":"description","url":"interfaces/field.html#description","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":274,"kind":1024,"name":"dataSource","url":"interfaces/field.html#datasource","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":275,"kind":1024,"name":"role","url":"interfaces/field.html#role","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":276,"kind":1024,"name":"isHidden","url":"interfaces/field.html#ishidden","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":277,"kind":1024,"name":"isGenerated","url":"interfaces/field.html#isgenerated","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":278,"kind":1024,"name":"isCalculatedField","url":"interfaces/field.html#iscalculatedfield","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":279,"kind":1024,"name":"aggregation","url":"interfaces/field.html#aggregation","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":280,"kind":1024,"name":"columnType","url":"interfaces/field.html#columntype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":281,"kind":1024,"name":"isCombinedField","url":"interfaces/field.html#iscombinedfield","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Field"},{"id":282,"kind":256,"name":"ConnectionSummary","url":"interfaces/connectionsummary.html","classes":"tsd-kind-interface"},{"id":283,"kind":1024,"name":"name","url":"interfaces/connectionsummary.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":284,"kind":1024,"name":"id","url":"interfaces/connectionsummary.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":285,"kind":1024,"name":"type","url":"interfaces/connectionsummary.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":286,"kind":1024,"name":"serverURI","url":"interfaces/connectionsummary.html#serveruri","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ConnectionSummary"},{"id":287,"kind":256,"name":"TableSummary","url":"interfaces/tablesummary.html","classes":"tsd-kind-interface"},{"id":288,"kind":1024,"name":"name","url":"interfaces/tablesummary.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":289,"kind":1024,"name":"id","url":"interfaces/tablesummary.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":290,"kind":1024,"name":"connectionId","url":"interfaces/tablesummary.html#connectionid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":291,"kind":1024,"name":"customSQL","url":"interfaces/tablesummary.html#customsql","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableSummary"},{"id":292,"kind":256,"name":"DataSourceUnderlyingDataOptions","url":"interfaces/datasourceunderlyingdataoptions.html","classes":"tsd-kind-interface"},{"id":293,"kind":1024,"name":"ignoreAliases","url":"interfaces/datasourceunderlyingdataoptions.html#ignorealiases","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":294,"kind":1024,"name":"columnsToInclude","url":"interfaces/datasourceunderlyingdataoptions.html#columnstoinclude","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":295,"kind":1024,"name":"columnsToIncludeById","url":"interfaces/datasourceunderlyingdataoptions.html#columnstoincludebyid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":296,"kind":1024,"name":"maxRows","url":"interfaces/datasourceunderlyingdataoptions.html#maxrows","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":297,"kind":1024,"name":"includeDataValuesOption","url":"interfaces/datasourceunderlyingdataoptions.html#includedatavaluesoption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DataSourceUnderlyingDataOptions"},{"id":298,"kind":256,"name":"LogicalTable","url":"interfaces/logicaltable.html","classes":"tsd-kind-interface"},{"id":299,"kind":1024,"name":"id","url":"interfaces/logicaltable.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"LogicalTable"},{"id":300,"kind":1024,"name":"caption","url":"interfaces/logicaltable.html#caption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"LogicalTable"},{"id":301,"kind":256,"name":"Filter","url":"interfaces/filter.html","classes":"tsd-kind-interface"},{"id":302,"kind":1024,"name":"worksheetName","url":"interfaces/filter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":303,"kind":1024,"name":"filterType","url":"interfaces/filter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":304,"kind":1024,"name":"fieldName","url":"interfaces/filter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":305,"kind":1024,"name":"fieldId","url":"interfaces/filter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Filter"},{"id":306,"kind":2048,"name":"getFieldAsync","url":"interfaces/filter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":307,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/filter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":308,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/filter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Filter"},{"id":309,"kind":256,"name":"CategoricalFilter","url":"interfaces/categoricalfilter.html","classes":"tsd-kind-interface"},{"id":310,"kind":1024,"name":"isAllSelected","url":"interfaces/categoricalfilter.html#isallselected","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":311,"kind":1024,"name":"appliedValues","url":"interfaces/categoricalfilter.html#appliedvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":312,"kind":1024,"name":"isExcludeMode","url":"interfaces/categoricalfilter.html#isexcludemode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":313,"kind":2048,"name":"getDomainAsync","url":"interfaces/categoricalfilter.html#getdomainasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"CategoricalFilter"},{"id":314,"kind":1024,"name":"worksheetName","url":"interfaces/categoricalfilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":315,"kind":1024,"name":"filterType","url":"interfaces/categoricalfilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":316,"kind":1024,"name":"fieldName","url":"interfaces/categoricalfilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":317,"kind":1024,"name":"fieldId","url":"interfaces/categoricalfilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":318,"kind":2048,"name":"getFieldAsync","url":"interfaces/categoricalfilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":319,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/categoricalfilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":320,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/categoricalfilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"CategoricalFilter"},{"id":321,"kind":256,"name":"HierarchicalFilter","url":"interfaces/hierarchicalfilter.html","classes":"tsd-kind-interface"},{"id":322,"kind":1024,"name":"dimensionName","url":"interfaces/hierarchicalfilter.html#dimensionname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":323,"kind":1024,"name":"hierarchyCaption","url":"interfaces/hierarchicalfilter.html#hierarchycaption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":324,"kind":1024,"name":"numberOfLevels","url":"interfaces/hierarchicalfilter.html#numberoflevels","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":325,"kind":1024,"name":"levelDetails","url":"interfaces/hierarchicalfilter.html#leveldetails","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":326,"kind":1024,"name":"isAllSelected","url":"interfaces/hierarchicalfilter.html#isallselected","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":327,"kind":1024,"name":"appliedValues","url":"interfaces/hierarchicalfilter.html#appliedvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilter"},{"id":328,"kind":1024,"name":"worksheetName","url":"interfaces/hierarchicalfilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":329,"kind":1024,"name":"filterType","url":"interfaces/hierarchicalfilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":330,"kind":1024,"name":"fieldName","url":"interfaces/hierarchicalfilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":331,"kind":1024,"name":"fieldId","url":"interfaces/hierarchicalfilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":332,"kind":2048,"name":"getFieldAsync","url":"interfaces/hierarchicalfilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":333,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/hierarchicalfilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":334,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/hierarchicalfilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"HierarchicalFilter"},{"id":335,"kind":256,"name":"RangeFilter","url":"interfaces/rangefilter.html","classes":"tsd-kind-interface"},{"id":336,"kind":1024,"name":"minValue","url":"interfaces/rangefilter.html#minvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":337,"kind":1024,"name":"maxValue","url":"interfaces/rangefilter.html#maxvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":338,"kind":1024,"name":"includeNullValues","url":"interfaces/rangefilter.html#includenullvalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilter"},{"id":339,"kind":2048,"name":"getDomainAsync","url":"interfaces/rangefilter.html#getdomainasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"RangeFilter"},{"id":340,"kind":1024,"name":"worksheetName","url":"interfaces/rangefilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":341,"kind":1024,"name":"filterType","url":"interfaces/rangefilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":342,"kind":1024,"name":"fieldName","url":"interfaces/rangefilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":343,"kind":1024,"name":"fieldId","url":"interfaces/rangefilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":344,"kind":2048,"name":"getFieldAsync","url":"interfaces/rangefilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":345,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/rangefilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":346,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/rangefilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RangeFilter"},{"id":347,"kind":256,"name":"RelativeDateFilter","url":"interfaces/relativedatefilter.html","classes":"tsd-kind-interface"},{"id":348,"kind":1024,"name":"anchorDate","url":"interfaces/relativedatefilter.html#anchordate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":349,"kind":1024,"name":"periodType","url":"interfaces/relativedatefilter.html#periodtype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":350,"kind":1024,"name":"rangeType","url":"interfaces/relativedatefilter.html#rangetype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":351,"kind":1024,"name":"rangeN","url":"interfaces/relativedatefilter.html#rangen","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilter"},{"id":352,"kind":1024,"name":"worksheetName","url":"interfaces/relativedatefilter.html#worksheetname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":353,"kind":1024,"name":"filterType","url":"interfaces/relativedatefilter.html#filtertype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":354,"kind":1024,"name":"fieldName","url":"interfaces/relativedatefilter.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":355,"kind":1024,"name":"fieldId","url":"interfaces/relativedatefilter.html#fieldid","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":356,"kind":2048,"name":"getFieldAsync","url":"interfaces/relativedatefilter.html#getfieldasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":357,"kind":2048,"name":"getAppliedWorksheetsAsync","url":"interfaces/relativedatefilter.html#getappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":358,"kind":2048,"name":"setAppliedWorksheetsAsync","url":"interfaces/relativedatefilter.html#setappliedworksheetsasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"RelativeDateFilter"},{"id":359,"kind":256,"name":"FilterOptions","url":"interfaces/filteroptions.html","classes":"tsd-kind-interface"},{"id":360,"kind":1024,"name":"isExcludeMode","url":"interfaces/filteroptions.html#isexcludemode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FilterOptions"},{"id":361,"kind":256,"name":"RangeFilterOptions","url":"interfaces/rangefilteroptions.html","classes":"tsd-kind-interface"},{"id":362,"kind":1024,"name":"min","url":"interfaces/rangefilteroptions.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":363,"kind":1024,"name":"max","url":"interfaces/rangefilteroptions.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":364,"kind":1024,"name":"nullOption","url":"interfaces/rangefilteroptions.html#nulloption","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeFilterOptions"},{"id":365,"kind":256,"name":"RelativeDateFilterOptions","url":"interfaces/relativedatefilteroptions.html","classes":"tsd-kind-interface"},{"id":366,"kind":1024,"name":"anchorDate","url":"interfaces/relativedatefilteroptions.html#anchordate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":367,"kind":1024,"name":"periodType","url":"interfaces/relativedatefilteroptions.html#periodtype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":368,"kind":1024,"name":"rangeType","url":"interfaces/relativedatefilteroptions.html#rangetype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":369,"kind":1024,"name":"rangeN","url":"interfaces/relativedatefilteroptions.html#rangen","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RelativeDateFilterOptions"},{"id":370,"kind":256,"name":"RangeDomain","url":"interfaces/rangedomain.html","classes":"tsd-kind-interface"},{"id":371,"kind":1024,"name":"type","url":"interfaces/rangedomain.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":372,"kind":1024,"name":"min","url":"interfaces/rangedomain.html#min","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":373,"kind":1024,"name":"max","url":"interfaces/rangedomain.html#max","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"RangeDomain"},{"id":374,"kind":256,"name":"CategoricalDomain","url":"interfaces/categoricaldomain.html","classes":"tsd-kind-interface"},{"id":375,"kind":1024,"name":"type","url":"interfaces/categoricaldomain.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalDomain"},{"id":376,"kind":1024,"name":"values","url":"interfaces/categoricaldomain.html#values","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"CategoricalDomain"},{"id":377,"kind":256,"name":"HierarchicalFilterDataValue","url":"interfaces/hierarchicalfilterdatavalue.html","classes":"tsd-kind-interface"},{"id":378,"kind":1024,"name":"value","url":"interfaces/hierarchicalfilterdatavalue.html#value","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":379,"kind":1024,"name":"hierarchicalPath","url":"interfaces/hierarchicalfilterdatavalue.html#hierarchicalpath","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":380,"kind":1024,"name":"level","url":"interfaces/hierarchicalfilterdatavalue.html#level","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalFilterDataValue"},{"id":381,"kind":256,"name":"HierarchicalLevelDetail","url":"interfaces/hierarchicalleveldetail.html","classes":"tsd-kind-interface"},{"id":382,"kind":1024,"name":"name","url":"interfaces/hierarchicalleveldetail.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevelDetail"},{"id":383,"kind":1024,"name":"levelSelectionState","url":"interfaces/hierarchicalleveldetail.html#levelselectionstate","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevelDetail"},{"id":384,"kind":256,"name":"WorkbookFormatting","url":"interfaces/workbookformatting.html","classes":"tsd-kind-interface"},{"id":385,"kind":1024,"name":"formattingSheets","url":"interfaces/workbookformatting.html#formattingsheets","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WorkbookFormatting"},{"id":386,"kind":256,"name":"FormattingSheet","url":"interfaces/formattingsheet.html","classes":"tsd-kind-interface"},{"id":387,"kind":1024,"name":"classNameKey","url":"interfaces/formattingsheet.html#classnamekey","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FormattingSheet"},{"id":388,"kind":1024,"name":"cssProperties","url":"interfaces/formattingsheet.html#cssproperties","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FormattingSheet"},{"id":389,"kind":256,"name":"Workbook","url":"interfaces/workbook.html","classes":"tsd-kind-interface"},{"id":390,"kind":2048,"name":"getAllDataSourcesAsync","url":"interfaces/workbook.html#getalldatasourcesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Workbook"},{"id":391,"kind":256,"name":"Annotation","url":"interfaces/annotation.html","classes":"tsd-kind-interface"},{"id":392,"kind":1024,"name":"annotationHTML","url":"interfaces/annotation.html#annotationhtml","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":393,"kind":1024,"name":"annotationId","url":"interfaces/annotation.html#annotationid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":394,"kind":1024,"name":"annotationText","url":"interfaces/annotation.html#annotationtext","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":395,"kind":1024,"name":"annotationType","url":"interfaces/annotation.html#annotationtype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":396,"kind":1024,"name":"tupleId","url":"interfaces/annotation.html#tupleid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Annotation"},{"id":397,"kind":256,"name":"Size","url":"interfaces/size.html","classes":"tsd-kind-interface"},{"id":398,"kind":1024,"name":"height","url":"interfaces/size.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Size"},{"id":399,"kind":1024,"name":"width","url":"interfaces/size.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Size"},{"id":400,"kind":256,"name":"Parameter","url":"interfaces/parameter.html","classes":"tsd-kind-interface"},{"id":401,"kind":1024,"name":"name","url":"interfaces/parameter.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":402,"kind":1024,"name":"currentValue","url":"interfaces/parameter.html#currentvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":403,"kind":1024,"name":"dataType","url":"interfaces/parameter.html#datatype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":404,"kind":1024,"name":"allowableValues","url":"interfaces/parameter.html#allowablevalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":405,"kind":1024,"name":"id","url":"interfaces/parameter.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Parameter"},{"id":406,"kind":2048,"name":"changeValueAsync","url":"interfaces/parameter.html#changevalueasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Parameter"},{"id":407,"kind":2048,"name":"addEventListener","url":"interfaces/parameter.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Parameter"},{"id":408,"kind":2048,"name":"removeEventListener","url":"interfaces/parameter.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Parameter"},{"id":409,"kind":256,"name":"ParameterDomainRestriction","url":"interfaces/parameterdomainrestriction.html","classes":"tsd-kind-interface"},{"id":410,"kind":1024,"name":"type","url":"interfaces/parameterdomainrestriction.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":411,"kind":1024,"name":"allowableValues","url":"interfaces/parameterdomainrestriction.html#allowablevalues","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":412,"kind":1024,"name":"minValue","url":"interfaces/parameterdomainrestriction.html#minvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":413,"kind":1024,"name":"maxValue","url":"interfaces/parameterdomainrestriction.html#maxvalue","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":414,"kind":1024,"name":"stepSize","url":"interfaces/parameterdomainrestriction.html#stepsize","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":415,"kind":1024,"name":"dateStepPeriod","url":"interfaces/parameterdomainrestriction.html#datestepperiod","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ParameterDomainRestriction"},{"id":416,"kind":256,"name":"Sheet","url":"interfaces/sheet.html","classes":"tsd-kind-interface"},{"id":417,"kind":1024,"name":"name","url":"interfaces/sheet.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":418,"kind":1024,"name":"sheetType","url":"interfaces/sheet.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":419,"kind":2048,"name":"findParameterAsync","url":"interfaces/sheet.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Sheet"},{"id":420,"kind":1024,"name":"size","url":"interfaces/sheet.html#size","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Sheet"},{"id":421,"kind":2048,"name":"getParametersAsync","url":"interfaces/sheet.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Sheet"},{"id":422,"kind":2048,"name":"addEventListener","url":"interfaces/sheet.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Sheet"},{"id":423,"kind":2048,"name":"removeEventListener","url":"interfaces/sheet.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Sheet"},{"id":424,"kind":256,"name":"Worksheet","url":"interfaces/worksheet.html","classes":"tsd-kind-interface"},{"id":425,"kind":1024,"name":"parentDashboard","url":"interfaces/worksheet.html#parentdashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Worksheet"},{"id":426,"kind":2048,"name":"applyFilterAsync","url":"interfaces/worksheet.html#applyfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":427,"kind":2048,"name":"applyRangeFilterAsync","url":"interfaces/worksheet.html#applyrangefilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":428,"kind":2048,"name":"clearFilterAsync","url":"interfaces/worksheet.html#clearfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":429,"kind":2048,"name":"applyHierarchicalFilterAsync","url":"interfaces/worksheet.html#applyhierarchicalfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":430,"kind":2048,"name":"applyRelativeDateFilterAsync","url":"interfaces/worksheet.html#applyrelativedatefilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":431,"kind":2048,"name":"getDataSourcesAsync","url":"interfaces/worksheet.html#getdatasourcesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":432,"kind":2048,"name":"getFiltersAsync","url":"interfaces/worksheet.html#getfiltersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":433,"kind":2048,"name":"getHighlightedMarksAsync","url":"interfaces/worksheet.html#gethighlightedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":434,"kind":2048,"name":"getSelectedMarksAsync","url":"interfaces/worksheet.html#getselectedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":435,"kind":2048,"name":"getSummaryDataAsync","url":"interfaces/worksheet.html#getsummarydataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":436,"kind":2048,"name":"getSummaryDataReaderAsync","url":"interfaces/worksheet.html#getsummarydatareaderasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":437,"kind":2048,"name":"getSummaryColumnsInfoAsync","url":"interfaces/worksheet.html#getsummarycolumnsinfoasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":438,"kind":2048,"name":"getUnderlyingDataAsync","url":"interfaces/worksheet.html#getunderlyingdataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":439,"kind":2048,"name":"getUnderlyingTablesAsync","url":"interfaces/worksheet.html#getunderlyingtablesasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":440,"kind":2048,"name":"getUnderlyingTableDataAsync","url":"interfaces/worksheet.html#getunderlyingtabledataasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":441,"kind":2048,"name":"getUnderlyingTableDataReaderAsync","url":"interfaces/worksheet.html#getunderlyingtabledatareaderasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":442,"kind":2048,"name":"selectMarksByValueAsync","url":"interfaces/worksheet.html#selectmarksbyvalueasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":443,"kind":2048,"name":"clearSelectedMarksAsync","url":"interfaces/worksheet.html#clearselectedmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":444,"kind":2048,"name":"annotateMarkAsync","url":"interfaces/worksheet.html#annotatemarkasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":445,"kind":2048,"name":"getAnnotationsAsync","url":"interfaces/worksheet.html#getannotationsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":446,"kind":2048,"name":"removeAnnotationAsync","url":"interfaces/worksheet.html#removeannotationasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Worksheet"},{"id":447,"kind":1024,"name":"name","url":"interfaces/worksheet.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":448,"kind":1024,"name":"sheetType","url":"interfaces/worksheet.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":449,"kind":2048,"name":"findParameterAsync","url":"interfaces/worksheet.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":450,"kind":1024,"name":"size","url":"interfaces/worksheet.html#size","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":451,"kind":2048,"name":"getParametersAsync","url":"interfaces/worksheet.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":452,"kind":2048,"name":"addEventListener","url":"interfaces/worksheet.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":453,"kind":2048,"name":"removeEventListener","url":"interfaces/worksheet.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Worksheet"},{"id":454,"kind":256,"name":"Dashboard","url":"interfaces/dashboard.html","classes":"tsd-kind-interface"},{"id":455,"kind":1024,"name":"objects","url":"interfaces/dashboard.html#objects","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Dashboard"},{"id":456,"kind":1024,"name":"worksheets","url":"interfaces/dashboard.html#worksheets","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Dashboard"},{"id":457,"kind":2048,"name":"setZoneVisibilityAsync","url":"interfaces/dashboard.html#setzonevisibilityasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":458,"kind":2048,"name":"setDashboardObjectVisibilityAsync","url":"interfaces/dashboard.html#setdashboardobjectvisibilityasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":459,"kind":2048,"name":"getDashboardObjectById","url":"interfaces/dashboard.html#getdashboardobjectbyid","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":460,"kind":2048,"name":"moveAndResizeDashboardObjectsAsync","url":"interfaces/dashboard.html#moveandresizedashboardobjectsasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":461,"kind":2048,"name":"replayAnimationAsync","url":"interfaces/dashboard.html#replayanimationasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":462,"kind":2048,"name":"getFiltersAsync","url":"interfaces/dashboard.html#getfiltersasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":463,"kind":2048,"name":"applyFilterAsync","url":"interfaces/dashboard.html#applyfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Dashboard"},{"id":464,"kind":1024,"name":"name","url":"interfaces/dashboard.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":465,"kind":1024,"name":"sheetType","url":"interfaces/dashboard.html#sheettype","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":466,"kind":2048,"name":"findParameterAsync","url":"interfaces/dashboard.html#findparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":467,"kind":1024,"name":"size","url":"interfaces/dashboard.html#size","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":468,"kind":2048,"name":"getParametersAsync","url":"interfaces/dashboard.html#getparametersasync","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":469,"kind":2048,"name":"addEventListener","url":"interfaces/dashboard.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":470,"kind":2048,"name":"removeEventListener","url":"interfaces/dashboard.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Dashboard"},{"id":471,"kind":256,"name":"DashboardObjectPositionAndSizeUpdate","url":"interfaces/dashboardobjectpositionandsizeupdate.html","classes":"tsd-kind-interface"},{"id":472,"kind":1024,"name":"dashboardObjectID","url":"interfaces/dashboardobjectpositionandsizeupdate.html#dashboardobjectid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":473,"kind":1024,"name":"x","url":"interfaces/dashboardobjectpositionandsizeupdate.html#x","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":474,"kind":1024,"name":"y","url":"interfaces/dashboardobjectpositionandsizeupdate.html#y","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":475,"kind":1024,"name":"width","url":"interfaces/dashboardobjectpositionandsizeupdate.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":476,"kind":1024,"name":"height","url":"interfaces/dashboardobjectpositionandsizeupdate.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObjectPositionAndSizeUpdate"},{"id":477,"kind":256,"name":"DashboardObject","url":"interfaces/dashboardobject.html","classes":"tsd-kind-interface"},{"id":478,"kind":1024,"name":"dashboard","url":"interfaces/dashboardobject.html#dashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":479,"kind":1024,"name":"type","url":"interfaces/dashboardobject.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":480,"kind":1024,"name":"position","url":"interfaces/dashboardobject.html#position","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":481,"kind":1024,"name":"size","url":"interfaces/dashboardobject.html#size","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":482,"kind":1024,"name":"worksheet","url":"interfaces/dashboardobject.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":483,"kind":1024,"name":"name","url":"interfaces/dashboardobject.html#name","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":484,"kind":1024,"name":"isFloating","url":"interfaces/dashboardobject.html#isfloating","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":485,"kind":1024,"name":"isVisible","url":"interfaces/dashboardobject.html#isvisible","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":486,"kind":1024,"name":"id","url":"interfaces/dashboardobject.html#id","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardObject"},{"id":487,"kind":256,"name":"Point","url":"interfaces/point.html","classes":"tsd-kind-interface"},{"id":488,"kind":1024,"name":"x","url":"interfaces/point.html#x","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Point"},{"id":489,"kind":1024,"name":"y","url":"interfaces/point.html#y","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Point"},{"id":490,"kind":256,"name":"HierarchicalLevels","url":"interfaces/hierarchicallevels.html","classes":"tsd-kind-interface"},{"id":491,"kind":1024,"name":"levels","url":"interfaces/hierarchicallevels.html#levels","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"HierarchicalLevels"},{"id":492,"kind":4194304,"name":"ZoneVisibilityMap","url":"globals.html#zonevisibilitymap","classes":"tsd-kind-type-alias"},{"id":493,"kind":4194304,"name":"DashboardObjectVisibilityMap","url":"globals.html#dashboardobjectvisibilitymap","classes":"tsd-kind-type-alias"},{"id":494,"kind":4194304,"name":"DashboardObjectPositionAndSizeUpdateArray","url":"globals.html#dashboardobjectpositionandsizeupdatearray","classes":"tsd-kind-type-alias"},{"id":495,"kind":256,"name":"DashboardContent","url":"interfaces/dashboardcontent.html","classes":"tsd-kind-interface"},{"id":496,"kind":1024,"name":"dashboard","url":"interfaces/dashboardcontent.html#dashboard","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardContent"},{"id":497,"kind":256,"name":"Environment","url":"interfaces/environment.html","classes":"tsd-kind-interface"},{"id":498,"kind":1024,"name":"apiVersion","url":"interfaces/environment.html#apiversion","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":499,"kind":1024,"name":"context","url":"interfaces/environment.html#context","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":500,"kind":1024,"name":"language","url":"interfaces/environment.html#language","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":501,"kind":1024,"name":"country","url":"interfaces/environment.html#country","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":502,"kind":1024,"name":"workbookFormatting","url":"interfaces/environment.html#workbookformatting","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":503,"kind":1024,"name":"locale","url":"interfaces/environment.html#locale","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":504,"kind":1024,"name":"mode","url":"interfaces/environment.html#mode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":505,"kind":1024,"name":"operatingSystem","url":"interfaces/environment.html#operatingsystem","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":506,"kind":1024,"name":"tableauVersion","url":"interfaces/environment.html#tableauversion","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Environment"},{"id":507,"kind":256,"name":"Settings","url":"interfaces/settings.html","classes":"tsd-kind-interface"},{"id":508,"kind":2048,"name":"erase","url":"interfaces/settings.html#erase","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":509,"kind":2048,"name":"get","url":"interfaces/settings.html#get","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":510,"kind":2048,"name":"getAll","url":"interfaces/settings.html#getall","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":511,"kind":1024,"name":"isModified","url":"interfaces/settings.html#ismodified","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Settings"},{"id":512,"kind":2048,"name":"saveAsync","url":"interfaces/settings.html#saveasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":513,"kind":2048,"name":"set","url":"interfaces/settings.html#set","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Settings"},{"id":514,"kind":2048,"name":"addEventListener","url":"interfaces/settings.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Settings"},{"id":515,"kind":2048,"name":"removeEventListener","url":"interfaces/settings.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface tsd-is-inherited","parent":"Settings"},{"id":516,"kind":256,"name":"UI","url":"interfaces/ui.html","classes":"tsd-kind-interface"},{"id":517,"kind":2048,"name":"displayDialogAsync","url":"interfaces/ui.html#displaydialogasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"UI"},{"id":518,"kind":2048,"name":"closeDialog","url":"interfaces/ui.html#closedialog","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"UI"},{"id":519,"kind":256,"name":"DialogOptions","url":"interfaces/dialogoptions.html","classes":"tsd-kind-interface"},{"id":520,"kind":1024,"name":"width","url":"interfaces/dialogoptions.html#width","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DialogOptions"},{"id":521,"kind":1024,"name":"height","url":"interfaces/dialogoptions.html#height","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DialogOptions"},{"id":522,"kind":1024,"name":"dialogStyle","url":"interfaces/dialogoptions.html#dialogstyle","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DialogOptions"},{"id":523,"kind":256,"name":"Extensions","url":"interfaces/extensions.html","classes":"tsd-kind-interface"},{"id":524,"kind":2048,"name":"initializeAsync","url":"interfaces/extensions.html#initializeasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":525,"kind":2048,"name":"initializeDialogAsync","url":"interfaces/extensions.html#initializedialogasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":526,"kind":1024,"name":"dashboardContent","url":"interfaces/extensions.html#dashboardcontent","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":527,"kind":1024,"name":"environment","url":"interfaces/extensions.html#environment","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":528,"kind":1024,"name":"settings","url":"interfaces/extensions.html#settings","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":529,"kind":1024,"name":"ui","url":"interfaces/extensions.html#ui","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":530,"kind":1024,"name":"workbook","url":"interfaces/extensions.html#workbook","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":531,"kind":1024,"name":"dashboardObjectId","url":"interfaces/extensions.html#dashboardobjectid","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"Extensions"},{"id":532,"kind":2048,"name":"createVizImageAsync","url":"interfaces/extensions.html#createvizimageasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":533,"kind":2048,"name":"setClickThroughAsync","url":"interfaces/extensions.html#setclickthroughasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"Extensions"},{"id":534,"kind":4,"name":"ErrorCodes","url":"enums/tableau.errorcodes.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":535,"kind":16,"name":"APINotInitialized","url":"enums/tableau.errorcodes.html#apinotinitialized","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":536,"kind":16,"name":"VisibilityError","url":"enums/tableau.errorcodes.html#visibilityerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":537,"kind":16,"name":"DialogAlreadyOpen","url":"enums/tableau.errorcodes.html#dialogalreadyopen","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":538,"kind":16,"name":"DialogClosedByUser","url":"enums/tableau.errorcodes.html#dialogclosedbyuser","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":539,"kind":16,"name":"InternalError","url":"enums/tableau.errorcodes.html#internalerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":540,"kind":16,"name":"InvalidDomainDialog","url":"enums/tableau.errorcodes.html#invaliddomaindialog","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":541,"kind":16,"name":"InvalidParameter","url":"enums/tableau.errorcodes.html#invalidparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":542,"kind":16,"name":"MissingFilter","url":"enums/tableau.errorcodes.html#missingfilter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":543,"kind":16,"name":"MissingParameter","url":"enums/tableau.errorcodes.html#missingparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":544,"kind":16,"name":"ServerError","url":"enums/tableau.errorcodes.html#servererror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":545,"kind":16,"name":"SettingSaveInProgress","url":"enums/tableau.errorcodes.html#settingsaveinprogress","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":546,"kind":16,"name":"UnsupportedEventName","url":"enums/tableau.errorcodes.html#unsupportedeventname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":547,"kind":16,"name":"UnsupportedMethodForDataSourceType","url":"enums/tableau.errorcodes.html#unsupportedmethodfordatasourcetype","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ErrorCodes"},{"id":548,"kind":4,"name":"ExtensionContext","url":"enums/tableau.extensioncontext.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":549,"kind":16,"name":"Desktop","url":"enums/tableau.extensioncontext.html#desktop","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionContext"},{"id":550,"kind":16,"name":"Server","url":"enums/tableau.extensioncontext.html#server","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionContext"},{"id":551,"kind":4,"name":"ExtensionMode","url":"enums/tableau.extensionmode.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":552,"kind":16,"name":"Authoring","url":"enums/tableau.extensionmode.html#authoring","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionMode"},{"id":553,"kind":16,"name":"Viewing","url":"enums/tableau.extensionmode.html#viewing","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.ExtensionMode"},{"id":554,"kind":4,"name":"TableauEventType","url":"enums/tableau.tableaueventtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":555,"kind":16,"name":"FilterChanged","url":"enums/tableau.tableaueventtype.html#filterchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":556,"kind":16,"name":"MarkSelectionChanged","url":"enums/tableau.tableaueventtype.html#markselectionchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":557,"kind":16,"name":"ParameterChanged","url":"enums/tableau.tableaueventtype.html#parameterchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":558,"kind":16,"name":"SettingsChanged","url":"enums/tableau.tableaueventtype.html#settingschanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":559,"kind":16,"name":"DashboardLayoutChanged","url":"enums/tableau.tableaueventtype.html#dashboardlayoutchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":560,"kind":16,"name":"WorkbookFormattingChanged","url":"enums/tableau.tableaueventtype.html#workbookformattingchanged","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.TableauEventType"},{"id":561,"kind":4,"name":"VizImageEncodingType","url":"enums/tableau.vizimageencodingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":562,"kind":16,"name":"Discrete","url":"enums/tableau.vizimageencodingtype.html#discrete","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageEncodingType"},{"id":563,"kind":16,"name":"Continuous","url":"enums/tableau.vizimageencodingtype.html#continuous","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageEncodingType"},{"id":564,"kind":4,"name":"VizImageSortDirectionType","url":"enums/tableau.vizimagesortdirectiontype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":565,"kind":16,"name":"Ascending","url":"enums/tableau.vizimagesortdirectiontype.html#ascending","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSortDirectionType"},{"id":566,"kind":16,"name":"Descending","url":"enums/tableau.vizimagesortdirectiontype.html#descending","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSortDirectionType"},{"id":567,"kind":4,"name":"VizImagePaletteType","url":"enums/tableau.vizimagepalettetype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":568,"kind":16,"name":"CustomDiverging","url":"enums/tableau.vizimagepalettetype.html#customdiverging","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImagePaletteType"},{"id":569,"kind":16,"name":"CustomSequential","url":"enums/tableau.vizimagepalettetype.html#customsequential","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImagePaletteType"},{"id":570,"kind":4,"name":"VizImageSizeSettingType","url":"enums/tableau.vizimagesizesettingtype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":571,"kind":16,"name":"Fixed","url":"enums/tableau.vizimagesizesettingtype.html#fixed","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingType"},{"id":572,"kind":16,"name":"Manual","url":"enums/tableau.vizimagesizesettingtype.html#manual","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingType"},{"id":573,"kind":4,"name":"VizImageSizeSettingAlignmentType","url":"enums/tableau.vizimagesizesettingalignmenttype.html","classes":"tsd-kind-enum tsd-parent-kind-module","parent":"Tableau"},{"id":574,"kind":16,"name":"Right","url":"enums/tableau.vizimagesizesettingalignmenttype.html#right","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":575,"kind":16,"name":"Left","url":"enums/tableau.vizimagesizesettingalignmenttype.html#left","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":576,"kind":16,"name":"Center","url":"enums/tableau.vizimagesizesettingalignmenttype.html#center","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"Tableau.VizImageSizeSettingAlignmentType"},{"id":577,"kind":32,"name":"extensions","url":"modules/tableau.html#extensions","classes":"tsd-kind-variable tsd-parent-kind-module","parent":"Tableau"},{"id":578,"kind":256,"name":"TableauWorksheetEvent","url":"interfaces/tableauworksheetevent.html","classes":"tsd-kind-interface"},{"id":579,"kind":1024,"name":"worksheet","url":"interfaces/tableauworksheetevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauWorksheetEvent"},{"id":580,"kind":1024,"name":"sheet","url":"interfaces/tableauworksheetevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauWorksheetEvent"},{"id":581,"kind":1024,"name":"type","url":"interfaces/tableauworksheetevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauWorksheetEvent"},{"id":582,"kind":256,"name":"MarksSelectedEvent","url":"interfaces/marksselectedevent.html","classes":"tsd-kind-interface"},{"id":583,"kind":2048,"name":"getMarksAsync","url":"interfaces/marksselectedevent.html#getmarksasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"MarksSelectedEvent"},{"id":584,"kind":1024,"name":"worksheet","url":"interfaces/marksselectedevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":585,"kind":1024,"name":"sheet","url":"interfaces/marksselectedevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":586,"kind":1024,"name":"type","url":"interfaces/marksselectedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"MarksSelectedEvent"},{"id":587,"kind":256,"name":"TableauSheetEvent","url":"interfaces/tableausheetevent.html","classes":"tsd-kind-interface"},{"id":588,"kind":1024,"name":"sheet","url":"interfaces/tableausheetevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauSheetEvent"},{"id":589,"kind":1024,"name":"type","url":"interfaces/tableausheetevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauSheetEvent"},{"id":590,"kind":256,"name":"FilterChangedEvent","url":"interfaces/filterchangedevent.html","classes":"tsd-kind-interface"},{"id":591,"kind":1024,"name":"fieldName","url":"interfaces/filterchangedevent.html#fieldname","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"FilterChangedEvent"},{"id":592,"kind":2048,"name":"getFilterAsync","url":"interfaces/filterchangedevent.html#getfilterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"FilterChangedEvent"},{"id":593,"kind":1024,"name":"worksheet","url":"interfaces/filterchangedevent.html#worksheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":594,"kind":1024,"name":"sheet","url":"interfaces/filterchangedevent.html#sheet","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":595,"kind":1024,"name":"type","url":"interfaces/filterchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"FilterChangedEvent"},{"id":596,"kind":256,"name":"WorkbookFormattingChangedEvent","url":"interfaces/workbookformattingchangedevent.html","classes":"tsd-kind-interface"},{"id":597,"kind":1024,"name":"formatting","url":"interfaces/workbookformattingchangedevent.html#formatting","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"WorkbookFormattingChangedEvent"},{"id":598,"kind":1024,"name":"type","url":"interfaces/workbookformattingchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"WorkbookFormattingChangedEvent"},{"id":599,"kind":256,"name":"TableauEvent","url":"interfaces/tableauevent.html","classes":"tsd-kind-interface"},{"id":600,"kind":1024,"name":"type","url":"interfaces/tableauevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauEvent"},{"id":601,"kind":256,"name":"ParameterChangedEvent","url":"interfaces/parameterchangedevent.html","classes":"tsd-kind-interface"},{"id":602,"kind":2048,"name":"getParameterAsync","url":"interfaces/parameterchangedevent.html#getparameterasync","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"ParameterChangedEvent"},{"id":603,"kind":1024,"name":"type","url":"interfaces/parameterchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"ParameterChangedEvent"},{"id":604,"kind":256,"name":"SettingsChangedEvent","url":"interfaces/settingschangedevent.html","classes":"tsd-kind-interface"},{"id":605,"kind":1024,"name":"newSettings","url":"interfaces/settingschangedevent.html#newsettings","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"SettingsChangedEvent"},{"id":606,"kind":65536,"name":"__type","url":"interfaces/settingschangedevent.html#newsettings.__type","classes":"tsd-kind-type-literal tsd-parent-kind-property","parent":"SettingsChangedEvent.newSettings"},{"id":607,"kind":1024,"name":"type","url":"interfaces/settingschangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"SettingsChangedEvent"},{"id":608,"kind":256,"name":"DashboardLayoutChangedEvent","url":"interfaces/dashboardlayoutchangedevent.html","classes":"tsd-kind-interface"},{"id":609,"kind":1024,"name":"dashboardLayoutChangeDetails","url":"interfaces/dashboardlayoutchangedevent.html#dashboardlayoutchangedetails","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"DashboardLayoutChangedEvent"},{"id":610,"kind":1024,"name":"type","url":"interfaces/dashboardlayoutchangedevent.html#type","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"DashboardLayoutChangedEvent"},{"id":611,"kind":256,"name":"EventListenerManager","url":"interfaces/eventlistenermanager.html","classes":"tsd-kind-interface"},{"id":612,"kind":2048,"name":"addEventListener","url":"interfaces/eventlistenermanager.html#addeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"EventListenerManager"},{"id":613,"kind":2048,"name":"removeEventListener","url":"interfaces/eventlistenermanager.html#removeeventlistener","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"EventListenerManager"},{"id":614,"kind":4194304,"name":"DashboardLayoutChangeDetails","url":"globals.html#dashboardlayoutchangedetails","classes":"tsd-kind-type-alias"},{"id":615,"kind":4194304,"name":"TableauEventHandlerFn","url":"globals.html#tableaueventhandlerfn","classes":"tsd-kind-type-alias"},{"id":616,"kind":65536,"name":"__type","url":"globals.html#tableaueventhandlerfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"TableauEventHandlerFn"},{"id":617,"kind":4194304,"name":"TableauEventUnregisterFn","url":"globals.html#tableaueventunregisterfn","classes":"tsd-kind-type-alias"},{"id":618,"kind":65536,"name":"__type","url":"globals.html#tableaueventunregisterfn.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"TableauEventUnregisterFn"},{"id":619,"kind":256,"name":"TableauError","url":"interfaces/tableauerror.html","classes":"tsd-kind-interface"},{"id":620,"kind":1024,"name":"errorCode","url":"interfaces/tableauerror.html#errorcode","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauError"},{"id":621,"kind":1024,"name":"name","url":"interfaces/tableauerror.html#name","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":622,"kind":1024,"name":"message","url":"interfaces/tableauerror.html#message","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":623,"kind":1024,"name":"stack","url":"interfaces/tableauerror.html#stack","classes":"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited","parent":"TableauError"},{"id":624,"kind":1024,"name":"Error","url":"interfaces/tableauerror.html#error","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"TableauError"},{"id":625,"kind":4,"name":"SharedErrorCodes","url":"enums/sharederrorcodes.html","classes":"tsd-kind-enum"},{"id":626,"kind":16,"name":"InvalidAggregationFieldName","url":"enums/sharederrorcodes.html#invalidaggregationfieldname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":627,"kind":16,"name":"InvalidFilterFieldName","url":"enums/sharederrorcodes.html#invalidfilterfieldname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":628,"kind":16,"name":"InvalidFilterFieldValue","url":"enums/sharederrorcodes.html#invalidfilterfieldvalue","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":629,"kind":16,"name":"InvalidSelectionDate","url":"enums/sharederrorcodes.html#invalidselectiondate","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":630,"kind":16,"name":"InvalidSelectionFieldName","url":"enums/sharederrorcodes.html#invalidselectionfieldname","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":631,"kind":16,"name":"InvalidSelectionValue","url":"enums/sharederrorcodes.html#invalidselectionvalue","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":632,"kind":16,"name":"InternalError","url":"enums/sharederrorcodes.html#internalerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":633,"kind":16,"name":"InvalidParameter","url":"enums/sharederrorcodes.html#invalidparameter","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":634,"kind":16,"name":"NotActiveSheet","url":"enums/sharederrorcodes.html#notactivesheet","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":635,"kind":16,"name":"ImplementationError","url":"enums/sharederrorcodes.html#implementationerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":636,"kind":16,"name":"ApiExecutionError","url":"enums/sharederrorcodes.html#apiexecutionerror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":637,"kind":16,"name":"ServerError","url":"enums/sharederrorcodes.html#servererror","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"},{"id":638,"kind":16,"name":"Timeout","url":"enums/sharederrorcodes.html#timeout","classes":"tsd-kind-enum-member tsd-parent-kind-enum","parent":"SharedErrorCodes"}]}; \ No newline at end of file diff --git a/docs/enums/sharederrorcodes.html b/docs/enums/sharederrorcodes.html index 78a17ec3..7304e4d1 100644 --- a/docs/enums/sharederrorcodes.html +++ b/docs/enums/sharederrorcodes.html @@ -74,8 +74,15 @@

Enumeration members

  • ApiExecutionError
  • ImplementationError
  • InternalError
  • +
  • InvalidAggregationFieldName
  • +
  • InvalidFilterFieldName
  • +
  • InvalidFilterFieldValue
  • InvalidParameter
  • +
  • InvalidSelectionDate
  • +
  • InvalidSelectionFieldName
  • +
  • InvalidSelectionValue
  • NotActiveSheet
  • +
  • ServerError
  • Timeout
  • @@ -90,7 +97,7 @@

    ApiExecutionError

    ApiExecutionError: = "api-execution-error"
    @@ -105,7 +112,7 @@

    ImplementationError

    ImplementationError: = "wrong-implementation"
    @@ -120,7 +127,7 @@

    InternalError

    InternalError: = "internal-error"
    @@ -129,13 +136,59 @@

    InternalError

    +
    + +

    InvalidAggregationFieldName

    +
    InvalidAggregationFieldName: = "invalid-aggregation-field-name"
    + +
    +
    +

    An invalid aggregation was specified for the filter, such as setting a range filter to "SUM(Sales)" instead of + "Sales".

    +
    +
    +
    +
    + +

    InvalidFilterFieldName

    +
    InvalidFilterFieldName: = "invalid-filter-name"
    + +
    +
    +

    A filter operation was attempted on a field that does not exist in the data source.

    +
    +
    +
    +
    + +

    InvalidFilterFieldValue

    +
    InvalidFilterFieldValue: = "invalid-filter-fieldValue"
    + +
    +
    +

    A filter operation was attempted using a value that is the wrong data type or format.

    +
    +
    +

    InvalidParameter

    InvalidParameter: = "invalid-parameter"
    @@ -144,13 +197,58 @@

    InvalidParameter

    +
    + +

    InvalidSelectionDate

    +
    InvalidSelectionDate: = "invalid-selection-date"
    + +
    +
    +

    An invalid date value was specified in a Sheet.selectMarksAsync() call for a date field.

    +
    +
    +
    +
    + +

    InvalidSelectionFieldName

    +
    InvalidSelectionFieldName: = "invalid-selection-fieldName"
    + +
    +
    +

    A field was specified in a Sheet.selectMarksAsync() call that does not exist in the data source.

    +
    +
    +
    +
    + +

    InvalidSelectionValue

    +
    InvalidSelectionValue: = "invalid-selection-value"
    + +
    +
    +

    An invalid value was specified in a Sheet.selectMarksAsync() call.

    +
    +
    +

    NotActiveSheet

    NotActiveSheet: = "not-active-sheet"
    @@ -159,13 +257,28 @@

    NotActiveSheet

    +
    + +

    ServerError

    +
    ServerError: = "server-error"
    + +
    +
    +

    A general-purpose server error occurred. Details are contained in the Error object.

    +
    +
    +

    Timeout

    Timeout: = "timeout"
    @@ -200,12 +313,33 @@

    Timeout

  • InternalError
  • +
  • + InvalidAggregationFieldName +
  • +
  • + InvalidFilterFieldName +
  • +
  • + InvalidFilterFieldValue +
  • InvalidParameter
  • +
  • + InvalidSelectionDate +
  • +
  • + InvalidSelectionFieldName +
  • +
  • + InvalidSelectionValue +
  • NotActiveSheet
  • +
  • + ServerError +
  • Timeout
  • diff --git a/docs/enums/tableau.analyticsobjecttype.html b/docs/enums/tableau.analyticsobjecttype.html index c2ddbd71..182d5dc4 100644 --- a/docs/enums/tableau.analyticsobjecttype.html +++ b/docs/enums/tableau.analyticsobjecttype.html @@ -147,6 +147,9 @@

    TrendLine

    @@ -102,7 +102,7 @@

    StoryTitle

    StoryTitle: = "tableau-story-title"
    @@ -112,7 +112,7 @@

    Tooltip

    Tooltip: = "tableau-tooltip"
    @@ -122,7 +122,7 @@

    Worksheet

    Worksheet: = "tableau-worksheet"
    @@ -132,7 +132,7 @@

    WorksheetTitle

    WorksheetTitle: = "tableau-worksheet-title"
    @@ -154,6 +154,9 @@

    WorksheetTitle

  • AnalyticsObjectType
  • +
  • + AnnotationType +
  • @@ -493,6 +539,9 @@

    Returns Promise getLogicalTableDataAsync +
  • + getLogicalTableDataReaderAsync +
  • getLogicalTablesAsync
  • diff --git a/docs/interfaces/datasourceunderlyingdataoptions.html b/docs/interfaces/datasourceunderlyingdataoptions.html index 2cd5ba56..62f9e5b7 100644 --- a/docs/interfaces/datasourceunderlyingdataoptions.html +++ b/docs/interfaces/datasourceunderlyingdataoptions.html @@ -104,7 +104,7 @@

    Optional columnsToInclude
    columnsToInclude: Array<string>
    @@ -119,7 +119,7 @@

    Optional columnsToInclude
    columnsToIncludeById: Array<string>
    @@ -140,7 +140,7 @@

    Optional ignoreAliasesignoreAliases: undefined | false | true

    @@ -155,7 +155,7 @@

    Optional includeData
    includeDataValuesOption: IncludeDataValuesOption
    @@ -177,13 +177,19 @@

    Optional maxRows

    maxRows: undefined | number
    -

    The maximum number of rows to return. 10,000 by default (this goes away once pagination is implemented)

    +

    The maximum number of rows to return. 10,000 by default

    +
    +
    since
    +

    1.10.0 and Tableau 2022.4 Consider using a DataTableReader returned by one of the get...DataReaderAsync methods + to avoid the 10,000 row limit.

    +
    +
    diff --git a/docs/interfaces/datatable.html b/docs/interfaces/datatable.html index b342ba7c..4793eddb 100644 --- a/docs/interfaces/datatable.html +++ b/docs/interfaces/datatable.html @@ -131,11 +131,11 @@

    data

    -

    isSummaryData

    -
    isSummaryData: boolean
    +

    Optional isSummaryData

    +
    isSummaryData: undefined | false | true
    @@ -149,23 +149,24 @@

    isSummaryData

    -

    isTotalRowCountLimited

    -
    isTotalRowCountLimited: boolean
    +

    Optional isTotalRowCountLimited

    +
    isTotalRowCountLimited: undefined | false | true
    returns
    -

    True if the rows returned have been limited to the maximum number of retrievable rows - for getUnderlyingDataAsync. (This value is currently set to 10,000.) - A value of true indicates that the caller requested more rows than the current limit +

    True if the rows returned have been limited to the maximum number of retrievable rows. + A value of true indicates that the caller requested more rows than the limit and the underlying data source contains more rows than can be returned. - Note that if maxRows is unspecified (maxRows = 0), the call to getUnderlyingDataAsync - requests all rows in the data source. - The limit on the maximum number of rows returned does not apply to getSummaryDataAsync.

    + isTotalRowCountLimited can be true in the case of ... + getAllPagesAsync with more than 4,000,000 rows in the summary or underlying data. + getLogicalTableDataAsync or getUnderlyingTableDataAsync with more than 10,000 rows in the data. + In all these cases, limits can be avoided by processing the data in page sized chunks with DataTableReader. + isTotalRowCountLimited is always false in the results of DataTableReader.getPageAsync().

    @@ -181,11 +182,10 @@

    Optional marksInfo

    -
    notimplemented
    -
    returns

    An array of information about marks. Each mark in the array corresponds - to a row in the data of this DataTable.

    + to a row in the data of this DataTable. MarkInfo is only currently + available within results from getSelectedMarksAsync / getMarksAsync.

    diff --git a/docs/interfaces/datatablereader.html b/docs/interfaces/datatablereader.html new file mode 100644 index 00000000..6a60f66f --- /dev/null +++ b/docs/interfaces/datatablereader.html @@ -0,0 +1,393 @@ + + + + + + DataTableReader | Dashboard Extensions + + + + + +
    +
    +
    +
    + +
    +
    + Options +
    +
    + All +
      +
    • Public
    • +
    • Public/Protected
    • +
    • All
    • +
    +
    + + + + +
    +
    + Menu +
    +
    +
    +
    +
    +
    + +

    Interface DataTableReader

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    A DataTableReader allows iteration over summary or underlying data by pages. + The page size is established when the DataTableReader is created. + (See getLogicalTableDataReaderAsync, getSummaryDataReaderAsync, or getUnderlyingTableDataReaderAsync.) + The normal sequence of operations would be to

    +
      +
    1. Create the DataTableReader for the desired DataTable.
    2. +
    3. Use DataTableReader.totalRowCount or DataTableReader.pageCount to discover how many rows or pages are in the desired DataTable.
    4. +
    5. Call DataTableReader.getPageAsync() to get the page(s) desired. Each page is a DataTable for that page. + Alternatively, based on the DataTableReader.totalRowCount, DataTableReader.getAllPagesAsync can be used to fetch the entire DataTable.
    6. +
    7. Call DataTableReader.releaseAsync() to free up resources.
    8. +
    +
    +

    Notes for usage of a DataTableReader:

    +
      +
    1. Since DataTableReaders consume server resources, an inactive DataTableReader will be automatically + released after 60 minutes of inactivity. (A new DataTableReader can be created at that time, if needed.)
    2. +
    3. Calling getPageAsync() after an explicit or automatic releaseAsync() will throw an exception.
    4. +
    5. Only one active DataTableReader per logical table id is supported.
    6. +
    7. There are still limits on the number of rows supported for underlying and logical data table readers. + The default limit is approximately 1 million rows of data for getUnderlyingTableDataReaderAsync, + and approximately 32 million cells (rows * columns) for getLogicalTableDataReaderAsync. + Administrators may change these limits to better match computing resources with the Tableau Server (Cloud) or Tableau Desktop options: + ExtensionsAndEmbeddingReaderRowLimit for getUnderlyingTableDataReaderAsync or + ExtensionsAndEmbeddingReaderCellLimit for getLogicalTableDataReaderAsync.
    8. +
    +
    +
    since
    +

    1.10.0 and Tableau 2022.4

    +
    +
    +
    +
    +
    +

    Hierarchy

    +
      +
    • + DataTableReader +
    • +
    +
    +
    +

    Index

    +
    +
    +
    +

    Properties

    + +
    +
    +

    Methods

    + +
    +
    +
    +
    +
    +

    Properties

    +
    + +

    pageCount

    +
    pageCount: number
    + +
    +
    +
    returns
    +

    The number of pages in the full data table. The last page could be a partial page.

    +
    +
    +
    +
    +
    + +

    totalRowCount

    +
    totalRowCount: number
    + +
    +
    +
    returns
    +

    The number of rows in the full data table.

    +
    +
    +
    +
    +
    +
    +

    Methods

    +
    + +

    getAllPagesAsync

    +
      +
    • getAllPagesAsync(maxRows?: undefined | number): Promise<DataTable>
    • +
    +
      +
    • + +
      +
      +

      Get all the pages of data into a single DataTable. + Calls to getAllPagesAsync() after releaseAsync() will throw an exception. + To protect against possible browser failure, getAllPagesAsync will cap the data at a maximum of 400 pages. + With a default pageRowCount of 10,000 this will give you a maximum of 4,000,000 rows of data.

      +
      +

      If sizes are larger than this, please process your data in page size chunks.

      +
      +

      Parameters

      +
        +
      • +
        Optional maxRows: undefined | number
        +
        +

        Limits the request to maxRows. If maxRows === 0, requests all rows.

        +
        +
      • +
      +

      Returns Promise<DataTable>

      +

      A DataTable containing all the data available to the DataTableReader with the maximum page count above.

      +
      // To simplify the example, we assume we have less than 4m rows of data
      +// Since we are fetching all of the data, use the default page size in getSummaryDataReaderAsync
      +const dataTableReader = await worksheet.getSummaryDataReaderAsync();
      +const dataTable = await dataTableReader.getAllPagesAsync();
      +await dataTableReader.releaseAsync();
      +// ... process the data table ...
      +
    • +
    +
    +
    + +

    getPageAsync

    +
      +
    • getPageAsync(pageNumber: number): Promise<DataTable>
    • +
    +
      +
    • + +
      +
      +

      Get a page of data. The page is returned as a DataTable. + Calls to getPageAsync() after releaseAsync() will throw an exception.

      +
      +
      +

      Parameters

      +
        +
      • +
        pageNumber: number
        +
        +

        The page number (zero-indexed) to fetch. The page number should be treated + like an array index with range: 0 <= pageNumber < pageCount.

        +
        +
      • +
      +

      Returns Promise<DataTable>

      +

      A DataTable containing the requested page. The number of rows returned + can be less than the page size at the end of the data.

      +
      const pageRowCount = 200;
      +const dataTableReader = await worksheet.getSummaryDataReaderAsync(pageRowCount, options);
      +for (let currentPage = 0; currentPage < dataTableReader.pageCount; currentPage++) {
      +  const currentPageDataTable = await dataTableReader.getPageAsync(currentPage);
      +  // ... process current page ...
      +}
      +await dataTableReader.releaseAsync();
      +
    • +
    +
    +
    + +

    releaseAsync

    +
      +
    • releaseAsync(): Promise<void>
    • +
    +
      +
    • + +
      +
      +

      Release all resources held by the DataTableReader. + Calling this when done with the DataTableReader is required practice as it frees up resources. + Calls to getPageAsync() after releaseAsync() will throw an exception.

      +
      +
      +

      Returns Promise<void>

      +
    • +
    +
    +
    +
    + +
    +
    +
    +
    +

    Legend

    +
    +
      +
    • Module
    • +
    • Object literal
    • +
    • Variable
    • +
    • Function
    • +
    • Function with type parameter
    • +
    • Index signature
    • +
    • Type alias
    • +
    • Type alias with type parameter
    • +
    +
      +
    • Enumeration
    • +
    • Enumeration member
    • +
    • Property
    • +
    • Method
    • +
    +
      +
    • Interface
    • +
    • Interface with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Index signature
    • +
    +
      +
    • Class
    • +
    • Class with type parameter
    • +
    • Constructor
    • +
    • Property
    • +
    • Method
    • +
    • Accessor
    • +
    • Index signature
    • +
    +
      +
    • Inherited constructor
    • +
    • Inherited property
    • +
    • Inherited method
    • +
    • Inherited accessor
    • +
    +
      +
    • Protected property
    • +
    • Protected method
    • +
    • Protected accessor
    • +
    +
      +
    • Private property
    • +
    • Private method
    • +
    • Private accessor
    • +
    +
      +
    • Static property
    • +
    • Static method
    • +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/docs/interfaces/datavalue.html b/docs/interfaces/datavalue.html index 92b18e71..4c5a15a4 100644 --- a/docs/interfaces/datavalue.html +++ b/docs/interfaces/datavalue.html @@ -95,7 +95,7 @@

    Optional formattedValueformattedValue: undefined | string

    @@ -113,7 +113,7 @@

    nativeValue

    nativeValue: any
    @@ -138,7 +138,7 @@

    value

    value: any
    diff --git a/docs/interfaces/dialogoptions.html b/docs/interfaces/dialogoptions.html index 9be3d1e7..9bd37479 100644 --- a/docs/interfaces/dialogoptions.html +++ b/docs/interfaces/dialogoptions.html @@ -79,6 +79,7 @@

    Index

    Properties

    @@ -88,18 +89,38 @@

    Properties

    Properties

    +
    + +

    Optional dialogStyle

    +
    dialogStyle: DialogStyle
    + +
    +
    +

    Specifies the style for the popup dialog.

    +
    +
    +
    since
    +

    1.10.0 and Tableau 2022.4

    +
    +
    +
    +

    Optional height

    height: undefined | number
    -

    Specifies the suggested height (in pixels) of the popup dialog window. Not guaranteed to be exactly that height.

    +

    Specifies the suggested height (in pixels) of the popup dialog. Not guaranteed to be exactly that height.

    @@ -109,7 +130,7 @@

    Optional width

    width: undefined | number
    @@ -135,6 +156,9 @@

    Optional width

  • DialogOptions
      +
    • + dialogStyle +
    • height
    • diff --git a/docs/interfaces/field.html b/docs/interfaces/field.html index 321cc0cd..ff6c675d 100644 --- a/docs/interfaces/field.html +++ b/docs/interfaces/field.html @@ -111,7 +111,7 @@

      aggregation

      @@ -128,7 +128,7 @@

      columnType

      columnType: ColumnType
      @@ -147,7 +147,7 @@

      dataSource

      dataSource: DataSource
      @@ -164,7 +164,7 @@

      description

      description: string | undefined
      @@ -181,7 +181,7 @@

      id

      id: string
      @@ -198,7 +198,7 @@

      isCalculatedField

      isCalculatedField: boolean
      @@ -215,7 +215,7 @@

      isCombinedField

      isCombinedField: boolean
      @@ -232,7 +232,7 @@

      isGenerated

      isGenerated: boolean
      @@ -253,7 +253,7 @@

      isHidden

      isHidden: boolean
      @@ -270,7 +270,7 @@

      name

      name: string
      @@ -287,7 +287,7 @@

      role

      diff --git a/docs/interfaces/getsummarydataoptions.html b/docs/interfaces/getsummarydataoptions.html index 97b6696c..0b88aa7b 100644 --- a/docs/interfaces/getsummarydataoptions.html +++ b/docs/interfaces/getsummarydataoptions.html @@ -67,7 +67,7 @@

      Interface GetSummaryDataOptions

      -

      Options argument for the Worksheet.GetSummaryData API

      +

      Options argument for the Worksheet.GetSummaryDataAsync API

      @@ -109,7 +109,7 @@

      Optional columnsToInclude
      columnsToIncludeById: Array<string>
      @@ -130,7 +130,7 @@

      Optional ignoreAliasesignoreAliases: undefined | false | true

      @@ -145,7 +145,7 @@

      Optional ignoreSelection<
      ignoreSelection: undefined | false | true
      @@ -160,7 +160,7 @@

      Optional includeData
      includeDataValuesOption: IncludeDataValuesOption
      @@ -182,7 +182,7 @@

      Optional maxRows

      maxRows: undefined | number
      @@ -196,6 +196,9 @@

      Optional maxRows

      since

      1.5.0 maxRows is now supported in both GetSummaryDataOptions and GetUnderlyingDataOptions.

      +
      since
      +

      1.10.0 maxRows is ignored when getting a DataTableReader

      +

  • diff --git a/docs/interfaces/getunderlyingdataoptions.html b/docs/interfaces/getunderlyingdataoptions.html index 22115de1..7426c0c9 100644 --- a/docs/interfaces/getunderlyingdataoptions.html +++ b/docs/interfaces/getunderlyingdataoptions.html @@ -67,7 +67,7 @@

    Interface GetUnderlyingDataOptions

    -

    Options argument for the Worksheet.GetSummaryData API.

    +

    Options argument for the Worksheet.getUnderlyingTableDataAsync API.

    @@ -111,7 +111,7 @@

    Optional columnsToInclude
    @@ -133,7 +133,7 @@

    Optional ignoreAliases

    Inherited from GetSummaryDataOptions.ignoreAliases

      -
    • Defined in packages/api-external-contract-js/src/ExternalContract/Shared/DataTableInterfaces.ts:124
    • +
    • Defined in packages/api-external-contract-js/src/ExternalContract/Shared/DataTableInterfaces.ts:125
    @@ -149,7 +149,7 @@

    Optional ignoreSelection<
    @@ -164,7 +164,7 @@

    Optional includeAllC
    includeAllColumns: undefined | false | true
    @@ -180,7 +180,7 @@

    Optional includeData
    @@ -203,7 +203,7 @@

    Optional maxRows

    @@ -217,6 +217,9 @@

    Optional maxRows

    since

    1.5.0 maxRows is now supported in both GetSummaryDataOptions and GetUnderlyingDataOptions.

    +
    since
    +

    1.10.0 maxRows is ignored when getting a DataTableReader

    +
    diff --git a/docs/interfaces/hierarchicallevels.html b/docs/interfaces/hierarchicallevels.html index 24bdf366..f0d9b236 100644 --- a/docs/interfaces/hierarchicallevels.html +++ b/docs/interfaces/hierarchicallevels.html @@ -105,7 +105,7 @@

    levels

    levels: Array<string>
    diff --git a/docs/interfaces/logicaltable.html b/docs/interfaces/logicaltable.html index ce60dc64..a925f192 100644 --- a/docs/interfaces/logicaltable.html +++ b/docs/interfaces/logicaltable.html @@ -104,7 +104,7 @@

    caption

    caption: string
    @@ -114,7 +114,7 @@

    id

    id: string
    diff --git a/docs/interfaces/markinfo.html b/docs/interfaces/markinfo.html index c442d292..aaf36105 100644 --- a/docs/interfaces/markinfo.html +++ b/docs/interfaces/markinfo.html @@ -66,11 +66,9 @@

    Interface MarkInfo

    -
    -
    notimplemented
    -

    Represents a mark on in a worksheet.

    -
    -
    +
    +

    Represents a mark in a worksheet.

    +
    @@ -104,13 +102,11 @@

    color

    color: string
    -
    notimplemented
    -
    returns

    The RGBA value of this mark.

    @@ -123,13 +119,11 @@

    Optional tupleId

    tupleId: undefined | number
    -
    notimplemented
    -
    returns

    Unique tuple representing this mark in a drawn visualization.

    @@ -142,13 +136,11 @@

    type

    type: MarkType
    -
    notimplemented
    -
    returns

    The type of this mark.

    diff --git a/docs/interfaces/point.html b/docs/interfaces/point.html index f5ed368f..5a355525 100644 --- a/docs/interfaces/point.html +++ b/docs/interfaces/point.html @@ -101,7 +101,7 @@

    x

    x: number
    @@ -118,7 +118,7 @@

    y

    y: number
    diff --git a/docs/interfaces/rangevalue.html b/docs/interfaces/rangevalue.html index bd7d3a99..ad2c6bd7 100644 --- a/docs/interfaces/rangevalue.html +++ b/docs/interfaces/rangevalue.html @@ -105,7 +105,7 @@

    max

    max: number | Date
    @@ -120,7 +120,7 @@

    min

    min: number | Date
    @@ -135,7 +135,7 @@

    Optional nullOption

    nullOption: FilterNullOption
    diff --git a/docs/interfaces/relativedatefilteroptions.html b/docs/interfaces/relativedatefilteroptions.html index d40e379b..aa0ad04c 100644 --- a/docs/interfaces/relativedatefilteroptions.html +++ b/docs/interfaces/relativedatefilteroptions.html @@ -131,7 +131,7 @@

    periodType

    returns
    -

    The date period of the filter.

    +

    The date period of the filter (years, months, etc.).

    @@ -165,7 +165,7 @@

    rangeType

    returns
    -

    The range of the date filter (years, months, etc.).

    +

    The range of the date filter.

    diff --git a/docs/interfaces/selectioncriteria.html b/docs/interfaces/selectioncriteria.html index 41eed1a6..abcc99c8 100644 --- a/docs/interfaces/selectioncriteria.html +++ b/docs/interfaces/selectioncriteria.html @@ -101,7 +101,7 @@

    fieldName

    fieldName: string
    @@ -117,7 +117,7 @@

    value

    diff --git a/docs/interfaces/sheet.html b/docs/interfaces/sheet.html index a715f158..0b73f405 100644 --- a/docs/interfaces/sheet.html +++ b/docs/interfaces/sheet.html @@ -117,7 +117,7 @@

    name

    name: string
    @@ -134,7 +134,7 @@

    sheetType

    sheetType: SheetType
    @@ -151,7 +151,7 @@

    size

    size: Size
    @@ -255,7 +255,7 @@

    findParameterAsync

  • @@ -287,7 +287,7 @@

    getParametersAsync

  • diff --git a/docs/interfaces/tablesummary.html b/docs/interfaces/tablesummary.html index b9329e3d..1b6cebf4 100644 --- a/docs/interfaces/tablesummary.html +++ b/docs/interfaces/tablesummary.html @@ -103,7 +103,7 @@

    connectionId

    connectionId: string
    @@ -120,7 +120,7 @@

    customSQL

    customSQL: string | undefined
    @@ -137,7 +137,7 @@

    id

    id: string
    @@ -154,7 +154,7 @@

    name

    name: string
    diff --git a/docs/interfaces/ui.html b/docs/interfaces/ui.html index 48c26a6d..7b0c061e 100644 --- a/docs/interfaces/ui.html +++ b/docs/interfaces/ui.html @@ -113,7 +113,7 @@

    closeDialog

  • @@ -150,7 +150,7 @@

    displayDialogAsync

  • @@ -187,8 +187,10 @@
    Optional payload: Optional dialogOptions: DialogOptions

    Specifies the options for the popup dialog window. - The dialogOptions has two properties for width and height (in pixels). You pass these properties - to the displayDialogAsync function, as follows: {width: number*, height: *number }

    + The dialogOptions has properties for width and height (in pixels) and a property for the dialog's style. + The dialog style can be a window, a modal dialog, or a modeless dialog. If style is not specified, window will be used. + You pass these properties to the displayDialogAsync function, as follows: + {width: number, height: number, dialogStyle: DialogStyle}

  • diff --git a/docs/interfaces/worksheet.html b/docs/interfaces/worksheet.html index 348f2c6b..4fb5c5e1 100644 --- a/docs/interfaces/worksheet.html +++ b/docs/interfaces/worksheet.html @@ -94,6 +94,7 @@

    Properties

    Methods

    @@ -127,7 +132,7 @@

    name

    @@ -144,7 +149,7 @@

    parentDashboard

    parentDashboard: Dashboard
    @@ -162,7 +167,7 @@

    sheetType

    @@ -180,7 +185,7 @@

    size

    @@ -274,6 +279,54 @@

    Returns + +

    annotateMarkAsync

    +
      +
    • annotateMarkAsync(mark: MarkInfo, annotationText: string): Promise<void>
    • +
    +
      +
    • + +
      +
      +

      Add an annotation to the specified mark. + This is intended to be passed a MarkInfo object received from a DataTable. + MarkInfo can be found in the DataTable returned from getSelectedMarksAsync or getHighlightedMarksAsync.

      +
      +
      +
      since
      +

      1.10.0 and Tableau 2022.4

      +

      The following example shows how you might call this method using a MarkInfo object.

      +
         const markCollection = await worksheet.getSelectedMarksAsync();
      +   const markToAnnotate = marksCollection.data[0].marksInfo[0];
      +   await worksheet.annotateMarkAsync(markToAnnotate, 'Manufacturing line #2 shutdown triggered');
      +
      +
      +

      Parameters

      +
        +
      • +
        mark: MarkInfo
        +
        +

        The mark to annotate.

        +
        +
      • +
      • +
        annotationText: string
        +
        +

        The text to display in the annotation.

        +
        +
      • +
      +

      Returns Promise<void>

      +

      Empty promise that resolves when the annotation is complete.

      +
    • +
    +

    applyFilterAsync

    @@ -284,7 +337,7 @@

    applyFilterAsync

  • @@ -334,7 +387,7 @@

    applyHierarchicalFilterAsync

  • @@ -386,13 +439,18 @@

    applyRangeFilterAsync

  • Applies a range filter to a quantitative or date field.

    +
    +
    since
    +

    1.10.0 Errors will now be thrown for invalid fields or values.

    +
    +

    Parameters

      @@ -425,7 +483,7 @@

      applyRelativeDateFilterAsync

    • @@ -477,7 +535,7 @@

      clearFilterAsync

    • @@ -511,7 +569,7 @@

      clearSelectedMarksAsync

    • @@ -540,7 +598,7 @@

      findParameterAsync

      @@ -562,6 +620,36 @@

      Returns Promise

  • +
    + +

    getAnnotationsAsync

    +
      +
    • getAnnotationsAsync(): Promise<Array<Annotation>>
    • +
    +
      +
    • + +
      +
      +

      Retrieves a list of the annotations in the worksheet.

      +
      +
      +
      since
      +

      1.10.0 and Tableau 2022.4

      +

      The following example shows how you might call this method.

      +
         let annotations = await worksheet.getAnnotationsAsync();
      +   console.log(annotations);
      +
      +
      +

      Returns Promise<Array<Annotation>>

      +

      A list annotations in the worksheet.

      +
    • +
    +

    getDataSourcesAsync

    @@ -572,7 +660,7 @@

    getDataSourcesAsync

  • @@ -608,7 +696,7 @@

    getFiltersAsync

  • @@ -631,7 +719,7 @@

    getHighlightedMarksAsync

  • @@ -656,7 +744,7 @@

    getParametersAsync

    @@ -676,7 +764,7 @@

    getSelectedMarksAsync

  • @@ -708,7 +796,7 @@

    getSummaryColumnsInfoAsync

  • @@ -736,35 +824,32 @@

    getSummaryDataAsync

  • -

    Gets the summary data table for this worksheet.

    +

    Gets the summary data table for this worksheet. + Warning: getSummaryDataAsync can fail with a worksheet with many rows of data and is now deprecated.

    -
    since
    -

    1.5.0 You can use the GetSummaryDataOptions.maxRows property to request the number of rows of data - to return. If unspecified, the call to getSummaryDataAsync requests all rows.

    -
    -
    since
    -

    1.5.0 You can use the GetUnderlyingDataOptions.includeDataValuesOption property to optimize performance - by restricting the properties included in the returned DataValues.

    -
    -
    since
    -

    1.5.0 You can specify the desired columns by field id with columnsToIncludeById.

    -

    Example showing the method call to get the summary data from a worksheet.

    -
    // After getting the worksheet,
    - // get the summary data for the sheet
    - worksheet.getSummaryDataAsync().then(function (sumdata) {
    -
    -  const worksheetData = sumdata;
    -
    -  // Map the worksheetData into a format for display, etc.
    -
    - });
    -
    +
    deprecated
    +

    since 1.10.0 Use getSummaryDataReaderAsync to avoid failures with many rows of data.

    +

    Example shows how to replace unsafe usage of getSummaryDataAsync with + getSummaryDataReaderAsync and getAllPagesAsync assuming less than 4,000,000 + rows of data.

    +
    const dataTableReader = await worksheet.getSummaryDataReaderAsync();
    +const dataTable = await dataTableReader.getAllPagesAsync();
    +await dataTableReader.releaseAsync();
    +// ... process data table ...

    Example shows how to replace unsafe usage of getSummaryDataAsync with + getSummaryDataReaderAsync and getPageAsync and work with individual + pages.

    +
    const dataTableReader = await worksheet.getSummaryDataReaderAsync();
    +for (let currentPage = 0; currentPage < dataTableReader.pageCount; currentPage++) {
    +  const dataTablePage = await dataTableReader.getPageAsync(currentPage);
    +  // ... process current page ....
    +}
    +await dataTableReader.releaseAsync();

    Parameters

    @@ -781,6 +866,52 @@

    Returns Promise

  • +
    + +

    getSummaryDataReaderAsync

    + +
      +
    • + +
      +
      +

      Gets a summary data table reader for this worksheet. + Only one active DataTableReader for summary data is supported.

      +
      +
      +

      Parameters

      +
        +
      • +
        Optional pageRowCount: undefined | number
        +
        +

        The number of rows per page. The default and maximum is 10,000 rows.

        +
        +
      • +
      • +
        Optional options: GetSummaryDataOptions
        +
        +

        Collection of options to change the behavior of the reader.

        +
        +
      • +
      +

      Returns Promise<DataTableReader>

      +

      A data table reader to access the summary data for the worksheet.

      +

      Example showing the methods to get and use the summary data reader for all rows in a worksheet.

      +
      const dataTableReader = await worksheet.getSummaryDataReaderAsync();
      +for (let currentPage = 0; currentPage < dataTableReader.pageCount; currentPage++) {
      +  let dataTablePage = await dataTableReader.getPageAsync(currentPage);
      +  // ... process current page ....
      +}
      +await dataTableReader.releaseAsync();
      +
    • +
    +

    getUnderlyingDataAsync

    @@ -791,7 +922,7 @@

    getUnderlyingDataAsync

  • @@ -800,7 +931,7 @@

    getUnderlyingDataAsync

    deprecated
    -

    since version 1.4.0. Use Worksheet.getUnderlyingTableDataAsync.

    +

    Use Worksheet.getUnderlyingTableDataReaderAsync or Worksheet.getUnderlyingTableDataAsync.

  • @@ -815,24 +946,6 @@
    Optional options: Returns Promise<DataTable>

    A data table containing the underlying data for the worksheet.

    -

    You can use the GetUnderlyingDataOptions.maxRows property to request the number of rows of data to return. - If unspecified (maxRows == '0'), the call to getUnderlyingDataAsync requests all rows in the data source. - Note that the maximum number of rows returned from the getUnderlyingDataAsync() method is currently limited - to 10,000 rows. You can use the DataTable property, isTotalRowCountLimited, to test whether there is - more data. A value of true indicates that the calling function requested more rows than the current limit (10,000) and the - underlying data source contains more rows than can be returned.

    -

    In the following example, the getUnderlyingDataAsync() method is used to get the underlying data for - a specific column in a workbook.

    -
    tableau.extensions.dashboardContent.dashboard.worksheets.find(w => w.name === "Sale Map").getUnderlyingDataAsync().then(dataTable => {
    -  let field = dataTable.columns.find(column => column.fieldName === "State");
    -  let list = [];
    -  for (let row of dataTable.data) {
    -    list.push(row[field.index].value);
    -  }
    -  let values = list.filter((el, i, arr) => arr.indexOf(el) === i);
    -  console.log(values)
    -});
    -
    @@ -846,7 +959,7 @@

    getUnderlyingTableDataAsync

  • @@ -859,21 +972,21 @@

    getUnderlyingTableDataAsync

    1.4.0

    You can use the getUnderlyingDataOptions.maxRows property to request the number of rows of data to return. If unspecified (maxRows == '0'), the call to getUnderlyingTableDataAsync requests all rows in the logical table. - Note that the maximum number of rows returned from the getUnderlyingTableDataAsync() method is currently limited + Note that the maximum number of rows returned from the getUnderlyingTableDataAsync() method is limited to 10,000 rows. You can use the DataTable property, isTotalRowCountLimited, to test whether there is - more data. A value of true indicates that the calling function requested more rows than the current limit (10,000) and the + more data. A value of true indicates that the calling function requested more rows than the limit (10,000) and the underlying data source contains more rows than can be returned.

    since

    1.5.0 You can use the GetUnderlyingDataOptions.includeDataValuesOption property to optimize performance by restricting the properties included in the returned DataValues.

    -
     var worksheet = tableau.extensions.dashboardContent.dashboard.worksheets.find(w => w.name === "Sale Map");
    - worksheet.getUnderlyingTablesAsync().then(function (logicalTables) {
    -     worksheet.getUnderlyingTableDataAsync(logicalTables[0].id).then((dataTable) => {
    -       // process the dataTable...
    -     });
    - });
    -
    + +
    see
    +

    getUnderlyingTableDataReaderAsync to read more than 10,000 rows.

    +
    var worksheet = tableau.extensions.dashboardContent.dashboard.worksheets.find(w => w.name === "Sale Map");
    +const logicalTables = await worksheet.getUnderlyingTablesAsync();
    +const dataTable = await worksheet.getUnderlyingTableDataAsync(logicalTables[0].id)
    +// process the dataTable...

    Parameters

    @@ -896,6 +1009,66 @@

    Returns Promise +
    + +

    getUnderlyingTableDataReaderAsync

    + +
      +
    • + +
      +
      +

      Gets a underlying data table reader for the given logical table id. + Use the getUnderlyingTablesAsync method to identify the logical tables. + Only one active DataTableReader per logical table id is supported.

      +
      +

      getUnderlyingTableDataReaderAsync attempts to prepare all the rows of the underlying table to be read as pages. + However, there is a limit to the number of rows that can be prepared. The default limit is 1 million rows of data. + You can change the default limit with the Tableau Server (Cloud) or Tableau Desktop option: ExtensionsAndEmbeddingReaderRowLimit. + If the underlying table has many columns, getUnderlyingTableDataReaderAsync can be sped up by only requesting + native data values in the GetUnderlyingDataOptions.

      +
      +

      Parameters

      +
        +
      • +
        logicalTableId: string
        +
        +

        logical table id.

        +
        +
      • +
      • +
        Optional pageRowCount: undefined | number
        +
        +

        The number of rows per page. The default and maximum is 10,000 rows.

        +
        +
      • +
      • +
        Optional options: GetUnderlyingDataOptions
        +
        +

        Collection of options to change the behavior of the reader.

        +
        +
      • +
      +

      Returns Promise<DataTableReader>

      +

      A data table reader to access the underlying data for the given logical table id.

      +

      The following example shows getting the first page of underlying data.

      +
      // Call to get the underlying logical tables used by the worksheet
      +const underlyingTablesData = await worksheet.getUnderlyingTablesAsync();
      +const logicalTableId = underlyingTablesData[0].id;
      +// Use the above logicalTableId to get the underlying data reader on the active sheet
      +const dataTableReader = await worksheet.getUnderlyingTableDataReaderAsync(logicalTableId);
      +const page = await dataTableReader.getPageAsync(0);
      +// ... process first page of data table ...
      +await dataTableReader.releaseAsync();
      +
    • +
    +

    getUnderlyingTablesAsync

    @@ -906,7 +1079,7 @@

    getUnderlyingTablesAsync

  • @@ -935,6 +1108,47 @@

    Returns Promise

  • +
    + +

    removeAnnotationAsync

    +
      +
    • removeAnnotationAsync(annotation: Annotation): Promise<void>
    • +
    +
      +
    • + +
      +
      +

      Removes the corresponding annotation from the worksheet it belongs to. + This is intended to be passed a Annotation object received from getAnnotationsAsync.

      +
      +
      +
      since
      +

      1.10.0 and Tableau 2022.4

      +

      The following example shows how you might call this method using an annotation.

      +
         for (const annotation of annotations) {
      +     await worksheet.removeAnnotationAsync(annotation);
      +   }
      +
      +
      +

      Parameters

      +
        +
      • +
        annotation: Annotation
        +
        +

        The annotation to remove.

        +
        +
      • +
      +

      Returns Promise<void>

      +

      Empty promise that resolves when the annotation is removed.

      +
    • +
    +

    removeEventListener

    @@ -981,12 +1195,12 @@

    selectMarksByValueAsync

  • -

    Selects the marks and returns them. This version selects by value, using the SelectionCriteria interface. +

    Selects the marks specified by value using the SelectionCriteria interface. This is intended for manual construction of the desired selections.

    @@ -1050,6 +1264,9 @@

    Returns Promise addEventListener

  • +
  • + annotateMarkAsync +
  • applyFilterAsync
  • @@ -1071,6 +1288,9 @@

    Returns Promise findParameterAsync

  • +
  • + getAnnotationsAsync +
  • getDataSourcesAsync
  • @@ -1092,15 +1312,24 @@

    Returns Promise getSummaryDataAsync +
  • + getSummaryDataReaderAsync +
  • getUnderlyingDataAsync
  • getUnderlyingTableDataAsync
  • +
  • + getUnderlyingTableDataReaderAsync +
  • getUnderlyingTablesAsync
  • +
  • + removeAnnotationAsync +
  • removeEventListener
  • diff --git a/docs/modules/tableau.html b/docs/modules/tableau.html index 0dedbaf9..215060be 100644 --- a/docs/modules/tableau.html +++ b/docs/modules/tableau.html @@ -80,6 +80,7 @@

    Index

    Enumerations

    • AnalyticsObjectType
    • +
    • AnnotationType
    • ClassNameKey
    • ColumnType
    • DashboardLayoutChange
    • @@ -87,6 +88,7 @@

      Enumerations

    • DashboardObjectVisibilityType
    • DataType
    • DateRangeType
    • +
    • DialogStyle
    • EncodingType
    • ErrorCodes
    • ExtensionContext
    • @@ -145,7 +147,7 @@

      ZoneVisibilityType

      ZoneVisibilityType: DashboardObjectVisibilityType
      @@ -181,7 +183,7 @@

      Const ZoneVisibilityTyp
      ZoneVisibilityType: object
      @@ -203,6 +205,9 @@

      Const ZoneVisibilityTyp
    • AnalyticsObjectType
    • +
    • + AnnotationType +
    • ClassNameKey
    • @@ -224,6 +229,9 @@

      Const ZoneVisibilityTyp
    • DateRangeType
    • +
    • + DialogStyle +
    • EncodingType
    • diff --git a/lib/tableau.extensions.1.9.0.js b/lib/previous/tableau.extensions.1.9.0.js similarity index 100% rename from lib/tableau.extensions.1.9.0.js rename to lib/previous/tableau.extensions.1.9.0.js diff --git a/lib/tableau.extensions.1.9.0.min.js b/lib/previous/tableau.extensions.1.9.0.min.js similarity index 100% rename from lib/tableau.extensions.1.9.0.min.js rename to lib/previous/tableau.extensions.1.9.0.min.js diff --git a/lib/tableau.extensions.1.10.0-pre.29.min.js.map b/lib/tableau.extensions.1.10.0-pre.29.min.js.map new file mode 100644 index 00000000..284ebcfd --- /dev/null +++ b/lib/tableau.extensions.1.10.0-pre.29.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tableau.extensions.1.10.0-pre.29.min.js","mappings":"2BAAA,EAAQ,MACR,IAAIA,EAAc,EAAQ,MAE1BC,EAAOC,QAAUF,EAAY,QAAS,S,eCHtC,EAAQ,MACR,EAAQ,MACR,IAAIG,EAAO,EAAQ,MAEnBF,EAAOC,QAAUC,EAAKC,MAAMC,M,eCJ5B,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,IAAIF,EAAO,EAAQ,MAEnBF,EAAOC,QAAUC,EAAKG,K,eCNtB,EAAQ,MACR,IAAIH,EAAO,EAAQ,MAEnBF,EAAOC,QAAUC,EAAKI,OAAOC,W,eCH7B,EAAQ,MACR,IAAIL,EAAO,EAAQ,MAEnBF,EAAOC,QAAUC,EAAKI,OAAOE,O,cCH7B,EAAQ,MACR,IAAIN,EAAO,EAAQ,MAEnBF,EAAOC,QAAUC,EAAKI,OAAOG,Y,eCH7B,EAAQ,MACR,IAAIP,EAAO,EAAQ,MAEnBF,EAAOC,QAAUC,EAAKI,OAAOI,U,aCH7B,EAAQ,MACR,IAAIR,EAAO,EAAQ,MAEnBF,EAAOC,QAAUC,EAAKS,OAAOC,Q,cCH7B,EAAQ,MACR,IAAIV,EAAO,EAAQ,MAEnBF,EAAOC,QAAUC,EAAKS,OAAOE,S,eCH7B,EAAQ,MACR,IAAIX,EAAO,EAAQ,MAEnBF,EAAOC,QAAUC,EAAKS,OAAOG,gB,eCH7B,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,IAAIZ,EAAO,EAAQ,MAEnBF,EAAOC,QAAUC,EAAKa,S,eCVtB,IAAIC,EAAS,EAAQ,MACjBC,EAAa,EAAQ,MACrBC,EAAc,EAAQ,MAEtBC,EAAYH,EAAOG,UAGvBnB,EAAOC,QAAU,SAAUmB,GACzB,GAAIH,EAAWG,GAAW,OAAOA,EACjC,MAAMD,EAAUD,EAAYE,GAAY,wB,eCT1C,IAAIJ,EAAS,EAAQ,MACjBK,EAAgB,EAAQ,MACxBH,EAAc,EAAQ,MAEtBC,EAAYH,EAAOG,UAGvBnB,EAAOC,QAAU,SAAUmB,GACzB,GAAIC,EAAcD,GAAW,OAAOA,EACpC,MAAMD,EAAUD,EAAYE,GAAY,2B,eCT1C,IAAIJ,EAAS,EAAQ,MACjBC,EAAa,EAAQ,MAErBK,EAASN,EAAOM,OAChBH,EAAYH,EAAOG,UAEvBnB,EAAOC,QAAU,SAAUmB,GACzB,GAAuB,iBAAZA,GAAwBH,EAAWG,GAAW,OAAOA,EAChE,MAAMD,EAAU,aAAeG,EAAOF,GAAY,qB,eCRpD,IAAIG,EAAkB,EAAQ,IAC1BC,EAAS,EAAQ,MACjBC,EAAuB,EAAQ,MAE/BC,EAAcH,EAAgB,eAC9BI,EAAiBxB,MAAMyB,UAIQC,MAA/BF,EAAeD,IACjBD,EAAqBK,EAAEH,EAAgBD,EAAa,CAClDK,cAAc,EACdC,MAAOR,EAAO,QAKlBxB,EAAOC,QAAU,SAAUgC,GACzBN,EAAeD,GAAaO,IAAO,I,eClBrC,IAAIjB,EAAS,EAAQ,MACjBkB,EAAgB,EAAQ,MAExBf,EAAYH,EAAOG,UAEvBnB,EAAOC,QAAU,SAAUkC,EAAIC,GAC7B,GAAIF,EAAcE,EAAWD,GAAK,OAAOA,EACzC,MAAMhB,EAAU,0B,eCPlB,IAAIH,EAAS,EAAQ,MACjBqB,EAAW,EAAQ,MAEnBf,EAASN,EAAOM,OAChBH,EAAYH,EAAOG,UAGvBnB,EAAOC,QAAU,SAAUmB,GACzB,GAAIiB,EAASjB,GAAW,OAAOA,EAC/B,MAAMD,EAAUG,EAAOF,GAAY,uB,2BCRrC,IAAIJ,EAAS,EAAQ,MACjBsB,EAAO,EAAQ,MACfC,EAAO,EAAQ,KACfC,EAAW,EAAQ,MACnBC,EAA+B,EAAQ,MACvCC,EAAwB,EAAQ,MAChCrB,EAAgB,EAAQ,MACxBsB,EAAoB,EAAQ,MAC5BC,EAAiB,EAAQ,MACzBC,EAAc,EAAQ,MACtBC,EAAoB,EAAQ,MAE5B3C,EAAQa,EAAOb,MAInBH,EAAOC,QAAU,SAAc8C,GAC7B,IAAIC,EAAIR,EAASO,GACbE,EAAiB5B,EAAc6B,MAC/BC,EAAkBC,UAAUC,OAC5BC,EAAQH,EAAkB,EAAIC,UAAU,QAAKvB,EAC7C0B,OAAoB1B,IAAVyB,EACVC,IAASD,EAAQhB,EAAKgB,EAAOH,EAAkB,EAAIC,UAAU,QAAKvB,IACtE,IAEIwB,EAAQG,EAAQC,EAAMC,EAAUC,EAAM3B,EAFtC4B,EAAiBd,EAAkBE,GACnCa,EAAQ,EAGZ,IAAID,GAAoBV,MAAQ/C,GAASuC,EAAsBkB,GAW7D,IAFAP,EAASV,EAAkBK,GAC3BQ,EAASP,EAAiB,IAAIC,KAAKG,GAAUlD,EAAMkD,GAC7CA,EAASQ,EAAOA,IACpB7B,EAAQuB,EAAUD,EAAMN,EAAEa,GAAQA,GAASb,EAAEa,GAC7CjB,EAAeY,EAAQK,EAAO7B,QAThC,IAFA2B,GADAD,EAAWb,EAAYG,EAAGY,IACVD,KAChBH,EAASP,EAAiB,IAAIC,KAAS,KAC/BO,EAAOlB,EAAKoB,EAAMD,IAAWI,KAAMD,IACzC7B,EAAQuB,EAAUd,EAA6BiB,EAAUJ,EAAO,CAACG,EAAKzB,MAAO6B,IAAQ,GAAQJ,EAAKzB,MAClGY,EAAeY,EAAQK,EAAO7B,GAWlC,OADAwB,EAAOH,OAASQ,EACTL,I,eC7CT,IAAIO,EAAkB,EAAQ,KAC1BC,EAAkB,EAAQ,MAC1BrB,EAAoB,EAAQ,MAG5BsB,EAAe,SAAUC,GAC3B,OAAO,SAAUC,EAAOC,EAAIC,GAC1B,IAGIrC,EAHAgB,EAAIe,EAAgBI,GACpBd,EAASV,EAAkBK,GAC3Ba,EAAQG,EAAgBK,EAAWhB,GAIvC,GAAIa,GAAeE,GAAMA,GAAI,KAAOf,EAASQ,GAG3C,IAFA7B,EAAQgB,EAAEa,OAEG7B,EAAO,OAAO,OAEtB,KAAMqB,EAASQ,EAAOA,IAC3B,IAAKK,GAAeL,KAASb,IAAMA,EAAEa,KAAWO,EAAI,OAAOF,GAAeL,GAAS,EACnF,OAAQK,IAAgB,IAI9BlE,EAAOC,QAAU,CAGfqE,SAAUL,GAAa,GAGvBM,QAASN,GAAa,K,eC9BxB,IAAI3B,EAAO,EAAQ,MACfkC,EAAc,EAAQ,MACtBC,EAAgB,EAAQ,MACxBjC,EAAW,EAAQ,MACnBG,EAAoB,EAAQ,MAC5B+B,EAAqB,EAAQ,MAE7BC,EAAOH,EAAY,GAAGG,MAGtBV,EAAe,SAAUW,GAC3B,IAAIC,EAAiB,GAARD,EACTE,EAAoB,GAARF,EACZG,EAAkB,GAARH,EACVI,EAAmB,GAARJ,EACXK,EAAwB,GAARL,EAChBM,EAA2B,GAARN,EACnBO,EAAmB,GAARP,GAAaK,EAC5B,OAAO,SAAUd,EAAOiB,EAAYC,EAAMC,GASxC,IARA,IAOItD,EAAOwB,EAPPR,EAAIR,EAAS2B,GACboB,EAAOd,EAAczB,GACrBwC,EAAgBlD,EAAK8C,EAAYC,GACjChC,EAASV,EAAkB4C,GAC3B1B,EAAQ,EACRrC,EAAS8D,GAAkBZ,EAC3Be,EAASZ,EAASrD,EAAO2C,EAAOd,GAAUyB,GAAaI,EAAmB1D,EAAO2C,EAAO,QAAKtC,EAE3FwB,EAASQ,EAAOA,IAAS,IAAIsB,GAAYtB,KAAS0B,KAEtD/B,EAASgC,EADTxD,EAAQuD,EAAK1B,GACiBA,EAAOb,GACjC4B,GACF,GAAIC,EAAQY,EAAO5B,GAASL,OACvB,GAAIA,EAAQ,OAAQoB,GACvB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAO5C,EACf,KAAK,EAAG,OAAO6B,EACf,KAAK,EAAGc,EAAKc,EAAQzD,QAChB,OAAQ4C,GACb,KAAK,EAAG,OAAO,EACf,KAAK,EAAGD,EAAKc,EAAQzD,GAI3B,OAAOiD,GAAiB,EAAIF,GAAWC,EAAWA,EAAWS,IAIjEzF,EAAOC,QAAU,CAGfyF,QAASzB,EAAa,GAGtB0B,IAAK1B,EAAa,GAGlB2B,OAAQ3B,EAAa,GAGrB4B,KAAM5B,EAAa,GAGnB6B,MAAO7B,EAAa,GAGpB8B,KAAM9B,EAAa,GAGnB+B,UAAW/B,EAAa,GAGxBgC,aAAchC,EAAa,K,eCvE7B,IAAIO,EAAc,EAAQ,MAE1BxE,EAAOC,QAAUuE,EAAY,GAAG0B,Q,eCFhC,IAAIlF,EAAS,EAAQ,MACjBmF,EAAU,EAAQ,MAClB9E,EAAgB,EAAQ,MACxBgB,EAAW,EAAQ,MAGnB+D,EAFkB,EAAQ,GAEhB7E,CAAgB,WAC1BpB,EAAQa,EAAOb,MAInBH,EAAOC,QAAU,SAAUoG,GACzB,IAAIC,EASF,OAREH,EAAQE,KACVC,EAAID,EAAcE,aAEdlF,EAAciF,KAAOA,IAAMnG,GAASgG,EAAQG,EAAE1E,aACzCS,EAASiE,IAEN,QADVA,EAAIA,EAAEF,OAFuDE,OAAIzE,SAKtDA,IAANyE,EAAkBnG,EAAQmG,I,eCrBrC,IAAIE,EAA0B,EAAQ,MAItCxG,EAAOC,QAAU,SAAUoG,EAAehD,GACxC,OAAO,IAAKmD,EAAwBH,GAA7B,CAAwD,IAAXhD,EAAe,EAAIA,K,eCLzE,IAAIoD,EAAW,EAAQ,MACnBC,EAAgB,EAAQ,MAG5B1G,EAAOC,QAAU,SAAUyD,EAAUiD,EAAI3E,EAAO4E,GAC9C,IACE,OAAOA,EAAUD,EAAGF,EAASzE,GAAO,GAAIA,EAAM,IAAM2E,EAAG3E,GACvD,MAAO6E,GACPH,EAAchD,EAAU,QAASmD,M,eCRrC,IAEIC,EAFkB,EAAQ,GAEfvF,CAAgB,YAC3BwF,GAAe,EAEnB,IACE,IAAIC,EAAS,EACTC,EAAqB,CACvBtD,KAAM,WACJ,MAAO,CAAEG,OAAQkD,MAEnB,OAAU,WACRD,GAAe,IAGnBE,EAAmBH,GAAY,WAC7B,OAAO5D,MAGT/C,MAAMC,KAAK6G,GAAoB,WAAc,MAAM,KACnD,MAAOJ,IAET7G,EAAOC,QAAU,SAAUiH,EAAMC,GAC/B,IAAKA,IAAiBJ,EAAc,OAAO,EAC3C,IAAIK,GAAoB,EACxB,IACE,IAAIC,EAAS,GACbA,EAAOP,GAAY,WACjB,MAAO,CACLnD,KAAM,WACJ,MAAO,CAAEG,KAAMsD,GAAoB,MAIzCF,EAAKG,GACL,MAAOR,IACT,OAAOO,I,eCpCT,IAAI5C,EAAc,EAAQ,MAEtB8C,EAAW9C,EAAY,GAAG8C,UAC1BC,EAAc/C,EAAY,GAAG0B,OAEjClG,EAAOC,QAAU,SAAUkC,GACzB,OAAOoF,EAAYD,EAASnF,GAAK,GAAI,K,eCNvC,IAAInB,EAAS,EAAQ,MACjBwG,EAAwB,EAAQ,MAChCvG,EAAa,EAAQ,MACrBwG,EAAa,EAAQ,MAGrBC,EAFkB,EAAQ,GAEVnG,CAAgB,eAChCZ,EAASK,EAAOL,OAGhBgH,EAAuE,aAAnDF,EAAW,WAAc,OAAOrE,UAArB,IAUnCpD,EAAOC,QAAUuH,EAAwBC,EAAa,SAAUtF,GAC9D,IAAIa,EAAG4E,EAAKpE,EACZ,YAAc3B,IAAPM,EAAmB,YAAqB,OAAPA,EAAc,OAEM,iBAAhDyF,EAXD,SAAUzF,EAAIF,GACzB,IACE,OAAOE,EAAGF,GACV,MAAO4E,KAQSgB,CAAO7E,EAAIrC,EAAOwB,GAAKuF,IAA8BE,EAEnED,EAAoBF,EAAWzE,GAEH,WAA3BQ,EAASiE,EAAWzE,KAAmB/B,EAAW+B,EAAE8E,QAAU,YAActE,I,eC5BnF,IAAIgB,EAAc,EAAQ,MACtBuD,EAAa,EAAQ,MAErBC,EAAUxD,EAAY,GAAGwD,SACzBC,EAAQzD,EAAY,GAAGyD,OACvBC,EAAO1D,EAAY,GAAG0D,MAEtBC,EAAgC7G,OAAO8G,MAAsB,UAAXC,OAClDC,EAA2B,uBAC3BC,EAAwBD,EAAyBE,KAAKL,GACtDM,EAA6B,YAAYD,KAAKL,KAAU,SAASK,KAAKL,GAE1EnI,EAAOC,QAAU,SAAUoI,EAAOK,GAChC,GAAoB,iBAATL,EAAmB,OAAOA,EACrC,GAAIE,EACF,KAAOG,KAAeL,EAAQL,EAAQK,EAAOC,EAA0B,SAClE,GAAIG,EACT,OAAOP,EAAKH,EAAWE,EAAMI,EAAO,MAAOK,GAAc,MACzD,OAAOL,I,4BCjBX,IAAIM,EAAiB,UACjBnH,EAAS,EAAQ,MACjBoH,EAAc,EAAQ,MACtBtG,EAAO,EAAQ,MACfuG,EAAa,EAAQ,MACrBC,EAAU,EAAQ,MAClBC,EAAiB,EAAQ,MACzBC,EAAa,EAAQ,MACrBC,EAAc,EAAQ,MACtBC,EAAU,gBACVC,EAAsB,EAAQ,MAE9BC,EAAmBD,EAAoBE,IACvCC,EAAyBH,EAAoBI,UAEjDvJ,EAAOC,QAAU,CACfuJ,eAAgB,SAAUC,EAASC,EAAkB7E,EAAQ8E,GAC3D,IAAIC,EAAcH,GAAQ,SAAUpE,EAAMwE,GACxChB,EAAWxD,EAAMjD,GACjBgH,EAAiB/D,EAAM,CACrByE,KAAMJ,EACN7F,MAAOrC,EAAO,MACduI,WAAOlI,EACPmI,UAAMnI,EACNoI,KAAM,IAEHhB,IAAa5D,EAAK4E,KAAO,GACdpI,MAAZgI,GAAuBf,EAAQe,EAAUxE,EAAKsE,GAAQ,CAAEtE,KAAMA,EAAM6E,WAAYrF,OAGlFzC,EAAYwH,EAAYhI,UAExBuI,EAAmBb,EAAuBI,GAE1CU,EAAS,SAAU/E,EAAMpD,EAAKD,GAChC,IAEIqI,EAAUxG,EAFVyG,EAAQH,EAAiB9E,GACzBkF,EAAQC,EAASnF,EAAMpD,GAqBzB,OAlBEsI,EACFA,EAAMvI,MAAQA,GAGdsI,EAAMN,KAAOO,EAAQ,CACnB1G,MAAOA,EAAQqF,EAAQjH,GAAK,GAC5BA,IAAKA,EACLD,MAAOA,EACPqI,SAAUA,EAAWC,EAAMN,KAC3BrG,UAAM9B,EACN4I,SAAS,GAENH,EAAMP,QAAOO,EAAMP,MAAQQ,GAC5BF,IAAUA,EAAS1G,KAAO4G,GAC1BtB,EAAaqB,EAAML,OAClB5E,EAAK4E,OAEI,MAAVpG,IAAeyG,EAAMzG,MAAMA,GAAS0G,IACjClF,GAGPmF,EAAW,SAAUnF,EAAMpD,GAC7B,IAGIsI,EAHAD,EAAQH,EAAiB9E,GAEzBxB,EAAQqF,EAAQjH,GAEpB,GAAc,MAAV4B,EAAe,OAAOyG,EAAMzG,MAAMA,GAEtC,IAAK0G,EAAQD,EAAMP,MAAOQ,EAAOA,EAAQA,EAAM5G,KAC7C,GAAI4G,EAAMtI,KAAOA,EAAK,OAAOsI,GAwFjC,OApFA3B,EAAYxG,EAAW,CAIrBsI,MAAO,WAKL,IAJA,IACIJ,EAAQH,EADDjH,MAEPyH,EAAOL,EAAMzG,MACb0G,EAAQD,EAAMP,MACXQ,GACLA,EAAME,SAAU,EACZF,EAAMF,WAAUE,EAAMF,SAAWE,EAAMF,SAAS1G,UAAO9B,UACpD8I,EAAKJ,EAAM1G,OAClB0G,EAAQA,EAAM5G,KAEhB2G,EAAMP,MAAQO,EAAMN,UAAOnI,EACvBoH,EAAaqB,EAAML,KAAO,EAXnB/G,KAYD+G,KAAO,GAKnB,OAAU,SAAUhI,GAClB,IAAIoD,EAAOnC,KACPoH,EAAQH,EAAiB9E,GACzBkF,EAAQC,EAASnF,EAAMpD,GAC3B,GAAIsI,EAAO,CACT,IAAI5G,EAAO4G,EAAM5G,KACbiH,EAAOL,EAAMF,gBACVC,EAAMzG,MAAM0G,EAAM1G,OACzB0G,EAAME,SAAU,EACZG,IAAMA,EAAKjH,KAAOA,GAClBA,IAAMA,EAAK0G,SAAWO,GACtBN,EAAMP,OAASQ,IAAOD,EAAMP,MAAQpG,GACpC2G,EAAMN,MAAQO,IAAOD,EAAMN,KAAOY,GAClC3B,EAAaqB,EAAML,OAClB5E,EAAK4E,OACV,QAASM,GAKb7E,QAAS,SAAiBN,GAIxB,IAHA,IAEImF,EAFAD,EAAQH,EAAiBjH,MACzBsC,EAAgBlD,EAAK8C,EAAYhC,UAAUC,OAAS,EAAID,UAAU,QAAKvB,GAEpE0I,EAAQA,EAAQA,EAAM5G,KAAO2G,EAAMP,OAGxC,IAFAvE,EAAc+E,EAAMvI,MAAOuI,EAAMtI,IAAKiB,MAE/BqH,GAASA,EAAME,SAASF,EAAQA,EAAMF,UAMjDQ,IAAK,SAAa5I,GAChB,QAASuI,EAAStH,KAAMjB,MAI5B2G,EAAYxG,EAAWyC,EAAS,CAG9BiG,IAAK,SAAa7I,GAChB,IAAIsI,EAAQC,EAAStH,KAAMjB,GAC3B,OAAOsI,GAASA,EAAMvI,OAIxBqH,IAAK,SAAapH,EAAKD,GACrB,OAAOoI,EAAOlH,KAAc,IAARjB,EAAY,EAAIA,EAAKD,KAEzC,CAGF+I,IAAK,SAAa/I,GAChB,OAAOoI,EAAOlH,KAAMlB,EAAkB,IAAVA,EAAc,EAAIA,EAAOA,MAGrDiH,GAAaN,EAAevG,EAAW,OAAQ,CACjD0I,IAAK,WACH,OAAOX,EAAiBjH,MAAM+G,QAG3BL,GAEToB,UAAW,SAAUpB,EAAaF,EAAkB7E,GAClD,IAAIoG,EAAgBvB,EAAmB,YACnCwB,EAA6B5B,EAAuBI,GACpDyB,EAA2B7B,EAAuB2B,GAUtDlC,EAAea,EAAaF,GAAkB,SAAU0B,EAAUC,GAChEjC,EAAiBlG,KAAM,CACrB4G,KAAMmB,EACNxF,OAAQ2F,EACRd,MAAOY,EAA2BE,GAClCC,KAAMA,EACNrB,UAAMnI,OAEP,WAKD,IAJA,IAAIyI,EAAQa,EAAyBjI,MACjCmI,EAAOf,EAAMe,KACbd,EAAQD,EAAMN,KAEXO,GAASA,EAAME,SAASF,EAAQA,EAAMF,SAE7C,OAAKC,EAAM7E,SAAY6E,EAAMN,KAAOO,EAAQA,EAAQA,EAAM5G,KAAO2G,EAAMA,MAAMP,OAMjE,QAARsB,EAAuB,CAAErJ,MAAOuI,EAAMtI,IAAK6B,MAAM,GACzC,UAARuH,EAAyB,CAAErJ,MAAOuI,EAAMvI,MAAO8B,MAAM,GAClD,CAAE9B,MAAO,CAACuI,EAAMtI,IAAKsI,EAAMvI,OAAQ8B,MAAM,IAN9CwG,EAAM7E,YAAS5D,EACR,CAAEG,WAAOH,EAAWiC,MAAM,MAMlCe,EAAS,UAAY,UAAWA,GAAQ,GAK3CmE,EAAWU,M,4BCxMf,IAAI4B,EAAI,EAAQ,MACZtK,EAAS,EAAQ,MACjBwD,EAAc,EAAQ,MACtB+G,EAAW,EAAQ,MACnBC,EAAW,EAAQ,MACnBC,EAAyB,EAAQ,MACjC3C,EAAU,EAAQ,MAClBD,EAAa,EAAQ,MACrB5H,EAAa,EAAQ,MACrBoB,EAAW,EAAQ,MACnBqJ,EAAQ,EAAQ,MAChBC,EAA8B,EAAQ,MACtCC,EAAiB,EAAQ,MACzBC,EAAoB,EAAQ,KAEhC7L,EAAOC,QAAU,SAAUyJ,EAAkBD,EAASqC,GACpD,IAAIjH,GAA8C,IAArC6E,EAAiBnF,QAAQ,OAClCwH,GAAgD,IAAtCrC,EAAiBnF,QAAQ,QACnCoF,EAAQ9E,EAAS,MAAQ,MACzBmH,EAAoBhL,EAAO0I,GAC3BuC,EAAkBD,GAAqBA,EAAkBpK,UACzDgI,EAAcoC,EACdE,EAAW,GAEXC,EAAY,SAAUC,GACxB,IAAIC,EAAwB7H,EAAYyH,EAAgBG,IACxDZ,EAASS,EAAiBG,EACjB,OAAPA,EAAe,SAAapK,GAE1B,OADAqK,EAAsBnJ,KAAgB,IAAVlB,EAAc,EAAIA,GACvCkB,MACE,UAAPkJ,EAAkB,SAAUnK,GAC9B,QAAO8J,IAAY1J,EAASJ,KAAeoK,EAAsBnJ,KAAc,IAARjB,EAAY,EAAIA,IAC9E,OAAPmK,EAAe,SAAanK,GAC9B,OAAO8J,IAAY1J,EAASJ,QAAOJ,EAAYwK,EAAsBnJ,KAAc,IAARjB,EAAY,EAAIA,IAClF,OAAPmK,EAAe,SAAanK,GAC9B,QAAO8J,IAAY1J,EAASJ,KAAeoK,EAAsBnJ,KAAc,IAARjB,EAAY,EAAIA,IACrF,SAAaA,EAAKD,GAEpB,OADAqK,EAAsBnJ,KAAc,IAARjB,EAAY,EAAIA,EAAKD,GAC1CkB,QAYb,GAPcqI,EACZ7B,GACCzI,EAAW+K,MAAwBD,GAAWE,EAAgBvG,UAAYgG,GAAM,YAC/E,IAAIM,GAAoBnL,UAAU8C,YAMpCiG,EAAckC,EAAOtC,eAAeC,EAASC,EAAkB7E,EAAQ8E,GACvE8B,EAAuBa,cAClB,GAAIf,EAAS7B,GAAkB,GAAO,CAC3C,IAAI6C,EAAW,IAAI3C,EAEf4C,EAAiBD,EAAS5C,GAAOoC,EAAU,IAAM,EAAG,IAAMQ,EAE1DE,EAAuBf,GAAM,WAAca,EAAS1B,IAAI,MAGxD6B,EAAmBf,GAA4B,SAAU9B,GAAY,IAAImC,EAAkBnC,MAE3F8C,GAAcZ,GAAWL,GAAM,WAIjC,IAFA,IAAIkB,EAAY,IAAIZ,EAChBnI,EAAQ,EACLA,KAAS+I,EAAUjD,GAAO9F,EAAOA,GACxC,OAAQ+I,EAAU/B,KAAK,MAGpB6B,KACH9C,EAAcH,GAAQ,SAAUoD,EAAOhD,GACrChB,EAAWgE,EAAOZ,GAClB,IAAI5G,EAAOwG,EAAkB,IAAIG,EAAqBa,EAAOjD,GAE7D,OADgB/H,MAAZgI,GAAuBf,EAAQe,EAAUxE,EAAKsE,GAAQ,CAAEtE,KAAMA,EAAM6E,WAAYrF,IAC7EQ,MAEGzD,UAAYqK,EACxBA,EAAgB1F,YAAcqD,IAG5B6C,GAAwBE,KAC1BR,EAAU,UACVA,EAAU,OACVtH,GAAUsH,EAAU,SAGlBQ,GAAcH,IAAgBL,EAAUxC,GAGxCoC,GAAWE,EAAgBvB,cAAcuB,EAAgBvB,MAU/D,OAPAwB,EAASxC,GAAoBE,EAC7B0B,EAAE,CAAEtK,QAAQ,EAAM8L,OAAQlD,GAAeoC,GAAqBE,GAE9DN,EAAehC,EAAaF,GAEvBqC,GAASD,EAAOd,UAAUpB,EAAaF,EAAkB7E,GAEvD+E,I,eCvGT,IAAImD,EAAS,EAAQ,MACjBC,EAAU,EAAQ,MAClBC,EAAiC,EAAQ,MACzCxL,EAAuB,EAAQ,MAEnCzB,EAAOC,QAAU,SAAUwF,EAAQyH,GAIjC,IAHA,IAAIC,EAAOH,EAAQE,GACfvE,EAAiBlH,EAAqBK,EACtCsL,EAA2BH,EAA+BnL,EACrDuL,EAAI,EAAGA,EAAIF,EAAK9J,OAAQgK,IAAK,CACpC,IAAIpL,EAAMkL,EAAKE,GACVN,EAAOtH,EAAQxD,IAAM0G,EAAelD,EAAQxD,EAAKmL,EAAyBF,EAAQjL,O,eCX3F,IAAIyJ,EAAQ,EAAQ,MAEpB1L,EAAOC,SAAWyL,GAAM,WACtB,SAAS4B,KAGT,OAFAA,EAAE1L,UAAU2E,YAAc,KAEnB5F,OAAO4M,eAAe,IAAID,KAASA,EAAE1L,c,4BCL9C,IAAI4L,EAAoB,yBACpBhM,EAAS,EAAQ,MACjBiM,EAA2B,EAAQ,MACnC7B,EAAiB,EAAQ,MACzB8B,EAAY,EAAQ,MAEpBC,EAAa,WAAc,OAAOzK,MAEtClD,EAAOC,QAAU,SAAU2N,EAAqBC,EAAMlK,GACpD,IAAI+D,EAAgBmG,EAAO,YAI3B,OAHAD,EAAoBhM,UAAYJ,EAAOgM,EAAmB,CAAE7J,KAAM8J,EAAyB,EAAG9J,KAC9FiI,EAAegC,EAAqBlG,GAAe,GAAO,GAC1DgG,EAAUhG,GAAiBiG,EACpBC,I,eCdT,IAAI3E,EAAc,EAAQ,MACtBxH,EAAuB,EAAQ,MAC/BgM,EAA2B,EAAQ,MAEvCzN,EAAOC,QAAUgJ,EAAc,SAAU5B,EAAQpF,EAAKD,GACpD,OAAOP,EAAqBK,EAAEuF,EAAQpF,EAAKwL,EAAyB,EAAGzL,KACrE,SAAUqF,EAAQpF,EAAKD,GAEzB,OADAqF,EAAOpF,GAAOD,EACPqF,I,SCRTrH,EAAOC,QAAU,SAAU6N,EAAQ9L,GACjC,MAAO,CACL+L,aAAuB,EAATD,GACd/L,eAAyB,EAAT+L,GAChBE,WAAqB,EAATF,GACZ9L,MAAOA,K,4BCJX,IAAIiM,EAAgB,EAAQ,MACxBxM,EAAuB,EAAQ,MAC/BgM,EAA2B,EAAQ,MAEvCzN,EAAOC,QAAU,SAAUoH,EAAQpF,EAAKD,GACtC,IAAIkM,EAAcD,EAAchM,GAC5BiM,KAAe7G,EAAQ5F,EAAqBK,EAAEuF,EAAQ6G,EAAaT,EAAyB,EAAGzL,IAC9FqF,EAAO6G,GAAelM,I,4BCP7B,IAAIsJ,EAAI,EAAQ,MACZ/I,EAAO,EAAQ,KACf4L,EAAU,EAAQ,MAClBC,EAAe,EAAQ,MACvBnN,EAAa,EAAQ,MACrBoN,EAA4B,EAAQ,MACpCd,EAAiB,EAAQ,MACzBzM,EAAiB,EAAQ,MACzB8K,EAAiB,EAAQ,MACzB0C,EAA8B,EAAQ,MACtC9C,EAAW,EAAQ,MACnBjK,EAAkB,EAAQ,IAC1BmM,EAAY,EAAQ,MACpBa,EAAgB,EAAQ,KAExBC,EAAuBJ,EAAaK,OACpCC,EAA6BN,EAAaO,aAC1CnB,EAAoBe,EAAcf,kBAClCoB,EAAyBL,EAAcK,uBACvC9H,EAAWvF,EAAgB,YAC3BsN,EAAO,OACPC,EAAS,SACTlI,EAAU,UAEV+G,EAAa,WAAc,OAAOzK,MAEtClD,EAAOC,QAAU,SAAU8O,EAAUlB,EAAMD,EAAqBjK,EAAMqL,EAASC,EAAQC,GACrFb,EAA0BT,EAAqBC,EAAMlK,GAErD,IAkBIwL,EAA0BC,EAAShD,EAlBnCiD,EAAqB,SAAUC,GACjC,GAAIA,IAASN,GAAWO,EAAiB,OAAOA,EAChD,IAAKX,GAA0BU,KAAQE,EAAmB,OAAOA,EAAkBF,GACnF,OAAQA,GACN,KAAKT,EACL,KAAKC,EACL,KAAKlI,EAAS,OAAO,WAAqB,OAAO,IAAIgH,EAAoB1K,KAAMoM,IAC/E,OAAO,WAAc,OAAO,IAAI1B,EAAoB1K,QAGpDwE,EAAgBmG,EAAO,YACvB4B,GAAwB,EACxBD,EAAoBT,EAASnN,UAC7B8N,EAAiBF,EAAkB1I,IAClC0I,EAAkB,eAClBR,GAAWQ,EAAkBR,GAC9BO,GAAmBX,GAA0Bc,GAAkBL,EAAmBL,GAClFW,EAA4B,SAAR9B,GAAkB2B,EAAkB3O,SAA4B6O,EA+BxF,GA3BIC,IACFR,EAA2B5B,EAAeoC,EAAkBpN,KAAK,IAAIwM,OACpCpO,OAAOiB,WAAauN,EAAyBxL,OACvEwK,GAAWZ,EAAe4B,KAA8B3B,IACvD1M,EACFA,EAAeqO,EAA0B3B,GAC/BvM,EAAWkO,EAAyBrI,KAC9C0E,EAAS2D,EAA0BrI,EAAU6G,IAIjD/B,EAAeuD,EAA0BzH,GAAe,GAAM,GAC1DyG,IAAST,EAAUhG,GAAiBiG,IAKxCa,GAAwBQ,GAAWF,GAAUY,GAAkBA,EAAeE,OAASd,KACpFX,GAAWO,EACdJ,EAA4BkB,EAAmB,OAAQV,IAEvDW,GAAwB,EACxBF,EAAkB,WAAoB,OAAOhN,EAAKmN,EAAgBxM,SAKlE8L,EAMF,GALAI,EAAU,CACRS,OAAQR,EAAmBP,GAC3B3B,KAAM8B,EAASM,EAAkBF,EAAmBR,GACpDhO,QAASwO,EAAmBzI,IAE1BsI,EAAQ,IAAK9C,KAAOgD,GAClBR,GAA0Ba,KAA2BrD,KAAOoD,KAC9DhE,EAASgE,EAAmBpD,EAAKgD,EAAQhD,SAEtCd,EAAE,CAAE7F,OAAQoI,EAAMiC,OAAO,EAAMhD,OAAQ8B,GAA0Ba,GAAyBL,GASnG,OALMjB,IAAWe,GAAWM,EAAkB1I,KAAcyI,GAC1D/D,EAASgE,EAAmB1I,EAAUyI,EAAiB,CAAEK,KAAMZ,IAEjEtB,EAAUG,GAAQ0B,EAEXH,I,eCjGT,IAAI1D,EAAQ,EAAQ,MAGpB1L,EAAOC,SAAWyL,GAAM,WAEtB,OAA8E,GAAvE/K,OAAOgI,eAAe,GAAI,EAAG,CAAEmC,IAAK,WAAc,OAAO,KAAQ,O,eCL1E,IAAI9J,EAAS,EAAQ,MACjBqB,EAAW,EAAQ,MAEnB0N,EAAW/O,EAAO+O,SAElBC,EAAS3N,EAAS0N,IAAa1N,EAAS0N,EAASE,eAErDjQ,EAAOC,QAAU,SAAUkC,GACzB,OAAO6N,EAASD,EAASE,cAAc9N,GAAM,K,SCR/CnC,EAAOC,QAA2B,iBAAViQ,Q,eCAxB,IAAIC,EAAY,EAAQ,KACpBnP,EAAS,EAAQ,MAErBhB,EAAOC,QAAU,oBAAoBuI,KAAK2H,SAAgCtO,IAAlBb,EAAOoP,Q,eCH/D,IAAID,EAAY,EAAQ,KAExBnQ,EAAOC,QAAU,qCAAqCuI,KAAK2H,I,eCF3D,IAAIE,EAAU,EAAQ,MAClBrP,EAAS,EAAQ,MAErBhB,EAAOC,QAAqC,WAA3BoQ,EAAQrP,EAAOsP,U,cCHhC,IAAIH,EAAY,EAAQ,KAExBnQ,EAAOC,QAAU,qBAAqBuI,KAAK2H,I,cCF3C,IAAII,EAAa,EAAQ,MAEzBvQ,EAAOC,QAAUsQ,EAAW,YAAa,cAAgB,I,eCFzD,IAOIC,EAAOC,EAPPzP,EAAS,EAAQ,MACjBmP,EAAY,EAAQ,KAEpBG,EAAUtP,EAAOsP,QACjBI,EAAO1P,EAAO0P,KACdC,EAAWL,GAAWA,EAAQK,UAAYD,GAAQA,EAAKD,QACvDG,EAAKD,GAAYA,EAASC,GAG1BA,IAIFH,GAHAD,EAAQI,EAAG3I,MAAM,MAGD,GAAK,GAAKuI,EAAM,GAAK,EAAI,IAAMA,EAAM,GAAKA,EAAM,MAK7DC,GAAWN,MACdK,EAAQL,EAAUK,MAAM,iBACVA,EAAM,IAAM,MACxBA,EAAQL,EAAUK,MAAM,oBACbC,GAAWD,EAAM,IAIhCxQ,EAAOC,QAAUwQ,G,eC1BjB,IAAIzP,EAAS,EAAQ,MACjBwD,EAAc,EAAQ,MAE1BxE,EAAOC,QAAU,SAAU4Q,EAAaC,GACtC,OAAOtM,EAAYxD,EAAO6P,GAAajP,UAAUkP,M,SCHnD9Q,EAAOC,QAAU,CACf,cACA,iBACA,gBACA,uBACA,iBACA,WACA,Y,cCRF,IAAIyL,EAAQ,EAAQ,MAChB+B,EAA2B,EAAQ,MAEvCzN,EAAOC,SAAWyL,GAAM,WACtB,IAAI7E,EAAQuB,MAAM,KAClB,QAAM,UAAWvB,KAEjBlG,OAAOgI,eAAe9B,EAAO,QAAS4G,EAAyB,EAAG,IAC3C,IAAhB5G,EAAMwB,W,eCRf,IAAIrH,EAAS,EAAQ,MACjBoM,EAA2B,UAC3BkB,EAA8B,EAAQ,MACtC9C,EAAW,EAAQ,MACnBuF,EAAY,EAAQ,MACpBC,EAA4B,EAAQ,MACpCzF,EAAW,EAAQ,MAiBvBvL,EAAOC,QAAU,SAAUgR,EAAS/D,GAClC,IAGYzH,EAAQxD,EAAKiP,EAAgBC,EAAgBC,EAHrDC,EAASJ,EAAQxL,OACjB6L,EAASL,EAAQjQ,OACjBuQ,EAASN,EAAQO,KASrB,GANE/L,EADE6L,EACOtQ,EACAuQ,EACAvQ,EAAOqQ,IAAWN,EAAUM,EAAQ,KAEnCrQ,EAAOqQ,IAAW,IAAIzP,UAEtB,IAAKK,KAAOiL,EAAQ,CAQ9B,GAPAiE,EAAiBjE,EAAOjL,GAGtBiP,EAFED,EAAQQ,aACVL,EAAahE,EAAyB3H,EAAQxD,KACfmP,EAAWpP,MACpByD,EAAOxD,IACtBsJ,EAAS+F,EAASrP,EAAMoP,GAAUE,EAAS,IAAM,KAAOtP,EAAKgP,EAAQnE,cAE5CjL,IAAnBqP,EAA8B,CAC3C,UAAWC,UAAyBD,EAAgB,SACpDF,EAA0BG,EAAgBD,IAGxCD,EAAQS,MAASR,GAAkBA,EAAeQ,OACpDpD,EAA4B6C,EAAgB,QAAQ,GAGtD3F,EAAS/F,EAAQxD,EAAKkP,EAAgBF,M,SCpD1CjR,EAAOC,QAAU,SAAUiH,GACzB,IACE,QAASA,IACT,MAAOL,GACP,OAAO,K,eCJX,IAAI6E,EAAQ,EAAQ,MAEpB1L,EAAOC,SAAWyL,GAAM,WAEtB,OAAO/K,OAAOgR,aAAahR,OAAOiR,kBAAkB,S,SCJtD,IAAIC,EAAoBC,SAASlQ,UAC7BmQ,EAAQF,EAAkBE,MAC1BzP,EAAOuP,EAAkBvP,KACzBC,EAAOsP,EAAkBtP,KAG7BvC,EAAOC,QAA4B,iBAAX+R,SAAuBA,QAAQD,QAAUzP,EAAOC,EAAKD,KAAKyP,GAAS,WACzF,OAAOxP,EAAKwP,MAAMA,EAAO3O,c,eCP3B,IAAIoB,EAAc,EAAQ,MACtByN,EAAY,EAAQ,MAEpB3P,EAAOkC,EAAYA,EAAYlC,MAGnCtC,EAAOC,QAAU,SAAU0G,EAAItB,GAE7B,OADA4M,EAAUtL,QACM9E,IAATwD,EAAqBsB,EAAKrE,EAAOA,EAAKqE,EAAItB,GAAQ,WACvD,OAAOsB,EAAGoL,MAAM1M,EAAMjC,c,QCT1B,IAAIb,EAAOuP,SAASlQ,UAAUW,KAE9BvC,EAAOC,QAAUsC,EAAKD,KAAOC,EAAKD,KAAKC,GAAQ,WAC7C,OAAOA,EAAKwP,MAAMxP,EAAMa,a,eCH1B,IAAI6F,EAAc,EAAQ,MACtB8D,EAAS,EAAQ,MAEjB8E,EAAoBC,SAASlQ,UAE7BsQ,EAAgBjJ,GAAetI,OAAOyM,yBAEtC4C,EAASjD,EAAO8E,EAAmB,QAEnCpD,EAASuB,GAA0D,cAAhD,aAAuCJ,KAC1DjB,EAAeqB,KAAY/G,GAAgBA,GAAeiJ,EAAcL,EAAmB,QAAQ9P,cAEvG/B,EAAOC,QAAU,CACf+P,OAAQA,EACRvB,OAAQA,EACRE,aAAcA,I,SCfhB,IAAIkD,EAAoBC,SAASlQ,UAC7BU,EAAOuP,EAAkBvP,KACzBC,EAAOsP,EAAkBtP,KACzB4P,EAAW7P,GAAQA,EAAKA,KAAKC,GAEjCvC,EAAOC,QAAUqC,EAAO,SAAUqE,GAChC,OAAOA,GAAMwL,EAAS5P,EAAMoE,IAC1B,SAAUA,GACZ,OAAOA,GAAM,WACX,OAAOpE,EAAKwP,MAAMpL,EAAIvD,c,eCT1B,IAAIpC,EAAS,EAAQ,MACjBC,EAAa,EAAQ,MAErBmR,EAAY,SAAUhR,GACxB,OAAOH,EAAWG,GAAYA,OAAWS,GAG3C7B,EAAOC,QAAU,SAAUoS,EAAWC,GACpC,OAAOlP,UAAUC,OAAS,EAAI+O,EAAUpR,EAAOqR,IAAcrR,EAAOqR,IAAcrR,EAAOqR,GAAWC,K,eCRtG,IAAIjC,EAAU,EAAQ,MAClBkC,EAAY,EAAQ,MACpB7E,EAAY,EAAQ,MAGpB5G,EAFkB,EAAQ,GAEfvF,CAAgB,YAE/BvB,EAAOC,QAAU,SAAUkC,GACzB,GAAUN,MAANM,EAAiB,OAAOoQ,EAAUpQ,EAAI2E,IACrCyL,EAAUpQ,EAAI,eACduL,EAAU2C,EAAQlO,M,eCVzB,IAAInB,EAAS,EAAQ,MACjBuB,EAAO,EAAQ,KACf0P,EAAY,EAAQ,MACpBxL,EAAW,EAAQ,MACnBvF,EAAc,EAAQ,MACtB4B,EAAoB,EAAQ,MAE5B3B,EAAYH,EAAOG,UAEvBnB,EAAOC,QAAU,SAAUmB,EAAUoR,GACnC,IAAI5O,EAAiBR,UAAUC,OAAS,EAAIP,EAAkB1B,GAAYoR,EAC1E,GAAIP,EAAUrO,GAAiB,OAAO6C,EAASlE,EAAKqB,EAAgBxC,IACpE,MAAMD,EAAUD,EAAYE,GAAY,sB,eCZ1C,IAAI6Q,EAAY,EAAQ,MAIxBjS,EAAOC,QAAU,SAAUwS,EAAGC,GAC5B,IAAIC,EAAOF,EAAEC,GACb,OAAe,MAARC,OAAe9Q,EAAYoQ,EAAUU,K,eCN9C,IAAIC,EAAQ,SAAUzQ,GACpB,OAAOA,GAAMA,EAAG0Q,MAAQA,MAAQ1Q,GAIlCnC,EAAOC,QAEL2S,EAA2B,iBAAdE,YAA0BA,aACvCF,EAAuB,iBAAV1C,QAAsBA,SAEnC0C,EAAqB,iBAARrN,MAAoBA,OACjCqN,EAAuB,iBAAV,EAAAG,GAAsB,EAAAA,IAEnC,WAAe,OAAO7P,KAAtB,IAAoC4O,SAAS,cAATA,I,eCbtC,IAAItN,EAAc,EAAQ,MACtBhC,EAAW,EAAQ,MAEnBwQ,EAAiBxO,EAAY,GAAGwO,gBAIpChT,EAAOC,QAAUU,OAAOoM,QAAU,SAAgB5K,EAAIF,GACpD,OAAO+Q,EAAexQ,EAASL,GAAKF,K,SCRtCjC,EAAOC,QAAU,I,eCAjB,IAAIe,EAAS,EAAQ,MAErBhB,EAAOC,QAAU,SAAUgT,EAAGC,GAC5B,IAAIC,EAAUnS,EAAOmS,QACjBA,GAAWA,EAAQtM,QACD,GAApBzD,UAAUC,OAAc8P,EAAQtM,MAAMoM,GAAKE,EAAQtM,MAAMoM,EAAGC,M,eCLhE,IAAI3C,EAAa,EAAQ,MAEzBvQ,EAAOC,QAAUsQ,EAAW,WAAY,oB,eCFxC,IAAItH,EAAc,EAAQ,MACtByC,EAAQ,EAAQ,MAChBuE,EAAgB,EAAQ,MAG5BjQ,EAAOC,SAAWgJ,IAAgByC,GAAM,WAEtC,OAEQ,GAFD/K,OAAOgI,eAAesH,EAAc,OAAQ,IAAK,CACtDnF,IAAK,WAAc,OAAO,KACzBmI,M,eCTL,IAAIjS,EAAS,EAAQ,MACjBwD,EAAc,EAAQ,MACtBkH,EAAQ,EAAQ,MAChB2E,EAAU,EAAQ,MAElB1P,EAASK,EAAOL,OAChBsH,EAAQzD,EAAY,GAAGyD,OAG3BjI,EAAOC,QAAUyL,GAAM,WAGrB,OAAQ/K,EAAO,KAAKyS,qBAAqB,MACtC,SAAUjR,GACb,MAAsB,UAAfkO,EAAQlO,GAAkB8F,EAAM9F,EAAI,IAAMxB,EAAOwB,IACtDxB,G,cCfJ,IAAIM,EAAa,EAAQ,MACrBoB,EAAW,EAAQ,MACnBvB,EAAiB,EAAQ,MAG7Bd,EAAOC,QAAU,SAAUkE,EAAO0I,EAAOwG,GACvC,IAAIC,EAAWC,EAUf,OAPEzS,GAEAG,EAAWqS,EAAYzG,EAAMtG,cAC7B+M,IAAcD,GACdhR,EAASkR,EAAqBD,EAAU1R,YACxC2R,IAAuBF,EAAQzR,WAC/Bd,EAAeqD,EAAOoP,GACjBpP,I,eChBT,IAAIK,EAAc,EAAQ,MACtBvD,EAAa,EAAQ,MACrBuS,EAAQ,EAAQ,MAEhBC,EAAmBjP,EAAYsN,SAASxK,UAGvCrG,EAAWuS,EAAME,iBACpBF,EAAME,cAAgB,SAAUvR,GAC9B,OAAOsR,EAAiBtR,KAI5BnC,EAAOC,QAAUuT,EAAME,e,eCbvB,IAAIrR,EAAW,EAAQ,MACnBiM,EAA8B,EAAQ,MAI1CtO,EAAOC,QAAU,SAAU+C,EAAGiO,GACxB5O,EAAS4O,IAAY,UAAWA,GAClC3C,EAA4BtL,EAAG,QAASiO,EAAQ0C,S,eCPpD,IAAIrI,EAAI,EAAQ,MACZ9G,EAAc,EAAQ,MACtBoP,EAAa,EAAQ,MACrBvR,EAAW,EAAQ,MACnB0K,EAAS,EAAQ,MACjBpE,EAAiB,UACjBkL,EAA4B,EAAQ,MACpCC,EAAoC,EAAQ,KAC5CC,EAAM,EAAQ,MACdC,EAAW,EAAQ,MAEnBC,GAAW,EACXC,EAAWH,EAAI,QACfI,EAAK,EAGLxC,EAAehR,OAAOgR,cAAgB,WACxC,OAAO,GAGLyC,EAAc,SAAUjS,GAC1BwG,EAAexG,EAAI+R,EAAU,CAAElS,MAAO,CACpCqS,SAAU,IAAMF,IAChBG,SAAU,OA8DVC,EAAOvU,EAAOC,QAAU,CAC1BqM,OA3BW,WACXiI,EAAKjI,OAAS,aACd2H,GAAW,EACX,IAAIO,EAAsBX,EAA0B/R,EAChD2S,EAASjQ,EAAY,GAAGiQ,QACxBjM,EAAO,GACXA,EAAK0L,GAAY,EAGbM,EAAoBhM,GAAMnF,SAC5BwQ,EAA0B/R,EAAI,SAAUK,GAEtC,IADA,IAAIqB,EAASgR,EAAoBrS,GACxBkL,EAAI,EAAGhK,EAASG,EAAOH,OAAQgK,EAAIhK,EAAQgK,IAClD,GAAI7J,EAAO6J,KAAO6G,EAAU,CAC1BO,EAAOjR,EAAQ6J,EAAG,GAClB,MAEF,OAAO7J,GAGX8H,EAAE,CAAE7F,OAAQ,SAAU+L,MAAM,EAAM1E,QAAQ,GAAQ,CAChD0H,oBAAqBV,EAAkChS,MAO3DoH,QA5DY,SAAU/G,EAAIX,GAE1B,IAAKa,EAASF,GAAK,MAAoB,iBAANA,EAAiBA,GAAmB,iBAANA,EAAiB,IAAM,KAAOA,EAC7F,IAAK4K,EAAO5K,EAAI+R,GAAW,CAEzB,IAAKvC,EAAaxP,GAAK,MAAO,IAE9B,IAAKX,EAAQ,MAAO,IAEpB4S,EAAYjS,GAEZ,OAAOA,EAAG+R,GAAUG,UAkDtBK,YA/CgB,SAAUvS,EAAIX,GAC9B,IAAKuL,EAAO5K,EAAI+R,GAAW,CAEzB,IAAKvC,EAAaxP,GAAK,OAAO,EAE9B,IAAKX,EAAQ,OAAO,EAEpB4S,EAAYjS,GAEZ,OAAOA,EAAG+R,GAAUI,UAuCtBK,SAnCa,SAAUxS,GAEvB,OADI6R,GAAYC,GAAYtC,EAAaxP,KAAQ4K,EAAO5K,EAAI+R,IAAWE,EAAYjS,GAC5EA,IAoCTyR,EAAWM,IAAY,G,eC5FvB,IAaI7K,EAAKyB,EAAKD,EAbV+J,EAAkB,EAAQ,MAC1B5T,EAAS,EAAQ,MACjBwD,EAAc,EAAQ,MACtBnC,EAAW,EAAQ,MACnBiM,EAA8B,EAAQ,MACtCvB,EAAS,EAAQ,MACjB8H,EAAS,EAAQ,MACjBC,EAAY,EAAQ,MACpBlB,EAAa,EAAQ,MAErBmB,EAA6B,6BAC7B5T,EAAYH,EAAOG,UACnB6T,EAAUhU,EAAOgU,QAgBrB,GAAIJ,GAAmBC,EAAOvK,MAAO,CACnC,IAAIkJ,EAAQqB,EAAOvK,QAAUuK,EAAOvK,MAAQ,IAAI0K,GAC5CC,EAAQzQ,EAAYgP,EAAM1I,KAC1BoK,EAAQ1Q,EAAYgP,EAAM3I,KAC1BsK,EAAQ3Q,EAAYgP,EAAMnK,KAC9BA,EAAM,SAAUlH,EAAIiT,GAClB,GAAIF,EAAM1B,EAAOrR,GAAK,MAAM,IAAIhB,EAAU4T,GAG1C,OAFAK,EAASC,OAASlT,EAClBgT,EAAM3B,EAAOrR,EAAIiT,GACVA,GAETtK,EAAM,SAAU3I,GACd,OAAO8S,EAAMzB,EAAOrR,IAAO,IAE7B0I,EAAM,SAAU1I,GACd,OAAO+S,EAAM1B,EAAOrR,QAEjB,CACL,IAAImT,EAAQR,EAAU,SACtBlB,EAAW0B,IAAS,EACpBjM,EAAM,SAAUlH,EAAIiT,GAClB,GAAIrI,EAAO5K,EAAImT,GAAQ,MAAM,IAAInU,EAAU4T,GAG3C,OAFAK,EAASC,OAASlT,EAClBmM,EAA4BnM,EAAImT,EAAOF,GAChCA,GAETtK,EAAM,SAAU3I,GACd,OAAO4K,EAAO5K,EAAImT,GAASnT,EAAGmT,GAAS,IAEzCzK,EAAM,SAAU1I,GACd,OAAO4K,EAAO5K,EAAImT,IAItBtV,EAAOC,QAAU,CACfoJ,IAAKA,EACLyB,IAAKA,EACLD,IAAKA,EACL0K,QAnDY,SAAUpT,GACtB,OAAO0I,EAAI1I,GAAM2I,EAAI3I,GAAMkH,EAAIlH,EAAI,KAmDnCoH,UAhDc,SAAU3E,GACxB,OAAO,SAAUzC,GACf,IAAImI,EACJ,IAAKjI,EAASF,KAAQmI,EAAQQ,EAAI3I,IAAK2H,OAASlF,EAC9C,MAAMzD,EAAU,0BAA4ByD,EAAO,aACnD,OAAO0F,M,eCxBb,IAAI/I,EAAkB,EAAQ,IAC1BmM,EAAY,EAAQ,MAEpB5G,EAAWvF,EAAgB,YAC3BI,EAAiBxB,MAAMyB,UAG3B5B,EAAOC,QAAU,SAAUkC,GACzB,YAAcN,IAAPM,IAAqBuL,EAAUvN,QAAUgC,GAAMR,EAAemF,KAAc3E,K,eCRrF,IAAIkO,EAAU,EAAQ,MAKtBrQ,EAAOC,QAAUE,MAAMgG,SAAW,SAAiB/E,GACjD,MAA4B,SAArBiP,EAAQjP,K,SCJjBpB,EAAOC,QAAU,SAAUmB,GACzB,MAA0B,mBAAZA,I,eCHhB,IAAIoD,EAAc,EAAQ,MACtBkH,EAAQ,EAAQ,MAChBzK,EAAa,EAAQ,MACrBoP,EAAU,EAAQ,MAClBE,EAAa,EAAQ,MACrBmD,EAAgB,EAAQ,MAExB8B,EAAO,aACPC,EAAQ,GACRC,EAAYnF,EAAW,UAAW,aAClCoF,EAAoB,2BACpBzO,EAAO1C,EAAYmR,EAAkBzO,MACrC0O,GAAuBD,EAAkBzO,KAAKsO,GAE9CK,EAAsB,SAAUzU,GAClC,IAAKH,EAAWG,GAAW,OAAO,EAClC,IAEE,OADAsU,EAAUF,EAAMC,EAAOrU,IAChB,EACP,MAAOyF,GACP,OAAO,IAgBX7G,EAAOC,SAAWyV,GAAahK,GAAM,WACnC,IAAI1E,EACJ,OAAO6O,EAAoBA,EAAoBtT,QACzCsT,EAAoBlV,UACpBkV,GAAoB,WAAc7O,GAAS,MAC5CA,KAjBmB,SAAU5F,GAClC,IAAKH,EAAWG,GAAW,OAAO,EAClC,OAAQiP,EAAQjP,IACd,IAAK,gBACL,IAAK,oBACL,IAAK,yBAA0B,OAAO,EAEtC,OAAOwU,KAAyB1O,EAAKyO,EAAmBjC,EAActS,KAW/CyU,G,eC1C3B,IAAInK,EAAQ,EAAQ,MAChBzK,EAAa,EAAQ,MAErB6U,EAAc,kBAEdvK,EAAW,SAAUwK,EAASC,GAChC,IAAIhU,EAAQ2I,EAAKsL,EAAUF,IAC3B,OAAO/T,GAASkU,GACZlU,GAASmU,IACTlV,EAAW+U,GAAatK,EAAMsK,KAC5BA,IAGJC,EAAY1K,EAAS0K,UAAY,SAAUG,GAC7C,OAAO9U,OAAO8U,GAAQpO,QAAQ8N,EAAa,KAAKO,eAG9C1L,EAAOY,EAASZ,KAAO,GACvBwL,EAAS5K,EAAS4K,OAAS,IAC3BD,EAAW3K,EAAS2K,SAAW,IAEnClW,EAAOC,QAAUsL,G,eCrBjB,IAAIlJ,EAAW,EAAQ,MAEnBiU,EAAQzD,KAAKyD,MAKjBtW,EAAOC,QAAUK,OAAOC,WAAa,SAAmB4B,GACtD,OAAQE,EAASF,IAAOoU,SAASpU,IAAOmU,EAAMnU,KAAQA,I,eCRxD,IAAIlB,EAAa,EAAQ,MAEzBjB,EAAOC,QAAU,SAAUkC,GACzB,MAAoB,iBAANA,EAAwB,OAAPA,EAAclB,EAAWkB,K,SCH1DnC,EAAOC,SAAU,G,eCAjB,IAAIe,EAAS,EAAQ,MACjBuP,EAAa,EAAQ,MACrBtP,EAAa,EAAQ,MACrBiB,EAAgB,EAAQ,MACxBsU,EAAoB,EAAQ,MAE5B7V,EAASK,EAAOL,OAEpBX,EAAOC,QAAUuW,EAAoB,SAAUrU,GAC7C,MAAoB,iBAANA,GACZ,SAAUA,GACZ,IAAIsU,EAAUlG,EAAW,UACzB,OAAOtP,EAAWwV,IAAYvU,EAAcuU,EAAQ7U,UAAWjB,EAAOwB,M,eCZxE,IAAInB,EAAS,EAAQ,MACjBsB,EAAO,EAAQ,MACfC,EAAO,EAAQ,KACfkE,EAAW,EAAQ,MACnBvF,EAAc,EAAQ,MACtBwB,EAAwB,EAAQ,MAChCC,EAAoB,EAAQ,MAC5BT,EAAgB,EAAQ,MACxBW,EAAc,EAAQ,MACtBC,EAAoB,EAAQ,MAC5B4D,EAAgB,EAAQ,MAExBvF,EAAYH,EAAOG,UAEnBuV,EAAS,SAAUC,EAASnT,GAC9BN,KAAKyT,QAAUA,EACfzT,KAAKM,OAASA,GAGZoT,EAAkBF,EAAO9U,UAE7B5B,EAAOC,QAAU,SAAU4J,EAAUgN,EAAiB5F,GACpD,IAKIvN,EAAUoT,EAAQjT,EAAOR,EAAQG,EAAQG,EAAMF,EAL/C4B,EAAO4L,GAAWA,EAAQ5L,KAC1B6E,KAAgB+G,IAAWA,EAAQ/G,YACnC6M,KAAiB9F,IAAWA,EAAQ8F,aACpCC,KAAiB/F,IAAWA,EAAQ+F,aACpCrQ,EAAKrE,EAAKuU,EAAiBxR,GAG3B4R,EAAO,SAAUC,GAEnB,OADIxT,GAAUgD,EAAchD,EAAU,SAAUwT,GACzC,IAAIR,GAAO,EAAMQ,IAGtBC,EAAS,SAAUnV,GACrB,OAAIkI,GACFzD,EAASzE,GACFgV,EAAcrQ,EAAG3E,EAAM,GAAIA,EAAM,GAAIiV,GAAQtQ,EAAG3E,EAAM,GAAIA,EAAM,KAChEgV,EAAcrQ,EAAG3E,EAAOiV,GAAQtQ,EAAG3E,IAG9C,GAAI+U,EACFrT,EAAWmG,MACN,CAEL,KADAiN,EAAShU,EAAkB+G,IACd,MAAM1I,EAAUD,EAAY2I,GAAY,oBAErD,GAAInH,EAAsBoU,GAAS,CACjC,IAAKjT,EAAQ,EAAGR,EAASV,EAAkBkH,GAAWxG,EAASQ,EAAOA,IAEpE,IADAL,EAAS2T,EAAOtN,EAAShG,MACX3B,EAAc0U,EAAiBpT,GAAS,OAAOA,EAC7D,OAAO,IAAIkT,GAAO,GAEtBhT,EAAWb,EAAYgH,EAAUiN,GAInC,IADAnT,EAAOD,EAASC,OACPF,EAAOlB,EAAKoB,EAAMD,IAAWI,MAAM,CAC1C,IACEN,EAAS2T,EAAO1T,EAAKzB,OACrB,MAAO6E,GACPH,EAAchD,EAAU,QAASmD,GAEnC,GAAqB,iBAAVrD,GAAsBA,GAAUtB,EAAc0U,EAAiBpT,GAAS,OAAOA,EAC1F,OAAO,IAAIkT,GAAO,K,eChEtB,IAAInU,EAAO,EAAQ,KACfkE,EAAW,EAAQ,MACnB8L,EAAY,EAAQ,MAExBvS,EAAOC,QAAU,SAAUyD,EAAU2H,EAAMrJ,GACzC,IAAIoV,EAAaC,EACjB5Q,EAAS/C,GACT,IAEE,KADA0T,EAAc7E,EAAU7O,EAAU,WAChB,CAChB,GAAa,UAAT2H,EAAkB,MAAMrJ,EAC5B,OAAOA,EAEToV,EAAc7U,EAAK6U,EAAa1T,GAChC,MAAOmD,GACPwQ,GAAa,EACbD,EAAcvQ,EAEhB,GAAa,UAATwE,EAAkB,MAAMrJ,EAC5B,GAAIqV,EAAY,MAAMD,EAEtB,OADA3Q,EAAS2Q,GACFpV,I,2BCpBT,IAaIwL,EAAmB8J,EAAmCC,EAbtD7L,EAAQ,EAAQ,MAChBzK,EAAa,EAAQ,MACrBO,EAAS,EAAQ,MACjB+L,EAAiB,EAAQ,MACzB/B,EAAW,EAAQ,MACnBjK,EAAkB,EAAQ,IAC1B4M,EAAU,EAAQ,MAElBrH,EAAWvF,EAAgB,YAC3BqN,GAAyB,EAOzB,GAAGzB,OAGC,SAFNoK,EAAgB,GAAGpK,SAIjBmK,EAAoC/J,EAAeA,EAAegK,OACxB5W,OAAOiB,YAAW4L,EAAoB8J,GAHlD1I,GAAyB,GAOT/M,MAArB2L,GAAkC9B,GAAM,WACnE,IAAIlD,EAAO,GAEX,OAAOgF,EAAkB1G,GAAUvE,KAAKiG,KAAUA,KAGxBgF,EAAoB,GACvCW,IAASX,EAAoBhM,EAAOgM,IAIxCvM,EAAWuM,EAAkB1G,KAChC0E,EAASgC,EAAmB1G,GAAU,WACpC,OAAO5D,QAIXlD,EAAOC,QAAU,CACfuN,kBAAmBA,EACnBoB,uBAAwBA,I,SC9C1B5O,EAAOC,QAAU,I,eCAjB,IAAIuX,EAAW,EAAQ,MAIvBxX,EAAOC,QAAU,SAAUwX,GACzB,OAAOD,EAASC,EAAIpU,U,eCLtB,IAiBIqU,EAAOC,EAAM3N,EAAM4N,EAAQC,EAAQC,EAAMC,EAASC,EAjBlDhX,EAAS,EAAQ,MACjBsB,EAAO,EAAQ,MACf8K,EAA2B,UAC3B6K,EAAY,YACZC,EAAS,EAAQ,MACjBC,EAAgB,EAAQ,MACxBC,EAAkB,EAAQ,KAC1BC,EAAU,EAAQ,MAElBC,EAAmBtX,EAAOsX,kBAAoBtX,EAAOuX,uBACrDxI,EAAW/O,EAAO+O,SAClBO,EAAUtP,EAAOsP,QACjBvP,EAAUC,EAAOD,QAEjByX,EAA2BpL,EAAyBpM,EAAQ,kBAC5DyX,EAAiBD,GAA4BA,EAAyBxW,MAKrEyW,IACHf,EAAQ,WACN,IAAIgB,EAAQ/R,EAEZ,IADI0R,IAAYK,EAASpI,EAAQqI,SAASD,EAAOE,OAC1CjB,GAAM,CACXhR,EAAKgR,EAAKhR,GACVgR,EAAOA,EAAKhU,KACZ,IACEgD,IACA,MAAOE,GAGP,MAFI8Q,EAAMC,IACL5N,OAAOnI,EACNgF,GAERmD,OAAOnI,EACL6W,GAAQA,EAAOG,SAKhBX,GAAWG,GAAYD,IAAmBE,IAAoBvI,GAQvDoI,GAAiBpX,GAAWA,EAAQ+X,UAE9Cf,EAAUhX,EAAQ+X,aAAQjX,IAElB0E,YAAcxF,EACtBiX,EAAO1V,EAAKyV,EAAQC,KAAMD,GAC1BH,EAAS,WACPI,EAAKN,KAGEW,EACTT,EAAS,WACPtH,EAAQyI,SAASrB,KAUnBO,EAAY3V,EAAK2V,EAAWjX,GAC5B4W,EAAS,WACPK,EAAUP,MA/BZG,GAAS,EACTC,EAAO/H,EAASiJ,eAAe,IAC/B,IAAIV,EAAiBZ,GAAOuB,QAAQnB,EAAM,CAAEoB,eAAe,IAC3DtB,EAAS,WACPE,EAAKnN,KAAOkN,GAAUA,KAgC5B7X,EAAOC,QAAUwY,GAAkB,SAAU9R,GAC3C,IAAIwS,EAAO,CAAExS,GAAIA,EAAIhD,UAAM9B,GACvBmI,IAAMA,EAAKrG,KAAOwV,GACjBxB,IACHA,EAAOwB,EACPvB,KACA5N,EAAOmP,I,eCnFX,IAAInY,EAAS,EAAQ,MAErBhB,EAAOC,QAAUe,EAAOD,S,eCDxB,IAAIqY,EAAa,EAAQ,MACrB1N,EAAQ,EAAQ,MAGpB1L,EAAOC,UAAYU,OAAO0Y,wBAA0B3N,GAAM,WACxD,IAAI4N,EAASC,SAGb,OAAQjY,OAAOgY,MAAa3Y,OAAO2Y,aAAmBC,UAEnDA,OAAO7H,MAAQ0H,GAAcA,EAAa,O,eCX/C,IAAIpY,EAAS,EAAQ,MACjBC,EAAa,EAAQ,MACrByS,EAAgB,EAAQ,MAExBsB,EAAUhU,EAAOgU,QAErBhV,EAAOC,QAAUgB,EAAW+T,IAAY,cAAcxM,KAAKkL,EAAcsB,K,4BCLzE,IAAI/C,EAAY,EAAQ,MAEpBuH,EAAoB,SAAUlT,GAChC,IAAIwS,EAASW,EACbvW,KAAK6U,QAAU,IAAIzR,GAAE,SAAUoT,EAAWC,GACxC,QAAgB9X,IAAZiX,QAAoCjX,IAAX4X,EAAsB,MAAMtY,UAAU,2BACnE2X,EAAUY,EACVD,EAASE,KAEXzW,KAAK4V,QAAU7G,EAAU6G,GACzB5V,KAAKuW,OAASxH,EAAUwH,IAK1BzZ,EAAOC,QAAQ6B,EAAI,SAAUwE,GAC3B,OAAO,IAAIkT,EAAkBlT,K,cCjB/B,IAAIgB,EAAW,EAAQ,MAEvBtH,EAAOC,QAAU,SAAUmB,EAAUwY,GACnC,YAAoB/X,IAAbT,EAAyBgC,UAAUC,OAAS,EAAI,GAAKuW,EAAWtS,EAASlG,K,eCHlF,IAAIJ,EAAS,EAAQ,MACjB0K,EAAQ,EAAQ,MAChBlH,EAAc,EAAQ,MACtB8C,EAAW,EAAQ,MACnBuS,EAAO,aACPC,EAAc,EAAQ,MAEtBC,EAASvV,EAAY,GAAGuV,QACxBC,EAAehZ,EAAOP,WACtB8Y,EAASvY,EAAOuY,OAChBzS,EAAWyS,GAAUA,EAAO7V,SAC5BwL,EAAS,EAAI8K,EAAaF,EAAc,QAAU,KAEhDhT,IAAa4E,GAAM,WAAcsO,EAAarZ,OAAOmG,OAI3D9G,EAAOC,QAAUiP,EAAS,SAAoBkH,GAC5C,IAAI6D,EAAgBJ,EAAKvS,EAAS8O,IAC9B5S,EAASwW,EAAaC,GAC1B,OAAkB,IAAXzW,GAA4C,KAA5BuW,EAAOE,EAAe,IAAa,EAAIzW,GAC5DwW,G,eCrBJ,IAAIhZ,EAAS,EAAQ,MACjB0K,EAAQ,EAAQ,MAChBlH,EAAc,EAAQ,MACtB8C,EAAW,EAAQ,MACnBuS,EAAO,aACPC,EAAc,EAAQ,MAEtBI,EAAYlZ,EAAON,SACnB6Y,EAASvY,EAAOuY,OAChBzS,EAAWyS,GAAUA,EAAO7V,SAC5ByW,EAAM,YACNjT,EAAO1C,EAAY2V,EAAIjT,MACvBgI,EAA2C,IAAlCgL,EAAUJ,EAAc,OAAmD,KAApCI,EAAUJ,EAAc,SAEtEhT,IAAa4E,GAAM,WAAcwO,EAAUvZ,OAAOmG,OAIxD9G,EAAOC,QAAUiP,EAAS,SAAkBkH,EAAQgE,GAClD,IAAIC,EAAIR,EAAKvS,EAAS8O,IACtB,OAAO8D,EAAUG,EAAID,IAAU,IAAOlT,EAAKiT,EAAKE,GAAK,GAAK,MACxDH,G,4BCpBJ,IAAIjR,EAAc,EAAQ,MACtBzE,EAAc,EAAQ,MACtBjC,EAAO,EAAQ,KACfmJ,EAAQ,EAAQ,MAChB4O,EAAa,EAAQ,MACrBC,EAA8B,EAAQ,KACtCC,EAA6B,EAAQ,MACrChY,EAAW,EAAQ,MACnBiC,EAAgB,EAAQ,MAGxBgW,EAAU9Z,OAAOC,OAEjB+H,EAAiBhI,OAAOgI,eACxB+R,EAASlW,EAAY,GAAGkW,QAI5B1a,EAAOC,SAAWwa,GAAW/O,GAAM,WAEjC,GAAIzC,GAQiB,IARFwR,EAAQ,CAAEvH,EAAG,GAAKuH,EAAQ9R,EAAe,GAAI,IAAK,CACnEoF,YAAY,EACZjD,IAAK,WACHnC,EAAezF,KAAM,IAAK,CACxBlB,MAAO,EACP+L,YAAY,OAGd,CAAEmF,EAAG,KAAMA,EAAS,OAAO,EAE/B,IAAIyH,EAAI,GACJC,EAAI,GAEJtB,EAASC,SACTsB,EAAW,uBAGf,OAFAF,EAAErB,GAAU,EACZuB,EAAS5S,MAAM,IAAIvC,SAAQ,SAAUoV,GAAOF,EAAEE,GAAOA,KACpB,GAA1BL,EAAQ,GAAIE,GAAGrB,IAAgBgB,EAAWG,EAAQ,GAAIG,IAAI1S,KAAK,KAAO2S,KAC1E,SAAgBpV,EAAQyH,GAM3B,IALA,IAAI6N,EAAIvY,EAASiD,GACbtC,EAAkBC,UAAUC,OAC5BQ,EAAQ,EACRwV,EAAwBkB,EAA4BzY,EACpDsR,EAAuBoH,EAA2B1Y,EAC/CqB,EAAkBU,GAMvB,IALA,IAII5B,EAJAoY,EAAI5V,EAAcrB,UAAUS,MAC5BsJ,EAAOkM,EAAwBqB,EAAOJ,EAAWD,GAAIhB,EAAsBgB,IAAMC,EAAWD,GAC5FhX,EAAS8J,EAAK9J,OACd2X,EAAI,EAED3X,EAAS2X,GACd/Y,EAAMkL,EAAK6N,KACN/R,IAAe1G,EAAK6Q,EAAsBiH,EAAGpY,KAAM8Y,EAAE9Y,GAAOoY,EAAEpY,IAErE,OAAO8Y,GACPN,G,eCvDJ,IAmDIQ,EAnDAxU,EAAW,EAAQ,MACnByU,EAAmB,EAAQ,KAC3BC,EAAc,EAAQ,MACtBvH,EAAa,EAAQ,MACrBwH,EAAO,EAAQ,MACfC,EAAwB,EAAQ,MAOhCC,EANY,EAAQ,KAMTxG,CAAU,YAErByG,EAAmB,aAEnBC,EAAY,SAAUC,GACxB,MAAOC,WAAmBD,EAAnBC,cAILC,EAA4B,SAAUV,GACxCA,EAAgBW,MAAMJ,EAAU,KAChCP,EAAgBY,QAChB,IAAIC,EAAOb,EAAgBc,aAAapb,OAExC,OADAsa,EAAkB,KACXa,GA0BLE,EAAkB,WACpB,IACEf,EAAkB,IAAIgB,cAAc,YACpC,MAAOpV,IAzBoB,IAIzBqV,EAFAC,EAwBJH,EAAqC,oBAAZjM,SACrBA,SAAS4I,QAAUsC,EACjBU,EAA0BV,KA1B5BkB,EAASd,EAAsB,WAG5Be,MAAMC,QAAU,OACvBjB,EAAKkB,YAAYH,GAEjBA,EAAOI,IAAMjb,OALJ,gBAMT4a,EAAiBC,EAAOK,cAAczM,UACvB0M,OACfP,EAAeN,MAAMJ,EAAU,sBAC/BU,EAAeL,QACRK,EAAe5O,GAiBlBqO,EAA0BV,GAE9B,IADA,IAAI5X,EAAS8X,EAAY9X,OAClBA,YAAiB2Y,EAAyB,UAAEb,EAAY9X,IAC/D,OAAO2Y,KAGTpI,EAAW0H,IAAY,EAIvBtb,EAAOC,QAAUU,OAAOa,QAAU,SAAgBwB,EAAG0Z,GACnD,IAAIlZ,EAQJ,OAPU,OAANR,GACFuY,EAA0B,UAAI9U,EAASzD,GACvCQ,EAAS,IAAI+X,EACbA,EAA0B,UAAI,KAE9B/X,EAAO8X,GAAYtY,GACdQ,EAASwY,SACMna,IAAf6a,EAA2BlZ,EAAS0X,EAAiB1X,EAAQkZ,K,cChFtE,IAAIzT,EAAc,EAAQ,MACtBxH,EAAuB,EAAQ,MAC/BgF,EAAW,EAAQ,MACnB1C,EAAkB,EAAQ,KAC1BuW,EAAa,EAAQ,MAKzBta,EAAOC,QAAUgJ,EAActI,OAAOua,iBAAmB,SAA0BlY,EAAG0Z,GACpFjW,EAASzD,GAMT,IALA,IAIIf,EAJA0a,EAAQ5Y,EAAgB2Y,GACxBvP,EAAOmN,EAAWoC,GAClBrZ,EAAS8J,EAAK9J,OACdQ,EAAQ,EAELR,EAASQ,GAAOpC,EAAqBK,EAAEkB,EAAGf,EAAMkL,EAAKtJ,KAAU8Y,EAAM1a,IAC5E,OAAOe,I,eCjBT,IAAIhC,EAAS,EAAQ,MACjBiI,EAAc,EAAQ,MACtB2T,EAAiB,EAAQ,MACzBnW,EAAW,EAAQ,MACnBwH,EAAgB,EAAQ,MAExB9M,EAAYH,EAAOG,UAEnB0b,EAAkBlc,OAAOgI,eAI7B1I,EAAQ6B,EAAImH,EAAc4T,EAAkB,SAAwB7Z,EAAG0P,EAAGoK,GAIxE,GAHArW,EAASzD,GACT0P,EAAIzE,EAAcyE,GAClBjM,EAASqW,GACLF,EAAgB,IAClB,OAAOC,EAAgB7Z,EAAG0P,EAAGoK,GAC7B,MAAOjW,IACT,GAAI,QAASiW,GAAc,QAASA,EAAY,MAAM3b,EAAU,2BAEhE,MADI,UAAW2b,IAAY9Z,EAAE0P,GAAKoK,EAAW9a,OACtCgB,I,eCrBT,IAAIiG,EAAc,EAAQ,MACtB1G,EAAO,EAAQ,KACfiY,EAA6B,EAAQ,MACrC/M,EAA2B,EAAQ,MACnC1J,EAAkB,EAAQ,KAC1BkK,EAAgB,EAAQ,MACxBlB,EAAS,EAAQ,MACjB6P,EAAiB,EAAQ,MAGzBG,EAA4Bpc,OAAOyM,yBAIvCnN,EAAQ6B,EAAImH,EAAc8T,EAA4B,SAAkC/Z,EAAG0P,GAGzF,GAFA1P,EAAIe,EAAgBf,GACpB0P,EAAIzE,EAAcyE,GACdkK,EAAgB,IAClB,OAAOG,EAA0B/Z,EAAG0P,GACpC,MAAO7L,IACT,GAAIkG,EAAO/J,EAAG0P,GAAI,OAAOjF,GAA0BlL,EAAKiY,EAA2B1Y,EAAGkB,EAAG0P,GAAI1P,EAAE0P,M,cCnBjG,IAAIrC,EAAU,EAAQ,MAClBtM,EAAkB,EAAQ,KAC1BiZ,EAAuB,UACvBjV,EAAa,EAAQ,MAErBkV,EAA+B,iBAAV/M,QAAsBA,QAAUvP,OAAO6T,oBAC5D7T,OAAO6T,oBAAoBtE,QAAU,GAWzClQ,EAAOC,QAAQ6B,EAAI,SAA6BK,GAC9C,OAAO8a,GAA8B,UAAf5M,EAAQlO,GAVX,SAAUA,GAC7B,IACE,OAAO6a,EAAqB7a,GAC5B,MAAO0E,GACP,OAAOkB,EAAWkV,IAOhBC,CAAe/a,GACf6a,EAAqBjZ,EAAgB5B,M,eCrB3C,IAAIgb,EAAqB,EAAQ,KAG7BvJ,EAFc,EAAQ,MAEG8G,OAAO,SAAU,aAK9Cza,EAAQ6B,EAAInB,OAAO6T,qBAAuB,SAA6BxR,GACrE,OAAOma,EAAmBna,EAAG4Q,K,YCR/B3T,EAAQ6B,EAAInB,OAAO0Y,uB,eCDnB,IAAIrY,EAAS,EAAQ,MACjB+L,EAAS,EAAQ,MACjB9L,EAAa,EAAQ,MACrBuB,EAAW,EAAQ,MACnBsS,EAAY,EAAQ,MACpBsI,EAA2B,EAAQ,MAEnC9B,EAAWxG,EAAU,YACrBnU,EAASK,EAAOL,OAChB0c,EAAkB1c,EAAOiB,UAI7B5B,EAAOC,QAAUmd,EAA2Bzc,EAAO4M,eAAiB,SAAUvK,GAC5E,IAAIqE,EAAS7E,EAASQ,GACtB,GAAI+J,EAAO1F,EAAQiU,GAAW,OAAOjU,EAAOiU,GAC5C,IAAI/U,EAAcc,EAAOd,YACzB,OAAItF,EAAWsF,IAAgBc,aAAkBd,EACxCA,EAAY3E,UACZyF,aAAkB1G,EAAS0c,EAAkB,O,eCnBxD,IAAI7Y,EAAc,EAAQ,MAE1BxE,EAAOC,QAAUuE,EAAY,GAAGtC,gB,cCFhC,IAAIsC,EAAc,EAAQ,MACtBuI,EAAS,EAAQ,MACjBhJ,EAAkB,EAAQ,KAC1BQ,EAAU,gBACVqP,EAAa,EAAQ,MAErBjP,EAAOH,EAAY,GAAGG,MAE1B3E,EAAOC,QAAU,SAAUoH,EAAQiW,GACjC,IAGIrb,EAHAe,EAAIe,EAAgBsD,GACpBgG,EAAI,EACJ7J,EAAS,GAEb,IAAKvB,KAAOe,GAAI+J,EAAO6G,EAAY3R,IAAQ8K,EAAO/J,EAAGf,IAAQ0C,EAAKnB,EAAQvB,GAE1E,KAAOqb,EAAMja,OAASgK,GAAON,EAAO/J,EAAGf,EAAMqb,EAAMjQ,SAChD9I,EAAQf,EAAQvB,IAAQ0C,EAAKnB,EAAQvB,IAExC,OAAOuB,I,eClBT,IAAI2Z,EAAqB,EAAQ,KAC7BhC,EAAc,EAAQ,MAK1Bnb,EAAOC,QAAUU,OAAOwM,MAAQ,SAAcnK,GAC5C,OAAOma,EAAmBna,EAAGmY,K,0BCN/B,IAAIoC,EAAwB,GAAGnK,qBAE3BhG,EAA2BzM,OAAOyM,yBAGlCoQ,EAAcpQ,IAA6BmQ,EAAsBhb,KAAK,CAAE,EAAG,GAAK,GAIpFtC,EAAQ6B,EAAI0b,EAAc,SAA8B/K,GACtD,IAAIrB,EAAahE,EAAyBlK,KAAMuP,GAChD,QAASrB,GAAcA,EAAWrD,YAChCwP,G,eCZJ,IAAI/Y,EAAc,EAAQ,MACtBiC,EAAW,EAAQ,MACnBgX,EAAqB,EAAQ,MAMjCzd,EAAOC,QAAUU,OAAOG,iBAAmB,aAAe,GAAK,WAC7D,IAEI4c,EAFAC,GAAiB,EACjBnV,EAAO,GAEX,KAEEkV,EAASlZ,EAAY7D,OAAOyM,yBAAyBzM,OAAOiB,UAAW,aAAayH,MAC7Eb,EAAM,IACbmV,EAAiBnV,aAAgBrI,MACjC,MAAO0G,IACT,OAAO,SAAwB7D,EAAG8M,GAKhC,OAJArJ,EAASzD,GACTya,EAAmB3N,GACf6N,EAAgBD,EAAO1a,EAAG8M,GACzB9M,EAAE4a,UAAY9N,EACZ9M,GAfoD,QAiBzDnB,I,eC1BN,IAAIoH,EAAc,EAAQ,MACtBzE,EAAc,EAAQ,MACtB8V,EAAa,EAAQ,MACrBvW,EAAkB,EAAQ,KAG1BqP,EAAuB5O,EAFC,WAGxBG,EAAOH,EAAY,GAAGG,MAGtBV,EAAe,SAAU4Z,GAC3B,OAAO,SAAU1b,GAOf,IANA,IAKIF,EALAe,EAAIe,EAAgB5B,GACpBgL,EAAOmN,EAAWtX,GAClBK,EAAS8J,EAAK9J,OACdgK,EAAI,EACJ7J,EAAS,GAENH,EAASgK,GACdpL,EAAMkL,EAAKE,KACNpE,IAAemK,EAAqBpQ,EAAGf,IAC1C0C,EAAKnB,EAAQqa,EAAa,CAAC5b,EAAKe,EAAEf,IAAQe,EAAEf,IAGhD,OAAOuB,IAIXxD,EAAOC,QAAU,CAGfY,QAASoD,GAAa,GAGtB4L,OAAQ5L,GAAa,K,4BCjCvB,IAAIuD,EAAwB,EAAQ,MAChC6I,EAAU,EAAQ,MAItBrQ,EAAOC,QAAUuH,EAAwB,GAAGF,SAAW,WACrD,MAAO,WAAa+I,EAAQnN,MAAQ,M,eCPtC,IAAIlC,EAAS,EAAQ,MACjBuB,EAAO,EAAQ,KACftB,EAAa,EAAQ,MACrBoB,EAAW,EAAQ,MAEnBlB,EAAYH,EAAOG,UAIvBnB,EAAOC,QAAU,SAAU6d,EAAOC,GAChC,IAAIpX,EAAIqX,EACR,GAAa,WAATD,GAAqB9c,EAAW0F,EAAKmX,EAAMxW,YAAcjF,EAAS2b,EAAMzb,EAAKoE,EAAImX,IAAS,OAAOE,EACrG,GAAI/c,EAAW0F,EAAKmX,EAAMG,WAAa5b,EAAS2b,EAAMzb,EAAKoE,EAAImX,IAAS,OAAOE,EAC/E,GAAa,WAATD,GAAqB9c,EAAW0F,EAAKmX,EAAMxW,YAAcjF,EAAS2b,EAAMzb,EAAKoE,EAAImX,IAAS,OAAOE,EACrG,MAAM7c,EAAU,6C,eCdlB,IAAIoP,EAAa,EAAQ,MACrB/L,EAAc,EAAQ,MACtBqP,EAA4B,EAAQ,MACpC0G,EAA8B,EAAQ,KACtC9T,EAAW,EAAQ,MAEnBiU,EAASlW,EAAY,GAAGkW,QAG5B1a,EAAOC,QAAUsQ,EAAW,UAAW,YAAc,SAAiBpO,GACpE,IAAIgL,EAAO0G,EAA0B/R,EAAE2E,EAAStE,IAC5CkX,EAAwBkB,EAA4BzY,EACxD,OAAOuX,EAAwBqB,EAAOvN,EAAMkM,EAAsBlX,IAAOgL,I,eCZ3E,IAAInM,EAAS,EAAQ,MAErBhB,EAAOC,QAAUe,G,SCFjBhB,EAAOC,QAAU,SAAUiH,GACzB,IACE,MAAO,CAAEL,OAAO,EAAO7E,MAAOkF,KAC9B,MAAOL,GACP,MAAO,CAAEA,OAAO,EAAM7E,MAAO6E,M,eCJjC,IAAIJ,EAAW,EAAQ,MACnBpE,EAAW,EAAQ,MACnB6b,EAAuB,EAAQ,MAEnCle,EAAOC,QAAU,SAAUqG,EAAG6X,GAE5B,GADA1X,EAASH,GACLjE,EAAS8b,IAAMA,EAAE5X,cAAgBD,EAAG,OAAO6X,EAC/C,IAAIC,EAAoBF,EAAqBpc,EAAEwE,GAG/C,OADAwS,EADcsF,EAAkBtF,SACxBqF,GACDC,EAAkBrG,U,eCV3B,IAAIvM,EAAW,EAAQ,MAEvBxL,EAAOC,QAAU,SAAUwF,EAAQ8W,EAAKtL,GACtC,IAAK,IAAIhP,KAAOsa,EAAK/Q,EAAS/F,EAAQxD,EAAKsa,EAAIta,GAAMgP,GACrD,OAAOxL,I,eCJT,IAAIzE,EAAS,EAAQ,MACjBC,EAAa,EAAQ,MACrB8L,EAAS,EAAQ,MACjBuB,EAA8B,EAAQ,MACtCyC,EAAY,EAAQ,MACpB2C,EAAgB,EAAQ,MACxBvK,EAAsB,EAAQ,MAC9BuF,EAA6B,qBAE7BvE,EAAmBhB,EAAoB2B,IACvCuT,EAAuBlV,EAAoBoM,QAC3C+I,EAAWhd,OAAOA,QAAQ2G,MAAM,WAEnCjI,EAAOC,QAAU,SAAU+C,EAAGf,EAAKD,EAAOiP,GACzC,IAII3G,EAJAiU,IAAStN,KAAYA,EAAQsN,OAC7BC,IAASvN,KAAYA,EAAQlD,WAC7B0D,IAAcR,KAAYA,EAAQQ,YAClC7B,EAAOqB,QAA4BpP,IAAjBoP,EAAQrB,KAAqBqB,EAAQrB,KAAO3N,EAE9DhB,EAAWe,KACoB,YAA7BV,OAAOsO,GAAM1J,MAAM,EAAG,KACxB0J,EAAO,IAAMtO,OAAOsO,GAAM5H,QAAQ,qBAAsB,MAAQ,OAE7D+E,EAAO/K,EAAO,SAAY0M,GAA8B1M,EAAM4N,OAASA,IAC1EtB,EAA4BtM,EAAO,OAAQ4N,IAE7CtF,EAAQ+T,EAAqBrc,IAClBkL,SACT5C,EAAM4C,OAASoR,EAASpW,KAAoB,iBAAR0H,EAAmBA,EAAO,MAG9D5M,IAAMhC,GAIEud,GAEA9M,GAAezO,EAAEf,KAC3Buc,GAAS,UAFFxb,EAAEf,GAIPuc,EAAQxb,EAAEf,GAAOD,EAChBsM,EAA4BtL,EAAGf,EAAKD,IATnCwc,EAAQxb,EAAEf,GAAOD,EAChB+O,EAAU9O,EAAKD,KAUrB8P,SAASlQ,UAAW,YAAY,WACjC,OAAOX,EAAWiC,OAASiH,EAAiBjH,MAAMgK,QAAUwG,EAAcxQ,U,eC5C5E,IAEI/B,EAFS,EAAQ,MAEEA,UAIvBnB,EAAOC,QAAU,SAAUkC,GACzB,GAAUN,MAANM,EAAiB,MAAMhB,EAAU,wBAA0BgB,GAC/D,OAAOA,I,eCRT,IAAInB,EAAS,EAAQ,MAGjB2H,EAAiBhI,OAAOgI,eAE5B3I,EAAOC,QAAU,SAAUgC,EAAKD,GAC9B,IACE2G,EAAe3H,EAAQiB,EAAK,CAAED,MAAOA,EAAOD,cAAc,EAAMiM,UAAU,IAC1E,MAAOnH,GACP7F,EAAOiB,GAAOD,EACd,OAAOA,I,4BCTX,IAAIuO,EAAa,EAAQ,MACrB9O,EAAuB,EAAQ,MAC/BF,EAAkB,EAAQ,IAC1B0H,EAAc,EAAQ,MAEtB7C,EAAU7E,EAAgB,WAE9BvB,EAAOC,QAAU,SAAUyJ,GACzB,IAAIE,EAAc2G,EAAW7G,GACzBf,EAAiBlH,EAAqBK,EAEtCmH,GAAeW,IAAgBA,EAAYxD,IAC7CuC,EAAeiB,EAAaxD,EAAS,CACnCrE,cAAc,EACd+I,IAAK,WAAc,OAAO5H,U,eCfhC,IAAIyF,EAAiB,UACjBoE,EAAS,EAAQ,MAGjBrF,EAFkB,EAAQ,GAEVnG,CAAgB,eAEpCvB,EAAOC,QAAU,SAAUkC,EAAIsc,EAAKlN,GAC9BpP,IAAO4K,EAAO5K,EAAKoP,EAASpP,EAAKA,EAAGP,UAAW8F,IACjDiB,EAAexG,EAAIuF,EAAe,CAAE3F,cAAc,EAAMC,MAAOyc,M,eCRnE,IAAI5J,EAAS,EAAQ,MACjBd,EAAM,EAAQ,MAEd5G,EAAO0H,EAAO,QAElB7U,EAAOC,QAAU,SAAUgC,GACzB,OAAOkL,EAAKlL,KAASkL,EAAKlL,GAAO8R,EAAI9R,M,eCNvC,IAAIjB,EAAS,EAAQ,MACjB+P,EAAY,EAAQ,MAEpB2N,EAAS,qBACTlL,EAAQxS,EAAO0d,IAAW3N,EAAU2N,EAAQ,IAEhD1e,EAAOC,QAAUuT,G,eCNjB,IAAIrF,EAAU,EAAQ,MAClBqF,EAAQ,EAAQ,OAEnBxT,EAAOC,QAAU,SAAUgC,EAAKD,GAC/B,OAAOwR,EAAMvR,KAASuR,EAAMvR,QAAiBJ,IAAVG,EAAsBA,EAAQ,MAChE,WAAY,IAAI2C,KAAK,CACtB8L,QAAS,SACTkO,KAAMxQ,EAAU,OAAS,SACzByQ,UAAW,0C,eCRb,IAAInY,EAAW,EAAQ,MACnBoY,EAAe,EAAQ,MAGvBzY,EAFkB,EAAQ,GAEhB7E,CAAgB,WAI9BvB,EAAOC,QAAU,SAAU+C,EAAG8b,GAC5B,IACIzE,EADA/T,EAAIG,EAASzD,GAAGuD,YAEpB,YAAa1E,IAANyE,GAAiDzE,OAA7BwY,EAAI5T,EAASH,GAAGF,IAAyB0Y,EAAqBD,EAAaxE,K,cCXxG,IAAI7V,EAAc,EAAQ,MACtBua,EAAsB,EAAQ,MAC9BzX,EAAW,EAAQ,MACnB0X,EAAyB,EAAQ,MAEjCjF,EAASvV,EAAY,GAAGuV,QACxBkF,EAAaza,EAAY,GAAGya,YAC5B1X,EAAc/C,EAAY,GAAG0B,OAE7BjC,EAAe,SAAUib,GAC3B,OAAO,SAAU/a,EAAOgb,GACtB,IAGIpV,EAAOqV,EAHP/E,EAAI/S,EAAS0X,EAAuB7a,IACpCkb,EAAWN,EAAoBI,GAC/BlV,EAAOoQ,EAAEhX,OAEb,OAAIgc,EAAW,GAAKA,GAAYpV,EAAaiV,EAAoB,QAAKrd,GACtEkI,EAAQkV,EAAW5E,EAAGgF,IACP,OAAUtV,EAAQ,OAAUsV,EAAW,IAAMpV,IACtDmV,EAASH,EAAW5E,EAAGgF,EAAW,IAAM,OAAUD,EAAS,MAC3DF,EACEnF,EAAOM,EAAGgF,GACVtV,EACFmV,EACE3X,EAAY8S,EAAGgF,EAAUA,EAAW,GACVD,EAAS,OAAlCrV,EAAQ,OAAU,IAA0B,QAIzD/J,EAAOC,QAAU,CAGfqf,OAAQrb,GAAa,GAGrB8V,OAAQ9V,GAAa,K,eClCvB,IAAIO,EAAc,EAAQ,MACtBwa,EAAyB,EAAQ,MACjC1X,EAAW,EAAQ,MACnBwS,EAAc,EAAQ,MAEtB9R,EAAUxD,EAAY,GAAGwD,SACzBuX,EAAa,IAAMzF,EAAc,IACjC0F,EAAQC,OAAO,IAAMF,EAAaA,EAAa,KAC/CG,EAAQD,OAAOF,EAAaA,EAAa,MAGzCtb,EAAe,SAAUW,GAC3B,OAAO,SAAUT,GACf,IAAIiS,EAAS9O,EAAS0X,EAAuB7a,IAG7C,OAFW,EAAPS,IAAUwR,EAASpO,EAAQoO,EAAQoJ,EAAO,KACnC,EAAP5a,IAAUwR,EAASpO,EAAQoO,EAAQsJ,EAAO,KACvCtJ,IAIXpW,EAAOC,QAAU,CAGf0f,MAAO1b,EAAa,GAGpB2b,IAAK3b,EAAa,GAGlB4V,KAAM5V,EAAa,K,eC7BrB,IAsBI4b,EAAUC,EAAOC,EAASC,EAtB1Bhf,EAAS,EAAQ,MACjB+Q,EAAQ,EAAQ,MAChBzP,EAAO,EAAQ,MACfrB,EAAa,EAAQ,MACrB8L,EAAS,EAAQ,MACjBrB,EAAQ,EAAQ,MAChB0P,EAAO,EAAQ,MACfrT,EAAa,EAAQ,MACrBkI,EAAgB,EAAQ,MACxBiI,EAAS,EAAQ,MACjBG,EAAU,EAAQ,MAElBhP,EAAMrI,EAAOif,aACbvV,EAAQ1J,EAAOkf,eACf5P,EAAUtP,EAAOsP,QACjB6P,EAAWnf,EAAOmf,SAClBrO,EAAW9Q,EAAO8Q,SAClBsO,EAAiBpf,EAAOof,eACxB9e,EAASN,EAAOM,OAChB+e,EAAU,EACVC,EAAQ,GAIZ,IAEET,EAAW7e,EAAO6e,SAClB,MAAOhZ,IAET,IAAI0Z,EAAM,SAAUpM,GAClB,GAAIpH,EAAOuT,EAAOnM,GAAK,CACrB,IAAIxN,EAAK2Z,EAAMnM,UACRmM,EAAMnM,GACbxN,MAIA6Z,EAAS,SAAUrM,GACrB,OAAO,WACLoM,EAAIpM,KAIJsM,EAAW,SAAUC,GACvBH,EAAIG,EAAM/V,OAGRgW,EAAO,SAAUxM,GAEnBnT,EAAO4f,YAAYtf,EAAO6S,GAAK0L,EAASgB,SAAW,KAAOhB,EAASiB,OAIhEzX,GAAQqB,IACXrB,EAAM,SAAsB1C,GAC1B,IAAIoa,EAAOhZ,EAAW3E,UAAW,GAKjC,OAJAkd,IAAQD,GAAW,WACjBtO,EAAM9Q,EAAW0F,GAAMA,EAAKmL,EAASnL,QAAK9E,EAAWkf,IAEvDjB,EAAMO,GACCA,GAET3V,EAAQ,SAAwByJ,UACvBmM,EAAMnM,IAGXkE,EACFyH,EAAQ,SAAU3L,GAChB7D,EAAQyI,SAASyH,EAAOrM,KAGjBgM,GAAYA,EAASa,IAC9BlB,EAAQ,SAAU3L,GAChBgM,EAASa,IAAIR,EAAOrM,KAIbiM,IAAmBlI,GAE5B8H,GADAD,EAAU,IAAIK,GACCa,MACflB,EAAQmB,MAAMC,UAAYV,EAC1BX,EAAQxd,EAAK0d,EAAKY,YAAaZ,IAI/Bhf,EAAOogB,kBACPngB,EAAWD,EAAO4f,eACjB5f,EAAOqgB,eACRxB,GAAkC,UAAtBA,EAASgB,WACpBnV,EAAMiV,IAEPb,EAAQa,EACR3f,EAAOogB,iBAAiB,UAAWX,GAAU,IAG7CX,EA1EqB,uBAyEU7P,EAAc,UACrC,SAAUkE,GAChBiH,EAAKkB,YAAYrM,EAAc,WAA6B,mBAAI,WAC9DmL,EAAKkG,YAAYpe,MACjBqd,EAAIpM,KAKA,SAAUA,GAChBoN,WAAWf,EAAOrM,GAAK,KAK7BnU,EAAOC,QAAU,CACfoJ,IAAKA,EACLqB,MAAOA,I,eC/GT,IAAIqU,EAAsB,EAAQ,MAE9ByC,EAAM3O,KAAK2O,IACXC,EAAM5O,KAAK4O,IAKfzhB,EAAOC,QAAU,SAAU4D,EAAOR,GAChC,IAAIqe,EAAU3C,EAAoBlb,GAClC,OAAO6d,EAAU,EAAIF,EAAIE,EAAUre,EAAQ,GAAKoe,EAAIC,EAASre,K,cCT/D,IAAIoB,EAAgB,EAAQ,MACxBua,EAAyB,EAAQ,MAErChf,EAAOC,QAAU,SAAUkC,GACzB,OAAOsC,EAAcua,EAAuB7c,M,SCL9C,IAAIwf,EAAO9O,KAAK8O,KACZrL,EAAQzD,KAAKyD,MAIjBtW,EAAOC,QAAU,SAAUmB,GACzB,IAAIwgB,GAAUxgB,EAEd,OAAOwgB,GAAWA,GAAqB,IAAXA,EAAe,GAAKA,EAAS,EAAItL,EAAQqL,GAAMC,K,eCR7E,IAAI7C,EAAsB,EAAQ,MAE9B0C,EAAM5O,KAAK4O,IAIfzhB,EAAOC,QAAU,SAAUmB,GACzB,OAAOA,EAAW,EAAIqgB,EAAI1C,EAAoB3d,GAAW,kBAAoB,I,eCP/E,IAAIJ,EAAS,EAAQ,MACjBge,EAAyB,EAAQ,MAEjCre,EAASK,EAAOL,OAIpBX,EAAOC,QAAU,SAAUmB,GACzB,OAAOT,EAAOqe,EAAuB5d,M,eCRvC,IAAIJ,EAAS,EAAQ,MACjBuB,EAAO,EAAQ,KACfF,EAAW,EAAQ,MACnBwf,EAAW,EAAQ,MACnBtP,EAAY,EAAQ,MACpBuP,EAAsB,EAAQ,MAC9BvgB,EAAkB,EAAQ,IAE1BJ,EAAYH,EAAOG,UACnB4gB,EAAexgB,EAAgB,eAInCvB,EAAOC,QAAU,SAAU6d,EAAOC,GAChC,IAAK1b,EAASyb,IAAU+D,EAAS/D,GAAQ,OAAOA,EAChD,IACIta,EADAwe,EAAezP,EAAUuL,EAAOiE,GAEpC,GAAIC,EAAc,CAGhB,QAFangB,IAATkc,IAAoBA,EAAO,WAC/Bva,EAASjB,EAAKyf,EAAclE,EAAOC,IAC9B1b,EAASmB,IAAWqe,EAASre,GAAS,OAAOA,EAClD,MAAMrC,EAAU,2CAGlB,YADaU,IAATkc,IAAoBA,EAAO,UACxB+D,EAAoBhE,EAAOC,K,eCxBpC,IAAIkE,EAAc,EAAQ,MACtBJ,EAAW,EAAQ,MAIvB7hB,EAAOC,QAAU,SAAUmB,GACzB,IAAIa,EAAMggB,EAAY7gB,EAAU,UAChC,OAAOygB,EAAS5f,GAAOA,EAAMA,EAAM,K,eCPrC,IAGIuG,EAAO,GAEXA,EALsB,EAAQ,GAEVjH,CAAgB,gBAGd,IAEtBvB,EAAOC,QAA2B,eAAjBqB,OAAOkH,I,eCPxB,IAAIxH,EAAS,EAAQ,MACjBqP,EAAU,EAAQ,MAElB/O,EAASN,EAAOM,OAEpBtB,EAAOC,QAAU,SAAUmB,GACzB,GAA0B,WAAtBiP,EAAQjP,GAAwB,MAAMD,UAAU,6CACpD,OAAOG,EAAOF,K,eCPhB,IAEIE,EAFS,EAAQ,MAEDA,OAEpBtB,EAAOC,QAAU,SAAUmB,GACzB,IACE,OAAOE,EAAOF,GACd,MAAOyF,GACP,MAAO,Y,eCRX,IAAIrC,EAAc,EAAQ,MAEtB2P,EAAK,EACL+N,EAAUrP,KAAKsP,SACf7a,EAAW9C,EAAY,GAAI8C,UAE/BtH,EAAOC,QAAU,SAAUgC,GACzB,MAAO,gBAAqBJ,IAARI,EAAoB,GAAKA,GAAO,KAAOqF,IAAW6M,EAAK+N,EAAS,M,eCNtF,IAAIE,EAAgB,EAAQ,MAE5BpiB,EAAOC,QAAUmiB,IACX7I,OAAO7H,MACkB,iBAAnB6H,OAAO7V,U,aCLnB,IAAI1C,EAAS,EAAQ,MACjB6T,EAAS,EAAQ,MACjB9H,EAAS,EAAQ,MACjBgH,EAAM,EAAQ,MACdqO,EAAgB,EAAQ,MACxB5L,EAAoB,EAAQ,MAE5B6L,EAAwBxN,EAAO,OAC/B0E,EAASvY,EAAOuY,OAChB+I,EAAY/I,GAAUA,EAAY,IAClCgJ,EAAwB/L,EAAoB+C,EAASA,GAAUA,EAAOiJ,eAAiBzO,EAE3F/T,EAAOC,QAAU,SAAU2P,GACzB,IAAK7C,EAAOsV,EAAuBzS,KAAWwS,GAAuD,iBAA/BC,EAAsBzS,GAAoB,CAC9G,IAAI6S,EAAc,UAAY7S,EAC1BwS,GAAiBrV,EAAOwM,EAAQ3J,GAClCyS,EAAsBzS,GAAQ2J,EAAO3J,GAErCyS,EAAsBzS,GADb4G,GAAqB8L,EACAA,EAAUG,GAEVF,EAAsBE,GAEtD,OAAOJ,EAAsBzS,K,SCrBjC5P,EAAOC,QAAU,iD,4BCAjB,IAAIqL,EAAI,EAAQ,MACZtK,EAAS,EAAQ,MACjBkB,EAAgB,EAAQ,MACxBqL,EAAiB,EAAQ,MACzBzM,EAAiB,EAAQ,MACzBkQ,EAA4B,EAAQ,MACpCxP,EAAS,EAAQ,MACjB8M,EAA8B,EAAQ,MACtCb,EAA2B,EAAQ,MACnCiV,EAAkB,EAAQ,MAC1BC,EAAoB,EAAQ,MAC5B7Z,EAAU,EAAQ,MAClB8Z,EAA0B,EAAQ,KAClCC,EAA0B,EAAQ,KAElCza,EAAQpH,EAAOoH,MACfzD,EAAO,GAAGA,KAEVme,EAAkB,SAAwBC,EAAQC,GACpD,IAAI3d,EAAOnD,EAAc+gB,EAAyB/f,MAAQA,KAAO1B,EAAOyhB,GACpEhS,EAAU7N,UAAUC,OAAS,EAAID,UAAU,QAAKvB,EAChDf,IACFuE,EAAOvE,EAAe,IAAIsH,OAAMvG,GAAY0L,EAAelI,KAE7DiJ,EAA4BjJ,EAAM,UAAWud,EAAwBI,EAAS,KAC1EH,GAAyBvU,EAA4BjJ,EAAM,QAASqd,EAAgBrd,EAAKgD,MAAO,IACpGsa,EAAkBtd,EAAM4L,GACxB,IAAIiS,EAAc,GAGlB,OAFApa,EAAQia,EAAQpe,EAAM,CAAEU,KAAM6d,IAC9B5U,EAA4BjJ,EAAM,SAAU6d,GACrC7d,GAGLvE,EAAgBA,EAAegiB,EAAiB1a,GAC/C4I,EAA0B8R,EAAiB1a,GAEhD,IAAI6a,EAA0BH,EAAgBlhB,UAAYJ,EAAO4G,EAAMxG,UAAW,CAChF2E,YAAakH,EAAyB,EAAGqV,GACzCE,QAASvV,EAAyB,EAAG,IACrCmC,KAAMnC,EAAyB,EAAG,oBAKpCnC,EAAE,CAAEtK,QAAQ,GAAQ,CAClBmiB,eAAgBL,K,4BC7ClB,IAAIxX,EAAI,EAAQ,MACZ8X,EAAQ,aACRC,EAAmB,EAAQ,MAE3BC,EAAO,OACPC,GAAc,EAGdD,IAAQ,IAAInjB,MAAM,GAAO,MAAE,WAAcojB,GAAc,KAI3DjY,EAAE,CAAE7F,OAAQ,QAASqK,OAAO,EAAMhD,OAAQyW,GAAe,CACvDxd,KAAM,SAAcX,GAClB,OAAOge,EAAMlgB,KAAMkC,EAAYhC,UAAUC,OAAS,EAAID,UAAU,QAAKvB,MAKzEwhB,EAAiBC,I,eCpBjB,IAAIhY,EAAI,EAAQ,MACZlL,EAAO,EAAQ,KAUnBkL,EAAE,CAAE7F,OAAQ,QAAS+L,MAAM,EAAM1E,QATC,EAAQ,KAEfnB,EAA4B,SAAU9B,GAE/D1J,MAAMC,KAAKyJ,OAKmD,CAC9DzJ,KAAMA,K,4BCXR,IAAI2D,EAAkB,EAAQ,KAC1Bsf,EAAmB,EAAQ,MAC3B3V,EAAY,EAAQ,MACpBvE,EAAsB,EAAQ,MAC9BJ,EAAiB,EAAQ,MAEzBya,EAAiB,iBACjBpa,EAAmBD,EAAoBE,IACvCc,EAAmBhB,EAAoBI,UAAUia,GAYrDxjB,EAAOC,QAAU8I,EAAe5I,MAAO,SAAS,SAAUiL,EAAUC,GAClEjC,EAAiBlG,KAAM,CACrB4G,KAAM0Z,EACN/d,OAAQ1B,EAAgBqH,GACxBvH,MAAO,EACPwH,KAAMA,OAIP,WACD,IAAIf,EAAQH,EAAiBjH,MACzBuC,EAAS6E,EAAM7E,OACf4F,EAAOf,EAAMe,KACbxH,EAAQyG,EAAMzG,QAClB,OAAK4B,GAAU5B,GAAS4B,EAAOpC,QAC7BiH,EAAM7E,YAAS5D,EACR,CAAEG,WAAOH,EAAWiC,MAAM,IAEvB,QAARuH,EAAuB,CAAErJ,MAAO6B,EAAOC,MAAM,GACrC,UAARuH,EAAyB,CAAErJ,MAAOyD,EAAO5B,GAAQC,MAAM,GACpD,CAAE9B,MAAO,CAAC6B,EAAO4B,EAAO5B,IAASC,MAAM,KAC7C,UAKH4J,EAAU+V,UAAY/V,EAAUvN,MAGhCkjB,EAAiB,QACjBA,EAAiB,UACjBA,EAAiB,Y,4BCnDA,EAAQ,KAKzBK,CAAW,OAAO,SAAUC,GAC1B,OAAO,WAAiB,OAAOA,EAAKzgB,KAAME,UAAUC,OAASD,UAAU,QAAKvB,MALvD,EAAQ,Q,eCFvB,EAAQ,KAKhByJ,CAAE,CAAE7F,OAAQ,SAAU+L,MAAM,GAAQ,CAClCjR,UALqB,EAAQ,S,eCDvB,EAAQ,KAIhB+K,CAAE,CAAE7F,OAAQ,SAAU+L,MAAM,GAAQ,CAClChR,MAAO,SAAeohB,GAEpB,OAAOA,GAAUA,M,eCPrB,IAAItW,EAAI,EAAQ,MACZ7K,EAAa,EAAQ,MAKzB6K,EAAE,CAAE7F,OAAQ,SAAU+L,MAAM,EAAM1E,OAAQxM,OAAOG,YAAcA,GAAc,CAC3EA,WAAYA,K,eCPd,IAAI6K,EAAI,EAAQ,MACZ5K,EAAW,EAAQ,MAKvB4K,EAAE,CAAE7F,OAAQ,SAAU+L,MAAM,EAAM1E,OAAQxM,OAAOI,UAAYA,GAAY,CACvEA,SAAUA,K,eCPZ,IAAI4K,EAAI,EAAQ,MACZ1K,EAAS,EAAQ,MAKrB0K,EAAE,CAAE7F,OAAQ,SAAU+L,MAAM,EAAM1E,OAAQnM,OAAOC,SAAWA,GAAU,CACpEA,OAAQA,K,eCPV,IAAI0K,EAAI,EAAQ,MACZsY,EAAW,gBAIftY,EAAE,CAAE7F,OAAQ,SAAU+L,MAAM,GAAQ,CAClC3Q,QAAS,SAAiBmC,GACxB,OAAO4gB,EAAS5gB,O,eCPZ,EAAQ,KAKhBsI,CAAE,CAAE7F,OAAQ,SAAU+L,MAAM,GAAQ,CAClC1Q,eALmB,EAAQ,S,eCD7B,IAAI0G,EAAwB,EAAQ,MAChCgE,EAAW,EAAQ,MACnBlE,EAAW,EAAQ,MAIlBE,GACHgE,EAAS7K,OAAOiB,UAAW,WAAY0F,EAAU,CAAEiX,QAAQ,K,4BCN7D,IAAIjT,EAAI,EAAQ,MACZ/I,EAAO,EAAQ,KACf0P,EAAY,EAAQ,MACpB4R,EAA6B,EAAQ,MACrCC,EAAU,EAAQ,MAClBhb,EAAU,EAAQ,MAItBwC,EAAE,CAAE7F,OAAQ,UAAW+L,MAAM,GAAQ,CACnCuS,WAAY,SAAoBla,GAC9B,IAAIvD,EAAIpD,KACJ8gB,EAAaH,EAA2B/hB,EAAEwE,GAC1CwS,EAAUkL,EAAWlL,QACrBW,EAASuK,EAAWvK,OACpBjW,EAASsgB,GAAQ,WACnB,IAAIG,EAAiBhS,EAAU3L,EAAEwS,SAC7BjJ,EAAS,GACTwQ,EAAU,EACV6D,EAAY,EAChBpb,EAAQe,GAAU,SAAUkO,GAC1B,IAAIlU,EAAQwc,IACR8D,GAAgB,EACpBD,IACA3hB,EAAK0hB,EAAgB3d,EAAGyR,GAASC,MAAK,SAAUhW,GAC1CmiB,IACJA,GAAgB,EAChBtU,EAAOhM,GAAS,CAAEugB,OAAQ,YAAapiB,MAAOA,KAC5CkiB,GAAapL,EAAQjJ,OACtB,SAAUhJ,GACPsd,IACJA,GAAgB,EAChBtU,EAAOhM,GAAS,CAAEugB,OAAQ,WAAYC,OAAQxd,KAC5Cqd,GAAapL,EAAQjJ,YAGzBqU,GAAapL,EAAQjJ,MAGzB,OADIrM,EAAOqD,OAAO4S,EAAOjW,EAAOxB,OACzBgiB,EAAWjM,Y,4BCvCtB,IAAIzM,EAAI,EAAQ,MACZ2G,EAAY,EAAQ,MACpB1B,EAAa,EAAQ,MACrBhO,EAAO,EAAQ,KACfshB,EAA6B,EAAQ,MACrCC,EAAU,EAAQ,MAClBhb,EAAU,EAAQ,MAElBwb,EAAoB,0BAIxBhZ,EAAE,CAAE7F,OAAQ,UAAW+L,MAAM,GAAQ,CACnC+S,IAAK,SAAa1a,GAChB,IAAIvD,EAAIpD,KACJigB,EAAiB5S,EAAW,kBAC5ByT,EAAaH,EAA2B/hB,EAAEwE,GAC1CwS,EAAUkL,EAAWlL,QACrBW,EAASuK,EAAWvK,OACpBjW,EAASsgB,GAAQ,WACnB,IAAIG,EAAiBhS,EAAU3L,EAAEwS,SAC7BiK,EAAS,GACT1C,EAAU,EACV6D,EAAY,EACZM,GAAkB,EACtB1b,EAAQe,GAAU,SAAUkO,GAC1B,IAAIlU,EAAQwc,IACRoE,GAAkB,EACtBP,IACA3hB,EAAK0hB,EAAgB3d,EAAGyR,GAASC,MAAK,SAAUhW,GAC1CyiB,GAAmBD,IACvBA,GAAkB,EAClB1L,EAAQ9W,OACP,SAAU6E,GACP4d,GAAmBD,IACvBC,GAAkB,EAClB1B,EAAOlf,GAASgD,IACdqd,GAAazK,EAAO,IAAI0J,EAAeJ,EAAQuB,aAGnDJ,GAAazK,EAAO,IAAI0J,EAAeJ,EAAQuB,OAGnD,OADI9gB,EAAOqD,OAAO4S,EAAOjW,EAAOxB,OACzBgiB,EAAWjM,Y,4BC3CtB,IAAIzM,EAAI,EAAQ,MACZ6C,EAAU,EAAQ,MAClBuW,EAAgB,EAAQ,MACxBhZ,EAAQ,EAAQ,MAChB6E,EAAa,EAAQ,MACrBtP,EAAa,EAAQ,MACrB0jB,EAAqB,EAAQ,MAC7BV,EAAiB,EAAQ,MACzBzY,EAAW,EAAQ,MAyBvB,GAhBAF,EAAE,CAAE7F,OAAQ,UAAWqK,OAAO,EAAM8U,MAAM,EAAM9X,SAN5B4X,GAAiBhZ,GAAM,WACzCgZ,EAAc9iB,UAAmB,QAAEW,KAAK,CAAEyV,KAAM,eAA+B,mBAKV,CACrE,QAAW,SAAU6M,GACnB,IAAIve,EAAIqe,EAAmBzhB,KAAMqN,EAAW,YACxCuU,EAAa7jB,EAAW4jB,GAC5B,OAAO3hB,KAAK8U,KACV8M,EAAa,SAAU3G,GACrB,OAAO8F,EAAe3d,EAAGue,KAAa7M,MAAK,WAAc,OAAOmG,MAC9D0G,EACJC,EAAa,SAAUC,GACrB,OAAOd,EAAe3d,EAAGue,KAAa7M,MAAK,WAAc,MAAM+M,MAC7DF,OAML1W,GAAWlN,EAAWyjB,GAAgB,CACzC,IAAIpS,EAAS/B,EAAW,WAAW3O,UAAmB,QAClD8iB,EAAc9iB,UAAmB,UAAM0Q,GACzC9G,EAASkZ,EAAc9iB,UAAW,UAAW0Q,EAAQ,CAAEiM,QAAQ,M,4BCpCnE,IA0DIyG,EAAUC,EAAsBC,EAAgBC,EA1DhD7Z,EAAI,EAAQ,MACZ6C,EAAU,EAAQ,MAClBnN,EAAS,EAAQ,MACjBuP,EAAa,EAAQ,MACrBhO,EAAO,EAAQ,KACfmiB,EAAgB,EAAQ,MACxBlZ,EAAW,EAAQ,MACnB5C,EAAc,EAAQ,MACtB9H,EAAiB,EAAQ,MACzB8K,EAAiB,EAAQ,MACzB5C,EAAa,EAAQ,MACrBiJ,EAAY,EAAQ,MACpBhR,EAAa,EAAQ,MACrBoB,EAAW,EAAQ,MACnBwG,EAAa,EAAQ,MACrB6K,EAAgB,EAAQ,MACxB5K,EAAU,EAAQ,MAClB6C,EAA8B,EAAQ,MACtCgZ,EAAqB,EAAQ,MAC7BxL,EAAO,YACPiM,EAAY,EAAQ,MACpBnB,EAAiB,EAAQ,MACzBoB,EAAmB,EAAQ,MAC3BxB,EAA6B,EAAQ,MACrCC,EAAU,EAAQ,MAClB3a,EAAsB,EAAQ,MAC9BoC,EAAW,EAAQ,MACnBhK,EAAkB,EAAQ,IAC1B+jB,EAAa,EAAQ,MACrBjN,EAAU,EAAQ,MAClBe,EAAa,EAAQ,MAErBhT,EAAU7E,EAAgB,WAC1BgkB,EAAU,UAEVpb,EAAmBhB,EAAoB2B,IACvC1B,EAAmBD,EAAoBE,IACvCmc,EAA0Brc,EAAoBI,UAAUgc,GACxDE,EAAyBf,GAAiBA,EAAc9iB,UACxD8jB,EAAqBhB,EACrBiB,EAAmBF,EACnBtkB,EAAYH,EAAOG,UACnB4O,EAAW/O,EAAO+O,SAClBO,EAAUtP,EAAOsP,QACjB4N,EAAuB2F,EAA2B/hB,EAClD8jB,EAA8B1H,EAE9B2H,KAAoB9V,GAAYA,EAAS+V,aAAe9kB,EAAO+kB,eAC/DC,EAAyB/kB,EAAWD,EAAOilB,uBAC3CC,EAAsB,qBAOtBC,IAAc,EAIdjX,GAAS3D,EAASga,GAAS,WAC7B,IAAIa,EAA6B1S,EAAcgS,GAC3CW,EAAyBD,IAA+B9kB,OAAOokB,GAInE,IAAKW,GAAyC,KAAfjN,EAAmB,OAAO,EAEzD,GAAIjL,IAAYwX,EAA0B,QAAG,OAAO,EAIpD,GAAIvM,GAAc,IAAM,cAAc5Q,KAAK4d,GAA6B,OAAO,EAE/E,IAAIrO,EAAU,IAAI2N,GAAmB,SAAU5M,GAAWA,EAAQ,MAC9DwN,EAAc,SAAUpf,GAC1BA,GAAK,eAA6B,gBAKpC,OAHkB6Q,EAAQxR,YAAc,IAC5BH,GAAWkgB,IACvBH,GAAcpO,EAAQC,MAAK,yBAAwCsO,KAG3DD,GAA0Bf,IAAeU,KAG/CO,GAAsBrX,KAAWvD,GAA4B,SAAU9B,GACzE6b,EAAmBc,IAAI3c,GAAiB,OAAE,kBAIxC4c,GAAa,SAAUtkB,GACzB,IAAI6V,EACJ,SAAO3V,EAASF,KAAOlB,EAAW+W,EAAO7V,EAAG6V,QAAQA,GAGlDJ,GAAS,SAAUtN,EAAOoc,GAC5B,IAAIpc,EAAMqc,SAAV,CACArc,EAAMqc,UAAW,EACjB,IAAIC,EAAQtc,EAAMuc,UAClBzB,GAAU,WAKR,IAJA,IAAIpjB,EAAQsI,EAAMtI,MACd8kB,EAlDQ,GAkDHxc,EAAMA,MACXzG,EAAQ,EAEL+iB,EAAMvjB,OAASQ,GAAO,CAC3B,IAKIL,EAAQwU,EAAM+O,EALdC,EAAWJ,EAAM/iB,KACjBojB,EAAUH,EAAKE,EAASF,GAAKE,EAASE,KACtCpO,EAAUkO,EAASlO,QACnBW,EAASuN,EAASvN,OAClBd,EAASqO,EAASrO,OAEtB,IACMsO,GACGH,IA3DC,IA4DAxc,EAAM6c,WAAyBC,GAAkB9c,GACrDA,EAAM6c,UA9DJ,IAgEY,IAAZF,EAAkBzjB,EAASxB,GAEzB2W,GAAQA,EAAOE,QACnBrV,EAASyjB,EAAQjlB,GACb2W,IACFA,EAAOC,OACPmO,GAAS,IAGTvjB,IAAWwjB,EAASjP,QACtB0B,EAAOtY,EAAU,yBACR6W,EAAOyO,GAAWjjB,IAC3BjB,EAAKyV,EAAMxU,EAAQsV,EAASW,GACvBX,EAAQtV,IACViW,EAAOzX,GACd,MAAO6E,GACH8R,IAAWoO,GAAQpO,EAAOC,OAC9Ba,EAAO5S,IAGXyD,EAAMuc,UAAY,GAClBvc,EAAMqc,UAAW,EACbD,IAAapc,EAAM6c,WAAWE,GAAY/c,QAI9Cyb,GAAgB,SAAUnW,EAAMmI,EAASsM,GAC3C,IAAI3D,EAAOuG,EACPpB,IACFnF,EAAQ3Q,EAAS+V,YAAY,UACvB/N,QAAUA,EAChB2I,EAAM2D,OAASA,EACf3D,EAAM4G,UAAU1X,GAAM,GAAO,GAC7B5O,EAAO+kB,cAAcrF,IAChBA,EAAQ,CAAE3I,QAASA,EAASsM,OAAQA,IACtC2B,IAA2BiB,EAAUjmB,EAAO,KAAO4O,IAAQqX,EAAQvG,GAC/D9Q,IAASsW,GAAqBb,EAAiB,8BAA+BhB,IAGrFgD,GAAc,SAAU/c,GAC1B/H,EAAK4W,EAAMnY,GAAQ,WACjB,IAGIwC,EAHAuU,EAAUzN,EAAM+K,OAChBrT,EAAQsI,EAAMtI,MAGlB,GAFmBulB,GAAYjd,KAG7B9G,EAASsgB,GAAQ,WACXzL,EACF/H,EAAQkX,KAAK,qBAAsBxlB,EAAO+V,GACrCgO,GAAcG,EAAqBnO,EAAS/V,MAGrDsI,EAAM6c,UAAY9O,GAAWkP,GAAYjd,GAnH/B,EADF,EAqHJ9G,EAAOqD,OAAO,MAAMrD,EAAOxB,UAKjCulB,GAAc,SAAUjd,GAC1B,OA3HY,IA2HLA,EAAM6c,YAA0B7c,EAAMoO,QAG3C0O,GAAoB,SAAU9c,GAChC/H,EAAK4W,EAAMnY,GAAQ,WACjB,IAAI+W,EAAUzN,EAAM+K,OAChBgD,EACF/H,EAAQkX,KAAK,mBAAoBzP,GAC5BgO,GAvIa,mBAuIoBhO,EAASzN,EAAMtI,WAIvDM,GAAO,SAAUqE,EAAI2D,EAAOmd,GAC9B,OAAO,SAAUzlB,GACf2E,EAAG2D,EAAOtI,EAAOylB,KAIjBC,GAAiB,SAAUpd,EAAOtI,EAAOylB,GACvCnd,EAAMxG,OACVwG,EAAMxG,MAAO,EACT2jB,IAAQnd,EAAQmd,GACpBnd,EAAMtI,MAAQA,EACdsI,EAAMA,MAnJO,EAoJbsN,GAAOtN,GAAO,KAGZqd,GAAkB,SAAUrd,EAAOtI,EAAOylB,GAC5C,IAAInd,EAAMxG,KAAV,CACAwG,EAAMxG,MAAO,EACT2jB,IAAQnd,EAAQmd,GACpB,IACE,GAAInd,EAAM+K,SAAWrT,EAAO,MAAMb,EAAU,oCAC5C,IAAI6W,EAAOyO,GAAWzkB,GAClBgW,EACFoN,GAAU,WACR,IAAI3b,EAAU,CAAE3F,MAAM,GACtB,IACEvB,EAAKyV,EAAMhW,EACTM,GAAKqlB,GAAiBle,EAASa,GAC/BhI,GAAKolB,GAAgBje,EAASa,IAEhC,MAAOzD,GACP6gB,GAAeje,EAAS5C,EAAOyD,QAInCA,EAAMtI,MAAQA,EACdsI,EAAMA,MA7KI,EA8KVsN,GAAOtN,GAAO,IAEhB,MAAOzD,GACP6gB,GAAe,CAAE5jB,MAAM,GAAS+C,EAAOyD,MAK3C,GAAI4E,KAaFyW,GAXAD,EAAqB,SAAiBkC,GACpC/e,EAAW3F,KAAMyiB,GACjB1T,EAAU2V,GACVrlB,EAAKyiB,EAAU9hB,MACf,IAAIoH,EAAQH,EAAiBjH,MAC7B,IACE0kB,EAAStlB,GAAKqlB,GAAiBrd,GAAQhI,GAAKolB,GAAgBpd,IAC5D,MAAOzD,GACP6gB,GAAepd,EAAOzD,MAGYjF,WAEtCojB,EAAW,SAAiB4C,GAC1Bxe,EAAiBlG,KAAM,CACrB4G,KAAMyb,EACNzhB,MAAM,EACN6iB,UAAU,EACVjO,QAAQ,EACRmO,UAAW,GACXM,WAAW,EACX7c,MA9MQ,EA+MRtI,WAAOH,MAGFD,UAAYgH,EAAY+c,EAAkB,CAGjD3N,KAAM,SAAc6P,EAAaC,GAC/B,IAAIxd,EAAQkb,EAAwBtiB,MAChC2jB,EAAYvc,EAAMuc,UAClBG,EAAW9I,EAAqByG,EAAmBzhB,KAAMwiB,IAO7D,OANAsB,EAASF,IAAK7lB,EAAW4mB,IAAeA,EACxCb,EAASE,KAAOjmB,EAAW6mB,IAAeA,EAC1Cd,EAASrO,OAASN,EAAU/H,EAAQqI,YAAS9W,EAC7CyI,EAAMoO,QAAS,EACfmO,EAAUA,EAAUxjB,QAAU2jB,EA7NtB,GA8NJ1c,EAAMA,OAAkBsN,GAAOtN,GAAO,GACnC0c,EAASjP,SAIlB,MAAS,SAAU+P,GACjB,OAAO5kB,KAAK8U,UAAKnW,EAAWimB,MAGhC7C,EAAuB,WACrB,IAAIlN,EAAU,IAAIiN,EACd1a,EAAQH,EAAiB4N,GAC7B7U,KAAK6U,QAAUA,EACf7U,KAAK4V,QAAUxW,GAAKqlB,GAAiBrd,GACrCpH,KAAKuW,OAASnX,GAAKolB,GAAgBpd,IAErCuZ,EAA2B/hB,EAAIoc,EAAuB,SAAU5X,GAC9D,OAAOA,IAAMof,GAAsBpf,IAAM4e,EACrC,IAAID,EAAqB3e,GACzBsf,EAA4Btf,KAG7B6H,GAAWlN,EAAWyjB,IAAkBe,IAA2B9kB,OAAOiB,WAAW,CACxFujB,EAAaM,EAAuBzN,KAE/BmO,KAEH3a,EAASia,EAAwB,QAAQ,SAAcoC,EAAaC,GAClE,IAAIziB,EAAOnC,KACX,OAAO,IAAIwiB,GAAmB,SAAU5M,EAASW,GAC/ClX,EAAK4iB,EAAY9f,EAAMyT,EAASW,MAC/BzB,KAAK6P,EAAaC,KAEpB,CAAEvJ,QAAQ,IAGb/S,EAASia,EAAwB,QAASE,EAAwB,MAAG,CAAEpH,QAAQ,KAIjF,WACSkH,EAAuBlf,YAC9B,MAAOM,IAGL/F,GACFA,EAAe2kB,EAAwBE,GAK7Cra,EAAE,CAAEtK,QAAQ,EAAM+mB,MAAM,EAAMjb,OAAQoC,IAAU,CAC9CnO,QAAS2kB,IAGX9Z,EAAe8Z,EAAoBH,GAAS,GAAO,GACnDvc,EAAWuc,GAEXL,EAAiB3U,EAAWgV,GAG5Bja,EAAE,CAAE7F,OAAQ8f,EAAS/T,MAAM,EAAM1E,OAAQoC,IAAU,CAGjDuK,OAAQ,SAAgBuO,GACtB,IAAIhE,EAAa9F,EAAqBhb,MAEtC,OADAX,EAAKyhB,EAAWvK,YAAQ5X,EAAWmmB,GAC5BhE,EAAWjM,WAItBzM,EAAE,CAAE7F,OAAQ8f,EAAS/T,MAAM,EAAM1E,OAAQqB,GAAWe,IAAU,CAG5D4J,QAAS,SAAiBqF,GACxB,OAAO8F,EAAe9V,GAAWjL,OAASgiB,EAAiBQ,EAAqBxiB,KAAMib,MAI1F7S,EAAE,CAAE7F,OAAQ8f,EAAS/T,MAAM,EAAM1E,OAAQyZ,IAAuB,CAG9DC,IAAK,SAAa3c,GAChB,IAAIvD,EAAIpD,KACJ8gB,EAAa9F,EAAqB5X,GAClCwS,EAAUkL,EAAWlL,QACrBW,EAASuK,EAAWvK,OACpBjW,EAASsgB,GAAQ,WACnB,IAAImE,EAAkBhW,EAAU3L,EAAEwS,SAC9BjJ,EAAS,GACTwQ,EAAU,EACV6D,EAAY,EAChBpb,EAAQe,GAAU,SAAUkO,GAC1B,IAAIlU,EAAQwc,IACR8D,GAAgB,EACpBD,IACA3hB,EAAK0lB,EAAiB3hB,EAAGyR,GAASC,MAAK,SAAUhW,GAC3CmiB,IACJA,GAAgB,EAChBtU,EAAOhM,GAAS7B,IACdkiB,GAAapL,EAAQjJ,MACtB4J,QAEHyK,GAAapL,EAAQjJ,MAGzB,OADIrM,EAAOqD,OAAO4S,EAAOjW,EAAOxB,OACzBgiB,EAAWjM,SAIpBmQ,KAAM,SAAcre,GAClB,IAAIvD,EAAIpD,KACJ8gB,EAAa9F,EAAqB5X,GAClCmT,EAASuK,EAAWvK,OACpBjW,EAASsgB,GAAQ,WACnB,IAAImE,EAAkBhW,EAAU3L,EAAEwS,SAClChQ,EAAQe,GAAU,SAAUkO,GAC1BxV,EAAK0lB,EAAiB3hB,EAAGyR,GAASC,KAAKgM,EAAWlL,QAASW,SAI/D,OADIjW,EAAOqD,OAAO4S,EAAOjW,EAAOxB,OACzBgiB,EAAWjM,Y,4BC1YtB,IAAIgC,EAAS,cACTzS,EAAW,EAAQ,MACnB6B,EAAsB,EAAQ,MAC9BJ,EAAiB,EAAQ,MAEzBof,EAAkB,kBAClB/e,EAAmBD,EAAoBE,IACvCc,EAAmBhB,EAAoBI,UAAU4e,GAIrDpf,EAAezH,OAAQ,UAAU,SAAU8J,GACzChC,EAAiBlG,KAAM,CACrB4G,KAAMqe,EACN/R,OAAQ9O,EAAS8D,GACjBvH,MAAO,OAIR,WACD,IAGIukB,EAHA9d,EAAQH,EAAiBjH,MACzBkT,EAAS9L,EAAM8L,OACfvS,EAAQyG,EAAMzG,MAElB,OAAIA,GAASuS,EAAO/S,OAAe,CAAErB,WAAOH,EAAWiC,MAAM,IAC7DskB,EAAQrO,EAAO3D,EAAQvS,GACvByG,EAAMzG,OAASukB,EAAM/kB,OACd,CAAErB,MAAOomB,EAAOtkB,MAAM,Q,UC5B/B,WACE,IAAIukB,EAAY,IAAI5I,OAAO,iEAAkE,KAE7F,SAAS6I,EAAIC,GAEX,IADA,IAAIC,EAAM,GACDnb,EAAE,EAAGA,EAAEkb,EAAOlb,IACrBmb,IAA2B,OAAjB,EAAE3V,KAAKsP,UAAmB,GAAG7a,SAAS,IAAImhB,UAAU,GAEhE,OAAOD,EAGT,SAASE,EAAKC,GACZ,IAAKA,EAAM,MAAM,IAAIxnB,UAAU,2CAE/B+B,KAAKlB,MAAQ0mB,EAAKE,MAEdD,GAAQA,aAAgBD,EAC1BxlB,KAAKlB,MAAQ2mB,EAAKrhB,WAETqhB,GAAiD,oBAAzChoB,OAAOiB,UAAU0F,SAAS/E,KAAKomB,IAA+BD,EAAKG,OAAOF,KAC3FzlB,KAAKlB,MAAQ2mB,GAGfzlB,KAAK4lB,OAAS,SAASC,GAGrB,OAAOL,EAAKG,OAAOE,IAAU7lB,KAAKlB,OAAS+mB,GAG7C7lB,KAAK8lB,QAAU,WACb,OAAO9lB,KAAKlB,QAAU0mB,EAAKE,OAG7B1lB,KAAKoE,SAAW,WACd,OAAOpE,KAAKlB,OAGdkB,KAAK+lB,OAAS,WACZ,OAAO/lB,KAAKlB,OAIhB0mB,EAAKE,MAAQ,uCAEbF,EAAKG,OAAS,SAAS7mB,GACrB,OAAOA,IAAUA,aAAiB0mB,GAAQL,EAAU7f,KAAKxG,EAAMsF,cAGjEohB,EAAKlnB,OAAS,WACZ,OAAO,IAAIknB,EAAK,CAACJ,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAIpgB,KAAK,OAGhEwgB,EAAKQ,IAAM,WACT,MAAO,CAACZ,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAIpgB,KAAK,MAGpBlI,EAAOC,QACxCD,EAAOC,QAAUyoB,EAEO,oBAAVxY,SACdA,OAAOwY,KAAOA,GA5DlB,I,eCAA,IAAIS,EAAK,EAAQ,MACbC,EAAK,EAAQ,MAEbC,EAAOD,EACXC,EAAKF,GAAKA,EACVE,EAAKD,GAAKA,EAEVppB,EAAOC,QAAUopB,G,SCFjB,IADA,IAAIC,EAAY,GACPjc,EAAI,EAAGA,EAAI,MAAOA,EACzBic,EAAUjc,IAAMA,EAAI,KAAO/F,SAAS,IAAIiiB,OAAO,GAmBjDvpB,EAAOC,QAhBP,SAAqBupB,EAAKC,GACxB,IAAIpc,EAAIoc,GAAU,EACdC,EAAMJ,EAEV,MAAO,CACLI,EAAIF,EAAInc,MAAOqc,EAAIF,EAAInc,MACvBqc,EAAIF,EAAInc,MAAOqc,EAAIF,EAAInc,MAAO,IAC9Bqc,EAAIF,EAAInc,MAAOqc,EAAIF,EAAInc,MAAO,IAC9Bqc,EAAIF,EAAInc,MAAOqc,EAAIF,EAAInc,MAAO,IAC9Bqc,EAAIF,EAAInc,MAAOqc,EAAIF,EAAInc,MAAO,IAC9Bqc,EAAIF,EAAInc,MAAOqc,EAAIF,EAAInc,MACvBqc,EAAIF,EAAInc,MAAOqc,EAAIF,EAAInc,MACvBqc,EAAIF,EAAInc,MAAOqc,EAAIF,EAAInc,OACtBnF,KAAK,M,SCfV,IAAIyhB,EAAqC,oBAAZ,QAA2BC,OAAOD,iBAAmBC,OAAOD,gBAAgBrnB,KAAKsnB,SACnE,oBAAd,UAAuE,mBAAnC1Z,OAAO2Z,SAASF,iBAAiCE,SAASF,gBAAgBrnB,KAAKunB,UAEhJ,GAAIF,EAAiB,CAEnB,IAAIG,EAAQ,IAAIC,WAAW,IAE3B/pB,EAAOC,QAAU,WAEf,OADA0pB,EAAgBG,GACTA,OAEJ,CAKL,IAAIE,EAAO,IAAI7pB,MAAM,IAErBH,EAAOC,QAAU,WACf,IAAK,IAAW+nB,EAAP3a,EAAI,EAAMA,EAAI,GAAIA,IACN,IAAV,EAAJA,KAAiB2a,EAAoB,WAAhBnV,KAAKsP,UAC/B6H,EAAK3c,GAAK2a,MAAY,EAAJ3a,IAAa,GAAK,IAGtC,OAAO2c,K,eC/BX,IAQIC,EACAC,EATAC,EAAM,EAAQ,MACdC,EAAc,EAAQ,MAWtBC,EAAa,EACbC,EAAa,EA+FjBtqB,EAAOC,QA5FP,SAAYgR,EAASuY,EAAKC,GACxB,IAAIpc,EAAImc,GAAOC,GAAU,EACrBvW,EAAIsW,GAAO,GAGX1R,GADJ7G,EAAUA,GAAW,IACF6G,MAAQmS,EACvBM,OAAgC1oB,IAArBoP,EAAQsZ,SAAyBtZ,EAAQsZ,SAAWL,EAKnE,GAAY,MAARpS,GAA4B,MAAZyS,EAAkB,CACpC,IAAIC,EAAYL,IACJ,MAARrS,IAEFA,EAAOmS,EAAU,CACA,EAAfO,EAAU,GACVA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,KAGtD,MAAZD,IAEFA,EAAWL,EAAiD,OAApCM,EAAU,IAAM,EAAIA,EAAU,KAQ1D,IAAIC,OAA0B5oB,IAAlBoP,EAAQwZ,MAAsBxZ,EAAQwZ,OAAQ,IAAIC,MAAOC,UAIjEC,OAA0B/oB,IAAlBoP,EAAQ2Z,MAAsB3Z,EAAQ2Z,MAAQN,EAAa,EAGnEO,EAAMJ,EAAQJ,GAAeO,EAAQN,GAAY,IAcrD,GAXIO,EAAK,QAA0BhpB,IAArBoP,EAAQsZ,WACpBA,EAAWA,EAAW,EAAI,QAKvBM,EAAK,GAAKJ,EAAQJ,SAAiCxoB,IAAlBoP,EAAQ2Z,QAC5CA,EAAQ,GAINA,GAAS,IACX,MAAM,IAAIxiB,MAAM,mDAGlBiiB,EAAaI,EACbH,EAAaM,EACbV,EAAYK,EAMZ,IAAIO,GAA4B,KAAb,WAHnBL,GAAS,cAG+BG,GAAS,WACjD1X,EAAE7F,KAAOyd,IAAO,GAAK,IACrB5X,EAAE7F,KAAOyd,IAAO,GAAK,IACrB5X,EAAE7F,KAAOyd,IAAO,EAAI,IACpB5X,EAAE7F,KAAY,IAALyd,EAGT,IAAIC,EAAON,EAAQ,WAAc,IAAS,UAC1CvX,EAAE7F,KAAO0d,IAAQ,EAAI,IACrB7X,EAAE7F,KAAa,IAAN0d,EAGT7X,EAAE7F,KAAO0d,IAAQ,GAAK,GAAM,GAC5B7X,EAAE7F,KAAO0d,IAAQ,GAAK,IAGtB7X,EAAE7F,KAAOkd,IAAa,EAAI,IAG1BrX,EAAE7F,KAAkB,IAAXkd,EAGT,IAAK,IAAIS,EAAI,EAAGA,EAAI,IAAKA,EACvB9X,EAAE7F,EAAI2d,GAAKlT,EAAKkT,GAGlB,OAAOxB,GAAYY,EAAYlX,K,eCzGjC,IAAIiX,EAAM,EAAQ,MACdC,EAAc,EAAQ,MA2B1BpqB,EAAOC,QAzBP,SAAYgR,EAASuY,EAAKC,GACxB,IAAIpc,EAAImc,GAAOC,GAAU,EAEF,iBAAb,IACRD,EAAkB,WAAZvY,EAAuB,IAAI9Q,MAAM,IAAM,KAC7C8Q,EAAU,MAIZ,IAAI+Y,GAFJ/Y,EAAUA,GAAW,IAEFkR,SAAWlR,EAAQkZ,KAAOA,KAO7C,GAJAH,EAAK,GAAgB,GAAVA,EAAK,GAAa,GAC7BA,EAAK,GAAgB,GAAVA,EAAK,GAAa,IAGzBR,EACF,IAAK,IAAIyB,EAAK,EAAGA,EAAK,KAAMA,EAC1BzB,EAAInc,EAAI4d,GAAMjB,EAAKiB,GAIvB,OAAOzB,GAAOY,EAAYJ,K,kCCxB5B,IACQkB,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MAEnBC,EAA6C,SAAUC,GAEvD,SAASD,EAA4BE,GACjC,IAAIC,EAAQF,EAAOlpB,KAAKW,KAAMqoB,EAASK,iBAAiBC,yBAA2B3oB,KAEnF,OADAyoB,EAAMD,8BAAgCA,EAC/BC,EASX,OAbAR,EAAUK,EAA6BC,GAMvC9qB,OAAOgI,eAAe6iB,EAA4B5pB,UAAW,+BAAgC,CACzFkJ,IAAK,WACD,OAAO5H,KAAKwoB,+BAEhB3d,YAAY,EACZhM,cAAc,IAEXypB,EAdqC,CAD3B,EAAQ,MAgBZM,cACjB7rB,EAAQurB,4BAA8BA,G,kCChCtC,IACQN,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCC,EAAkB,EAAQ,MAE1BC,EAAoC,SAAUR,GAE9C,SAASQ,EAAmBC,EAAWC,EAAYC,GAC/C,IAAIT,EAAQF,EAAOlpB,KAAKW,KAAM6oB,EAA2BH,iBAAiBS,cAAeH,IAAchpB,KAGvG,OAFAyoB,EAAMQ,WAAaA,EACnBR,EAAMS,SAAWA,EACVT,EA+BX,OApCAR,EAAUc,EAAoBR,GAO9B9qB,OAAOgI,eAAesjB,EAAmBrqB,UAAW,YAAa,CAC7DkJ,IAAK,WACD,OAAO5H,KAAKipB,YAEhBpe,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesjB,EAAmBrqB,UAAW,UAAW,CAC3DkJ,IAAK,WACD,OAAO5H,KAAKkpB,UAEhBre,YAAY,EACZhM,cAAc,IAElBkqB,EAAmBrqB,UAAU0qB,eAAiB,WAC1C,IAAIX,EAAQzoB,KACZ,OAAOA,KAAKqpB,WAAWC,kBAAkBxU,MAAK,SAAUyU,GAEpD,IAAIC,EAAgBf,EAAMgB,QACpBF,EAAQ1mB,MAAK,SAAUH,GAAU,OAAOA,EAAO+mB,UAAYhB,EAAMgB,UAAYhB,GAC7Ec,EAAQ1mB,MAAK,SAAUH,GAAU,OAAOA,EAAOgnB,YAAcjB,EAAMiB,YAAcjB,GACvF,IAAKe,EAGD,MAAM,IAAIV,EAAgBa,aAAad,EAA2Be,WAAWC,cAAe,uBAAyBpB,EAAMQ,YAE/H,OAAOO,MAGRT,EArC4B,CADT,EAAQ,KAuCZe,uBAC1B/sB,EAAQgsB,mBAAqBA,G,kCCxD7B,IACQf,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MAErCkB,EAAoC,SAAUxB,GAE9C,SAASwB,EAAmBf,GACxB,OAAOT,EAAOlpB,KAAKW,KAAM6oB,EAA2BH,iBAAiBsB,qBAAsBhB,IAAchpB,KAK7G,OAPAioB,EAAU8B,EAAoBxB,GAI9BwB,EAAmBrrB,UAAUurB,cAAgB,WACzC,OAAOjqB,KAAKgpB,UAAUkB,yBAEnBH,EAR4B,CADT,EAAQ,KAUZD,uBAC1B/sB,EAAQgtB,mBAAqBA,G,kCC1B7B,IACQ/B,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCC,EAAkB,EAAQ,MAC1BqB,EAAc,EAAQ,MACtBC,EAAwB,EAAQ,MAEhCC,EAAuC,SAAU9B,GAEjD,SAAS8B,EAAsBC,EAAkBC,GAC7C,IAAI9B,EAAQF,EAAOlpB,KAAKW,KAAM6oB,EAA2BH,iBAAiB8B,iBAAkBD,IAAUvqB,KAEtG,OADAyoB,EAAM6B,iBAAmBA,EAClB7B,EAaX,OAjBAR,EAAUoC,EAAuB9B,GAMjC8B,EAAsB3rB,UAAU+rB,kBAAoB,WAChD,IAAIhC,EAAQzoB,KAGZ,OADc8oB,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,sBAC7FC,oCAAoC7qB,KAAKsqB,kBAAkBxV,MAAK,SAAUgW,GACrF,QAAsBnsB,IAAlBmsB,EACA,MAAM,IAAIhC,EAAgBa,aAAad,EAA2Be,WAAWmB,iBAAkB,0BAA4BtC,EAAM6B,kBAErI,OAAO,IAAIH,EAAYa,UAAUF,EAAerC,EAAM8B,WAGvDF,EAlB+B,CADhB,EAAQ,MAoBZY,mBACtBluB,EAAQstB,sBAAwBA,G,0BCvChC5sB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI8pB,EAA8B,WAC9B,SAASA,EAAahiB,GAClB5G,KAAKkrB,MAAQtkB,EASjB,OAPAnJ,OAAOgI,eAAemjB,EAAalqB,UAAW,OAAQ,CAClDkJ,IAAK,WACD,OAAO5H,KAAKkrB,OAEhBrgB,YAAY,EACZhM,cAAc,IAEX+pB,EAXsB,GAajC7rB,EAAQ6rB,aAAeA,G,kCCdvB,IACQZ,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IACImsB,EAAmC,SAAU1C,GAE7C,SAAS0C,EAAkBrkB,EAAM2jB,GAC7B,IAAI9B,EAAQF,EAAOlpB,KAAKW,KAAM4G,IAAS5G,KAEvC,OADAyoB,EAAM0C,OAASZ,EACR9B,EASX,OAbAR,EAAUgD,EAAmB1C,GAM7B9qB,OAAOgI,eAAewlB,EAAkBvsB,UAAW,QAAS,CACxDkJ,IAAK,WACD,OAAO5H,KAAKmrB,QAEhBtgB,YAAY,EACZhM,cAAc,IAEXosB,EAd2B,CADjB,EAAQ,MAgBZrC,cACjB7rB,EAAQkuB,kBAAoBA,G,iCC/B5B,IACQjD,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IACIgrB,EAAuC,SAAUvB,GAEjD,SAASuB,EAAsBljB,EAAMyiB,GACjC,IAAIZ,EAAQF,EAAOlpB,KAAKW,KAAM4G,EAAMyiB,IAAerpB,KAEnD,OADAyoB,EAAMY,WAAaA,EACZZ,EASX,OAbAR,EAAU6B,EAAuBvB,GAMjC9qB,OAAOgI,eAAeqkB,EAAsBprB,UAAW,YAAa,CAChEkJ,IAAK,WACD,OAAO5H,KAAKqpB,YAEhBxe,YAAY,EACZhM,cAAc,IAEXirB,EAd+B,CADhB,EAAQ,MAgBZmB,mBACtBluB,EAAQ+sB,sBAAwBA,G,kCC/BhC,IACQ9B,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MAEnB+C,EAAgD,SAAU7C,GAE1D,SAAS6C,EAA+BC,GACpC,IAAI5C,EAAQF,EAAOlpB,KAAKW,KAAMqoB,EAASK,iBAAiB4C,4BAA8BtrB,KAEtF,OADAyoB,EAAM4C,YAAcA,EACb5C,EASX,OAbAR,EAAUmD,EAAgC7C,GAM1C9qB,OAAOgI,eAAe2lB,EAA+B1sB,UAAW,aAAc,CAC1EkJ,IAAK,WACD,OAAO5H,KAAKqrB,aAEhBxgB,YAAY,EACZhM,cAAc,IAEXusB,EAdwC,CAD9B,EAAQ,MAgBZxC,cACjB7rB,EAAQquB,+BAAiCA,G,0BChCzC3tB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD/B,EAAQwuB,yBAA2B,cACnCxuB,EAAQyuB,+BAAiC,sBACzCzuB,EAAQ0uB,2BAA6B,mBACrC1uB,EAAQ2uB,iCAAmC,0BAC3C3uB,EAAQ4uB,+BAAiC,uBACzC5uB,EAAQ6uB,qCAAuC,8BAC/C7uB,EAAQ8uB,4BAA8B,oBACtC9uB,EAAQ+uB,6BAA+B,qBACvC/uB,EAAQgvB,6BAA+B,CACnChvB,EAAQ0uB,2BACR1uB,EAAQ2uB,iCACR3uB,EAAQ4uB,+BACR5uB,EAAQ6uB,qCACR7uB,EAAQ8uB,4BACR9uB,EAAQ+uB,+B,0BCfZruB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIktB,EAAiC,WACjC,SAASA,EAAgBC,EAASC,EAASC,GACvCnsB,KAAKisB,QAAUA,EACfjsB,KAAKksB,QAAUA,EACflsB,KAAKmsB,YAAcA,EAuBvB,OArBA1uB,OAAOgI,eAAeumB,EAAgBttB,UAAW,SAAU,CACvDkJ,IAAK,WACD,OAAO5H,KAAKisB,SAEhBphB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeumB,EAAgBttB,UAAW,SAAU,CACvDkJ,IAAK,WACD,OAAO5H,KAAKksB,SAEhBrhB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeumB,EAAgBttB,UAAW,aAAc,CAC3DkJ,IAAK,WACD,OAAO5H,KAAKmsB,aAEhBthB,YAAY,EACZhM,cAAc,IAEXmtB,EA3ByB,GA6BpCjvB,EAAQivB,gBAAkBA,G,kCC9B1B,IACQhE,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIgqB,EAAkB,EAAQ,MAC1BsB,EAAwB,EAAQ,MAChCgC,EAAuC,SAAU7D,GAEjD,SAAS6D,IACL,OAAkB,OAAX7D,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAqB/D,OAvBAioB,EAAUmE,EAAuB7D,GAIjC6D,EAAsB1tB,UAAU2tB,uBAAyB,WACrD,IAAI5D,EAAQzoB,KAEZ,OADc8oB,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,uBAC7FyB,yBAAyBvX,MAAK,SAAUxU,GACnD,IAAIgsB,EAAahsB,EACbisB,EAAc,GAKlB,OAHA9uB,OAAOkP,OAAO2f,EAAWC,aAAa/pB,SAAQ,SAAUgqB,GACpDD,EAAY9qB,KAAKgnB,EAAMgE,yBAAyBD,OAE7CD,MAGfH,EAAsB1tB,UAAU+tB,yBAA2B,SAAUC,GACjE,IAAIC,EAAiB,IAAI7D,EAAgB8D,eAAeF,EAAgBtC,EAAsBO,sBAC1FkC,EAAa,IAAI/D,EAAgBgE,WAAWH,GAEhD,OADAA,EAAeI,+BAA+BF,GACvCA,GAEJT,EAxB+B,CAyBxCtD,EAAgBkE,cAClBjwB,EAAQqvB,sBAAwBA,G,kCC1ChC,IAAIa,EAAkBjtB,MAAQA,KAAKitB,gBAAmB,WAClD,IAAK,IAAIC,EAAI,EAAG/iB,EAAI,EAAGgjB,EAAKjtB,UAAUC,OAAQgK,EAAIgjB,EAAIhjB,IAAK+iB,GAAKhtB,UAAUiK,GAAGhK,OACxE,IAAI2kB,EAAI7nB,MAAMiwB,GAAIE,EAAI,EAA3B,IAA8BjjB,EAAI,EAAGA,EAAIgjB,EAAIhjB,IACzC,IAAK,IAAI4F,EAAI7P,UAAUiK,GAAI2N,EAAI,EAAGuV,EAAKtd,EAAE5P,OAAQ2X,EAAIuV,EAAIvV,IAAKsV,IAC1DtI,EAAEsI,GAAKrd,EAAE+H,GACjB,OAAOgN,GAEXrnB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCxE,EAAkB,EAAQ,MAC1ByE,EAAc,EAAQ,MACtBC,EAAa,EAAQ,MACrBC,EAAqB,EAAQ,MAC7BC,EAAgB,EAAQ,MACxBC,EAAa,EAAQ,MACrBC,EAAO,EAAQ,MACfC,EAAkC,EAAQ,MAC1CzD,EAAwB,EAAQ,MAChC0D,EAAgC,EAAQ,MACxCC,EAA0B,EAAQ,MAClCC,EAAsC,EAAQ,MAC9CC,EAAiB,EAAQ,MACzBC,EAAiC,EAAQ,MACzCC,EAAW,EAAQ,MACnBC,EAAgC,WAChC,SAASA,KAuQT,OArQAA,EAAe1vB,UAAU2vB,gBAAkB,SAAUC,EAAmBC,GACpE,IAAI9F,EAAQzoB,KA+BZ,OA9BKA,KAAKwuB,yBACNxuB,KAAKwuB,uBAAyB,IAAI3wB,SAAQ,SAAU+X,EAASW,GACzD,IAAIkY,EACAC,EAAc,CAAEC,QAAS7F,EAAgB8F,WAAWC,SAASF,SAEjE,GAAIX,EAAoCc,kCAAkCC,+BAA+BL,GAGjE,QAAnCD,EAD8BT,EAAoCc,kCAAkCE,4BAA4BN,UAC9E,IAAPD,GAAyBA,EAAG3Z,MAAK,SAAUma,GAAqB,OAAOxG,EAAMyG,qBAAqBD,EAAmBX,EAAmBC,MAA0BzZ,MAAK,SAAUqa,GACzNvZ,EAAQuZ,MACTC,OAAM,SAAUzrB,GACf4S,EAAO5S,UAGV,CAED,IAAI0rB,EAAiC5G,EAAMyG,qBAAqB9vB,KAAKqpB,GACrEK,EAAgBwG,sBAAsBtiB,OAAQsgB,EAA2BiC,0BAA2Bb,GAC/F5Z,MAAK,SAAU0a,GAChB,OAAOH,EAA+BG,EAASlB,EAAmBC,MAEjEzZ,MAAK,SAAUqa,GAChBvZ,EAAQuZ,MAEPC,OAAM,SAAUzrB,GACjB4S,EAAO5S,WAKhB3D,KAAKwuB,wBAEhBJ,EAAe1vB,UAAU+wB,oBAAsB,SAAUC,GAErD,OADiB5G,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,eAC7F6E,oBAAoBC,IAE1CtB,EAAe1vB,UAAUixB,qBAAuB,SAAUC,GAEtD,OADgB9G,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,aAC7F+E,qBAAqBC,EAAqB5vB,KAAK6vB,kBAEpEzB,EAAe1vB,UAAUwwB,qBAAuB,SAAUD,EAAmBX,EAAmBwB,GAC5F,IAAIrH,EAAQzoB,KACR+vB,EAAad,EAAkB3B,EAA2BiC,2BAE9D1B,EAAgCmC,yCAAyCD,GAEzE,IAAIE,EAAwBnH,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,yBACtHsF,EAAkBJ,EAAuBryB,OAAOwM,KAAK6lB,GAAwB,GACjF,OAAOG,EAAsBE,mCAAmC7B,EAAmB4B,GAAiBpb,MAAK,SAAUxU,GAC/G,IAAKA,EAAO8vB,kBAAkBC,QAAQC,cAClC,MAAM,IAAIxH,EAAgBa,aAAad,EAA2Be,WAAW2G,cAAe,2CAIhG,IAAIC,EAAkBlwB,EAAOmwB,qBAAqBD,gBAC5ClwB,EAAOmwB,qBAAqBD,gBAC5B,CAAEE,MAAO,EAAGC,MAAO,EAAGC,IAAK,GA2BjC,OAzBI9H,EAAgB+H,+BAA+BC,sBAAsBN,KACrET,EAAa,IAAIjH,EAAgB+H,+BAA+Bd,EAAYS,IAIhF1H,EAAgBiI,0BAA0BhB,EAAY3F,EAAsBO,qBAAsB6F,GAClG3C,EAAgCmD,8BAA8BjB,GAC9DtH,EAAMwI,iBAAmBxI,EAAMyI,2BAA2B5wB,EAAO6wB,uBAAwB7wB,EAAO8vB,kBAAkBC,QAAQC,eAC1H7H,EAAM2I,YAAc,IAAI1D,EAAc2D,YAAY/wB,EAAOmwB,sBACzDhI,EAAM6I,SAAW7I,EAAM8I,mBAAmBjxB,EAAOkxB,uBACjD/I,EAAMgJ,GAAK,IAAI7D,EAAK8D,GAAG,IAAIvD,EAASwD,QACpClJ,EAAMmJ,SAAW,IAAIpE,EAAWqE,SAAS,IAAI9D,EAAwB3B,uBACrE3D,EAAMoH,gBAAkBvvB,EAAO6wB,uBAAuBtB,gBAClDvvB,EAAOmwB,qBAAqBqB,qBAC5BrJ,EAAMsJ,uBAAuBhC,EAAYzvB,EAAOmwB,qBAAqBqB,oBACrErJ,EAAMuJ,mBAAmB1xB,EAAOmwB,qBAAqBqB,qBAIzDrJ,EAAMwJ,+BAA+BnC,GAErCrH,EAAMyJ,iDAAiDnC,GAIhDzvB,EAAO6xB,2BAGtB/D,EAAe1vB,UAAUszB,mBAAqB,SAAUI,GACpD,IAAI3J,EAAQzoB,KAMZ,GALKA,KAAKqyB,gBACNryB,KAAKqyB,cAAgBxlB,SAASE,cAAc,SAC5C/M,KAAKqyB,cAAcphB,GAAK,+BACxBpE,SAAS4H,KAAK2E,YAAYpZ,KAAKqyB,gBAE9BryB,KAAKqyB,cAAc9H,OAAU6H,EAAlC,CAIA,IADA,IAAIE,EAAatyB,KAAKqyB,cAAc9H,MAC7B+H,EAAWC,SAASpyB,OAAS,GAChCmyB,EAAWE,WAAWF,EAAWC,SAASpyB,OAAS,GAEvDiyB,EAAgBK,iBAAiBhwB,KAAI,SAAUiwB,GAC3CjK,EAAMkK,iCAAiCD,EAAwBJ,QAGvElE,EAAe1vB,UAAUi0B,iCAAmC,SAAUD,EAAwBJ,GAC1F,IAAIM,EAAY,GACZC,EAAgBH,EAAuBG,cACvCA,EAAcC,aACdF,GAAa,gBAAkBC,EAAcC,WAAW1uB,WAAa,MAErEyuB,EAAcE,WACdH,GAAa,cAAgBC,EAAcE,SAAS3uB,WAAa,MAEjEyuB,EAAcG,aACdJ,GAAa,gBAAkBC,EAAcG,WAAW5uB,WAAa,MAErEyuB,EAAcI,YACdL,GAAa,eAAiBC,EAAcI,UAAU7uB,WAAa,MAEnEyuB,EAAcK,iBACdN,GAAa,oBAAsBC,EAAcK,eAAe9uB,WAAa,MAE7EyuB,EAAcM,QACdP,GAAa,UAAYC,EAAcM,MAAQ,MAEnD,IACIC,EADW,IAAMV,EAAuBW,aACtB,MAAQT,EAAY,KAC1CN,EAAWgB,WAAWF,EAAMd,EAAWC,SAASpyB,SAEpDiuB,EAAe1vB,UAAUwzB,iDAAmD,SAAUnC,GAClF,IAAItH,EAAQzoB,KACc8oB,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,wBAGpG2I,gBAAgBjG,EAA2BkG,eAAelI,2BAA2B,WAAc,OAAO,KAAS,SAAUmI,GACzIA,IACAhL,EAAMsJ,uBAAuBhC,EAAY0D,GACzChL,EAAMuJ,mBAAmByB,QAIrCrF,EAAe1vB,UAAUqzB,uBAAyB,SAAUhC,EAAY+B,GACpE,IAAIrD,EACAhG,EAAQzoB,KACR0zB,EAAYzG,EAAea,EAA8B/B,6BAA8BmC,EAA+ByF,2BAM1H,GALA7B,EAAmBW,iBAAiBjwB,SAAQ,SAAUoxB,GAC9CA,EAAgBf,cAAcC,YAC9BY,EAAUjyB,KAAKmyB,EAAgBf,cAAcC,eAGjDY,EAAUvzB,OAAS,EAAG,CACtB,IAAI0zB,IAAcpF,EAAK,IAAOnB,EAA2BwG,YAAYC,mBAAqBL,EAAWjF,GACrGsB,EACKiE,QAAQ1G,EAA2B2G,OAAOC,SAAUL,GACpD/e,MAAK,SAAUqf,GAChB1L,EAAM2L,UAAUD,EAAS7zB,WAExB8uB,UAGbhB,EAAe1vB,UAAU01B,UAAY,SAAUC,GAC3C,IAAI5L,EAAQzoB,KACZq0B,EAAM7xB,SAAQ,SAAU8xB,GAChBpG,EAA+ByF,0BAA0BvyB,SAASkzB,EAAgBC,UAClF9L,EAAM+L,iBAAiBF,GAElBxG,EAA8B/B,6BAA6B3qB,SAASkzB,EAAgBC,UACzF9L,EAAMgM,oBAAoBH,GAG1BznB,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASJ,EAAgBC,SAAUD,EAAgBK,qBAItFvG,EAAe1vB,UAAUwyB,2BAA6B,SAAU0D,EAAMC,GAElE,IAAIC,EAAgB,IAAIhM,EAAgBiM,cAAcH,EAAKloB,KAAMmc,EAA2BmM,UAAUC,UAAW,CAAEC,MAAON,EAAK7tB,KAAKouB,EAAGC,OAAQR,EAAK7tB,KAAKsuB,QAAK12B,GAAW,GACrK22B,EAAgB,IAAIxM,EAAgByM,cAAcT,EAAeF,EAAKY,MAAOX,EAAWzK,EAAsBO,qBAAsB,MACpI8K,EAAY,IAAIlI,EAAY0H,UAAUK,GAC1C,OAAO,IAAI7H,EAAmBiI,iBAAiBD,IAEnDrH,EAAe1vB,UAAU6yB,mBAAqB,SAAUoE,GACpD,IAAIC,EAAe,IAAI3H,EAAe4H,aAAaF,GACnD,OAAO,IAAIhI,EAAWmI,SAASF,IAEnCxH,EAAe1vB,UAAUuzB,+BAAiC,SAAUnC,GACtChH,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,wBAGpG2I,gBAAgBjG,EAA2BkG,eAAeuC,kBAAkB,WAG5F,OAAO,KACR,SAAUvY,GAET,GAAIsS,EAAsB,CACtB,IAAKA,EAAqBtS,EAAMvM,IAC5B,MAAM,IAAI6X,EAAgBa,aAAad,EAA2Be,WAAW2G,cAAe,mDAAqD/S,EAAMvM,IAE3J6e,EAAqBtS,EAAMvM,WAIvCmd,EAAe1vB,UAAU81B,iBAAmB,SAAUF,GAClD,OAAQA,EAAgBC,UACpB,KAAKrG,EAA+B8H,wBAChCnpB,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+B+H,0BAA2B3B,EAAgBK,eAAgB,CAAEuB,OAAQ,SAAUhd,MAAO,YACrJ,MACJ,KAAKgV,EAA+BiI,yBAChCtpB,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+BkI,2BAA4B9B,EAAgBK,eAAgB,CAAEuB,OAAQ,SAAUhd,MAAO,YACtJ,MACJ,KAAKgV,EAA+BmI,2BAChCxpB,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+BoI,6BAA8BhC,EAAgBK,eAAgB,CAAEuB,OAAQ,SAAUhd,MAAO,YACxJ,MACJ,KAAKgV,EAA+BqI,4BAChC1pB,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+BsI,8BAA+BlC,EAAgBK,eAAgB,CAAEuB,OAAQ,SAAUhd,MAAO,YACzJrM,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+BoI,6BAA8BhC,EAAgBK,eAAgB,CAAEuB,OAAQ,OAAQhd,MAAO,YACtJ,MACJ,KAAKgV,EAA+BuI,wBAChC5pB,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+BwI,0BAA2BpC,EAAgBK,eAAgB,CAAEuB,OAAQ,SAAUhd,MAAO,YACrJrM,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+BwI,0BAA2BpC,EAAgBK,eAAgB,CAAEuB,OAAQ,OAAQhd,MAAO,YACnJrM,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+ByI,4BAA6BrC,EAAgBK,eAAgB,CAAEuB,OAAQ,OAAQhd,MAAO,YACrJrM,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+BsI,8BAA+BlC,EAAgBK,eAAgB,CAAEuB,OAAQ,OAAQhd,MAAO,YACvJ,MACJ,KAAKgV,EAA+B0I,0BAChC/pB,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+ByI,4BAA6BrC,EAAgBK,eAAgB,CAAEuB,OAAQ,SAAUhd,MAAO,YACvJrM,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+BkI,2BAA4B9B,EAAgBK,eAAgB,CAAEuB,OAAQ,OAAQhd,MAAO,YACpJrM,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAASxG,EAA+B+H,0BAA2B3B,EAAgBK,eAAgB,CAAEuB,OAAQ,OAAQhd,MAAO,YACnJ,MACJ,QACI,MAAM,IAAI4P,EAAgBa,aAAad,EAA2Be,WAAW2G,cAAe,wCAA0C+D,EAAgBC,SAAW,QAG7KnG,EAAe1vB,UAAU+1B,oBAAsB,SAAUH,GACrD,OAAQA,EAAgBC,UACpB,KAAKzG,EAA8BrC,2BAC/B5e,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAAS5G,EAA8BvC,yBAA0B+I,EAAgBK,eAAgB,CAAEuB,OAAQ,SAAUhd,MAAO,YACnJrM,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAAS5G,EAA8BtC,+BAAgC8I,EAAgBK,eAAgB,CAAEuB,OAAQ,MAAOhd,MAAO,YACtJ,MACJ,KAAK4U,EAA8BjC,4BAC/Bhf,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAAS5G,EAA8BvC,yBAA0B+I,EAAgBK,eAAgB,CAAEuB,OAAQ,MAAOhd,MAAO,YAChJ,MACJ,KAAK4U,EAA8BhC,6BAC/Bjf,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAAS5G,EAA8BvC,yBAA0B+I,EAAgBK,eAAgB,CAAEuB,OAAQ,OAAQhd,MAAO,YACjJrM,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAAS5G,EAA8BtC,+BAAgC8I,EAAgBK,eAAgB,CAAEuB,OAAQ,OAAQhd,MAAO,YACvJ,MACJ,KAAK4U,EAA8BnC,+BAC/B9e,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAAS5G,EAA8BtC,+BAAgC8I,EAAgBK,eAAgB,CAAEuB,OAAQ,SAAUhd,MAAO,YACzJ,MACJ,KAAK4U,EAA8BpC,iCAC/B7e,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAAS5G,EAA8BvC,yBAA0B+I,EAAgBK,eAAgB,CAAEzb,MAAO,YACjI,MACJ,KAAK4U,EAA8BlC,qCAC/B/e,SAASwnB,MAAMxsB,IAAI,IAAI6sB,SAAS5G,EAA8BtC,+BAAgC8I,EAAgBK,eAAgB,CAAEzb,MAAO,YACvI,MACJ,QACI,MAAM,IAAI4P,EAAgBa,aAAad,EAA2Be,WAAW2G,cAAe,wCAA0C+D,EAAgBC,SAAW,QAGtKnG,EAxQwB,GA0QnCrxB,EAAQqxB,eAAiBA,G,4BCnSzB3wB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIwuB,EAA6B,EAAQ,OAazC,SAAWwB,GAIP,SAASE,EAA4BjhB,GACjC,IAAI0gB,EAeJ,OAdM1gB,QAAsC,IAApBA,EAAQ4gB,SAA6B3hB,OAAO6pB,iBAKvC,QAAlBpI,EAAK1gB,SAA4B,IAAP0gB,OAAgB,EAASA,EAAGE,UAAY3hB,OAAO8pB,6BAChF9pB,OAAO+pB,2BACFjiB,MAAK,SAAUma,GACCA,EAAkB3B,EAA2BiC,2BACnDyE,QAAQ1G,EAA2B2G,OAAO+C,eAAgB,IAAI5H,WAExEA,SATLnf,QAAQgnB,KAAK,wFACbjqB,OAAO6pB,iBAAkB,GAWtB7pB,OAAO+pB,2BAElBjI,EAAkCE,4BAA8BA,EAOhEF,EAAkCC,+BAHlC,SAAwChhB,GACpC,QAASihB,EAA4BjhB,IA3B7C,CA8BuChR,EAAQ+xB,oCAAsC/xB,EAAQ+xB,kCAAoC,M,kCC5CjI,IACQ9G,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBiF,EAA6B,EAAQ,MACrCxE,EAAkB,EAAQ,MAC1BoO,EAAiB,EAAQ,MACzB9M,EAAwB,EAAQ,MAChC+M,EAAsC,SAAU5O,GAEhD,SAAS4O,EAAqBC,GAC1B,IAAI3O,EAAQF,EAAOlpB,KAAKW,KAAMqoB,EAASK,iBAAiB2O,kBAAoBr3B,KAE5E,OADAyoB,EAAM2O,aAAeA,EACd3O,EASX,OAbAR,EAAUkP,EAAsB5O,GAMhC9qB,OAAOgI,eAAe0xB,EAAqBz4B,UAAW,cAAe,CACjEkJ,IAAK,WACD,OAAO5H,KAAKo3B,cAEhBvsB,YAAY,EACZhM,cAAc,IAEXs4B,EAd8B,CAevCD,EAAetO,cACbiN,EAA8B,WAC9B,SAASA,EAAaF,GAGlB31B,KAAKs3B,iBAAkB,EACvBt3B,KAAKuxB,mBAAmBoE,GAmG5B,OAjGAE,EAAan3B,UAAU64B,MAAQ,SAAUx4B,GACrC+pB,EAAgB0O,aAAaC,gBAAgB14B,EAAK,OAE9CiB,KAAK03B,iBAAiB34B,KACtBiB,KAAK23B,mCACE33B,KAAK03B,iBAAiB34B,GAC7BiB,KAAK43B,aAAc,IAG3B/B,EAAan3B,UAAUkJ,IAAM,SAAU7I,GAEnC,OADA+pB,EAAgB0O,aAAaC,gBAAgB14B,EAAK,OAC3CiB,KAAK03B,iBAAiB34B,IAEjC82B,EAAan3B,UAAUm5B,OAAS,WAE5B,OAAOp6B,OAAOC,OAAO,GAAIsC,KAAK03B,mBAElCj6B,OAAOgI,eAAeowB,EAAan3B,UAAW,aAAc,CACxDkJ,IAAK,WACD,OAAO5H,KAAK43B,aAEhB/sB,YAAY,EACZhM,cAAc,IAElBg3B,EAAan3B,UAAUo5B,UAAY,WAC/B,IAAIrP,EAAQzoB,KAGZ,OAFAA,KAAK23B,4BAEA33B,KAAK43B,aAGV53B,KAAKs3B,iBAAkB,EAEDxO,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,mBAC7FmN,kBAAkB/3B,KAAK03B,kBAAkB5iB,MAAK,SAAUkjB,GAS3E,OARAvP,EAAM6O,iBAAkB,EACxB7O,EAAMmP,aAAc,OACWj5B,IAA3B8pB,EAAMiP,iBACNjP,EAAMiP,iBAAmBM,EAGzBv6B,OAAOC,OAAO+qB,EAAMiP,iBAAkBM,GAEnCA,KACR,SAAU7W,GAET,OADAsH,EAAM6O,iBAAkB,EACjBz5B,QAAQ0Y,OAAO4K,OAjBftjB,QAAQ+X,QAAQ5V,KAAK03B,mBAoBpC7B,EAAan3B,UAAUyH,IAAM,SAAUpH,EAAKD,GACxCgqB,EAAgB0O,aAAaS,sBAAsBl5B,EAAK,OACxD+pB,EAAgB0O,aAAaC,gBAAgB34B,EAAO,SACpDkB,KAAK23B,4BACL33B,KAAK03B,iBAAiB34B,GAAOD,EAC7BkB,KAAK43B,aAAc,GAOvB/B,EAAan3B,UAAUw5B,iBAAmB,WACtC,IAEIC,EAFA1P,EAAQzoB,KACRo4B,EAAU,IAAIn7B,MAElB,IACIk7B,EAAsBrP,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,wBAExH,MAAO/I,GAEH,OAAOuW,EAEX,IAAIC,EAAuB,IAAIvP,EAAgBwP,uBAAuBjQ,EAASK,iBAAiB2O,iBAMhG,OALAc,EAAoB5E,gBAAgBjG,EAA2BkG,eAAe6D,iBAAiB,WAAc,OAAO,KAAS,SAAU7Z,GACnIiL,EAAMiP,iBAAmBla,EAAMwa,YAC/BK,EAAqBE,cAAa,WAAc,OAAO,IAAIpB,EAAqB3Z,EAAMwa,mBAE1FI,EAAQ32B,KAAK42B,GACND,GAEXvC,EAAan3B,UAAU6yB,mBAAqB,SAAUoE,GAClD7M,EAAgB0O,aAAaC,gBAAgB9B,EAAc,gBAC3D7M,EAAgB0O,aAAaC,gBAAgB9B,EAAa6C,eAAgB,+BAC1Ex4B,KAAK03B,iBAAmB/B,EAAa6C,eAErCx4B,KAAK43B,aAAc,GAMvB/B,EAAan3B,UAAUi5B,0BAA4B,WAC/C,GAAI33B,KAAKs3B,gBACL,MAAM,IAAIxO,EAAgBa,aAAatB,EAASuB,WAAW6O,sBAAuB5C,EAAa6C,yBAGvG7C,EAAa6C,uBAAyB,+DAC/B7C,EAxGsB,GA0GjC94B,EAAQ84B,aAAeA,G,0BC7IvBp4B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD/B,EAAQk5B,0BAA4B,eACpCl5B,EAAQq5B,2BAA6B,gBACrCr5B,EAAQu5B,6BAA+B,kBACvCv5B,EAAQ45B,4BAA8B,iBACtC55B,EAAQy5B,8BAAgC,mBACxCz5B,EAAQ25B,0BAA4B,eACpC35B,EAAQi5B,wBAA0B,eAClCj5B,EAAQ05B,wBAA0B,eAClC15B,EAAQo5B,yBAA2B,gBACnCp5B,EAAQ65B,0BAA4B,iBACpC75B,EAAQs5B,2BAA6B,kBACrCt5B,EAAQw5B,4BAA8B,oBACtCx5B,EAAQ42B,0BAA4B,CAChC52B,EAAQi5B,wBACRj5B,EAAQ05B,wBACR15B,EAAQo5B,yBACRp5B,EAAQ65B,0BACR75B,EAAQs5B,2BACRt5B,EAAQw5B,8B,4BCnBZ94B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBQ,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCxE,EAAkB,EAAQ,MAC1BsB,EAAwB,EAAQ,MAChCuH,EAAwB,WACxB,SAASA,KAkCT,OAhCAA,EAAOjzB,UAAUi6B,mBAAqB,SAAUC,EAAKC,EAAS9qB,GAC1D,IAAI+qB,EAAYhQ,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,aAC1GuN,EAAsBrP,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,wBACxH,OAAO,IAAI/sB,SAAQ,SAAU+X,EAASW,GAClCuiB,EACKH,mBAAmBC,EAAKC,GAAW,GAAI9qB,GACvC+G,MAAK,WACN,IAAIikB,EAAeZ,EAAoB5E,gBAAgBjG,EAA2BkG,eAAewF,uBAAuB,WAEpH,OAAO,KACR,SAAUxb,GACT,GAAIA,EAAMyb,aAAc,CACpB,QAA2Bt6B,IAAvB6e,EAAM0b,aACN,MAAM,IAAIpQ,EAAgBa,aAAatB,EAASuB,WAAW2G,cAAe,6BAE9E3a,EAAQ4H,EAAM0b,mBAGd3iB,EAAO,IAAIuS,EAAgBa,aAAad,EAA2Be,WAAWuP,mBAAoB,qCAEtGJ,UAGH3J,OAAM,SAAUzrB,GACjB4S,EAAO5S,UAInBguB,EAAOjzB,UAAU06B,YAAc,SAAUP,GACrB/P,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,aACpGwO,YAAYP,IAEnBlH,EAnCgB,GAqC3B50B,EAAQ40B,OAASA,G,kCC3CjB,IACQ3J,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCxE,EAAkB,EAAQ,MAC1BuQ,EAAgC,EAAQ,MACxCC,EAAmC,EAAQ,MAC3ClP,EAAwB,EAAQ,MAChCmP,EAAoB,EAAQ,MAC5BC,EAAU,EAAQ,MAClBC,EAAc,EAAQ,KACtBxE,EAA2B,SAAU1M,GAErC,SAAS0M,EAAUyE,GACf,IAAIjR,EAAQF,EAAOlpB,KAAKW,KAAM05B,IAAmB15B,KAIjD,OAHAyoB,EAAMiR,eAAiBA,EACvBA,EAAe3M,iCACftE,EAAMyP,mBAAmB11B,SAAQ,SAAUqf,GAAK,OAAO4G,EAAMkR,gBAAgB9X,MACtE4G,EAmEX,OAzEAR,EAAUgN,EAAW1M,GAQrB9qB,OAAOgI,eAAewvB,EAAUv2B,UAAW,aAAc,CACrDkJ,IAAK,WACD,OAAO5H,KAAK05B,eAAeE,eAAen3B,KAAI,SAAUo3B,GACpD,OAAO,IAAIJ,EAAYK,UAAUD,OAGzChvB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAewvB,EAAUv2B,UAAW,UAAW,CAClDkJ,IAAK,WACD,OAAO5H,KAAK05B,eAAeK,QAAQt3B,KAAI,SAAUu3B,GAC7C,OAAO,IAAIT,EAAkBU,gBAAgBD,OAGrDnvB,YAAY,EACZhM,cAAc,IAElBo2B,EAAUv2B,UAAUw7B,uBAAyB,SAAUC,GACnD,OAAOn6B,KAAK05B,eAAeU,kCAAkCD,IAEjElF,EAAUv2B,UAAU07B,kCAAoC,SAAUC,GAC9D,OAAOr6B,KAAK05B,eAAeU,kCAAkCC,IAEjEpF,EAAUv2B,UAAU47B,uBAAyB,SAAUC,GACnD,IAAIC,EAAOx6B,KAAK05B,eAAeY,uBAAuBC,GACtD,OAAOC,GAAQ,IAAIjB,EAAkBU,gBAAgBO,IAEzDvF,EAAUv2B,UAAUw5B,iBAAmB,WACnC,IAGIC,EAHA1P,EAAQzoB,KACRo4B,EAAU,IAAIn7B,MAGlB,IACIk7B,EAAsBrP,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,wBAExH,MAAO/I,GAEH,OAAOuW,EAEX,IAAIqC,EAA8B,IAAI3R,EAAgBwP,uBAAuBzP,EAA2BH,iBAAiBC,wBACzHwP,EAAoB5E,gBAAgBjG,EAA2BkG,eAAe7K,wBAAwB,WAAc,OAAO,KAAS,SAAUnL,GAC1I,IAAIkd,EAAyBjS,EAAMiR,eAAeiB,YAAYnd,EAAMgY,OACpEiF,EAA4BlC,cAAa,WAAc,OAAO,IAAIc,EAA8B/Q,4BAA4BoS,SAEhItC,EAAQ32B,KAAKg5B,GACb,IAAIG,EAAiC,IAAI9R,EAAgBwP,uBAAuBzP,EAA2BH,iBAAiB4C,2BAK5H,OAJA6M,EAAoB5E,gBAAgBjG,EAA2BkG,eAAelI,2BAA2B,WAAc,OAAO,KAAS,SAAUmI,GAC7ImH,EAA+BrC,cAAa,WAAc,OAAO,IAAIe,EAAiClO,+BAA+BqI,SAEzI2E,EAAQ32B,KAAKm5B,GACNxC,GAEXnD,EAAUv2B,UAAUm8B,mCAAqC,SAAUC,GAC/D,OAAO96B,KAAK05B,eAAemB,mCAAmCC,IAElE7F,EAAUv2B,UAAUq8B,qBAAuB,SAAUC,GACjD,OAAOh7B,KAAK05B,eAAeqB,qBAAqBC,IAEpD/F,EAAUv2B,UAAU4qB,gBAAkB,WAClC,OAAOtpB,KAAK05B,eAAepQ,mBAE/B2L,EAAUv2B,UAAUu8B,iBAAmB,SAAUvR,EAAW/c,EAAQuuB,EAAYntB,GAC5E,OAAO/N,KAAK05B,eAAeuB,iBAAiBvR,EAAW/c,EAAQuuB,EAAYntB,IAExEknB,EA1EmB,CA2E5BuE,EAAQ2B,OACVp+B,EAAQk4B,UAAYA,G,4BCnGpBx3B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIyuB,EAAc,EAAQ,MACtBkM,EAAc,EAAQ,KAItBQ,EAAiC,WACjC,SAASA,EAAgBmB,GACrBp7B,KAAKo7B,qBAAuBA,EAoEhC,OAlEA39B,OAAOgI,eAAew0B,EAAgBv7B,UAAW,YAAa,CAC1DkJ,IAAK,WACD,OAAO,IAAI2lB,EAAY0H,UAAUj1B,KAAKo7B,qBAAqB9F,gBAE/DzqB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew0B,EAAgBv7B,UAAW,OAAQ,CACrDkJ,IAAK,WACD,OAAO5H,KAAKo7B,qBAAqBx0B,MAErCiE,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew0B,EAAgBv7B,UAAW,WAAY,CACzDkJ,IAAK,WACD,OAAO5H,KAAKo7B,qBAAqBjf,UAErCtR,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew0B,EAAgBv7B,UAAW,OAAQ,CACrDkJ,IAAK,WACD,OAAO5H,KAAKo7B,qBAAqBr0B,MAErC8D,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew0B,EAAgBv7B,UAAW,YAAa,CAC1DkJ,IAAK,WACD,GAAI5H,KAAKo7B,qBAAqBvB,cAC1B,OAAO,IAAIJ,EAAYK,UAAU95B,KAAKo7B,qBAAqBvB,gBAInEhvB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew0B,EAAgBv7B,UAAW,OAAQ,CACrDkJ,IAAK,WACD,OAAO5H,KAAKo7B,qBAAqB1uB,MAErC7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew0B,EAAgBv7B,UAAW,aAAc,CAC3DkJ,IAAK,WACD,OAAO5H,KAAKo7B,qBAAqBC,YAErCxwB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew0B,EAAgBv7B,UAAW,YAAa,CAC1DkJ,IAAK,WACD,OAAO5H,KAAKo7B,qBAAqBE,WAErCzwB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew0B,EAAgBv7B,UAAW,KAAM,CACnDkJ,IAAK,WACD,OAAO5H,KAAKo7B,qBAAqBnqB,IAErCpG,YAAY,EACZhM,cAAc,IAEXo7B,EAtEyB,GAwEpCl9B,EAAQk9B,gBAAkBA,G,kCC9E1B,IACQjS,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBiF,EAA6B,EAAQ,MACrCxE,EAAkB,EAAQ,MAC1ByS,EAA0B,EAAQ,MAClCnR,EAAwB,EAAQ,MAKhCY,EAA2B,SAAUzC,GAErC,SAASyC,EAAUF,EAAeP,GAC9B,IAAI9B,EAAQF,EAAOlpB,KAAKW,OAASA,KAIjC,OAHAyoB,EAAMqC,cAAgBA,EAEtBrC,EAAMyP,iBAAiB3N,GAAO/nB,SAAQ,SAAUqf,GAAK,OAAO4G,EAAMkR,gBAAgB9X,MAC3E4G,EAuEX,OA7EAR,EAAU+C,EAAWzC,GAQrB9qB,OAAOgI,eAAeulB,EAAUtsB,UAAW,OAAQ,CAC/CkJ,IAAK,WACD,OAAO5H,KAAK8qB,cAAcpe,MAE9B7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeulB,EAAUtsB,UAAW,eAAgB,CACvDkJ,IAAK,WACD,OAAO5H,KAAK8qB,cAAc0Q,cAE9B3wB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeulB,EAAUtsB,UAAW,WAAY,CACnDkJ,IAAK,WACD,OAAO5H,KAAK8qB,cAAc2Q,UAE9B5wB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeulB,EAAUtsB,UAAW,kBAAmB,CAC1DkJ,IAAK,WACD,OAAO5H,KAAK8qB,cAAc4Q,iBAE9B7wB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeulB,EAAUtsB,UAAW,KAAM,CAC7CkJ,IAAK,WACD,OAAO5H,KAAK8qB,cAAc7Z,IAE9BpG,YAAY,EACZhM,cAAc,IAElBmsB,EAAUtsB,UAAUi9B,iBAAmB,SAAUC,GAC7C,OAAO57B,KAAK8qB,cAAc6Q,iBAAiBC,IAU/C5Q,EAAUtsB,UAAUw5B,iBAAmB,SAAU3N,GAC7C,IAAI9B,EAAQzoB,KACZ8oB,EAAgB0O,aAAaqE,oBAAoBtR,EAAO,SACxD,IACI4N,EADAC,EAAU,IAAIn7B,MAElB,IACIk7B,EAAsBrP,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,wBAExH,MAAO/I,GAEH,OAAOuW,EAGX,IAAI0D,EAAiB,IAAIhT,EAAgBwP,uBAAuBjQ,EAASK,iBAAiB8B,kBAQ1F,OAPA2N,EAAoB5E,gBAAgBjG,EAA2BkG,eAAehJ,kBAAkB,SAAUuR,GAEtG,OADgBA,IACKtT,EAAMqC,cAAc7Z,MAC1C,SAAUyY,GACToS,EAAevD,cAAa,WAAc,OAAO,IAAIgD,EAAwBlR,sBAAsBX,EAAWa,SAElH6N,EAAQ32B,KAAKq6B,GACN1D,GAEJpN,EA9EmB,CA+E5BlC,EAAgBkT,sBAClBj/B,EAAQiuB,UAAYA,G,kCCvGpB,IACQhD,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBS,EAAkB,EAAQ,MAC1BqB,EAAc,EAAQ,MACtBgR,EAAuB,SAAU5S,GAEjC,SAAS4S,EAAMc,GACX,IAAIxT,EAAQF,EAAOlpB,KAAKW,OAASA,KAEjC,OADAyoB,EAAMwT,WAAaA,EACZxT,EAoDX,OAxDAR,EAAUkT,EAAO5S,GAMjB9qB,OAAOgI,eAAe01B,EAAMz8B,UAAW,OAAQ,CAC3CkJ,IAAK,WACD,OAAO5H,KAAKi8B,WAAWvvB,MAE3B7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe01B,EAAMz8B,UAAW,YAAa,CAChDkJ,IAAK,WACD,OAAO5H,KAAKi8B,WAAWC,WAE3BrxB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe01B,EAAMz8B,UAAW,OAAQ,CAC3CkJ,IAAK,WACD,GAAI5H,KAAKm8B,YAAYn8B,KAAKi8B,WAAWl1B,MACjC,OAAO/G,KAAKi8B,WAAWl1B,KAE3B,MAAM,IAAI+hB,EAAgBa,aAAatB,EAAS+T,oBAAoBC,oBAAqB,yBAE7FxxB,YAAY,EACZhM,cAAc,IAElBs8B,EAAMz8B,UAAUy9B,YAAc,SAAUp1B,GACpC,IAAIu1B,EAAWv1B,EACf,YAAuBpI,IAAnB29B,EAASpH,YAA2Cv2B,IAApB29B,EAASlH,QAKjD+F,EAAMz8B,UAAU69B,mBAAqB,SAAUC,GAC3C,IAAI/T,EAAQzoB,KACZ,OAAOA,KAAKi8B,WAAWM,mBAAmBC,GAAe1nB,MAAK,SAAUgW,GACpE,OACW,IAAIjtB,QADXitB,EACmB,SAAUlV,GAAW,OAAOA,EAAQ,IAAIuU,EAAYa,UAAUF,EAAerC,KAG7E,SAAU7S,GAAW,OAAOA,OAAQjX,SAInEw8B,EAAMz8B,UAAU+9B,mBAAqB,WACjC,IAAIhU,EAAQzoB,KACZ,OAAOA,KAAKi8B,WAAWQ,qBAAqB3nB,MAAK,SAAU4nB,GACvD,OAAOA,EAAej6B,KAAI,SAAUqoB,GAChC,OAAO,IAAIX,EAAYa,UAAUF,EAAerC,UAIrD0S,EAzDe,CA0DxBrS,EAAgBkT,sBAClBj/B,EAAQo+B,MAAQA,G,0BC5EhB19B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+yB,EAA0B,WAC1B,SAASA,EAAS8K,GACd38B,KAAK28B,cAAgBA,EAKzB,OAHA9K,EAASnzB,UAAU2tB,uBAAyB,WACxC,OAAOrsB,KAAK28B,cAActQ,0BAEvBwF,EAPkB,GAS7B90B,EAAQ80B,SAAWA,G,iCCVnB,IACQ7J,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBQ,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCxE,EAAkB,EAAQ,MAC1B8T,EAAuB,EAAQ,MAC/BC,EAAuB,EAAQ,MAC/BzS,EAAwB,EAAQ,MAChCmD,EAAc,EAAQ,MAEtBuM,EAA2B,SAAUvR,GAErC,SAASuR,EAAUgD,GACf,IAAIrU,EAAQF,EAAOlpB,KAAKW,KAAM88B,IAAmB98B,KAIjD,OAHAyoB,EAAMqU,eAAiBA,EAEvBrU,EAAMyP,mBAAmB11B,SAAQ,SAAUqf,GAAK,OAAO4G,EAAMkR,gBAAgB9X,MACtE4G,EAiIX,OAvIAR,EAAU6R,EAAWvR,GAQrB9qB,OAAOgI,eAAeq0B,EAAUp7B,UAAW,kBAAmB,CAC1DkJ,IAAK,WAED,GAA2C,MAAvC5H,KAAK88B,eAAeC,gBACpB,MAAM,IAAIjU,EAAgBa,aAAatB,EAAS2U,iBAAiBX,oBAAqB,oCAE1F,OAAO,IAAI9O,EAAY0H,UAAUj1B,KAAK88B,eAAeC,kBAEzDlyB,YAAY,EACZhM,cAAc,IAUlBi7B,EAAUp7B,UAAUw5B,iBAAmB,WACnC,IAEIC,EAFA1P,EAAQzoB,KACRo4B,EAAU,IAAIn7B,MAElB,IACIk7B,EAAsBrP,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBC,WAAW,wBAExH,MAAO/I,GAEH,OAAOuW,EAGX,IAAI6E,EAAa,IAAInU,EAAgBwP,uBAAuBzP,EAA2BH,iBAAiBsB,sBACxGmO,EAAoB5E,gBAAgBjG,EAA2BkG,eAAe0J,sBAAsB,SAAUnB,GAC1G,IAAIoB,EAAWpB,EACf,OAAOtT,EAAM2U,kBAAkBD,EAAU1U,EAAMqU,eAAeK,aAC/D,WAAc,OAAOF,EAAW1E,cAAa,WAAc,OAAO,IAAIsE,EAAqB9S,mBAAmBtB,SACjH,IAAI4U,EAAc,IAAIvU,EAAgBwP,uBAAuBzP,EAA2BH,iBAAiBS,eAUzG,OATAgP,EAAoB5E,gBAAgBjG,EAA2BkG,eAAerK,eAAe,SAAU4S,GACnG,IAAIuB,EAAsBvB,EAC1B,OAAOtT,EAAMqU,eAAeK,SAASnU,YAAcsU,EAAoBH,SAASnU,aACjF,SAAUxL,GACT6f,EAAY9E,cAAa,WAAc,OAAO,IAAIqE,EAAqB7T,mBAAmBN,EAAOjL,EAAMkM,UAAWlM,EAAMiM,eAE5H2O,EAAQ32B,KAAKw7B,GACb7E,EAAQ32B,KAAK47B,GAENjF,GAEX0B,EAAUp7B,UAAUu8B,iBAAmB,SAAUvR,EAAW/c,EAAQuuB,EAAYntB,GAC5E,OAAO/N,KAAK88B,eAAe7B,iBAAiBvR,EAAW/c,EAAQuuB,EAAYntB,IAE/E+rB,EAAUp7B,UAAU6+B,sBAAwB,SAAU7T,EAAW8T,GAC7D,OAAOx9B,KAAK88B,eAAeS,sBAAsB7T,EAAW8T,IAEhE1D,EAAUp7B,UAAU++B,6BAA+B,SAAU/T,EAAW/c,EAAQuuB,EAAYntB,GACxF,OAAO/N,KAAK88B,eAAeW,6BAA6B/T,EAAW/c,EAAQuuB,EAAYntB,IAE3F+rB,EAAUp7B,UAAUg/B,6BAA+B,SAAUhU,EAAW3b,GACpE,OAAO/N,KAAK88B,eAAeY,6BAA6BhU,EAAW3b,IAEvE+rB,EAAUp7B,UAAUi/B,iBAAmB,SAAUjU,GAC7C,OAAO1pB,KAAK88B,eAAea,iBAAiBjU,IAEhDoQ,EAAUp7B,UAAUk/B,oBAAsB,WACtC,OAAO59B,KAAK88B,eAAec,uBAE/B9D,EAAUp7B,UAAU4qB,gBAAkB,WAClC,OAAOtpB,KAAK88B,eAAexT,mBAE/BwQ,EAAUp7B,UAAUwrB,sBAAwB,WACxC,OAAOlqB,KAAK88B,eAAe5S,yBAE/B4P,EAAUp7B,UAAUm/B,yBAA2B,WAC3C,OAAO79B,KAAK88B,eAAee,4BAE/B/D,EAAUp7B,UAAUo/B,oBAAsB,SAAU/vB,GAChD,OAAO/N,KAAK88B,eAAegB,oBAAoB/vB,IAEnD+rB,EAAUp7B,UAAUq/B,0BAA4B,SAAUC,EAAcjwB,GACpE,OAAO/N,KAAK88B,eAAeiB,0BAA0BC,EAAcjwB,IAEvE+rB,EAAUp7B,UAAUu/B,2BAA6B,WAC7C,OAAOj+B,KAAK88B,eAAemB,8BAE/BnE,EAAUp7B,UAAUw/B,uBAAyB,SAAUnwB,GAGnD,OAFAkC,QAAQgnB,KAAK,2IAENj3B,KAAK88B,eAAeoB,uBAAuBnwB,IAEtD+rB,EAAUp7B,UAAUy/B,yBAA2B,WAC3C,OAAOn+B,KAAK88B,eAAeqB,4BAE/BrE,EAAUp7B,UAAU0/B,4BAA8B,SAAUC,EAAgBtwB,GACxE,OAAO/N,KAAK88B,eAAesB,4BAA4BC,EAAgBtwB,IAE3E+rB,EAAUp7B,UAAU4/B,kCAAoC,SAAUD,EAAgBL,EAAcjwB,GAC5F,OAAO/N,KAAK88B,eAAewB,kCAAkCD,EAAgBL,EAAcjwB,IAE/F+rB,EAAUp7B,UAAU6/B,wBAA0B,WAC1C,OAAOv+B,KAAK88B,eAAeyB,2BAE/BzE,EAAUp7B,UAAU8/B,qBAAuB,SAAUC,EAAWvD,GAC5D,OAAOl7B,KAAK88B,eAAe4B,qBAAqBD,EAAWvD,IAE/DpB,EAAUp7B,UAAUigC,wBAA0B,SAAUC,EAAYC,GAChE,OAAO7+B,KAAK88B,eAAe6B,wBAAwBC,EAAYC,IAEnE/E,EAAUp7B,UAAUggC,qBAAuB,SAAUE,EAAYC,GAC7D,OAAO7+B,KAAK88B,eAAe4B,qBAAqBE,EAAYC,IAEhE/E,EAAUp7B,UAAUogC,kBAAoB,SAAUC,EAAMC,GACpD,OAAOh/B,KAAK88B,eAAegC,kBAAkBC,EAAMC,IAEvDlF,EAAUp7B,UAAUugC,oBAAsB,WACtC,OAAOj/B,KAAK88B,eAAemC,uBAE/BnF,EAAUp7B,UAAUwgC,sBAAwB,SAAUC,GAClD,OAAOn/B,KAAK88B,eAAeoC,sBAAsBC,IAErDrF,EAAUp7B,UAAU0+B,kBAAoB,SAAUrtB,EAAGC,GACjD,OAAQD,GACJC,GACAD,EAAEiZ,YAAchZ,EAAEgZ,WAClBjZ,EAAE0lB,YAAczlB,EAAEylB,WAClB1lB,EAAEqvB,aAAepvB,EAAEovB,YACnBrvB,EAAEsvB,eAAiBrvB,EAAEqvB,cAEtBvF,EAxImB,CADhB,EAAQ,MA0IZqB,OACVp+B,EAAQ+8B,UAAYA,G,0BCjKpBr8B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAMtD,IAAI42B,EAAkC,WAClC,SAASA,EAAiB4J,GACtBt/B,KAAKs/B,WAAaA,EAStB,OAPA7hC,OAAOgI,eAAeiwB,EAAiBh3B,UAAW,YAAa,CAC3DkJ,IAAK,WACD,OAAO5H,KAAKs/B,YAEhBz0B,YAAY,EACZhM,cAAc,IAEX62B,EAX0B,GAarC34B,EAAQ24B,iBAAmBA,G,4BCnB3Bj4B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIgqB,EAAkB,EAAQ,MAC1ByW,EAAoB,EAAQ,MAC5BC,EAA8B,EAAQ,MAOtCnO,EAA6B,WAC7B,SAASA,EAAYZ,GACjBzwB,KAAKy/B,YAAc3W,EAAgB8F,WAAWC,UAAY/F,EAAgB8F,WAAWC,SAAS6Q,eAC9F1/B,KAAK2/B,SAAW7W,EAAgB8W,+BAA+BC,iBAAiBC,QAAQrP,EAAqBoP,kBAC7G7/B,KAAKqrB,YAAcmU,EAA4BO,0BAA0BC,4BAA4BvP,EAAqBqB,oBAC1H9xB,KAAKigC,UAAYxP,EAAqByP,kBACtClgC,KAAKmgC,SAAW1P,EAAqB2P,iBACrCpgC,KAAKqgC,QAAU5P,EAAqB6P,gBACpCtgC,KAAKugC,MAAQzX,EAAgB8W,+BAA+BY,cAAcV,QAAQrP,EAAqB+P,eACvGxgC,KAAKygC,iBAAmBhQ,EAAqBiQ,gBAC7C1gC,KAAK2gC,gBAAkBlQ,EAAqBmQ,eAGxCnQ,EAAqBoQ,SACrB7gC,KAAK8gC,gBAAkB,IAAIvB,EAAkBvT,gBAAgByE,EAAqBoQ,OAAQpQ,EAAqBsQ,OAAQtQ,EAAqBuQ,aAkEpJ,OA/DAvjC,OAAOgI,eAAe4rB,EAAY3yB,UAAW,aAAc,CACvDkJ,IAAK,WACD,OAAO5H,KAAKy/B,aAEhB50B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4rB,EAAY3yB,UAAW,UAAW,CACpDkJ,IAAK,WACD,OAAO5H,KAAK2/B,UAEhB90B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4rB,EAAY3yB,UAAW,qBAAsB,CAC/DkJ,IAAK,WACD,OAAO5H,KAAKqrB,aAEhBxgB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4rB,EAAY3yB,UAAW,WAAY,CACrDkJ,IAAK,WACD,OAAO5H,KAAKigC,WAEhBp1B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4rB,EAAY3yB,UAAW,UAAW,CACpDkJ,IAAK,WACD,OAAO5H,KAAKmgC,UAEhBt1B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4rB,EAAY3yB,UAAW,SAAU,CACnDkJ,IAAK,WACD,OAAO5H,KAAKqgC,SAEhBx1B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4rB,EAAY3yB,UAAW,OAAQ,CACjDkJ,IAAK,WACD,OAAO5H,KAAKugC,OAEhB11B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4rB,EAAY3yB,UAAW,kBAAmB,CAC5DkJ,IAAK,WACD,OAAO5H,KAAKygC,kBAEhB51B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4rB,EAAY3yB,UAAW,iBAAkB,CAC3DkJ,IAAK,WACD,OAAO5H,KAAK2gC,iBAEhB91B,YAAY,EACZhM,cAAc,IAEXwyB,EAhFqB,GAkFhCt0B,EAAQs0B,YAAcA,G,0BC5FtB5zB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAItD,IAAImiC,EAA4B,WAC5B,SAASA,EAAWC,GAChBlhC,KAAKkhC,cAAgBA,EACrBlhC,KAAKkhC,cAAgBA,EAwDzB,OAtDAzjC,OAAOgI,eAAew7B,EAAWviC,UAAW,mBAAoB,CAC5DkJ,IAAK,WACD,OAAO5H,KAAKkhC,cAAcjQ,kBAE9BpmB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew7B,EAAWviC,UAAW,cAAe,CACvDkJ,IAAK,WACD,OAAO5H,KAAKkhC,cAAc9P,aAE9BvmB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew7B,EAAWviC,UAAW,WAAY,CACpDkJ,IAAK,WACD,OAAO5H,KAAKkhC,cAAc5P,UAE9BzmB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew7B,EAAWviC,UAAW,KAAM,CAC9CkJ,IAAK,WACD,OAAO5H,KAAKkhC,cAAczP,IAE9B5mB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew7B,EAAWviC,UAAW,WAAY,CACpDkJ,IAAK,WACD,OAAO5H,KAAKkhC,cAActP,UAE9B/mB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAew7B,EAAWviC,UAAW,oBAAqB,CAC7DkJ,IAAK,WACD,OAAO5H,KAAKkhC,cAAcrR,iBAE9BhlB,YAAY,EACZhM,cAAc,IAElBoiC,EAAWviC,UAAU2vB,gBAAkB,SAAUE,GAC7C,OAAOvuB,KAAKkhC,cAAc7S,iBAAgB,EAAOE,GAAsBzZ,QAE3EmsB,EAAWviC,UAAUyiC,sBAAwB,WACzC,OAAOnhC,KAAKkhC,cAAc7S,iBAAgB,IAE9C4S,EAAWviC,UAAU+wB,oBAAsB,SAAUC,GACjD,OAAO1vB,KAAKkhC,cAAczR,oBAAoBC,IAElDuR,EAAWviC,UAAUixB,qBAAuB,SAAUC,GAClD,OAAO5vB,KAAKkhC,cAAcvR,qBAAqBC,IAE5CqR,EA3DoB,GA6D/BlkC,EAAQkkC,WAAaA,G,kCCjErB,IACQjZ,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAIIg3B,EAA0B,SAAUvN,GAEpC,SAASuN,EAASsL,GACd,IAAI3Y,EAAQF,EAAOlpB,KAAKW,OAASA,KAIjC,OAHAyoB,EAAM2Y,cAAgBA,EAEtB3Y,EAAM2Y,cAAclJ,mBAAmB11B,SAAQ,SAAUqf,GAAK,OAAO4G,EAAMkR,gBAAgB9X,MACpF4G,EAwBX,OA9BAR,EAAU6N,EAAUvN,GAQpBuN,EAASp3B,UAAU64B,MAAQ,SAAUx4B,GACjCiB,KAAKohC,cAAc7J,MAAMx4B,IAE7B+2B,EAASp3B,UAAUkJ,IAAM,SAAU7I,GAC/B,OAAOiB,KAAKohC,cAAcx5B,IAAI7I,IAElC+2B,EAASp3B,UAAUm5B,OAAS,WACxB,OAAO73B,KAAKohC,cAAcvJ,UAE9Bp6B,OAAOgI,eAAeqwB,EAASp3B,UAAW,aAAc,CACpDkJ,IAAK,WACD,OAAO5H,KAAKohC,cAAcC,YAE9Bx2B,YAAY,EACZhM,cAAc,IAElBi3B,EAASp3B,UAAUo5B,UAAY,WAC3B,OAAO93B,KAAKohC,cAActJ,aAE9BhC,EAASp3B,UAAUyH,IAAM,SAAUpH,EAAKD,GACpCkB,KAAKohC,cAAcj7B,IAAIpH,EAAKD,IAEzBg3B,EA/BkB,CAJP,EAAQ,MAoCZkG,sBAClBj/B,EAAQ+4B,SAAWA,G,0BCnDnBr4B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAItD,IAAI4yB,EAAoB,WACpB,SAASA,EAAG4P,GACRthC,KAAKshC,MAAQA,EAQjB,OANA5P,EAAGhzB,UAAUi6B,mBAAqB,SAAUC,EAAKC,EAAS9qB,GACtD,OAAO/N,KAAKshC,MAAM3I,mBAAmBC,EAAKC,EAAS9qB,IAEvD2jB,EAAGhzB,UAAU06B,YAAc,SAAUP,GACjC74B,KAAKshC,MAAMlI,YAAYP,IAEpBnH,EAVY,GAYvB30B,EAAQ20B,GAAKA,G,4BChBbj0B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIgqB,EAAkB,EAAQ,MAC1BiX,EAA2C,WAC3C,SAASA,KA2BT,OAzBAA,EAA0BC,4BAA8B,SAAUuB,GAC9D,OAAKA,EAkBY,CACT9O,iBAfgB8O,EAAwB9O,iBAAiBhwB,KAAI,SAAUiwB,GAYvE,MAXsB,CAClBW,aAAcvK,EAAgB8W,+BAA+BvM,aAAayM,QAAQpN,EAAuBW,cACzGR,cAAe,CACXC,WAAYJ,EAAuBG,cAAcC,WACjDC,SAAUL,EAAuBG,cAAcE,SAC/CC,WAAYN,EAAuBG,cAAcG,WACjDC,UAAWP,EAAuBG,cAAcI,UAChDC,eAAgBR,EAAuBG,cAAcK,eACrDC,MAAOT,EAAuBG,cAAcM,iBAZxD,GAuBD4M,EA5BmC,GA8B9ChjC,EAAQgjC,0BAA4BA,G,iCChCpC,IACQ/X,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIwuB,EAA6B,EAAQ,MAErCkU,EAA2C,SAAUjZ,GAErD,SAASiZ,IACL,OAAkB,OAAXjZ,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAsB/D,OAxBAioB,EAAUuZ,EAA2BjZ,GAIrC9qB,OAAOgI,eAAe+7B,EAA0B9iC,UAAW,cAAe,CACtEkJ,IAAK,WACD,MAAO,yBAEXiD,YAAY,EACZhM,cAAc,IAElB2iC,EAA0B9iC,UAAUyxB,mCAAqC,SAAU7B,EAAmBmT,GAClG,IAAIhT,EACAiT,IAAUjT,EAAK,IACZnB,EAA2BwG,YAAY5oB,cAAgB,qCAC1DujB,EAAGnB,EAA2BwG,YAAY6N,yBAA2BF,EACrEhT,EAAGnB,EAA2BwG,YAAY8N,mBAAqBtT,EAC/DG,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO4N,oBAAqBH,GAAQ5sB,MAAK,SAAUqf,GAG9F,OADaA,EAAS7zB,WAIvBkhC,EAzBmC,CADxB,EAAQ,MA2BZM,iBAClB/kC,EAAQykC,0BAA4BA,G,kCC3CpC,IACQxZ,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCxE,EAAkB,EAAQ,MAC1BiZ,EAAqC,SAAUxZ,GAE/C,SAASwZ,IACL,OAAkB,OAAXxZ,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAuB/D,OAzBAioB,EAAU8Z,EAAqBxZ,GAI/B9qB,OAAOgI,eAAes8B,EAAoBrjC,UAAW,cAAe,CAChEkJ,IAAK,WACD,MAAO,mBAEXiD,YAAY,EACZhM,cAAc,IAElBkjC,EAAoBrjC,UAAUq5B,kBAAoB,SAAUzG,GACxD,IAAI7C,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,oBAC1DujB,EAAGnB,EAA2BwG,YAAYkO,gBAAkB1Q,EAC5D7C,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOgO,sBAAuBpO,GAAY/e,MAAK,SAAUhW,GACpG,IAAIwB,EAASxB,EAAMwB,OACnB,IAAKA,IAAWA,EAAOk4B,eACnB,MAAM,IAAI1P,EAAgBa,aAAad,EAA2Be,WAAW2G,cAAe,sCAEhG,OAAOjwB,EAAOk4B,mBAGfuJ,EA1B6B,CA2BtCjZ,EAAgBgZ,iBAClB/kC,EAAQglC,oBAAsBA,G,kCC7C9B,IACQ/Z,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCxE,EAAkB,EAAQ,MAG1BoZ,EAAuBrZ,EAA2BsZ,YAAYC,OAC9DC,EAA+B,SAAU9Z,GAEzC,SAAS8Z,IACL,OAAkB,OAAX9Z,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAoE/D,OAtEAioB,EAAUoa,EAAe9Z,GAIzB9qB,OAAOgI,eAAe48B,EAAc3jC,UAAW,cAAe,CAC1DkJ,IAAK,WACD,MAAO,aAEXiD,YAAY,EACZhM,cAAc,IAElBwjC,EAAc3jC,UAAUi6B,mBAAqB,SAAUC,EAAKC,EAAS9qB,GACjE,IAAI0gB,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,qBAC1DujB,EAAGnB,EAA2BwG,YAAYwO,oBAAsB1J,EAChEnK,EAAGnB,EAA2BwG,YAAYyO,wBAA0B1J,EACpEpK,GACA4G,EAAItnB,GAAWA,EAAQqnB,OAASrnB,EAAQqnB,OAtBxB,IAuBhBD,EAAIpnB,GAAWA,EAAQmnB,MAAQnnB,EAAQmnB,MAtBxB,IAuBfsN,EAAcz0B,GAAWA,EAAQy0B,YAAcz0B,EAAQy0B,YAAcN,EAIzE,GAAI7M,GAAK,GAAKF,GAAK,EACf,MAAM,IAAIrM,EAAgBa,aAAad,EAA2Be,WAAW6Y,iBAAkB,2DAMnG,OAJA5O,EAAWvG,EAA2BwG,YAAY4O,kBAAoBrN,EACtExB,EAAWvG,EAA2BwG,YAAY6O,kBAAoBxN,EACtErM,EAAgB0O,aAAaoL,gBAAgBJ,EAAa3Z,EAA2BsZ,YAAa,eAClGtO,EAAWvG,EAA2BwG,YAAY+O,sBAAwB/Z,EAAgBga,+BAA+BC,aAAajD,QAAQ0C,GACvIxiC,KAAKg0B,QAAQ1G,EAA2B2G,OAAO+O,cAAenP,GAAY/e,MAAK,SAAUqf,GAE5F,OADmBA,EAAS7zB,QAExB,KAAKgtB,EAA2B2V,sBAAsBC,kBAClD,MAAM,IAAIpa,EAAgBa,aAAad,EAA2Be,WAAWsZ,kBAAmB,2DACpG,KAAK5V,EAA2B2V,sBAAsBE,cAClD,MAAM,IAAIra,EAAgBa,aAAad,EAA2Be,WAAWwZ,oBAAqB,iFACtG,QAEI,YAIhBf,EAAc3jC,UAAU06B,YAAc,SAAUP,GAC5C,IAAIpK,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,cAC1DujB,GAIJ,OAHIoK,IACAhF,EAAWvG,EAA2BwG,YAAYyO,wBAA0B1J,GAEzE74B,KAAKg0B,QAAQ1G,EAA2B2G,OAAOoP,YAAaxP,GAAY/e,MAAK,gBAIxFutB,EAAc3jC,UAAUixB,qBAAuB,SAAUC,EAAqBC,GAC1E,IAAIpB,EAEJ,GADA3F,EAAgB0O,aAAa8L,oBAAoB1T,EAAqB,UAAW,4BACzDjxB,IAApBkxB,GAAiCA,GAAmB,EACpD,MAAM,IAAI/G,EAAgBa,aAAad,EAA2Be,WAAW2G,cAAe,4BAEhG,IAAIsD,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAYyP,iBAAmB1T,EAC7DpB,EAAGnB,EAA2BwG,YAAY0P,qBAAuB5T,EACjEnB,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOwP,gBAAiB5P,GAAY/e,MAAK,gBAIrFutB,EAvEuB,CAwEhCvZ,EAAgBgZ,iBAClB/kC,EAAQslC,cAAgBA,G,4BC7FxB5kC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIgqB,EAAkB,EAAQ,MAC1B4a,EAA8B,EAAQ,KACtCC,EAAwB,EAAQ,MAChCC,EAAkB,EAAQ,MAC1BxZ,EAAwB,EAAQ,MAKpCrtB,EAAQi0B,8BAJR,SAAuCjB,GACnCjH,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBkZ,gBAAgB,IAAIF,EAAsB5B,oBAAoBhS,EAAY3F,EAAsBO,uBACnL7B,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBkZ,gBAAgB,IAAID,EAAgBvB,cAActS,EAAY3F,EAAsBO,wBAM3K5tB,EAAQizB,yCAHR,SAAkDD,GAC9CjH,EAAgB4B,mBAAmB9iB,IAAIwiB,EAAsBO,sBAAsBkZ,gBAAgB,IAAIH,EAA4BlC,0BAA0BzR,EAAY3F,EAAsBO,yB,0BCZnMltB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD/B,EAAQ4tB,qBAAuB,G,4BCA/B,SAASmZ,EAASC,GACd,IAAK,IAAI5b,KAAK4b,EAAQhnC,EAAQ+S,eAAeqY,KAAIprB,EAAQorB,GAAK4b,EAAE5b,IAEpE1qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtDglC,EAAS,EAAQ,OACjB,IAAIE,EAAU,EAAQ,MACtBjnC,EAAQknC,YAAcD,EAAQC,YAC9BlnC,EAAQmnC,WAAaF,EAAQE,WAC7BnnC,EAAQq/B,oBAAsB4H,EAAQ5H,oBACtCr/B,EAAQonC,kBAAoBH,EAAQG,kBACpCpnC,EAAQqnC,kBAAoBJ,EAAQI,kBACpCrnC,EAAQsnC,0BAA4BL,EAAQtb,iBAC5C3rB,EAAQunC,QAAUN,EAAQM,QAC1BR,EAAS,EAAQ,OACjBA,EAAS,EAAQ,OACjBA,EAAS,EAAQ,Q,4BCZjBrmC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIylC,EAAY,EAAQ,KACxBxnC,EAAQ6sB,WAAa2a,EAAU3a,WAC/B7sB,EAAQynC,iBAAmBD,EAAUC,iBACrCznC,EAAQ0nC,cAAgBF,EAAUE,cAClC1nC,EAAQ2rB,iBAAmB6b,EAAU7b,iBACrC3rB,EAAQ2nC,qBAAuBH,EAAUG,qBACzC3nC,EAAQ4nC,oBAAsBJ,EAAUI,oBACxC5nC,EAAQ6nC,iCAAmCL,EAAUK,iCACrD7nC,EAAQ8nC,wBAA0BN,EAAUM,wBAC5C9nC,EAAQ+nC,0BAA4BP,EAAUO,0BAb9C,SAAkBf,GACd,IAAK,IAAI5b,KAAK4b,EAAQhnC,EAAQ+S,eAAeqY,KAAIprB,EAAQorB,GAAK4b,EAAE5b,IAapE2b,CAAS,EAAQ,Q,4BCVjB,SAASA,EAASC,GACd,IAAK,IAAI5b,KAAK4b,EAAQhnC,EAAQ+S,eAAeqY,KAAIprB,EAAQorB,GAAK4b,EAAE5b,IAEpE1qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtDglC,EAAS,EAAQ,OACjBA,EAAS,EAAQ,Q,0BCJjB,IAAWiB,EANXtnC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAM3CimC,EAMYhoC,EAAQgoC,oBAAsBhoC,EAAQgoC,kBAAoB,KALnD,OAAI,SAC9BA,EAA6B,UAAI,YACjCA,EAA2B,QAAI,UAC/BA,EAA4B,SAAI,WAChCA,EAA6B,UAAI,a,0BCoTrC,IAAWX,EAnHA1b,EAfAyb,EANAG,EATAU,EARAC,EALAC,EA9IA9I,EAVA8H,EALXzmC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAK3ColC,EAKKnnC,EAAQmnC,aAAennC,EAAQmnC,WAAa,KAJpC,QAAI,UACxBA,EAAoB,QAAI,UACxBA,EAAmB,OAAI,SACvBA,EAAkB,MAAI,SAMf9H,EAyIcr/B,EAAQq/B,sBAAwBr/B,EAAQq/B,oBAAsB,KArI5C,kBAAI,sBAI3CA,EAAgD,2BAAI,gCAIpDA,EAA6C,wBAAI,6BAIjDA,EAAqC,gBAAI,qBAIzCA,EAAmC,cAAI,iBAIvCA,EAA2C,sBAAI,2BAI/CA,EAA0C,qBAAI,yBAK9CA,EAAmD,8BAAI,4BAKvDA,EAAsC,iBAAI,oBAI1CA,EAAiC,YAAI,eAIrCA,EAAyC,oBAAI,wBAK7CA,EAAoD,+BAAI,qCAIxDA,EAAgC,WAAI,cAIpCA,EAAoC,eAAI,mBAIxCA,EAAoC,eAAI,mBAIxCA,EAAuC,kBAAI,uBAI3CA,EAAsC,iBAAI,oBAI1CA,EAAyD,oCAAI,4CAI7DA,EAA6C,wBAAI,8BAIjDA,EAAkD,6BAAI,qCAItDA,EAAoC,eAAI,mBAIxCA,EAA0C,qBAAI,0BAI9CA,EAAwC,mBAAI,wBAI5CA,EAAwC,mBAAI,uBAI5CA,EAA0C,qBAAI,yBAI9CA,EAAyC,oBAAI,yBAI7CA,EAAyC,oBAAI,uBAI7CA,EAAoC,eAAI,kBAIxCA,EAA8C,yBAAI,6BAIlDA,EAA8C,yBAAI,6BAIlDA,EAAuC,kBAAI,sBAK3CA,EAAmD,8BAAI,iCAIvDA,EAA0C,qBAAI,0BAMvC8I,EAGMnoC,EAAQmoC,cAAgBnoC,EAAQmoC,YAAc,KAF1C,IAAI,MACrBA,EAAiB,IAAI,OAGdD,EAMaloC,EAAQkoC,qBAAuBloC,EAAQkoC,mBAAqB,KALxD,IAAI,MAC5BA,EAAyB,KAAI,OAC7BA,EAA4B,QAAI,UAChCA,EAA0B,MAAI,QAC9BA,EAA4B,QAAI,WAGzBD,EAOSjoC,EAAQioC,iBAAmBjoC,EAAQioC,eAAiB,KAN7C,OAAI,SAC3BA,EAAwB,QAAI,UAC5BA,EAA4B,YAAI,cAChCA,EAA4B,YAAI,cAChCA,EAAsB,MAAI,QAC1BA,EAA0B,UAAI,aAGvBV,EAIEvnC,EAAQunC,UAAYvnC,EAAQunC,QAAU,KAHlC,IAAI,MACjBA,EAAgB,OAAI,SACpBA,EAAgB,OAAI,UAGbH,EAMYpnC,EAAQonC,oBAAsBpnC,EAAQonC,kBAAoB,KALhD,UAAI,YACjCA,EAA2B,QAAI,UAC/BA,EAAyB,MAAI,QAC7BA,EAA2B,QAAI,UAC/BA,EAA0B,OAAI,UAUvBzb,EAwGW3rB,EAAQ2rB,mBAAqB3rB,EAAQ2rB,iBAAmB,KAlGvC,iBAAI,mBAMvCA,EAAoC,kBAAI,oBAMxCA,EAAkC,gBAAI,kBAMtCA,EAAuC,qBAAI,uBAK3CA,EAAoC,kBAAI,oBAKxCA,EAA6C,2BAAI,6BAKjDA,EAAgC,cAAI,gBAKpCA,EAAoC,kBAAI,oBAKxCA,EAAmC,iBAAI,mBAKvCA,EAA6C,2BAAI,wBAKjDA,EAAuC,qBAAI,uBAK3CA,EAAmC,iBAAI,mBAKvCA,EAAsC,oBAAI,sBAK1CA,EAAuC,qBAAI,uBAK3CA,EAAoC,kBAAI,oBAKxCA,EAAsC,oBAAI,sBAM1CA,EAA4B,UAAI,YAMhCA,EAA8B,YAAI,cAOlCA,EAAqC,mBAAI,sBAS5B3rB,EAAQknC,cAAgBlnC,EAAQknC,YAAc,KADtC,QAAI,WAIlBG,EAyBYrnC,EAAQqnC,oBAAsBrnC,EAAQqnC,kBAAoB,KArBhD,UAAI,aAIjCA,EAAoC,iBAAI,oBAIxCA,EAA8B,WAAI,cAIlCA,EAAkC,eAAI,mBAItCA,EAAkC,eAAI,kBAItCA,EAAyB,MAAI,S,0BChRjC,IAAWe,EAfAC,EAVAC,EA1BAC,EAdAC,EANX9nC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAM3CymC,EAQcxoC,EAAQwoC,sBAAwBxoC,EAAQwoC,oBAAsB,KAPhD,cAAI,iBACvCA,EAA6C,wBAAI,8BACjDA,EAAiD,4BAAI,iCACrDA,EAAyC,oBAAI,wBAC7CA,EAAkD,6BAAI,+BACtDA,EAAyC,oBAAI,sBAC7CA,EAAwC,mBAAI,sBAOrCD,EAoBQvoC,EAAQuoC,gBAAkBvoC,EAAQuoC,cAAgB,KAnB1B,wBAAI,sBAC3CA,EAAwB,SAAI,YAC5BA,EAAuB,QAAI,UAC3BA,EAAiC,kBAAI,uBACrCA,EAAsB,OAAI,SAC1BA,EAA8B,eAAI,mBAClCA,EAAmC,oBAAI,sBACvCA,EAA+B,gBAAI,kBACnCA,EAA4C,6BAAI,+BAChDA,EAAsC,uBAAI,yBAC1CA,EAAkC,mBAAI,qBACtCA,EAAqC,sBAAI,wBACzCA,EAA2B,YAAI,cAC/BA,EAA6B,cAAI,gBACjCA,EAAkC,mBAAI,qBACtCA,EAAmC,oBAAI,sBACvCA,EAAiC,kBAAI,oBACrCA,EAAsC,uBAAI,yBAC1CA,EAAoC,qBAAI,wBAOjCD,EAKiBtoC,EAAQsoC,yBAA2BtoC,EAAQsoC,uBAAyB,KAJhD,oBAAI,sBAChDA,EAA8C,sBAAI,wBAClDA,EAA+C,uBAAI,yBACnDA,EAAwC,gBAAI,qBAMrCD,EAaWroC,EAAQqoC,mBAAqBroC,EAAQqoC,iBAAmB,KAT9C,UAAI,aAIhCA,EAA+B,aAAI,gBAInCA,EAAkC,gBAAI,oBAG/BD,EAIoBpoC,EAAQooC,4BAA8BpoC,EAAQooC,0BAA4B,KAHpE,MAAI,QACrCA,EAAiC,MAAI,QACrCA,EAAgC,KAAI,Q,0BCjDxC,IAAWK,EAnBAC,EANXhoC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAM3C2mC,EAMiB1oC,EAAQ0oC,yBAA2B1oC,EAAQ0oC,uBAAyB,KALhE,IAAI,MAChCA,EAA8B,MAAI,QAClCA,EAA+B,OAAI,SACnCA,EAA8B,MAAI,QAClCA,EAA8B,MAAI,SAYP1oC,EAAQ2oC,4BAA8B3oC,EAAQ2oC,0BAA4B,KAD1D,gBAAI,oBAGxCF,EAI6BzoC,EAAQyoC,qCAAuCzoC,EAAQyoC,mCAAqC,KAHtF,MAAI,QAC9CA,EAA0C,MAAI,QAC9CA,EAAyC,KAAI,Q,qBC1BjD,IAAIG,GACJ,SAAWA,GAuIP,IAAWf,EATAC,EATAF,EATAG,EATAJ,EApBAhc,EARA+b,EARAD,EA1DA5a,GAAAA,EAqDK+b,EAAQ/b,aAAe+b,EAAQ/b,WAAa,KAjD1B,kBAAI,sBAIlCA,EAA4B,gBAAI,mBAIhCA,EAA8B,kBAAI,sBAIlCA,EAA+B,mBAAI,wBAInCA,EAA0B,cAAI,iBAI9BA,EAAgC,oBAAI,wBAIpCA,EAA6B,iBAAI,oBAIjCA,EAA0B,cAAI,iBAI9BA,EAA6B,iBAAI,oBAIjCA,EAAwB,YAAI,eAI5BA,EAAkC,sBAAI,2BAItCA,EAAiC,qBAAI,yBAIrCA,EAA+C,mCAAI,2CAM5C4a,EAGWmB,EAAQnB,mBAAqBmB,EAAQnB,iBAAmB,KAFhD,QAAI,UAC9BA,EAAyB,OAAI,UAMtBC,EAGQkB,EAAQlB,gBAAkBkB,EAAQlB,cAAgB,KAFxC,UAAI,YAC7BA,EAAuB,QAAI,WAMpB/b,EAcWid,EAAQjd,mBAAqBid,EAAQjd,iBAAmB,KAZ1C,cAAI,iBAGpCA,EAAuC,qBAAI,yBAE3CA,EAAmC,iBAAI,oBAEvCA,EAAkC,gBAAI,mBAEtCA,EAAyC,uBAAI,2BAE7CA,EAA4C,0BAAI,+BAOzCgc,EAGeiB,EAAQjB,uBAAyBiB,EAAQjB,qBAAuB,KAFvD,SAAI,WACnCA,EAAiC,WAAI,cAO9BI,EAGoBa,EAAQb,4BAA8Ba,EAAQb,0BAA4B,KAFhE,UAAI,YACzCA,EAAsC,WAAI,cAOnCH,EAGcgB,EAAQhB,sBAAwBgB,EAAQhB,oBAAsB,KAF9C,gBAAI,mBACzCA,EAAsC,iBAAI,qBAOnCE,EAGkBc,EAAQd,0BAA4Bc,EAAQd,wBAA0B,KAFhE,MAAI,QACnCA,EAAgC,OAAI,UAO7BD,EAI2Be,EAAQf,mCAAqCe,EAAQf,iCAAmC,KAHlF,MAAI,QAC5CA,EAAuC,KAAI,OAC3CA,EAAyC,OAAI,SA1IrD,CA4IGe,IAAYA,EAAU,KACzB7oC,EAAOC,QAAU4oC,G,0BC9IjB,IAAW3I,EAFXv/B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAE3Ck+B,EAsDWjgC,EAAQigC,mBAAqBjgC,EAAQigC,iBAAmB,KAjD5B,4BAAI,iCAIlDA,EAAyC,uBAAI,sBAI7CA,EAA0C,wBAAI,4BAI9CA,EAAuC,qBAAI,yBAI3CA,EAA4C,0BAAI,8BAIhDA,EAAwC,sBAAI,0BAI5CA,EAAgC,cAAI,iBAIpCA,EAAmC,iBAAI,oBAIvCA,EAAiC,eAAI,mBAIrCA,EAAsC,oBAAI,uBAI1CA,EAAoC,kBAAI,sBAIxCA,EAA8B,YAAI,eAIlCA,EAA0B,QAAI,W,8BCvDlC,IAeI2I,EAfAC,EAAY5lC,MAAQA,KAAK4lC,UAAa,WAStC,OARAA,EAAWnoC,OAAOC,QAAU,SAASmoC,GACjC,IAAK,IAAI3Y,EAAG/iB,EAAI,EAAG2d,EAAI5nB,UAAUC,OAAQgK,EAAI2d,EAAG3d,IAE5C,IAAK,IAAIge,KADT+E,EAAIhtB,UAAUiK,GACO1M,OAAOiB,UAAUoR,eAAezQ,KAAK6tB,EAAG/E,KACzD0d,EAAE1d,GAAK+E,EAAE/E,IAEjB,OAAO0d,GAEJD,EAAS/2B,MAAM7O,KAAME,aAOhC,SAAWylC,GACP,IA8CIG,EA0SOC,EAbAC,EAXAC,EALAC,EANAlR,EATAmR,EAlBAC,EAXAC,EATAC,EAlBAC,EAZAC,EAdAC,EAhBAC,EAVAC,EAVAC,EATAC,EA7CAC,EApBAC,EANA5E,EAZA6E,EApBAC,EAbAC,EA5BAC,EAXAC,EALAC,EANAC,EANAC,GAAAA,EAIc5B,EAAQ4B,sBAAwB5B,EAAQ4B,oBAAsB,KAHtD,QAAI,UACjCA,EAA8B,SAAI,WAClCA,EAA+B,UAAI,cAG5BD,EAIS3B,EAAQ2B,iBAAmB3B,EAAQ2B,eAAiB,KAH/C,KAAI,OACzBA,EAAsB,MAAI,QAC1BA,EAAqB,KAAI,QAGlBD,EAGK1B,EAAQ0B,aAAe1B,EAAQ0B,WAAa,KAFnC,SAAI,WACzBA,EAAuB,WAAI,cAGpBD,EAMOzB,EAAQyB,eAAiBzB,EAAQyB,aAAe,KALjC,eAAI,0BACjCA,EAAwB,UAAI,oBAC5BA,EAAsB,QAAI,kBAC1BA,EAAyB,WAAI,sBAC7BA,EAA6B,eAAI,2BAM1BD,EAYcxB,EAAQwB,sBAAwBxB,EAAQwB,oBAAsB,KAXxD,MAAI,QAC/BA,EAA+B,UAAI,YACnCA,EAAiC,YAAI,eACrCA,EAAsC,iBAAI,oBAC1CA,EAAgC,WAAI,cACpCA,EAA4B,OAAI,SAChCA,EAA2B,MAAI,QAC/BA,EAA0B,KAAI,OAC9BA,EAA2B,MAAI,QAC/BA,EAA6B,QAAI,WACjCA,EAA+B,UAAI,YAOvC,SAAWrB,GAEPA,EAAoC,KAAI,OAExCA,EAAoC,KAAI,OAJ5C,CAKGA,EAAgCH,EAAQG,gCAAkCH,EAAQG,8BAAgC,MAK1GoB,EAQGvB,EAAQuB,WAAavB,EAAQuB,SAAW,KAPjC,OAAI,SACrBA,EAAc,IAAI,MAClBA,EAAgB,MAAI,QACpBA,EAAe,KAAI,OACnBA,EAAe,KAAI,OACnBA,EAAmB,SAAI,YACvBA,EAAkB,QAAI,WAMfD,EAegBtB,EAAQsB,wBAA0BtB,EAAQsB,sBAAwB,KAb5D,MAAI,QAEjCA,EAA+B,QAAI,UAEnCA,EAAyC,kBAAI,sBAE7CA,EAAwC,iBAAI,qBAE5CA,EAAuC,gBAAI,mBAE3CA,EAAmC,YAAI,eAEvCA,EAAmC,YAAI,gBAMhCD,EAOQrB,EAAQqB,gBAAkBrB,EAAQqB,cAAgB,KAN7C,KAAI,OACxBA,EAAqB,MAAI,SACzBA,EAAoB,KAAI,OACxBA,EAAqB,MAAI,SACzBA,EAAuB,QAAI,UAC3BA,EAAsB,OAAI,WAMnB7E,EAIMwD,EAAQxD,cAAgBwD,EAAQxD,YAAc,KAHvC,OAAI,SACxBA,EAAmB,MAAI,QACvBA,EAAsB,SAAI,YAGnB4E,EAeOpB,EAAQoB,eAAiBpB,EAAQoB,aAAe,KAdzC,OAAI,SACzBA,EAAkB,IAAI,MACtBA,EAAmB,KAAI,OACvBA,EAAqB,OAAI,SACzBA,EAAwB,UAAI,aAC5BA,EAA4B,cAAI,iBAChCA,EAAoB,MAAI,QACxBA,EAAmB,KAAI,OACvBA,EAAoB,MAAI,QACxBA,EAAqB,OAAI,SACzBA,EAAsB,QAAI,UAC1BA,EAAoB,MAAI,QACxBA,EAAmB,KAAI,OACvBA,EAAoB,MAAI,SAMjBD,EAwCenB,EAAQmB,uBAAyBnB,EAAQmB,qBAAuB,KAvC5D,IAAI,MAC9BA,EAA0B,IAAI,MAC9BA,EAA0B,IAAI,MAC9BA,EAA0B,IAAI,MAC9BA,EAA4B,MAAI,QAChCA,EAA6B,OAAI,SACjCA,EAA0B,IAAI,MAC9BA,EAA2B,KAAI,OAC/BA,EAA4B,MAAI,QAChCA,EAA6B,OAAI,SACjCA,EAA6B,OAAI,SACjCA,EAA2B,KAAI,OAC/BA,EAA2B,KAAI,OAC/BA,EAA2B,KAAI,OAC/BA,EAA0B,IAAI,MAC9BA,EAA4B,MAAI,QAChCA,EAA0B,IAAI,MAC9BA,EAA2B,KAAI,OAC/BA,EAA6B,OAAI,SACjCA,EAA6B,OAAI,SACjCA,EAA2B,KAAI,OAC/BA,EAA8B,QAAI,UAClCA,EAAgC,UAAI,aACpCA,EAA0B,IAAI,MAC9BA,EAA0B,IAAI,MAC9BA,EAAgC,UAAI,aACpCA,EAA+B,SAAI,YACnCA,EAAiC,WAAI,cACrCA,EAAgC,UAAI,aACpCA,EAA+B,SAAI,YACnCA,EAAgC,UAAI,aACpCA,EAAkC,YAAI,eACtCA,EAAkC,YAAI,eACtCA,EAA6B,OAAI,SACjCA,EAA6B,OAAI,SACjCA,EAA+B,SAAI,WACnCA,EAA+B,SAAI,WACnCA,EAA4B,MAAI,SAChCA,EAA2B,KAAI,QAMxBD,EAIQlB,EAAQkB,gBAAkBlB,EAAQkB,cAAgB,KAHxC,UAAI,YAC7BA,EAAuB,QAAI,UAC3BA,EAAuB,QAAI,WAMpBD,EAKKjB,EAAQiB,aAAejB,EAAQiB,WAAa,KAJhC,YAAI,cAC5BA,EAAkB,MAAI,QACtBA,EAAyB,aAAI,eAC7BA,EAAyB,aAAI,iBAMtBD,EAKWhB,EAAQgB,mBAAqBhB,EAAQgB,iBAAmB,KAJpD,IAAI,MAC1BA,EAAsB,IAAI,MAC1BA,EAA0B,QAAI,UAC9BA,EAAyB,OAAI,UAMtBD,EAUWf,EAAQe,mBAAqBf,EAAQe,iBAAmB,KAL/C,SAAI,WAI/BA,EAA2B,SAAI,YAOxBD,EAIWd,EAAQc,mBAAqBd,EAAQc,iBAAmB,KAH7C,WAAI,cACjCA,EAAgC,cAAI,kBACpCA,EAA4B,UAAI,cAWzBD,EAOkBb,EAAQa,0BAA4Bb,EAAQa,wBAA0B,KAL5D,UAAI,aAEvCA,EAA0C,iBAAI,qBAE9CA,EAA6C,oBAAI,yBAM1CD,EAYGZ,EAAQY,WAAaZ,EAAQY,SAAW,KAXpC,IAAI,MAClBA,EAAe,KAAI,OACnBA,EAAe,KAAI,OACnBA,EAAiB,OAAI,SACrBA,EAAiB,OAAI,SACrBA,EAAgB,MAAI,QACpBA,EAAe,KAAI,OACnBA,EAAc,IAAI,MAClBA,EAAc,IAAI,MAClBA,EAAmB,SAAI,YACvBA,EAAkB,QAAI,WAOfD,EAIaX,EAAQW,qBAAuBX,EAAQW,mBAAqB,KAHxD,IAAI,MAC5BA,EAAyB,KAAI,OAC7BA,EAA0B,MAAI,SAMvBD,EASKV,EAAQU,aAAeV,EAAQU,WAAa,KARtC,MAAI,QACtBA,EAAqB,SAAI,WACzBA,EAAmB,OAAI,SACvBA,EAAkB,MAAI,QACtBA,EAAiB,KAAI,OACrBA,EAAkB,MAAI,QACtBA,EAAoB,QAAI,UACxBA,EAAoB,QAAI,WAGjBD,EAaaT,EAAQS,qBAAuBT,EAAQS,mBAAqB,KAZ/C,aAAI,gBACrCA,EAA+B,WAAI,aACnCA,EAAsC,kBAAI,qBAC1CA,EAAmC,eAAI,mBACvCA,EAAyB,KAAI,OAC7BA,EAA+B,WAAI,aACnCA,EAAkC,cAAI,iBACtCA,EAA6B,SAAI,YACjCA,EAAuC,mBAAI,uBAC3CA,EAAuC,mBAAI,wBAC3CA,EAA8B,UAAI,aAClCA,EAA8B,UAAI,aAM3BD,EAIcR,EAAQQ,sBAAwBR,EAAQQ,oBAAsB,KAHtD,QAAI,iBACjCA,EAAyB,IAAI,aAC7BA,EAA4B,OAAI,iBAMzBnR,EAII2Q,EAAQ3Q,YAAc2Q,EAAQ3Q,UAAY,KAHhC,UAAI,YACzBA,EAAiB,MAAI,QACrBA,EAAqB,UAAI,aAGlBkR,EAGQP,EAAQO,gBAAkBP,EAAQO,cAAgB,KAFvC,WAAI,aAC9BA,EAA0B,WAAI,cAGvBD,EAKaN,EAAQM,qBAAuBN,EAAQM,mBAAqB,KAJrD,OAAI,SAC/BA,EAAgC,YAAI,cACpCA,EAAgC,YAAI,cACpCA,EAA+B,WAAI,cAO5BD,EAOUL,EAAQK,kBAAoBL,EAAQK,gBAAkB,KALjD,KAAI,OAE1BA,EAAwB,OAAI,SAE5BA,EAAsB,KAAI,QAOnBD,EAK0BJ,EAAQI,kCAAoCJ,EAAQI,gCAAkC,KAJ1E,YAAI,eACjDA,EAA8C,aAAI,gBAClDA,EAA8C,aAAI,gBAClDA,EAAiD,gBAAI,mBAEzDJ,EAAQ6B,mBAAqB5B,EAAS,GAAIE,GA/V9C,CAgWGH,IAAYA,EAAU,KACzB7oC,EAAOC,QAAU4oC,G,4BC7WjBloC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAHtD,SAAkBilC,GACd,IAAK,IAAI5b,KAAK4b,EAAQhnC,EAAQ+S,eAAeqY,KAAIprB,EAAQorB,GAAK4b,EAAE5b,IAGpE2b,CAAS,EAAQ,OACjB,IAAIS,EAAY,EAAQ,MACxBxnC,EAAQwqC,oBAAsBhD,EAAUgD,oBACxCxqC,EAAQuqC,eAAiB/C,EAAU+C,eACnCvqC,EAAQqqC,aAAe7C,EAAU6C,aACjCrqC,EAAQsqC,WAAa9C,EAAU8C,WAC/BtqC,EAAQkqC,sBAAwB1C,EAAU0C,sBAC1ClqC,EAAQoqC,oBAAsB5C,EAAU4C,oBACxCpqC,EAAQ+oC,8BAAgCvB,EAAUuB,8BAClD/oC,EAAQmqC,SAAW3C,EAAU2C,SAC7BnqC,EAAQiqC,cAAgBzC,EAAUyC,cAClCjqC,EAAQolC,YAAcoC,EAAUpC,YAChCplC,EAAQgqC,aAAexC,EAAUwC,aACjChqC,EAAQ+pC,qBAAuBvC,EAAUuC,qBACzC/pC,EAAQ8pC,cAAgBtC,EAAUsC,cAClC9pC,EAAQ2pC,iBAAmBnC,EAAUmC,iBACrC3pC,EAAQ0pC,iBAAmBlC,EAAUkC,iBACrC1pC,EAAQ6pC,WAAarC,EAAUqC,WAC/B7pC,EAAQ4pC,iBAAmBpC,EAAUoC,iBACrC5pC,EAAQgpC,gCAAkCxB,EAAUwB,gCACpDhpC,EAAQypC,wBAA0BjC,EAAUiC,wBAC5CzpC,EAAQwpC,SAAWhC,EAAUgC,SAC7BxpC,EAAQupC,mBAAqB/B,EAAU+B,mBACvCvpC,EAAQspC,WAAa9B,EAAU8B,WAC/BtpC,EAAQqpC,mBAAqB7B,EAAU6B,mBACvCrpC,EAAQipC,gBAAkBzB,EAAUyB,gBACpCjpC,EAAQopC,oBAAsB5B,EAAU4B,oBACxCppC,EAAQi4B,UAAYuP,EAAUvP,UAC9Bj4B,EAAQmpC,cAAgB3B,EAAU2B,cAClCnpC,EAAQkpC,mBAAqB1B,EAAU0B,mBACvClpC,EAAQyqC,mBAAqBjD,EAAUiD,oB,4BC9BvC,SAAS1D,EAASC,GACd,IAAK,IAAI5b,KAAK4b,EAAQhnC,EAAQ+S,eAAeqY,KAAIprB,EAAQorB,GAAK4b,EAAE5b,IAEpE1qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAEtD,EAAQ,MACR,EAAQ,MACR,EAAQ,IAIR,IAAI2oC,EAA0B,EAAQ,MACtC1qC,EAAQwyB,0BAA4BkY,EACpC3D,EAAS,EAAQ,OACjBA,EAAS,EAAQ,OACjBA,EAAS,EAAQ,OACjBA,EAAS,EAAQ,OACjBA,EAAS,EAAQ,OACjBA,EAAS,EAAQ,MACjBA,EAAS,EAAQ,OACjBA,EAAS,EAAQ,MACjBA,EAAS,EAAQ,OACjBA,EAAS,EAAQ,MACjBA,EAAS,EAAQ,OACjBA,EAAS,EAAQ,OAGjB/mC,EAAQ2qC,kBAAoB,CACxBhX,MAAO,EACPC,MAAO,EACPC,IAAK,I,4BCnCTnzB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIklC,EAAU,EAAQ,MAClB2D,EAAmC,WACnC,SAASA,KAkHT,OAhHAA,EAAkBC,UAAY,SAAUC,GAMpC,OAAIA,EAAc1nC,OAAS,GAA0B,MAArB0nC,EAAc,IAA0D,MAA5CA,EAAcA,EAAc1nC,OAAS,IAMrGwnC,EAAkBG,aAAe,SAAUC,GAEvC,IAAIC,EAAoBD,EAAc50B,cACtC,MAA6B,SAAtB60B,GAAsD,UAAtBA,EAAgChoC,KAAKioC,sBAA8C,SAAtBD,GAGxGL,EAAkBO,YAAc,SAAUL,GACtC,IAAI/oC,EAAQ1B,OAAOyqC,GACnB,OAAOvqC,MAAMwB,GAASkB,KAAKioC,sBAAwBnpC,GAEvD6oC,EAAkBQ,UAAY,SAAUC,GAIpC,IAAItpC,EAAQ,IAAI0oB,KAAK4gB,GACrB,OAAOhrC,OAAOE,MAAMwB,EAAM2oB,WAAa,KAAO3oB,GAElD6oC,EAAkBU,cAAgB,SAAUD,GAKxC,IAAIE,EAAsBF,EAAatjC,QAAQ,IAAK,KAAK0S,OAAO,KAC5D1Y,EAAQ,IAAI0oB,KAAK8gB,GACrB,OAAOlrC,OAAOE,MAAMwB,EAAM2oB,WAAa,KAAO3oB,GAGlD6oC,EAAkBY,4BAA8B,SAAUV,EAAejhC,GASrE,GAAIihC,MAAAA,EAAJ,CAGA,GAAI7nC,KAAK4nC,UAAUC,GACf,OAAOA,EAEX,OAAQjhC,GACJ,KAAKo9B,EAAQkD,SAASsB,KAClB,OAAOxoC,KAAK8nC,aAAaD,GAC7B,KAAK7D,EAAQkD,SAASuB,IACtB,KAAKzE,EAAQkD,SAASwB,MAIlB,OAAO1oC,KAAKkoC,YAAYL,GAC5B,KAAK7D,EAAQkD,SAAS1f,KAGlB,OAAyC,OAAlCxnB,KAAKmoC,UAAUN,GAA0B7nC,KAAKioC,sBAAwBJ,EACjF,KAAK7D,EAAQkD,SAASyB,SAGlB,OAA6C,OAAtC3oC,KAAKqoC,cAAcR,GAA0B7nC,KAAKioC,sBAAwBJ,EACrF,KAAK7D,EAAQkD,SAAS0B,QACtB,KAAK5E,EAAQkD,SAAS9oC,OACtB,QACI,OAAOypC,KAInBF,EAAkBkB,0BAA4B,SAAU/pC,EAAO8H,GAM3D,GAAI9H,MAAAA,EACA,OAAO,KAEX,OAAQ8H,GACJ,KAAKo9B,EAAQkD,SAASsB,KAEtB,KAAKxE,EAAQkD,SAASuB,IACtB,KAAKzE,EAAQkD,SAASwB,MAClB,MAAwB,iBAAV5pC,EAAqB,KAAOA,EAC9C,KAAKklC,EAAQkD,SAAS1f,KAElB,OAAOxnB,KAAKmoC,UAAUrpC,GAC1B,KAAKklC,EAAQkD,SAASyB,SAElB,OAAO3oC,KAAKqoC,cAAcvpC,GAC9B,KAAKklC,EAAQkD,SAAS9oC,OAClB,OAAO4B,KAAK4nC,UAAU9oC,GAAS,KAAOA,EAC1C,KAAKklC,EAAQkD,SAAS0B,QACtB,QACI,OAAO9pC,IAInB6oC,EAAkBmB,gCAAkC,SAAUhqC,EAAO8H,GAEjE,OAAO5G,KAAK6oC,0BAA0B7oC,KAAKuoC,4BAA4BzpC,EAAO8H,GAAOA,IAEzF+gC,EAAkBM,sBAAwB,SACnCN,EAnH2B,GAqHtC5qC,EAAQ4qC,kBAAoBA,G,0BC8J5B,IAAWoB,EAVAC,EAPA/F,EA9BA+D,EAVAJ,EAjBAL,EAVAR,EATAkD,EATA9C,EARAO,EATAD,EAdAyC,EANAC,EANAnU,EAPA2R,EATAE,EA1CAC,EAZAld,EAPAwf,EANAjH,EAVA+E,EAdAC,EALAE,EANAgC,EANA5E,EANAD,EAFX/mC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAE3C0lC,EAIWznC,EAAQynC,mBAAqBznC,EAAQynC,iBAAmB,KAHhD,QAAI,UAC9BA,EAAyB,OAAI,SAC7BA,EAA0B,QAAI,WAGvBC,EAIQ1nC,EAAQ0nC,gBAAkB1nC,EAAQ0nC,cAAgB,KAHxC,UAAI,YAC7BA,EAAuB,QAAI,UAC3BA,EAAuB,QAAI,WAGpB4E,EAIOtsC,EAAQssC,eAAiBtsC,EAAQssC,aAAe,KAH3C,KAAI,OACvBA,EAAoB,MAAI,QACxBA,EAAmB,KAAI,QAGhBhC,EAGKtqC,EAAQsqC,aAAetqC,EAAQsqC,WAAa,KAFnC,SAAI,WACzBA,EAAuB,WAAI,cAGpBF,EAYcpqC,EAAQoqC,sBAAwBpqC,EAAQoqC,oBAAsB,KAXxD,MAAI,QAC/BA,EAA+B,UAAI,YACnCA,EAAiC,YAAI,eACrCA,EAAsC,iBAAI,oBAC1CA,EAAgC,WAAI,cACpCA,EAA4B,OAAI,SAChCA,EAA2B,MAAI,QAC/BA,EAA0B,KAAI,OAC9BA,EAA2B,MAAI,QAC/BA,EAA6B,QAAI,WACjCA,EAA+B,UAAI,aAG5BD,EAQGnqC,EAAQmqC,WAAanqC,EAAQmqC,SAAW,KAPjC,OAAI,SACrBA,EAAc,IAAI,MAClBA,EAAgB,MAAI,QACpBA,EAAe,KAAI,OACnBA,EAAe,KAAI,OACnBA,EAAmB,SAAI,YACvBA,EAAkB,QAAI,WAGf/E,EAIMplC,EAAQolC,cAAgBplC,EAAQolC,YAAc,KAHvC,OAAI,SACxBA,EAAmB,MAAI,QACvBA,EAAsB,SAAI,YAGnBiH,EAKUrsC,EAAQqsC,kBAAoBrsC,EAAQqsC,gBAAkB,KAJ/C,OAAI,SAC5BA,EAAwB,OAAI,SAC5BA,EAAsB,KAAI,OAC1BA,EAAyB,QAAI,WAGtBxf,EAUK7sB,EAAQ6sB,aAAe7sB,EAAQ6sB,WAAa,KATvB,qBAAI,uBACrCA,EAA2B,eAAI,iBAC/BA,EAAiC,qBAAI,uBACrCA,EAA8B,kBAAI,oBAClCA,EAA8B,kBAAI,oBAClCA,EAAqC,yBAAI,2BACzCA,EAAmC,uBAAI,yBACvCA,EAA6B,iBAAI,mBACjCA,EAA4B,gBAAI,mBAGzBkd,EAwCe/pC,EAAQ+pC,uBAAyB/pC,EAAQ+pC,qBAAuB,KAvC5D,IAAI,MAC9BA,EAA0B,IAAI,MAC9BA,EAA0B,IAAI,MAC9BA,EAA0B,IAAI,MAC9BA,EAA4B,MAAI,QAChCA,EAA6B,OAAI,SACjCA,EAA0B,IAAI,MAC9BA,EAA2B,KAAI,OAC/BA,EAA4B,MAAI,QAChCA,EAA6B,OAAI,SACjCA,EAA6B,OAAI,SACjCA,EAA2B,KAAI,OAC/BA,EAA2B,KAAI,OAC/BA,EAA2B,KAAI,OAC/BA,EAA0B,IAAI,MAC9BA,EAA4B,MAAI,QAChCA,EAA0B,IAAI,MAC9BA,EAA2B,KAAI,OAC/BA,EAA6B,OAAI,SACjCA,EAA6B,OAAI,SACjCA,EAA2B,KAAI,OAC/BA,EAA8B,QAAI,UAClCA,EAAgC,UAAI,aACpCA,EAA0B,IAAI,MAC9BA,EAA0B,IAAI,MAC9BA,EAAgC,UAAI,aACpCA,EAA+B,SAAI,YACnCA,EAAiC,WAAI,cACrCA,EAAgC,UAAI,aACpCA,EAA+B,SAAI,YACnCA,EAAgC,UAAI,aACpCA,EAAkC,YAAI,eACtCA,EAAkC,YAAI,eACtCA,EAA6B,OAAI,SACjCA,EAA6B,OAAI,SACjCA,EAA+B,SAAI,WACnCA,EAA+B,SAAI,WACnCA,EAA4B,MAAI,SAChCA,EAA2B,KAAI,QAGxBD,EAIQ9pC,EAAQ8pC,gBAAkB9pC,EAAQ8pC,cAAgB,KAHxC,UAAI,YAC7BA,EAAuB,QAAI,UAC3BA,EAAuB,QAAI,WAMpBF,EAKW5pC,EAAQ4pC,mBAAqB5pC,EAAQ4pC,iBAAmB,KAJpD,IAAI,MAC1BA,EAAsB,IAAI,MAC1BA,EAA0B,QAAI,UAC9BA,EAAyB,OAAI,UAGtB3R,EAIIj4B,EAAQi4B,YAAcj4B,EAAQi4B,UAAY,KAHhC,UAAI,YACzBA,EAAiB,MAAI,QACrBA,EAAqB,UAAI,aAGlBmU,EAIgBpsC,EAAQosC,wBAA0BpsC,EAAQosC,sBAAwB,KAH9D,IAAI,MAC/BA,EAA4B,KAAI,OAChCA,EAA6B,MAAI,SAG1BD,EASSnsC,EAAQmsC,iBAAmBnsC,EAAQmsC,eAAiB,KAR9C,MAAI,QAC1BA,EAAyB,SAAI,WAC7BA,EAAuB,OAAI,SAC3BA,EAAsB,MAAI,QAC1BA,EAAqB,KAAI,OACzBA,EAAsB,MAAI,QAC1BA,EAAwB,QAAI,UAC5BA,EAAwB,QAAI,WAMrBzC,EAIW1pC,EAAQ0pC,mBAAqB1pC,EAAQ0pC,iBAAmB,KAH7C,WAAI,aACjCA,EAAgC,cAAI,gBACpCA,EAA4B,UAAI,aAMzBC,EAGW3pC,EAAQ2pC,mBAAqB3pC,EAAQ2pC,iBAAmB,KAF/C,SAAI,WAC/BA,EAA2B,SAAI,YAMxBP,EAIcppC,EAAQopC,sBAAwBppC,EAAQopC,oBAAsB,KAHtD,QAAI,iBACjCA,EAAyB,IAAI,aAC7BA,EAA4B,OAAI,iBAMzB8C,EAIqBlsC,EAAQksC,6BAA+BlsC,EAAQksC,2BAA6B,KAHhE,YAAI,eAC5CA,EAA2C,eAAI,mBAC/CA,EAAuC,WAAI,eAMpClD,EAK0BhpC,EAAQgpC,kCAAoChpC,EAAQgpC,gCAAkC,KAJ1E,YAAI,eACjDA,EAA8C,aAAI,gBAClDA,EAA8C,aAAI,gBAClDA,EAAiD,gBAAI,oBAM9CQ,EAYGxpC,EAAQwpC,WAAaxpC,EAAQwpC,SAAW,KAXpC,IAAI,MAClBA,EAAe,KAAI,OACnBA,EAAe,KAAI,OACnBA,EAAiB,OAAI,SACrBA,EAAiB,OAAI,SACrBA,EAAgB,MAAI,QACpBA,EAAe,KAAI,OACnBA,EAAc,IAAI,MAClBA,EAAc,IAAI,MAClBA,EAAmB,SAAI,YACvBA,EAAkB,QAAI,WAMfK,EAKK7pC,EAAQ6pC,aAAe7pC,EAAQ6pC,WAAa,KAJhC,YAAI,cAC5BA,EAAkB,MAAI,QACtBA,EAAyB,aAAI,eAC7BA,EAAyB,aAAI,gBAMtBI,EAyBQjqC,EAAQiqC,gBAAkBjqC,EAAQiqC,cAAgB,KArB7C,KAAI,OAIxBA,EAAqB,MAAI,QAIzBA,EAAoB,KAAI,OAIxBA,EAAqB,MAAI,QAIzBA,EAAuB,QAAI,UAI3BA,EAAsB,OAAI,UAMnB/D,EAIgBlmC,EAAQkmC,wBAA0BlmC,EAAQkmC,sBAAwB,KAHhD,kBAAI,sBAC7CA,EAAqC,cAAI,iBACzCA,EAA+B,QAAI,WAI5B+F,EAImBjsC,EAAQisC,2BAA6BjsC,EAAQisC,yBAA2B,KAF1D,cAAI,2BAC5CA,EAA6C,mBAAI,4BAO1CD,EAIiBhsC,EAAQgsC,yBAA2BhsC,EAAQgsC,uBAAyB,KAHnD,iBAAI,qBAC7CA,EAA4C,oBAAI,wBAChDA,EAAiD,yBAAI,+B,0BCtRzD,IAAWvV,EAFX/1B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAE3C00B,EA2BSz2B,EAAQy2B,iBAAmBz2B,EAAQy2B,eAAiB,KA1BvB,6BAAI,mCACjDA,EAAiC,iBAAI,qBACrCA,EAAkC,kBAAI,sBACtCA,EAAgC,gBAAI,oBACpCA,EAAqC,qBAAI,0BACzCA,EAAkC,kBAAI,sBACtCA,EAAuC,uBAAI,2BAC3CA,EAAkC,kBAAI,sBACtCA,EAA2C,2BAAI,iCAC/CA,EAAsC,sBAAI,0BAC1CA,EAA8B,cAAI,iBAClCA,EAAkC,kBAAI,uBACtCA,EAAiC,iBAAI,oBACrCA,EAAqC,qBAAI,yBACzCA,EAAgC,gBAAI,mBACpCA,EAA2C,2BAAI,+BAC/CA,EAAoC,oBAAI,wBACxCA,EAA+B,eAAI,kBACnCA,EAAmC,mBAAI,uBACvCA,EAAqC,qBAAI,0BACzCA,EAA0C,0BAAI,8BAC9CA,EAAkC,kBAAI,qBACtCA,EAAoC,oBAAI,wBACxCA,EAA0B,UAAI,aAC9BA,EAA4B,YAAI,eAChCA,EAAmC,mBAAI,wB,0BCxB3C,IAAWM,EAJXr2B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAI3Cg1B,EA0HM/2B,EAAQ+2B,cAAgB/2B,EAAQ+2B,YAAc,KAzH7B,iBAAI,qBAClCA,EAAwB,WAAI,cAC5BA,EAA0B,aAAI,gBAC9BA,EAA4B,eAAI,kBAChCA,EAA+B,kBAAI,qBACnCA,EAAiC,oBAAI,wBACrCA,EAA8B,iBAAI,qBAClCA,EAAkC,qBAAI,2BACtCA,EAA4C,+BAAI,mCAChDA,EAAwB,WAAI,cAC5BA,EAAiC,oBAAI,yBACrCA,EAAgC,mBAAI,wBACpCA,EAA4B,eAAI,mBAChCA,EAA4B,eAAI,mBAChCA,EAAyB,YAAI,eAC7BA,EAAuB,UAAI,YAC3BA,EAA8B,iBAAI,oBAClCA,EAA2B,cAAI,YAC/BA,EAAkD,qCAAI,4CACtDA,EAAsD,yCAAI,iDAC1DA,EAA0B,aAAI,iBAC9BA,EAAwB,WAAI,cAC5BA,EAAwB,WAAI,cAC5BA,EAAiC,oBAAI,yBACrCA,EAA0B,aAAI,iBAC9BA,EAA4B,eAAI,mBAChCA,EAAuB,UAAI,aAC3BA,EAA6B,gBAAI,oBACjCA,EAA2B,cAAI,kBAC/BA,EAAyB,YAAI,gBAC7BA,EAAmC,sBAAI,gCACvCA,EAAwB,WAAI,cAC5BA,EAAoC,uBAAI,2BACxCA,EAAoC,uBAAI,2BACxCA,EAAqC,wBAAI,6BACzCA,EAA8B,iBAAI,0BAClCA,EAAoC,uBAAI,2BACxCA,EAAmC,sBAAI,0BACvCA,EAAkC,qBAAI,yBACtCA,EAAgC,mBAAI,uBACpCA,EAA8B,iBAAI,yBAClCA,EAA8B,iBAAI,oBAClCA,EAAmC,sBAAI,0BACvCA,EAA6B,gBAAI,oBACjCA,EAAqC,wBAAI,4BACzCA,EAAgC,mBAAI,uBACpCA,EAAyC,4BAAI,kCAC7CA,EAAgC,mBAAI,wBACpCA,EAAmB,MAAI,QACvBA,EAAqB,QAAI,WACzBA,EAAuB,UAAI,aAC3BA,EAA0B,aAAI,gBAC9BA,EAA4B,eAAI,mBAChCA,EAA4B,eAAI,mBAChCA,EAAmC,sBAAI,2BACvCA,EAA8B,iBAAI,qBAClCA,EAA0B,aAAI,gBAC9BA,EAA+B,kBAAI,uBACnCA,EAA2B,cAAI,iBAC/BA,EAA0B,aAAI,gBAC9BA,EAAoC,uBAAI,mCACxCA,EAA6B,gBAAI,mBACjCA,EAA2B,cAAI,iBAC/BA,EAA6B,gBAAI,mBACjCA,EAA+B,kBAAI,sBACnCA,EAAiC,oBAAI,yBACrCA,EAA0B,aAAI,gBAC9BA,EAAiC,oBAAI,wBACrCA,EAA2B,cAAI,iBAC/BA,EAA2B,cAAI,iBAC/BA,EAA2B,cAAI,aAC/BA,EAA+B,kBAAI,sBACnCA,EAA6B,gBAAI,mBACjCA,EAA4B,eAAI,mBAChCA,EAAkC,qBAAI,0BACtCA,EAAuB,UAAI,aAC3BA,EAAqB,QAAI,WACzBA,EAAsB,SAAI,YAC1BA,EAAuB,UAAI,aAC3BA,EAAsB,SAAI,YAC1BA,EAA0B,aAAI,iBAC9BA,EAA8B,iBAAI,oBAClCA,EAA4B,eAAI,kBAChCA,EAAgC,mBAAI,uBACpCA,EAA2B,cAAI,iBAC/BA,EAA4B,eAAI,kBAChCA,EAA4B,eAAI,kBAChCA,EAAwB,WAAI,cAC5BA,EAAgC,mBAAI,qBACpCA,EAAuC,0BAAI,iCAC3CA,EAAoB,OAAI,UACxBA,EAAyB,YAAI,eAC7BA,EAA0B,aAAI,gBAC9BA,EAAuB,UAAI,YAC3BA,EAA2B,cAAI,iBAC/BA,EAAiC,oBAAI,sBACrCA,EAA4B,eAAI,kBAChCA,EAAgC,mBAAI,uBACpCA,EAA+B,kBAAI,sBACnCA,EAAuB,UAAI,aAC3BA,EAAuB,UAAI,aAC3BA,EAA6B,gBAAI,oBACjCA,EAAiC,oBAAI,yBACrCA,EAAmB,MAAI,QACvBA,EAA6B,gBAAI,oBACjCA,EAA4B,eAAI,mBAChCA,EAA+B,kBAAI,uBACnCA,EAAyB,YAAI,eAC7BA,EAAqC,wBAAI,4BACzCA,EAAkB,KAAI,iBACtBA,EAAiC,oBAAI,wBACrCA,EAAwC,2BAAI,gCAC5CA,EAAiB,IAAI,MACrBA,EAAkC,qBAAI,2BACtCA,EAA6B,gBAAI,qBACjCA,EAAsB,SAAI,YAC1BA,EAA6B,gBAAI,oBACjCA,EAAuB,UAAI,aAC3BA,EAA2B,cAAI,iBAC/BA,EAA8B,iBAAI,oBAClCA,EAAkC,qBAAI,2B,0BCvH1C,IAAWG,EANXx2B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAM3Cm1B,EAqFCl3B,EAAQk3B,SAAWl3B,EAAQk3B,OAAS,KApFb,uBAAI,4BACnCA,EAAmC,2BAAI,gCACvCA,EAAsB,cAAI,gBAC1BA,EAA2B,mBAAI,uBAC/BA,EAA+B,uBAAI,4BACnCA,EAA+B,uBAAI,qBACnCA,EAAyB,iBAAI,eAC7BA,EAAgC,wBAAI,6BACpCA,EAAuB,eAAI,kBAC3BA,EAA6B,qBAAI,yBACjCA,EAA2B,mBAAI,uBAC/BA,EAAoB,YAAI,eACxBA,EAA2B,mBAAI,uBAC/BA,EAAoB,YAAI,eACxBA,EAAyB,iBAAI,oBAC7BA,EAAmC,2BAAI,+BACvCA,EAAsB,cAAI,iBAC1BA,EAAyB,iBAAI,oBAC7BA,EAAgC,wBAAI,6BACpCA,EAAuB,eAAI,kBAC3BA,EAAmB,WAAI,cACvBA,EAAoB,YAAI,eACxBA,EAAkB,UAAI,aACtBA,EAAyB,iBAAI,oBAC7BA,EAAsB,cAAI,iBAC1BA,EAAwB,gBAAI,oBAC5BA,EAA0B,kBAAI,uBAC9BA,EAAuB,eAAI,kBAC3BA,EAA6B,qBAAI,yBACjCA,EAA0C,kCAAI,uCAC9CA,EAAsB,cAAI,kBAC1BA,EAAuB,eAAI,mBAC3BA,EAA4B,oBAAI,wBAChCA,EAAsB,cAAI,iBAC1BA,EAA0B,kBAAI,sBAC9BA,EAAuB,eAAI,mBAC3BA,EAA2B,mBAAI,mBAC/BA,EAAiC,yBAAI,0BACrCA,EAA+B,uBAAI,6BACnCA,EAA+B,uBAAI,4BACnCA,EAAiB,SAAI,YACrBA,EAA8B,sBAAI,2BAClCA,EAAmB,WAAI,cACvBA,EAAiB,SAAI,YACrBA,EAA4B,oBAAI,wBAChCA,EAA2B,mBAAI,uBAC/BA,EAA4B,oBAAI,yBAChCA,EAAkC,0BAAI,gCACtCA,EAAyB,iBAAI,qBAC7BA,EAA8B,sBAAI,2BAClCA,EAAuB,eAAI,mBAC3BA,EAAyB,iBAAI,qBAC7BA,EAAwB,gBAAI,oBAC5BA,EAA0B,kBAAI,sBAC9BA,EAA+B,uBAAI,4BACnCA,EAAqC,6BAAI,mCACzCA,EAA4B,oBAAI,wBAChCA,EAA2B,mBAAI,qBAC/BA,EAA4B,oBAAI,uBAChCA,EAA2B,mBAAI,wBAC/BA,EAAa,KAAI,OACjBA,EAA0B,kBAAI,sBAC9BA,EAA+B,uBAAI,4BACnCA,EAAyB,iBAAI,oBAC7BA,EAAyB,iBAAI,qBAC7BA,EAA+B,uBAAI,4BACnCA,EAA2B,mBAAI,uBAC/BA,EAAwB,gBAAI,mBAC5BA,EAAyB,iBAAI,qBAC7BA,EAAuB,eAAI,kBAC3BA,EAA8B,sBAAI,0BAClCA,EAAiC,yBAAI,+BACrCA,EAAsB,cAAI,kBAC1BA,EAAqC,6BAAI,oCACzCA,EAAsB,cAAI,kBAC1BA,EAAwB,gBAAI,oBAC5BA,EAAqB,aAAI,iBACzBA,EAA0B,kBAAI,sBAC9BA,EAAc,MAAI,QAClBA,EAAuB,eAAI,mBAC3BA,EAA2B,mBAAI,uBAC/BA,EAAa,KAAI,OACjBA,EAAyB,iBAAI,qBAC7BA,EAAe,OAAI,W,yBCxFvB,IAAWqV,EAFX7rC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAE3CwqC,EAYavsC,EAAQusC,qBAAuBvsC,EAAQusC,mBAAqB,KAXtD,MAAI,QAC9BA,EAA2B,OAAI,SAC/BA,EAA8B,UAAI,YAClCA,EAA4B,QAAI,UAChCA,EAA6B,SAAI,WACjCA,EAA8B,UAAI,YAClCA,EAA0B,MAAI,WAC9BA,EAA0B,MAAI,SAC9BA,EAAuC,mBAAI,sBAC3CA,EAAuC,mBAAI,sBAC3CA,EAAwC,oBAAI,wB,0BCLhD,IAAIC,EA+OAC,EAWOC,EAlQXhsC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAStD,SAAWyqC,GACPA,EAAuB,IAAI,IAC3BA,EAA0B,OAAI,UAC9BA,EAAyB,MAAI,QAC7BA,EAA4C,yBAAI,0BAChDA,EAAyD,sCAAI,oCAC7DA,EAA0B,OAAI,SAC9BA,EAAuB,IAAI,OAC3BA,EAA8B,WAAI,aAClCA,EAA+B,YAAI,MACnCA,EAAsC,mBAAI,sBAC1CA,EAA6B,UAAI,YACjCA,EAAkC,eAAI,iBACtCA,EAA8B,WAAI,aAClCA,EAAmC,gBAAI,aACvCA,EAAwB,KAAI,OAC5BA,EAA2C,wBAAI,yBAC/CA,EAA4C,yBAAI,yBAChDA,EAAwC,qBAAI,qBAC5CA,EAA+C,4BAAI,4BACnDA,EAA2B,QAAI,UAC/BA,EAAoC,iBAAI,kBACxCA,EAA6B,UAAI,YACjCA,EAA8B,WAAI,YAClCA,EAAkC,eAAI,YACtCA,EAAgC,aAAI,UACpCA,EAA+C,4BAAI,uBACnDA,EAAmC,gBAAI,aACvCA,EAA4B,SAAI,YAChCA,EAAsC,mBAAI,qBAC1CA,EAA+C,4BAAI,sBACnDA,EAA8B,WAAI,aAClCA,EAAsC,mBAAI,mBAC1CA,EAAoC,iBAAI,UACxCA,EAA4B,SAAI,YAChCA,EAAuB,IAAI,MAC3BA,EAAgC,aAAI,eACpCA,EAAsB,GAAI,MAC1BA,EAAyB,MAAI,OAC7BA,EAAuC,oBAAI,oBAC3CA,EAAgC,aAAI,eACpCA,EAA8B,WAAI,aAClCA,EAAyB,MAAI,SAC7BA,EAAyB,MAAI,SAC7BA,EAAyB,MAAI,QAC7BA,EAA+B,YAAI,UACnCA,EAAsC,mBAAI,mBAC1CA,EAAuC,oBAAI,qBAC3CA,EAA8B,WAAI,cAClCA,EAA2C,wBAAI,2BAC/CA,EAA8C,2BAAI,2BAClDA,EAA6B,UAAI,YACjCA,EAAmC,gBAAI,mBACvCA,EAAiC,cAAI,iBACrCA,EAAmC,gBAAI,mBACvCA,EAAwC,qBAAI,wBAC5CA,EAAgC,aAAI,eACpCA,EAAsC,mBAAI,iBAC1CA,EAAyC,sBAAI,yBAC7CA,EAAwC,qBAAI,wBAC5CA,EAA2B,QAAI,UAC/BA,EAA0B,OAAI,SAC9BA,EAA2B,QAAI,UAC/BA,EAAsB,GAAI,KAC1BA,EAAsB,GAAI,KAC1BA,EAAmC,gBAAI,iBACvCA,EAAyB,MAAI,SAC7BA,EAA4B,SAAI,WAChCA,EAA6B,UAAI,YACjCA,EAAwC,qBAAI,sBAC5CA,EAAwC,qBAAI,sBAC5CA,EAA2B,QAAI,UAC/BA,EAAiC,cAAI,iBACrCA,EAA6B,UAAI,YACjCA,EAA8B,WAAI,aAClCA,EAA6B,UAAI,YACjCA,EAAwB,KAAI,OAC5BA,EAAoC,iBAAI,iBACxCA,EAAsB,GAAI,KAC1BA,EAAyB,MAAI,QAC7BA,EAA+B,YAAI,cACnCA,EAA0B,OAAI,SAC9BA,EAA6C,0BAAI,yBACjDA,EAA2B,QAAI,WAC/BA,EAAuC,oBAAI,qBAC3CA,EAAoC,iBAAI,kBACxCA,EAAwB,KAAI,QAC5BA,EAAqB,EAAI,IACzBA,EAA0B,OAAI,SAC9BA,EAAqC,kBAAI,mBACzCA,EAAoC,iBAAI,kBACxCA,EAA+C,4BAAI,2BACnDA,EAA4B,SAAI,WAChCA,EAAoC,iBAAI,iBACxCA,EAAgD,6BAAI,2BACpDA,EAA6C,0BAAI,yBACjDA,EAAsB,GAAI,KAC1BA,EAA+B,YAAI,OACnCA,EAAoD,iCAAI,gCACxDA,EAA6C,0BAAI,yBACjDA,EAAgC,aAAI,eACpCA,EAA0B,OAAI,eAC9BA,EAA2B,QAAI,WAC/BA,EAAwB,KAAI,OAC5BA,EAA6B,UAAI,YACjCA,EAA4B,SAAI,WAChCA,EAAuB,IAAI,MAC3BA,EAA4B,SAAI,WAChCA,EAAsC,mBAAI,YAC1CA,EAA8B,WAAI,cAClCA,EAAiC,cAAI,eACrCA,EAAwC,qBAAI,sBAC5CA,EAA+B,YAAI,cACnCA,EAA0B,OAAI,SAC9BA,EAA+B,YAAI,aACnCA,EAAiC,cAAI,eACrCA,EAAmC,gBAAI,iBACvCA,EAA2B,QAAI,UAC/BA,EAA2B,QAAI,SAC/BA,EAA4B,SAAI,UAChCA,EAA0B,OAAI,SAC9BA,EAA0B,OAAI,SAC9BA,EAA4B,SAAI,WAChCA,EAAwB,KAAI,OAC5BA,EAA4B,SAAI,UAChCA,EAA2B,QAAI,SAC/BA,EAAgC,aAAI,gBACpCA,EAAgC,aAAI,eACpCA,EAAgD,6BAAI,4BACpDA,EAA6B,UAAI,aACjCA,EAAqC,kBAAI,qBACzCA,EAAgC,aAAI,eACpCA,EAAwC,qBAAI,uBAC5CA,EAAgC,aAAI,eACpCA,EAA0B,OAAI,UAC9BA,EAA2B,QAAI,WAC/BA,EAAqB,EAAI,IACzBA,EAAwB,KAAI,OAC5BA,EAAmC,gBAAI,gBACvCA,EAAmC,gBAAI,gBACvCA,EAAyB,MAAI,QAC7BA,EAA6B,UAAI,YACjCA,EAA4B,SAAI,WAChCA,EAA2B,QAAI,UAC/BA,EAA+B,YAAI,cACnCA,EAA0B,OAAI,UAC9BA,EAA2B,QAAI,WAC/BA,EAAuC,oBAAI,sBAC3CA,EAA2B,QAAI,UAC/BA,EAA4B,SAAI,WAChCA,EAA0B,OAAI,UAC9BA,EAAyB,MAAI,QAC7BA,EAAqB,EAAI,IACzBA,EAA8B,WAAI,aAClCA,EAA8B,WAAI,aAClCA,EAA6C,0BAAI,6BACjDA,EAAsC,mBAAI,sBAC1CA,EAA0C,uBAAI,0BAC9CA,EAAiD,8BAAI,iCACrDA,EAA2B,QAAI,WAC/BA,EAAqC,kBAAI,qBACzCA,EAA0B,OAAI,SAC9BA,EAA8C,2BAAI,0BAClDA,EAA0B,OAAI,UAC9BA,EAA2C,wBAAI,uBAC/CA,EAAyB,MAAI,SAC7BA,EAAyB,MAAI,QAC7BA,EAAiC,cAAI,gBACrCA,EAA0B,OAAI,UAC9BA,EAAqC,kBAAI,oBACzCA,EAA4B,SAAI,WAChCA,EAA4B,SAAI,WAChCA,EAA0C,uBAAI,OAC9CA,EAAiC,cAAI,yBACrCA,EAAgC,aAAI,eACpCA,EAA4B,SAAI,WAChCA,EAA0B,OAAI,SAC9BA,EAA2B,QAAI,UAC/BA,EAAmC,gBAAI,iBACvCA,EAAiC,cAAI,eACrCA,EAA+B,YAAI,aACnCA,EAAsC,mBAAI,oBAC1CA,EAAwB,KAAI,QAC5BA,EAA0B,OAAI,SAC9BA,EAAyB,MAAI,QAC7BA,EAAsC,mBAAI,mBAC1CA,EAAiC,cAAI,iBACrCA,EAA2B,QAAI,UAC/BA,EAAkD,+BAAI,+BACtDA,EAAgC,aAAI,gBACpCA,EAAsC,mBAAI,qBAC1CA,EAAwB,KAAI,QAC5BA,EAA0B,OAAI,SAC9BA,EAA+B,YAAI,cACnCA,EAA2B,QAAI,WAC/BA,EAA2B,QAAI,WAC/BA,EAAsB,GAAI,KAC1BA,EAAuC,oBAAI,sBAC3CA,EAA4C,yBAAI,2BAChDA,EAA+B,YAAI,cACnCA,EAA6B,UAAI,YACjCA,EAAqC,kBAAI,oBACzCA,EAA6B,UAAI,YACjCA,EAA4B,SAAI,WAChCA,EAAyB,MAAI,QAC7BA,EAAgC,aAAI,cACpCA,EAA2B,QAAI,WAC/BA,EAAmC,gBAAI,kBACvCA,EAAsB,GAAI,MAC1BA,EAAqB,EAAI,IACzBA,EAAuC,oBAAI,oBAC3CA,EAA6B,UAAI,YACjCA,EAAoC,iBAAI,oBACxCA,EAAsB,GAAI,MAC1BA,EAAyB,MAAI,QAC7BA,EAAqB,EAAI,IACzBA,EAAqB,EAAI,IACzBA,EAAuB,IAAI,MAC3BA,EAA2B,QAAI,UAC/BA,EAAoC,iBAAI,mBACxCA,EAAiC,cAAI,gBACrCA,EAAmC,gBAAI,kBACvCA,EAA2B,QAAI,UAC/BA,EAAyB,MAAI,QAC7BA,EAA0B,OAAI,SAE9BA,EAAgC,aAAI,QACpCA,EAAgC,aAAI,QACpCA,EAAmC,gBAAI,WACvCA,EAAgC,aAAI,QACpCA,EAAmC,gBAAI,WACvCA,EAAgC,aAAI,QACpCA,EAAgC,aAAI,QAxOxC,CAyOGA,IAAsBA,EAAoB,KAM7C,SAAWC,GACPA,EAAoC,cAAI,eAD5C,CAGGA,IAAyBA,EAAuB,MAOxCC,EAuBS1sC,EAAQ0sC,iBAAmB1sC,EAAQ0sC,eAAiB,KArB/C,KAAI,QACzBA,EAAsB,MAAI,SAC1BA,EAAmC,mBAAI,sBACvCA,EAAmC,mBAAI,sBACvCA,EAA4B,YAAI,eAChCA,EAAwB,QAAI,WAC5BA,EAAsC,sBAAI,yBAC1CA,EAAwB,QAAI,UAC5BA,EAAuB,OAAI,SAC3BA,EAAsB,MAAI,WAC1BA,EAAsB,MAAI,SAC1BA,EAAwC,wBAAI,2BAC5CA,EAAyB,SAAI,QAC7BA,EAAwB,QAAI,WAC5BA,EAAuB,OAAI,UAC3BA,EAAkC,kBAAI,OACtCA,EAA8B,cAAI,SAClCA,EAA+B,eAAI,kBACnCA,EAAwC,wBAAI,2BAC5CA,EAA4C,4BAAI,+BAChDA,EAAgC,gBAAI,oB,2BCxRxChsC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI2mB,EAAO,EAAQ,MACfikB,EAA0B,EAAQ,MAClCC,EAA8B,EAAQ,MACtCC,EAAsB,EAAQ,MAC9BC,EAAiB,EAAQ,MAOzBC,EAAqC,WAWrC,SAASA,EAAoBC,EAAYC,EAAaC,GAClDjqC,KAAK+pC,WAAaA,EAClB/pC,KAAKgqC,YAAcA,EACnBhqC,KAAKiqC,kBAAoBA,EA2K7B,OAvKAH,EAAoBprC,UAAUwrC,eAAiB,WAC3C,IAAIzhB,EAAQzoB,KAEZ,IAAKA,KAAKmqC,mBAAoB,CAC1B,IAAIC,EAAiBpqC,KAAKqqC,kBAAkBjrC,KAAKY,MACjDA,KAAK+pC,WAAW7rB,iBAAiB,UAAWksB,GAAgB,GAC5DpqC,KAAKmqC,mBAAqB,WAAc,OAAO1hB,EAAMshB,WAAWO,oBAAoB,UAAWF,GAAgB,MAGvHN,EAAoBprC,UAAU6rC,cAAgB,WAEtCvqC,KAAKmqC,qBACLnqC,KAAKmqC,qBACLnqC,KAAKmqC,wBAAqBxrC,IAGlCmrC,EAAoBprC,UAAU8rC,4BAA8B,SAAUzmB,GAClE/jB,KAAKyqC,yBAA2B1mB,GAEpC+lB,EAAoBprC,UAAUgsC,iCAAmC,SAAU3mB,GACvE/jB,KAAK2qC,8BAAgC5mB,GAEzC+lB,EAAoBprC,UAAUksC,yBAA2B,SAAU7mB,GAC/D/jB,KAAK6qC,sBAAwB9mB,GAEjC+lB,EAAoBprC,UAAUosC,8BAAgC,SAAU/mB,GACpE/jB,KAAK+qC,2BAA6BhnB,GAEtC+lB,EAAoBprC,UAAUssC,2BAA6B,SAAUjnB,GACjE/jB,KAAKirC,wBAA0BlnB,GASnC+lB,EAAoBprC,UAAUwsC,6BAA+B,SAAUC,EAAYC,EAAmBr9B,GAClG,IAAI+R,EAAU,CACVurB,QAAS5lB,EAAKO,MACdslB,QAASzB,EAAe0B,YAAYC,WACpCJ,kBAAmBA,EACnBD,WAAYA,EACZp9B,QAASA,GAEb,OAAO/N,KAAKyrC,eAAe3rB,IAE/BgqB,EAAoBprC,UAAUgtC,sBAAwB,SAAUC,EAAQ9X,GACpE,IAAI/T,EAAU,CACVurB,QAAS5lB,EAAKO,MACdslB,QAASzB,EAAe0B,YAAYK,QACpCD,OAAQA,EACR9X,WAAYA,GAEhB,OAAO7zB,KAAKyrC,eAAe3rB,IAE/BgqB,EAAoBprC,UAAUmtC,8BAAgC,SAAUC,EAAarkC,EAAM9D,GACvF,IAAImc,EAAU,CACVurB,QAAS5lB,EAAKO,MACdslB,QAASzB,EAAe0B,YAAYQ,gBACpCD,YAAaA,EACbrkC,KAAMA,EACN9D,MAAOA,GAMX,OAJIA,IAEAmc,EAAQnc,MAAQqoC,KAAKC,MAAMD,KAAKE,UAAUvoC,KAEvC3D,KAAKyrC,eAAe3rB,IAE/BgqB,EAAoBprC,UAAUytC,2BAA6B,SAAUC,EAAgB3kC,GACjF,IAAIqY,EAAU,CACVurB,QAAS5lB,EAAKO,MACdslB,QAASzB,EAAe0B,YAAYc,aACpCD,eAAgBA,EAChB3kC,KAAMA,GAEV,OAAOzH,KAAKyrC,eAAe3rB,IAE/BgqB,EAAoBprC,UAAU4tC,kBAAoB,WAC9C,IAAIxsB,EAAU,CACVurB,QAAS5lB,EAAKO,MACdslB,QAASzB,EAAe0B,YAAYgB,IACpC/b,gBAAiBkZ,EAAwBna,2BAE7C,OAAOvvB,KAAKyrC,eAAe3rB,IAQ/BgqB,EAAoBprC,UAAU+sC,eAAiB,SAAUe,GACrD,IAAKxsC,KAAKgqC,cAAgBhqC,KAAKiqC,kBAC3B,KAAM,yDAGV,OADsB,IAAIN,EAA4B8C,0BAA0BD,EAAKxsC,KAAKgqC,YAAahqC,KAAKiqC,oBAShHH,EAAoBprC,UAAU2rC,kBAAoB,SAAU7sB,GAExD,KAAIxd,KAAKgqC,aAAexsB,EAAMxT,SAAWhK,KAAKgqC,cAIzCxsB,EAAM/V,KAAX,CAGA,IAAIqY,EAAUtC,EAAM/V,KACpB,GAAKmiC,EAAoB8C,UAAU5sB,GAInC,OAAQA,EAAQwrB,SACZ,KAAKzB,EAAe0B,YAAYC,WAC5B,IAAK5B,EAAoB+C,cAAc7sB,KAAa9f,KAAKyqC,yBACrD,OAEJzqC,KAAKyqC,yBAAyB3qB,EAAStC,EAAMxT,QAC7C,MAEJ,KAAK6/B,EAAe0B,YAAYQ,gBAC5B,IAAKnC,EAAoBgD,yBAAyB9sB,KAAa9f,KAAK2qC,8BAChE,OAEJ3qC,KAAK2qC,8BAA8B7qB,EAAStC,EAAMxT,QAClD,MAEJ,KAAK6/B,EAAe0B,YAAYK,QAC5B,IAAKhC,EAAoBiD,iBAAiB/sB,KAAa9f,KAAK6qC,sBACxD,OAEJ7qC,KAAK6qC,sBAAsB/qB,EAAStC,EAAMxT,QAC1C,MAEJ,KAAK6/B,EAAe0B,YAAYc,aAC5B,IAAKzC,EAAoBkD,sBAAsBhtB,KAAa9f,KAAK+qC,2BAC7D,OAEJ/qC,KAAK+qC,2BAA2BjrB,EAAStC,EAAMxT,QAC/C,MAEJ,KAAK6/B,EAAe0B,YAAYwB,UAC5B,IAAKnD,EAAoBoD,mBAAmBltB,KAAa9f,KAAKirC,wBAC1D,OAEJjrC,KAAKirC,wBAAwBnrB,EAAStC,EAAMxT,WAOxD8/B,EAAoBprC,UAAUuuC,eAAiB,SAAUjD,GACrDhqC,KAAKgqC,YAAcA,GAEvBF,EAAoBprC,UAAUwuC,qBAAuB,SAAUC,GAC3DntC,KAAKiqC,kBAAoBkD,GAEtBrD,EAzL6B,GA2LxC/sC,EAAQ+sC,oBAAsBA,G,0BCvM9BrsC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAKtD,IAAI2tC,EAA2C,WAO3C,SAASA,EAA0BW,EAAUC,EAASC,GAClDttC,KAAKotC,SAAWA,EAChBptC,KAAKqtC,QAAUA,EACfrtC,KAAKstC,QAAUA,EAanB,OAXA7vC,OAAOgI,eAAegnC,EAA0B/tC,UAAW,cAAe,CACtEkJ,IAAK,WACD,OAAO5H,KAAKotC,SAAS/B,SAEzBxgC,YAAY,EACZhM,cAAc,IAElB4tC,EAA0B/tC,UAAU6uC,KAAO,WAEvC,OADAvtC,KAAKqtC,QAAQ3vB,YAAY1d,KAAKotC,SAAUptC,KAAKstC,SACtCttC,MAEJysC,EAvBmC,GAyB9C1vC,EAAQ0vC,0BAA4BA,G,4BC9BpChvC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI2mB,EAAO,EAAQ,MACf+nB,EAAkB,EAAQ,MAC1B3D,EAAiB,EAAQ,MACzB4D,EAA6B,IAAIC,IAAI,CACrCF,EAAgBha,eAAema,kBAC/BH,EAAgBha,eAAeoa,2BAC/BJ,EAAgBha,eAAeqa,kBAC/BL,EAAgBha,eAAesa,uBAGnC,SAASpB,EAAUjlC,GACf,IAAKA,EACD,OAAO,EAEX,IAAIqY,EAAUrY,EACd,UAAKqY,GAAYA,EAAQurB,SAAYvrB,EAAQwrB,WAGxC7lB,EAAKE,OAAO7F,EAAQurB,UAGM,iBAApBvrB,EAAQwrB,SAGA,CACfzB,EAAe0B,YAAYK,QAC3B/B,EAAe0B,YAAYQ,gBAC3BlC,EAAe0B,YAAYC,WAC3B3B,EAAe0B,YAAYc,aAC3BxC,EAAe0B,YAAYwB,WAEd1rC,QAAQye,EAAQwrB,SAAW,GAMhD,SAASyC,EAAUC,GACf,IAAKA,EACD,OAAO,EAEX,IAAIC,EAAID,EACR,MAAiB,iBAANC,GAGU,iBAAVA,EAAErd,KAAuC,iBAAZqd,EAAEtd,OAAyC,iBAAZsd,EAAEvd,MAT7E3zB,EAAQ2vC,UAAYA,EAcpB3vC,EAAQgxC,UAAYA,EAiBpBhxC,EAAQ4vC,cAhBR,SAAuB7sB,GACnB,IAAK4sB,EAAU5sB,GACX,OAAO,EAEX,IAAIouB,EAAcpuB,EAClB,SAAIouB,EAAY5C,UAAYzB,EAAe0B,YAAYC,YAGlD0C,EAAY/C,YAAe4C,EAAUG,EAAY/C,aAGjD+C,EAAY9C,mBAAsB2C,EAAUG,EAAY9C,qBAsBjEruC,EAAQ6vC,yBAhBR,SAAkC9sB,GAC9B,IAAK4sB,EAAU5sB,GACX,OAAO,EAEX,IAAIquB,EAAYruB,EAChB,QAAIquB,EAAU7C,UAAYzB,EAAe0B,YAAYQ,kBAGhDtmB,EAAKE,OAAOwoB,EAAUrC,eAGtBqC,EAAU1mC,OAAS0mC,EAAUxqC,QAsBtC5G,EAAQ8vC,iBAhBR,SAA0B/sB,GACtB,IAAK4sB,EAAU5sB,GACX,OAAO,EAEX,IAAIsuB,EAAiBtuB,EACrB,QAAIsuB,EAAe9C,UAAYzB,EAAe0B,YAAYK,UAGrDwC,EAAeva,YAAmD,iBAA9Bua,EAAeva,aAGnDua,EAAezC,QAA2C,iBAA1ByC,EAAezC,SAsBxD5uC,EAAQ+vC,sBAhBR,SAA+BhtB,GAC3B,IAAK4sB,EAAU5sB,GACX,OAAO,EAEX,IAAIuuB,EAAsBvuB,EAC1B,QAAIuuB,EAAoB/C,UAAYzB,EAAe0B,YAAYc,eAG1DgC,EAAoB5mC,OAASgmC,EAA2B9lC,IAAI0mC,EAAoBjC,kBAGhFiC,EAAoBjC,gBAAgE,iBAAvCiC,EAAoBjC,iBAgB1ErvC,EAAQiwC,mBAVR,SAA4BltB,GACxB,QAAK4sB,EAAU5sB,IAGQA,EACFwrB,UAAYzB,EAAe0B,YAAYwB,Y,0BCxHhE,IAAWxB,EALX9tC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAK3CysC,EAOMxuC,EAAQwuC,cAAgBxuC,EAAQwuC,YAAc,KANnC,WAAI,aAC5BA,EAA0B,aAAI,eAC9BA,EAAqB,QAAI,UACzBA,EAA6B,gBAAI,mBACjCA,EAAuB,UAAI,cAC3BA,EAAiB,IAAI,S,0BCXzB9tC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAMtD,IAAIwvC,EAA0C,WAC1C,SAASA,KAcT,OAZAA,EAAyB5vC,UAAU6vC,mBAAqB,SAAUC,EAAM3a,GACpE,MAAO,CACH2a,KAAMA,EACN3a,WAAYA,IAGpBya,EAAyB5vC,UAAU+vC,uBAAyB,SAAUC,GAClE,OAAOA,GAEXJ,EAAyB5vC,UAAUiwC,sBAAwB,SAAUC,GACjE,OAAOA,GAEJN,EAfkC,GAiB7CvxC,EAAQuxC,yBAA2BA,G,0BCvBnC7wC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAUtD,IAAI+vC,EAA0C,WAU1C,SAASA,EAAyBC,EAAuBC,EAAuBC,EAA6BC,EAA+BC,GAMxI,GALAlvC,KAAK8uC,sBAAwBA,EAC7B9uC,KAAK+uC,sBAAwBA,EAC7B/uC,KAAKgvC,4BAA8BA,EACnChvC,KAAKivC,8BAAgCA,EACrCjvC,KAAKkvC,mCAAqCA,EACtClvC,KAAK8uC,sBAAwB9uC,KAAK+uC,sBAClC,MAAM,IAAI7pC,MAAM,2CAA6ClF,KAAK8uC,sBAAwB,QAAU9uC,KAAK+uC,uBA0CjH,OA9BAF,EAAyBM,SAAW,SAAUC,EAAiB5e,EAAiB6e,EAA4BC,EAA8BC,GACtI,OAAO,IAAIvvC,KAAKovC,EAAgB1e,MAAOF,EAAgBE,MAAO2e,EAA4BC,EAA8BC,IAE5HV,EAAyBnwC,UAAU6vC,mBAAqB,SAAUC,EAAM3a,GAGpE,IADA,IAAI2b,EAAW,CAAEhB,KAAMA,EAAM3a,WAAYA,GAChC4b,EAAK,EAAGhhB,EAAKzuB,KAAKgvC,4BAA6BS,EAAKhhB,EAAGtuB,OAAQsvC,IAEpED,GAAWE,EADcjhB,EAAGghB,IACED,EAAShB,KAAMgB,EAAS3b,YAE1D,OAAO2b,GAEXX,EAAyBnwC,UAAU+vC,uBAAyB,SAAUC,GAGlE,IADA,IAAIiB,EAAajB,EACRe,EAAK,EAAGhhB,EAAKzuB,KAAKivC,8BAA+BQ,EAAKhhB,EAAGtuB,OAAQsvC,IAEtEE,GAAaC,EADcnhB,EAAGghB,IACIE,GAEtC,OAAOA,GAEXd,EAAyBnwC,UAAUiwC,sBAAwB,SAAUC,GAGjE,IADA,IAAIe,EAAaf,EACRa,EAAK,EAAGhhB,EAAKzuB,KAAKkvC,mCAAoCO,EAAKhhB,EAAGtuB,OAAQsvC,IAE3EE,GAAaC,EADcnhB,EAAGghB,IACIE,GAEtC,OAAOA,GAEJd,EA3DkC,GA6D7C9xC,EAAQ8xC,yBAA2BA,G,4BCvEnCpxC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+wC,EAA6B,EAAQ,MACrCC,EAA6B,EAAQ,MACrCC,EAAwB,EAAQ,MAqBpC,SAASC,EAAeC,EAAKC,GACzB,OAAOD,EAAIvf,QAAUwf,EAAIxf,OAASuf,EAAItf,QAAUuf,EAAIvf,MAiDxD,SAASwf,EAAsCf,EAAiB5e,EAAiB4f,EAAUC,EAAYC,GACnG,IAAIC,EAAuBnB,EAAgB1e,MACvC8f,EAAuBpB,EAAgBze,MACvC8f,EAAuBjgB,EAAgBE,MAC3C,GAAI6f,EAAuBE,EACvB,MAAM,IAAIvrC,MAAM,8FAAgGqrC,EAAuB,yBAA2BE,GAGtK,GAAIT,EAAeZ,EAAiB5e,GAChC,OAAO,IAAIqf,EAA2BvB,yBAG1C,IAAIoC,EAAwBC,EAAsBJ,EAAsBE,EAAsBD,EAAsBJ,GAChHQ,EAA0BD,EAAsBJ,EAAsBE,EAAsBD,EAAsBH,GAClHQ,EAA+BF,EAAsBJ,EAAsBE,EAAsBD,EAAsBF,GAI3H,OAFAM,EAAwBE,UACxBD,EAA6BC,UACtBhB,EAA2BjB,yBAAyBM,SAASC,EAAiB5e,EAAiBkgB,EAAuBE,EAAyBC,GAG1J,SAASF,EAAsBJ,EAAsBE,EAAsBD,EAAsBO,GAE7F,IADA,IAAIC,EAAqB,GAChBtgB,EAAQ6f,EAAsB7f,GAAS+f,EAAsB/f,IAClE,GAAIA,KAASqgB,EAGT,IAFA,IAAIt0B,EAAQiU,IAAU6f,EAAuBC,EAAuB,EAChES,EAAsBC,EAAqBzzC,OAAOwM,KAAK8mC,EAAsBrgB,KACxEC,EAAQlU,EAAOkU,GAASsgB,EAAqBtgB,IAC9CA,KAASogB,EAAsBrgB,IAC/BsgB,EAAmBvvC,KAAKoN,MAAMmiC,EAAoBD,EAAsBrgB,GAAOC,IAK/F,OAAOqgB,EAEX,SAASE,EAAqBC,GAC1B,OAAOA,EAAc1uC,KAAI,SAAUsN,GAAK,OAAO3S,OAAO2S,MAAOqhC,QAAO,SAAUrhC,EAAGC,GAAK,OAAQD,EAAIC,EAAID,EAAIC,KA7F9GjT,EAAQs0C,gBATR,SAAyBpB,EAAKC,GAC1B,QAAID,EAAIvf,MAAQwf,EAAIxf,SAGhBuf,EAAIvf,MAAQwf,EAAIxf,OAGbuf,EAAItf,MAAQuf,EAAIvf,QAW3B5zB,EAAQizC,eAAiBA,EAOzBjzC,EAAQu0C,qBAAuB,CAC3B,EAAG,CACC,EAAG,KAGXv0C,EAAQw0C,uBAAyB,CAC7B,EAAG,CACC,EAAG,CAACxB,EAAsByB,yBAC1B,EAAG,KAGXz0C,EAAQ00C,4BAA8B,CAClC,EAAG,CACC,EAAG,GACH,GAAI,CAAC1B,EAAsB2B,4BAenC30C,EAAQ40C,uBAHR,SAAgCvC,EAAiB5e,GAC7C,OAAO2f,EAAsCf,EAAiB5e,EAAiBzzB,EAAQu0C,qBAAsBv0C,EAAQw0C,uBAAwBx0C,EAAQ00C,8BAiCzJ10C,EAAQozC,sCAAwCA,EAmBhDpzC,EAAQm0C,qBAAuBA,G,4BCjH/BzzC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI0uC,EAAkB,EAAQ,MAwB9BzwC,EAAQy0C,wBAdR,SAAiC9C,GAI7B,IAAIkD,EAAgBlD,EAAgBpuC,OAQpC,YAP6C3B,IAAzCizC,EAAczgB,wBACdygB,EAAczgB,uBAAuBqE,MAAMhzB,SAAQ,SAAUg4B,GACrDA,EAAKqX,YACLrX,EAAK9tB,KAAO8tB,EAAKqX,UAAUnlC,SAIhCgiC,GAcX3xC,EAAQ20C,yBAXR,SAAkC9C,GAG9B,GAAIA,EAAaxC,iBAAmBoB,EAAgBha,eAAe0J,qBAAsB,CACrF,IAAI4U,EAAclD,EAAannC,UACK9I,IAAhCmzC,EAAYC,kBACZD,EAAYC,gBAAkB,GAGtC,OAAOnD,I,yBCnCXnxC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAMtD,IAAIkzC,EAAkD,WAClD,SAASA,KAcT,OAZAA,EAAiCtzC,UAAUuzC,qBAAuB,SAAUzD,EAAM3a,GAC9E,MAAO,CACH2a,KAAMA,EACN3a,WAAYA,IAGpBme,EAAiCtzC,UAAUwzC,qBAAuB,SAAUxD,EAAiBF,EAAM3a,GAC/F,OAAO6a,GAEXsD,EAAiCtzC,UAAUyzC,oBAAsB,SAAUvD,GACvE,OAAOA,GAEJoD,EAf0C,GAiBrDj1C,EAAQi1C,iCAAmCA,G,0BCvB3Cv0C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAStD,IAAIszC,EAAkD,WAUlD,SAASA,EAAiCC,EAAkBC,EAAkBC,EAAmCC,EAAmCC,GAMhJ,GALAzyC,KAAKqyC,iBAAmBA,EACxBryC,KAAKsyC,iBAAmBA,EACxBtyC,KAAKuyC,kCAAoCA,EACzCvyC,KAAKwyC,kCAAoCA,EACzCxyC,KAAKyyC,iCAAmCA,EACpCzyC,KAAKqyC,iBAAiB3hB,MAAQ1wB,KAAKsyC,iBAAiB5hB,MACpD,MAAM,IAAIxrB,MAAM,2CAA6ClF,KAAKqyC,iBAAiB3hB,MAAQ,eAAiB1wB,KAAKsyC,iBAAiB5hB,OA8B1I,OA3BA0hB,EAAiC1zC,UAAUuzC,qBAAuB,SAAUzD,EAAM3a,GAG9E,IADA,IAAI8b,EAAa,CAAEnB,KAAMA,EAAM3a,WAAYA,GAClC4b,EAAK,EAAGhhB,EAAKzuB,KAAKuyC,kCAAmC9C,EAAKhhB,EAAGtuB,OAAQsvC,IAE1EE,GAAaC,EADcnhB,EAAGghB,IACIE,EAAWnB,KAAMmB,EAAW9b,YAElE,OAAO8b,GAEXyC,EAAiC1zC,UAAUwzC,qBAAuB,SAAUxD,EAAiBF,EAAM3a,GAG/F,IADA,IAAI2b,EAAWd,EACNe,EAAK,EAAGhhB,EAAKzuB,KAAKwyC,kCAAmC/C,EAAKhhB,EAAGtuB,OAAQsvC,IAE1ED,GAAWE,EADcjhB,EAAGghB,IACED,EAAUhB,EAAM3a,GAElD,OAAO2b,GAEX4C,EAAiC1zC,UAAUyzC,oBAAsB,SAAUvD,GAGvE,IADA,IAAIY,EAAWZ,EACNa,EAAK,EAAGhhB,EAAKzuB,KAAKyyC,iCAAkChD,EAAKhhB,EAAGtuB,OAAQsvC,IAEzED,GAAW2C,EADe1jB,EAAGghB,IACED,GAEnC,OAAOA,GAEJ4C,EA/C0C,GAiDrDr1C,EAAQq1C,iCAAmCA,G,4BC1D3C30C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI4zC,EAA4B,EAAQ,MACpCC,EAAqC,EAAQ,KAC7CC,EAAqC,EAAQ,MAC7CC,EAAgC,EAAQ,MA8C5C,SAASC,EAAwD1D,EAAiB5e,EAAiB6f,EAAYD,EAAU2C,GACrH,IAAIxC,EAAuBnB,EAAgB1e,MACvC+f,EAAuBjgB,EAAgBE,MACvCsiB,EAAuBxiB,EAAgBG,MAG3C,GAAI4f,EAAuBE,EACvB,MAAM,IAAIvrC,MAAM,8FAAgGqrC,EAAuB,yBAA2BE,GAEtK,GAAIF,EAAuBE,GAAwBiC,EAA0B1C,eAAeZ,EAAiB5e,GACzG,OAAO,IAAImiB,EAAmCX,iCAGlD,IAAIiB,EAA6BC,EAA8BzC,EAAsBuC,EAAsB3C,GACvG8C,EAA8BD,EAA8BzC,EAAsBuC,EAAsB5C,GACxGgD,EAA6BF,EAA8BzC,EAAsBuC,EAAsBD,GAG3G,OADAE,EAA2BnC,UACpB,IAAI8B,EAAmCR,iCAAiChD,EAAiB5e,EAAiByiB,EAA4BE,EAA6BC,GAG9K,SAASF,EAA8BzC,EAAsBuC,EAAsBjC,GAC/E,IAAIC,EAAqB,GACzB,GAAIP,KAAwBM,EAGxB,IAFA,IAAIt0B,EAAQu2B,EACR/B,EAAsByB,EAA0BxB,qBAAqBzzC,OAAOwM,KAAK8mC,EAAsBN,KAClG9f,EAAQlU,EAAOkU,GAASsgB,EAAqBtgB,IAC9CA,KAASogB,EAAsBN,IAC/BO,EAAmBvvC,KAAKoN,MAAMmiC,EAAoBD,EAAsBN,GAAsB9f,IAI1G,OAAOqgB,EAvEXj0C,EAAQs2C,kCAAoC,CACxC,EAAG,CACC,EAAG,GACH,GAAI,CAACR,EAA8BS,kCAAmCT,EAA8BU,kCAG5Gx2C,EAAQy2C,kCAAoC,CACxC,EAAG,CACC,EAAG,CAACX,EAA8BY,uBAClC,GAAI,CAACZ,EAA8Ba,kCAG3C32C,EAAQ42C,gCAAkC,CACtC,EAAG,CACC,EAAG,KAeX52C,EAAQ62C,yCAHR,SAAkDxE,EAAiB5e,GAC/D,OAAOsiB,EAAwD1D,EAAiB5e,EAAiBzzB,EAAQs2C,kCAAmCt2C,EAAQy2C,kCAAmCz2C,EAAQ42C,kCAgCnM52C,EAAQ+1C,wDAA0DA,G,4BCtElEr1C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI4qC,EAA0B,EAAQ,MA2DtC,SAASmK,EAAkBC,QAETn1C,IAAVm1C,QAA2Cn1C,IAApBm1C,EAAMC,WAA4B92C,MAAMgG,QAAQ6wC,EAAMC,YAGjFD,EAAMC,UAAUvxC,SAAQ,SAAUwxC,GAC9BA,EAAIxxC,SAAQ,SAAUyxC,EAAWC,GAC7B,IAAIp1C,EAAQm1C,EAAUn1C,MACR,OAAVA,IACAm1C,EAAUn1C,MAAQ4qC,EAAwB/B,kBAAkBY,4BAA4BzpC,EAAOg1C,EAAMK,QAAQD,GAAazY,iBAM1I,SAAS2Y,EAAiC5F,EAAM3a,GAC5C,GAAIA,EAAW6V,EAAwB5V,YAAYugB,kBAAoB3K,EAAwBV,yBAAyBsL,cACpH,MAAM,IAAIpvC,MAAM,sCAAwCspC,EAAO,KAhDvEzxC,EAAQ02C,sBAlBR,SAA+B/E,EAAiBF,EAAM3a,GAClD,IAAK6a,EACD,OAAOA,EAEX,IAAI6F,EAAyB7F,EAAgBpuC,OAC7C,QAAoC3B,IAAhC41C,EAAuB9sC,WAA2D9I,IAArC41C,EAAuBC,UAEpE,OADAX,EAAkBU,EAAuB9sC,MAClCinC,EAEX,IAAI+F,EAAwB/F,EAAgBpuC,OAC5C,YAAmC3B,IAA/B81C,EAAsBhtC,MAAsBxK,MAAMgG,QAAQwxC,EAAsBhtC,OAChFgtC,EAAsBhtC,KAAKjF,SAAQ,SAAUkyC,GACzCb,EAAkBa,MAEfhG,GAEJA,GAiBX3xC,EAAQu2C,kCAVR,SAA2C9E,EAAM3a,GAK7C,OAJI2a,IAAS9E,EAAwBzV,OAAO0gB,yBACxCP,EAAiC5F,EAAM3a,GACvC2a,EAAO9E,EAAwBzV,OAAO2gB,mBAEnC,CACHpG,KAAMA,EACN3a,WAAYA,IAkBpB92B,EAAQw2C,+BAVR,SAAwC/E,EAAM3a,GAK1C,OAJI2a,IAAS9E,EAAwBzV,OAAO4gB,sBACxCT,EAAiC5F,EAAM3a,GACvC2a,EAAO9E,EAAwBzV,OAAO6gB,mBAEnC,CACHtG,KAAMA,EACN3a,WAAYA,IAuCpB92B,EAAQ22C,+BATR,SAAwChF,EAAiBF,EAAM3a,GAO3D,OAGJ,SAA8B2a,GAC1B,OAAOA,IAAS9E,EAAwBzV,OAAO8gB,mBAV3CC,CAAqBxG,IAAS3a,EAAW6V,EAAwB5V,YAAYmhB,WAC7EvG,EAkBR,SAA6BA,EAAiBwG,GAC1C,IAAIC,EAAsBzG,EAAgBpuC,OAC1C,OAAK60C,EAAoB1tC,MAASxK,MAAMgG,QAAQkyC,EAAoB1tC,KAAKssC,YAGrEmB,EAAU,GAAKA,EAAUC,EAAoB1tC,KAAKssC,UAAU5zC,SAC5Dg1C,EAAoB1tC,KAAKssC,UAAU5zC,OAAS+0C,GAEzCxG,GALIA,EArBW0G,CAAoB1G,EAAiB7a,EAAW6V,EAAwB5V,YAAYmhB,WAW9G,SAA4BzG,GACxB,OAAQA,IAAS9E,EAAwBzV,OAAO8gB,oBAC5CvG,IAAS9E,EAAwBzV,OAAO0gB,wBACxCnG,IAAS9E,EAAwBzV,OAAO4gB,qBACxCrG,IAAS9E,EAAwBzV,OAAO6gB,mBACxCtG,IAAS9E,EAAwBzV,OAAO2gB,kBAdxCS,CAAmB7G,IAAS3a,EAAW6V,EAAwB5V,YAAYwhB,wBAC3E5G,EAyBR,SAA2BA,EAAiB6G,GACxC,GAAgC,IAA5BA,EAAiBp1C,OACjB,OAAOuuC,EAGX,IAAIyG,EAAsBzG,EAAgBpuC,OAC1C,IAAK60C,EAAoB1tC,OAASxK,MAAMgG,QAAQkyC,EAAoB1tC,KAAKssC,aAAe92C,MAAMgG,QAAQkyC,EAAoB1tC,KAAK0sC,SAC3H,OAAOzF,EAKX,IAAI8G,EAAaL,EAAoB1tC,KAAK0sC,QAAQzxC,QAAO,SAAU+yC,EAAQ90C,GACvE,OAAO40C,EAAiB1yC,MAAK,SAAU6J,GAAQ,OAAOA,IAAS+oC,EAAO/rB,gBAE1EyrB,EAAoB1tC,KAAKssC,UAAUvxC,SAAQ,SAAUwxC,EAAKrzC,GACtDw0C,EAAoB1tC,KAAKssC,UAAUpzC,GAASqzC,EAAItxC,QAAO,SAAU5D,EAAO42C,GAAc,OAA4F,IAArFF,EAAW1yC,WAAU,SAAU2yC,GAAU,OAAOA,EAAO90C,QAAU+0C,WAElK,IAAIC,EAAW,EAKf,OAJAR,EAAoB1tC,KAAK0sC,QAAUqB,EAAW/yC,KAAI,SAAUgzC,GAExD,OADAA,EAAO90C,MAAQg1C,IACRF,KAEJ/G,EAhDekH,CAAkBlH,EAAiB7a,EAAW6V,EAAwB5V,YAAYwhB,wBAEjG5G,I,4BC5FX,SAAS5K,EAASC,GACd,IAAK,IAAI5b,KAAK4b,EAAQhnC,EAAQ+S,eAAeqY,KAAIprB,EAAQorB,GAAK4b,EAAE5b,IAEpE1qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+2C,EAAe,EAAQ,MAC3B94C,EAAQ6xB,WAAainB,EAAajnB,WAClC,IAAIknB,EAAmC,EAAQ,MAC/C/4C,EAAQ+lC,+BAAiCgT,EAAiChT,+BAC1EgB,EAAS,EAAQ,MACjB,IAAIiS,EAAyB,EAAQ,MACrCh5C,EAAQi5C,qBAAuBD,EAAuBC,qBACtD,IAAIC,EAAe,EAAQ,MAC3Bl5C,EAAQ+vB,WAAampB,EAAanpB,WAClC,IAAIopB,EAAmC,EAAQ,MAC/Cn5C,EAAQ6iC,+BAAiCsW,EAAiCtW,+BAC1E,IAAIuW,EAAyB,EAAQ,MACrCp5C,EAAQi/B,qBAAuBma,EAAuBna,qBACtD,IAAIoa,EAAU,EAAQ,MACtBr5C,EAAQs5C,MAAQD,EAAQC,MACxB,IAAIC,EAAmB,EAAQ,MAC/Bv5C,EAAQw5C,eAAiBD,EAAiBC,eAC1C,IAAIC,EAAkB,EAAQ,MAC9Bz5C,EAAQw4B,cAAgBihB,EAAgBjhB,cACxC,IAAIkhB,EAAwB,EAAQ,MACpC15C,EAAQ25C,oBAAsBD,EAAsBC,oBACpD,IAAIC,EAAmB,EAAQ,MAC/B55C,EAAQ6vB,eAAiB+pB,EAAiB/pB,eAC1C,IAAIgqB,EAAkB,EAAQ,MAC9B75C,EAAQ85C,cAAgBD,EAAgBC,cACxC,IAAIC,EAAc,EAAQ,MAC1B/5C,EAAQg6C,UAAYD,EAAYC,UAChC,IAAIC,EAAkB,EAAQ,MAC9Bj6C,EAAQg4B,cAAgBiiB,EAAgBjiB,cACxC,IAAIkiB,EAA2B,EAAQ,MACvCl6C,EAAQu7B,uBAAyB2e,EAAyB3e,uBAC1D,IAAI4e,EAAc,EAAQ,MAC1Bn6C,EAAQo6C,UAAYD,EAAYC,UAChC,IAAIC,EAAmB,EAAQ,KAC/Br6C,EAAQs6C,eAAiBD,EAAiBC,eAC1C,IAAIC,EAAuB,EAAQ,MACnCv6C,EAAQw6C,mBAAqBD,EAAqBC,mBAClD,IAAIC,EAAiB,EAAQ,MAC7Bz6C,EAAQiwB,aAAewqB,EAAexqB,aACtC,IAAIyqB,EAAkB,EAAQ,KAC9B16C,EAAQ26C,cAAgBD,EAAgBC,cACxC,IAAIC,EAAU,EAAQ,MACtB56C,EAAQ66C,MAAQD,EAAQC,MACxB,IAAIC,EAA0B,EAAQ,MACtC96C,EAAQ+6C,sBAAwBD,EAAwBC,sBACxD,IAAIC,EAA4B,EAAQ,MACxCh7C,EAAQi7C,wBAA0BD,EAA0BC,wBAC5D,IAAIC,EAAgC,EAAQ,KAC5Cl7C,EAAQm7C,4BAA8BD,EAA8BC,4BACpEn7C,EAAQo7C,aAAeF,EAA8BE,aACrD,IAAIC,EAAoB,EAAQ,MAChCr7C,EAAQ+kC,gBAAkBsW,EAAkBtW,gBAC5C,IAAIuW,EAAoB,EAAQ,MAChCt7C,EAAQu7C,gBAAkBD,EAAkBC,gBAC5C,IAAIC,EAA+B,EAAQ,MAC3Cx7C,EAAQy7C,2BAA6BD,EAA6BC,2BAClE1U,EAAS,EAAQ,OACjBA,EAAS,EAAQ,OACjB,IAAI2U,EAAiB,EAAQ,MAC7B17C,EAAQ4sB,aAAe8uB,EAAe9uB,aACtC,IAAI+uB,EAAa,EAAQ,MACzB37C,EAAQ47C,SAAWD,EAAWC,SAC9B,IAAIC,EAAiB,EAAQ,KAC7B77C,EAAQy6B,aAAeohB,EAAephB,aACtC,IAAIqhB,EAAe,EAAQ,KAC3B97C,EAAQ+7C,WAAaD,EAAaC,WAClC,IAAIC,EAAkB,EAAQ,MAC9Bh8C,EAAQi8C,cAAgBD,EAAgBC,cACxC,IAAIC,EAAmC,EAAQ,KAC/Cl8C,EAAQ8zB,+BAAiCooB,EAAiCpoB,gC,4BC1E1EpzB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIi6C,EAAkB,EAAQ,MAI1BnqB,EAA4B,WAC5B,SAASA,KAeT,OAbAnxB,OAAOgI,eAAempB,EAAY,WAAY,CAI1ChnB,IAAK,WACD,OAAOgnB,EAAWsqB,WAEtBruC,YAAY,EACZhM,cAAc,IAElB+vB,EAAWuqB,iBAAmB,SAAUC,EAAWzqB,GAC/CC,EAAWsqB,UAAY,IAAIH,EAAgBC,cAAcI,EAAWzqB,IAEjEC,EAhBoB,GAkB/B7xB,EAAQ6xB,WAAaA,G,0BCvBrBnxB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAKtD,IAAIu6C,EAAmC,WACnC,SAASA,EAAkBC,GACvBt5C,KAAKs5C,gBAAkBA,EA8B3B,OA5BA77C,OAAOgI,eAAe4zC,EAAkB36C,UAAW,OAAQ,CACvDkJ,IAAK,WACD,OAAO5H,KAAKs5C,gBAAgB5sC,MAEhC7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4zC,EAAkB36C,UAAW,KAAM,CACrDkJ,IAAK,WACD,OAAO5H,KAAKs5C,gBAAgBroC,IAEhCpG,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4zC,EAAkB36C,UAAW,YAAa,CAC5DkJ,IAAK,WACD,OAAO5H,KAAKs5C,gBAAgBC,WAEhC1uC,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4zC,EAAkB36C,UAAW,OAAQ,CACvDkJ,IAAK,WACD,OAAO5H,KAAKs5C,gBAAgB1yC,MAEhCiE,YAAY,EACZhM,cAAc,IAEXw6C,EAhC2B,GAkCtCt8C,EAAQs8C,kBAAoBA,G,2BCvC5B57C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIwuB,EAA6B,EAAQ,MACrCyoB,EAAyB,EAAQ,MAsDrCh5C,EAAQuyB,sBArCR,SAA+Bya,EAAYtC,EAAyB15B,GAChE,OAAO,IAAIlQ,SAAQ,SAAU+X,EAASW,GAClC,IAAIf,GAKAA,EAtBZ,SAAkBu0B,GACd,IACI,OAAOA,EAAW1nC,OAAS0nC,EAAWv0B,OAE1C,MAAOqM,GACH,OAAO,GAgBF23B,CAASzP,GAIDA,EAAWv0B,OAHXu0B,EAAW0P,SAMpBljC,EAAO,oGAKX,IAAImjC,EAAY,IAAIpsB,EAA2Bwc,oBAAoBC,EAAYv0B,EAAQ,KAEnFmkC,EAAwBD,EAAUxO,6BAA6BzD,EAAyBna,EAA2Boa,kBAAmB35B,GAG1I2rC,EAAUhP,kCAAiC,SAAU8B,GAE7CA,EAAIV,cAAgB6N,EAAsBC,aAI1ChkC,GADwB,WAAc,OAAO,IAAImgC,EAAuBC,qBAAqB0D,SAKrGA,EAAUxP,iBACVyP,EAAsBpM,Y,4BCrD9B9vC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MAMrCmtB,EAAsC,WAKtC,SAASA,EAAqB6D,GAO1B,GANA75C,KAAK65C,WAAaA,EAGlB75C,KAAK85C,iBAAmB,GAExB95C,KAAK+5C,sBAAwB,IACxB/5C,KAAK65C,WACN,KAAM,2BAGV75C,KAAK65C,WAAWnP,iCAAiC1qC,KAAKg6C,kBAAkB56C,KAAKY,OAC7EA,KAAK65C,WAAW/O,8BAA8B9qC,KAAKi6C,eAAe76C,KAAKY,OAwD3E,OArDAg2C,EAAqBt3C,UAAUs1B,QAAU,SAAUwa,EAAM3a,GACrD,IAAIpL,EAAQzoB,KAERk6C,EAAkBl6C,KAAK65C,WAAWnO,sBAAsB8C,EAAM3a,GAC9Dhf,EAAU,IAAIhX,SAAQ,SAAU+X,EAASW,GAGzCkS,EAAMqxB,iBAAiBI,EAAgBN,aAAe,CAAEhkC,QAASA,EAASW,OAAQA,MAItF,OADA2jC,EAAgB3M,OACT14B,GAEXmhC,EAAqBt3C,UAAUy7C,4BAA8B,SAAUp2B,GACnE/jB,KAAK+5C,sBAAsBt4C,KAAKsiB,IAEpCiyB,EAAqBt3C,UAAU07C,8BAAgC,SAAUr2B,GACrE/jB,KAAK+5C,sBAAwB/5C,KAAK+5C,sBAAsBr3C,QAAO,SAAU2yB,GAAK,OAAOA,IAAMtR,MAG/FiyB,EAAqBt3C,UAAUs7C,kBAAoB,SAAU7lB,GAEzD,KAAI12B,OAAOwM,KAAKjK,KAAK85C,kBAAkBz4C,QAAQ8yB,EAAS2X,aAAe,GAAvE,CAGA,IAAIuO,EAAiBr6C,KAAK85C,iBAAiB3lB,EAAS2X,aAEhD3X,EAASxwB,OACT02C,EAAe9jC,OAAO4d,EAASxwB,OAG/BwwB,EAAS1sB,MACT4yC,EAAezkC,QAAQ,CAAEtV,OAAQ6zB,EAAS1sB,cAGvCzH,KAAK85C,iBAAiB3lB,EAAS2X,eAE1CkK,EAAqBt3C,UAAUu7C,eAAiB,SAAU5L,GAEtD,IAAK,IAAIoB,EAAK,EAAGhhB,EAAKzuB,KAAK+5C,sBAAuBtK,EAAKhhB,EAAGtuB,OAAQsvC,IAAM,CACpE,IAAI1rB,EAAU0K,EAAGghB,GACjB,IACI1rB,EAAQ,CAAEqoB,eAAgBiC,EAAoBjC,eAAgB3kC,KAAM4mC,EAAoB5mC,OAE5F,MAAOoa,GAEH,GAAIA,EAAEy4B,YAAczxB,EAA2BuT,oBAAoBme,yBAC/D,MAAM14B,KAMfm0B,EAzE8B,GA2EzCj5C,EAAQi5C,qBAAuBA,G,0BClF/Bv4C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIguB,EAA4B,WAC5B,SAASA,EAAW0tB,GAChBx6C,KAAKw6C,gBAAkBA,EAuE3B,OArEA/8C,OAAOgI,eAAeqnB,EAAWpuB,UAAW,OAAQ,CAChDkJ,IAAK,WACD,OAAO5H,KAAKw6C,gBAAgB9tC,MAEhC7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeqnB,EAAWpuB,UAAW,KAAM,CAC9CkJ,IAAK,WACD,OAAO5H,KAAKw6C,gBAAgBvpC,IAEhCpG,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeqnB,EAAWpuB,UAAW,SAAU,CAClDkJ,IAAK,WACD,OAAO5H,KAAKw6C,gBAAgBC,QAEhC5vC,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeqnB,EAAWpuB,UAAW,oBAAqB,CAC7DkJ,IAAK,WACD,OAAO5H,KAAKw6C,gBAAgBE,mBAEhC7vC,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeqnB,EAAWpuB,UAAW,YAAa,CACrDkJ,IAAK,WACD,OAAO5H,KAAKw6C,gBAAgBG,WAEhC9vC,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeqnB,EAAWpuB,UAAW,cAAe,CACvDkJ,IAAK,WACD,OAAO5H,KAAKw6C,gBAAgBI,aAEhC/vC,YAAY,EACZhM,cAAc,IAElBiuB,EAAWpuB,UAAUm8C,aAAe,WAChC,OAAO76C,KAAKw6C,gBAAgBK,gBAEhC/tB,EAAWpuB,UAAUo8C,aAAe,WAChC,OAAO96C,KAAKw6C,gBAAgBM,gBAEhChuB,EAAWpuB,UAAUq8C,qBAAuB,WAExC,OADA9qC,QAAQgnB,KAAK,+FACNj3B,KAAKw6C,gBAAgBO,wBAEhCjuB,EAAWpuB,UAAUs8C,4BAA8B,WAC/C,OAAOh7C,KAAKw6C,gBAAgBQ,+BAEhCluB,EAAWpuB,UAAUw/B,uBAAyB,SAAUnwB,GAGpD,OAFAkC,QAAQgnB,KAAK,yIAENj3B,KAAKw6C,gBAAgBtc,uBAAuBnwB,IAEvD+e,EAAWpuB,UAAUu8C,sBAAwB,WACzC,OAAOj7C,KAAKw6C,gBAAgBS,yBAEhCnuB,EAAWpuB,UAAUw8C,yBAA2B,SAAU7c,EAAgBtwB,GACtE,OAAO/N,KAAKw6C,gBAAgBU,yBAAyB7c,EAAgBtwB,IAEzE+e,EAAWpuB,UAAUy8C,+BAAiC,SAAU9c,EAAgBL,EAAcjwB,GAC1F,OAAO/N,KAAKw6C,gBAAgBW,+BAA+B9c,EAAgBL,EAAcjwB,IAEtF+e,EAzEoB,GA2E/B/vB,EAAQ+vB,WAAaA,G,4BC5ErB,IAAI2B,EAAI2sB,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EACpCl+C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCsuB,EAAkB,EAAQ,MAM1B9Y,EAAgD,WAChD,SAASA,KAwDT,OAtDAA,EAA+B+Y,iBAAmB,IAAID,EAAgBE,gBAAertB,EAAK,IACnF5F,EAA2B6d,iBAAiBqV,UAAYzuB,EAA2BoZ,iBAAiBqV,SACvGttB,EAAG5F,EAA2B6d,iBAAiBsV,UAAY1uB,EAA2BoZ,iBAAiBsV,SACvGvtB,IACJqU,EAA+BmZ,YAAc,IAAIL,EAAgBE,gBAAeV,EAAK,IAC9EvyB,EAA2B4d,iBAAiByV,WAAa5uB,EAA2BmZ,iBAAiByV,UACxGd,EAAGvyB,EAA2B4d,iBAAiB0V,eAAiB7uB,EAA2BmZ,iBAAiB0V,cAC5Gf,EAAGvyB,EAA2B4d,iBAAiB2V,YAAc9uB,EAA2BmZ,iBAAiB2V,WACzGhB,IACJtY,EAA+BuZ,iBAAmB,IAAIT,EAAgBE,gBAAeT,EAAK,IACnFxyB,EAA2B8d,iBAAiB2V,KAAOhvB,EAA2BqZ,iBAAiB2V,IAClGjB,EAAGxyB,EAA2B8d,iBAAiB4V,KAAOjvB,EAA2BqZ,iBAAiB4V,IAClGlB,EAAGxyB,EAA2B8d,iBAAiB6V,QAAUlvB,EAA2BqZ,iBAAiB6V,OACrGnB,EAAGxyB,EAA2B8d,iBAAiB8V,SAAWnvB,EAA2BqZ,iBAAiB8V,QACtGpB,IACJvY,EAA+B4Z,kBAAoB,IAAId,EAAgBE,gBAAeR,EAAK,IACpFzyB,EAA2B2e,mBAAmBmV,OAAQ,EACzDrB,EAAGzyB,EAA2B2e,mBAAmBoV,OAAQ,EACzDtB,IACJxY,EAA+B+Z,mBAAqB,IAAIjB,EAAgBE,gBAAeP,EAAK,IAGrF1yB,EAA2Bmd,gBAAgB8W,MAAQ,EACtDvB,EAAG1yB,EAA2Bmd,gBAAgB+W,QAAU,EACxDxB,EAAG1yB,EAA2Bmd,gBAAgBgX,MAAQ,GACtDzB,IACJzY,EAA+Bma,wBAA0B,IAAIrB,EAAgBE,gBAAeN,EAAK,IAC1F3yB,EAA2B2d,wBAAwB0V,WAAa5uB,EAA2Byb,uBAAuBmU,yBACrH1B,EAAG3yB,EAA2B2d,wBAAwB2W,kBAAoB7vB,EAA2Byb,uBAAuBqU,iBAC5H5B,EAAG3yB,EAA2B2d,wBAAwB6W,qBAAuB/vB,EAA2Byb,uBAAuBuU,oBAC/H9B,IACJ1Y,EAA+Bya,WAAa,IAAI3B,EAAgBE,gBAAeL,EAAK,IAC7E5yB,EAA2Bwd,WAAWmX,OAASlwB,EAA2B4b,eAAesU,MAC5F/B,EAAG5yB,EAA2Bwd,WAAWoX,UAAYnwB,EAA2B4b,eAAeuU,SAC/FhC,EAAG5yB,EAA2Bwd,WAAWqX,QAAUpwB,EAA2B4b,eAAewU,OAC7FjC,EAAG5yB,EAA2Bwd,WAAWsX,OAASrwB,EAA2B4b,eAAeyU,MAC5FlC,EAAG5yB,EAA2Bwd,WAAWuX,MAAQtwB,EAA2B4b,eAAe0U,KAC3FnC,EAAG5yB,EAA2Bwd,WAAWwX,OAASvwB,EAA2B4b,eAAe2U,MAC5FpC,EAAG5yB,EAA2Bwd,WAAWyX,SAAWxwB,EAA2B4b,eAAe4U,QAC9FrC,EAAG5yB,EAA2Bwd,WAAW0X,SAAWzwB,EAA2B4b,eAAe6U,QAC9FtC,IACJ3Y,EAA+Bkb,cAAgB,IAAIpC,EAAgBE,gBAAeJ,EAAK,IAChF7yB,EAA2Bme,cAAciX,MAAQ3wB,EAA2B0Z,cAAciX,KAC7FvC,EAAG7yB,EAA2Bme,cAAckX,OAAS5wB,EAA2B0Z,cAAckX,MAC9FxC,EAAG7yB,EAA2Bme,cAAcmX,MAAQ7wB,EAA2B0Z,cAAcmX,KAC7FzC,EAAG7yB,EAA2Bme,cAAcoX,OAAS9wB,EAA2B0Z,cAAcoX,MAC9F1C,EAAG7yB,EAA2Bme,cAAcqX,SAAW/wB,EAA2B0Z,cAAcqX,QAChG3C,EAAG7yB,EAA2Bme,cAAcsX,QAAUhxB,EAA2B0Z,cAAcsX,OAC/F5C,IACJ5Y,EAA+BC,aAAe,IAAI6Y,EAAgBE,gBAAeH,EAAK,IAC/E9yB,EAA2BsZ,YAAYC,QAAU9U,EAA2B6U,YAAYC,OAC3FuZ,EAAG9yB,EAA2BsZ,YAAYoc,OAASjxB,EAA2B6U,YAAYoc,MAC1F5C,EAAG9yB,EAA2BsZ,YAAYqc,UAAYlxB,EAA2B6U,YAAYqc,SAC7F7C,IACG7Y,EAzDwC,GA2DnD/lC,EAAQ+lC,+BAAiCA,G,4BCrEzC,IAAIrU,EAAI2sB,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAI8C,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EACpEvhD,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCsuB,EAAkB,EAAQ,MAM1Bhc,EAAgD,WAChD,SAASA,KA2JT,OAzJAA,EAA+BC,iBAAmB,IAAI+b,EAAgBE,gBAAertB,EAAK,IACnFnB,EAA2BkX,iBAAiBya,SAAWp2B,EAA2B2b,iBAAiBya,QACtGxwB,EAAGnB,EAA2BkX,iBAAiB0a,QAAUr2B,EAA2B2b,iBAAiB0a,OACrGzwB,IACJmR,EAA+BY,cAAgB,IAAIob,EAAgBE,gBAAeV,EAAK,IAChF9tB,EAA2BmX,cAAc0a,WAAat2B,EAA2B4b,cAAc0a,UAClG/D,EAAG9tB,EAA2BmX,cAAc2a,SAAWv2B,EAA2B4b,cAAc2a,QAChGhE,IACJxb,EAA+Byf,WAAa,IAAIzD,EAAgBE,gBAAeT,EAAK,IAC7E/tB,EAA2B+Z,WAAWiY,YAAcz2B,EAA2Bwe,WAAWiY,WAC7FjE,EAAG/tB,EAA2B+Z,WAAWkY,UAAY12B,EAA2Bwe,WAAWkY,SAC3FlE,IACJzb,EAA+B4f,qBAAuB,IAAI5D,EAAgBE,gBAAeR,EAAK,IACvFhuB,EAA2BwZ,qBAAqB2Y,MAAQ52B,EAA2Bie,qBAAqB2Y,KAC3GnE,EAAGhuB,EAA2BwZ,qBAAqB4Y,KAAO72B,EAA2Bie,qBAAqB4Y,IAC1GpE,EAAGhuB,EAA2BwZ,qBAAqB6Y,OAAS92B,EAA2Bie,qBAAqB6Y,MAC5GrE,EAAGhuB,EAA2BwZ,qBAAqB8Y,QAAU/2B,EAA2Bie,qBAAqB8Y,OAC7GtE,EAAGhuB,EAA2BwZ,qBAAqB+Y,KAAOh3B,EAA2Bie,qBAAqB+Y,IAC1GvE,EAAGhuB,EAA2BwZ,qBAAqBgZ,KAAOj3B,EAA2Bie,qBAAqBgZ,IAC1GxE,EAAGhuB,EAA2BwZ,qBAAqBiZ,MAAQl3B,EAA2Bie,qBAAqBiZ,KAC3GzE,EAAGhuB,EAA2BwZ,qBAAqBkZ,OAASn3B,EAA2Bie,qBAAqBkZ,MAC5G1E,EAAGhuB,EAA2BwZ,qBAAqBmZ,UAAYp3B,EAA2Bie,qBAAqBmZ,SAC/G3E,EAAGhuB,EAA2BwZ,qBAAqBoZ,KAAOr3B,EAA2Bie,qBAAqBoZ,IAC1G5E,EAAGhuB,EAA2BwZ,qBAAqBqZ,KAAOt3B,EAA2Bie,qBAAqBqZ,IAC1G7E,EAAGhuB,EAA2BwZ,qBAAqBsZ,QAAUv3B,EAA2Bie,qBAAqBsZ,OAC7G9E,EAAGhuB,EAA2BwZ,qBAAqBuZ,KAAOx3B,EAA2Bie,qBAAqBuZ,IAC1G/E,EAAGhuB,EAA2BwZ,qBAAqBwZ,QAAUz3B,EAA2Bie,qBAAqBwZ,OAC7GhF,EAAGhuB,EAA2BwZ,qBAAqByZ,WAAa13B,EAA2Bie,qBAAqByZ,UAChHjF,EAAGhuB,EAA2BwZ,qBAAqB0Z,MAAQ33B,EAA2Bie,qBAAqB0Z,KAC3GlF,EAAGhuB,EAA2BwZ,qBAAqB2Z,KAAO53B,EAA2Bie,qBAAqB2Z,IAC1GnF,EAAGhuB,EAA2BwZ,qBAAqB4Z,QAAU73B,EAA2Bie,qBAAqB4Z,OAC7GpF,EAAGhuB,EAA2BwZ,qBAAqB6Z,QAAU93B,EAA2Bie,qBAAqB6Z,OAC7GrF,EAAGhuB,EAA2BwZ,qBAAqB8Z,QAAU/3B,EAA2Bie,qBAAqB8Z,OAC7GtF,EAAGhuB,EAA2BwZ,qBAAqB+Z,UAAYh4B,EAA2Bie,qBAAqB+Z,SAC/GvF,EAAGhuB,EAA2BwZ,qBAAqBga,OAASj4B,EAA2Bie,qBAAqBga,MAC5GxF,EAAGhuB,EAA2BwZ,qBAAqBia,QAAUl4B,EAA2Bie,qBAAqBia,OAC7GzF,EAAGhuB,EAA2BwZ,qBAAqBka,KAAOn4B,EAA2Bie,qBAAqBka,IAC1G1F,EAAGhuB,EAA2BwZ,qBAAqBma,UAAYp4B,EAA2Bie,qBAAqBma,SAC/G3F,EAAGhuB,EAA2BwZ,qBAAqBoa,WAAar4B,EAA2Bie,qBAAqBoa,UAChH5F,EAAGhuB,EAA2BwZ,qBAAqBqa,aAAet4B,EAA2Bie,qBAAqBqa,YAClH7F,EAAGhuB,EAA2BwZ,qBAAqBsa,YAAcv4B,EAA2Bie,qBAAqBsa,WACjH9F,EAAGhuB,EAA2BwZ,qBAAqBua,UAAYx4B,EAA2Bie,qBAAqBua,SAC/G/F,EAAGhuB,EAA2BwZ,qBAAqBwa,aAAez4B,EAA2Bie,qBAAqBwa,YAClHhG,EAAGhuB,EAA2BwZ,qBAAqBya,WAAa14B,EAA2Bie,qBAAqBya,UAChHjG,EAAGhuB,EAA2BwZ,qBAAqB0a,WAAa34B,EAA2Bie,qBAAqB0a,UAChHlG,EAAGhuB,EAA2BwZ,qBAAqB2a,MAAQ54B,EAA2Bie,qBAAqB2a,KAC3GnG,EAAGhuB,EAA2BwZ,qBAAqB4a,KAAO74B,EAA2Bie,qBAAqB4a,IAC1GpG,EAAGhuB,EAA2BwZ,qBAAqB6a,MAAQ94B,EAA2Bie,qBAAqB6a,KAC3GrG,EAAGhuB,EAA2BwZ,qBAAqB8a,MAAQ/4B,EAA2Bie,qBAAqB8a,KAC3GtG,EAAGhuB,EAA2BwZ,qBAAqB+a,SAAWh5B,EAA2Bie,qBAAqB+a,QAC9GvG,EAAGhuB,EAA2BwZ,qBAAqBgb,MAAQj5B,EAA2Bie,qBAAqBgb,KAC3GxG,IACJ1b,EAA+BmiB,cAAgB,IAAInG,EAAgBE,gBAAeP,EAAK,IAChFjuB,EAA2BuZ,cAAcmb,WAAan5B,EAA2Bge,cAAcmb,UAClGzG,EAAGjuB,EAA2BuZ,cAAcob,SAAWp5B,EAA2Bge,cAAcob,QAChG1G,EAAGjuB,EAA2BuZ,cAAcqb,SAAWr5B,EAA2Bge,cAAcqb,QAChG3G,IACJ3b,EAA+B1D,UAAY,IAAI0f,EAAgBE,gBAAeN,EAAK,IAC5EluB,EAA2B0H,UAAUC,WAAapM,EAA2BmM,UAAUC,UAC1FumB,EAAGluB,EAA2B0H,UAAUmtB,OAASt5B,EAA2BmM,UAAUmtB,MACtF3G,EAAGluB,EAA2B0H,UAAU8E,WAAajR,EAA2BmM,UAAU8E,UAC1F0hB,IACJ5b,EAA+BwiB,oBAAsB,IAAIxG,EAAgBE,gBAAeL,EAAK,IACtFnuB,EAA2B6Z,oBAAoBkb,WAAax5B,EAA2Bse,oBAAoBkb,UAC9G5G,EAAGnuB,EAA2B6Z,oBAAoBmb,OAASz5B,EAA2Bse,oBAAoBmb,MAC1G7G,EAAGnuB,EAA2B6Z,oBAAoBob,OAAS15B,EAA2Bse,oBAAoBob,MAC1G9G,EAAGnuB,EAA2B6Z,oBAAoBqb,QAAU35B,EAA2Bse,oBAAoBqb,OAC3G/G,EAAGnuB,EAA2B6Z,oBAAoBsb,YAAc55B,EAA2Bse,oBAAoBsb,WAC/GhH,EAAGnuB,EAA2B6Z,oBAAoBub,kBAAoB75B,EAA2Bse,oBAAoBub,iBACrHjH,EAAGnuB,EAA2B6Z,oBAAoBwb,aAAe95B,EAA2Bse,oBAAoBwb,YAChHlH,EAAGnuB,EAA2B6Z,oBAAoByb,MAAQ/5B,EAA2Bse,oBAAoByb,KACzGnH,EAAGnuB,EAA2B6Z,oBAAoB0b,OAASh6B,EAA2Bse,oBAAoB0b,MAC1GpH,EAAGnuB,EAA2B6Z,oBAAoB2b,SAAWj6B,EAA2Bse,oBAAoB2b,QAC5GrH,EAAGnuB,EAA2B6Z,oBAAoBrN,WAAajR,EAA2Bse,oBAAoBrN,UAC9G2hB,IACJ7b,EAA+BnE,SAAW,IAAImgB,EAAgBE,gBAAeJ,EAAK,IAC3EpuB,EAA2B4Z,SAASsB,MAAQ3f,EAA2Bqe,SAASsB,KACnFkT,EAAGpuB,EAA2B4Z,SAAS1f,MAAQqB,EAA2Bqe,SAAS1f,KACnFk0B,EAAGpuB,EAA2B4Z,SAASyB,UAAY9f,EAA2Bqe,SAASyB,SACvF+S,EAAGpuB,EAA2B4Z,SAASwB,OAAS7f,EAA2Bqe,SAASwB,MACpFgT,EAAGpuB,EAA2B4Z,SAASuB,KAAO5f,EAA2Bqe,SAASuB,IAClFiT,EAAGpuB,EAA2B4Z,SAAS9oC,QAAUyqB,EAA2Bqe,SAAS9oC,OACrFs9C,IACJ9b,EAA+Byc,iBAAmB,IAAIT,EAAgBE,gBAAeH,EAAK,IACnFruB,EAA2BqZ,iBAAiB2V,KAAOzzB,EAA2B8d,iBAAiB2V,IAClGX,EAAGruB,EAA2BqZ,iBAAiB4V,KAAO1zB,EAA2B8d,iBAAiB4V,IAClGZ,EAAGruB,EAA2BqZ,iBAAiB6V,QAAU3zB,EAA2B8d,iBAAiB6V,OACrGb,EAAGruB,EAA2BqZ,iBAAiB8V,SAAW5zB,EAA2B8d,iBAAiB8V,QACtGd,IACJ/b,EAA+BlE,gBAAkB,IAAIkgB,EAAgBE,gBAAe2C,EAAK,IAClFnxB,EAA2B6b,sBAAsBoT,KAAO1zB,EAA2Byd,mBAAmBiW,IACzGkC,EAAGnxB,EAA2B6b,sBAAsB4Z,MAAQl6B,EAA2Byd,mBAAmByc,KAC1GtE,EAAGnxB,EAA2B6b,sBAAsB6Z,OAASn6B,EAA2Byd,mBAAmB0c,MAC3GvE,IACJ7e,EAA+BqjB,eAAiB,IAAIrH,EAAgBE,gBAAe4C,EAAK,IACjFpxB,EAA2B4b,eAAesU,OAAS30B,EAA2Bwd,WAAWmX,MAC5FkB,EAAGpxB,EAA2B4b,eAAeuU,UAAY50B,EAA2Bwd,WAAWoX,SAC/FiB,EAAGpxB,EAA2B4b,eAAewU,QAAU70B,EAA2Bwd,WAAWqX,OAC7FgB,EAAGpxB,EAA2B4b,eAAeyU,OAAS90B,EAA2Bwd,WAAWsX,MAC5Fe,EAAGpxB,EAA2B4b,eAAe0U,MAAQ/0B,EAA2Bwd,WAAWuX,KAC3Fc,EAAGpxB,EAA2B4b,eAAe2U,OAASh1B,EAA2Bwd,WAAWwX,MAC5Fa,EAAGpxB,EAA2B4b,eAAe4U,SAAWj1B,EAA2Bwd,WAAWyX,QAC9FY,EAAGpxB,EAA2B4b,eAAe6U,SAAWl1B,EAA2Bwd,WAAW0X,QAC9FW,IACJ9e,EAA+Boe,cAAgB,IAAIpC,EAAgBE,gBAAe6C,EAAK,IAChFrxB,EAA2B0Z,cAAcqX,SAAWx1B,EAA2Bme,cAAcqX,QAChGM,EAAGrxB,EAA2B0Z,cAAciX,MAAQp1B,EAA2Bme,cAAciX,KAC7FU,EAAGrxB,EAA2B0Z,cAAckX,OAASr1B,EAA2Bme,cAAckX,MAC9FS,EAAGrxB,EAA2B0Z,cAAcmX,MAAQt1B,EAA2Bme,cAAcmX,KAC7FQ,EAAGrxB,EAA2B0Z,cAAcoX,OAASv1B,EAA2Bme,cAAcoX,MAC9FO,EAAGrxB,EAA2B0Z,cAAcsX,QAAUz1B,EAA2Bme,cAAcsX,OAC/FK,IACJ/e,EAA+B0a,UAAY,IAAIsB,EAAgBE,gBAAe8C,EAAK,IAC5EtxB,EAA2B1D,WAAWs5B,sBAAwBr6B,EAA2Be,WAAW2G,cACvGquB,EAAGtxB,EAA2B1D,WAAWu5B,gBAAkBt6B,EAA2Be,WAAW2G,cACjGquB,EAAGtxB,EAA2B1D,WAAWw5B,sBAAwBv6B,EAA2Be,WAAW2G,cACvGquB,EAAGtxB,EAA2B1D,WAAWy5B,mBAAqBx6B,EAA2Be,WAAW2G,cACpGquB,EAAGtxB,EAA2B1D,WAAW05B,mBAAqBz6B,EAA2Be,WAAW2G,cACpGquB,EAAGtxB,EAA2B1D,WAAW25B,0BAA4B16B,EAA2Be,WAAW2G,cAC3GquB,EAAGtxB,EAA2B1D,WAAW45B,iBAAmB36B,EAA2Be,WAAW2G,cAClGquB,EAAGtxB,EAA2B1D,WAAW65B,wBAA0B56B,EAA2Be,WAAW85B,kBACzG9E,EAAGtxB,EAA2B1D,WAAW+5B,kBAAoB96B,EAA2Be,WAAWg6B,gBACnGhF,GAAK/1B,EAA2Be,WAAW2G,eAC/CqP,EAA+BikB,WAAa,IAAIjI,EAAgBE,gBAAe+C,EAAK,IAC7EvxB,EAA2BsZ,WAAWkd,aAAej7B,EAA2B+d,WAAWkd,YAC9FjF,EAAGvxB,EAA2BsZ,WAAWoc,OAASn6B,EAA2B+d,WAAWoc,MACxFnE,EAAGvxB,EAA2BsZ,WAAWmd,cAAgBl7B,EAA2B+d,WAAWmd,aAC/FlF,EAAGvxB,EAA2BsZ,WAAWod,cAAgBn7B,EAA2B+d,WAAWod,aAC/FnF,IACJjf,EAA+BvM,aAAe,IAAIuoB,EAAgBE,gBAAegD,EAAK,IAC/E,2BAAkDj2B,EAA2Bue,aAAa6c,eAC7FnF,EAAG,uBAA0Cj2B,EAA2Bue,aAAa8c,WACrFpF,EAAG,mBAAmCj2B,EAA2Bue,aAAa+c,QAC9ErF,EAAG,qBAAuCj2B,EAA2Bue,aAAatN,UAClFglB,EAAG,2BAAkDj2B,EAA2Bue,aAAagd,eAE7FtF,EAAG,mBAAqBj2B,EAA2Bue,aAAa6c,eAChEnF,EAAG,eAAiBj2B,EAA2Bue,aAAa8c,WAC5DpF,EAAY,QAAIj2B,EAA2Bue,aAAa+c,QACxDrF,EAAc,UAAIj2B,EAA2Bue,aAAatN,UAC1DglB,EAAG,mBAAqBj2B,EAA2Bue,aAAagd,eAChEtF,IACJlf,EAA+BykB,gCAAkC,IAAIzI,EAAgBE,gBAAeiD,EAAK,IAClGzxB,EAA2ByY,gCAAgCue,aAAez7B,EAA2Bkd,gCAAgCue,YACxIvF,EAAGzxB,EAA2ByY,gCAAgCwe,cAAgB17B,EAA2Bkd,gCAAgCwe,aACzIxF,EAAGzxB,EAA2ByY,gCAAgCye,cAAgB37B,EAA2Bkd,gCAAgCye,aACzIzF,EAAGzxB,EAA2ByY,gCAAgC0e,iBAAmB57B,EAA2Bkd,gCAAgC0e,gBAC5I1F,IACJnf,EAA+B8kB,eAAiB,IAAI9I,EAAgBE,gBAAekD,EAAK,IACjF1xB,EAA2B+b,aAAasb,MAAQ97B,EAA2Bye,eAAeqd,KAC7F3F,EAAG1xB,EAA2B+b,aAAaub,MAAQ/7B,EAA2Bye,eAAesd,KAC7F5F,EAAG1xB,EAA2B+b,aAAauO,OAAS/uB,EAA2Bye,eAAesQ,MAC9FoH,IACGpf,EA5JwC,GA8JnD7iC,EAAQ6iC,+BAAiCA,G,4BCxKzCniC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrC4vB,EAAiB,EAAQ,MAKzBzc,EAAsC,WACtC,SAASA,IACLh8B,KAAK6kD,uBAAyB,GAiBlC,OAfA7oB,EAAqBt9B,UAAUwf,iBAAmB,SAAU4mC,EAAW/gC,GACnE,IAAK/jB,KAAK6kD,uBAAuB/0C,eAAeg1C,GAC5C,MAAM,IAAIrM,EAAe9uB,aAAad,EAA2Be,WAAWm7B,qBAAsB,6CAA+CD,GAErJ,OAAO9kD,KAAK6kD,uBAAuBC,GAAW5mC,iBAAiB6F,IAEnEiY,EAAqBt9B,UAAU4rC,oBAAsB,SAAUwa,EAAW/gC,GACtE,IAAK/jB,KAAK6kD,uBAAuB/0C,eAAeg1C,GAC5C,MAAM,IAAIrM,EAAe9uB,aAAad,EAA2Be,WAAWm7B,qBAAsB,gDAAkDD,GAExJ,OAAO9kD,KAAK6kD,uBAAuBC,GAAWxa,oBAAoBvmB,IAEtEiY,EAAqBt9B,UAAUi7B,gBAAkB,SAAUqrB,GACvDhlD,KAAK6kD,uBAAuBG,EAAaF,WAAaE,GAEnDhpB,EAnB8B,GAqBzCj/B,EAAQi/B,qBAAuBA,G,4BC5B/Bv+B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI85C,EAAiB,EAAQ,KACzBvC,EAAuB,WACvB,SAASA,EAAM4O,GACXjlD,KAAKilD,WAAaA,EA+EtB,OA7EAxnD,OAAOgI,eAAe4wC,EAAM33C,UAAW,OAAQ,CAC3CkJ,IAAK,WACD,OAAO5H,KAAKilD,WAAWv4C,MAE3B7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4wC,EAAM33C,UAAW,KAAM,CACzCkJ,IAAK,WACD,OAAO5H,KAAKilD,WAAWh0C,IAE3BpG,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4wC,EAAM33C,UAAW,cAAe,CAClDkJ,IAAK,WACD,OAAO5H,KAAKilD,WAAW1lC,aAE3B1U,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4wC,EAAM33C,UAAW,cAAe,CAClDkJ,IAAK,WACD,OAAO5H,KAAKilD,WAAWC,aAE3Br6C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4wC,EAAM33C,UAAW,aAAc,CACjDkJ,IAAK,WACD,OAAO5H,KAAKilD,WAAWp4B,YAE3BhiB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4wC,EAAM33C,UAAW,OAAQ,CAC3CkJ,IAAK,WACD,OAAO5H,KAAKilD,WAAWE,MAE3Bt6C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4wC,EAAM33C,UAAW,WAAY,CAC/CkJ,IAAK,WACD,OAAO5H,KAAKilD,WAAWG,UAE3Bv6C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4wC,EAAM33C,UAAW,cAAe,CAClDkJ,IAAK,WACD,OAAO5H,KAAKilD,WAAWI,aAE3Bx6C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4wC,EAAM33C,UAAW,oBAAqB,CACxDkJ,IAAK,WACD,OAAO5H,KAAKilD,WAAWK,mBAE3Bz6C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4wC,EAAM33C,UAAW,aAAc,CACjDkJ,IAAK,WACD,MAAMgxC,EAAephB,aAAa+tB,kBAAkB,qBAExD16C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4wC,EAAM33C,UAAW,kBAAmB,CACtDkJ,IAAK,WACD,OAAO5H,KAAKilD,WAAWO,iBAE3B36C,YAAY,EACZhM,cAAc,IAEXw3C,EAjFe,GAmF1Bt5C,EAAQs5C,MAAQA,G,4BCrFhB54C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI2mD,EAAc,EAAQ,MACtBlP,EAAgC,WAChC,SAASA,EAAemP,EAAiBC,GACrC3lD,KAAK2lD,YAAcA,EACnB3lD,KAAK4lD,MAAQF,EAAgBG,KAC7B7lD,KAAK8lD,MAAQJ,EAAgBh5C,KAC7B1M,KAAK+lD,QAAUL,EAAgB/zC,OAC/B3R,KAAKgmD,WAAaN,EAAgBO,UAClCjmD,KAAKkmD,WAAaR,EAAgBS,MAAMC,iBACxCpmD,KAAKqmD,KAAOX,EAAgB9sB,IAyDhC,OAvDAn7B,OAAOgI,eAAe8wC,EAAe73C,UAAW,OAAQ,CACpDkJ,IAAK,WACD,OAAO5H,KAAK4lD,OAEhB/6C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8wC,EAAe73C,UAAW,OAAQ,CACpDkJ,IAAK,WACD,OAAO5H,KAAK8lD,OAEhB3/C,IAAK,SAAUuG,GACX1M,KAAK8lD,MAAQp5C,GAEjB7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8wC,EAAe73C,UAAW,SAAU,CACtDkJ,IAAK,WACD,OAAO5H,KAAK+lD,SAEhB5/C,IAAK,SAAUwL,GACX3R,KAAK+lD,QAAUp0C,GAEnB9G,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8wC,EAAe73C,UAAW,YAAa,CACzDkJ,IAAK,WACD,OAAO5H,KAAKgmD,YAEhB7/C,IAAK,SAAU8/C,GACXjmD,KAAKgmD,WAAaC,GAEtBp7C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8wC,EAAe73C,UAAW,YAAa,CACzDkJ,IAAK,WACD,OAAO5H,KAAKkmD,YAEhBr7C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8wC,EAAe73C,UAAW,MAAO,CACnDkJ,IAAK,WACD,OAAO5H,KAAKqmD,MAEhBx7C,YAAY,EACZhM,cAAc,IAElB03C,EAAe73C,UAAUo5B,UAAY,WAEjC,OADc2tB,EAAY/6B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,eAC/DkN,UAAU93B,OAEtBu2C,EAjEwB,GAmEnCx5C,EAAQw5C,eAAiBA,G,kCCrEzB,IACQvuB,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBQ,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrC4oB,EAAmC,EAAQ,MAC3CyB,EAAU,EAAQ,MAClB2O,EAAoB,EAAQ,MAC5B7N,EAAiB,EAAQ,MACzBG,EAAiB,EAAQ,KACzBnC,EAAwB,EAAQ,MAChCK,EAAc,EAAQ,MACtBE,EAAkB,EAAQ,MAC1BS,EAAkB,EAAQ,KAC1BliB,EAA+B,SAAUhN,GAEzC,SAASgN,EAAcgxB,EAAYC,EAAQC,EAAYd,EAAae,GAChE,IAAIj+B,EAAQF,EAAOlpB,KAAKW,KAAMumD,EAAYZ,IAAgB3lD,KAI1D,OAHAyoB,EAAM+9B,OAASA,EACf/9B,EAAMg+B,WAAaA,EACnBh+B,EAAMi+B,sBAAwBA,EACvBj+B,EA+JX,OArKAR,EAAUsN,EAAehN,GAQzB9qB,OAAOgI,eAAe8vB,EAAc72B,UAAW,iBAAkB,CAC7DkJ,IAAK,WACD,OAAO5H,KAAK2mD,iBAEhB97C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8vB,EAAc72B,UAAW,UAAW,CACtDkJ,IAAK,WACD,OAAO5H,KAAK4mD,UAEhB/7C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8vB,EAAc72B,UAAW,mBAAoB,CAC/DkJ,IAAK,WACD,OAAO5H,KAAK0mD,uBAEhB77C,YAAY,EACZhM,cAAc,IAElB02B,EAAc72B,UAAUquB,+BAAiC,WACrD/sB,KAAK2mD,gBAAkB,IAAI1pD,MAC3B+C,KAAK4mD,SAAW,IAAI3pD,MACpB+C,KAAK6mD,QAAU,IAAI1pD,IAEnB,IAAK,IAAIsyC,EAAK,EAAGhhB,EAAKzuB,KAAKwmD,OAAQ/W,EAAKhhB,EAAGtuB,OAAQsvC,IAAM,CACrD,IAAIjV,EAAO/L,EAAGghB,GACV5V,OAAgBl7B,EAChBmoD,EAAW,CAAE5xB,MAAOsF,EAAKtF,MAAOE,OAAQoF,EAAKpF,QAGjD,GAAIoF,EAAKusB,WAAaz5B,EAA2B6Z,oBAAoBrN,UAAW,CAC5E,IAAIktB,EAAgB,GAChBC,EAAe,GACf7B,GAAW,EACX5qB,EAAKqX,WAELmV,EAAgBxsB,EAAKqX,UAAUnlC,KAI/B04C,EAA4B,MAF5B6B,EAAezsB,EAAKqX,UAAUjZ,KAAO,KAKrCouB,EAAgBxsB,EAAK9tB,KAIzB,IAAIooB,EAAgB,IAAIkiB,EAAgBjiB,cAAciyB,EAAen+B,EAA2BmM,UAAU8E,UAAWgtB,EAAU9mD,KAAK2mD,gBAAgBxmD,QAlBzI,EAkB2JilD,EAAU6B,GAC5KC,EAAQ,CACRl+B,UAAWg+B,EACXvxB,UAAWz1B,KAAKmnD,eAAez6C,KAC/B0yB,WAAYp/B,KAAKymD,WAAWrnB,WAC5B2S,gBAAiB/xC,KAAKymD,WAAW1U,gBACjC1S,aAAcr/B,KAAKymD,WAAWpnB,cAElCxF,EAAgB,IAAI4d,EAAgBC,cAAc5iB,EAAe90B,KAAK2lD,YAAauB,EAAOlnD,KAAMA,KAAK0mD,uBACrG1mD,KAAK2mD,gBAAgBllD,KAAKo4B,GAE9B,IAAIutB,EAAY,IAAIzP,EAAQC,MAAMpd,EAAKvf,EAAGuf,EAAK6sB,GAC3CrtB,EAAsB,IAAIyc,EAAsBC,oBAAoB12C,KAAMk2C,EAAiCtW,+BAA+BwiB,oBAAoBtiB,QAAQtF,EAAKusB,UAAWK,EAAWN,EAAUjtB,EAAeW,EAAK9tB,UAA0B/N,IAApB67B,EAAKa,YAA2Bb,EAAKa,gBAC3P18B,IAAnB67B,EAAKc,WAA0Bd,EAAKc,UACpCd,EAAK8sB,QACLtnD,KAAK4mD,SAASnlD,KAAKu4B,GACnBh6B,KAAK6mD,QAAQ1gD,IAAIq0B,EAAK8sB,OAAQttB,KAGtCzE,EAAc72B,UAAU07B,kCAAoC,SAAUC,GAElE,OADkBisB,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,gBACrE28B,mBAAsCvnD,KAAK0M,KAAM1M,KAAK6mD,QAASxsB,IAEtF9E,EAAc72B,UAAU47B,uBAAyB,SAAUC,GACvD,OAAOv6B,KAAK6mD,QAAQj/C,IAAI2yB,IAE5BhF,EAAc72B,UAAUi8B,YAAc,SAAU6sB,GAC5C,IAAI/+B,EAAQzoB,KAERynD,EAAsBznD,KAAK4mD,SAC3Bc,EAAa1nD,KAAK6mD,QAEtB7mD,KAAKwmD,OAASgB,EACdxnD,KAAK+sB,iCAEL,IAAI46B,EAAsB3nD,KAAK4mD,SAC3BgB,EAAa5nD,KAAK6mD,QAElBgB,EAAc,IAAI1qD,IAgCtB,OA9BAsqD,EAAoBjlD,SAAQ,SAAUslD,GAClC,IAAIC,EAAQD,EAAU72C,GAEtB,GAAK22C,EAAWjgD,IAAIogD,GAApB,CAIA,IAAIC,EAAYJ,EAAWhgD,IAAImgD,GAC3BD,EAAUzsB,aAAe2sB,EAAU3sB,YACnC5S,EAAMw/B,UAAUF,EAAOF,EAAah/B,EAA2Boe,sBAAsBihB,mBAErFJ,EAAUxsB,YAAc0sB,EAAU1sB,WAClC7S,EAAMw/B,UAAUF,EAAOF,EAAah/B,EAA2Boe,sBAAsBkhB,kBAErFL,EAAUp7C,OAASs7C,EAAUt7C,MAC7B+b,EAAMw/B,UAAUF,EAAOF,EAAah/B,EAA2Boe,sBAAsBmhB,aAErFN,EAAU3rC,SAASlB,IAAM+sC,EAAU7rC,SAASlB,GAAK6sC,EAAU3rC,SAASkrC,IAAMW,EAAU7rC,SAASkrC,GAC7F5+B,EAAMw/B,UAAUF,EAAOF,EAAah/B,EAA2Boe,sBAAsBohB,iBAErFP,EAAU/gD,KAAKmuB,QAAU8yB,EAAUjhD,KAAKmuB,OAAS4yB,EAAU/gD,KAAKquB,SAAW4yB,EAAUjhD,KAAKquB,QAC1F3M,EAAMw/B,UAAUF,EAAOF,EAAah/B,EAA2Boe,sBAAsBqhB,kBAjBrF7/B,EAAMw/B,UAAUF,EAAOF,EAAah/B,EAA2Boe,sBAAsBshB,YAqB7FZ,EAAoBnlD,SAAQ,SAAUwlD,GAC7BN,EAAW//C,IAAIqgD,EAAU/2C,KAC1BwX,EAAMw/B,UAAUD,EAAU/2C,GAAI42C,EAAah/B,EAA2Boe,sBAAsBuhB,UAG7FX,GAEXtyB,EAAc72B,UAAUupD,UAAY,SAAUX,EAAQO,EAAaY,GAC1DZ,EAAYlgD,IAAI2/C,IACjBO,EAAY1hD,IAAImhD,EAAQ,IAE5BO,EAAYjgD,IAAI0/C,GAAQ7lD,KAAKgnD,IAEjClzB,EAAc72B,UAAUm8B,mCAAqC,SAAUC,GAEnE,OADkBwrB,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,gBACrE89B,mBAAsC1oD,KAAK0M,KAAM1M,KAAK6mD,QAAS/rB,IAEtFvF,EAAc72B,UAAUq8B,qBAAuB,SAAUC,GAErD,OADuBsrB,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,qBACrE+9B,YAAY3tB,IAExCzF,EAAc72B,UAAU4qB,gBAAkB,WAGtC,OAFAtpB,KAAK4oD,gDACStC,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBACrEi+B,4BAEnBtzB,EAAc72B,UAAUu8B,iBAAmB,SAAUvR,EAAW/c,EAAQuuB,EAAYntB,GAGhF,GAFA6qC,EAAephB,aAAaoL,gBAAgB1H,EAAY7S,EAASse,iBAAkB,oBACnFiS,EAAephB,aAAaS,sBAAsBvO,EAAW,cACxDzsB,MAAMgG,QAAQ0J,GACf,MAAM,IAAI8rC,EAAe9uB,aAAad,EAA2Be,WAAW6Y,iBAAkB,mEAIlG,OAFAziC,KAAK4oD,gDACStC,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBACrEk+B,0BAA0Bp/B,EAAW/c,EAAQuuB,EAAYntB,IAE5EwnB,EAAc72B,UAAUkqD,8CAAgD,WACpE,IAAIG,EAA2B/oD,KAAKgpD,OAChCC,EAAoD,MAAzBjpD,KAAKkpD,kBAA4BlpD,KAAKkpD,iBAAiBF,OACtF,IAAKD,IAA6BE,EAC9B,MAAM,IAAIxQ,EAAe9uB,aAAad,EAA2BmU,iBAAiBmsB,eAAgB,8CAGnG5zB,EAtKuB,CAuKhCuhB,EAAYC,WACdh6C,EAAQw4B,cAAgBA,G,0BClMxB93B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAKtD,IAAI43C,EAAqC,WACrC,SAASA,EAAoBhd,EAAgBxO,EAAOk+B,EAAWC,EAAOvsB,EAAgBgpB,EAAOwD,EAAaC,EAAYC,GAClHxpD,KAAK05B,eAAiBA,EACtB15B,KAAKkrB,MAAQA,EACblrB,KAAKopD,UAAYA,EACjBppD,KAAKqpD,MAAQA,EACbrpD,KAAK88B,eAAiBA,EACtB98B,KAAK8lD,MAAQA,EACb9lD,KAAKspD,YAAcA,EACnBtpD,KAAKupD,WAAaA,EAClBvpD,KAAKwpD,IAAMA,EAiEf,OA/DA/rD,OAAOgI,eAAeixC,EAAoBh4C,UAAW,gBAAiB,CAClEkJ,IAAK,WACD,OAAO5H,KAAK05B,gBAEhB7uB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeixC,EAAoBh4C,UAAW,OAAQ,CACzDkJ,IAAK,WACD,OAAO5H,KAAKkrB,OAEhBrgB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeixC,EAAoBh4C,UAAW,WAAY,CAC7DkJ,IAAK,WACD,OAAO5H,KAAKopD,WAEhBv+C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeixC,EAAoBh4C,UAAW,OAAQ,CACzDkJ,IAAK,WACD,OAAO5H,KAAKqpD,OAEhBx+C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeixC,EAAoBh4C,UAAW,gBAAiB,CAClEkJ,IAAK,WACD,OAAO5H,KAAK88B,gBAEhBjyB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeixC,EAAoBh4C,UAAW,OAAQ,CACzDkJ,IAAK,WACD,OAAO5H,KAAK8lD,OAEhBj7C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeixC,EAAoBh4C,UAAW,aAAc,CAC/DkJ,IAAK,WACD,OAAO5H,KAAKspD,aAEhBz+C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeixC,EAAoBh4C,UAAW,YAAa,CAC9DkJ,IAAK,WACD,OAAO5H,KAAKupD,YAEhB1+C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeixC,EAAoBh4C,UAAW,KAAM,CACvDkJ,IAAK,WACD,OAAO5H,KAAKwpD,KAEhB3+C,YAAY,EACZhM,cAAc,IAEX63C,EA3E6B,GA6ExC35C,EAAQ25C,oBAAsBA,G,4BClF9Bj5C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrC4gC,EAAsB,EAAQ,MAC9BrT,EAAU,EAAQ,MAClBsT,EAAiB,EAAQ,MACzBpD,EAAoB,EAAQ,MAC5BqD,EAAiB,EAAQ,MACzB/Q,EAAiB,EAAQ,KACzBgR,EAAc,EAAQ,MACtBh9B,EAAgC,WAChC,SAASA,EAAei9B,EAAiBlE,GACrC,IAAIl9B,EAAQzoB,KACZA,KAAK6pD,gBAAkBA,EACvB7pD,KAAK2lD,YAAcA,EACnB3lD,KAAK8pD,QAAUD,EAAgBpP,OAAOh4C,KAAI,SAAUsnD,GAChD,IAAIC,EAAY,IAAIJ,EAAYK,UAAUF,EAAYthC,GACtD,OAAO,IAAI2tB,EAAQC,MAAM2T,MAiGjC,OA9FAvsD,OAAOgI,eAAemnB,EAAeluB,UAAW,OAAQ,CACpDkJ,IAAK,WACD,OAAO5H,KAAK6pD,gBAAgBn9C,MAEhC7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAemnB,EAAeluB,UAAW,KAAM,CAClDkJ,IAAK,WACD,OAAO5H,KAAK6pD,gBAAgB54C,IAEhCpG,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAemnB,EAAeluB,UAAW,oBAAqB,CACjEkJ,IAAK,WACD,OAAO5H,KAAK6pD,gBAAgBnP,mBAEhC7vC,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAemnB,EAAeluB,UAAW,SAAU,CACtDkJ,IAAK,WACD,OAAO5H,KAAK8pD,SAEhBj/C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAemnB,EAAeluB,UAAW,YAAa,CACzDkJ,IAAK,WACD,OAAO5H,KAAK6pD,gBAAgBlP,WAEhC9vC,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAemnB,EAAeluB,UAAW,cAAe,CAC3DkJ,IAAK,WACD,OAAO5H,KAAK6pD,gBAAgBjP,aAEhC/vC,YAAY,EACZhM,cAAc,IAElB+tB,EAAeluB,UAAUm8C,aAAe,WACpC,OAAO76C,KAAK6pD,gBAAgBhP,cAEhCjuB,EAAeluB,UAAUwrD,mBAAqB,WAC1C,OAAO,KAEXt9B,EAAeluB,UAAUo8C,aAAe,WAEpC,OADwBwL,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,uBACrEkwB,aAAa96C,KAAK6pD,gBAAgB54C,KAE/D2b,EAAeluB,UAAUs8C,4BAA8B,WAEnD,OADwBsL,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,uBACrEowB,4BAA4Bh7C,KAAK6pD,gBAAgB54C,IAAI6D,MAAK,SAAUq1C,GACzF,OAAOA,EAAU1nD,KAAI,SAAU2nD,GAAW,OAAO,IAAIX,EAAoBpQ,kBAAkB+Q,UAGnGx9B,EAAeluB,UAAUq8C,qBAAuB,WAE5C,OADwBuL,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,uBACrEmwB,qBAAqB/6C,KAAK6pD,gBAAgB54C,IAAI6D,MAAK,SAAUu1C,GAClF,OAAOA,EAAW5nD,KAAI,SAAU6nD,GAAa,OAAO,IAAIX,EAAeY,aAAaD,UAG5F19B,EAAeluB,UAAUw/B,uBAAyB,SAAUnwB,GAGxD,OADAA,EAAUA,GAAW,GADAu4C,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBAErE4/B,uBAAuBxqD,KAAKiR,KAAMlD,EAAQ08C,cAAe18C,EAAQmnC,SAAW,EAClGnnC,EAAQwnC,kBAAoB,GAAIxnC,EAAQ28C,sBAAwB,GAAI38C,EAAQ48C,yBAA2B9hC,EAA2B2d,wBAAwB0V,YAE9JtvB,EAAeluB,UAAUw8C,yBAA2B,SAAU7c,EAAgBtwB,GAG1E,OADAA,EAAUA,GAAW,GADAu4C,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBAErEswB,yBAAyBl7C,KAAKiR,GAAIotB,IAAkBtwB,EAAQ08C,cAAe18C,EAAQmnC,SAAW,EACpHnnC,EAAQwnC,kBAAoB,GAAIxnC,EAAQ28C,sBAAwB,GAAI38C,EAAQ48C,yBAA2B9hC,EAA2B2d,wBAAwB0V,YAE9JtvB,EAAeluB,UAAUy8C,+BAAiC,SAAU9c,EAAgBL,EAAcjwB,GAG9F,OADAA,EAAUA,GAAW,GADAu4C,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBAErEuwB,+BAA+Bn7C,KAAKiR,GAAIotB,EAAgBL,GAAgBh+B,KAAKkqD,uBAAwBn8C,EAAQ08C,cAAe18C,EAAQ28C,sBAAwB,GAAI38C,EAAQ48C,yBAA2B9hC,EAA2B2d,wBAAwB0V,YAEhRtvB,EAAeluB,UAAUquB,+BAAiC,SAAUF,GAChE+rB,EAAephB,aAAaqE,oBAAoBhP,EAAY,cAC5D7sB,KAAK8pD,QAAU9pD,KAAK6pD,gBAAgBpP,OAAOh4C,KAAI,SAAUsnD,GACrD,IAAIC,EAAY,IAAIJ,EAAYK,UAAUF,EAAYl9B,GACtD,OAAO,IAAIupB,EAAQC,MAAM2T,OAGjCp9B,EAAeluB,UAAUu8C,sBAAwB,WAE7C,OADwBqL,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,uBACrEqwB,sBAAsBj7C,KAAKiR,IAAI6D,MAAK,SAAU81C,GACnE,OAAOA,EAAkBnoD,KAAI,SAAUooD,GAAoB,OAAO,IAAInB,EAAeoB,aAAaD,UAGnGj+B,EAxGwB,GA0GnC7vB,EAAQ6vB,eAAiBA,G,4BCnHzBnvB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIo3C,EAAmC,EAAQ,MAC3C+T,EAA2B,WAC3B,SAASA,EAAUc,EAAYC,GAC3BhrD,KAAK+qD,WAAaA,EAClB/qD,KAAKgrD,kBAAoBA,EAwE7B,OAtEAvtD,OAAOgI,eAAewkD,EAAUvrD,UAAW,OAAQ,CAC/CkJ,IAAK,WACD,OAAO5H,KAAK+qD,WAAWr+C,MAE3B7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAewkD,EAAUvrD,UAAW,KAAM,CAC7CkJ,IAAK,WACD,OAAO5H,KAAK+qD,WAAW95C,IAE3BpG,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAewkD,EAAUvrD,UAAW,cAAe,CACtDkJ,IAAK,WACD,OAAO5H,KAAK+qD,WAAWxrC,aAE3B1U,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAewkD,EAAUvrD,UAAW,cAAe,CACtDkJ,IAAK,WACD,OAAOsuC,EAAiCtW,+BAA+B4f,qBAAqB1f,QAAQ9/B,KAAK+qD,WAAW7F,cAExHr6C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAewkD,EAAUvrD,UAAW,aAAc,CACrDkJ,IAAK,WACD,OAAO5H,KAAKgrD,mBAEhBngD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAewkD,EAAUvrD,UAAW,OAAQ,CAC/CkJ,IAAK,WACD,OAAOsuC,EAAiCtW,+BAA+BmiB,cAAcjiB,QAAQ9/B,KAAK+qD,WAAW5F,OAEjHt6C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAewkD,EAAUvrD,UAAW,WAAY,CACnDkJ,IAAK,WACD,OAAO5H,KAAK+qD,WAAW3F,UAE3Bv6C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAewkD,EAAUvrD,UAAW,cAAe,CACtDkJ,IAAK,WACD,OAAO5H,KAAK+qD,WAAW1F,aAE3Bx6C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAewkD,EAAUvrD,UAAW,oBAAqB,CAC5DkJ,IAAK,WACD,OAAO5H,KAAK+qD,WAAWzF,mBAE3Bz6C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAewkD,EAAUvrD,UAAW,kBAAmB,CAC1DkJ,IAAK,WACD,OAAO5H,KAAK+qD,WAAWvF,iBAE3B36C,YAAY,EACZhM,cAAc,IAEXorD,EA3EmB,GA6E9BltD,EAAQktD,UAAYA,G,4BC/EpBxsD,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCqtB,EAAmC,EAAQ,MAC3CoQ,EAAoB,EAAQ,MAC5B2E,EAAqB,EAAQ,MAC7BrS,EAAiB,EAAQ,KACzBsS,EAAU,EAAQ,MAClBrU,EAA+B,WAC/B,SAASA,EAAcsU,EAAexF,GAClC3lD,KAAK2lD,YAAcA,EACnB3lD,KAAKorD,iBAAiBD,GA2E1B,OAzEA1tD,OAAOgI,eAAeoxC,EAAcn4C,UAAW,OAAQ,CACnDkJ,IAAK,WACD,OAAO5H,KAAKqrD,eAAe3+C,MAE/B7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeoxC,EAAcn4C,UAAW,eAAgB,CAC3DkJ,IAAK,WACD,OAAOqjD,EAAmBK,iBAAiBC,uBAAuBvrD,KAAKqrD,eAAe7vB,aAAcx7B,KAAKqrD,eAAe5vB,WAE5H5wB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeoxC,EAAcn4C,UAAW,WAAY,CACvDkJ,IAAK,WACD,OAAOsuC,EAAiCtW,+BAA+BnE,SAASqE,QAAQ9/B,KAAKqrD,eAAe5vB,WAEhH5wB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeoxC,EAAcn4C,UAAW,KAAM,CACjDkJ,IAAK,WACD,OAAO5H,KAAKsqB,kBAEhBzf,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeoxC,EAAcn4C,UAAW,kBAAmB,CAC9DkJ,IAAK,WACD,OAAO5H,KAAKwrD,kBAEhB3gD,YAAY,EACZhM,cAAc,IAElBg4C,EAAcn4C,UAAUi9B,iBAAmB,SAAUC,GACjD,IAAInT,EAAQzoB,KACZ44C,EAAephB,aAAaC,gBAAgBmE,EAAU,YACtD,IAAI6vB,EAAeP,EAAQQ,MAAMC,wBAAwB/vB,GAEzD,OADwB0qB,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,sBACrEghC,0BAA0B5rD,KAAKsqB,iBAAkBmhC,GAAc32C,MAAK,SAAUq2C,GAEnG,OADA1iC,EAAM2iC,iBAAiBD,GAChB1iC,EAAM+S,iBAGrBqb,EAAcn4C,UAAU0sD,iBAAmB,SAAUD,GACjDnrD,KAAKqrD,eAAiBF,EACtBnrD,KAAKsqB,iBAAmB6gC,EAAczhC,UACtC,IACImiC,EACAC,EACAC,EACAC,EACA/I,EALAr8C,EAAOsvC,EAAiCtW,+BAA+BlE,gBAAgBoE,QAAQqrB,EAAcc,qBAM7GrlD,IAASiiB,EAA2Byd,mBAAmByc,KAEvD8I,GADaV,EAAczvB,iBAAmB,IAC1Bj5B,KAAI,SAAUqY,GAAO,OAAOmwC,EAAmBK,iBAAiBC,uBAAuBzwC,EAAKqwC,EAAc1vB,aAEzH70B,IAASiiB,EAA2Byd,mBAAmB0c,QAC5D8I,EAAWX,EAAcW,UAAYb,EAAmBK,iBAAiBC,uBAAuBJ,EAAcW,SAAUX,EAAc1vB,UACtIswB,EAAWZ,EAAcY,UAAYd,EAAmBK,iBAAiBC,uBAAuBJ,EAAcY,SAAUZ,EAAc1vB,UACtIuwB,EAAWb,EAAca,SACzB/I,EAAiBkI,EAAclI,gBAAkB/M,EAAiCtW,+BAA+BqjB,eAAenjB,QAAQqrB,EAAclI,iBAE1JjjD,KAAKwrD,iBAAmB,CACpB5kD,KAAMA,EACN80B,gBAAiBmwB,EACjBC,SAAUA,EACVC,SAAUA,EACVC,SAAUA,EACV/I,eAAgBA,IAGjBpM,EA9EuB,GAgFlC95C,EAAQ85C,cAAgBA,G,4BCvFxBp5C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBi+B,EAAoB,EAAQ,MAC5B7N,EAAiB,EAAQ,MACzBG,EAAiB,EAAQ,KACzBsS,EAAU,EAAQ,MAClBrS,EAAe,EAAQ,KACvB9B,EAA2B,WAC3B,SAASA,EAAUoQ,EAAgBxB,GAC/B3lD,KAAKmnD,eAAiBA,EACtBnnD,KAAK2lD,YAAcA,EA8NvB,OA5NAloD,OAAOgI,eAAesxC,EAAUr4C,UAAW,OAAQ,CAC/CkJ,IAAK,WACD,OAAO5H,KAAKmnD,eAAez6C,MAE/B7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesxC,EAAUr4C,UAAW,YAAa,CACpDkJ,IAAK,WACD,OAAO5H,KAAKmnD,eAAejrB,WAE/BrxB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesxC,EAAUr4C,UAAW,YAAa,CACpDkJ,IAAK,WACD,OAAO5H,KAAKmnD,eAAetyB,WAE/BhqB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesxC,EAAUr4C,UAAW,OAAQ,CAC/CkJ,IAAK,WACD,OAAO5H,KAAKmnD,eAAe+E,WAE/BrhD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesxC,EAAUr4C,UAAW,SAAU,CACjDkJ,IAAK,WACD,QAAqCjJ,IAAjCqB,KAAKmnD,eAAe/B,SACpB,OAAOplD,KAAKmnD,eAAe/B,SAE/B,MAAM,IAAI3M,EAAe9uB,aAAatB,EAAS+T,oBAAoBC,oBAAqB,6BAE5FxxB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesxC,EAAUr4C,UAAW,SAAU,CACjDkJ,IAAK,WACD,QAAqCjJ,IAAjCqB,KAAKmnD,eAAegF,SACpB,OAAOnsD,KAAKmnD,eAAegF,SAE/B,MAAM,IAAI1T,EAAe9uB,aAAatB,EAAS+T,oBAAoBC,oBAAqB,2BAE5Fl2B,IAAK,SAAU6iD,QAC0BrqD,IAAjCqB,KAAKmnD,eAAegF,WACpBnsD,KAAKmnD,eAAe6B,OAASA,IAGrCn+C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesxC,EAAUr4C,UAAW,QAAS,CAChDkJ,IAAK,WACD,QAAkCjJ,IAA9BqB,KAAKmnD,eAAexmD,MACpB,OAAOX,KAAKmnD,eAAexmD,MAE/B,MAAM,IAAI83C,EAAe9uB,aAAatB,EAAS+T,oBAAoBC,oBAAqB,0BAE5FxxB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesxC,EAAUr4C,UAAW,MAAO,CAC9CkJ,IAAK,WACD,QAAgCjJ,IAA5BqB,KAAKmnD,eAAevuB,IACpB,OAAO54B,KAAKmnD,eAAevuB,IAE/B,MAAM,IAAI6f,EAAe9uB,aAAatB,EAAS+T,oBAAoBC,oBAAqB,wBAE5FxxB,YAAY,EACZhM,cAAc,IAElBk4C,EAAUr4C,UAAU0tD,aAAe,WAC/B,IAAKvT,EAAaC,WAAWuT,iBAAiBrsD,KAAK+G,MAC/C,MAAM,IAAI0xC,EAAe9uB,aAAatB,EAAS+T,oBAAoB7L,cAAe,iCAEtF,OAAOvwB,KAAK+G,MAEhBgwC,EAAUr4C,UAAU69B,mBAAqB,SAAUC,GAG/C,OAFAoc,EAAephB,aAAaC,gBAAgB+E,EAAe,iBAC7C8pB,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,sBACrE0hC,yBAAyB9vB,IAE5Cua,EAAUr4C,UAAU+9B,mBAAqB,WAErC,OADc6pB,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,sBACrE2hC,2BAA2BvsD,KAAK60B,YAEnDkiB,EAAUr4C,UAAU8tD,gBAAkB,SAAUC,GAC5C,IAAIhkC,EAAQzoB,KACR0sD,EAAmB,IAAIjU,EAAe9uB,aAAatB,EAAS+T,oBAAoBuwB,YAAa,gCACjG,IAAKF,IAAYA,EAAQG,SACrB,MAAMF,EAEV,IAAIG,EAAmB7sD,KAAK8sD,mBAAmBL,GAC3CM,EAAcF,EAAiBD,WAAavkC,EAAS8b,kBAAkB6oB,UAC3E,IAAKD,IAAgBF,EAAiBI,UAAYJ,EAAiBK,QAC/D,MAAMR,EAEV,IAAKK,GAAe/sD,KAAKk8B,YAAc7T,EAAS2M,UAAU8E,UACtD,MAAM,IAAI2e,EAAe9uB,aAAatB,EAAS+T,oBAAoB+wB,+BAAgC,6DAEvG,GAAIJ,GAAe/sD,KAAKosD,eAAeQ,WAAaC,EAAiBD,SACjE,OAAO/uD,QAAQ+X,QAAQ62C,GAE3B,IAAIW,EAAmBptD,KAAKqtD,eAAeR,GAE3C,OADkBvG,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,gBACrE4hC,gBAAgBxsD,KAAK0M,KAAM0gD,GAAkBt4C,MAAK,WAEjE,OADwBwxC,EAAkB57B,mBAAmB9iB,IAAI6gB,EAAMk9B,aAAa/6B,WAAW,uBACtE0iC,qBAAqBx4C,MAAK,SAAU88B,GACzD,IAAIrnB,EAAQqnB,EAAc2b,gBAAgB1qD,MAAK,SAAUqqB,GAAK,OAAOA,EAAExgB,OAAS+b,EAAM/b,QACtF,IAAK6d,EACD,MAAM,IAAIkuB,EAAe9uB,aAAatB,EAAS2U,iBAAiBzM,cAAe,8BAAgC9H,EAAM/b,MAEzH,IAAIw/C,EAAYrT,EAAaC,WAAW0U,gCAAgCjjC,EAAMkjC,gBAE9E,OADAhlC,EAAM0+B,eAAe+E,UAAYA,EAC1BA,SAInBnV,EAAUr4C,UAAUouD,mBAAqB,SAAUL,GAC/C,IAAIG,EAAWH,EAAQG,SAIvB,OAHAhU,EAAephB,aAAaoL,gBAAgBgqB,EAAUvkC,EAAS8b,kBAAmB,qBAG3E,CAAEyoB,SAAUA,EAAUK,QAFflW,EAAU2W,gBAAgBjB,EAAQQ,SAEDC,QADjCnW,EAAU2W,gBAAgBjB,EAAQS,WAGpDnW,EAAUr4C,UAAU2uD,eAAiB,SAAUZ,GAC3C,IAAIh+B,EAAI2sB,EAAIC,EAAIC,EACZsR,EAAWH,EAAQG,SAAUe,EAAelB,EAAQQ,QAASW,EAAenB,EAAQS,QACpFW,GAAe3C,EAAQQ,MAAMoC,kBAA0C,QAAvBr/B,EAAKk/B,SAAiC,IAAPl/B,OAAgB,EAASA,EAAGyG,OAC3G64B,GAAgB7C,EAAQQ,MAAMoC,kBAA0C,QAAvB1S,EAAKuS,SAAiC,IAAPvS,OAAgB,EAASA,EAAGhmB,QAC5G44B,GAAe9C,EAAQQ,MAAMoC,kBAA0C,QAAvBzS,EAAKuS,SAAiC,IAAPvS,OAAgB,EAASA,EAAGnmB,OAC3G+4B,GAAgB/C,EAAQQ,MAAMoC,kBAA0C,QAAvBxS,EAAKsS,SAAiC,IAAPtS,OAAgB,EAASA,EAAGlmB,QAC5G84B,EAAkBL,GAAeE,EACjCI,EAAkBH,GAAeC,EACrC,OAAQrB,GACJ,KAAKvkC,EAAS8b,kBAAkB6oB,UAC5B,MAAO,CAAEJ,SAAUA,GAEvB,KAAKvkC,EAAS8b,kBAAkBiqB,OAC5B,IAAKR,IAAiBO,EAClB,MAAM,IAAI1V,EAAe9uB,aAAatB,EAAS+T,oBAAoBiyB,eAAgB,gDAGvF,IADInB,EAAU,CAAEh4B,MAAO04B,EAAa14B,MAAOE,OAAQw4B,EAAax4B,SACpDF,MAAQ,GAAKg4B,EAAQ93B,OAAS,EACtC,MAAM,IAAIqjB,EAAe9uB,aAAatB,EAAS+T,oBAAoBuwB,YAAa,uCAEpF,MAAO,CAAEC,SAAUA,EAAUM,QAASA,GAE1C,KAAK7kC,EAAS8b,kBAAkBmqB,QAC5B,IAAKX,IAAiBO,EAClB,MAAM,IAAIzV,EAAe9uB,aAAatB,EAAS+T,oBAAoBmyB,eAAgB,iDAGvF,IADItB,EAAU,CAAE/3B,MAAOy4B,EAAaz4B,MAAOE,OAAQu4B,EAAav4B,SACpDF,MAAQ,GAAK+3B,EAAQ73B,OAAS,EACtC,MAAM,IAAIqjB,EAAe9uB,aAAatB,EAAS+T,oBAAoBuwB,YAAa,uCAEpF,MAAO,CAAEC,SAAUA,EAAUK,QAASA,GAE1C,KAAK5kC,EAAS8b,kBAAkB6e,MAC5B,KAAK2K,GAAiBC,GAAiBM,GAAoBC,GACvD,MAAM,IAAI1V,EAAe9uB,aAAatB,EAAS+T,oBAAoBoyB,kBAAmB,0DAE1F,IAAIvB,EAAU,CAAE/3B,MAAOy4B,EAAaz4B,MAAOE,OAAQu4B,EAAav4B,QAC5D83B,EAAU,CAAEh4B,MAAO04B,EAAa14B,MAAOE,OAAQw4B,EAAax4B,QAChE,GAAI63B,EAAQ/3B,MAAQ,GAChB+3B,EAAQ73B,OAAS,GACjB83B,EAAQh4B,MAAQ,GAChBg4B,EAAQ93B,OAAS,GACjB63B,EAAQ/3B,MAAQg4B,EAAQh4B,OACxB+3B,EAAQ73B,OAAS83B,EAAQ93B,OACzB,MAAM,IAAIqjB,EAAe9uB,aAAatB,EAAS+T,oBAAoBuwB,YAAa,0DAEpF,MAAO,CAAEC,SAAUA,EAAUK,QAASA,EAASC,QAASA,GAE5D,KAAK7kC,EAAS8b,kBAAkBsqB,QAC5B,GAAId,GAAgBC,EAAc,CAC9B,GAAIM,GAAmBC,EAAiB,CAGpC,GAFIlB,EAAU,CAAE/3B,MAAOy4B,EAAaz4B,MAAOE,OAAQu4B,EAAav4B,QAC5D83B,EAAU,CAAEh4B,MAAO04B,EAAa14B,MAAOE,OAAQw4B,EAAax4B,QAC5D63B,EAAQ/3B,QAAUg4B,EAAQh4B,OAAS+3B,EAAQ73B,SAAW83B,EAAQ93B,OAC9D,MAAM,IAAIqjB,EAAe9uB,aAAatB,EAAS+T,oBAAoBuwB,YAAa,yDAEpF,MAAO,CAAEC,SAAUA,EAAUK,QAASA,EAASC,QAASA,GAE5D,GAAIgB,EAEA,MAAO,CAAEtB,SAAUA,EAAUK,QADzBA,EAAU,CAAE/3B,MAAOy4B,EAAaz4B,MAAOE,OAAQu4B,EAAav4B,QACjB83B,QAASD,GAE5D,GAAIkB,EAEA,MAAO,CAAEvB,SAAUA,EAAUK,QADzBC,EAAU,CAAEh4B,MAAO04B,EAAa14B,MAAOE,OAAQw4B,EAAax4B,QACjB83B,QAASA,GAGhE,MAAM,IAAIzU,EAAe9uB,aAAatB,EAAS+T,oBAAoBuwB,YAAa,gCAEpF,QACI,MAAM,IAAIlU,EAAe9uB,aAAatB,EAAS2U,iBAAiBzM,cAAe,oCAAsCq8B,KAIjI7V,EAAU2W,gBAAkB,SAAU3mD,GAClC,IAAIwL,EAAQ,CAAE2iB,WAAOv2B,EAAWy2B,YAAQz2B,GACxC,IAAKoI,EACD,OAAOwL,EAEX,IAAIkc,EAAKy8B,EAAQQ,MAAMgD,eAAe3nD,EAAKmuB,OAAQy5B,EAAclgC,EAAGmgC,QAASC,EAAcpgC,EAAGqgC,OAC1F1T,EAAK8P,EAAQQ,MAAMgD,eAAe3nD,EAAKquB,QAAS25B,EAAe3T,EAAGwT,QAASI,EAAe5T,EAAG0T,OACjG,OAAIH,GAAeI,EACR,CAAE75B,MAAO25B,EAAaz5B,OAAQ45B,GAErCL,EACO,CAAEz5B,MAAO25B,GAEhBE,EACO,CAAE35B,OAAQ45B,GAEdz8C,GAEJwkC,EAjOmB,GAmO9Bh6C,EAAQg6C,UAAYA,G,4BC1OpBt5C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCkM,EAA+B,WAC/B,SAASA,EAAc+wB,EAAOmJ,EAAYC,EAAYC,EAAQC,EAAWC,EAAWhJ,GAChFrmD,KAAK8lD,MAAQA,EACb9lD,KAAKivD,WAAaA,EAClBjvD,KAAKkvD,WAAaA,EAClBlvD,KAAKmvD,OAASA,EACdnvD,KAAKovD,UAAYA,EACjBpvD,KAAKqvD,UAAYA,EACjBrvD,KAAKqmD,KAAOA,EAuEhB,OArEA5oD,OAAOgI,eAAesvB,EAAcr2B,UAAW,OAAQ,CACnDkJ,IAAK,WACD,OAAO5H,KAAK8lD,OAEhBj7C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesvB,EAAcr2B,UAAW,YAAa,CACxDkJ,IAAK,WACD,OAAO5H,KAAKkvD,YAEhB/oD,IAAK,SAAUrH,GACXkB,KAAKkvD,WAAapwD,GAEtB+L,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesvB,EAAcr2B,UAAW,YAAa,CACxDkJ,IAAK,WACD,OAAO5H,KAAKivD,YAEhBpkD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesvB,EAAcr2B,UAAW,YAAa,CACxDkJ,IAAK,WACD,MAAO,CACH0nD,UAAWtvD,KAAK0M,KAChB6iD,YAAavvD,KAAKk8B,YAAcrT,EAA2BmM,UAAUC,YAG7EpqB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesvB,EAAcr2B,UAAW,QAAS,CACpDkJ,IAAK,WACD,OAAO5H,KAAKmvD,QAEhBtkD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesvB,EAAcr2B,UAAW,WAAY,CACvDkJ,IAAK,WACD,OAAO5H,KAAKovD,WAEhBvkD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesvB,EAAcr2B,UAAW,SAAU,CACrDyH,IAAK,SAAU6iD,GACXhpD,KAAKovD,UAAYpG,GAErBn+C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesvB,EAAcr2B,UAAW,WAAY,CACvDkJ,IAAK,WACD,OAAO5H,KAAKqvD,WAEhBxkD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesvB,EAAcr2B,UAAW,MAAO,CAClDkJ,IAAK,WACD,OAAO5H,KAAKqmD,MAEhBx7C,YAAY,EACZhM,cAAc,IAEXk2B,EA/EuB,GAiFlCh4B,EAAQg4B,cAAgBA,G,0BCnFxBt3B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAMtD,IAAIw5B,EAAwC,WACxC,SAASA,EAAuBwsB,GAC5B9kD,KAAKwvD,WAAa1K,EAClB9kD,KAAKyvD,UAAY,GAgCrB,OA9BAhyD,OAAOgI,eAAe6yB,EAAuB55B,UAAW,YAAa,CACjEkJ,IAAK,WACD,OAAO5H,KAAKwvD,YAEhB3kD,YAAY,EACZhM,cAAc,IAElBy5B,EAAuB55B,UAAUwf,iBAAmB,SAAU6F,GAC1D,IAAI0E,EAAQzoB,KAEZ,OADAA,KAAKyvD,UAAUhuD,KAAKsiB,GACb,WAAc,OAAO0E,EAAM6hB,oBAAoBvmB,KAE1DuU,EAAuB55B,UAAU4rC,oBAAsB,SAAUvmB,GAC7D,IAAI2rC,EAAc1vD,KAAKyvD,UAAUtvD,OAEjC,OADAH,KAAKyvD,UAAYzvD,KAAKyvD,UAAU/sD,QAAO,SAAU2yB,GAAK,OAAOA,IAAMtR,KAC5D2rC,EAAc1vD,KAAKyvD,UAAUtvD,QAExCm4B,EAAuB55B,UAAU65B,aAAe,SAAUo3B,GACtD,IAAK,IAAIlgB,EAAK,EAAGhhB,EAAKzuB,KAAKyvD,UAAWhgB,EAAKhhB,EAAGtuB,OAAQsvC,IAAM,CACxD,IAAI1rB,EAAU0K,EAAGghB,GACjB,IAEI1rB,EADiB4rC,KAGrB,MAAO9tC,GAEH,YAILyW,EAnCgC,GAqC3Cv7B,EAAQu7B,uBAAyBA,G,kCC3CjC,IACQtQ,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBi+B,EAAoB,EAAQ,MAC5B7N,EAAiB,EAAQ,MACzBG,EAAiB,EAAQ,KACzBgX,EAAuB,EAAQ,MAC/B9Y,EAAc,EAAQ,MACtBM,EAAmB,EAAQ,KAC3BE,EAAuB,EAAQ,MAC/BH,EAA2B,SAAU5uB,GAErC,SAAS4uB,EAAUgQ,EAAgB0I,EAAYC,EAAsBnK,GACjE,IAAIl9B,EAAQF,EAAOlpB,KAAKW,KAAMmnD,EAAgBxB,IAAgB3lD,KAO9D,OANAyoB,EAAM0+B,eAAiBA,EACvB1+B,EAAMqnC,qBAAuBA,EAC7BrnC,EAAMk9B,YAAcA,EACpBl9B,EAAMsnC,qBAAuB,GAC7BtnC,EAAMunC,UAAY,IAAIJ,EAAqBK,mBAC3CxnC,EAAMynC,gBAAgBL,GACfpnC,EAmIX,OA5IAR,EAAUkvB,EAAW5uB,GAWrB4uB,EAAUz4C,UAAUwxD,gBAAkB,SAAUL,GAC5C,IAAIpnC,EAAQzoB,KACZ6vD,EAAWM,YAAY3tD,SAAQ,SAAU4tD,GACrC,IAAIjE,EAAWiE,EAAgBzvD,QAAUkvD,EAAWQ,sBAChDC,EAAqB,IAAIhZ,EAAqBC,mBAAmB6Y,EAAgBG,QAASH,EAAgBzvD,MAAOyvD,EAAgBI,aAAcrE,EAAUiE,EAAgBK,QAAShoC,GACtLA,EAAMsnC,qBAAqBtuD,KAAK6uD,GAC5BnE,IACA1jC,EAAMioC,sBAAwB,IAAItZ,EAAiBC,eAAeiZ,EAAoB7nC,EAAMqnC,qBAAsBrnC,EAAMk9B,YAAayK,EAAgBO,yBAIjKxZ,EAAUz4C,UAAUkyD,gBAAkB,SAAUjwD,EAAOyvD,GACnD,GAAKpwD,KAAK+vD,qBAAV,CAGA,IAAIc,EAAgB7wD,KAAK+vD,qBAAqBpvD,GAC9C,GAAIkwD,EAAcL,eAAiBJ,EAAgBI,aAC/C,MAAM,IAAI/X,EAAe9uB,aAAatB,EAAS+T,oBAAoB00B,qBAAsB,2FAA6FD,EAAcL,aAAe,qBAAuBJ,EAAgBI,cAE9PK,EAAcN,QAAUH,EAAgBG,QACxCM,EAAcJ,QAAUL,EAAgBK,QACpCzwD,KAAK0wD,sBAAsBF,eAAiBJ,EAAgBI,eAC5DxwD,KAAK0wD,sBAAsBD,QAAUI,EAAcJ,WAG3DtZ,EAAUz4C,UAAUqyD,YAAc,SAAUX,GACxC,IAAI3nC,EAAQzoB,KACPA,KAAK+vD,uBAGV/vD,KAAK+vD,qBAAqBvtD,SAAQ,SAAU8tD,GACzBA,EAAmBE,eAAiBJ,EAAgBI,cAG/DF,EAAmBC,QAAUH,EAAgBG,QAC7CD,EAAmB3vD,MAAQyvD,EAAgBzvD,MAC3C2vD,EAAmBtH,QAAS,EAC5BsH,EAAmBG,QAAUL,EAAgBK,QAE7ChoC,EAAMioC,sBAAwB,IAAItZ,EAAiBC,eAAeiZ,EAAoB7nC,EAAMqnC,qBAAsBrnC,EAAMk9B,YAAayK,EAAgBO,qBAIrJL,EAAmBtH,QAAS,KAGhChpD,KAAKgxD,kBACLhxD,KAAKgwD,UAAUp6C,QAAQ5V,KAAKgxD,oBAGpCvzD,OAAOgI,eAAe0xC,EAAUz4C,UAAW,mBAAoB,CAC3DkJ,IAAK,WACD,OAAO5H,KAAK0wD,uBAEhB7lD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe0xC,EAAUz4C,UAAW,kBAAmB,CAC1DkJ,IAAK,WACD,OAAO5H,KAAK+vD,sBAEhBllD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe0xC,EAAUz4C,UAAW,WAAY,CACnDkJ,IAAK,WACD,OAAO5H,KAAKmnD,eAAe6B,QAE/Bn+C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe0xC,EAAUz4C,UAAW,WAAY,CACnDkJ,IAAK,WACD,QAAS5H,KAAKmnD,eAAe/B,UAEjCv6C,YAAY,EACZhM,cAAc,IAElBs4C,EAAUz4C,UAAUuyD,4BAA8B,WAC9C,GAAIjxD,KAAK0wD,sBAAsB/vD,QAAUX,KAAK+vD,qBAAqB5vD,OAAS,EACxE,OAAOtC,QAAQ+X,QAAQ5V,KAAK0wD,uBAEhC,IAAI77C,EAAU7U,KAAKgwD,UAAUkB,6BAG7B,OAFc5K,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,4BAC5EqmC,8BACDp8C,GAEXsiC,EAAUz4C,UAAUyyD,gCAAkC,WAClD,GAAyC,IAArCnxD,KAAK0wD,sBAAsB/vD,MAC3B,OAAO9C,QAAQ+X,QAAQ5V,KAAK0wD,uBAEhC,IAAI77C,EAAU7U,KAAKgwD,UAAUkB,6BAG7B,OAFc5K,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,4BAC5EumC,kCACDt8C,GAEXsiC,EAAUz4C,UAAU0yD,wBAA0B,SAAUzwD,GAGpD,GAFAi4C,EAAephB,aAAaC,gBAAgB92B,EAAO,SACnDi4C,EAAephB,aAAa8L,oBAAoB3iC,EAAO,SAAU,SAC7DA,EAAQ,GAAKA,GAASX,KAAK+vD,qBAAqB5vD,OAChD,MAAM,IAAIs4C,EAAe9uB,aAAatB,EAAS+T,oBAAoBi1B,gBAAiB,qDAExF,GAAI1wD,IAAUX,KAAK0wD,sBAAsB/vD,MACrC,OAAO9C,QAAQ+X,QAAQ5V,KAAK0wD,uBAEhC,IAAI77C,EAAU7U,KAAKgwD,UAAUkB,6BAG7B,OAFc5K,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,4BAC5EwmC,wBAAwBzwD,GACzBkU,GAEXsiC,EAAUz4C,UAAU4yD,sBAAwB,SAAU3wD,GAClD,IAAI8nB,EAAQzoB,KAGZ,GAFA44C,EAAephB,aAAaC,gBAAgB92B,EAAO,SACnDi4C,EAAephB,aAAa8L,oBAAoB3iC,EAAO,SAAU,SAC7DA,EAAQ,GAAKA,GAASX,KAAK+vD,qBAAqB5vD,OAChD,MAAM,IAAIs4C,EAAe9uB,aAAatB,EAAS+T,oBAAoBi1B,gBAAiB,qDAGxF,OADc/K,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,4BACrE0mC,sBAAsB3wD,GAAOmU,MAAK,SAAUqf,GAGvD,OAFA1L,EAAMmoC,gBAAgBz8B,EAASxzB,MAAOwzB,GACb,IAAImjB,EAAqBC,mBAAmBpjB,EAASo8B,QAASp8B,EAASxzB,MAAOwzB,EAASq8B,cAAc,EAAOr8B,EAASs8B,QAAShoC,OAI/J0uB,EAAUz4C,UAAU6yD,qBAAuB,WACnCvxD,KAAKgwD,WACLhwD,KAAKgwD,UAAUz5C,OAAO,iCAGvB4gC,EA7ImB,CA8I5BL,EAAYC,WACdh6C,EAAQo6C,UAAYA,G,2BCrKpB15C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBowB,EAAiB,EAAQ,MACzBI,EAAe,EAAQ,KACvBrC,EAAkB,EAAQ,MAC1BQ,EAAkB,EAAQ,MAC1BS,EAAkB,EAAQ,KAC1BJ,EAAgC,WAChC,SAASA,EAAema,EAAqBC,EAAYC,EAAYf,GACjE3wD,KAAKwxD,oBAAsBA,EACvBb,IACA3wD,KAAK2xD,oBAAsB3xD,KAAK4xD,qBAAqBjB,EAAoBc,EAAYC,IAuF7F,OApFAj0D,OAAOgI,eAAe4xC,EAAe34C,UAAW,QAAS,CACrDkJ,IAAK,WACD,OAAO5H,KAAKwxD,oBAAoB7wD,OAEpCkK,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4xC,EAAe34C,UAAW,UAAW,CACvDkJ,IAAK,WACD,OAAO5H,KAAKwxD,oBAAoBjB,SAEpC1lD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4xC,EAAe34C,UAAW,SAAU,CACtDkJ,IAAK,WACD,OAAO5H,KAAKwxD,oBAAoBxI,QAEpCn+C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4xC,EAAe34C,UAAW,UAAW,CACvDkJ,IAAK,WACD,OAAO5H,KAAKwxD,oBAAoBf,SAEpCtqD,IAAK,SAAUsqD,GACXzwD,KAAKwxD,oBAAoBf,QAAUA,GAEvC5lD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4xC,EAAe34C,UAAW,cAAe,CAC3DkJ,IAAK,WACD,OAAO5H,KAAKwxD,oBAAoBK,aAEpChnD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4xC,EAAe34C,UAAW,iBAAkB,CAC9DkJ,IAAK,WACD,OAAO5H,KAAK2xD,qBAEhB9mD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4xC,EAAe34C,UAAW,eAAgB,CAC5DkJ,IAAK,WACD,OAAO5H,KAAKwxD,oBAAoBhB,cAEpC3lD,YAAY,EACZhM,cAAc,IAElBw4C,EAAe34C,UAAUkzD,qBAAuB,SAAUjB,EAAoBc,EAAYC,GACtF,IAQII,EAPAC,EAAqBlZ,EAAaC,WAAWkZ,4BAA4BrB,EAAmBjkD,KAAM+kD,GAClGQ,EAAqBpZ,EAAaC,WAAWoZ,sBAC7CC,OAAgDxzD,IAAvBozD,EACzBK,EAAoBL,EAAqBA,EAAmBn5B,IAAM,GAGlEy5B,EAAyB,IAAIrb,EAAgBjiB,cAAc47B,EAAmBjkD,KAAMmsC,EAAaC,WAAWwZ,iBAAiB3B,EAAmBz0B,WAAY+1B,GAPvI,GAME,EACkME,EAAwBC,GAErP,OAAQC,EAAuBn2B,WAC3B,KAAK7T,EAAS2M,UAAU8E,UACpB,IAAIotB,EAAQ,CACRl+B,UAAWqpC,EAAuB3lD,MAEtColD,EAAY,IAAIra,EAAgBC,cAAc2a,EAAwBX,EAAYxK,EAAO,KAAMlnD,MAC/F,MAEJ,KAAKqoB,EAAS2M,UAAUC,UACpB,IAAIJ,EAAY,CACZy6B,UAAW+C,EAAuB3lD,KAClC6iD,aAAa,GAEjBuC,EAAY,IAAItb,EAAgBjhB,cAAc88B,EAAwB1B,EAAmB4B,eAAgB19B,EAAW68B,EAAY1xD,MAChI,MAEJ,QACI,MAAM,IAAIy4C,EAAe9uB,aAAatB,EAAS2U,iBAAiBw1B,YAAa,qBAGrF,OAAOV,GAEJza,EA3FwB,GA6FnCt6C,EAAQs6C,eAAiBA,G,0BCpGzB55C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIy4C,EAAoC,WACpC,SAASA,EAAmBkb,EAAUtD,EAAQuD,EAAeC,EAASC,EAAUC,GAC5E7yD,KAAKyyD,SAAWA,EAChBzyD,KAAKmvD,OAASA,EACdnvD,KAAK0yD,cAAgBA,EACrB1yD,KAAK2yD,QAAUA,EACf3yD,KAAK4yD,SAAWA,EAChB5yD,KAAK6yD,iBAAmBA,EAwD5B,OAtDAp1D,OAAOgI,eAAe8xC,EAAmB74C,UAAW,UAAW,CAC3DkJ,IAAK,WACD,OAAO5H,KAAKyyD,UAEhBtsD,IAAK,SAAUoqD,GACXvwD,KAAKyyD,SAAWlC,GAEpB1lD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8xC,EAAmB74C,UAAW,QAAS,CACzDkJ,IAAK,WACD,OAAO5H,KAAKmvD,QAEhBhpD,IAAK,SAAUxF,GACXX,KAAKmvD,OAASxuD,GAElBkK,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8xC,EAAmB74C,UAAW,eAAgB,CAChEkJ,IAAK,WACD,OAAO5H,KAAK0yD,eAEhB7nD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8xC,EAAmB74C,UAAW,SAAU,CAC1DkJ,IAAK,WACD,OAAO5H,KAAK2yD,SAEhBxsD,IAAK,SAAUgmD,GACXnsD,KAAK2yD,QAAUxG,GAEnBthD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8xC,EAAmB74C,UAAW,UAAW,CAC3DkJ,IAAK,WACD,OAAO5H,KAAK4yD,UAEhBzsD,IAAK,SAAU2sD,GACX9yD,KAAK4yD,SAAWE,GAEpBjoD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8xC,EAAmB74C,UAAW,cAAe,CAC/DkJ,IAAK,WACD,OAAO5H,KAAK6yD,kBAEhBhoD,YAAY,EACZhM,cAAc,IAEX04C,EA/D4B,GAiEvCx6C,EAAQw6C,mBAAqBA,G,0BClE7B95C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAMtD/B,EAAQiwB,aAJJ,c,iCCFJ,IACQhF,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBQ,EAA6B,EAAQ,MACrCotB,EAAe,EAAQ,MACvByT,EAAiB,EAAQ,MACzBqJ,EAAmB,EAAQ,KAC3BzM,EAAoB,EAAQ,MAC5B7N,EAAiB,EAAQ,MACzBG,EAAiB,EAAQ,KACzBjC,EAAmB,EAAQ,MAE3Be,EAA+B,SAAUnvB,GAEzC,SAASmvB,EAAc5iB,EAAe6wB,EAAaqN,EAAWC,EAAsBvM,GAChF,IAAIj+B,EAAQF,EAAOlpB,KAAKW,KAAM80B,EAAe6wB,IAAgB3lD,KAI7D,OAHAyoB,EAAMuqC,UAAYA,EAClBvqC,EAAMwqC,qBAAuBA,EAC7BxqC,EAAMi+B,sBAAwBA,EACvBj+B,EAkOX,OAxOAR,EAAUyvB,EAAenvB,GAQzB9qB,OAAOgI,eAAeiyC,EAAch5C,UAAW,kBAAmB,CAC9DkJ,IAAK,WACD,OAAO5H,KAAKizD,sBAEhBpoD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeiyC,EAAch5C,UAAW,mBAAoB,CAC/DkJ,IAAK,WACD,OAAO5H,KAAK0mD,uBAEhB77C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeiyC,EAAch5C,UAAW,WAAY,CACvDkJ,IAAK,WACD,OAAO5H,KAAKgzD,WAEhBnoD,YAAY,EACZhM,cAAc,IAElB64C,EAAch5C,UAAUwrD,mBAAqB,WACzC,OAAO,KAEXxS,EAAch5C,UAAUu8B,iBAAmB,SAAUvR,EAAW/c,EAAQuuB,EAAYntB,GAIhF,OAHA6qC,EAAephB,aAAaoL,gBAAgB1H,EAAY7S,EAASse,iBAAkB,6BACnF3mC,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBACrEqQ,iBAAiBj7B,KAAKm9B,SAAUzT,EAAW/c,EAAQuuB,EAAYntB,IAElF2pC,EAAch5C,UAAU6+B,sBAAwB,SAAU7T,EAAW8T,GAWjE,OAVAob,EAAephB,aAAaC,gBAAgB/N,EAAW,aACvDkvB,EAAephB,aAAaC,gBAAgB+F,EAAe,iBACvDA,EAAc21B,WACdva,EAAephB,aAAaoL,gBAAgBpF,EAAc21B,WAAYtqC,EAA2B4d,iBAAkB,oBAGnHmS,EAAephB,aAAa47B,qBAAqB51B,EAAcjf,IAAKif,EAAclf,KAEtFte,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBACrE2S,sBAAsBv9B,KAAKm9B,SAAUzT,EAAW8T,IAEnEka,EAAch5C,UAAU++B,6BAA+B,SAAU/T,EAAW/c,EAAQuuB,EAAYntB,GAI5F,GAHA6qC,EAAephB,aAAaC,gBAAgB/N,EAAW,aACvDkvB,EAAephB,aAAaC,gBAAgB9qB,EAAQ,UACpDisC,EAAephB,aAAaoL,gBAAgB1H,EAAY7S,EAASse,iBAAkB,8BAC9E1pC,MAAMgG,QAAQ0J,KAAYA,EAAO0mD,OAClC,MAAM,IAAI5a,EAAe9uB,aAAad,EAA2Be,WAAW6Y,iBAAkB,8FAIlG,OAFAziC,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBACrE6S,6BAA6Bz9B,KAAKm9B,SAAUzT,EAAW/c,EAAQuuB,EAAYntB,IAE9F2pC,EAAch5C,UAAUi/B,iBAAmB,SAAUjU,GAIjD,OAHAkvB,EAAephB,aAAaC,gBAAgB/N,EAAW,aACvD1pB,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBACrE+S,iBAAiB39B,KAAKm9B,SAAUzT,IAEnDguB,EAAch5C,UAAUg/B,6BAA+B,SAAUhU,EAAW3b,GAOxE,OANA6qC,EAAephB,aAAaS,sBAAsBvO,EAAW,aAC7DkvB,EAAephB,aAAaC,gBAAgB1pB,EAAS,WACrD6qC,EAAephB,aAAaoL,gBAAgB70B,EAAQwvC,WAAY10B,EAA2Bwd,WAAY,cACvGuS,EAAephB,aAAaoL,gBAAgB70B,EAAQulD,UAAWzqC,EAA2Bme,cAAe,iBACzGhnC,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBACrE8S,6BAA6B19B,KAAKm9B,SAAUzT,EAAW3b,IAE1E2pC,EAAch5C,UAAUk/B,oBAAsB,WAC1C,IAAInV,EAAQzoB,KAGZ,OAFAA,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,uBACrEgT,oBAAoB59B,KAAKm9B,UAAUroB,MAAK,SAAUxU,GAC7D,IAAIgsB,EAAahsB,EACbizD,EAA0BjnC,EAAWknC,uBAAuB/qC,EAAM/b,MAClE6f,EAAc,GAEdknC,EAAYF,EAAwBG,kBACxCnnC,EAAY9qB,KAAKgnB,EAAMgE,yBAAyBH,EAAWC,YAAYknC,KAEvE,IAAK,IAAIhkB,EAAK,EAAGhhB,EAAK8kC,EAAwBI,yBAA0BlkB,EAAKhhB,EAAGtuB,OAAQsvC,IAAM,CAC1F,IAAImkB,EAAcnlC,EAAGghB,GACjBmkB,IAAgBH,GAChBlnC,EAAY9qB,KAAKgnB,EAAMgE,yBAAyBH,EAAWC,YAAYqnC,KAG/E,OAAOrnC,MAGfmrB,EAAch5C,UAAU4qB,gBAAkB,WAGtC,OAFAtpB,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBACrEtB,gBAAgBtpB,KAAKm9B,WAExCua,EAAch5C,UAAUwrB,sBAAwB,WAG5C,OAFAlqB,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBACrEV,sBAAsBlqB,KAAKm9B,WAE9Cua,EAAch5C,UAAUm/B,yBAA2B,WAG/C,OAFA79B,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBACrEiT,yBAAyB79B,KAAKm9B,WAEjDua,EAAch5C,UAAUo/B,oBAAsB,SAAU/vB,GAIpD,OAHA/N,KAAKkzD,oBAELnlD,EAAUA,GAAW,GADPu4C,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBAErEsT,uBAAuBl+B,KAAKm9B,SAAU41B,EAAiBc,YAAYC,UAAW/lD,EAAQ08C,gBAAiB18C,EAAQgmD,iBAAiB,EAAMhmD,EAAQ28C,sBAAwB,GAAI38C,EAAQmnC,SAAW,EAAGnnC,EAAQ48C,yBAA2B9hC,EAA2B2d,wBAAwB0V,YAEzSxE,EAAch5C,UAAUq/B,0BAA4B,SAAUC,EAAcjwB,GAIxE,OAHA/N,KAAKkzD,oBAELnlD,EAAUA,GAAW,GADPu4C,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBAErEmT,0BAA0B/9B,KAAKm9B,SAAUa,GAAgBh+B,KAAKkqD,uBAAwBn8C,EAAQ08C,gBAAiB18C,EAAQgmD,iBAAiB,EACvJhmD,EAAQ28C,sBAAwB,GAAI38C,EAAQ48C,yBAA2B9hC,EAA2B2d,wBAAwB0V,YAE9HxE,EAAch5C,UAAUu/B,2BAA6B,WAGjD,OAFAj+B,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBACrEqT,2BAA2Bj+B,KAAKm9B,WAEnDua,EAAch5C,UAAUw/B,uBAAyB,SAAUnwB,GAIvD,OAHA/N,KAAKkzD,oBAELnlD,EAAUA,GAAW,GADPu4C,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBAErEsT,uBAAuBl+B,KAAKm9B,SAAU41B,EAAiBc,YAAYG,aAAcjmD,EAAQ08C,gBAAiB18C,EAAQgmD,kBAAmBhmD,EAAQkmD,kBAAmBlmD,EAAQ28C,sBAAwB,GAAI38C,EAAQmnC,SAAW,EAAGnnC,EAAQ48C,yBAA2B9hC,EAA2B2d,wBAAwB0V,YAEnUxE,EAAch5C,UAAUy/B,yBAA2B,WAG/C,OAFAn+B,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,uBACrEuT,yBAAyBn+B,KAAKm9B,UAAUroB,MAAK,SAAU81C,GAClE,OAAOA,EAAkBnoD,KAAI,SAAUooD,GAAoB,OAAO,IAAInB,EAAeoB,aAAaD,UAG1GnT,EAAch5C,UAAU0/B,4BAA8B,SAAUC,EAAgBtwB,GAI5E,OAHA/N,KAAKkzD,oBAELnlD,EAAUA,GAAW,GADPu4C,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBAErEwT,4BAA4Bp+B,KAAKm9B,SAAUkB,IAAkBtwB,EAAQ08C,gBAAiB18C,EAAQgmD,kBAAmBhmD,EAAQkmD,kBAAmBlmD,EAAQ28C,sBAAwB,GAAI38C,EAAQmnC,SAAW,EAAGnnC,EAAQ48C,yBAA2B9hC,EAA2B2d,wBAAwB0V,YAE/SxE,EAAch5C,UAAU4/B,kCAAoC,SAAUD,EAAgBL,EAAcjwB,GAIhG,OAHA/N,KAAKkzD,oBAELnlD,EAAUA,GAAW,GADPu4C,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBAErE0T,kCAAkCt+B,KAAKm9B,SAAUkB,EAAgBL,GAAgBh+B,KAAKkqD,uBAAwBn8C,EAAQ08C,gBAAiB18C,EAAQgmD,kBAAmBhmD,EAAQkmD,kBAAmBlmD,EAAQ28C,sBAAwB,GAAI38C,EAAQ48C,yBAA2B9hC,EAA2B2d,wBAAwB0V,YAE1UxE,EAAch5C,UAAU6/B,wBAA0B,WAG9C,OAFAv+B,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,qBACrE2T,wBAAwBv+B,KAAKm9B,WAEhDua,EAAch5C,UAAUigC,wBAA0B,SAAUC,EAAYC,GAKpE,OAJA+Z,EAAephB,aAAaC,gBAAgBmH,EAAY,aACxDga,EAAephB,aAAaoL,gBAAgB/D,EAAqBhW,EAA2Bsd,oBAAqB,uBACjHnmC,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,qBACrE+T,wBAAwB3+B,KAAKm9B,SAAUyB,EAAYC,IAEtE6Y,EAAch5C,UAAUggC,qBAAuB,SAAUE,EAAYC,GAKjE,OAJA+Z,EAAephB,aAAaC,gBAAgBmH,EAAY,aACxDga,EAAephB,aAAaoL,gBAAgB/D,EAAqBhW,EAA2Bsd,oBAAqB,uBACjHnmC,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,qBACrE8T,qBAAqB1+B,KAAKm9B,SAAUyB,EAAYC,IAEnE6Y,EAAch5C,UAAUogC,kBAAoB,SAAUC,EAAMC,GAIxD,OAHA4Z,EAAephB,aAAaC,gBAAgBsH,EAAM,QAClD/+B,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,sBACrEkU,kBAAkB9+B,KAAKm9B,SAAU4B,EAAMC,IAE1D0Y,EAAch5C,UAAUugC,oBAAsB,WAG1C,OAFAj/B,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,sBACrEqU,oBAAoBj/B,KAAKm9B,WAE5Cua,EAAch5C,UAAUwgC,sBAAwB,SAAUC,GAItD,OAHAyZ,EAAephB,aAAaC,gBAAgB0H,EAAY,cACxDn/B,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,sBACrEsU,sBAAsBl/B,KAAKm9B,SAAUgC,IAExDuY,EAAch5C,UAAUw1D,uBAAyB,SAAUC,EAAYC,GAGnE,OAFAp0D,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,iCACrEspC,uBAAuBl0D,KAAKm9B,SAASnU,UAAWmrC,EAAYC,IAE/E1c,EAAch5C,UAAU21D,uBAAyB,SAAUF,EAAYG,GAGnE,OAFAt0D,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,iCACrEypC,uBAAuBr0D,KAAKm9B,SAASnU,UAAWmrC,EAAYG,IAE/E5c,EAAch5C,UAAU61D,wBAA0B,SAAUJ,EAAYG,GAGpE,OAFAt0D,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,iCACrE2pC,wBAAwBv0D,KAAKm9B,SAASnU,UAAWmrC,EAAYG,IAEhF5c,EAAch5C,UAAU81D,uBAAyB,SAAUL,EAAYM,EAAYC,GAG/E,OAFA10D,KAAKkzD,oBACS5M,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,iCACrE4pC,uBAAuBx0D,KAAKm9B,SAASnU,UAAWmrC,EAAYM,EAAYC,IAE3Fhd,EAAch5C,UAAU+tB,yBAA2B,SAAUC,GACzD,IAAIC,EAAiB,IAAIgqB,EAAiB/pB,eAAeF,EAAgB1sB,KAAK2lD,aAC1E94B,EAAa,IAAIopB,EAAanpB,WAAWH,GAE7C,OADAA,EAAeI,+BAA+BF,GACvCA,GAEX6qB,EAAch5C,UAAUw0D,kBAAoB,WACxC,IAAIyB,EAA2B30D,KAAKgpD,OAChC4L,EAA0B50D,KAAK40D,0BAC/BC,EAA2B70D,KAAK60D,2BACpC,IAAKF,IAA6BC,IAA4BC,EAC1D,MAAM,IAAIpc,EAAe9uB,aAAad,EAA2BmU,iBAAiBmsB,eAAgB,8CAG1GzR,EAAch5C,UAAUm2D,yBAA2B,WAC/C,OAAO70D,KAAK0mD,uBAAyB1mD,KAAK0mD,sBAAsBsC,QAEpEtR,EAAch5C,UAAUk2D,wBAA0B,WAC9C,OAAO50D,KAAKizD,sBAAwBjzD,KAAKizD,qBAAqBjK,QAE3DtR,EAzOuB,CADhB,EAAQ,MA2OZX,WACdh6C,EAAQ26C,cAAgBA,G,0BCnQxBj6C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAKtD,IAAIgsD,EAA8B,WAC9B,SAASA,EAAagK,GAClB90D,KAAK80D,cAAgBA,EAgBzB,OAdAr3D,OAAOgI,eAAeqlD,EAAapsD,UAAW,KAAM,CAChDkJ,IAAK,WACD,OAAO5H,KAAK80D,cAAc7jD,IAE9BpG,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeqlD,EAAapsD,UAAW,UAAW,CACrDkJ,IAAK,WACD,OAAO5H,KAAK80D,cAAcvE,SAE9B1lD,YAAY,EACZhM,cAAc,IAEXisD,EAlBsB,GAoBjC/tD,EAAQ+tD,aAAeA,G,kCCzBvB,IACQ9iC,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCy9B,EAAoB,EAAQ,MAC5B1N,EAAiB,EAAQ,KACzBmc,EAAwB,WACxB,SAASA,EAAOC,EAAgB/rC,EAAYgsC,EAAa/rC,EAAUy8B,GAC/D3lD,KAAKg1D,eAAiBA,EACtBh1D,KAAKipB,WAAaA,EAClBjpB,KAAKi1D,YAAcA,EACnBj1D,KAAKkpB,SAAWA,EAChBlpB,KAAK2lD,YAAcA,EA4CvB,OA1CAloD,OAAOgI,eAAesvD,EAAOr2D,UAAW,gBAAiB,CACrDkJ,IAAK,WACD,OAAO5H,KAAKg1D,gBAEhBnqD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesvD,EAAOr2D,UAAW,YAAa,CACjDkJ,IAAK,WACD,OAAO5H,KAAKipB,YAEhBpe,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesvD,EAAOr2D,UAAW,UAAW,CAC/CkJ,IAAK,WACD,OAAO5H,KAAKkpB,UAEhBre,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesvD,EAAOr2D,UAAW,aAAc,CAClDkJ,IAAK,WACD,OAAO5H,KAAKi1D,aAEhBpqD,YAAY,EACZhM,cAAc,IAElBk2D,EAAOr2D,UAAUw2D,cAAgB,WAE7B,OADc5O,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,uBACrEsqC,cAAcl1D,KAAKkpB,WAEtC6rC,EAAOr2D,UAAUy2D,0BAA4B,WAEzC,OADc7O,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBACrEuqC,0BAA0Bn1D,KAAKg1D,eAAgBh1D,KAAKkpB,WAEvE6rC,EAAOr2D,UAAU02D,0BAA4B,SAAUC,GACnDzc,EAAephB,aAAaC,gBAAgB49B,EAAmB,qBAC/D,IAAIC,EAAmB,IAAI5nB,IAAI2nB,GAE/B,OADc/O,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBACrEwqC,0BAA0Bp1D,KAAKg1D,eAAgBh1D,KAAKipB,WAAYjpB,KAAKkpB,SAAUjsB,MAAMC,KAAKo4D,KAEtGP,EAlDgB,GAoD3Bh4D,EAAQg4D,OAASA,EACjB,IAAIQ,EAAmC,SAAUhtC,GAE7C,SAASgtC,EAAkBvO,EAAet9B,EAAWD,EAASo6B,EAAY6N,EAAY8D,EAAgBC,EAAgBC,GAClH,IAAIjtC,EAAQF,EAAOlpB,KAAKW,KAAMgnD,EAAet9B,EAAWm6B,EAAYp6B,EAASioC,IAAe1xD,KAI5F,OAHAyoB,EAAM+sC,eAAiBA,EACvB/sC,EAAMgtC,eAAiBA,EACvBhtC,EAAMitC,eAAiBA,EAChBjtC,EA+BX,OArCAR,EAAUstC,EAAmBhtC,GAQ7B9qB,OAAOgI,eAAe8vD,EAAkB72D,UAAW,gBAAiB,CAChEkJ,IAAK,WACD,OAAO5H,KAAK01D,gBAEhB7qD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8vD,EAAkB72D,UAAW,gBAAiB,CAChEkJ,IAAK,WACD,OAAO5H,KAAKw1D,gBAEhB3qD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8vD,EAAkB72D,UAAW,gBAAiB,CAChEkJ,IAAK,WACD,OAAO5H,KAAKy1D,gBAEhB5qD,YAAY,EACZhM,cAAc,IAElB02D,EAAkB72D,UAAUi3D,eAAiB,SAAUC,GAMnD,OALKA,IACDA,EAAa/sC,EAA2B6d,iBAAiBqV,UAE7DnD,EAAephB,aAAaoL,gBAAgBgzB,EAAY/sC,EAA2B6d,iBAAkB,oBACvF4f,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBACrEirC,0BAA0B71D,KAAKg1D,eAAgBh1D,KAAKkpB,SAAU0sC,IAE1EL,EAtC2B,CAuCpCR,GACFh4D,EAAQw4D,kBAAoBA,EAC5B,IAAIO,EAAuC,WACvC,SAASA,EAAsBC,EAAQC,EAAmBC,GACtDj2D,KAAK+1D,OAASA,EACd/1D,KAAKg2D,kBAAoBA,EACzBh2D,KAAKi2D,OAASA,EAuBlB,OArBAx4D,OAAOgI,eAAeqwD,EAAsBp3D,UAAW,QAAS,CAC5DkJ,IAAK,WACD,OAAO5H,KAAK+1D,QAEhBlrD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeqwD,EAAsBp3D,UAAW,mBAAoB,CACvEkJ,IAAK,WACD,OAAO5H,KAAKg2D,mBAEhBnrD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeqwD,EAAsBp3D,UAAW,QAAS,CAC5DkJ,IAAK,WACD,OAAO5H,KAAKi2D,QAEhBprD,YAAY,EACZhM,cAAc,IAEXi3D,EA3B+B,GA6B1C/4D,EAAQ+4D,sBAAwBA,EAChC,IAAII,EAAyC,WACzC,SAASA,EAAwBpQ,EAAOqQ,GACpCn2D,KAAK8lD,MAAQA,EACb9lD,KAAKm2D,qBAAuBA,EAgBhC,OAdA14D,OAAOgI,eAAeywD,EAAwBx3D,UAAW,OAAQ,CAC7DkJ,IAAK,WACD,OAAO5H,KAAK8lD,OAEhBj7C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeywD,EAAwBx3D,UAAW,sBAAuB,CAC5EkJ,IAAK,WACD,OAAO5H,KAAKm2D,sBAEhBtrD,YAAY,EACZhM,cAAc,IAEXq3D,EAnBiC,GAqB5Cn5D,EAAQm5D,wBAA0BA,EAClC,IAAIE,EAAoC,SAAU7tC,GAE9C,SAAS6tC,EAAmBpP,EAAet9B,EAAWD,EAASo6B,EAAY6N,EAAY2E,EAAgBC,EAAmBC,EAAiBC,EAAehB,EAAgBE,GACtK,IAAIjtC,EAAQF,EAAOlpB,KAAKW,KAAMgnD,EAAet9B,EAAWm6B,EAAYp6B,EAASioC,IAAe1xD,KAO5F,OANAyoB,EAAM4tC,eAAiBA,EACvB5tC,EAAM6tC,kBAAoBA,EAC1B7tC,EAAM8tC,gBAAkBA,EACxB9tC,EAAM+tC,cAAgBA,EACtB/tC,EAAM+sC,eAAiBA,EACvB/sC,EAAMitC,eAAiBA,EAChBjtC,EA+CX,OAxDAR,EAAUmuC,EAAoB7tC,GAW9B6tC,EAAmB13D,UAAUi3D,eAAiB,SAAUC,GACpD,MAAM,IAAI1wD,MAAM,4BAEpBzH,OAAOgI,eAAe2wD,EAAmB13D,UAAW,gBAAiB,CACjEkJ,IAAK,WACD,OAAO5H,KAAKq2D,gBAEhBxrD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe2wD,EAAmB13D,UAAW,mBAAoB,CACpEkJ,IAAK,WACD,OAAO5H,KAAKs2D,mBAEhBzrD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe2wD,EAAmB13D,UAAW,iBAAkB,CAClEkJ,IAAK,WACD,OAAO5H,KAAKu2D,iBAEhB1rD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe2wD,EAAmB13D,UAAW,eAAgB,CAChEkJ,IAAK,WACD,OAAO5H,KAAKw2D,eAEhB3rD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe2wD,EAAmB13D,UAAW,gBAAiB,CACjEkJ,IAAK,WACD,OAAO5H,KAAK01D,gBAEhB7qD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe2wD,EAAmB13D,UAAW,gBAAiB,CACjEkJ,IAAK,WACD,OAAO5H,KAAKw1D,gBAEhB3qD,YAAY,EACZhM,cAAc,IAEXu3D,EAzD4B,CA0DrCrB,GACFh4D,EAAQq5D,mBAAqBA,EAC7B,IAAIK,EAA6B,SAAUluC,GAEvC,SAASkuC,EAAYzP,EAAet9B,EAAWD,EAASo6B,EAAY6N,EAAYgF,EAAMC,EAAMC,GACxF,IAAInuC,EAAQF,EAAOlpB,KAAKW,KAAMgnD,EAAet9B,EAAWm6B,EAAYp6B,EAASioC,IAAe1xD,KAI5F,OAHAyoB,EAAMiuC,KAAOA,EACbjuC,EAAMkuC,KAAOA,EACbluC,EAAMmuC,mBAAqBA,EACpBnuC,EA+BX,OArCAR,EAAUwuC,EAAaluC,GAQvB9qB,OAAOgI,eAAegxD,EAAY/3D,UAAW,WAAY,CACrDkJ,IAAK,WACD,OAAO5H,KAAK02D,MAEhB7rD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAegxD,EAAY/3D,UAAW,WAAY,CACrDkJ,IAAK,WACD,OAAO5H,KAAK22D,MAEhB9rD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAegxD,EAAY/3D,UAAW,oBAAqB,CAC9DkJ,IAAK,WACD,OAAO5H,KAAK42D,oBAEhB/rD,YAAY,EACZhM,cAAc,IAElB43D,EAAY/3D,UAAUi3D,eAAiB,SAAUC,GAC7C,IAAIiB,EAAUvQ,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,kBAKpF,OAJKgrC,IACDA,EAAa/sC,EAA2B6d,iBAAiBqV,UAE7DnD,EAAephB,aAAaoL,gBAAgBgzB,EAAY/sC,EAA2B6d,iBAAkB,oBAC9FmwB,EAAQC,oBAAoB92D,KAAKg1D,eAAgBh1D,KAAKkpB,SAAU0sC,IAEpEa,EAtCqB,CAuC9B1B,GACFh4D,EAAQ05D,YAAcA,EACtB,IAAIM,EAAoC,SAAUxuC,GAE9C,SAASwuC,EAAmB/P,EAAet9B,EAAWD,EAASo6B,EAAY6N,EAAYsF,EAAaC,EAAaC,EAAYC,GACzH,IAAI1uC,EAAQF,EAAOlpB,KAAKW,KAAMgnD,EAAet9B,EAAWm6B,EAAYp6B,EAASioC,IAAe1xD,KAK5F,OAJAyoB,EAAMuuC,YAAcA,EACpBvuC,EAAMwuC,YAAcA,EACpBxuC,EAAMyuC,WAAaA,EACnBzuC,EAAM0uC,QAAUA,EACT1uC,EA8BX,OArCAR,EAAU8uC,EAAoBxuC,GAS9B9qB,OAAOgI,eAAesxD,EAAmBr4D,UAAW,aAAc,CAC9DkJ,IAAK,WACD,OAAO5H,KAAKg3D,aAEhBnsD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesxD,EAAmBr4D,UAAW,aAAc,CAC9DkJ,IAAK,WACD,OAAO5H,KAAKi3D,aAEhBpsD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesxD,EAAmBr4D,UAAW,YAAa,CAC7DkJ,IAAK,WACD,OAAO5H,KAAKk3D,YAEhBrsD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesxD,EAAmBr4D,UAAW,SAAU,CAC1DkJ,IAAK,WACD,OAAO5H,KAAKm3D,SAEhBtsD,YAAY,EACZhM,cAAc,IAEXk4D,EAtC4B,CAuCrChC,GACFh4D,EAAQg6D,mBAAqBA,EAC7B,IAAIK,EAAmC,WACnC,SAASA,EAAkBC,EAASC,GAChCt3D,KAAKq3D,QAAUA,EACfr3D,KAAKs3D,YAAcA,EAgBvB,OAdA75D,OAAOgI,eAAe2xD,EAAkB14D,UAAW,SAAU,CACzDkJ,IAAK,WACD,OAAO5H,KAAKq3D,SAEhBxsD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe2xD,EAAkB14D,UAAW,OAAQ,CACvDkJ,IAAK,WACD,OAAO5H,KAAKs3D,aAEhBzsD,YAAY,EACZhM,cAAc,IAEXu4D,EAnB2B,GAqBtCr6D,EAAQq6D,kBAAoBA,EAC5B,IAAIG,EAA6B,WAC7B,SAASA,EAAYb,EAAMC,EAAMW,GAC7Bt3D,KAAK02D,KAAOA,EACZ12D,KAAK22D,KAAOA,EACZ32D,KAAKs3D,YAAcA,EAuBvB,OArBA75D,OAAOgI,eAAe8xD,EAAY74D,UAAW,OAAQ,CACjDkJ,IAAK,WACD,OAAO5H,KAAKs3D,aAEhBzsD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8xD,EAAY74D,UAAW,MAAO,CAChDkJ,IAAK,WACD,OAAO5H,KAAK02D,MAEhB7rD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8xD,EAAY74D,UAAW,MAAO,CAChDkJ,IAAK,WACD,OAAO5H,KAAK22D,MAEhB9rD,YAAY,EACZhM,cAAc,IAEX04D,EA3BqB,GA6BhCx6D,EAAQw6D,YAAcA,G,0BCpWtB95D,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI04D,EAA2B,WAC3B,SAASA,EAAUC,EAAOC,EAAUC,EAAgBC,EAAyBC,EAAgBC,GACzF93D,KAAKy3D,MAAQA,EACbz3D,KAAK03D,SAAWA,EAChB13D,KAAK23D,eAAiBA,EACtB33D,KAAK43D,wBAA0BA,EAC/B53D,KAAK63D,eAAiBA,EACtB73D,KAAK83D,WAAaA,EAClB93D,KAAK8lD,MAAQ+R,EAAiB,qBAAuB,wBAmDzD,OAjDAp6D,OAAOgI,eAAe+xD,EAAU94D,UAAW,OAAQ,CAC/CkJ,IAAK,WACD,OAAO5H,KAAK8lD,OAEhBj7C,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe+xD,EAAU94D,UAAW,OAAQ,CAC/CkJ,IAAK,WACD,OAAO5H,KAAKy3D,OAEhB5sD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe+xD,EAAU94D,UAAW,UAAW,CAClDkJ,IAAK,WACD,OAAO5H,KAAK03D,UAEhB7sD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe+xD,EAAU94D,UAAW,YAAa,CACpDkJ,IAAK,WACD,OAAO5H,KAAK83D,YAEhBjtD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe+xD,EAAU94D,UAAW,gBAAiB,CACxDkJ,IAAK,WACD,OAAO5H,KAAK23D,gBAEhB9sD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe+xD,EAAU94D,UAAW,yBAA0B,CACjEkJ,IAAK,WACD,OAAO5H,KAAK43D,yBAEhB/sD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe+xD,EAAU94D,UAAW,gBAAiB,CACxDkJ,IAAK,WACD,OAAO5H,KAAK63D,gBAEhBhtD,YAAY,EACZhM,cAAc,IAEX24D,EA3DmB,GA6D9Bz6D,EAAQy6D,UAAYA,EACpB,IAAIO,EAA0B,WAC1B,SAASA,EAAS7sC,EAAO8sC,EAAQC,GAC7Bj4D,KAAKkrB,MAAQA,EACblrB,KAAKg4D,OAASA,EACdh4D,KAAKi4D,SAAWA,EAuBpB,OArBAx6D,OAAOgI,eAAesyD,EAASr5D,UAAW,OAAQ,CAC9CkJ,IAAK,WACD,OAAO5H,KAAKkrB,OAEhBrgB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesyD,EAASr5D,UAAW,QAAS,CAC/CkJ,IAAK,WACD,OAAO5H,KAAKg4D,QAEhBntD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAesyD,EAASr5D,UAAW,UAAW,CACjDkJ,IAAK,WACD,OAAO5H,KAAKi4D,UAEhBptD,YAAY,EACZhM,cAAc,IAEXk5D,EA3BkB,GA6B7Bh7D,EAAQg7D,SAAWA,EACnB,IAAIG,EAAwB,WACxB,SAASA,EAAOjvC,EAAYC,EAAUivC,EAAWC,EAAejJ,GAC5DnvD,KAAKipB,WAAaA,EAClBjpB,KAAKkpB,SAAWA,EAChBlpB,KAAKm4D,UAAYA,EACjBn4D,KAAKo4D,cAAgBA,EACrBp4D,KAAKmvD,OAASA,EAqClB,OAnCA1xD,OAAOgI,eAAeyyD,EAAOx5D,UAAW,YAAa,CACjDkJ,IAAK,WACD,OAAO5H,KAAKipB,YAEhBpe,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeyyD,EAAOx5D,UAAW,UAAW,CAC/CkJ,IAAK,WACD,OAAO5H,KAAKkpB,UAEhBre,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeyyD,EAAOx5D,UAAW,WAAY,CAChDkJ,IAAK,WACD,OAAO5H,KAAKm4D,WAEhBttD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeyyD,EAAOx5D,UAAW,eAAgB,CACpDkJ,IAAK,WACD,OAAO5H,KAAKo4D,eAEhBvtD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeyyD,EAAOx5D,UAAW,QAAS,CAC7CkJ,IAAK,WACD,OAAO5H,KAAKmvD,QAEhBtkD,YAAY,EACZhM,cAAc,IAEXq5D,EA3CgB,GA6C3Bn7D,EAAQm7D,OAASA,EACjB,IAAIG,EAA2B,WAE3B,SAASA,EAAUtC,EAAQuC,EAAcC,GACrCv4D,KAAK+1D,OAASA,EACd/1D,KAAKs4D,aAAeA,EACpBt4D,KAAKu4D,gBAAkBA,EAuB3B,OArBA96D,OAAOgI,eAAe4yD,EAAU35D,UAAW,QAAS,CAChDkJ,IAAK,WACD,OAAO5H,KAAK+1D,QAEhBlrD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4yD,EAAU35D,UAAW,cAAe,CACtDkJ,IAAK,WACD,OAAO5H,KAAKs4D,cAEhBztD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe4yD,EAAU35D,UAAW,iBAAkB,CACzDkJ,IAAK,WACD,OAAO5H,KAAKu4D,iBAEhB1tD,YAAY,EACZhM,cAAc,IAEXw5D,EA5BmB,GA8B9Bt7D,EAAQs7D,UAAYA,G,kCCzKpB,IAAIG,EAAax4D,MAAQA,KAAKw4D,WAAc,SAAUC,EAASC,EAAYlpD,EAAGmpD,GAE1E,OAAO,IAAKnpD,IAAMA,EAAI3R,WAAU,SAAU+X,EAASW,GAC/C,SAASqiD,EAAU95D,GAAS,IAAMyB,EAAKo4D,EAAUl4D,KAAK3B,IAAW,MAAO+iB,GAAKtL,EAAOsL,IACpF,SAASg3C,EAAS/5D,GAAS,IAAMyB,EAAKo4D,EAAiB,MAAE75D,IAAW,MAAO+iB,GAAKtL,EAAOsL,IACvF,SAASthB,EAAKD,GAJlB,IAAexB,EAIawB,EAAOM,KAAOgV,EAAQtV,EAAOxB,QAJ1CA,EAIyDwB,EAAOxB,MAJhDA,aAAiB0Q,EAAI1Q,EAAQ,IAAI0Q,GAAE,SAAUoG,GAAWA,EAAQ9W,OAITgW,KAAK8jD,EAAWC,GAClGt4D,GAAMo4D,EAAYA,EAAU9pD,MAAM4pD,EAASC,GAAc,KAAKj4D,YAGlEq4D,EAAe94D,MAAQA,KAAK84D,aAAgB,SAAUL,EAASM,GAC/D,IAAsGn6D,EAAGyoD,EAAGxhB,EAAGh2B,EAA3GmpD,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPrzB,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,IAAOszB,KAAM,GAAIC,IAAK,IAChG,OAAOvpD,EAAI,CAAEpP,KAAM+tC,EAAK,GAAI,MAASA,EAAK,GAAI,OAAUA,EAAK,IAAwB,mBAAXn4B,SAA0BxG,EAAEwG,OAAO7V,UAAY,WAAa,OAAOR,OAAU6P,EACvJ,SAAS2+B,EAAK1mB,GAAK,OAAO,SAAUmmB,GAAK,OACzC,SAAcorB,GACV,GAAIz6D,EAAG,MAAM,IAAIX,UAAU,mCAC3B,KAAO+6D,OACH,GAAIp6D,EAAI,EAAGyoD,IAAMxhB,EAAY,EAARwzB,EAAG,GAAShS,EAAU,OAAIgS,EAAG,GAAKhS,EAAS,SAAOxhB,EAAIwhB,EAAU,SAAMxhB,EAAExmC,KAAKgoD,GAAI,GAAKA,EAAE5mD,SAAWolC,EAAIA,EAAExmC,KAAKgoD,EAAGgS,EAAG,KAAKz4D,KAAM,OAAOilC,EAE3J,OADIwhB,EAAI,EAAGxhB,IAAGwzB,EAAK,CAAS,EAARA,EAAG,GAAQxzB,EAAE/mC,QACzBu6D,EAAG,IACP,KAAK,EAAG,KAAK,EAAGxzB,EAAIwzB,EAAI,MACxB,KAAK,EAAc,OAAXL,EAAEC,QAAgB,CAAEn6D,MAAOu6D,EAAG,GAAIz4D,MAAM,GAChD,KAAK,EAAGo4D,EAAEC,QAAS5R,EAAIgS,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKL,EAAEI,IAAIE,MAAON,EAAEG,KAAKG,MAAO,SACxC,QACI,MAAkBzzB,GAAZA,EAAImzB,EAAEG,MAAYh5D,OAAS,GAAK0lC,EAAEA,EAAE1lC,OAAS,KAAkB,IAAVk5D,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEL,EAAI,EAAG,SACjG,GAAc,IAAVK,EAAG,MAAcxzB,GAAMwzB,EAAG,GAAKxzB,EAAE,IAAMwzB,EAAG,GAAKxzB,EAAE,IAAM,CAAEmzB,EAAEC,MAAQI,EAAG,GAAI,MAC9E,GAAc,IAAVA,EAAG,IAAYL,EAAEC,MAAQpzB,EAAE,GAAI,CAAEmzB,EAAEC,MAAQpzB,EAAE,GAAIA,EAAIwzB,EAAI,MAC7D,GAAIxzB,GAAKmzB,EAAEC,MAAQpzB,EAAE,GAAI,CAAEmzB,EAAEC,MAAQpzB,EAAE,GAAImzB,EAAEI,IAAI33D,KAAK43D,GAAK,MACvDxzB,EAAE,IAAImzB,EAAEI,IAAIE,MAChBN,EAAEG,KAAKG,MAAO,SAEtBD,EAAKN,EAAK15D,KAAKo5D,EAASO,GAC1B,MAAOn3C,GAAKw3C,EAAK,CAAC,EAAGx3C,GAAIwlC,EAAI,EAAK,QAAUzoD,EAAIinC,EAAI,EACtD,GAAY,EAARwzB,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAEv6D,MAAOu6D,EAAG,GAAKA,EAAG,QAAK,EAAQz4D,MAAM,GArB9BL,CAAK,CAACunB,EAAGmmB,OAwB7DxwC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIwnD,EAAoB,EAAQ,MAC5B1N,EAAiB,EAAQ,KACzB2gB,EAAiC,WACjC,SAASA,EAAgB/P,EAAKmO,EAAgB6B,EAAe7T,GACzD3lD,KAAKwpD,IAAMA,EACXxpD,KAAK23D,eAAiBA,EACtB33D,KAAKw5D,cAAgBA,EACrBx5D,KAAK2lD,YAAcA,EACnB3lD,KAAKy5D,WAAa9pD,KAAK8O,KAAKk5C,EAAiB6B,GAoEjD,OAlEA/7D,OAAOgI,eAAe8zD,EAAgB76D,UAAW,gBAAiB,CAC9DkJ,IAAK,WACD,OAAO5H,KAAK23D,gBAEhB9sD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8zD,EAAgB76D,UAAW,YAAa,CAC1DkJ,IAAK,WACD,OAAO5H,KAAKy5D,YAEhB5uD,YAAY,EACZhM,cAAc,IAElB06D,EAAgB76D,UAAUg7D,aAAe,SAAUC,GAG/C,OAFA/gB,EAAephB,aAAaoiC,YAAYD,EAAY,EAAG35D,KAAKy5D,YAC9CnT,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBACrE8uC,aAAa15D,KAAKwpD,IAAKmQ,EAAY35D,KAAKw5D,gBAE3DD,EAAgB76D,UAAUm7D,iBAAmB,SAAU3kB,GACnD,OAAOsjB,EAAUx4D,UAAM,OAAQ,GAAQ,WACnC,IAAI85D,EAAWC,EAAeC,EAAgBC,EAAcC,EAAeC,EAAehwD,EAAGiwD,EAAMC,EAC/F5rC,EACJ,OAAOqqC,EAAY94D,MAAM,SAAUo7C,GAC/B,OAAQA,EAAG6d,OACP,KAAK,EAAG,MAAO,CAAC,EAAaj5D,KAAK05D,aAAa,IAC/C,KAAK,EACDI,EAAY1e,EAAG8d,OACfhkB,EAAUA,GAAWl1C,KAAKs6D,cAC1BP,EAAgBpqD,KAAK4O,IAAI22B,EAASl1C,KAAKs6D,eACvCN,EAAiBrqD,KAAK8O,KAAKs7C,EAAgB/5D,KAAKw5D,eAChDS,EAAetqD,KAAK4O,IAAIy7C,EAAgB,KACxCE,EAAgBD,EAAeD,EAC/BG,EAAgB,GAChBhwD,EAAI,EACJixC,EAAG6d,MAAQ,EACf,KAAK,EACD,OAAM9uD,EAAI8vD,EACH,CAAC,EAAaj6D,KAAK05D,aAAavvD,IADP,CAAC,EAAa,GAElD,KAAK,EACDiwD,EAAOhf,EAAG8d,OACViB,EAAc14D,KAAK24D,EAAK3yD,MACxB2zC,EAAG6d,MAAQ,EACf,KAAK,EAED,OADA9uD,IACO,CAAC,EAAa,GACzB,KAAK,EAID,OAHAkwD,GAAY5rC,EAAKqrC,EAAUryD,MAAM+P,OAAO3I,MAAM4f,EAAI0rC,IAEzCh6D,OAAS45D,EACX,CAAC,EAAc,CACdrtD,KAAMotD,EAAUptD,KAChBjF,KAAM4yD,EACNE,QAAST,EAAUS,QACnBD,cAAeJ,EAAgBD,EAAej6D,KAAKw5D,cAAgBO,EACnES,uBAAwBN,EACxBO,cAAeX,EAAUW,wBAMrDlB,EAAgB76D,UAAUg8D,aAAe,WAErC,OADcpU,EAAkB57B,mBAAmB9iB,IAAI5H,KAAK2lD,aAAa/6B,WAAW,oBACrE8vC,aAAa16D,KAAKwpD,MAE9B+P,EA1EyB,GA4EpCx8D,EAAQw8D,gBAAkBA,G,gCCnH1B,IACQvxC,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAItD,IAAI67D,EACA,aAIJ59D,EAAQ49D,eAAiBA,EAIzB,IAAIC,EAAqC,SAAUryC,GAE/C,SAASqyC,IACL,IAAInyC,EAAmB,OAAXF,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAEhE,OADAyoB,EAAMoyC,aAAe,GACdpyC,EAEX,OANAR,EAAU2yC,EAAqBryC,GAMxBqyC,EAP6B,CAQtCD,GACF59D,EAAQ69D,oBAAsBA,EAI9B,IAAIE,EAA4C,SAAUvyC,GAEtD,SAASuyC,IACL,OAAkB,OAAXvyC,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAE/D,OAJAioB,EAAU6yC,EAA4BvyC,GAI/BuyC,EALoC,CAM7CF,GACF79D,EAAQ+9D,2BAA6BA,EAIrC,IAAIC,EAAqC,SAAUxyC,GAE/C,SAASwyC,IACL,OAAkB,OAAXxyC,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAE/D,OAJAioB,EAAU8yC,EAAqBxyC,GAIxBwyC,EAL6B,CAMtCJ,GACF59D,EAAQg+D,oBAAsBA,EAI9B,IAAIC,EAAyC,SAAUzyC,GAEnD,SAASyyC,IACL,OAAkB,OAAXzyC,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAE/D,OAJAioB,EAAU+yC,EAAyBzyC,GAI5ByyC,EALiC,CAM1CJ,GACF79D,EAAQi+D,wBAA0BA,EAUlCj+D,EAAQk+D,oBALJ,WACIj7D,KAAKk7D,UAAY,IAgBzBn+D,EAAQo+D,yBAPJ,WACIn7D,KAAKo7D,aAAe,GACpBp7D,KAAKq7D,YAAc,GACnBr7D,KAAKs7D,cAAgB,K,0BCtF7B79D,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI84C,EAAuB,WACvB,SAASA,EAAM2jB,EAAIC,GACfx7D,KAAKu7D,GAAKA,EACVv7D,KAAKw7D,GAAKA,EAgBd,OAdA/9D,OAAOgI,eAAemyC,EAAMl5C,UAAW,IAAK,CACxCkJ,IAAK,WACD,OAAO5H,KAAKu7D,IAEhB1wD,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAemyC,EAAMl5C,UAAW,IAAK,CACxCkJ,IAAK,WACD,OAAO5H,KAAKw7D,IAEhB3wD,YAAY,EACZhM,cAAc,IAEX+4C,EAnBe,GAqB1B76C,EAAQ66C,MAAQA,G,yBCjBhB,IAAWic,EALXp2D,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,KAK3C+0D,EAGM92D,EAAQ82D,cAAgB92D,EAAQ82D,YAAc,KAFtC,QAAI,UACzBA,EAAwB,WAAI,c,4BCPhCp2D,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI28D,EAAyB,EAAQ,MACjCC,EAA0B,EAAQ,KAClCC,EAA0B,EAAQ,KAClCC,EAAmC,EAAQ,MAC3CC,EAAsB,EAAQ,KAC9BC,EAAuB,EAAQ,MAC/B/jB,EAA4B,EAAQ,MACpCgkB,EAA0B,EAAQ,MAClCC,EAAyB,EAAQ,MACjC3jB,EAAoB,EAAQ,MAC5B4jB,EAAmB,EAAQ,MAC3BC,EAAoB,EAAQ,MAC5B5V,EAAoB,EAAQ,MAehCvpD,EAAQg0B,0BAdR,SAAmChB,EAAY2hC,EAAYlhC,GACvD81B,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAI43B,EAAuBU,qBAAqBpsC,EAAY2hC,IACjIpL,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAI83B,EAAwBS,sBAAsBrsC,EAAY2hC,EAAYlhC,IAC/I81B,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAIi4B,EAAqBO,mBAAmBtsC,EAAY2hC,IAC7HpL,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAIg4B,EAAoBS,kBAAkBvsC,EAAY2hC,IAC3HpL,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAIkU,EAA0BC,wBAAwBjoB,IAC3Hu2B,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAIk4B,EAAwBQ,sBAAsBxsC,EAAY2hC,IACnIpL,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAIm4B,EAAuBQ,qBAAqBzsC,EAAY2hC,IACjIpL,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAI63B,EAAwBe,sBAAsB1sC,EAAY2hC,IACnIpL,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAIq4B,EAAkBQ,gBAAgB3sC,EAAY2hC,IACvHpL,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAIwU,EAAkBC,gBAAgBvoB,EAAY2hC,IACvHpL,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAIo4B,EAAiBU,eAAe5sC,EAAY2hC,IACrHpL,EAAkB57B,mBAAmB9iB,IAAI8pD,GAAY7tB,gBAAgB,IAAI+3B,EAAiCgB,+BAA+B7sC,EAAY2hC,M,4BC1BzJj0D,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrC4vB,EAAiB,EAAQ,MAC7BzrC,OAAO6vD,4BAA8B7vD,OAAO6vD,6BAA+B,GAC3E,IAAIC,EAAqC,WACrC,SAASA,IACL98D,KAAK+8D,UAAY,GAWrB,OATAD,EAAoBp+D,UAAUmlC,gBAAkB,SAAUgzB,GACtD72D,KAAK+8D,UAAUlG,EAAQmG,aAAenG,GAE1CiG,EAAoBp+D,UAAUksB,WAAa,SAAUoyC,GACjD,IAAKh9D,KAAK+8D,UAAUjtD,eAAektD,GAC/B,MAAM,IAAIvkB,EAAe9uB,aAAad,EAA2Be,WAAW2G,cAAe,2BAA6BysC,GAE5H,OAAOh9D,KAAK+8D,UAAUC,IAEnBF,EAb6B,GA0BpCpyC,EAAoC,WAEpC,SAASA,KA+BT,OA1BAA,EAAmB9iB,IAAM,SAAU8pD,GAI/B,GAHK1kD,OAAO6vD,6BAAgC7vD,OAAO6vD,4BAA4BnL,IAC3EhnC,EAAmBuyC,YAAYvL,EAAY,IAAIoL,IAE9C9vD,OAAO6vD,4BAA4BnL,GACpC,MAAM,IAAIjZ,EAAe9uB,aAAad,EAA2Be,WAAW2G,cAAe,2BAE/F,OAAOvjB,OAAO6vD,4BAA4BnL,IAO9ChnC,EAAmBuyC,YAAc,SAAUvL,EAAYwL,GAC9ClwD,OAAO6vD,8BACR7vD,OAAO6vD,4BAA8B,IAEzC7vD,OAAO6vD,4BAA4BnL,GAAcwL,GAKrDxyC,EAAmByyC,cAAgB,WAC/BnwD,OAAO6vD,4BAA8B,IAElCnyC,EAjC4B,GAmCvC3tB,EAAQ2tB,mBAAqBA,G,kCCjE7B,IACQ1C,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCwoB,EAAmC,EAAQ,MAC3C8C,EAAiB,EAAQ,KAEzBujB,EAAsC,SAAU5zC,GAEhD,SAAS4zC,IACL,OAAkB,OAAX5zC,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAoB/D,OAtBAioB,EAAUk0C,EAAsB5zC,GAIhC9qB,OAAOgI,eAAe02D,EAAqBz9D,UAAW,cAAe,CACjEkJ,IAAK,WACD,MAAO,qBAEXiD,YAAY,EACZhM,cAAc,IAElBs9D,EAAqBz9D,UAAUiqD,YAAc,SAAU3tB,GACnD,IAAIvM,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAYspC,aAAe,EACzD3uC,GAGJ,OAFAmqB,EAAephB,aAAaoL,gBAAgB5H,EAAanS,EAA2Bmd,gBAAiB,mBACrGnS,EAAWvG,EAA2BwG,YAAYspC,aAAetnB,EAAiChT,+BAA+B+Z,mBAAmB/c,QAAQ9E,GACrJh7B,KAAKg0B,QAAQ1G,EAA2B2G,OAAOopC,gBAAiBxpC,GAAY/e,MAAK,SAAUqf,QAI/FgoC,EAvB8B,CADjB,EAAQ,MAyBZr6B,iBACpB/kC,EAAQo/D,qBAAuBA,G,iCC5C/B,IACQn0C,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBiF,EAA6B,EAAQ,MACrC4oB,EAAmC,EAAQ,MAC3ConB,EAAoB,EAAQ,MAC5B7kB,EAAiB,EAAQ,MAEzBgkB,EAAuC,SAAUl0C,GAEjD,SAASk0C,IACL,OAAkB,OAAXl0C,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAiJ/D,OAnJAioB,EAAUw0C,EAAuBl0C,GAIjC9qB,OAAOgI,eAAeg3D,EAAsB/9D,UAAW,cAAe,CAClEkJ,IAAK,WACD,MAAO,sBAEXiD,YAAY,EACZhM,cAAc,IASlB49D,EAAsB/9D,UAAUogC,kBAAoB,SAAU3B,EAAU4B,EAAMC,GAC1E,IAAIvQ,EACA8uC,EAA0Bv9D,KAAKw9D,sBAAsB,CAACz+B,IAEtD0+B,EAAgB,wBAA0Bz+B,EAAiB,0BAC3DnL,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,oBAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,EAAGnB,EAA2BwG,YAAYuV,cAAgB/b,EAA2B+b,aAAaub,KAClGn2B,EAAGnB,EAA2BwG,YAAY6pC,aANvB,CAAE1iD,EAAG,EAAGosC,EAAG,GAO9B54B,EAAGnB,EAA2BwG,YAAY8pC,eAAiB,CAACL,EAAwBM,WACpFpvC,EAAGnB,EAA2BwG,YAAYgqC,eAAiBL,EAC3DhvC,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO8pC,iBAAkBlqC,GAAY/e,MAAK,SAAUqf,QAWvGsoC,EAAsB/9D,UAAUugC,oBAAsB,SAAU9B,GAC5D,IAAI1O,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,sBAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO+pC,eAAgBnqC,GAAY/e,MAAK,SAAUqf,GAC7F,IAAI8pC,EAAkB9pC,EAAS7zB,OAC/B,OAAOmoB,EAAMy1C,oBAAoBD,OASzCxB,EAAsB/9D,UAAUwgC,sBAAwB,SAAU/B,EAAUgC,GACxE,IAAI1Q,EACA8uC,EAA0Bv9D,KAAKm+D,4BAA4B,CAACh/B,IAC5DtL,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,wBAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,EAAGnB,EAA2BwG,YAAY8pC,eAAiB,CAACL,EAAwBM,WACpFpvC,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOmqC,iBAAkBvqC,GAAY/e,MAAK,SAAUqf,QASvGsoC,EAAsB/9D,UAAU8+D,sBAAwB,SAAUa,GAC9D,IAAIC,EAAM,GACNf,EAA0B,IAAID,EAAkBnC,yBAUpD,GATAkD,EAAM77D,SAAQ,SAAUu8B,GACpB,IAAIw/B,EAAUx/B,EAAKw/B,QACnB,KAAIA,MAAAA,GAA6CA,EAAU,GAIvD,MAAM,IAAI9lB,EAAe9uB,aAAatB,EAASuB,WAAW2G,cAAe,mBAHzE+tC,EAAI78D,KAAK88D,EAAQn6D,eAMN,IAAfk6D,EAAIn+D,OAAc,CAElB,IAAIq+D,EAAsB,IAAIlB,EAAkBrC,oBAChDuD,EAAoBC,cAAgB,SACpCD,EAAoBtD,UAAYoD,EAChCf,EAAwBM,UAAYW,EAExC,OAAOjB,GAMXd,EAAsB/9D,UAAUy/D,4BAA8B,SAAUO,GACpE,IAAIJ,EAAM,GACNf,EAA0B,IAAID,EAAkBnC,yBAUpD,GATAuD,EAAYl8D,SAAQ,SAAU28B,GAC1B,IAAIw/B,EAAex/B,EAAWw/B,aAC9B,KAAIA,MAAAA,GAAuDA,GAAgB,GAIvE,MAAM,IAAIlmB,EAAe9uB,aAAatB,EAASuB,WAAW2G,cAAe,wBAHzE+tC,EAAI78D,KAAKk9D,EAAav6D,eAMX,IAAfk6D,EAAIn+D,OAAc,CAElB,IAAIq+D,EAAsB,IAAIlB,EAAkBrC,oBAChDuD,EAAoBC,cAAgB,cACpCD,EAAoBtD,UAAYoD,EAChCf,EAAwBM,UAAYW,EAExC,OAAOjB,GAOXd,EAAsB/9D,UAAUkgE,cAAgB,SAAUz/B,GACtD,MAAO,CACH0/B,eAAgB1/B,EAAWH,eAC3B2/B,aAAcx/B,EAAWw/B,aACzB3/B,eAAgBG,EAAW2/B,oBAC3Bpa,eAAgBxO,EAAiCtW,+BAA+B8kB,eAAe5kB,QAAQX,EAAW4/B,cAClHR,QAASp/B,EAAWo/B,UAQ5B9B,EAAsB/9D,UAAUw/D,oBAAsB,SAAUQ,GAC5D,IAAIj2C,EAAQzoB,KAEZ,OADsB0+D,EAAYj8D,KAAI,SAAU08B,GAAc,OAAO1W,EAAMm2C,cAAcz/B,OAGtFs9B,EApJ+B,CADlB,EAAQ,MAsJZ36B,iBACpB/kC,EAAQ0/D,sBAAwBA,G,kCC1KhC,IACQz0C,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIwuB,EAA6B,EAAQ,MAErCwqB,EAAuC,SAAUvvB,GAEjD,SAASuvB,IACL,OAAkB,OAAXvvB,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAoB/D,OAtBAioB,EAAU6vB,EAAuBvvB,GAIjC9qB,OAAOgI,eAAeqyC,EAAsBp5C,UAAW,cAAe,CAClEkJ,IAAK,WACD,MAAO,uBAEXiD,YAAY,EACZhM,cAAc,IAElBi5C,EAAsBp5C,UAAU4uD,mBAAqB,WACjD,IAAI7+B,EACA+f,EAAOlhB,EAA2B2G,OAAO+qC,uBACzCnrC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,qBAC1DujB,GACJ,OAAOzuB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GAEjD,OADiBA,EAAS7zB,WAI3Bw3C,EAvB+B,CADlB,EAAQ,MAyBZhW,iBACpB/kC,EAAQ+6C,sBAAwBA,G,iCCzChC,IACQ9vB,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCo2C,EAAmB,EAAQ,MAC3B3xC,EAA6B,EAAQ,MACrC2oB,EAAe,EAAQ,MACvBG,EAAU,EAAQ,MAClBO,EAAmB,EAAQ,MAC3BiT,EAAc,EAAQ,MACtBnR,EAAiB,EAAQ,MACzBL,EAAoB,EAAQ,MAChCr7C,EAAQmiE,4BAA8B,CAClCjuD,GAAIguD,EAAiBj2B,yBAAyBsL,cAC9Cic,QAAS0O,EAAiBj2B,yBAAyBm2B,oBAGvD,IAAIC,EAAoC,CAAE1uC,MAAO,EAAGC,MAAO,GAAIC,IAAK,GAChEwrC,EAAuC,SAAU7zC,GAKjD,SAAS6zC,EAAsBrsC,EAAY2hC,EAAYpf,QAC1B,IAArBA,IAA+BA,EAAmB8sB,GACtD,IAAI32C,EAAQF,EAAOlpB,KAAKW,KAAM+vB,EAAY2hC,IAAe1xD,KAEzD,OADAyoB,EAAM6pB,iBAAmBA,EAClB7pB,EAuIX,OA/IAR,EAAUm0C,EAAuB7zC,GAUjC9qB,OAAOgI,eAAe22D,EAAsB19D,UAAW,cAAe,CAClEkJ,IAAK,WACD,MAAO,uBAEXiD,YAAY,EACZhM,cAAc,IAElBu9D,EAAsB19D,UAAUo8C,aAAe,SAAUukB,GACrD,IAAI5wC,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,eAC1DujB,EAAGnB,EAA2BwG,YAAYwrC,aAAe,EACzD7wC,EAAGnB,EAA2BwG,YAAYyrC,kBAAmB,EAC7D9wC,GAKJ,OAHI4wC,IACAxrC,EAAWvG,EAA2BwG,YAAY0rC,cAAgBH,GAE/Dr/D,KAAKg0B,QAAQ1G,EAA2B2G,OAAOwrC,kBAAmB5rC,GAAY/e,MAAK,SAAUqf,QAIxGioC,EAAsB19D,UAAUq8C,qBAAuB,SAAUskB,GAC7D,IAAI5wC,EACAixC,IAAkBjxC,EAAK,IACpBnB,EAA2BwG,YAAY5oB,cAAgB,uBAC1DujB,EAAGnB,EAA2BwG,YAAY0rC,cAAgBH,EAC1D5wC,GAEJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO0rC,gBAAiBD,GAAgB5qD,MAAK,SAAU8qD,GAClG,IAAIvV,EAAauV,EAAat/D,OAI9B,GAAiC,IAA7B+pD,EAAWwV,OAAO1/D,OAClB,MAAM,IAAIs4C,EAAe9uB,aAAad,EAA2Be,WAAWk2C,mCAAoC,yCAA2CT,GAE/J,OAAOhV,EAAWwV,WAG1BzD,EAAsB19D,UAAUk/B,oBAAsB,SAAUT,GAC5D,IAAI1O,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,sBAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO8rC,eAAgBlsC,GAAY/e,MAAK,SAAUqf,GAE7F,OADiBA,EAAS7zB,WAIlC87D,EAAsB19D,UAAU2tB,uBAAyB,WACrD,IAAIoC,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,yBAC1DujB,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO+rC,kBAAmBnsC,GAAY/e,MAAK,SAAUqf,GAEhG,OADiBA,EAAS7zB,WAIlC87D,EAAsB19D,UAAUs8C,4BAA8B,SAAUqkB,GACpE,IAAI5wC,EACAiT,IAAUjT,EAAK,IACZnB,EAA2BwG,YAAY5oB,cAAgB,8BAC1DujB,EAAGnB,EAA2BwG,YAAY0rC,cAAgBH,EAC1D5wC,GAEJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOgsC,kCAAmCv+B,GAAQ5sB,MAAK,SAAUqf,GAE5G,OAD2BA,EAAS7zB,WAI5C87D,EAAsB19D,UAAUw2D,cAAgB,SAAUgL,GACtD,IAAIzxC,EACAhG,EAAQzoB,KACRwuC,EAAOlhB,EAA2B2G,OAAOksC,sBACzCtsC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,gBAC1DujB,EAAGnB,EAA2BwG,YAAYssC,SAAWF,EACrDzxC,GACJ,OAAOzuB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GACjD,IAAItH,EAAasH,EAAS7zB,OAAOgtB,EAA2BwG,YAAYhH,YACpEuzC,EAAQlsC,EAAS7zB,OAAOgtB,EAA2BwG,YAAYuiB,OACnE,OAAO5tB,EAAM63C,aAAaD,EAAO53C,EAAM83C,kBAAkB1zC,QAGjEuvC,EAAsB19D,UAAUu8C,sBAAwB,SAAUokB,GAC9D,IAAI5wC,EACJ,IAAKzuB,KAAKwgE,mCAMN,OAAO,IAAI3iE,SAAQ,SAAU+X,GAAW,OAAOA,EAAQ,CAAC7Y,EAAQmiE,iCAEpE,IAAIx9B,IAAUjT,EAAK,IACZnB,EAA2BwG,YAAY5oB,cAAgB,wBAC1DujB,EAAGnB,EAA2BwG,YAAY0rC,cAAgBH,EAC1D5wC,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOwsC,iBAAkB/+B,GAAQ5sB,MAAK,SAAUqf,GAC3F,OAAOA,EAAS7zB,WAGxB87D,EAAsB19D,UAAUy/B,yBAA2B,SAAUhB,GACjE,IAAI1O,EACJ,IAAKzuB,KAAKwgE,mCAMN,OAAO,IAAI3iE,SAAQ,SAAU+X,GAAW,OAAOA,EAAQ,CAAC7Y,EAAQmiE,iCAEpE,IAAIx9B,IAAUjT,EAAK,IACZnB,EAA2BwG,YAAY5oB,cAAgB,2BAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOysC,oBAAqBh/B,GAAQ5sB,MAAK,SAAUqf,GAC9F,OAAOA,EAAS7zB,WAGxB87D,EAAsB19D,UAAU4hE,aAAe,SAAUD,EAAOxzC,GAC5D,OAAO,IAAIupB,EAAQC,MAAM,IAAIuT,EAAYK,UAAUoW,EAAOxzC,KAE9DuvC,EAAsB19D,UAAU6hE,kBAAoB,SAAU1zC,GAC1D,OAAO,IAAIopB,EAAanpB,WAAW,IAAI6pB,EAAiB/pB,eAAeC,EAAY7sB,KAAK2lD,eAE5FyW,EAAsB19D,UAAU8hE,iCAAmC,WAE/D,OAAOvB,EAAiB5tB,gBADkB,CAAE3gB,MAAO,EAAGC,MAAO,GAAIC,IAAK,GACO5wB,KAAKsyC,mBAE/E8pB,EAhJ+B,CAiJxChkB,EAAkBtW,iBACpB/kC,EAAQq/D,sBAAwBA,G,kCC/KhC,IACQp0C,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIwuB,EAA6B,EAAQ,MAErCsvC,EAAgD,SAAUr0C,GAE1D,SAASq0C,IACL,OAAkB,OAAXr0C,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KA2D/D,OA7DAioB,EAAU20C,EAAgCr0C,GAI1C9qB,OAAOgI,eAAem3D,EAA+Bl+D,UAAW,cAAe,CAC3EkJ,IAAK,WACD,MAAO,iCAEXiD,YAAY,EACZhM,cAAc,IAElB+9D,EAA+Bl+D,UAAUw1D,uBAAyB,SAAU5E,EAAW6E,EAAYC,GAC/F,IAAI3lC,EACA+f,EAAOlhB,EAA2B2G,OAAO0sC,uBACzC9sC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,yBAC1DujB,EAAGnB,EAA2BwG,YAAY8sC,eAAiBtR,EAC3D7gC,EAAGnB,EAA2BwG,YAAY+sC,6BAA+BzM,EAAO0M,YAChFryC,GACJ,OAAOzuB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GAEjD,OADoBA,EAAS7zB,WAIrCs8D,EAA+Bl+D,UAAU21D,uBAAyB,SAAU/E,EAAW6E,EAAYG,GAC/F,IAAI7lC,EACA+f,EAAOlhB,EAA2B2G,OAAO8sC,uBACzCltC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,yBAC1DujB,EAAGnB,EAA2BwG,YAAY8sC,eAAiBtR,EAC3D7gC,EAAGnB,EAA2BwG,YAAYktC,oBAAsB1M,EAChE7lC,GACJ,OAAOzuB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,QAIzDyoC,EAA+Bl+D,UAAU61D,wBAA0B,SAAUjF,EAAW6E,EAAYG,GAChG,IAAI7lC,EACA+f,EAAOlhB,EAA2B2G,OAAOgtC,wBACzCptC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,0BAC1DujB,EAAGnB,EAA2BwG,YAAY8sC,eAAiBtR,EAC3D7gC,EAAGnB,EAA2BwG,YAAYktC,oBAAsB1M,EAChE7lC,GACJ,OAAOzuB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,QAIzDyoC,EAA+Bl+D,UAAU81D,uBAAyB,SAAUlF,EAAW6E,EAAYM,EAAYC,GAC3G,IAAIjmC,EACA+f,EAAOlhB,EAA2B2G,OAAOitC,mBACzCrtC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,yBAC1DujB,EAAGnB,EAA2BwG,YAAY8sC,eAAiBtR,EAC3D7gC,EAAGnB,EAA2BwG,YAAYqtC,oBAAsB1M,EAChEhmC,EAAGnB,EAA2BwG,YAAYstC,yBAA2B1M,EACrEjmC,GACJ,OAAOzuB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,QAIlDyoC,EA9DwC,CAD3B,EAAQ,MAgEZ96B,iBACpB/kC,EAAQ6/D,+BAAiCA,G,iCChFzC,IACQ50C,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGnFowC,EAAax4D,MAAQA,KAAKw4D,WAAc,SAAUC,EAASC,EAAYlpD,EAAGmpD,GAE1E,OAAO,IAAKnpD,IAAMA,EAAI3R,WAAU,SAAU+X,EAASW,GAC/C,SAASqiD,EAAU95D,GAAS,IAAMyB,EAAKo4D,EAAUl4D,KAAK3B,IAAW,MAAO+iB,GAAKtL,EAAOsL,IACpF,SAASg3C,EAAS/5D,GAAS,IAAMyB,EAAKo4D,EAAiB,MAAE75D,IAAW,MAAO+iB,GAAKtL,EAAOsL,IACvF,SAASthB,EAAKD,GAJlB,IAAexB,EAIawB,EAAOM,KAAOgV,EAAQtV,EAAOxB,QAJ1CA,EAIyDwB,EAAOxB,MAJhDA,aAAiB0Q,EAAI1Q,EAAQ,IAAI0Q,GAAE,SAAUoG,GAAWA,EAAQ9W,OAITgW,KAAK8jD,EAAWC,GAClGt4D,GAAMo4D,EAAYA,EAAU9pD,MAAM4pD,EAASC,GAAc,KAAKj4D,YAGlEq4D,EAAe94D,MAAQA,KAAK84D,aAAgB,SAAUL,EAASM,GAC/D,IAAsGn6D,EAAGyoD,EAAGxhB,EAAGh2B,EAA3GmpD,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPrzB,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,IAAOszB,KAAM,GAAIC,IAAK,IAChG,OAAOvpD,EAAI,CAAEpP,KAAM+tC,EAAK,GAAI,MAASA,EAAK,GAAI,OAAUA,EAAK,IAAwB,mBAAXn4B,SAA0BxG,EAAEwG,OAAO7V,UAAY,WAAa,OAAOR,OAAU6P,EACvJ,SAAS2+B,EAAK1mB,GAAK,OAAO,SAAUmmB,GAAK,OACzC,SAAcorB,GACV,GAAIz6D,EAAG,MAAM,IAAIX,UAAU,mCAC3B,KAAO+6D,OACH,GAAIp6D,EAAI,EAAGyoD,IAAMxhB,EAAY,EAARwzB,EAAG,GAAShS,EAAU,OAAIgS,EAAG,GAAKhS,EAAS,SAAOxhB,EAAIwhB,EAAU,SAAMxhB,EAAExmC,KAAKgoD,GAAI,GAAKA,EAAE5mD,SAAWolC,EAAIA,EAAExmC,KAAKgoD,EAAGgS,EAAG,KAAKz4D,KAAM,OAAOilC,EAE3J,OADIwhB,EAAI,EAAGxhB,IAAGwzB,EAAK,CAAS,EAARA,EAAG,GAAQxzB,EAAE/mC,QACzBu6D,EAAG,IACP,KAAK,EAAG,KAAK,EAAGxzB,EAAIwzB,EAAI,MACxB,KAAK,EAAc,OAAXL,EAAEC,QAAgB,CAAEn6D,MAAOu6D,EAAG,GAAIz4D,MAAM,GAChD,KAAK,EAAGo4D,EAAEC,QAAS5R,EAAIgS,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKL,EAAEI,IAAIE,MAAON,EAAEG,KAAKG,MAAO,SACxC,QACI,MAAkBzzB,GAAZA,EAAImzB,EAAEG,MAAYh5D,OAAS,GAAK0lC,EAAEA,EAAE1lC,OAAS,KAAkB,IAAVk5D,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEL,EAAI,EAAG,SACjG,GAAc,IAAVK,EAAG,MAAcxzB,GAAMwzB,EAAG,GAAKxzB,EAAE,IAAMwzB,EAAG,GAAKxzB,EAAE,IAAM,CAAEmzB,EAAEC,MAAQI,EAAG,GAAI,MAC9E,GAAc,IAAVA,EAAG,IAAYL,EAAEC,MAAQpzB,EAAE,GAAI,CAAEmzB,EAAEC,MAAQpzB,EAAE,GAAIA,EAAIwzB,EAAI,MAC7D,GAAIxzB,GAAKmzB,EAAEC,MAAQpzB,EAAE,GAAI,CAAEmzB,EAAEC,MAAQpzB,EAAE,GAAImzB,EAAEI,IAAI33D,KAAK43D,GAAK,MACvDxzB,EAAE,IAAImzB,EAAEI,IAAIE,MAChBN,EAAEG,KAAKG,MAAO,SAEtBD,EAAKN,EAAK15D,KAAKo5D,EAASO,GAC1B,MAAOn3C,GAAKw3C,EAAK,CAAC,EAAGx3C,GAAIwlC,EAAI,EAAK,QAAUzoD,EAAIinC,EAAI,EACtD,GAAY,EAARwzB,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAEv6D,MAAOu6D,EAAG,GAAKA,EAAG,QAAK,EAAQz4D,MAAM,GArB9BL,CAAK,CAACunB,EAAGmmB,OAwB7DxwC,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCo2C,EAAmB,EAAQ,MAC3B3xC,EAA6B,EAAQ,MACrCm4B,EAAc,EAAQ,MACtB3P,EAAmC,EAAQ,MAC3CI,EAAmC,EAAQ,MAC3CmrB,EAAiB,EAAQ,MACzBpW,EAAqB,EAAQ,MAC7BC,EAAU,EAAQ,MAElBoR,EAAmC,SAAU/zC,GAE7C,SAAS+zC,IACL,OAAkB,OAAX/zC,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAiZ/D,OAnZAioB,EAAUq0C,EAAmB/zC,GAI7B9qB,OAAOgI,eAAe62D,EAAkB59D,UAAW,cAAe,CAC9DkJ,IAAK,WACD,MAAO,kBAEXiD,YAAY,EACZhM,cAAc,IAElBy9D,EAAkB59D,UAAUu8B,iBAAmB,SAAUkC,EAAUzT,EAAW/c,EAAQuuB,EAAYsC,GAC9F,IAAI/O,EACA+f,EAAOlhB,EAA2B2G,OAAOqtC,uBACzCztC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,mBAC1DujB,GAGJ,GAFAoF,EAAWvG,EAA2BwG,YAAY4pC,UAAYvgC,EAC9DtJ,EAAWvG,EAA2BwG,YAAYytC,WAAa73C,GAC1DzsB,MAAMgG,QAAQ0J,GACf,MAAM,IAAI84C,EAAY97B,aAAad,EAA2Be,WAAW6Y,iBAAkB,0DAM/F,OAJA5O,EAAWvG,EAA2BwG,YAAY0tC,cAAgB70D,EAClEknB,EAAWvG,EAA2BwG,YAAY6S,kBAAoBmP,EAAiChT,+BAA+BuZ,iBAAiBvc,QAAQ5E,GAC/JrH,EAAWvG,EAA2BwG,YAAY2tC,oBAC5B9iE,IAAlB6+B,QAA+D7+B,IAAhC6+B,EAAckkC,eAAsClkC,EAAckkC,cAC9F1hE,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GACjD,OAAOzK,MAGf4yC,EAAkB59D,UAAU6+B,sBAAwB,SAAUJ,EAAUzT,EAAW8T,GAC/E,IAAI/O,EACAhG,EAAQzoB,KACRwuC,EAAOlhB,EAA2B2G,OAAO0tC,iBACzC9tC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,wBAC1DujB,GACJ,QAA0B9vB,IAAtB6+B,EAAcjf,KAA2C,OAAtBif,EAAcjf,IAAc,CAC/D,IAAIA,EAEAA,EADAif,EAAcjf,eAAeiJ,KACvB0jC,EAAQQ,MAAMkW,yBAAyBpkC,EAAcjf,KAGrDif,EAAcjf,IAExBsV,EAAWvG,EAA2BwG,YAAY+tC,gBAAkBtjD,EAExE,QAA0B5f,IAAtB6+B,EAAclf,KAA2C,OAAtBkf,EAAclf,IAAc,CAC/D,IAAIA,EAEAA,EADAkf,EAAclf,eAAekJ,KACvB0jC,EAAQQ,MAAMkW,yBAAyBpkC,EAAclf,KAGrDkf,EAAclf,IAExBuV,EAAWvG,EAA2BwG,YAAYguC,gBAAkBxjD,EAQxE,OALIkf,EAAc21B,aACdt/B,EAAWvG,EAA2BwG,YAAYiuC,uBAAyBjsB,EAAiChT,+BAA+BmZ,YAAYnc,QAAQtC,EAAc21B,aAEjLt/B,EAAWvG,EAA2BwG,YAAYytC,WAAa73C,EAC/DmK,EAAWvG,EAA2BwG,YAAY4pC,UAAYvgC,EACvDn9B,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GAEjD,OADA1L,EAAMu5C,qCAAqC7tC,EAAS7zB,QAC7CopB,MAGf4yC,EAAkB59D,UAAU++B,6BAA+B,SAAUN,EAAUzT,EAAW/c,EAAQuuB,EAAYsC,GAC1G,IAAI/O,EACA+f,EAAOlhB,EAA2B2G,OAAOmiC,mBACzCviC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,+BAC1DujB,GACJoF,EAAWvG,EAA2BwG,YAAY4pC,UAAYvgC,EAC9DtJ,EAAWvG,EAA2BwG,YAAYytC,WAAa73C,EAC/D,IAAIu4C,EAAqBt1D,EAAO0mD,OAchC,OAbIp2D,MAAMgG,QAAQg/D,IAAuBA,EAAmB9hE,OAAS,EACjE0zB,EAAWvG,EAA2BwG,YAAYouC,cAAgBD,EAE7Dt1D,EAAOxM,OAAS,EACrB0zB,EAAWvG,EAA2BwG,YAAY0tC,cAAgB70D,EAKlEknB,EAAWvG,EAA2BwG,YAAYouC,cAAgB,GAEtEruC,EAAWvG,EAA2BwG,YAAY6S,kBAAoBmP,EAAiChT,+BAA+BuZ,iBAAiBvc,QAAQ5E,GAC/JrH,EAAWvG,EAA2BwG,YAAY2tC,eAAiBjkC,KAAmBA,EAAckkC,cAC7F1hE,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GACjD,OAAOzK,MAGf4yC,EAAkB59D,UAAUi/B,iBAAmB,SAAUR,EAAUzT,GAC/D,IAAI+E,EACA+f,EAAOlhB,EAA2B2G,OAAOkuC,YACzCtuC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,mBAC1DujB,GAGJ,OAFAoF,EAAWvG,EAA2BwG,YAAY4pC,UAAYvgC,EAC9DtJ,EAAWvG,EAA2BwG,YAAYytC,WAAa73C,EACxD1pB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUstD,GACjD,OAAO14C,MAGf4yC,EAAkB59D,UAAUg/B,6BAA+B,SAAUP,EAAUzT,EAAW3b,GACtF,IAAI0gB,EACA+f,EAAOlhB,EAA2B2G,OAAOouC,wBACzCxuC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,+BAC1DujB,GAKJ,GAJAoF,EAAWvG,EAA2BwG,YAAY4pC,UAAYvgC,EAC9DtJ,EAAWvG,EAA2BwG,YAAYytC,WAAa73C,EAC/DmK,EAAWvG,EAA2BwG,YAAYuS,YAAcyP,EAAiChT,+BAA+Bya,WAAWzd,QAAQ/xB,EAAQwvC,YAC3J1pB,EAAWvG,EAA2BwG,YAAYkT,eAAiB8O,EAAiChT,+BAA+Bkb,cAAcle,QAAQ/xB,EAAQulD,WAC7JvlD,EAAQulD,YAAczqC,EAA2Bme,cAAckX,OAASnwC,EAAQulD,YAAczqC,EAA2Bme,cAAcoX,MAAO,CAC9I,QAAuBz/C,IAAnBoP,EAAQu0D,QAA2C,OAAnBv0D,EAAQu0D,OACxC,MAAM,IAAI7c,EAAY97B,aAAad,EAA2BuT,oBAAoBmmC,oCAAqC,sEAE3H1uC,EAAWvG,EAA2BwG,YAAY0uC,QAAUz0D,EAAQu0D,OAKxE,YAH2B3jE,IAAvBoP,EAAQ00D,YAAmD,OAAvB10D,EAAQ00D,aAC5C5uC,EAAWvG,EAA2BwG,YAAY4uC,YAAc1iE,KAAK2iE,kBAAkB50D,EAAQ00D,aAE5FziE,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GACjD,OAAOA,EAAS7zB,WAGxBg8D,EAAkB59D,UAAU4qB,gBAAkB,SAAU6T,GACpD,IAAI1O,EACAhG,EAAQzoB,KACRwuC,EAAOlhB,EAA2B2G,OAAO2uC,WACzC/uC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,kBAC1DujB,GAEJ,OADAoF,EAAWvG,EAA2BwG,YAAY4pC,UAAYvgC,EACvDn9B,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GACjD,IAAI5K,EAAU4K,EAAS7zB,OACvB,OAAOmoB,EAAMo6C,qBAAqBt5C,OAG1C+yC,EAAkB59D,UAAUm3D,0BAA4B,SAAU7O,EAAev9B,EAASmsC,GACtF,IAAInnC,EACAhG,EAAQzoB,KACRwuC,EAAOlhB,EAA2B2G,OAAO6uC,qBACzCjvC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,4BAC1DujB,GAMJ,OALAoF,EAAWvG,EAA2BwG,YAAY4pC,UAAY,CAC1D10C,UAAWg+B,GAEfnzB,EAAWvG,EAA2BwG,YAAYssC,SAAW32C,EAC7DoK,EAAWvG,EAA2BwG,YAAYivC,YAAcjtB,EAAiChT,+BAA+B+Y,iBAAiB/b,QAAQ81B,GAClJ51D,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GACjD,IAAI1e,EAAS0e,EAAS7zB,OACtB,OAAOmoB,EAAMu6C,yBAAyBvtD,EAAQmgD,OAGtD0G,EAAkB59D,UAAUo4D,oBAAsB,SAAU9P,EAAev9B,EAASmsC,GAChF,IAAInnC,EACAhG,EAAQzoB,KACRwuC,EAAOlhB,EAA2B2G,OAAOgvC,eACzCpvC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,sBAC1DujB,GAMJ,OALAoF,EAAWvG,EAA2BwG,YAAY4pC,UAAY,CAC1D10C,UAAWg+B,GAEfnzB,EAAWvG,EAA2BwG,YAAYssC,SAAW32C,EAC7DoK,EAAWvG,EAA2BwG,YAAYivC,YAAcjtB,EAAiChT,+BAA+B+Y,iBAAiB/b,QAAQ81B,GAClJ51D,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GACjD,IAAI1e,EAAS0e,EAAS7zB,OACtB,OAAOmoB,EAAMy6C,mBAAmBztD,EAAQmgD,OAGhD0G,EAAkB59D,UAAUmqD,yBAA2B,WACnD,IAAIp6B,EACAhG,EAAQzoB,KACRwuC,EAAOlhB,EAA2B2G,OAAOkvC,oBACzCtvC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,2BAC1DujB,GACJ,OAAOzuB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GACjD,IAAI5K,EAAU4K,EAAS7zB,OACvB,OAAOmoB,EAAMo6C,qBAAqBt5C,OAG1C+yC,EAAkB59D,UAAUoqD,0BAA4B,SAAUp/B,EAAW/c,EAAQuuB,EAAYsC,GAC7F,IAAI/O,EACA+f,EAAOlhB,EAA2B2G,OAAOmvC,2BACzCvvC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,4BAC1DujB,GAKJ,OAJAoF,EAAWvG,EAA2BwG,YAAYytC,WAAa73C,EAC/DmK,EAAWvG,EAA2BwG,YAAY0tC,cAAgB70D,EAClEknB,EAAWvG,EAA2BwG,YAAY6S,kBAAoBmP,EAAiChT,+BAA+BuZ,iBAAiBvc,QAAQ5E,GAC/JrH,EAAWvG,EAA2BwG,YAAY2tC,eAAiBjkC,KAAmBA,EAAckkC,cAC7F1hE,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GACjD,OAAOA,EAAS7zB,WAGxBg8D,EAAkB59D,UAAUy2D,0BAA4B,SAAUnO,EAAev9B,GAC7E,IAAIgF,EACJ,OAAO+pC,EAAUx4D,UAAM,OAAQ,GAAQ,WACnC,IAAIqjE,EAAmBC,EACvB,OAAOxK,EAAY94D,MAAM,SAAUo7C,GAC/B,OAAQA,EAAG6d,OACP,KAAK,EAAG,MAAO,CAAC,EAAaj5D,KAAKujE,4BAA4Bvc,EAAev9B,EAAS,8BACtF,KAAK,EAQD,OAPA45C,EAAoBjoB,EAAG8d,OACvBoK,EAAiB,GACuB,QAAvC70C,EAAK40C,EAAkBG,kBAA+B,IAAP/0C,GAAyBA,EAAGhsB,KAAI,SAAUghE,GAClFA,EAAcC,YACdJ,EAAe7hE,KAAKgiE,EAAczc,kBAGnC,CAAC,EAAcsc,WAK1ChH,EAAkB59D,UAAU02D,0BAA4B,SAAUpO,EAAet9B,EAAWD,EAAS4rC,GACjG,OAAOmD,EAAUx4D,UAAM,OAAQ,GAAQ,WACnC,IAAIqjE,EAAmBM,EAAmBC,EAAiBp1B,EAAM3a,EACjE,OAAOilC,EAAY94D,MAAM,SAAUyuB,GAC/B,OAAQA,EAAGwqC,OACP,KAAK,EAAG,MAAO,CAAC,EAAaj5D,KAAKujE,4BAA4Bvc,EAAev9B,EAAS,sCACtF,KAAK,EAED,KADA45C,EAAoB50C,EAAGyqC,UACImK,EAAkBG,WACzC,MAAM,IAAI/d,EAAY97B,aAAad,EAA2BmU,iBAAiBzM,cAAe,qDAclG,GAZAozC,EAAoB,GACpBC,EAAkB,GAClBP,EAAkBG,WAAWhhE,SAAQ,SAAUwmB,GAEvCA,EAAUmjC,WACVyX,EAAkB56C,EAAUg+B,gBAG5Bh+B,EAAU06C,YAAc16C,EAAU66C,YAClCF,EAAkBliE,KAAKunB,EAAUg+B,kBAGjB,KAApB4c,EACA,MAAM,IAAIne,EAAY97B,aAAad,EAA2BmU,iBAAiBzM,cAAe,uBAElG,IAAK8kC,EAAkBj0D,SAASwiE,GAC5B,MAAM,IAAIne,EAAY97B,aAAad,EAA2BmU,iBAAiBzM,cAAeqzC,EAAkB,+CAgBpH,OAdAvO,EAAkB7yD,SAAQ,SAAU+nB,GAEhC,IAAKo5C,EAAkBviE,SAASmpB,GAC5B,MAAM,IAAIk7B,EAAY97B,aAAad,EAA2BmU,iBAAiBzM,cAAe,aAAe7G,EAAY,sCAAwCa,MAGzKikB,EAAOlhB,EAA2B2G,OAAO6vC,oBACzCjwC,EAAa,IACFvG,EAA2BwG,YAAY5oB,cAAgB,4BAClE2oB,EAAWvG,EAA2BwG,YAAY4pC,UAAY,CAC1D10C,UAAWg+B,GAEfnzB,EAAWvG,EAA2BwG,YAAYssC,SAAW32C,EAC7DoK,EAAWvG,EAA2BwG,YAAYiwC,oBAAsB1O,EACjE,CAAC,EAAcr1D,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GAC5D,OAAOkhC,cAOnCiH,EAAkB59D,UAAU6kE,4BAA8B,SAAUvc,EAAev9B,EAASu6C,GACxF,IAAIx1B,EAAOlhB,EAA2B2G,OAAOgwC,gBACzCpwC,EAAa,GAMjB,OALAA,EAAWvG,EAA2BwG,YAAY5oB,cAAgB84D,EAClEnwC,EAAWvG,EAA2BwG,YAAY4pC,UAAY,CAC1D10C,UAAWg+B,GAEfnzB,EAAWvG,EAA2BwG,YAAYssC,SAAW32C,EACtDzpB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GAEjD,OADwBA,EAAS7zB,WAIzCg8D,EAAkB59D,UAAUmkE,qBAAuB,SAAUqB,GACzD,IAAIz7C,EAAQzoB,KACRupB,EAAU,GAgDd,OA/CA26C,EAAc1hE,SAAQ,SAAU2hE,GAC5B,OAAQA,EAAatgB,YACjB,KAAKv2B,EAA2BsZ,WAAWkd,YAEvC,KADIphD,EAASyhE,GAKT,MAAM,IAAIj/D,MAAM,8BAHhBqkB,EAAQ9nB,KAAKgnB,EAAM27C,yBAAyB1hE,IAKhD,MAEJ,KAAK4qB,EAA2BsZ,WAAWod,aAEvC,KADIthD,EAASyhE,GAKT,MAAM,IAAIj/D,MAAM,+BAHhBqkB,EAAQ9nB,KAAKgnB,EAAM47C,0BAA0B3hE,IAKjD,MAEJ,KAAK4qB,EAA2BsZ,WAAWoc,MAEvC,KADItgD,EAASyhE,GAKT,MAAM,IAAIj/D,MAAM,wBAHhBqkB,EAAQ9nB,KAAKgnB,EAAM67C,mBAAmB5hE,IAK1C,MAEJ,KAAK4qB,EAA2BsZ,WAAWmd,aACvC,IAAIrhD,EACJ,KADIA,EAASyhE,GAKT,MAAM,IAAIj/D,MAAM,gCAHhBqkB,EAAQ9nB,KAAKgnB,EAAM87C,0BAA0B7hE,QAYtD6mB,GAEX+yC,EAAkB59D,UAAU0lE,yBAA2B,SAAUD,GAC7D,IAAIK,EAAgBL,EAAax3D,OAAOlK,KAAI,SAAUgiE,GAClD,OAAOxZ,EAAmBK,iBAAiBoZ,oBAAoBD,MAEnE,OAAO,IAAIpD,EAAe9L,kBAAkB4O,EAAahnC,SAASnU,UAAWm7C,EAAaQ,aAAcR,EAAaz6C,UAAW4D,EAA2BsZ,WAAWkd,YAAa9jD,KAAK2lD,YAAa6e,EAAeL,EAAaS,UAAWT,EAAaU,gBAE7PvI,EAAkB59D,UAAU2lE,0BAA4B,SAAUF,GAC9D,IAAIK,EAAgBL,EAAax3D,OAAOlK,KAAI,SAAUqiE,GAClD,OAAO,IAAIzD,EAAevL,sBAAsB7K,EAAmBK,iBAAiBoZ,oBAAoBI,EAAsBhmE,OAAQgmE,EAAsBC,iBAAkBD,EAAsBE,UAEpMC,EAAed,EAAae,UAAUziE,KAAI,SAAU0iE,GACpD,OAAO,IAAI9D,EAAenL,wBAAwBiP,EAAOz4D,KAAMwpC,EAAiCtW,+BAA+BykB,gCAAgCvkB,QAAQqlC,EAAOC,yBAElL,OAAO,IAAI/D,EAAejL,mBAAmB+N,EAAahnC,SAASnU,UAAWm7C,EAAaQ,aAAcR,EAAaz6C,UAAW4D,EAA2BsZ,WAAWod,aAAchkD,KAAK2lD,YAAawe,EAAakB,cAAelB,EAAamB,iBAAkBnB,EAAa9Q,OAAQ4R,EAAcT,EAAeL,EAAaU,gBAErUvI,EAAkB59D,UAAU4lE,mBAAqB,SAAUH,GACvD,IAAIrY,EAAWb,EAAmBK,iBAAiBoZ,oBAAoBP,EAAa5lD,KAChFwtC,EAAWd,EAAmBK,iBAAiBoZ,oBAAoBP,EAAa7lD,KACpF,OAAO,IAAI+iD,EAAe5K,YAAY0N,EAAahnC,SAASnU,UAAWm7C,EAAaQ,aAAcR,EAAaz6C,UAAW4D,EAA2BsZ,WAAWoc,MAAOhjD,KAAK2lD,YAAamG,EAAUC,EAAUoY,EAAaoB,oBAE9NjJ,EAAkB59D,UAAU6lE,0BAA4B,SAAUJ,GAC9D,IAAIqB,EAAkBva,EAAmBK,iBAAiBoZ,oBAAoBP,EAAa1B,YAC3F,OAAO,IAAIpB,EAAetK,mBAAmBoN,EAAahnC,SAASnU,UAAWm7C,EAAaQ,aAAcR,EAAaz6C,UAAWb,EAA2B+d,WAAWmd,aAAc/jD,KAAK2lD,YAAa6f,EAAiBtvB,EAAiCtW,+BAA+BqjB,eAAenjB,QAAQqkC,EAAa5mB,YAAarH,EAAiCtW,+BAA+Boe,cAAcle,QAAQqkC,EAAa7Q,WAAY6Q,EAAa7B,SAEzchG,EAAkB59D,UAAUskE,yBAA2B,SAAUvtD,EAAQmgD,GACrE,IAAIjpD,EAAS8I,EAAO9I,OAAOlK,KAAI,SAAUgjE,GACrC,OAAOxa,EAAmBK,iBAAiBoZ,oBAAoBe,MAEnE,OAAO,IAAIpE,EAAejK,kBAAkBzqD,EAAQipD,IAExD0G,EAAkB59D,UAAUwkE,mBAAqB,SAAUztD,EAAQmgD,GAC/D,IAAIr3C,EAAM0sC,EAAmBK,iBAAiBoZ,oBAAoBjvD,EAAO8I,KACrED,EAAM2sC,EAAmBK,iBAAiBoZ,oBAAoBjvD,EAAO6I,KACzE,OAAO,IAAI+iD,EAAe9J,YAAYh5C,EAAKD,EAAKs3C,IAEpD0G,EAAkB59D,UAAUikE,kBAAoB,SAAUF,GAGtD,IAAIiD,EAAOjD,EAAWkD,iBAClBC,EAAQnD,EAAWoD,cAAgB,EACnCC,EAAMrD,EAAWsD,aACjBC,EAAKvD,EAAWwD,cAChBC,EAAKzD,EAAW0D,gBAChBC,EAAM3D,EAAW4D,gBACrB,GAAI/oE,MAAMooE,IAASpoE,MAAMsoE,IAAUtoE,MAAMwoE,IAAQxoE,MAAM0oE,IAAO1oE,MAAM4oE,IAAO5oE,MAAM8oE,GAC7E,MAAM,IAAI3gB,EAAY97B,aAAad,EAA2BuT,oBAAoBkqC,qBAAsB,sCAG5G,OADaZ,EAAO,IAAME,EAAQ,IAAME,EAAM,IAAME,EAAK,IAAME,EAAK,IAAME,GAG9E9J,EAAkB59D,UAAUsjE,qCAAuC,SAAUuE,GACzE,GAAKA,EAAStH,EAAiBnrC,YAAY0yC,gBAA3C,CAGA,GAAID,EAAStH,EAAiBnrC,YAAY2yC,qBACtC,MAAM,IAAIhhB,EAAY97B,aAAad,EAA2BmU,iBAAiB0pC,uBAAwBH,EAAStH,EAAiBnrC,YAAY2yC,sBAEjJ,GAAIF,EAAStH,EAAiBnrC,YAAY6yC,eACtC,MAAM,IAAIlhB,EAAY97B,aAAad,EAA2BmU,iBAAiB4pC,wBAAyBL,EAAStH,EAAiBnrC,YAAY6yC,gBAElJ,GAAIJ,EAAStH,EAAiBnrC,YAAY+yC,qBACtC,MAAM,IAAIphB,EAAY97B,aAAad,EAA2BmU,iBAAiB8pC,4BAA6BP,EAAStH,EAAiBnrC,YAAY+yC,sBAEtJ,MAAM,IAAIphB,EAAY97B,aAAad,EAA2BmU,iBAAiBw1B,YAAa,kBAEzF8J,EApZ2B,CADd,EAAQ,MAsZZx6B,iBACpB/kC,EAAQu/D,kBAAoBA,G,kCCld5B,IACQt0C,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCy5C,EAAS,EAAQ,MACjBthB,EAAc,EAAQ,MACtB3P,EAAmC,EAAQ,MAC3CkxB,EAAkB,EAAQ,MAC1BC,EAA6B,EAAQ,MACrChc,EAAqB,EAAQ,MAC7B8H,EAAmB,EAAQ,KAE3BsJ,EAAoC,SAAU9zC,GAE9C,SAAS8zC,IACL,IAAI5zC,EAAmB,OAAXF,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAGhE,OADAyoB,EAAMy+C,qBAAuBH,EAAO7gD,KAC7BuC,EAoRX,OAzRAR,EAAUo0C,EAAoB9zC,GAO9B9qB,OAAOgI,eAAe42D,EAAmB39D,UAAW,cAAe,CAC/DkJ,IAAK,WACD,MAAO,oBAEXiD,YAAY,EACZhM,cAAc,IAElBw9D,EAAmB39D,UAAUyoE,eAAiB,WAC1C,OAAO,KAEX9K,EAAmB39D,UAAU0oE,wBAA0B,WACnD,OAAOpnE,KAAKknE,sBAEhB7K,EAAmB39D,UAAU2oE,kBAAoB,SAAUC,GACvD,IAAIC,EAAgBvnE,KAAKmnE,iBAAmB,EAC5C,OAAOG,EAAgB,GAAKA,EAAgBC,EAAgBD,EAAgBC,GAEhFlL,EAAmB39D,UAAUw/B,uBAAyB,SAAUf,EAAUqqC,EAAS/c,EAAesJ,EAAiBE,EAAmBvJ,EAAsBxV,EAASyV,GACjK,IAAIl8B,EACAhG,EAAQzoB,KAERynE,EAAcD,IAAYzU,EAAiBc,YAAYC,QACvD4T,EAAeD,EAAc,sBAAwB,yBACrDj5B,EAAOi5B,EAAcn6C,EAA2B2G,OAAO8gB,mBAAqBznB,EAA2B2G,OAAO2gB,kBAC9G+yB,EAAiBn5B,IAASlhB,EAA2B2G,OAAO2gB,kBAAoB50C,KAAKqnE,kBAAkBnyB,GAAWA,EAClHrhB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgBw8D,EAC1Dj5C,GAQJ,OAPAoF,EAAWvG,EAA2BwG,YAAY4pC,UAAYvgC,EAC9DtJ,EAAWvG,EAA2BwG,YAAY8zC,eAAiBnd,EACnE52B,EAAWvG,EAA2BwG,YAAY+zC,iBAAmB9T,EACrElgC,EAAWvG,EAA2BwG,YAAYg0C,mBAAqB7T,EACvEpgC,EAAWvG,EAA2BwG,YAAYwhB,sBAAwBt1C,KAAK+nE,yBAAyBrd,GACxG72B,EAAWvG,EAA2BwG,YAAYmhB,SAAW0yB,EAC7D9zC,EAAWvG,EAA2BwG,YAAYk0C,qBAAuBlyB,EAAiChT,+BAA+Bma,wBAAwBnd,QAAQ6qB,GAClK3qD,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GACjD,IAAI8zC,EAAe9zC,EAAS7zB,OAC5B,OAAOmoB,EAAMy/C,oBAAoBD,EAAaxgE,KAAMwgE,EAAazzB,eAGzE6nB,EAAmB39D,UAAUq/B,0BAA4B,SAAUZ,EAAUa,EAAcysB,EAAesJ,EAAiBE,EAAmBvJ,EAAsBC,GAChK,IAAIl8B,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,4BAC1DujB,EAAGnB,EAA2BwG,YAAYq0C,sBAAwBnoE,KAAKonE,0BACvE34C,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,EAAGnB,EAA2BwG,YAAYs0C,cAAgBpqC,EAC1DvP,EAAGnB,EAA2BwG,YAAY8zC,eAAiBnd,EAC3Dh8B,EAAGnB,EAA2BwG,YAAY+zC,iBAAmB9T,EAC7DtlC,EAAGnB,EAA2BwG,YAAYg0C,mBAAqB7T,EAC/DxlC,EAAGnB,EAA2BwG,YAAYwhB,sBAAwBt1C,KAAK+nE,yBAAyBrd,GAChGj8B,EAAGnB,EAA2BwG,YAAYk0C,qBAAuBlyB,EAAiChT,+BAA+Bma,wBAAwBnd,QAAQ6qB,GACjKl8B,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOo0C,yBAA0Bx0C,GAAY/e,MAAK,SAAUqf,GACvG,IAAI8zC,EAAe9zC,EAAS7zB,OAC5B,OAAO,IAAI2mE,EAA2B1N,gBAAgB0O,EAAah3D,GAAIg3D,EAAa3N,cAAet8B,EAAcvV,EAAMk9B,iBAG/H0W,EAAmB39D,UAAUu/B,2BAA6B,SAAUd,GAChE,IAAI1O,EAGA+f,EAAOlhB,EAA2B2G,OAAO8gB,mBACzClhB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,6BAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,EAAGnB,EAA2BwG,YAAY8zC,gBAAiB,EAC3Dn5C,EAAGnB,EAA2BwG,YAAY+zC,kBAAmB,EAC7Dp5C,EAAGnB,EAA2BwG,YAAYg0C,oBAAqB,EAC/Dr5C,EAAGnB,EAA2BwG,YAAYmhB,SAAW,EACrDxmB,EAAGnB,EAA2BwG,YAAYk0C,qBAAuB16C,EAA2Byb,uBAAuBqU,iBACnH3uB,GACJ,OAAOzuB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GAIjD,OAH0BA,EAAS7zB,OACCmH,KACZ0sC,QAAQ1xC,KAAI,SAAU4yB,GAAK,OAAO,IAAI2xC,EAAgB9O,OAAO7iC,EAAEsvC,aAActvC,EAAE3L,UAAW2L,EAAEoG,SAAUpG,EAAEizC,aAAcjzC,EAAE10B,cAIxJ07D,EAAmB39D,UAAUwrB,sBAAwB,SAAUiT,GAC3D,IAAI1O,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,wBAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOs0C,iBAAkB10C,GAAY/e,MAAK,SAAUqf,GAE/F,MAAO,CACH1sB,KAFe0sB,EAAS7zB,OAELmH,KAAKhF,KAAI,SAAUqxC,GAAS,OAAOrrB,EAAMy/C,oBAAoBp0B,GAAO,WAInGuoB,EAAmB39D,UAAUm/B,yBAA2B,SAAUV,GAC9D,IAAI1O,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,2BAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOu0C,oBAAqB30C,GAAY/e,MAAK,SAAUqf,GAElG,MAAO,CACH1sB,KAFe0sB,EAAS7zB,OAELmH,KAAKhF,KAAI,SAAUqxC,GAAS,OAAOrrB,EAAMy/C,oBAAoBp0B,GAAO,WAInGuoB,EAAmB39D,UAAU8rD,uBAAyB,SAAU6U,EAAc5U,EAAevV,EAASK,EAAkBmV,EAAsBC,GAC1I,IAAIl8B,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,yBAC1DujB,EAAGnB,EAA2BwG,YAAY0rC,cAAgBH,EAC1D5wC,EAAGnB,EAA2BwG,YAAY8zC,eAAiBnd,EAC3Dh8B,EAAGnB,EAA2BwG,YAAYmhB,SAAWj1C,KAAKqnE,kBAAkBnyB,GAC5EzmB,EAAGnB,EAA2BwG,YAAY20C,kBAAoBzoE,KAAK+nE,yBAAyBxyB,GAC5F9mB,EAAGnB,EAA2BwG,YAAYwhB,sBAAwBt1C,KAAK+nE,yBAAyBrd,GAChGj8B,EAAGnB,EAA2BwG,YAAYk0C,qBAAuBlyB,EAAiChT,+BAA+Bma,wBAAwBnd,QAAQ6qB,GACjKl8B,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO6gB,kBAAmBjhB,GAAY/e,MAAK,SAAUqf,GAChG,IAAI8zC,EAAe9zC,EAAS7zB,OAC5B,OAAOmoB,EAAMy/C,oBAAoBD,EAAaxgE,MAAM,OAG5D40D,EAAmB39D,UAAUw8C,yBAA2B,SAAUwtB,EAAcrqC,EAAgBosB,EAAevV,EAASK,EAAkBmV,EAAsBC,GAC5J,IAAIl8B,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,2BAC1DujB,EAAGnB,EAA2BwG,YAAY20C,kBAAoBlzB,EAC9D9mB,EAAGnB,EAA2BwG,YAAYwhB,sBAAwBt1C,KAAK+nE,yBAAyBrd,GAChGj8B,EAAGnB,EAA2BwG,YAAY0rC,cAAgBkJ,EAC1Dj6C,EAAGnB,EAA2BwG,YAAY8zC,eAAiBnd,EAC3Dh8B,EAAGnB,EAA2BwG,YAAYugB,gBAAkBhW,EAC5D5P,EAAGnB,EAA2BwG,YAAYmhB,SAAWj1C,KAAKqnE,kBAAkBnyB,GAC5EzmB,EAAGnB,EAA2BwG,YAAYk0C,qBAAuBlyB,EAAiChT,+BAA+Bma,wBAAwBnd,QAAQ6qB,GACjKl8B,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO4gB,oBAAqBhhB,GAAY/e,MAAK,SAAUqf,GAClG,IAAI8zC,EAAe9zC,EAAS7zB,OAC5B,OAAOmoB,EAAMy/C,oBAAoBD,EAAaxgE,MAAM,OAG5D40D,EAAmB39D,UAAUy8C,+BAAiC,SAAUutB,EAAcrqC,EAAgBL,EAAcysB,EAAeC,EAAsBC,GACrJ,IAAIl8B,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,iCAC1DujB,EAAGnB,EAA2BwG,YAAYq0C,sBAAwBnoE,KAAKonE,0BACvE34C,EAAGnB,EAA2BwG,YAAY0rC,cAAgBkJ,EAC1Dj6C,EAAGnB,EAA2BwG,YAAYugB,gBAAkBhW,EAC5D5P,EAAGnB,EAA2BwG,YAAYs0C,cAAgBpqC,EAC1DvP,EAAGnB,EAA2BwG,YAAY8zC,eAAiBnd,EAC3Dh8B,EAAGnB,EAA2BwG,YAAYwhB,sBAAwBt1C,KAAK+nE,yBAAyBrd,GAChGj8B,EAAGnB,EAA2BwG,YAAYk0C,qBAAuBlyB,EAAiChT,+BAA+Bma,wBAAwBnd,QAAQ6qB,GACjKl8B,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO00C,0BAA2B90C,GAAY/e,MAAK,SAAUqf,GACxG,IAAI8zC,EAAe9zC,EAAS7zB,OAC5B,OAAO,IAAI2mE,EAA2B1N,gBAAgB0O,EAAah3D,GAAIg3D,EAAa3N,cAAet8B,EAAcvV,EAAMk9B,iBAG/H0W,EAAmB39D,UAAU0/B,4BAA8B,SAAUjB,EAAUkB,EAAgBosB,EAAesJ,EAAiBE,EAAmBvJ,EAAsBxV,EAASyV,GAC7K,IAAIl8B,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,8BAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,EAAGnB,EAA2BwG,YAAYugB,gBAAkBhW,EAC5D5P,EAAGnB,EAA2BwG,YAAY8zC,eAAiBnd,EAC3Dh8B,EAAGnB,EAA2BwG,YAAY+zC,iBAAmB9T,EAC7DtlC,EAAGnB,EAA2BwG,YAAYg0C,mBAAqB7T,EAC/DxlC,EAAGnB,EAA2BwG,YAAYwhB,sBAAwBt1C,KAAK+nE,yBAAyBrd,GAChGj8B,EAAGnB,EAA2BwG,YAAYmhB,SAAWj1C,KAAKqnE,kBAAkBnyB,GAC5EzmB,EAAGnB,EAA2BwG,YAAYk0C,qBAAuBlyB,EAAiChT,+BAA+Bma,wBAAwBnd,QAAQ6qB,GACjKl8B,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO0gB,uBAAwB9gB,GAAY/e,MAAK,SAAUqf,GACrG,IAAI8zC,EAAe9zC,EAAS7zB,OAC5B,OAAOmoB,EAAMy/C,oBAAoBD,EAAaxgE,MAAM,OAG5D40D,EAAmB39D,UAAU4/B,kCAAoC,SAAUnB,EAAUkB,EAAgBL,EAAcysB,EAAesJ,EAAiBE,EAAmBvJ,EAAsBC,GACxL,IAAIl8B,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,oCAC1DujB,EAAGnB,EAA2BwG,YAAYq0C,sBAAwBnoE,KAAKonE,0BACvE34C,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,EAAGnB,EAA2BwG,YAAYugB,gBAAkBhW,EAC5D5P,EAAGnB,EAA2BwG,YAAY8zC,eAAiBnd,EAC3Dh8B,EAAGnB,EAA2BwG,YAAY+zC,iBAAmB9T,EAC7DtlC,EAAGnB,EAA2BwG,YAAYg0C,mBAAqB7T,EAC/DxlC,EAAGnB,EAA2BwG,YAAYwhB,sBAAwBt1C,KAAK+nE,yBAAyBrd,GAChGj8B,EAAGnB,EAA2BwG,YAAYk0C,qBAAuBlyB,EAAiChT,+BAA+Bma,wBAAwBnd,QAAQ6qB,GACjKl8B,EAAGnB,EAA2BwG,YAAYs0C,cAAgBpqC,EAC1DvP,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO20C,6BAA8B/0C,GAAY/e,MAAK,SAAUqf,GAC3G,IAAI8zC,EAAe9zC,EAAS7zB,OAC5B,OAAO,IAAI2mE,EAA2B1N,gBAAgB0O,EAAah3D,GAAIg3D,EAAa3N,cAAet8B,EAAcvV,EAAMk9B,iBAG/H0W,EAAmB39D,UAAUg7D,aAAe,SAAUmP,EAASlP,EAAYmP,GACvE,IAAIr6C,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,eAC1DujB,EAAGnB,EAA2BwG,YAAYq0C,sBAAwBnoE,KAAKonE,0BACvE34C,EAAGnB,EAA2BwG,YAAYi1C,iBAAmBF,EAC7Dp6C,EAAGnB,EAA2BwG,YAAYk1C,cAAgBrP,EAAamP,EACvEr6C,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOg1C,uBAAwBp1C,GAAY/e,MAAK,SAAUqf,GACrG,IAAI8zC,EAAe9zC,EAAS7zB,OAC5B,OAAOmoB,EAAMygD,mBAAmBjB,EAAcY,IAAYxM,EAAmB8M,oBAGrF9M,EAAmB39D,UAAUg8D,aAAe,SAAUmO,GAClD,IAAIp6C,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,UAC1DujB,EAAGnB,EAA2BwG,YAAYq0C,sBAAwBnoE,KAAKonE,0BACvE34C,EAAGnB,EAA2BwG,YAAYi1C,iBAAmBF,EAC7Dp6C,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOm1C,uBAAwBv1C,GAAY/e,MAAK,SAAUqf,QAI7GkoC,EAAmB39D,UAAUqpE,yBAA2B,SAAUxN,GAE9D,IAAKt9D,MAAMgG,QAAQs3D,GACf,MAAM,IAAI9U,EAAY97B,aAAad,EAA2Be,WAAW6Y,iBAAkB,kEAG/F,IAAI4mC,EAAe,IAAI37B,IAAI6sB,GAC3B,OAAOt9D,MAAMC,KAAKmsE,IAEtBhN,EAAmB39D,UAAUwpE,oBAAsB,SAAUD,EAAczzB,GACvE,IAEI6pB,EAFAlqB,EAAU8zB,EAAa9zB,QAAQ1xC,KAAI,SAAU4yB,GAAK,OAAO,IAAI2xC,EAAgB9O,OAAO7iC,EAAEsvC,aAActvC,EAAE3L,UAAW2L,EAAEoG,SAAUpG,EAAEizC,aAAcjzC,EAAE10B,UAG/IsnE,EAAa5J,QACbA,EAAQ4J,EAAa5J,MAAM57D,KAAI,SAAU4yB,GAAK,OAAO,IAAI2xC,EAAgBjP,SAAS1iC,EAAEzuB,KAAMyuB,EAAElC,MAAOkC,EAAEkpC,aAIzG,IAAI/D,GAAuC,IAAdhmB,GAAuByzB,EAAal0B,UAAU5zC,SAAWH,KAAKmnE,iBAAmB,EAC1G3M,IACAyN,EAAal0B,UAAU5zC,QAAU,GAErC,IAAI2zC,EAAQm0B,EAAal0B,UAAUtxC,KAAI,SAAUuxC,GAC7C,OAAOA,EAAIvxC,KAAI,SAAU6mE,EAAM3oE,GAC3B,OAAOsqD,EAAmBK,iBAAiBie,mBAAmBD,EAAMn1B,EAAQxzC,GAAO86B,gBAG3F,OAAI4iC,EACO,IAAI2I,EAAgBxP,UAAU1jB,EAAOK,EAASL,EAAM3zC,OAAQq6D,EAAwBhmB,EAAW6pB,GAEnG,IAAI2I,EAAgBxP,UAAU1jB,EAAOK,EAASL,EAAM3zC,OAAQq6D,EAAwBhmB,IAE/F6nB,EAAmB39D,UAAUwqE,mBAAqB,SAAUjB,EAAczzB,GACtE,IACI6pB,EADAlqB,EAAU8zB,EAAa9zB,QAAQ1xC,KAAI,SAAU4yB,GAAK,OAAO,IAAI2xC,EAAgB9O,OAAO7iC,EAAEsvC,aAActvC,EAAE3L,UAAW2L,EAAEoG,SAAUpG,EAAEizC,aAAcjzC,EAAE10B,UAE/IsnE,EAAa5J,QACbA,EAAQ4J,EAAa5J,MAAM57D,KAAI,SAAU4yB,GAAK,OAAO,IAAI2xC,EAAgBjP,SAAS1iC,EAAEzuB,KAAMyuB,EAAElC,MAAOkC,EAAEkpC,aAEzG,IAAIzqB,EAAQm0B,EAAal0B,UAAUtxC,KAAI,SAAUuxC,GAC7C,OAAOA,EAAIvxC,KAAI,SAAU6mE,EAAM3oE,GAC3B,OAAOsqD,EAAmBK,iBAAiBie,mBAAmBD,EAAMn1B,EAAQxzC,GAAO86B,gBAG3F,OAAI4iC,EACO,IAAI2I,EAAgBxP,UAAU1jB,EAAOK,EAASL,EAAM3zC,QAAQ,EAAOq0C,EAAW6pB,GAElF,IAAI2I,EAAgBxP,UAAU1jB,EAAOK,EAASL,EAAM3zC,QAAQ,EAAOq0C,IAE9E6nB,EAAmB8M,eAAiB,GAC7B9M,EA1R4B,CADf,EAAQ,MA4RZv6B,iBACpB/kC,EAAQs/D,mBAAqBA,G,kCCpT7B,IACQr0C,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IACIk5C,EAAyC,SAAUzvB,GAEnD,SAASyvB,IACL,OAAkB,OAAXzvB,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAS/D,OAXAioB,EAAU+vB,EAAyBzvB,GAInC9qB,OAAOgI,eAAeuyC,EAAwBt5C,UAAW,cAAe,CACpEkJ,IAAK,WACD,MAAO,wBAEXiD,YAAY,EACZhM,cAAc,IAEXm5C,EAZiC,CADR,EAAQ,KAcZE,6BAChCn7C,EAAQi7C,wBAA0BA,G,yBC7BlCv6C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIq5C,EAA8B,WAC9B,SAASA,EAAaqxB,EAAWC,GAC7BzpE,KAAKwpE,UAAYA,EACjBxpE,KAAKypE,YAAcA,EAQvB,OALAtxB,EAAaz5C,UAAUu7C,eAAiB,SAAUyvB,GAC1C1pE,KAAKwpE,UAAUE,IACf1pE,KAAKypE,YAAYC,IAGlBvxB,EAXsB,GAajCp7C,EAAQo7C,aAAeA,EACvB,IAAID,EAA6C,WAC7C,SAASA,EAA4BnoB,GACjC/vB,KAAK+vB,WAAaA,EAClB/vB,KAAKyvD,UAAY,GACjBzvD,KAAK+vB,WAAWoqB,4BAA4Bn6C,KAAKi6C,eAAe76C,KAAKY,OA2BzE,OAzBAk4C,EAA4Bx5C,UAAU60B,gBAAkB,SAAUtiB,EAAI04D,EAAU5lD,GAC5E,IAAI0E,EAAQzoB,KACR4pE,EAAW5pE,KAAKyvD,UAAUx+C,IAAO,IAAIhU,MACrC4sE,EAAe,IAAI1xB,EAAawxB,EAAU5lD,GAG9C,OAFA6lD,EAASnoE,KAAKooE,GACd7pE,KAAKyvD,UAAUx+C,GAAM24D,EACd,WAAc,OAAOnhD,EAAMqhD,mBAAmB74D,EAAI44D,KAE7D3xB,EAA4Bx5C,UAAUqrE,+BAAiC,SAAU94D,GAE7E,OAAOjR,KAAKyvD,UAAU3/C,eAAemB,IAEzCinC,EAA4Bx5C,UAAUu7C,eAAiB,SAAUrL,GACxD5uC,KAAK+pE,+BAA+Bn7B,EAAaxC,iBAItDpsC,KAAKyvD,UAAU7gB,EAAaxC,gBAAgB5pC,SAAQ,SAAU6yB,GAAK,OAAOA,EAAE4kB,eAAerL,EAAannC,UAE5GywC,EAA4Bx5C,UAAUorE,mBAAqB,SAAU74D,EAAI44D,GAChE7pE,KAAK+pE,+BAA+B94D,KAGzCjR,KAAKyvD,UAAUx+C,GAAMjR,KAAKyvD,UAAUx+C,GAAIvO,QAAO,SAAUsnE,GAAO,OAAOA,IAAQH,OAE5E3xB,EA/BqC,GAiChDn7C,EAAQm7C,4BAA8BA,G,kCChDtC,IACQlwB,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCspB,EAAkB,EAAQ,MAC1B6B,EAAiB,EAAQ,MAEzB8jB,EAAuC,SAAUh0C,GAEjD,SAASg0C,IACL,OAAkB,OAAXh0C,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAgF/D,OAlFAioB,EAAUs0C,EAAuBh0C,GAIjC9qB,OAAOgI,eAAe82D,EAAsB79D,UAAW,cAAe,CAClEkJ,IAAK,WACD,MAAO,sBAEXiD,YAAY,EACZhM,cAAc,IAElB09D,EAAsB79D,UAAU6tD,2BAA6B,SAAU13B,GACnE,IAAIpG,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,6BAC1DujB,EAAGnB,EAA2BwG,YAAYm2C,WAAap1C,EACvDpG,GACJ,OAAOzuB,KAAKy8B,mBAAmB5I,IAEnC0oC,EAAsB79D,UAAUwrE,sBAAwB,WACpD,IAAIz7C,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,6BAC1DujB,GACJ,OAAOzuB,KAAKy8B,mBAAmB5I,IAEnC0oC,EAAsB79D,UAAU+9B,mBAAqB,SAAU0tC,GAC3D,IAAI1hD,EAAQzoB,KACZ,OAAOA,KAAKg0B,QAAQ1G,EAA2B2G,OAAOm2C,sBAAuBD,GAAiBr1D,MAAK,SAAUqf,GAEzG,OADaA,EAAS7zB,OACRmC,KAAI,SAAU0oD,GACxB,OAAO,IAAIvU,EAAgBC,cAAcsU,EAAe1iC,EAAMk9B,oBAI1E4W,EAAsB79D,UAAUktD,0BAA4B,SAAUliC,EAAWkS,GAC7E,IAAInN,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,4BAC1DujB,EAAGnB,EAA2BwG,YAAYu2C,oBAAsB3gD,EAChE+E,EAAGnB,EAA2BwG,YAAYw2C,gBAAkB1uC,EAC5DnN,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOs2C,qBAAsB12C,GAAY/e,MAAK,SAAUqf,GAEnG,OADaA,EAAS7zB,WAI9Bi8D,EAAsB79D,UAAU4tD,yBAA2B,SAAU5/C,GACjE,OAAO1M,KAAKu8B,mBAAmB7vB,OAAM/N,IAEzC49D,EAAsB79D,UAAUmsB,oCAAsC,SAAUnB,GAC5E,OAAO1pB,KAAKu8B,wBAAmB59B,EAAW+qB,IAE9C6yC,EAAsB79D,UAAU69B,mBAAqB,SAAU7vB,EAAMgd,GACjE,IAAI+E,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,qBAC1DujB,GACJ,QAAa9vB,IAAT+N,EACAmnB,EAAWvG,EAA2BwG,YAAY02C,kBAAoB99D,MAErE,SAAkB/N,IAAd+qB,EAIL,MAAM,IAAI+uB,EAAe9uB,aAAad,EAA2Be,WAAW6Y,iBAAkB,wDAH9F5O,EAAWvG,EAA2BwG,YAAYu2C,oBAAsB3gD,EAK5E,OAAO1pB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOw2C,cAAe52C,GAAY/e,MAAK,SAAUqf,GAK5F,GAHW,cAGiBA,EAAS7zB,OAAS,CAC1C,IAAIA,EAAS6zB,EAAS7zB,OACtB,OAAO,IAAIs2C,EAAgBC,cAAcv2C,EAAQmoB,EAAMk9B,kBAO5D4W,EAnF+B,CADlB,EAAQ,MAqFZz6B,iBACpB/kC,EAAQw/D,sBAAwBA,G,kCCxGhC,IACQv0C,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBiF,EAA6B,EAAQ,MACrCgwC,EAAoB,EAAQ,MAC5B7kB,EAAiB,EAAQ,MACzByS,EAAU,EAAQ,MAElBsR,EAAsC,SAAUj0C,GAEhD,SAASi0C,IACL,OAAkB,OAAXj0C,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAiP/D,OAnPAioB,EAAUu0C,EAAsBj0C,GAIhC9qB,OAAOgI,eAAe+2D,EAAqB99D,UAAW,cAAe,CACjEkJ,IAAK,WACD,MAAO,qBAEXiD,YAAY,EACZhM,cAAc,IAOlB29D,EAAqB99D,UAAU6/B,wBAA0B,SAAUpB,GAC/D,IAAI1O,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,0BAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOy2C,mBAAoB72C,GAAY/e,MAAK,SAAUqf,QAWzGqoC,EAAqB99D,UAAUigC,wBAA0B,SAAUxB,EAAUwtC,EAAoB9rC,GAC7F,IAAIpQ,EACAhG,EAAQzoB,KACZ,GAAkC,IAA9B2qE,EAAmBxqE,OACnB,MAAM,IAAIs4C,EAAe9uB,aAAatB,EAASuB,WAAW6Y,iBAAkB,2DAEhF,IAAIg8B,EAAgBz+D,KAAK4qE,4BAA4B/rC,GACjD0+B,EAA0Bv9D,KAAK6qE,oBAAoBF,GACnD92C,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,0BAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,EAAGnB,EAA2BwG,YAAYqS,qBAAuBs4B,EACjEhwC,GAUJ,OATI8uC,EAAwBnC,cAAgBmC,EAAwBnC,aAAaj7D,SAC7E0zB,EAAWvG,EAA2BwG,YAAYg3C,wBAA0BvN,EAAwBnC,cAEpGmC,EAAwBjC,eAAiBiC,EAAwBjC,cAAcn7D,SAC/E0zB,EAAWvG,EAA2BwG,YAAYi3C,2BAA6BxN,EAAwBjC,eAEvGiC,EAAwBlC,aAAekC,EAAwBlC,YAAYl7D,SAC3E0zB,EAAWvG,EAA2BwG,YAAYk3C,uBAAyBzN,EAAwBlC,aAEhGr7D,KAAKg0B,QAAQ1G,EAA2B2G,OAAOg3C,cAAep3C,GAAY/e,MAAK,SAAUqf,GAC5F1L,EAAMu5C,qCAAqC7tC,EAAS7zB,YAI5Dk8D,EAAqB99D,UAAUsjE,qCAAuC,SAAUuE,GAC5E,GAAKA,EAASj5C,EAA2BwG,YAAY0yC,gBAArD,CAGA,GAAID,EAASj5C,EAA2BwG,YAAYo3C,eAChD,MAAM,IAAIzyB,EAAe9uB,aAAatB,EAAS2U,iBAAiBmuC,0BAA2B5E,EAASj5C,EAA2BwG,YAAYo3C,gBAE/I,GAAI3E,EAASj5C,EAA2BwG,YAAY6yC,eAChD,MAAM,IAAIluB,EAAe9uB,aAAatB,EAAS2U,iBAAiBouC,sBAAuB7E,EAASj5C,EAA2BwG,YAAY6yC,gBAE3I,GAAIJ,EAASj5C,EAA2BwG,YAAYu3C,cAChD,MAAM,IAAI5yB,EAAe9uB,aAAatB,EAAS2U,iBAAiBsuC,qBAAsB/E,EAASj5C,EAA2BwG,YAAYu3C,iBAU9I7O,EAAqB99D,UAAUggC,qBAAuB,SAAUvB,EAAUkhC,EAAOx/B,GAC7E,IAAIpQ,EACJ,GAAqB,IAAjB4vC,EAAMl+D,OACN,MAAM,IAAIs4C,EAAe9uB,aAAatB,EAASuB,WAAW6Y,iBAAkB,gDAEhF,IAAIg8B,EAAgBz+D,KAAK4qE,4BAA4B/rC,GACjD0+B,EAA0Bv9D,KAAKurE,kBAAkBlN,GACjDxqC,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,uBAC1DujB,EAAGnB,EAA2BwG,YAAY4pC,UAAYvgC,EACtD1O,EAAGnB,EAA2BwG,YAAYqS,qBAAuBs4B,EACjEhwC,EAAGnB,EAA2BwG,YAAY03C,WAAajO,EAAwBM,UAC/EpvC,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOg3C,cAAep3C,GAAY/e,MAAK,SAAUqf,QAUpGqoC,EAAqB99D,UAAU6sE,kBAAoB,SAAUlN,GAGzD,IAFA,IAAIC,EAAM,GACNf,EAA0B,IAAID,EAAkBnC,yBAC3ChxD,EAAI,EAAGA,EAAIk0D,EAAMl+D,OAAQgK,IAAK,CACnC,IAAIo0D,EAAUF,EAAMl0D,GAAGo0D,QACvB,GAAIA,MAAAA,EAKA,MAAM,IAAI9lB,EAAe9uB,aAAatB,EAASuB,WAAW2G,cAAe,yBAHzE+tC,EAAI78D,KAAK88D,EAAQn6D,YAMzB,GAAmB,IAAfk6D,EAAIn+D,OAAc,CAElB,IAAIq+D,EAAsB,IAAIlB,EAAkBrC,oBAChDuD,EAAoBC,cAAgB,SACpCD,EAAoBtD,UAAYoD,EAChCf,EAAwBM,UAAYW,EAExC,OAAOjB,GAYXf,EAAqB99D,UAAUmsE,oBAAsB,SAAUF,GAE3D,IADA,IAAIpN,EAA0B,IAAID,EAAkBnC,yBAC3ChxD,EAAI,EAAGA,EAAIwgE,EAAmBxqE,OAAQgK,IAAK,CAChD,IAAIshE,EAAKd,EAAmBxgE,GAC5B,IAAMshE,EAAG/hD,gBAA0B/qB,IAAb8sE,EAAG3sE,OAAoC,OAAb2sE,EAAG3sE,MAC/C,MAAM,IAAI25C,EAAe9uB,aAAatB,EAASuB,WAAW2G,cAAe,oCAE7E,IAAIm7C,EAAW,IAAInvD,OAAO,qBAAsB,KAC5CovD,EAAcF,EAAG3sE,MACrB,GAAI4sE,EAASpmE,KAAKmmE,EAAG/hD,WAAY,CAE7B,IAAIkiD,EAAY5rE,KAAK6rE,gBAAgBJ,EAAG/hD,UAAW+hD,EAAG3sE,OACtDy+D,EAAwBnC,aAAa35D,KAAKmqE,QAEzC,QAAwBjtE,IAApBgtE,EAAYptD,UAAyC5f,IAApBgtE,EAAYrtD,IAAmB,CAErE,IAAIwtD,EAAa9rE,KAAK+rE,qBAAqBN,EAAG/hD,UAAWiiD,GACzDpO,EAAwBjC,cAAc75D,KAAKqqE,OAE1C,CAED,IAAIE,EAAWhsE,KAAK6rE,gBAAgBJ,EAAG/hD,UAAW+hD,EAAG3sE,OACrDy+D,EAAwBlC,YAAY55D,KAAKuqE,IAGjD,OAAOzO,GASXf,EAAqB99D,UAAUmtE,gBAAkB,SAAUniD,EAAW5qB,GAClE,IAAImtE,EAAsB,IAAI3O,EAAkB1C,oBAC5CsR,EAAa,GACjB,GAAIptE,aAAiB7B,MAEjB,IADA,IAAIkvE,EAAWrtE,EACNqL,EAAI,EAAGA,EAAIgiE,EAAShsE,OAAQgK,IACjC+hE,EAAWzqE,KAAKypD,EAAQQ,MAAMC,wBAAwBwgB,EAAShiE,UAInE+hE,EAAWzqE,KAAKypD,EAAQQ,MAAMC,wBAAwB7sD,IAI1D,OAFAmtE,EAAoBG,sBAAwB1iD,EAC5CuiD,EAAoBpR,aAAeqR,EAC5BD,GAWXzP,EAAqB99D,UAAUqtE,qBAAuB,SAAUriD,EAAW5qB,GACvE,IAAIutE,EAAsB,IAAI/O,EAAkBvC,oBAShD,OARAsR,EAAoBD,sBAAwB1iD,OAC1B/qB,IAAdG,EAAMwf,KAAmC,OAAdxf,EAAMwf,MACjC+tD,EAAoBtgB,SAAWb,EAAQQ,MAAMC,wBAAwB7sD,EAAMwf,WAE7D3f,IAAdG,EAAMyf,KAAmC,OAAdzf,EAAMyf,MACjC8tD,EAAoBvgB,SAAWZ,EAAQQ,MAAMC,wBAAwB7sD,EAAMyf,MAE/E8tD,EAAoBC,SAAWtsE,KAAKusE,uBAAuBztE,EAAMq0D,YAC1DkZ,GAOX7P,EAAqB99D,UAAUksE,4BAA8B,SAAU/rC,GACnE,OAAIA,IAAwBxW,EAAS8d,oBAAoBsW,QAC9CnvB,EAA2B6Y,oBAAoBsW,QAEjD5d,IAAwBxW,EAAS8d,oBAAoBmW,IACnDhvB,EAA2B6Y,oBAAoBmW,IAEjDzd,IAAwBxW,EAAS8d,oBAAoBqW,OACnDlvB,EAA2B6Y,oBAAoBqW,OAEnDlvB,EAA2B6Y,oBAAoBsW,SAO1D+f,EAAqB99D,UAAU6tE,uBAAyB,SAAUpZ,GAC9D,GAAIA,EAAY,CACZ,GAAIA,IAAe9qC,EAASoe,iBAAiB2V,WACzC,OAAO9uB,EAA2B2b,2BAA2BujC,YAE5D,GAAIrZ,IAAe9qC,EAASoe,iBAAiB0V,cAC9C,OAAO7uB,EAA2B2b,2BAA2BwjC,eAE5D,GAAItZ,IAAe9qC,EAASoe,iBAAiByV,UAC9C,OAAO5uB,EAA2B2b,2BAA2ByjC,WAGrE,OAAOp/C,EAA2B2b,2BAA2ByjC,YAE1DlQ,EApP8B,CADjB,EAAQ,MAsPZ16B,iBACpB/kC,EAAQy/D,qBAAuBA,G,4BC1Q/B/+D,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIo3C,EAAmC,EAAQ,MAC3CuC,EAAiB,EAAQ,MACzBmD,EAAkB,EAAQ,MAM1B9Z,EAAiC,WACjC,SAASA,EAAgB6qC,EAAahnB,GAClC3lD,KAAK2sE,YAAcA,EACnB3sE,KAAK2lD,YAAcA,EAWvB,OATA7jB,EAAgBpjC,UAAUs1B,QAAU,SAAUwa,EAAM9M,GAChD,OAAO1hC,KAAK2sE,YAAY34C,QAAQwa,EAAM9M,GAAQtS,OAAM,SAAUzrB,GAG1D,IAAIipE,EAAgBjpE,EAChBkpE,EAAoB32B,EAAiCtW,+BAA+B0a,UAAUxa,QAAQ8sC,EAActyB,UAAWsB,EAAgBkxB,YAAYC,IAC/J,MAAM,IAAIt0B,EAAe9uB,aAAakjD,EAAmBD,EAAc9sD,aAGxEgiB,EAdyB,GAgBpC/kC,EAAQ+kC,gBAAkBA,G,kCCzB1B,IACQ9Z,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIwuB,EAA6B,EAAQ,MAErCgrB,EAAiC,SAAU/vB,GAE3C,SAAS+vB,IACL,OAAkB,OAAX/vB,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAwB/D,OA1BAioB,EAAUqwB,EAAiB/vB,GAI3B9qB,OAAOgI,eAAe6yC,EAAgB55C,UAAW,cAAe,CAC5DkJ,IAAK,WACD,MAAO,gBAEXiD,YAAY,EACZhM,cAAc,IAElBy5C,EAAgB55C,UAAU8tD,gBAAkB,SAAU9/C,EAAM+/C,GACxD,IAAIh+B,EACA2sB,EAAIC,EAAIC,EAAIC,EACZ1nB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,kBAC1DujB,EAAGnB,EAA2BwG,YAAYk5C,WAAatgE,EACvD+hB,EAAGnB,EAA2BwG,YAAYm5C,YAAyC,QAA1B7xB,EAAKqR,EAAQQ,eAA4B,IAAP7R,OAAgB,EAASA,EAAGhmB,SAAW,EAClI3G,EAAGnB,EAA2BwG,YAAYo5C,WAAwC,QAA1B7xB,EAAKoR,EAAQQ,eAA4B,IAAP5R,OAAgB,EAASA,EAAGnmB,QAAU,EAChIzG,EAAGnB,EAA2BwG,YAAYq5C,YAAyC,QAA1B7xB,EAAKmR,EAAQS,eAA4B,IAAP5R,OAAgB,EAASA,EAAGlmB,SAAW,EAClI3G,EAAGnB,EAA2BwG,YAAYs5C,WAAwC,QAA1B7xB,EAAKkR,EAAQS,eAA4B,IAAP3R,OAAgB,EAASA,EAAGrmB,QAAU,EAChIzG,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOo5C,aAAcx5C,GAAY/e,MAAK,SAAUw4D,QAI5Fh1B,EA3ByB,CADZ,EAAQ,MA6BZxW,iBACpB/kC,EAAQu7C,gBAAkBA,G,kCC7C1B,IACQtwB,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIwuB,EAA6B,EAAQ,MAErCkrB,EAA4C,SAAUjwB,GAEtD,SAASiwB,IACL,OAAkB,OAAXjwB,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAmD/D,OArDAioB,EAAUuwB,EAA4BjwB,GAItC9qB,OAAOgI,eAAe+yC,EAA2B95C,UAAW,cAAe,CACvEkJ,IAAK,WACD,MAAO,4BAEXiD,YAAY,EACZhM,cAAc,IAElB25C,EAA2B95C,UAAUuyD,4BAA8B,WAC/D,IAAIxiC,EACA+f,EAAOlhB,EAA2B2G,OAAOs5C,uBACzC15C,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,8BAC1DujB,GACJ,OAAOzuB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,QAIzDqkB,EAA2B95C,UAAUyyD,gCAAkC,WACnE,IAAI1iC,EACA+f,EAAOlhB,EAA2B2G,OAAOu5C,2BACzC35C,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,kCAC1DujB,GACJ,OAAOzuB,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,QAIzDqkB,EAA2B95C,UAAU0yD,wBAA0B,SAAUzwD,GACrE,IAAI8tB,EACA+f,EAAOlhB,EAA2B2G,OAAOw5C,mBACzC55C,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,0BAC1DujB,GAEJ,OADAoF,EAAWvG,EAA2BwG,YAAY45C,iBAAmB/sE,EAC9DX,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,QAIzDqkB,EAA2B95C,UAAU4yD,sBAAwB,SAAU3wD,GACnE,IAAI8tB,EACA+f,EAAOlhB,EAA2B2G,OAAO05C,iBACzC95C,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,wBAC1DujB,GAEJ,OADAoF,EAAWvG,EAA2BwG,YAAY45C,iBAAmB/sE,EAC9DX,KAAKg0B,QAAQwa,EAAM3a,GAAY/e,MAAK,SAAUqf,GACjD,OAAOA,EAAS7zB,WAGjBk4C,EAtDoC,CADvB,EAAQ,MAwDZ1W,iBACpB/kC,EAAQy7C,2BAA6BA,G,kCCxErC,IACQxwB,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIwuB,EAA6B,EAAQ,MACrCgpB,EAAmB,EAAQ,MAE3BqmB,EAAgC,SAAUp0C,GAE1C,SAASo0C,IACL,OAAkB,OAAXp0C,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAiH/D,OAnHAioB,EAAU00C,EAAgBp0C,GAI1B9qB,OAAOgI,eAAek3D,EAAej+D,UAAW,cAAe,CAC3DkJ,IAAK,WACD,MAAO,eAEXiD,YAAY,EACZhM,cAAc,IAElB89D,EAAej+D,UAAU+wB,oBAAsB,SAAUC,GACrD,IAAIjB,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,sBAC1DujB,EAAGnB,EAA2BwG,YAAY85C,iBAAmB5hC,KAAKE,UAAUxc,GAC5EjB,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO45C,OAAQh6C,GAAY/e,MAAK,SAAUqf,GAErF,OADaA,EAAS7zB,WAI9Bq8D,EAAej+D,UAAUovE,mBAAqB,SAAUphE,GACpD,IAAI+hB,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,qBAC1DujB,EAAGnB,EAA2BwG,YAAYi6C,mBAAqBrhE,EAC/D+hB,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO+5C,cAAen6C,GAAY/e,MAAK,gBAI1F6nD,EAAej+D,UAAUuvE,oBAAsB,WAC3C,IAAIx/C,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,sBAC1DujB,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOi6C,eAAgBr6C,GAAY/e,MAAK,SAAUqf,GAE7F,OADkBA,EAAS7zB,OACRmC,KAAI,SAAU0rE,GAC7B,OAAO,IAAI73B,EAAiBC,eAAe43B,EAAY1lD,EAAMk9B,oBAIzEgX,EAAej+D,UAAU0vE,oBAAsB,SAAUC,GACrD,IAAI5/C,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,sBAC1DujB,EAAGnB,EAA2BwG,YAAYw6C,gBAAkBD,EAC5D5/C,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOs6C,eAAgB16C,GAAY/e,MAAK,SAAUqf,GAC7F,IAAIg6C,EAAah6C,EAAS7zB,OAC1B,OAAO,IAAIg2C,EAAiBC,eAAe43B,EAAY1lD,EAAMk9B,iBAGrEgX,EAAej+D,UAAU8vE,sBAAwB,SAAUH,GACvD,IAAI5/C,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,wBAC1DujB,EAAGnB,EAA2BwG,YAAYw6C,gBAAkBD,EAC5D5/C,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOw6C,iBAAkB56C,GAAY/e,MAAK,SAAUqf,GAC/F,IAAIg6C,EAAah6C,EAAS7zB,OAC1B,OAAO,IAAIg2C,EAAiBC,eAAe43B,EAAY1lD,EAAMk9B,iBAGrEgX,EAAej+D,UAAUgwE,oBAAsB,SAAUL,GACrD,IAAI5/C,EACAhG,EAAQzoB,KAGR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,sBAC1DujB,EAAGnB,EAA2BwG,YAAYw6C,gBAAkBD,EAC5D5/C,EAAGnB,EAA2BwG,YAAY66C,sBAAuB,EACjElgD,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO26C,yBAA0B/6C,GAAY/e,MAAK,SAAUqf,GACvG,IAAIg6C,EAAah6C,EAAS7zB,OAC1B,OAAO,IAAIg2C,EAAiBC,eAAe43B,EAAY1lD,EAAMk9B,iBAGrEgX,EAAej+D,UAAUmwE,kCAAoC,WACzD,IAAIpgD,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,oCAC1DujB,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAO66C,6BAA8Bj7C,GAAY/e,MAAK,gBAIzG6nD,EAAej+D,UAAUo5B,UAAY,SAAUq2C,GAC3C,IAAI1/C,EACAhG,EAAQzoB,KACR6zB,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,YAC1DujB,EAAGnB,EAA2BwG,YAAYi7C,gBAAkBZ,EAAWtoB,KACvEp3B,EAAGnB,EAA2BwG,YAAYw6C,gBAAkBH,EAAWzhE,KACvE+hB,EAAGnB,EAA2BwG,YAAY66C,qBAAuBR,EAAWloB,UAC5Ex3B,EAAGnB,EAA2BwG,YAAYk7C,oBAAsBb,EAAWx8D,OAC3E8c,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOg7C,iBAAkBp7C,GAAY/e,MAAK,SAAUqf,GAC/F,IAAIg6C,EAAah6C,EAAS7zB,OAC1B,OAAO,IAAIg2C,EAAiBC,eAAe43B,EAAY1lD,EAAMk9B,iBAGrEgX,EAAej+D,UAAUwwE,mBAAqB,WAC1C,IAAIzgD,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,qBAC1DujB,GACJ,OAAOzuB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOk7C,cAAet7C,GAAY/e,MAAK,SAAUqf,GAAY,OAAOA,EAAS7zB,WAEzHq8D,EApHwB,CADX,EAAQ,MAsHZ76B,iBACpB/kC,EAAQ4/D,eAAiBA,G,kCCvIzB,IACQ30C,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrCyE,EAA6B,EAAQ,MACrCwoB,EAAmC,EAAQ,MAC3C8C,EAAiB,EAAQ,KACzBsS,EAAU,EAAQ,MAElBwR,EAAiC,SAAUn0C,GAE3C,SAASm0C,IACL,OAAkB,OAAXn0C,GAAmBA,EAAO1Z,MAAM7O,KAAME,YAAcF,KAyC/D,OA3CAioB,EAAUy0C,EAAiBn0C,GAI3B9qB,OAAOgI,eAAei3D,EAAgBh+D,UAAW,cAAe,CAC5DkJ,IAAK,WACD,MAAO,gBAEXiD,YAAY,EACZhM,cAAc,IAElB69D,EAAgBh+D,UAAU6oD,mBAAqB,SAAU9xB,EAAW25C,EAAkBj1C,GAClF,IAAI1L,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAY5oB,cAAgB,qBAC1DujB,EAAGnB,EAA2BwG,YAAYmB,WAAaQ,EACvDhH,EAAGnB,EAA2BwG,YAAYu7C,sBAAwB,GAClE5gD,GAQJ,OANqBy8B,EAAQQ,MAAM4jB,sBAAsBn1C,EAAmB,qBAC7D33B,SAAQ,SAAU1D,EAAOC,GACpC65C,EAAephB,aAAa+3C,kBAAkBH,EAAkBhyE,OAAOI,SAASuB,EAAK,KACrF65C,EAAephB,aAAaoL,gBAAgB9jC,EAAO+pB,EAA2Bid,8BAA+B,iCAC7GjS,EAAWvG,EAA2BwG,YAAYu7C,sBAAsBtwE,GAAO+2C,EAAiChT,+BAA+B4Z,kBAAkB5c,QAAQhhC,MAEtKkB,KAAKg0B,QAAQ1G,EAA2B2G,OAAOu7C,kBAAmB37C,GAAY/e,MAAK,SAAUqf,QAIxGuoC,EAAgBh+D,UAAUgqD,mBAAqB,SAAUjzB,EAAW25C,EAAkBt0C,GAClF,IAAIrM,EACAoF,IAAcpF,EAAK,IAChBnB,EAA2BwG,YAAYmB,WAAaQ,EACvDhH,EAAGnB,EAA2BwG,YAAY27C,0CAA4C30C,EACtFrM,GAKJ,OAJAqM,EAA0Ct4B,SAAQ,SAAUktE,GACxD92B,EAAephB,aAAam4C,6BAA6BP,EAAkBM,EAAgBE,mBAC3Fh3B,EAAephB,aAAaq4C,2DAA2DH,MAEpF1vE,KAAKg0B,QAAQ1G,EAA2B2G,OAAO67C,mBAAoBj8C,GAAY/e,MAAK,SAAUqf,QAIlGuoC,EA5CyB,CADZ,EAAQ,MA8CZ56B,iBACpB/kC,EAAQ2/D,gBAAkBA,G,0BClE1Bj/D,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAKtD,IAAIyrD,EAA8B,WAC9B,SAASA,EAAawlB,GAClB/vE,KAAK+vE,WAAaA,EA8BtB,OA5BAtyE,OAAOgI,eAAe8kD,EAAa7rD,UAAW,OAAQ,CAClDkJ,IAAK,WACD,OAAO5H,KAAK+vE,WAAWrjE,MAE3B7B,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8kD,EAAa7rD,UAAW,KAAM,CAChDkJ,IAAK,WACD,OAAO5H,KAAK+vE,WAAW9+D,IAE3BpG,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8kD,EAAa7rD,UAAW,eAAgB,CAC1DkJ,IAAK,WACD,OAAO5H,KAAK+vE,WAAWC,cAE3BnlE,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAe8kD,EAAa7rD,UAAW,YAAa,CACvDkJ,IAAK,WACD,OAAO5H,KAAK+vE,WAAWE,WAE3BplE,YAAY,EACZhM,cAAc,IAEX0rD,EAhCsB,GAkCjCxtD,EAAQwtD,aAAeA,G,gCCvCvB,IACQviC,EADJC,EAAajoB,MAAQA,KAAKioB,YACtBD,EAAgB,SAAUE,EAAGlY,GAI7B,OAHAgY,EAAgBvqB,OAAOG,gBAClB,CAAE8c,UAAW,cAAgBzd,OAAS,SAAUirB,EAAGlY,GAAKkY,EAAExN,UAAY1K,IACvE,SAAUkY,EAAGlY,GAAK,IAAK,IAAImY,KAAKnY,EAAOA,EAAEF,eAAeqY,KAAID,EAAEC,GAAKnY,EAAEmY,KAClEH,EAAcE,EAAGlY,IAErB,SAAUkY,EAAGlY,GAEhB,SAASoY,IAAOpoB,KAAKqD,YAAc6kB,EADnCF,EAAcE,EAAGlY,GAEjBkY,EAAExpB,UAAkB,OAANsR,EAAavS,OAAOa,OAAO0R,IAAMoY,EAAG1pB,UAAYsR,EAAEtR,UAAW,IAAI0pB,KAGvF3qB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAOtD,IAAI6qB,EAA8B,SAAUpB,GAExC,SAASoB,EAAaumD,EAAYpwD,GAC9B,IAAI2I,EAAQF,EAAOlpB,KAAKW,KAAMkwE,EAAa,KAAOpwD,IAAY9f,KAO9D,OANAyoB,EAAMynD,WAAaA,EAKnBzyE,OAAOG,eAAe6qB,EAAOkB,EAAajrB,WACnC+pB,EASX,OAlBAR,EAAU0B,EAAcpB,GAWxB9qB,OAAOgI,eAAekkB,EAAajrB,UAAW,YAAa,CACvDkJ,IAAK,WACD,OAAO5H,KAAKkwE,YAEhBrlE,YAAY,EACZhM,cAAc,IAEX8qB,EAnBsB,CAoB/BzkB,OACFnI,EAAQ4sB,aAAeA,G,4BCzCvBlsB,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAImgE,EAAmB,EAAQ,MAC3B+H,EAAkB,EAAQ,MAK1B1b,EAAkC,WAClC,SAASA,KAmBT,OAjBAA,EAAiBC,uBAAyB,SAAU4kB,EAAmB10C,GAEnE,OAAO,IAAIurC,EAAgB3O,UAAU8X,EAAkBrxE,MAAOmgE,EAAiBt3B,kBAAkBmB,gCAAgCqnC,EAAkBrxE,MAAO28B,GAAW00C,EAAkBzwC,iBAE3L4rB,EAAiBoZ,oBAAsB,SAAUyL,GAE7C,OAAO,IAAInJ,EAAgB3O,UAAU8X,EAAkBrxE,MAAOqxE,EAAkBrxE,MAAOqxE,EAAkBzwC,iBAE7G4rB,EAAiBie,mBAAqB,SAAU4G,EAAmB10C,GAK/D,OAAO,IAAIurC,EAAgB3O,UAAU8X,EAAkBrxE,WAAmCH,IAA5BwxE,EAAkBrxE,MAC1EmgE,EAAiBt3B,kBAAkBkB,0BAA0BsnC,EAAkBrxE,MAAO28B,QACtF98B,EAAWwxE,EAAkBzwC,iBAEhC4rB,EApB0B,GAsBrCvuD,EAAQuuD,iBAAmBA,G,0BC7B3B7tD,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAUtD,IAAI65C,EAA0B,WAI1B,SAASA,IACL,IAAIlwB,EAAQzoB,KACZA,KAAKowE,SAAW,IAAIvyE,SAAQ,SAAU+X,EAASW,GAC3CkS,EAAM4nD,SAAWz6D,EACjB6S,EAAM6nD,QAAU/5D,KAwCxB,OArCA9Y,OAAOgI,eAAekzC,EAASj6C,UAAW,UAAW,CAOjDkJ,IAAK,WACD,OAAO5H,KAAKowE,UAEhBvlE,YAAY,EACZhM,cAAc,IAQlB85C,EAASj6C,UAAUkX,QAAU,SAAUue,GAC9Bn0B,KAAKqwE,UAGVrwE,KAAKqwE,SAASl8C,IAQlBwkB,EAASj6C,UAAU6X,OAAS,SAAU4K,GAC7BnhB,KAAKswE,SAGVtwE,KAAKswE,QAAQnvD,IAEVw3B,EAhDkB,GAkD7B57C,EAAQ47C,SAAWA,EACnB57C,EAAQwzE,gCAAkC,K,4BC7D1C9yE,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IA8BIguE,EA9BAjkD,EAA6B,EAAQ,MACrC4vB,EAAiB,EAAQ,MAWzBqD,EAA+B,WAC/B,SAASA,EAAc00B,EAAWC,GAC9BzwE,KAAKwwE,UAAYA,EACjBxwE,KAAKywE,YAAcA,EAYvB,OAVA30B,EAAcp9C,UAAUohC,QAAU,SAAU4wC,EAASC,GAEjD,QADuB,IAAnBA,IAA6BA,EAAiB7D,EAAY8D,KAC1D5wE,KAAKwwE,UAAU1gE,eAAe4gE,GAC9B,OAAO1wE,KAAKwwE,UAAUE,GAE1B,QAAyB/xE,IAArBqB,KAAKywE,aAA6BE,IAAmB7D,EAAY8D,IACjE,OAAO5wE,KAAKywE,YAEhB,MAAM,IAAIh4B,EAAe9uB,aAAad,EAA2Be,WAAW2G,cAAe,+BAAiCmgD,IAEzH50B,EAfuB,GAiBlC/+C,EAAQ++C,cAAgBA,EAExB,SAAWgxB,GACPA,EAAiB,IAAI,MACrBA,EAAgB,GAAI,KAFxB,CAGGA,EAAc/vE,EAAQ+vE,cAAgB/vE,EAAQ+vE,YAAc,M,2BCnC/DrvE,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrC4vB,EAAiB,EAAQ,MACzByS,EAAU,EAAQ,MAOlB1zB,EAA8B,WAC9B,SAASA,KA+JT,OAxJAA,EAAa+tB,kBAAoB,SAAUsrB,GACvC,OAAO,IAAIp4B,EAAe9uB,aAAad,EAA2BmU,iBAAiBzM,cAAesgD,EAAU,8BAShHr5C,EAAaqE,oBAAsB,SAAUi1C,EAAeC,GACxD,GAAID,MAAAA,EACA,MAAM,IAAIr4B,EAAe9uB,aAAad,EAA2BmU,iBAAiBzM,cAAeugD,EAAgB,0BAA4BC,IAUrJv5C,EAAaC,gBAAkB,SAAUq5C,EAAeC,GACpD,GAAID,MAAAA,EACA,MAAM,IAAIr4B,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkBquC,EAAgB,oCAAsCC,IAYlKv5C,EAAa8L,oBAAsB,SAAUwtC,EAAeE,EAAcD,GACtE,UAAWD,IAAkBE,EACzB,MAAM,IAAIv4B,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkBquC,EAAgB,oCAAsCC,EAAe,MAUjLv5C,EAAaS,sBAAwB,SAAU64C,EAAeC,GAC1D,GAAID,MAAAA,GAA2E,KAAlBA,EACzD,MAAM,IAAIr4B,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkBquC,EAAgB,mCAAqCC,IAejKv5C,EAAaoL,gBAAkB,SAAUquC,EAAWC,EAAUC,GAC1D,IAAIC,GAAU,EAMd,GALA3zE,OAAOwM,KAAKinE,GAAU1uE,SAAQ,SAAU6uE,GAChCH,EAASG,KAAaJ,EAAU7sE,aAChCgtE,GAAU,OAGbA,EACD,MAAM,IAAI34B,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkBwuC,EAAY,+BAAiCE,EAAW,MAapK35C,EAAaoiC,YAAc,SAAU96D,EAAOyf,EAAKD,GAE7C,KADcC,GAAOzf,GAASA,EAAQwf,GAElC,MAAM,IAAIm6B,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkB3jC,EAAQ,iCAAmCyf,EAAM,KAAOD,EAAM,MAW1KkZ,EAAa47B,qBAAuB,SAAU70C,EAAKD,GAC/C,IAAKC,IAAQD,EACT,MAAM,IAAIm6B,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkB,2EAExG,GAAIlkB,IAAQ2sC,EAAQQ,MAAM4lB,aAAa/yD,KAAS2sC,EAAQQ,MAAM6lB,WAAWhzD,GACrE,MAAM,IAAIk6B,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkB,uFAExG,GAAInkB,IAAQ4sC,EAAQQ,MAAM4lB,aAAahzD,KAAS4sC,EAAQQ,MAAM6lB,WAAWjzD,GACrE,MAAM,IAAIm6B,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkB,uFAExG,GAAIlkB,GAAOD,UAAcC,UAAeD,EACpC,MAAM,IAAIm6B,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkB,uFAU5GjL,EAAa+3C,kBAAoB,SAAUH,EAAkBoC,GACzD,IAAIpC,EAAiBznE,IAAI6pE,GAGzB,MAAM,IAAI/4B,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkB,wDAA0D+uC,EAAS,kCAS3Kh6C,EAAam4C,6BAA+B,SAAUP,EAAkBoC,GACpE,IAAIpC,EAAiBznE,IAAI6pE,KAAWpC,EAAiBxnE,IAAI4pE,GAAQn2C,WAGjE,MAAM,IAAIod,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkB,wDAA0D+uC,EAAS,yDAQ3Kh6C,EAAaq4C,2DAA6D,SAAU4B,GAChF,GAAIA,EAAqCv8C,MAAQ,GAAKu8C,EAAqCr8C,OAAS,EAChG,MAAM,IAAIqjB,EAAe9uB,aAAad,EAA2BmU,iBAAiByF,iBAAkB,0DAA4DgvC,EAAqC7B,kBAAjG,mDAIrGp4C,EAhKsB,GAkKjCz6B,EAAQy6B,aAAeA,G,4BC5KvB/5B,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrC4vB,EAAiB,EAAQ,MACzBG,EAAiB,EAAQ,KACzB8S,EAAuB,WACvB,SAASA,KAoGT,OA9FAA,EAAMkW,yBAA2B,SAAU8P,GAOvC,OANWA,EAAK/L,iBAMF,KALF+L,EAAK7L,cAAgB,GAKL,IAJlB6L,EAAK3L,aAIyB,IAH/B2L,EAAKzL,cAGqC,IAF1CyL,EAAKvL,gBAEgD,IADpDuL,EAAKrL,iBAGnB3a,EAAMimB,4BAA8B,SAAUC,GAC1C,OAAOA,EAAO,OAAS,SAE3BlmB,EAAMmmB,2BAA6B,SAAUC,GACzC,OAAOA,EAAI1tE,SAAS,KAMxBsnD,EAAM4lB,aAAe,SAAU12D,GAC3B,MAAwB,iBAAVA,GAAsBA,aAAiBxd,QAMzDsuD,EAAM6lB,WAAa,SAAU32D,GACzB,OAAOA,aAAiB4M,MAG5BkkC,EAAMqmB,aAAe,SAAUn3D,GAC3B,MAAwB,iBAAVA,GAAsBA,aAAiBxc,QAGzDstD,EAAMsmB,WAAa,SAAUp3D,GACzB,MAAwB,kBAAVA,GAAuBA,aAAiBq3D,SAM1DvmB,EAAMoC,kBAAoB,SAAUlzC,GAChC,OAAOA,MAAAA,GAGX8wC,EAAMC,wBAA0B,SAAU7sD,GACtC,GAAI4sD,EAAM4lB,aAAaxyE,GACnB,OAAO4sD,EAAMmmB,2BAA2B/yE,GAEvC,GAAI4sD,EAAM6lB,WAAWzyE,GACtB,OAAO4sD,EAAMkW,yBAAyB9iE,GAErC,GAAI4sD,EAAMsmB,WAAWlzE,GACtB,OAAO4sD,EAAMimB,4BAA4B7yE,GAExC,GAAI4sD,EAAMqmB,aAAajzE,GACxB,OAAOA,EAGP,MAAM,IAAI25C,EAAe9uB,aAAad,EAA2Be,WAAW2G,cAAe,iCAAmCzxB,IAStI4sD,EAAM4jB,sBAAwB,SAAU4C,EAAOC,GAE3C,GADAv5B,EAAephB,aAAa8L,oBAAoB4uC,EAAO,SAAUC,GAC7Dl1E,MAAMgG,QAAQivE,GACd,MAAM,IAAIz5B,EAAe9uB,aAAad,EAA2Be,WAAW6Y,iBAAkB,gCAAkC0vC,EAAY,KAEhJ,OAAOD,aAAiB/0E,IAAM+0E,EAAQ,IAAI/0E,IAAIM,OAAOE,QAAQu0E,KAGjExmB,EAAMgD,eAAiB,SAAU5vD,GAC7B,GAAI4sD,EAAMoC,kBAAkBhvD,GACxB,MAAO,CAAE8vD,SAAS,GAEtB,GAAIlD,EAAM4lB,aAAaxyE,GACnB,MAAO,CAAEgwD,OAAQhwD,EAAO8vD,SAAS,GAErC,IAAIwjB,EAActzE,EAAMsF,WACxB,GAAoB,QAAhBguE,EAEA,MAAO,CAAEtjB,OAAQujB,IAAKzjB,SAAS,GAEnC,IAAIE,EAASvxD,WAAW60E,GACxB,OAAI90E,MAAMwxD,GACC,CAAEF,SAAS,GAEf,CAAEE,OAAQA,EAAQF,SAAS,IAE/BlD,EArGe,GAuG1B3uD,EAAQ2uD,MAAQA,G,2BC3GhBjuD,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBiF,EAA6B,EAAQ,MACrCmrB,EAAiB,EAAQ,MACzBK,EAA4B,WAC5B,SAASA,KAuET,OApEAA,EAAW0U,gCAAkC,SAAUC,GACnD,IAAI6kB,EAAW7kB,EAAe6kB,SAAUC,EAAY9kB,EAAe8kB,UAAWC,EAAW/kB,EAAe+kB,SAAUC,EAAYhlB,EAAeglB,UAC7I,GAAkB,IAAdF,GAAgC,IAAbD,EACnB,OAAkB,IAAdG,GAAgC,IAAbD,EACZ,CACH5lB,SAAUvkC,EAAS8b,kBAAkB6oB,WAGtC,CACHJ,SAAUvkC,EAAS8b,kBAAkBiqB,OACrClB,QAAS,CAAEh4B,MAAOs9C,EAAUp9C,OAAQq9C,IAG5C,GAAkB,IAAdA,GAAgC,IAAbD,EACnB,MAAO,CACH5lB,SAAUvkC,EAAS8b,kBAAkBmqB,QACrCrB,QAAS,CAAE/3B,MAAOo9C,EAAUl9C,OAAQm9C,IAG5C,GAAIE,IAAcF,GAAaC,IAAaF,GAAYA,EAAW,EAC/D,MAAO,CACH1lB,SAAUvkC,EAAS8b,kBAAkBsqB,QACrCxB,QAAS,CAAE/3B,MAAOo9C,EAAUl9C,OAAQm9C,GACpCrlB,QAAS,CAAEh4B,MAAOo9C,EAAUl9C,OAAQm9C,IAI5C,IAAIG,EAA2B,IAAbJ,GAA+B,IAAbE,EACpC,MAAO,CACH5lB,SAAUvkC,EAAS8b,kBAAkB6e,MACrCiK,QAAS,CAAE/3B,MAAOo9C,EAAUl9C,OAAQm9C,GACpCrlB,QAAS,CAAEh4B,MAAOw9C,EAAc,WAAaF,EAAUp9C,OAAQq9C,KAGvE35B,EAAWoZ,oBAAsB,WAI7B,MAAO,CAAEtF,SAHMvkC,EAAS8b,kBAAkB6oB,UAGbC,QAFf,CAAE/3B,MAAO,EAAGE,OAAQ,GAEa83B,QADjC,CAAEh4B,MAAO,EAAGE,OAAQ,KAGtC0jB,EAAWkZ,4BAA8B,SAAUtlD,EAAM+kD,GAErD,OADgBA,EAAW5uD,MAAK,SAAU0nB,GAAS,OAAOA,EAAM7d,OAASA,MAG7EosC,EAAWwZ,iBAAmB,SAAUqgB,GACpC,IAAIz2C,EACJ,OAAQy2C,GACJ,KAAKrlD,EAA2B0H,UAAU8E,UACtCoC,EAAY7T,EAAS2M,UAAU8E,UAC/B,MAEJ,KAAKxM,EAA2B0H,UAAUC,UACtCiH,EAAY7T,EAAS2M,UAAUC,UAC/B,MAEJ,KAAK3H,EAA2B0H,UAAUmtB,MACtCjmB,EAAY7T,EAAS2M,UAAUmtB,MAC/B,MAEJ,QACI,MAAM,IAAI1J,EAAe9uB,aAAatB,EAAS2U,iBAAiBw1B,YAAa,qBAGrF,OAAOt2B,GAEX4c,EAAWuT,iBAAmB,SAAUumB,GACpC,YAA+Bj0E,IAAxBi0E,EAAWhmB,UAEf9T,EAxEoB,GA0E/B/7C,EAAQ+7C,WAAaA,G,4BC9ErBr7C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIupB,EAAW,EAAQ,MACnBowB,EAAiB,EAAQ,MACzBC,EAAa,EAAQ,MAerBuX,EAAoC,WACpC,SAASA,EAAmB4iB,QACO,IAA3BA,IAAqCA,EAAyBn6B,EAAW63B,iCAC7EvwE,KAAK6yE,uBAAyBA,EA4BlC,OA1BA5iB,EAAmBvxD,UAAUwyD,2BAA6B,WACtD,IAAIzoC,EAAQzoB,KACZ,GAAIA,KAAKgwD,UACL,MAAM,IAAIvX,EAAe9uB,aAAatB,EAAS2U,iBAAiB81C,kBAAmB,+DAOvF,OALA9yE,KAAKgwD,UAAY,IAAItX,EAAWC,SAChC34C,KAAK+yE,WAAa10D,YAAW,WACzB,IAAI1a,EAAQ,IAAI80C,EAAe9uB,aAAatB,EAAS2U,iBAAiBg2C,QAAS,6BAA+BvqD,EAAMoqD,uBAAyB,IAAO,YACpJpqD,EAAMlS,OAAO5S,KACd3D,KAAK6yE,wBACD7yE,KAAKgwD,UAAUn7C,SAE1Bo7C,EAAmBvxD,UAAUkX,QAAU,SAAUue,GACzCn0B,KAAKgwD,YACLijB,aAAajzE,KAAK+yE,YAClB/yE,KAAKgwD,UAAUp6C,QAAQue,GACvBn0B,KAAKgwD,eAAYrxD,IAGzBsxD,EAAmBvxD,UAAU6X,OAAS,SAAU5S,GACxC3D,KAAKgwD,YACLijB,aAAajzE,KAAK+yE,YAClB/yE,KAAKgwD,UAAUz5C,OAAO5S,GACtB3D,KAAKgwD,eAAYrxD,IAGlBsxD,EA/B4B,GAiCvClzD,EAAQkzD,mBAAqBA,G,4BCnD7BxyD,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAI+pB,EAA6B,EAAQ,MACrC4vB,EAAiB,EAAQ,MAKzBO,EAA+B,WAG/B,SAASA,EAAck6B,EAAevkD,GAClC,IAAIwkD,EAAUD,EAAcnuE,MAAM,KAClC/E,KAAKozE,MAAQpzE,KAAKqzE,eAAeF,EAAQ,IAEzC,IAAIG,GADJJ,EAAgBC,EAAQ,IACEpuE,MAAM,KAAKtC,KAAI,SAAU0lB,GAAK,OAAO3qB,SAAS2qB,EAAG,OAC3E,GAAqB,IAAjBmrD,EAAMnzE,OACN,MAAM,IAAIs4C,EAAe9uB,aAAad,EAA2Be,WAAW2G,cAAe,2BAA6B2iD,GAE5HlzE,KAAK0wB,MAAQ4iD,EAAM,GACnBtzE,KAAK2wB,MAAQ2iD,EAAM,GACnBtzE,KAAK4wB,IAAM0iD,EAAM,GACjBtzE,KAAK2uB,QAAUA,EAyBnB,OAvBAqqB,EAAct6C,UAAU20E,eAAiB,SAAUE,GAE/C,IAAKA,EACD,OAFgB,EAKpB,IAAIJ,EAAUI,EAAiBxuE,MAAM,KACrC,OAAOouE,EAAQ,GAAK31E,SAAS21E,EAAQ,GAAI,KANrB,GAQxB11E,OAAOgI,eAAeuzC,EAAct6C,UAAW,iBAAkB,CAC7DkJ,IAAK,WACD,OAAO5H,KAAK0wB,MAAQ,IAAM1wB,KAAK2wB,MAAQ,IAAM3wB,KAAK4wB,KAEtD/lB,YAAY,EACZhM,cAAc,IAElBpB,OAAOgI,eAAeuzC,EAAct6C,UAAW,qBAAsB,CACjEkJ,IAAK,WACD,OAAO5H,KAAK0wB,MAAQ,IAAM1wB,KAAK2wB,MAAQ,IAAM3wB,KAAK4wB,IAAM,QAAU5wB,KAAKozE,OAE3EvoE,YAAY,EACZhM,cAAc,IAEXm6C,EAvCuB,GAyClCj8C,EAAQi8C,cAAgBA,G,2BChDxBv7C,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IACtD,IAAIwuB,EAA6B,EAAQ,MAQrCuD,EAAgD,WAchD,SAASA,EAA+B2iD,EAAwBC,GAC5D,IAAIhrD,EAAQzoB,KACZA,KAAKwzE,uBAAyBA,EAC9BxzE,KAAK0zE,kBAAoBpmD,EAA2BsmB,yCAAyCtmB,EAA2BiC,0BAA2BkkD,GACnJzzE,KAAK+5C,sBAAwB,GAC7By5B,EAAuBr5B,6BAA4B,SAAUvL,GACzD,GAA2C,IAAvCnmB,EAAMsxB,sBAAsB55C,OAAhC,CAGA,IAAIwzE,EAAuBlrD,EAAMirD,kBAAkBvhC,oBAAoBvD,GACvEnmB,EAAMsxB,sBAAsBv3C,SAAQ,SAAUuhB,GAC1CA,EAAQ4vD,UA2BpB,OAvBA9iD,EAA+BC,sBAAwB,SAAUN,GAE7D,OAAOlD,EAA2B+jB,gBAAgB7gB,EAAiBlD,EAA2BiC,4BAElGsB,EAA+BnyB,UAAUs1B,QAAU,SAAUwa,EAAM3a,GAC/D,IAAIpL,EAAQzoB,KACZ,IACI,IAAI4zE,EAAsB5zE,KAAK0zE,kBAAkBzhC,qBAAqBzD,EAAM3a,GAC5E,OAAO7zB,KAAKwzE,uBAAuBx/C,QAAQ4/C,EAAoBplC,KAAMolC,EAAoB//C,YAAY/e,MAAK,SAAUqf,GAEhH,OADsB1L,EAAMirD,kBAAkBxhC,qBAAqB/d,EAAUqa,EAAM3a,MAI3F,MAAOhS,GACH,OAAOhkB,QAAQ0Y,OAAOsL,KAG9BgP,EAA+BnyB,UAAUy7C,4BAA8B,SAAUp2B,GAC7E/jB,KAAK+5C,sBAAsBt4C,KAAKsiB,IAEpC8M,EAA+BnyB,UAAU07C,8BAAgC,SAAUr2B,GAC/E/jB,KAAK+5C,sBAAwB/5C,KAAK+5C,sBAAsBr3C,QAAO,SAAU2yB,GAAK,OAAOA,IAAMtR,MAExF8M,EApDwC,GAsDnD9zB,EAAQ8zB,+BAAiCA,G,gFC/DrCgjD,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBp1E,IAAjBq1E,EACH,OAAOA,EAAaj3E,QAGrB,IAAID,EAAS+2E,EAAyBE,GAAY,CAGjDh3E,QAAS,IAOV,OAHAk3E,EAAoBF,GAAU10E,KAAKvC,EAAOC,QAASD,EAAQA,EAAOC,QAAS+2E,GAGpEh3E,EAAOC,QCrBf+2E,EAAoBjkE,EAAI,WACvB,GAA0B,iBAAfD,WAAyB,OAAOA,WAC3C,IACC,OAAO5P,MAAQ,IAAI4O,SAAS,cAAb,GACd,MAAOiT,GACR,GAAsB,iBAAX7U,OAAqB,OAAOA,QALjB,G,oCCMxBvP,OAAOgI,eAAe1I,EAAS,aAAc,CAAE+B,OAAO,IAEtD,IAAIgqB,EAAkB,EAAQ,MAC9B,EAAQ,KACR,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,EAAQ,KACR,EAAQ,MACR,EAAQ,IACR,EAAQ,KACR,EAAQ,MACR,EAAQ,MAIR,IAAIorD,EAAmB,EAAQ,MAC3BC,EAAe,EAAQ,MACvBxlD,EAAsC,oBAArBylD,kBAAmCA,iBACxDtrD,EAAgB8F,WAAWuqB,iBAA6D,gBAA8BxqB,GACtH,IAAIuS,EAAgB,IAAIgzC,EAAiB9lD,eACzCrxB,EAAQs3E,WAAa,IAAIF,EAAalzC,WAAWC,GAGjD,IAAIrY,EAA6B,EAAQ,MACzC9rB,EAAQwqC,oBAAsB1e,EAA2B0e,oBACzDxqC,EAAQuqC,eAAiBze,EAA2Bye,eACpDvqC,EAAQqqC,aAAeve,EAA2Bue,aAClDrqC,EAAQsqC,WAAaxe,EAA2Bwe,WAChDtqC,EAAQkqC,sBAAwBpe,EAA2Boe,sBAC3DlqC,EAAQoqC,oBAAsBte,EAA2Bse,oBACzDpqC,EAAQ+oC,8BAAgCjd,EAA2Bid,8BACnE/oC,EAAQmqC,SAAWre,EAA2Bqe,SAC9CnqC,EAAQiqC,cAAgBne,EAA2Bme,cACnDjqC,EAAQolC,YAActZ,EAA2BsZ,YACjDplC,EAAQgqC,aAAele,EAA2Bke,aAClDhqC,EAAQ6sB,WAAaf,EAA2Be,WAChD7sB,EAAQynC,iBAAmB3b,EAA2B2b,iBACtDznC,EAAQ0nC,cAAgB5b,EAA2B4b,cACnD1nC,EAAQ+pC,qBAAuBje,EAA2Bie,qBAC1D/pC,EAAQ8pC,cAAgBhe,EAA2Bge,cACnD9pC,EAAQ2pC,iBAAmB7d,EAA2B6d,iBACtD3pC,EAAQ0pC,iBAAmB5d,EAA2B4d,iBACtD1pC,EAAQ6pC,WAAa/d,EAA2B+d,WAChD7pC,EAAQ4pC,iBAAmB9d,EAA2B8d,iBACtD5pC,EAAQgpC,gCAAkCld,EAA2Bkd,gCACrEhpC,EAAQypC,wBAA0B3d,EAA2B2d,wBAC7DzpC,EAAQwpC,SAAW1d,EAA2B0d,SAC9CxpC,EAAQupC,mBAAqBzd,EAA2Byd,mBACxDvpC,EAAQspC,WAAaxd,EAA2Bwd,WAChDtpC,EAAQqpC,mBAAqBvd,EAA2Bud,mBACxDrpC,EAAQipC,gBAAkBnd,EAA2Bmd,gBACrDjpC,EAAQopC,oBAAsBtd,EAA2Bsd,oBACzDppC,EAAQi4B,UAAYnM,EAA2BmM,UAC/Cj4B,EAAQmpC,cAAgBrd,EAA2Bqd,cACnDnpC,EAAQ2rB,iBAAmBG,EAA2BH,iBACtD3rB,EAAQkpC,mBAAqBpd,EAA2Bod,mBACxDlpC,EAAQ2nC,qBAAuB7b,EAA2B6b,qBAC1D3nC,EAAQ4nC,oBAAsB9b,EAA2B8b,oBACzD5nC,EAAQ6nC,iCAAmC/b,EAA2B+b,iCACtE7nC,EAAQ8nC,wBAA0Bhc,EAA2Bgc,wBAC7D9nC,EAAQ+nC,0BAA4Bjc,EAA2Bic,0BAC/D/nC,EAAQyqC,mBAAqB3e,EAA2B2e,oB","sources":["webpack://tableau/../../node_modules/core-js/es/array/find.js","webpack://tableau/../../node_modules/core-js/es/array/from.js","webpack://tableau/../../node_modules/core-js/es/map/index.js","webpack://tableau/../../node_modules/core-js/es/number/is-integer.js","webpack://tableau/../../node_modules/core-js/es/number/is-nan.js","webpack://tableau/../../node_modules/core-js/es/number/parse-float.js","webpack://tableau/../../node_modules/core-js/es/number/parse-int.js","webpack://tableau/../../node_modules/core-js/es/object/assign.js","webpack://tableau/../../node_modules/core-js/es/object/entries.js","webpack://tableau/../../node_modules/core-js/es/object/set-prototype-of.js","webpack://tableau/../../node_modules/core-js/es/promise/index.js","webpack://tableau/../../node_modules/core-js/internals/a-callable.js","webpack://tableau/../../node_modules/core-js/internals/a-constructor.js","webpack://tableau/../../node_modules/core-js/internals/a-possible-prototype.js","webpack://tableau/../../node_modules/core-js/internals/add-to-unscopables.js","webpack://tableau/../../node_modules/core-js/internals/an-instance.js","webpack://tableau/../../node_modules/core-js/internals/an-object.js","webpack://tableau/../../node_modules/core-js/internals/array-from.js","webpack://tableau/../../node_modules/core-js/internals/array-includes.js","webpack://tableau/../../node_modules/core-js/internals/array-iteration.js","webpack://tableau/../../node_modules/core-js/internals/array-slice.js","webpack://tableau/../../node_modules/core-js/internals/array-species-constructor.js","webpack://tableau/../../node_modules/core-js/internals/array-species-create.js","webpack://tableau/../../node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack://tableau/../../node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://tableau/../../node_modules/core-js/internals/classof-raw.js","webpack://tableau/../../node_modules/core-js/internals/classof.js","webpack://tableau/../../node_modules/core-js/internals/clear-error-stack.js","webpack://tableau/../../node_modules/core-js/internals/collection-strong.js","webpack://tableau/../../node_modules/core-js/internals/collection.js","webpack://tableau/../../node_modules/core-js/internals/copy-constructor-properties.js","webpack://tableau/../../node_modules/core-js/internals/correct-prototype-getter.js","webpack://tableau/../../node_modules/core-js/internals/create-iterator-constructor.js","webpack://tableau/../../node_modules/core-js/internals/create-non-enumerable-property.js","webpack://tableau/../../node_modules/core-js/internals/create-property-descriptor.js","webpack://tableau/../../node_modules/core-js/internals/create-property.js","webpack://tableau/../../node_modules/core-js/internals/define-iterator.js","webpack://tableau/../../node_modules/core-js/internals/descriptors.js","webpack://tableau/../../node_modules/core-js/internals/document-create-element.js","webpack://tableau/../../node_modules/core-js/internals/engine-is-browser.js","webpack://tableau/../../node_modules/core-js/internals/engine-is-ios-pebble.js","webpack://tableau/../../node_modules/core-js/internals/engine-is-ios.js","webpack://tableau/../../node_modules/core-js/internals/engine-is-node.js","webpack://tableau/../../node_modules/core-js/internals/engine-is-webos-webkit.js","webpack://tableau/../../node_modules/core-js/internals/engine-user-agent.js","webpack://tableau/../../node_modules/core-js/internals/engine-v8-version.js","webpack://tableau/../../node_modules/core-js/internals/entry-unbind.js","webpack://tableau/../../node_modules/core-js/internals/enum-bug-keys.js","webpack://tableau/../../node_modules/core-js/internals/error-stack-installable.js","webpack://tableau/../../node_modules/core-js/internals/export.js","webpack://tableau/../../node_modules/core-js/internals/fails.js","webpack://tableau/../../node_modules/core-js/internals/freezing.js","webpack://tableau/../../node_modules/core-js/internals/function-apply.js","webpack://tableau/../../node_modules/core-js/internals/function-bind-context.js","webpack://tableau/../../node_modules/core-js/internals/function-call.js","webpack://tableau/../../node_modules/core-js/internals/function-name.js","webpack://tableau/../../node_modules/core-js/internals/function-uncurry-this.js","webpack://tableau/../../node_modules/core-js/internals/get-built-in.js","webpack://tableau/../../node_modules/core-js/internals/get-iterator-method.js","webpack://tableau/../../node_modules/core-js/internals/get-iterator.js","webpack://tableau/../../node_modules/core-js/internals/get-method.js","webpack://tableau/../../node_modules/core-js/internals/global.js","webpack://tableau/../../node_modules/core-js/internals/has-own-property.js","webpack://tableau/../../node_modules/core-js/internals/hidden-keys.js","webpack://tableau/../../node_modules/core-js/internals/host-report-errors.js","webpack://tableau/../../node_modules/core-js/internals/html.js","webpack://tableau/../../node_modules/core-js/internals/ie8-dom-define.js","webpack://tableau/../../node_modules/core-js/internals/indexed-object.js","webpack://tableau/../../node_modules/core-js/internals/inherit-if-required.js","webpack://tableau/../../node_modules/core-js/internals/inspect-source.js","webpack://tableau/../../node_modules/core-js/internals/install-error-cause.js","webpack://tableau/../../node_modules/core-js/internals/internal-metadata.js","webpack://tableau/../../node_modules/core-js/internals/internal-state.js","webpack://tableau/../../node_modules/core-js/internals/is-array-iterator-method.js","webpack://tableau/../../node_modules/core-js/internals/is-array.js","webpack://tableau/../../node_modules/core-js/internals/is-callable.js","webpack://tableau/../../node_modules/core-js/internals/is-constructor.js","webpack://tableau/../../node_modules/core-js/internals/is-forced.js","webpack://tableau/../../node_modules/core-js/internals/is-integral-number.js","webpack://tableau/../../node_modules/core-js/internals/is-object.js","webpack://tableau/../../node_modules/core-js/internals/is-pure.js","webpack://tableau/../../node_modules/core-js/internals/is-symbol.js","webpack://tableau/../../node_modules/core-js/internals/iterate.js","webpack://tableau/../../node_modules/core-js/internals/iterator-close.js","webpack://tableau/../../node_modules/core-js/internals/iterators-core.js","webpack://tableau/../../node_modules/core-js/internals/iterators.js","webpack://tableau/../../node_modules/core-js/internals/length-of-array-like.js","webpack://tableau/../../node_modules/core-js/internals/microtask.js","webpack://tableau/../../node_modules/core-js/internals/native-promise-constructor.js","webpack://tableau/../../node_modules/core-js/internals/native-symbol.js","webpack://tableau/../../node_modules/core-js/internals/native-weak-map.js","webpack://tableau/../../node_modules/core-js/internals/new-promise-capability.js","webpack://tableau/../../node_modules/core-js/internals/normalize-string-argument.js","webpack://tableau/../../node_modules/core-js/internals/number-parse-float.js","webpack://tableau/../../node_modules/core-js/internals/number-parse-int.js","webpack://tableau/../../node_modules/core-js/internals/object-assign.js","webpack://tableau/../../node_modules/core-js/internals/object-create.js","webpack://tableau/../../node_modules/core-js/internals/object-define-properties.js","webpack://tableau/../../node_modules/core-js/internals/object-define-property.js","webpack://tableau/../../node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://tableau/../../node_modules/core-js/internals/object-get-own-property-names-external.js","webpack://tableau/../../node_modules/core-js/internals/object-get-own-property-names.js","webpack://tableau/../../node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://tableau/../../node_modules/core-js/internals/object-get-prototype-of.js","webpack://tableau/../../node_modules/core-js/internals/object-is-prototype-of.js","webpack://tableau/../../node_modules/core-js/internals/object-keys-internal.js","webpack://tableau/../../node_modules/core-js/internals/object-keys.js","webpack://tableau/../../node_modules/core-js/internals/object-property-is-enumerable.js","webpack://tableau/../../node_modules/core-js/internals/object-set-prototype-of.js","webpack://tableau/../../node_modules/core-js/internals/object-to-array.js","webpack://tableau/../../node_modules/core-js/internals/object-to-string.js","webpack://tableau/../../node_modules/core-js/internals/ordinary-to-primitive.js","webpack://tableau/../../node_modules/core-js/internals/own-keys.js","webpack://tableau/../../node_modules/core-js/internals/path.js","webpack://tableau/../../node_modules/core-js/internals/perform.js","webpack://tableau/../../node_modules/core-js/internals/promise-resolve.js","webpack://tableau/../../node_modules/core-js/internals/redefine-all.js","webpack://tableau/../../node_modules/core-js/internals/redefine.js","webpack://tableau/../../node_modules/core-js/internals/require-object-coercible.js","webpack://tableau/../../node_modules/core-js/internals/set-global.js","webpack://tableau/../../node_modules/core-js/internals/set-species.js","webpack://tableau/../../node_modules/core-js/internals/set-to-string-tag.js","webpack://tableau/../../node_modules/core-js/internals/shared-key.js","webpack://tableau/../../node_modules/core-js/internals/shared-store.js","webpack://tableau/../../node_modules/core-js/internals/shared.js","webpack://tableau/../../node_modules/core-js/internals/species-constructor.js","webpack://tableau/../../node_modules/core-js/internals/string-multibyte.js","webpack://tableau/../../node_modules/core-js/internals/string-trim.js","webpack://tableau/../../node_modules/core-js/internals/task.js","webpack://tableau/../../node_modules/core-js/internals/to-absolute-index.js","webpack://tableau/../../node_modules/core-js/internals/to-indexed-object.js","webpack://tableau/../../node_modules/core-js/internals/to-integer-or-infinity.js","webpack://tableau/../../node_modules/core-js/internals/to-length.js","webpack://tableau/../../node_modules/core-js/internals/to-object.js","webpack://tableau/../../node_modules/core-js/internals/to-primitive.js","webpack://tableau/../../node_modules/core-js/internals/to-property-key.js","webpack://tableau/../../node_modules/core-js/internals/to-string-tag-support.js","webpack://tableau/../../node_modules/core-js/internals/to-string.js","webpack://tableau/../../node_modules/core-js/internals/try-to-string.js","webpack://tableau/../../node_modules/core-js/internals/uid.js","webpack://tableau/../../node_modules/core-js/internals/use-symbol-as-uid.js","webpack://tableau/../../node_modules/core-js/internals/well-known-symbol.js","webpack://tableau/../../node_modules/core-js/internals/whitespaces.js","webpack://tableau/../../node_modules/core-js/modules/es.aggregate-error.js","webpack://tableau/../../node_modules/core-js/modules/es.array.find.js","webpack://tableau/../../node_modules/core-js/modules/es.array.from.js","webpack://tableau/../../node_modules/core-js/modules/es.array.iterator.js","webpack://tableau/../../node_modules/core-js/modules/es.map.js","webpack://tableau/../../node_modules/core-js/modules/es.number.is-integer.js","webpack://tableau/../../node_modules/core-js/modules/es.number.is-nan.js","webpack://tableau/../../node_modules/core-js/modules/es.number.parse-float.js","webpack://tableau/../../node_modules/core-js/modules/es.number.parse-int.js","webpack://tableau/../../node_modules/core-js/modules/es.object.assign.js","webpack://tableau/../../node_modules/core-js/modules/es.object.entries.js","webpack://tableau/../../node_modules/core-js/modules/es.object.set-prototype-of.js","webpack://tableau/../../node_modules/core-js/modules/es.object.to-string.js","webpack://tableau/../../node_modules/core-js/modules/es.promise.all-settled.js","webpack://tableau/../../node_modules/core-js/modules/es.promise.any.js","webpack://tableau/../../node_modules/core-js/modules/es.promise.finally.js","webpack://tableau/../../node_modules/core-js/modules/es.promise.js","webpack://tableau/../../node_modules/core-js/modules/es.string.iterator.js","webpack://tableau/../../node_modules/guid/guid.js","webpack://tableau/../../node_modules/uuid/index.js","webpack://tableau/../../node_modules/uuid/lib/bytesToUuid.js","webpack://tableau/../../node_modules/uuid/lib/rng-browser.js","webpack://tableau/../../node_modules/uuid/v1.js","webpack://tableau/../../node_modules/uuid/v4.js","webpack://tableau/./lib/src/ExtensionsApi/Events/DashboardLayoutChangedEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/FilterChangedEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/MarksSelectedEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/ParameterChangedEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/TableauEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/TableauSheetEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/TableauWorksheetEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Events/WorkbookFormattingChangedEvent.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/BentonSansFontNameConstants.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/ConnectedServer.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/ExtensionWorkbookImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/ExtensionsImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/LegacyInternalApiDispatcherHolder.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/SettingsImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/TableauBookFontNameConstants.js","webpack://tableau/./lib/src/ExtensionsApi/Impl/UIImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Models/Dashboard.js","webpack://tableau/./lib/src/ExtensionsApi/Models/DashboardObject.js","webpack://tableau/./lib/src/ExtensionsApi/Models/Parameter.js","webpack://tableau/./lib/src/ExtensionsApi/Models/Sheet.js","webpack://tableau/./lib/src/ExtensionsApi/Models/Workbook.js","webpack://tableau/./lib/src/ExtensionsApi/Models/Worksheet.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/DashboardContent.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/Environment.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/Extensions.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/Settings.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/UI.js","webpack://tableau/./lib/src/ExtensionsApi/Namespaces/WorkbookFormattingEnvUtil.js","webpack://tableau/./lib/src/ExtensionsApi/Services/Impl/InitializationServiceImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Services/Impl/SettingsServiceImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Services/Impl/UIServiceImpl.js","webpack://tableau/./lib/src/ExtensionsApi/Services/RegisterAllExtensionsServices.js","webpack://tableau/./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js","webpack://tableau/../api-external-contract-js/lib/src/EmbeddingApiExternalContract.js","webpack://tableau/../api-external-contract-js/lib/src/ExtensionsApiExternalContract.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Embedding/AskDataInterfaces.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Embedding/Enums.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Embedding/VizInterfaces.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Embedding/WebComponentInterfaces.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Extensions/Namespaces/Tableau.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Shared/Enums.js","webpack://tableau/../api-external-contract-js/lib/src/ExternalContract/Shared/Namespaces/Tableau.js","webpack://tableau/../api-external-contract-js/lib/src/SharedApiExternalContract.js","webpack://tableau/../api-internal-contract-js/lib/src/JsApiInternalContract.js","webpack://tableau/../api-internal-contract-js/lib/src/contract/DataTypeConverter.js","webpack://tableau/../api-internal-contract-js/lib/src/contract/Enums.js","webpack://tableau/../api-internal-contract-js/lib/src/contract/Notifications.js","webpack://tableau/../api-internal-contract-js/lib/src/contract/Parameters.js","webpack://tableau/../api-internal-contract-js/lib/src/contract/Verbs.js","webpack://tableau/../api-internal-contract-js/lib/src/interface/AskDataInterface.js","webpack://tableau/../api-internal-contract-js/lib/src/interface/VqlInterface.js","webpack://tableau/../api-internal-contract-js/lib/src/messaging/CrossFrameMessenger.js","webpack://tableau/../api-internal-contract-js/lib/src/messaging/CrossFramePreparedMessage.js","webpack://tableau/../api-internal-contract-js/lib/src/messaging/MessageTypeChecks.js","webpack://tableau/../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/IdentityVersionConverter.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/StackingVersionConverter.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/VersionConverterFactory.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/VersionTranslations.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/external/ExternalIdentityVersionConverter.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/external/ExternalStackingVersionConverter.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/external/ExternalVersionConverterFactory.js","webpack://tableau/../api-internal-contract-js/lib/src/versioning/external/ExternalVersionTranslations.js","webpack://tableau/../api-shared-js/lib/src/ApiShared.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/ApiVersion.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/ConnectionSummary.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameBootstrap.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameDispatcher.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/DataSource.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/EventListenerManager.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Field.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/CustomViewImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/DashboardImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/DashboardObjectImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/FieldImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/ParameterImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/SingleEventManagerImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/StoryImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/StoryPointImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/StoryPointInfoImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/WorkbookImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/LogicalTable.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Models/FilterModels.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Models/GetDataModels.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Models/GetDataTableReaderModels.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Models/SelectionModels.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Point.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/GetDataService.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/RegisterAllSharedServices.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/AnimationServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/AnnotationServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/ClientInfoServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/DataSourceServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/ExternalContextMenuServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/FilterServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/GetDataServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImplBase.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/ParametersServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/SelectionServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/SizeServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/StoryActivationServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/VizServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Services/impl/ZoneServiceImpl.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/TableSummary.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/TableauError.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/Deferred.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/Param.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/Utils/ShortLivedDeferred.js","webpack://tableau/../api-shared-js/lib/src/ApiShared/VersionNumber.js","webpack://tableau/../api-shared-js/lib/src/VersionedExternalApiDispatcher.js","webpack://tableau/webpack/bootstrap","webpack://tableau/webpack/runtime/global","webpack://tableau/./lib/src/ExtensionsApi.js"],"sourcesContent":["require('../../modules/es.array.find');\nvar entryUnbind = require('../../internals/entry-unbind');\n\nmodule.exports = entryUnbind('Array', 'find');\n","require('../../modules/es.string.iterator');\nrequire('../../modules/es.array.from');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.from;\n","require('../../modules/es.array.iterator');\nrequire('../../modules/es.map');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n","require('../../modules/es.number.is-integer');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isInteger;\n","require('../../modules/es.number.is-nan');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isNaN;\n","require('../../modules/es.number.parse-float');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.parseFloat;\n","require('../../modules/es.number.parse-int');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.parseInt;\n","require('../../modules/es.object.assign');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.assign;\n","require('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n","require('../../modules/es.object.set-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.setPrototypeOf;\n","require('../../modules/es.aggregate-error');\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.any');\nrequire('../../modules/es.promise.finally');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw TypeError('Incorrect invocation');\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar Array = global.Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = call(next, iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar arraySlice = require('../internals/array-slice');\n\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar join = uncurryThis([].join);\n\nvar TEST = (function (arg) { return String(Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\nvar IS_FIREFOX_OR_SAFARI_STACK = /@[^\\n]*\\n/.test(TEST) && !/zxcasd/.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n if (typeof stack != 'string') return stack;\n if (IS_V8_OR_CHAKRA_STACK) {\n while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n } else if (IS_FIREFOX_OR_SAFARI_STACK) {\n return join(arraySlice(split(stack, '\\n'), dropEntries), '\\n');\n } return stack;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","module.exports = typeof window == 'object';\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (CONSTRUCTOR, METHOD) {\n return uncurryThis(global[CONSTRUCTOR].prototype[METHOD]);\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n var error = Error('a');\n if (!('stack' in error)) return true;\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n return error.stack !== 7;\n});\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n return fn && callBind(call, fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","module.exports = {};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length == 1 ? console.error(a) : console.error(a, b);\n }\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n if (isObject(options) && 'cause' in options) {\n createNonEnumerableProperty(O, 'cause', options.cause);\n }\n};\n","var $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function (argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n // we can't check .prototype since constructors produced by .bind haven't it\n } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = false;\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = bind(promise.then, promise);\n notify = function () {\n then(flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n // strange IE + webpack dev server bug - use .bind(global)\n macrotask = bind(macrotask, global);\n notify = function () {\n macrotask(flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar charAt = uncurryThis(''.charAt);\nvar n$ParseFloat = global.parseFloat;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar FORCED = 1 / n$ParseFloat(whitespaces + '-0') !== -Infinity\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { n$ParseFloat(Object(ITERATOR)); }));\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(toString(string));\n var result = n$ParseFloat(trimmedString);\n return result === 0 && charAt(trimmedString, 0) == '-' ? -0 : result;\n} : n$ParseFloat;\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar hex = /^[+-]?0x/i;\nvar exec = uncurryThis(hex.exec);\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(toString(string));\n return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n} : $parseInt;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.19.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(isCallable(fn) ? fn : Function(fn), undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar clearErrorStack = require('../internals/clear-error-stack');\nvar installErrorCause = require('../internals/install-error-cause');\nvar iterate = require('../internals/iterate');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\nvar Error = global.Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n var that = isPrototypeOf(AggregateErrorPrototype, this) ? this : create(AggregateErrorPrototype);\n var options = arguments.length > 2 ? arguments[2] : undefined;\n if (setPrototypeOf) {\n that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\n }\n createNonEnumerableProperty(that, 'message', normalizeStringArgument(message, ''));\n if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));\n installErrorCause(that, options);\n var errorsArray = [];\n iterate(errors, push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, Error);\nelse copyConstructorProperties($AggregateError, Error);\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {\n constructor: createPropertyDescriptor(1, $AggregateError),\n message: createPropertyDescriptor(1, ''),\n name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true }, {\n AggregateError: $AggregateError\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","var $ = require('../internals/export');\nvar isIntegralNumber = require('../internals/is-integral-number');\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n isInteger: isIntegralNumber\n});\n","var $ = require('../internals/export');\n\n// `Number.isNaN` method\n// https://tc39.es/ecma262/#sec-number.isnan\n$({ target: 'Number', stat: true }, {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return number != number;\n }\n});\n","var $ = require('../internals/export');\nvar parseFloat = require('../internals/number-parse-float');\n\n// `Number.parseFloat` method\n// https://tc39.es/ecma262/#sec-number.parseFloat\n// eslint-disable-next-line es/no-number-parsefloat -- required for testing\n$({ target: 'Number', stat: true, forced: Number.parseFloat != parseFloat }, {\n parseFloat: parseFloat\n});\n","var $ = require('../internals/export');\nvar parseInt = require('../internals/number-parse-int');\n\n// `Number.parseInt` method\n// https://tc39.es/ecma262/#sec-number.parseint\n// eslint-disable-next-line es/no-number-parseint -- required for testing\n$({ target: 'Number', stat: true, forced: Number.parseInt != parseInt }, {\n parseInt: parseInt\n});\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","var $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n setPrototypeOf: setPrototypeOf\n});\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aCallable = require('../internals/a-callable');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true }, {\n any: function any(iterable) {\n var C = this;\n var AggregateError = getBuiltIn('AggregateError');\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var errors = [];\n var counter = 0;\n var remaining = 1;\n var alreadyResolved = false;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyRejected = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyResolved = true;\n resolve(value);\n }, function (error) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyRejected = true;\n errors[index] = error;\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n });\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = isCallable(onFinally);\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromise)) {\n var method = getBuiltIn('Promise').prototype['finally'];\n if (NativePromise.prototype['finally'] !== method) {\n redefine(NativePromise.prototype, 'finally', method, { unsafe: true });\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromisePrototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n call(then, result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n call(then, value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromisePrototype);\n aCallable(executor);\n call(Internal, this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n PromisePrototype = PromiseConstructor.prototype;\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromisePrototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reactions = state.reactions;\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n reaction.fail = isCallable(onRejected) && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n reactions[reactions.length] = reaction;\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n call(nativeThen, that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\n }\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n call(capability.reject, undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call($promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n iterate(iterable, function (promise) {\n call($promiseResolve, C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","(function () {\n var validator = new RegExp(\"^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$\", \"i\");\n\n function gen(count) {\n var out = \"\";\n for (var i=0; i>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar TableauEvent_1 = require(\"./TableauEvent\");\nvar DashboardLayoutChangedEvent = /** @class */ (function (_super) {\n __extends(DashboardLayoutChangedEvent, _super);\n function DashboardLayoutChangedEvent(_dashboardLayoutChangeDetails) {\n var _this = _super.call(this, Contract.TableauEventType.DashboardLayoutChanged) || this;\n _this._dashboardLayoutChangeDetails = _dashboardLayoutChangeDetails;\n return _this;\n }\n Object.defineProperty(DashboardLayoutChangedEvent.prototype, \"dashboardLayoutChangeDetails\", {\n get: function () {\n return this._dashboardLayoutChangeDetails;\n },\n enumerable: true,\n configurable: true\n });\n return DashboardLayoutChangedEvent;\n}(TableauEvent_1.TableauEvent));\nexports.DashboardLayoutChangedEvent = DashboardLayoutChangedEvent;\n//# sourceMappingURL=DashboardLayoutChangedEvent.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar TableauWorksheetEvent_1 = require(\"./TableauWorksheetEvent\");\nvar FilterChangedEvent = /** @class */ (function (_super) {\n __extends(FilterChangedEvent, _super);\n function FilterChangedEvent(worksheet, _fieldName, _fieldId) {\n var _this = _super.call(this, api_external_contract_js_1.TableauEventType.FilterChanged, worksheet) || this;\n _this._fieldName = _fieldName;\n _this._fieldId = _fieldId;\n return _this;\n }\n Object.defineProperty(FilterChangedEvent.prototype, \"fieldName\", {\n get: function () {\n return this._fieldName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FilterChangedEvent.prototype, \"fieldId\", {\n get: function () {\n return this._fieldId;\n },\n enumerable: true,\n configurable: true\n });\n FilterChangedEvent.prototype.getFilterAsync = function () {\n var _this = this;\n return this._worksheet.getFiltersAsync().then(function (filters) {\n // TODO: Filtering of the filters should eventually be done platform side.\n var eventedFilter = _this.fieldId\n ? filters.find(function (filter) { return filter.fieldId === _this.fieldId; }, _this)\n : filters.find(function (filter) { return filter.fieldName === _this.fieldName; }, _this);\n if (!eventedFilter) {\n // We shouldn't hit this unless the filter was removed from the worksheet\n // after the event was raised.\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.MissingFilter, \"cannot find filter: \" + _this._fieldName);\n }\n return eventedFilter;\n });\n };\n return FilterChangedEvent;\n}(TableauWorksheetEvent_1.TableauWorksheetEvent));\nexports.FilterChangedEvent = FilterChangedEvent;\n//# sourceMappingURL=FilterChangedEvent.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauWorksheetEvent_1 = require(\"./TableauWorksheetEvent\");\nvar MarksSelectedEvent = /** @class */ (function (_super) {\n __extends(MarksSelectedEvent, _super);\n function MarksSelectedEvent(worksheet) {\n return _super.call(this, api_external_contract_js_1.TableauEventType.MarkSelectionChanged, worksheet) || this;\n }\n MarksSelectedEvent.prototype.getMarksAsync = function () {\n return this.worksheet.getSelectedMarksAsync();\n };\n return MarksSelectedEvent;\n}(TableauWorksheetEvent_1.TableauWorksheetEvent));\nexports.MarksSelectedEvent = MarksSelectedEvent;\n//# sourceMappingURL=MarksSelectedEvent.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar Parameter_1 = require(\"../Models/Parameter\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\nvar TableauSheetEvent_1 = require(\"./TableauSheetEvent\");\nvar ParameterChangedEvent = /** @class */ (function (_super) {\n __extends(ParameterChangedEvent, _super);\n function ParameterChangedEvent(_globalFieldName, sheet) {\n var _this = _super.call(this, api_external_contract_js_1.TableauEventType.ParameterChanged, sheet) || this;\n _this._globalFieldName = _globalFieldName;\n return _this;\n }\n ParameterChangedEvent.prototype.getParameterAsync = function () {\n var _this = this;\n // Call down to our service to get the parameter back via its field name\n var service = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"parameters-service\" /* Parameters */);\n return service.findParameterByGlobalFieldNameAsync(this._globalFieldName).then(function (parameterImpl) {\n if (parameterImpl === undefined) {\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.MissingParameter, \"Cannot find parameter: \" + _this._globalFieldName);\n }\n return new Parameter_1.Parameter(parameterImpl, _this.sheet);\n });\n };\n return ParameterChangedEvent;\n}(TableauSheetEvent_1.TableauSheetEvent));\nexports.ParameterChangedEvent = ParameterChangedEvent;\n//# sourceMappingURL=ParameterChangedEvent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar TableauEvent = /** @class */ (function () {\n function TableauEvent(type) {\n this._type = type;\n }\n Object.defineProperty(TableauEvent.prototype, \"type\", {\n get: function () {\n return this._type;\n },\n enumerable: true,\n configurable: true\n });\n return TableauEvent;\n}());\nexports.TableauEvent = TableauEvent;\n//# sourceMappingURL=TableauEvent.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar TableauEvent_1 = require(\"./TableauEvent\");\nvar TableauSheetEvent = /** @class */ (function (_super) {\n __extends(TableauSheetEvent, _super);\n function TableauSheetEvent(type, sheet) {\n var _this = _super.call(this, type) || this;\n _this._sheet = sheet;\n return _this;\n }\n Object.defineProperty(TableauSheetEvent.prototype, \"sheet\", {\n get: function () {\n return this._sheet;\n },\n enumerable: true,\n configurable: true\n });\n return TableauSheetEvent;\n}(TableauEvent_1.TableauEvent));\nexports.TableauSheetEvent = TableauSheetEvent;\n//# sourceMappingURL=TableauSheetEvent.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar TableauSheetEvent_1 = require(\"./TableauSheetEvent\");\nvar TableauWorksheetEvent = /** @class */ (function (_super) {\n __extends(TableauWorksheetEvent, _super);\n function TableauWorksheetEvent(type, _worksheet) {\n var _this = _super.call(this, type, _worksheet) || this;\n _this._worksheet = _worksheet;\n return _this;\n }\n Object.defineProperty(TableauWorksheetEvent.prototype, \"worksheet\", {\n get: function () {\n return this._worksheet;\n },\n enumerable: true,\n configurable: true\n });\n return TableauWorksheetEvent;\n}(TableauSheetEvent_1.TableauSheetEvent));\nexports.TableauWorksheetEvent = TableauWorksheetEvent;\n//# sourceMappingURL=TableauWorksheetEvent.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar TableauEvent_1 = require(\"./TableauEvent\");\nvar WorkbookFormattingChangedEvent = /** @class */ (function (_super) {\n __extends(WorkbookFormattingChangedEvent, _super);\n function WorkbookFormattingChangedEvent(_formatting) {\n var _this = _super.call(this, Contract.TableauEventType.WorkbookFormattingChanged) || this;\n _this._formatting = _formatting;\n return _this;\n }\n Object.defineProperty(WorkbookFormattingChangedEvent.prototype, \"formatting\", {\n get: function () {\n return this._formatting;\n },\n enumerable: true,\n configurable: true\n });\n return WorkbookFormattingChangedEvent;\n}(TableauEvent_1.TableauEvent));\nexports.WorkbookFormattingChangedEvent = WorkbookFormattingChangedEvent;\n//# sourceMappingURL=WorkbookFormattingChangedEvent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BentonSansFontFamilyName = 'Benton Sans';\nexports.BentonSansLowDPIFontFamilyName = 'Benton Sans Low-DPI';\nexports.BentonSansBookFontFaceName = 'Benton Sans Book';\nexports.BentonSansBookItalicFontFaceName = 'Benton Sans Book Italic';\nexports.BentonSansSemiDemiFontFaceName = 'Benton Sans SemiDemi';\nexports.BentonSansSemiDemiItalicFontFaceName = 'Benton Sans SemiDemi Italic';\nexports.BentonSansLightFontFaceName = 'Benton Sans Light';\nexports.BentonSansMediumFontFaceName = 'Benton Sans Medium';\nexports.SupportedBentonSansFontFaces = [\n exports.BentonSansBookFontFaceName,\n exports.BentonSansBookItalicFontFaceName,\n exports.BentonSansSemiDemiFontFaceName,\n exports.BentonSansSemiDemiItalicFontFaceName,\n exports.BentonSansLightFontFaceName,\n exports.BentonSansMediumFontFaceName,\n];\n//# sourceMappingURL=BentonSansFontNameConstants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ConnectedServer = /** @class */ (function () {\n function ConnectedServer(_userId, _siteId, _workbookId) {\n this._userId = _userId;\n this._siteId = _siteId;\n this._workbookId = _workbookId;\n }\n Object.defineProperty(ConnectedServer.prototype, \"userId\", {\n get: function () {\n return this._userId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ConnectedServer.prototype, \"siteId\", {\n get: function () {\n return this._siteId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ConnectedServer.prototype, \"workbookId\", {\n get: function () {\n return this._workbookId;\n },\n enumerable: true,\n configurable: true\n });\n return ConnectedServer;\n}());\nexports.ConnectedServer = ConnectedServer;\n//# sourceMappingURL=ConnectedServer.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\nvar ExtensionWorkbookImpl = /** @class */ (function (_super) {\n __extends(ExtensionWorkbookImpl, _super);\n function ExtensionWorkbookImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ExtensionWorkbookImpl.prototype.getAllDataSourcesAsync = function () {\n var _this = this;\n var service = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"data-source-service\" /* DataSourceService */);\n return service.getAllDataSourcesAsync().then(function (result) {\n var dataSchema = result;\n var dataSources = [];\n // Loop through all data sources and add them.\n Object.values(dataSchema.dataSources).forEach(function (ds) {\n dataSources.push(_this.createDataSourceFromInfo(ds));\n });\n return dataSources;\n });\n };\n ExtensionWorkbookImpl.prototype.createDataSourceFromInfo = function (dataSourceInfo) {\n var dataSourceImpl = new api_shared_js_1.DataSourceImpl(dataSourceInfo, ServiceRegistryUtil_1.ExtensionsRegistryId);\n var dataSource = new api_shared_js_1.DataSource(dataSourceImpl);\n dataSourceImpl.initializeWithPublicInterfaces(dataSource);\n return dataSource;\n };\n return ExtensionWorkbookImpl;\n}(api_shared_js_1.WorkbookImpl));\nexports.ExtensionWorkbookImpl = ExtensionWorkbookImpl;\n//# sourceMappingURL=ExtensionWorkbookImpl.js.map","\"use strict\";\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar Dashboard_1 = require(\"../Models/Dashboard\");\nvar Workbook_1 = require(\"../Models/Workbook\");\nvar DashboardContent_1 = require(\"../Namespaces/DashboardContent\");\nvar Environment_1 = require(\"../Namespaces/Environment\");\nvar Settings_1 = require(\"../Namespaces/Settings\");\nvar UI_1 = require(\"../Namespaces/UI\");\nvar RegisterAllExtensionsServices_1 = require(\"../Services/RegisterAllExtensionsServices\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\nvar BentonSansFontNameConstants_1 = require(\"./BentonSansFontNameConstants\");\nvar ExtensionWorkbookImpl_1 = require(\"./ExtensionWorkbookImpl\");\nvar LegacyInternalApiDispatcherHolder_1 = require(\"./LegacyInternalApiDispatcherHolder\");\nvar SettingsImpl_1 = require(\"./SettingsImpl\");\nvar TableauBookFontNameConstants_1 = require(\"./TableauBookFontNameConstants\");\nvar UIImpl_1 = require(\"./UIImpl\");\nvar ExtensionsImpl = /** @class */ (function () {\n function ExtensionsImpl() {\n }\n ExtensionsImpl.prototype.initializeAsync = function (isExtensionDialog, contextMenuCallbacks) {\n var _this = this;\n if (!this._initializationPromise) {\n this._initializationPromise = new Promise(function (resolve, reject) {\n var _a;\n var initOptions = { isAlpha: api_shared_js_1.ApiVersion.Instance.isAlpha };\n // First thing we want to do is check to see if there is a desktop dispatcher already registered for us\n if (LegacyInternalApiDispatcherHolder_1.LegacyInternalApiDispatcherHolder.hasDesktopApiDispatcherPromise(initOptions)) {\n // Running in a pre-2019.3 desktop, use our legacy dispatcher promise\n var desktopDispatcherPromise = LegacyInternalApiDispatcherHolder_1.LegacyInternalApiDispatcherHolder.getDesktopDispatcherPromise(initOptions);\n (_a = desktopDispatcherPromise) === null || _a === void 0 ? void 0 : _a.then(function (dispatcherFactory) { return _this.onDispatcherReceived(dispatcherFactory, isExtensionDialog, contextMenuCallbacks); }).then(function (openPayload) {\n resolve(openPayload);\n }).catch(function (error) {\n reject(error);\n });\n }\n else {\n // We must be running in server, so we should try to kick of the server dispatcher bootstrapping\n var onDispatcherReceivedCallback_1 = _this.onDispatcherReceived.bind(_this);\n api_shared_js_1.doCrossFrameBootstrap(window, api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION, initOptions)\n .then(function (factory) {\n return onDispatcherReceivedCallback_1(factory, isExtensionDialog, contextMenuCallbacks);\n })\n .then(function (openPayload) {\n resolve(openPayload);\n })\n .catch(function (error) {\n reject(error);\n });\n }\n });\n }\n return this._initializationPromise;\n };\n ExtensionsImpl.prototype.createVizImageAsync = function (inputSpec) {\n var vizService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"viz-service\" /* Viz */);\n return vizService.createVizImageAsync(inputSpec);\n };\n ExtensionsImpl.prototype.setClickThroughAsync = function (clickThroughEnabled) {\n var uiService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"UIService\" /* UIService */);\n return uiService.setClickThroughAsync(clickThroughEnabled, this.extensionZoneId);\n };\n ExtensionsImpl.prototype.onDispatcherReceived = function (dispatcherFactory, isExtensionDialog, contextMenuFunctions) {\n var _this = this;\n var dispatcher = dispatcherFactory(api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION);\n // Call to register all the services which will use the newly initialized dispatcher\n RegisterAllExtensionsServices_1.registerInitializationExtensionsServices(dispatcher);\n // Get the initialization service and initialize this extension\n var initializationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"InitializationService\" /* InitializationService */);\n var callbackMapKeys = contextMenuFunctions ? Object.keys(contextMenuFunctions) : [];\n return initializationService.initializeDashboardExtensionsAsync(isExtensionDialog, callbackMapKeys).then(function (result) {\n if (!result.extensionInstance.locator.dashboardPath) {\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Unexpected error during initialization.');\n }\n // If we receive an invalid plaform version, this means that platform is runnning 1.4 or 2.1 and\n // doesn't pass the platform version to external. In this case we assume the platform version to be 1.9\n var platformVersion = result.extensionEnvironment.platformVersion\n ? result.extensionEnvironment.platformVersion\n : { major: 1, minor: 9, fix: 0 };\n // Wrap our existing dispatcher in a dispatcher that can downgrade/upgrade for an older platform.\n if (api_shared_js_1.VersionedExternalApiDispatcher.needsVersionConverter(platformVersion)) {\n dispatcher = new api_shared_js_1.VersionedExternalApiDispatcher(dispatcher, platformVersion);\n }\n // Registration of services must happen before initializing content and environment\n // Extensions doesn't need to pass in a registryId. By default, the service registry instance is associated with registryId=0.\n api_shared_js_1.registerAllSharedServices(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId, platformVersion);\n RegisterAllExtensionsServices_1.registerAllExtensionsServices(dispatcher);\n _this.dashboardContent = _this.initializeDashboardContent(result.extensionDashboardInfo, result.extensionInstance.locator.dashboardPath);\n _this.environment = new Environment_1.Environment(result.extensionEnvironment);\n _this.settings = _this.initializeSettings(result.extensionSettingsInfo);\n _this.ui = new UI_1.UI(new UIImpl_1.UIImpl());\n _this.workbook = new Workbook_1.Workbook(new ExtensionWorkbookImpl_1.ExtensionWorkbookImpl());\n _this.extensionZoneId = result.extensionDashboardInfo.extensionZoneId;\n if (result.extensionEnvironment.workbookFormatting) {\n _this.initializeTableauFonts(dispatcher, result.extensionEnvironment.workbookFormatting);\n _this.applyAllFormatting(result.extensionEnvironment.workbookFormatting);\n }\n // After initialization has completed, setup listeners for the callback functions that\n // are meant to be triggered whenever a context menu item is clicked.\n _this.initializeContextMenuCallbacks(contextMenuFunctions);\n // Also set up listeners for ExtensionStylesChangedEvent\n _this.initializeWorkbookFormattingChangedEventCallback(dispatcher);\n // In the normal initialization case, this will be an empty string. When returning from initializeAsync to the\n // developer, we just ingore that string. In the case of initializing from an extension dialog, this string\n // is an optional payload sent from the parent extension.\n return result.extensionDialogPayload;\n });\n };\n ExtensionsImpl.prototype.applyAllFormatting = function (formattingModel) {\n var _this = this;\n if (!this._styleElement) {\n this._styleElement = document.createElement('style');\n this._styleElement.id = 'Tableau-Extension-Formatting';\n document.head.appendChild(this._styleElement);\n }\n if (!this._styleElement.sheet || !formattingModel) {\n return;\n }\n var stylesheet = this._styleElement.sheet;\n while (stylesheet.cssRules.length > 0) {\n stylesheet.deleteRule(stylesheet.cssRules.length - 1);\n }\n formattingModel.formattingSheets.map(function (currentFormattingSheet) {\n _this.applyFormattingSheetToStyleSheet(currentFormattingSheet, stylesheet);\n });\n };\n ExtensionsImpl.prototype.applyFormattingSheetToStyleSheet = function (currentFormattingSheet, stylesheet) {\n var styleInfo = '';\n var cssProperties = currentFormattingSheet.cssProperties;\n if (cssProperties.fontFamily) {\n styleInfo += 'font-family: ' + cssProperties.fontFamily.toString() + '; ';\n }\n if (cssProperties.fontSize) {\n styleInfo += 'font-size: ' + cssProperties.fontSize.toString() + '; ';\n }\n if (cssProperties.fontWeight) {\n styleInfo += 'font-weight: ' + cssProperties.fontWeight.toString() + '; ';\n }\n if (cssProperties.fontStyle) {\n styleInfo += 'font-style: ' + cssProperties.fontStyle.toString() + '; ';\n }\n if (cssProperties.textDecoration) {\n styleInfo += 'text-decoration: ' + cssProperties.textDecoration.toString() + '; ';\n }\n if (cssProperties.color) {\n styleInfo += 'color: ' + cssProperties.color + '; ';\n }\n var selector = '.' + currentFormattingSheet.classNameKey;\n var rule = selector + ' { ' + styleInfo + ' }';\n stylesheet.insertRule(rule, stylesheet.cssRules.length);\n };\n ExtensionsImpl.prototype.initializeWorkbookFormattingChangedEventCallback = function (dispatcher) {\n var _this = this;\n var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n // Unregister function not used since these notifications should be\n // observed for the full lifetime of the extension.\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.WorkbookFormattingChanged, function () { return true; }, function (eventFormatting) {\n if (eventFormatting) {\n _this.initializeTableauFonts(dispatcher, eventFormatting);\n _this.applyAllFormatting(eventFormatting);\n }\n });\n };\n ExtensionsImpl.prototype.initializeTableauFonts = function (dispatcher, workbookFormatting) {\n var _a;\n var _this = this;\n var fontNames = __spreadArrays(BentonSansFontNameConstants_1.SupportedBentonSansFontFaces, TableauBookFontNameConstants_1.SupportedTableauFontFaces);\n workbookFormatting.formattingSheets.forEach(function (formattingSheet) {\n if (formattingSheet.cssProperties.fontFamily) {\n fontNames.push(formattingSheet.cssProperties.fontFamily);\n }\n });\n if (fontNames.length > 0) {\n var parameters = (_a = {}, _a[api_internal_contract_js_1.ParameterId.FontNameListItems] = fontNames, _a);\n dispatcher\n .execute(api_internal_contract_js_1.VerbId.GetFonts, parameters)\n .then(function (response) {\n _this.loadFonts(response.result);\n })\n .catch();\n }\n };\n ExtensionsImpl.prototype.loadFonts = function (fonts) {\n var _this = this;\n fonts.forEach(function (fontNameAndInfo) {\n if (TableauBookFontNameConstants_1.SupportedTableauFontFaces.includes(fontNameAndInfo.fontName)) {\n _this.loadTableauFonts(fontNameAndInfo);\n }\n else if (BentonSansFontNameConstants_1.SupportedBentonSansFontFaces.includes(fontNameAndInfo.fontName)) {\n _this.loadBentonSansFonts(fontNameAndInfo);\n }\n else {\n document.fonts.add(new FontFace(fontNameAndInfo.fontName, fontNameAndInfo.fontBinaryInfo));\n }\n });\n };\n ExtensionsImpl.prototype.initializeDashboardContent = function (info, sheetPath) {\n // sheets are always active for Extensions\n var sheetInfoImpl = new api_shared_js_1.SheetInfoImpl(info.name, api_external_contract_js_1.SheetType.Dashboard, { width: info.size.w, height: info.size.h }, undefined, true);\n var dashboardImpl = new api_shared_js_1.DashboardImpl(sheetInfoImpl, info.zones, sheetPath, ServiceRegistryUtil_1.ExtensionsRegistryId, null);\n var dashboard = new Dashboard_1.Dashboard(dashboardImpl);\n return new DashboardContent_1.DashboardContent(dashboard);\n };\n ExtensionsImpl.prototype.initializeSettings = function (settingsInfo) {\n var settingsImpl = new SettingsImpl_1.SettingsImpl(settingsInfo);\n return new Settings_1.Settings(settingsImpl);\n };\n ExtensionsImpl.prototype.initializeContextMenuCallbacks = function (contextMenuFunctions) {\n var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n // Unregister function not used since these notifications should be\n // observed for the full lifetime of the extension.\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ContextMenuClick, function () {\n // Let through any context menu event, these are already filtered on api-core\n // based on the extension locator.\n return true;\n }, function (event) {\n // Execute the function associated with this context menu ID\n if (contextMenuFunctions) {\n if (!contextMenuFunctions[event.id]) {\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"Received unexpected context menu Id from event: \" + event.id);\n }\n contextMenuFunctions[event.id]();\n }\n });\n };\n ExtensionsImpl.prototype.loadTableauFonts = function (fontNameAndInfo) {\n switch (fontNameAndInfo.fontName) {\n case TableauBookFontNameConstants_1.TableauBookFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBookFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n break;\n case TableauBookFontNameConstants_1.TableauLightFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauLightFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n break;\n case TableauBookFontNameConstants_1.TableauRegularFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauRegularFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n break;\n case TableauBookFontNameConstants_1.TableauSemiBoldFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauSemiboldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauRegularFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n break;\n case TableauBookFontNameConstants_1.TableauBoldFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBoldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBoldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauMediumFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauSemiboldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n break;\n case TableauBookFontNameConstants_1.TableauMediumFontFaceName:\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauMediumFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauLightFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBookFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n break;\n default:\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"'attempted to load unsupported font: \" + fontNameAndInfo.fontName + \".'\");\n }\n };\n ExtensionsImpl.prototype.loadBentonSansFonts = function (fontNameAndInfo) {\n switch (fontNameAndInfo.fontName) {\n case BentonSansFontNameConstants_1.BentonSansBookFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: '100', style: 'normal' }));\n break;\n case BentonSansFontNameConstants_1.BentonSansLightFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: '100', style: 'normal' }));\n break;\n case BentonSansFontNameConstants_1.BentonSansMediumFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' }));\n break;\n case BentonSansFontNameConstants_1.BentonSansSemiDemiFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' }));\n break;\n case BentonSansFontNameConstants_1.BentonSansBookItalicFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { style: 'italic' }));\n break;\n case BentonSansFontNameConstants_1.BentonSansSemiDemiItalicFontFaceName:\n document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { style: 'italic' }));\n break;\n default:\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"'attempted to load unsupported font: \" + fontNameAndInfo.fontName + \".'\");\n }\n };\n return ExtensionsImpl;\n}());\nexports.ExtensionsImpl = ExtensionsImpl;\n//# sourceMappingURL=ExtensionsImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\n/**\n * LegacyInternalApiDispatcherHolder has been moved (and renamed) from api-internal-contract.\n * It supports running a newer external library against a pre 2019.3 desktop.\n * Starting in 2019.3, we have a merged bootstrap style for both desktop and server.\n * In addition, the alpha checking that is happening here is not necessary in external-api-js\n * after 2019.3 because that checking happens in api-platform-js (ApiDispatcherTest.ts)\n * TFSID: 1091561 tracks an improvement to this system to make it less complex and tie it directly to\n * tableau beta release versions.\n * @deprecated\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nvar LegacyInternalApiDispatcherHolder;\n(function (LegacyInternalApiDispatcherHolder) {\n /**\n * @param options\n */\n function getDesktopDispatcherPromise(options) {\n var _a;\n if ((!options || typeof options.isAlpha === 'undefined') && !window.__warningIssued) {\n // tslint:disable-next-line:no-console\n console.warn('This is a beta version of the Extensions API. Please upgrade to an official release.');\n window.__warningIssued = true;\n }\n else if (((_a = options) === null || _a === void 0 ? void 0 : _a.isAlpha) && window.__platformIsOfficialRelease) {\n window.__tableauDesktopDispatcher\n .then(function (dispatcherFactory) {\n var dispatcher = dispatcherFactory(api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION);\n dispatcher.execute(api_internal_contract_js_1.VerbId.BlockExtension, {}).catch();\n })\n .catch();\n }\n // this will be undefined if promise is rejected or throws\n return window.__tableauDesktopDispatcher;\n }\n LegacyInternalApiDispatcherHolder.getDesktopDispatcherPromise = getDesktopDispatcherPromise;\n /**\n * @param options\n */\n function hasDesktopApiDispatcherPromise(options) {\n return !!getDesktopDispatcherPromise(options);\n }\n LegacyInternalApiDispatcherHolder.hasDesktopApiDispatcherPromise = hasDesktopApiDispatcherPromise;\n})(LegacyInternalApiDispatcherHolder = exports.LegacyInternalApiDispatcherHolder || (exports.LegacyInternalApiDispatcherHolder = {}));\n//# sourceMappingURL=LegacyInternalApiDispatcherHolder.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar TableauEvent_1 = require(\"../Events/TableauEvent\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\nvar SettingsChangedEvent = /** @class */ (function (_super) {\n __extends(SettingsChangedEvent, _super);\n function SettingsChangedEvent(_newSettings) {\n var _this = _super.call(this, Contract.TableauEventType.SettingsChanged) || this;\n _this._newSettings = _newSettings;\n return _this;\n }\n Object.defineProperty(SettingsChangedEvent.prototype, \"newSettings\", {\n get: function () {\n return this._newSettings;\n },\n enumerable: true,\n configurable: true\n });\n return SettingsChangedEvent;\n}(TableauEvent_1.TableauEvent));\nvar SettingsImpl = /** @class */ (function () {\n function SettingsImpl(settingsInfo) {\n // Since promises can't be introspected for state, keep a variable that\n // indicates a save is in progress, so that set/erase can't be called during a save.\n this._saveInProgress = false;\n this.initializeSettings(settingsInfo);\n }\n SettingsImpl.prototype.erase = function (key) {\n api_shared_js_1.ErrorHelpers.verifyParameter(key, 'key');\n // Only make a modification if we have the key already\n if (this._currentSettings[key]) {\n this.verifySettingsAreUnlocked();\n delete this._currentSettings[key];\n this._isModified = true;\n }\n };\n SettingsImpl.prototype.get = function (key) {\n api_shared_js_1.ErrorHelpers.verifyParameter(key, 'key');\n return this._currentSettings[key];\n };\n SettingsImpl.prototype.getAll = function () {\n // Returns a mutable copy of the settings\n return Object.assign({}, this._currentSettings);\n };\n Object.defineProperty(SettingsImpl.prototype, \"isModified\", {\n get: function () {\n return this._isModified;\n },\n enumerable: true,\n configurable: true\n });\n SettingsImpl.prototype.saveAsync = function () {\n var _this = this;\n this.verifySettingsAreUnlocked();\n // Just resolve immediately if settings are unchanged\n if (!this._isModified) {\n return Promise.resolve(this._currentSettings);\n }\n this._saveInProgress = true;\n // Use the settings service to save settings to twb\n var settingsService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"SettingsService\" /* SettingsService */);\n return settingsService.saveSettingsAsync(this._currentSettings).then(function (newSettings) {\n _this._saveInProgress = false;\n _this._isModified = false;\n if (_this._currentSettings === undefined) {\n _this._currentSettings = newSettings;\n }\n else {\n Object.assign(_this._currentSettings, newSettings);\n }\n return newSettings;\n }, function (reason) {\n _this._saveInProgress = false;\n return Promise.reject(reason);\n });\n };\n SettingsImpl.prototype.set = function (key, value) {\n api_shared_js_1.ErrorHelpers.verifyStringParameter(key, 'key'); // Key shouldn't be an empty string.\n api_shared_js_1.ErrorHelpers.verifyParameter(value, 'value'); // Empty string value is allowed.\n this.verifySettingsAreUnlocked();\n this._currentSettings[key] = value;\n this._isModified = true;\n };\n /**\n * Initializes all events relevant to settings object. This is only a settingsUpdate event currently.\n *\n * @returns {Array} Collection of event managers to pass to an EventListenerManager.\n */\n SettingsImpl.prototype.initializeEvents = function () {\n var _this = this;\n var results = new Array();\n var notificationService;\n try {\n notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n }\n catch (e) {\n // If we don't have this service registered, just return\n return results;\n }\n var settingsChangedEvent = new api_shared_js_1.SingleEventManagerImpl(Contract.TableauEventType.SettingsChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.SettingsChanged, function () { return true; }, function (event) {\n _this._currentSettings = event.newSettings;\n settingsChangedEvent.triggerEvent(function () { return new SettingsChangedEvent(event.newSettings); });\n });\n results.push(settingsChangedEvent);\n return results;\n };\n SettingsImpl.prototype.initializeSettings = function (settingsInfo) {\n api_shared_js_1.ErrorHelpers.verifyParameter(settingsInfo, 'settingsInfo');\n api_shared_js_1.ErrorHelpers.verifyParameter(settingsInfo.settingsValues, 'settingsInfo.SettingsValues');\n this._currentSettings = settingsInfo.settingsValues;\n // Reset the isModified flag\n this._isModified = false;\n };\n /**\n * This helper should be called before any local update to this.currentSettings.\n * Checks if a current save call is still in progress and throws an error if so.\n */\n SettingsImpl.prototype.verifySettingsAreUnlocked = function () {\n if (this._saveInProgress) {\n throw new api_shared_js_1.TableauError(Contract.ErrorCodes.SettingSaveInProgress, SettingsImpl.ASYNC_SAVE_IN_PROGRESS);\n }\n };\n SettingsImpl.ASYNC_SAVE_IN_PROGRESS = 'Async Save is in progress, updating settings is not allowed.';\n return SettingsImpl;\n}());\nexports.SettingsImpl = SettingsImpl;\n//# sourceMappingURL=SettingsImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TableauBookFontFamilyName = 'Tableau Book';\nexports.TableauLightFontFamilyName = 'Tableau Light';\nexports.TableauRegularFontFamilyName = 'Tableau Regular';\nexports.TableauMediumFontFamilyName = 'Tableau Medium';\nexports.TableauSemiboldFontFamilyName = 'Tableau Semibold';\nexports.TableauBoldFontFamilyName = 'Tableau Bold';\nexports.TableauBookFontFaceName = 'Tableau Book';\nexports.TableauBoldFontFaceName = 'Tableau Bold';\nexports.TableauLightFontFaceName = 'Tableau Light';\nexports.TableauMediumFontFaceName = 'Tableau Medium';\nexports.TableauRegularFontFaceName = 'Tableau Regular';\nexports.TableauSemiBoldFontFaceName = 'Tableau Semi Bold';\nexports.SupportedTableauFontFaces = [\n exports.TableauBookFontFaceName,\n exports.TableauBoldFontFaceName,\n exports.TableauLightFontFaceName,\n exports.TableauMediumFontFaceName,\n exports.TableauRegularFontFaceName,\n exports.TableauSemiBoldFontFaceName,\n];\n//# sourceMappingURL=TableauBookFontNameConstants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\nvar UIImpl = /** @class */ (function () {\n function UIImpl() {\n }\n UIImpl.prototype.displayDialogAsync = function (url, payload, options) {\n var uiService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"UIService\" /* UIService */);\n var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n return new Promise(function (resolve, reject) {\n uiService\n .displayDialogAsync(url, payload || '', options)\n .then(function () {\n var unregisterFn = notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ExtensionDialogUpdate, function () {\n // Let through any dialog update event\n return true;\n }, function (event) {\n if (event.isCloseEvent) {\n if (event.closePayload === undefined) {\n throw new api_shared_js_1.TableauError(Contract.ErrorCodes.InternalError, 'closePayload is undefined');\n }\n resolve(event.closePayload);\n }\n else {\n reject(new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.DialogClosedByUser, 'Extension dialog closed by user.'));\n }\n unregisterFn();\n });\n })\n .catch(function (error) {\n reject(error);\n });\n });\n };\n UIImpl.prototype.closeDialog = function (payload) {\n var uiService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"UIService\" /* UIService */);\n uiService.closeDialog(payload);\n };\n return UIImpl;\n}());\nexports.UIImpl = UIImpl;\n//# sourceMappingURL=UIImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar DashboardLayoutChangedEvent_1 = require(\"../Events/DashboardLayoutChangedEvent\");\nvar WorkbookFormattingChangedEvent_1 = require(\"../Events/WorkbookFormattingChangedEvent\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\nvar DashboardObject_1 = require(\"./DashboardObject\");\nvar Sheet_1 = require(\"./Sheet\");\nvar Worksheet_1 = require(\"./Worksheet\");\nvar Dashboard = /** @class */ (function (_super) {\n __extends(Dashboard, _super);\n function Dashboard(_dashboardImpl) {\n var _this = _super.call(this, _dashboardImpl) || this;\n _this._dashboardImpl = _dashboardImpl;\n _dashboardImpl.initializeWithPublicInterfaces();\n _this.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); });\n return _this;\n }\n Object.defineProperty(Dashboard.prototype, \"worksheets\", {\n get: function () {\n return this._dashboardImpl.worksheetsImpl.map(function (worksheetImpl) {\n return new Worksheet_1.Worksheet(worksheetImpl);\n });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Dashboard.prototype, \"objects\", {\n get: function () {\n return this._dashboardImpl.objects.map(function (dashboardObjectImpl) {\n return new DashboardObject_1.DashboardObject(dashboardObjectImpl);\n });\n },\n enumerable: true,\n configurable: true\n });\n Dashboard.prototype.setZoneVisibilityAsync = function (zoneVisibilityMap) {\n return this._dashboardImpl.setDashboardObjectVisibilityAsync(zoneVisibilityMap);\n };\n Dashboard.prototype.setDashboardObjectVisibilityAsync = function (dashboardObjectVisibilityMap) {\n return this._dashboardImpl.setDashboardObjectVisibilityAsync(dashboardObjectVisibilityMap);\n };\n Dashboard.prototype.getDashboardObjectById = function (dashboardObjectId) {\n var zone = this._dashboardImpl.getDashboardObjectById(dashboardObjectId);\n return zone && new DashboardObject_1.DashboardObject(zone);\n };\n Dashboard.prototype.initializeEvents = function () {\n var _this = this;\n var results = new Array();\n // Initializing events and registering notification service\n var notificationService;\n try {\n notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n }\n catch (e) {\n // If we don't have this service registered, just return (allows unit testing without NotificationService mock)\n return results;\n }\n var dashboardLayoutChangedEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.DashboardLayoutChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.DashboardLayoutChanged, function () { return true; }, function (event) {\n var dashboardObjectChanges = _this._dashboardImpl.updateZones(event.zones);\n dashboardLayoutChangedEvent.triggerEvent(function () { return new DashboardLayoutChangedEvent_1.DashboardLayoutChangedEvent(dashboardObjectChanges); });\n });\n results.push(dashboardLayoutChangedEvent);\n var workbookFormattingChangedEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.WorkbookFormattingChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.WorkbookFormattingChanged, function () { return true; }, function (eventFormatting) {\n workbookFormattingChangedEvent.triggerEvent(function () { return new WorkbookFormattingChangedEvent_1.WorkbookFormattingChangedEvent(eventFormatting); });\n });\n results.push(workbookFormattingChangedEvent);\n return results;\n };\n Dashboard.prototype.moveAndResizeDashboardObjectsAsync = function (dashboardObjectPositionAndSizeUpdateArray) {\n return this._dashboardImpl.moveAndResizeDashboardObjectsAsync(dashboardObjectPositionAndSizeUpdateArray);\n };\n Dashboard.prototype.replayAnimationAsync = function (replaySpeed) {\n return this._dashboardImpl.replayAnimationAsync(replaySpeed);\n };\n Dashboard.prototype.getFiltersAsync = function () {\n return this._dashboardImpl.getFiltersAsync();\n };\n Dashboard.prototype.applyFilterAsync = function (fieldName, values, updateType, options) {\n return this._dashboardImpl.applyFilterAsync(fieldName, values, updateType, options);\n };\n return Dashboard;\n}(Sheet_1.Sheet));\nexports.Dashboard = Dashboard;\n//# sourceMappingURL=Dashboard.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Dashboard_1 = require(\"./Dashboard\");\nvar Worksheet_1 = require(\"./Worksheet\");\n/**\n * Implementation of the dashboard objects - the zones in a dashboard.\n */\nvar DashboardObject = /** @class */ (function () {\n function DashboardObject(_dashboardObjectImpl) {\n this._dashboardObjectImpl = _dashboardObjectImpl;\n }\n Object.defineProperty(DashboardObject.prototype, \"dashboard\", {\n get: function () {\n return new Dashboard_1.Dashboard(this._dashboardObjectImpl.dashboardImpl);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"type\", {\n get: function () {\n return this._dashboardObjectImpl.type;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"position\", {\n get: function () {\n return this._dashboardObjectImpl.position;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"size\", {\n get: function () {\n return this._dashboardObjectImpl.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"worksheet\", {\n get: function () {\n if (this._dashboardObjectImpl.worksheetImpl) {\n return new Worksheet_1.Worksheet(this._dashboardObjectImpl.worksheetImpl);\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"name\", {\n get: function () {\n return this._dashboardObjectImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"isFloating\", {\n get: function () {\n return this._dashboardObjectImpl.isFloating;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"isVisible\", {\n get: function () {\n return this._dashboardObjectImpl.isVisible;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObject.prototype, \"id\", {\n get: function () {\n return this._dashboardObjectImpl.id;\n },\n enumerable: true,\n configurable: true\n });\n return DashboardObject;\n}());\nexports.DashboardObject = DashboardObject;\n//# sourceMappingURL=DashboardObject.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar ParameterChangedEvent_1 = require(\"../Events/ParameterChangedEvent\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\n/**\n * Implementation of the Parameter contract. Calls down to the impl\n * class for almost all of the work it does.\n */\nvar Parameter = /** @class */ (function (_super) {\n __extends(Parameter, _super);\n function Parameter(parameterImpl, sheet) {\n var _this = _super.call(this) || this;\n _this.parameterImpl = parameterImpl;\n // Initialize our event handling for this class\n _this.initializeEvents(sheet).forEach(function (e) { return _this.addNewEventType(e); });\n return _this;\n }\n Object.defineProperty(Parameter.prototype, \"name\", {\n get: function () {\n return this.parameterImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Parameter.prototype, \"currentValue\", {\n get: function () {\n return this.parameterImpl.currentValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Parameter.prototype, \"dataType\", {\n get: function () {\n return this.parameterImpl.dataType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Parameter.prototype, \"allowableValues\", {\n get: function () {\n return this.parameterImpl.allowableValues;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Parameter.prototype, \"id\", {\n get: function () {\n return this.parameterImpl.id;\n },\n enumerable: true,\n configurable: true\n });\n Parameter.prototype.changeValueAsync = function (newValue) {\n return this.parameterImpl.changeValueAsync(newValue);\n };\n /**\n * Helper method which goes through and registers each event type this impl knows about\n * with the NotificationService. It returns an array of SingleEventManager objects which\n * can then be passed to an EventListenerManager to handle user registration / unregistration.\n *\n * @param sheet The sheet object which will be included with the event notifications\n * @returns {Array} Collection of event managers to pass to an EventListenerManager\n */\n Parameter.prototype.initializeEvents = function (sheet) {\n var _this = this;\n api_shared_js_1.ErrorHelpers.verifyInternalValue(sheet, 'sheet');\n var results = new Array();\n var notificationService;\n try {\n notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n }\n catch (e) {\n // If we don't have this service registered, just return\n return results;\n }\n // Initialize all of the event managers we'll need (one for each event type)\n var parameterEvent = new api_shared_js_1.SingleEventManagerImpl(Contract.TableauEventType.ParameterChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ParameterChanged, function (model) {\n var fieldName = model;\n return fieldName === _this.parameterImpl.id;\n }, function (fieldName) {\n parameterEvent.triggerEvent(function () { return new ParameterChangedEvent_1.ParameterChangedEvent(fieldName, sheet); });\n });\n results.push(parameterEvent);\n return results;\n };\n return Parameter;\n}(api_shared_js_1.EventListenerManager));\nexports.Parameter = Parameter;\n//# sourceMappingURL=Parameter.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar Parameter_1 = require(\"./Parameter\");\nvar Sheet = /** @class */ (function (_super) {\n __extends(Sheet, _super);\n function Sheet(_sheetImpl) {\n var _this = _super.call(this) || this;\n _this._sheetImpl = _sheetImpl;\n return _this;\n }\n Object.defineProperty(Sheet.prototype, \"name\", {\n get: function () {\n return this._sheetImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sheet.prototype, \"sheetType\", {\n get: function () {\n return this._sheetImpl.sheetType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sheet.prototype, \"size\", {\n get: function () {\n if (this.isValidSize(this._sheetImpl.size)) {\n return this._sheetImpl.size;\n }\n throw new api_shared_js_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, 'Size not implemented');\n },\n enumerable: true,\n configurable: true\n });\n Sheet.prototype.isValidSize = function (size) {\n var testSize = size;\n if (testSize.width !== undefined && testSize.height !== undefined) {\n return true;\n }\n return false;\n };\n Sheet.prototype.findParameterAsync = function (parameterName) {\n var _this = this;\n return this._sheetImpl.findParameterAsync(parameterName).then(function (parameterImpl) {\n if (parameterImpl) {\n return new Promise(function (resolve) { return resolve(new Parameter_1.Parameter(parameterImpl, _this)); });\n }\n else {\n return new Promise(function (resolve) { return resolve(undefined); });\n }\n });\n };\n Sheet.prototype.getParametersAsync = function () {\n var _this = this;\n return this._sheetImpl.getParametersAsync().then(function (parametersImpl) {\n return parametersImpl.map(function (parameterImpl) {\n return new Parameter_1.Parameter(parameterImpl, _this);\n });\n });\n };\n return Sheet;\n}(api_shared_js_1.EventListenerManager));\nexports.Sheet = Sheet;\n//# sourceMappingURL=Sheet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Workbook = /** @class */ (function () {\n function Workbook(_workbookImpl) {\n this._workbookImpl = _workbookImpl;\n }\n Workbook.prototype.getAllDataSourcesAsync = function () {\n return this._workbookImpl.getAllDataSourcesAsync();\n };\n return Workbook;\n}());\nexports.Workbook = Workbook;\n//# sourceMappingURL=Workbook.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar FilterChangedEvent_1 = require(\"../Events/FilterChangedEvent\");\nvar MarksSelectedEvent_1 = require(\"../Events/MarksSelectedEvent\");\nvar ServiceRegistryUtil_1 = require(\"../Services/ServiceRegistryUtil\");\nvar Dashboard_1 = require(\"./Dashboard\");\nvar Sheet_1 = require(\"./Sheet\");\nvar Worksheet = /** @class */ (function (_super) {\n __extends(Worksheet, _super);\n function Worksheet(_worksheetImpl) {\n var _this = _super.call(this, _worksheetImpl) || this;\n _this._worksheetImpl = _worksheetImpl;\n // Call to initialize events and then call down to the event listener manager to handle things\n _this.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); });\n return _this;\n }\n Object.defineProperty(Worksheet.prototype, \"parentDashboard\", {\n get: function () {\n // This should never happen for Extensions if the DashboardImpls are created correctly\n if (this._worksheetImpl.parentDashboard == null) {\n throw new api_shared_js_1.TableauError(Contract.SharedErrorCodes.ImplementationError, \"Parent dashboard not implemented\");\n }\n return new Dashboard_1.Dashboard(this._worksheetImpl.parentDashboard);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Helper method which goes through and registers each event type this impl knows about\n * with the NotificationService. It returns an array of SingleEventManager objects which\n * can then be passed to an EventListenerManager to handle user registration / unregistration.\n *\n * @param {Worksheet} worksheet The worksheet object which will be included with the event notifications\n * @returns {Array} Collection of event managers to pass to an EventListenerManager\n */\n Worksheet.prototype.initializeEvents = function () {\n var _this = this;\n var results = new Array();\n var notificationService;\n try {\n notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService(\"notification-service\" /* Notification */);\n }\n catch (e) {\n // If we don't have this service registered, just return\n return results;\n }\n // Initialize all of the event managers we'll need (one for each event type)\n var marksEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.MarkSelectionChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.SelectedMarksChanged, function (model) {\n var visualId = model;\n return _this.visualIdsAreEqual(visualId, _this._worksheetImpl.visualId);\n }, function () { return marksEvent.triggerEvent(function () { return new MarksSelectedEvent_1.MarksSelectedEvent(_this); }); });\n var filterEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.FilterChanged);\n notificationService.registerHandler(api_internal_contract_js_1.NotificationId.FilterChanged, function (model) {\n var filterEventResponse = model;\n return _this._worksheetImpl.visualId.worksheet === filterEventResponse.visualId.worksheet;\n }, function (event) {\n filterEvent.triggerEvent(function () { return new FilterChangedEvent_1.FilterChangedEvent(_this, event.fieldName, event.fieldId); });\n });\n results.push(marksEvent);\n results.push(filterEvent);\n // TODO - other event types\n return results;\n };\n Worksheet.prototype.applyFilterAsync = function (fieldName, values, updateType, options) {\n return this._worksheetImpl.applyFilterAsync(fieldName, values, updateType, options);\n };\n Worksheet.prototype.applyRangeFilterAsync = function (fieldName, filterOptions) {\n return this._worksheetImpl.applyRangeFilterAsync(fieldName, filterOptions);\n };\n Worksheet.prototype.applyHierarchicalFilterAsync = function (fieldName, values, updateType, options) {\n return this._worksheetImpl.applyHierarchicalFilterAsync(fieldName, values, updateType, options);\n };\n Worksheet.prototype.applyRelativeDateFilterAsync = function (fieldName, options) {\n return this._worksheetImpl.applyRelativeDateFilterAsync(fieldName, options);\n };\n Worksheet.prototype.clearFilterAsync = function (fieldName) {\n return this._worksheetImpl.clearFilterAsync(fieldName);\n };\n Worksheet.prototype.getDataSourcesAsync = function () {\n return this._worksheetImpl.getDataSourcesAsync();\n };\n Worksheet.prototype.getFiltersAsync = function () {\n return this._worksheetImpl.getFiltersAsync();\n };\n Worksheet.prototype.getSelectedMarksAsync = function () {\n return this._worksheetImpl.getSelectedMarksAsync();\n };\n Worksheet.prototype.getHighlightedMarksAsync = function () {\n return this._worksheetImpl.getHighlightedMarksAsync();\n };\n Worksheet.prototype.getSummaryDataAsync = function (options) {\n return this._worksheetImpl.getSummaryDataAsync(options);\n };\n Worksheet.prototype.getSummaryDataReaderAsync = function (pageRowCount, options) {\n return this._worksheetImpl.getSummaryDataReaderAsync(pageRowCount, options);\n };\n Worksheet.prototype.getSummaryColumnsInfoAsync = function () {\n return this._worksheetImpl.getSummaryColumnsInfoAsync();\n };\n Worksheet.prototype.getUnderlyingDataAsync = function (options) {\n console.warn('Worksheet.getUnderlyingDataAsync is deprecated. Please use ' +\n 'Worksheet.getUnderlyingTablesAsync and Worksheet.getUnderlyingTableDataAsync');\n return this._worksheetImpl.getUnderlyingDataAsync(options);\n };\n Worksheet.prototype.getUnderlyingTablesAsync = function () {\n return this._worksheetImpl.getUnderlyingTablesAsync();\n };\n Worksheet.prototype.getUnderlyingTableDataAsync = function (logicalTableId, options) {\n return this._worksheetImpl.getUnderlyingTableDataAsync(logicalTableId, options);\n };\n Worksheet.prototype.getUnderlyingTableDataReaderAsync = function (logicalTableId, pageRowCount, options) {\n return this._worksheetImpl.getUnderlyingTableDataReaderAsync(logicalTableId, pageRowCount, options);\n };\n Worksheet.prototype.clearSelectedMarksAsync = function () {\n return this._worksheetImpl.clearSelectedMarksAsync();\n };\n Worksheet.prototype.selectMarksByIDAsync = function (marksInfo, updateType) {\n return this._worksheetImpl.selectMarksByIdAsync(marksInfo, updateType);\n };\n Worksheet.prototype.selectMarksByValueAsync = function (selections, selectionUpdateType) {\n return this._worksheetImpl.selectMarksByValueAsync(selections, selectionUpdateType);\n };\n Worksheet.prototype.selectMarksByIdAsync = function (selections, selectionUpdateType) {\n return this._worksheetImpl.selectMarksByIdAsync(selections, selectionUpdateType);\n };\n Worksheet.prototype.annotateMarkAsync = function (mark, annotationText) {\n return this._worksheetImpl.annotateMarkAsync(mark, annotationText);\n };\n Worksheet.prototype.getAnnotationsAsync = function () {\n return this._worksheetImpl.getAnnotationsAsync();\n };\n Worksheet.prototype.removeAnnotationAsync = function (annotation) {\n return this._worksheetImpl.removeAnnotationAsync(annotation);\n };\n Worksheet.prototype.visualIdsAreEqual = function (a, b) {\n return (a &&\n b &&\n a.worksheet === b.worksheet &&\n a.dashboard === b.dashboard &&\n a.storyboard === b.storyboard &&\n a.storyPointID === b.storyPointID);\n };\n return Worksheet;\n}(Sheet_1.Sheet));\nexports.Worksheet = Worksheet;\n//# sourceMappingURL=Worksheet.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of the external DashboardContent namespace.\n * This does not follow the Impl pattern as DashboardContent is\n * currently just a (single) property bag.\n */\nvar DashboardContent = /** @class */ (function () {\n function DashboardContent(_dashboard) {\n this._dashboard = _dashboard;\n }\n Object.defineProperty(DashboardContent.prototype, \"dashboard\", {\n get: function () {\n return this._dashboard;\n },\n enumerable: true,\n configurable: true\n });\n return DashboardContent;\n}());\nexports.DashboardContent = DashboardContent;\n//# sourceMappingURL=DashboardContent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar ConnectedServer_1 = require(\"../Impl/ConnectedServer\");\nvar WorkbookFormattingEnvUtil_1 = require(\"./WorkbookFormattingEnvUtil\");\n/**\n * Implementation of the external environment namespace.\n * Environment does not follow the Impl pattern as it is\n * just a property bag.\n * First class extensions can get to ConnectedServer with: environment['connectedServer']\n */\nvar Environment = /** @class */ (function () {\n function Environment(extensionEnvironment) {\n this._apiVersion = api_shared_js_1.ApiVersion.Instance && api_shared_js_1.ApiVersion.Instance.formattedValue; // maj.min.fix (no build)\n this._context = api_shared_js_1.InternalToExternalEnumMappings.extensionContext.convert(extensionEnvironment.extensionContext);\n this._formatting = WorkbookFormattingEnvUtil_1.WorkbookFormattingEnvUtil.convertToWorkbookFormatting(extensionEnvironment.workbookFormatting);\n this._language = extensionEnvironment.extensionLanguage;\n this._country = extensionEnvironment.extensionCountry;\n this._locale = extensionEnvironment.extensionLocale;\n this._mode = api_shared_js_1.InternalToExternalEnumMappings.extensionMode.convert(extensionEnvironment.extensionMode);\n this._operatingSystem = extensionEnvironment.operatingSystem;\n this._tableauVersion = extensionEnvironment.tableauVersion;\n // If we have a userId, then we are a first class extension\n // Add our hidden member 'connectedServer'\n if (extensionEnvironment.userId) {\n this.connectedServer = new ConnectedServer_1.ConnectedServer(extensionEnvironment.userId, extensionEnvironment.siteId, extensionEnvironment.workbookId);\n }\n }\n Object.defineProperty(Environment.prototype, \"apiVersion\", {\n get: function () {\n return this._apiVersion;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"context\", {\n get: function () {\n return this._context;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"workbookFormatting\", {\n get: function () {\n return this._formatting;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"language\", {\n get: function () {\n return this._language;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"country\", {\n get: function () {\n return this._country;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"locale\", {\n get: function () {\n return this._locale;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"mode\", {\n get: function () {\n return this._mode;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"operatingSystem\", {\n get: function () {\n return this._operatingSystem;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Environment.prototype, \"tableauVersion\", {\n get: function () {\n return this._tableauVersion;\n },\n enumerable: true,\n configurable: true\n });\n return Environment;\n}());\nexports.Environment = Environment;\n//# sourceMappingURL=Environment.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of the external Extensions namespace.\n */\nvar Extensions = /** @class */ (function () {\n function Extensions(extensionImpl) {\n this.extensionImpl = extensionImpl;\n this.extensionImpl = extensionImpl;\n }\n Object.defineProperty(Extensions.prototype, \"dashboardContent\", {\n get: function () {\n return this.extensionImpl.dashboardContent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Extensions.prototype, \"environment\", {\n get: function () {\n return this.extensionImpl.environment;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Extensions.prototype, \"settings\", {\n get: function () {\n return this.extensionImpl.settings;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Extensions.prototype, \"ui\", {\n get: function () {\n return this.extensionImpl.ui;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Extensions.prototype, \"workbook\", {\n get: function () {\n return this.extensionImpl.workbook;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Extensions.prototype, \"dashboardObjectId\", {\n get: function () {\n return this.extensionImpl.extensionZoneId;\n },\n enumerable: true,\n configurable: true\n });\n Extensions.prototype.initializeAsync = function (contextMenuCallbacks) {\n return this.extensionImpl.initializeAsync(false, contextMenuCallbacks).then();\n };\n Extensions.prototype.initializeDialogAsync = function () {\n return this.extensionImpl.initializeAsync(true);\n };\n Extensions.prototype.createVizImageAsync = function (inputSpec) {\n return this.extensionImpl.createVizImageAsync(inputSpec);\n };\n Extensions.prototype.setClickThroughAsync = function (clickThroughEnabled) {\n return this.extensionImpl.setClickThroughAsync(clickThroughEnabled);\n };\n return Extensions;\n}());\nexports.Extensions = Extensions;\n//# sourceMappingURL=Extensions.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\n/**\n * Implementation of the external settings namespace.\n */\nvar Settings = /** @class */ (function (_super) {\n __extends(Settings, _super);\n function Settings(_settingsImpl) {\n var _this = _super.call(this) || this;\n _this._settingsImpl = _settingsImpl;\n // Initialize our event handling for this class\n _this._settingsImpl.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); });\n return _this;\n }\n Settings.prototype.erase = function (key) {\n this._settingsImpl.erase(key);\n };\n Settings.prototype.get = function (key) {\n return this._settingsImpl.get(key);\n };\n Settings.prototype.getAll = function () {\n return this._settingsImpl.getAll();\n };\n Object.defineProperty(Settings.prototype, \"isModified\", {\n get: function () {\n return this._settingsImpl.isModified;\n },\n enumerable: true,\n configurable: true\n });\n Settings.prototype.saveAsync = function () {\n return this._settingsImpl.saveAsync();\n };\n Settings.prototype.set = function (key, value) {\n this._settingsImpl.set(key, value);\n };\n return Settings;\n}(api_shared_js_1.EventListenerManager));\nexports.Settings = Settings;\n//# sourceMappingURL=Settings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of the external UI namespace.\n */\nvar UI = /** @class */ (function () {\n function UI(_impl) {\n this._impl = _impl;\n }\n UI.prototype.displayDialogAsync = function (url, payload, options) {\n return this._impl.displayDialogAsync(url, payload, options);\n };\n UI.prototype.closeDialog = function (payload) {\n this._impl.closeDialog(payload);\n };\n return UI;\n}());\nexports.UI = UI;\n//# sourceMappingURL=UI.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar WorkbookFormattingEnvUtil = /** @class */ (function () {\n function WorkbookFormattingEnvUtil() {\n }\n WorkbookFormattingEnvUtil.convertToWorkbookFormatting = function (workbookFormattingModel) {\n if (!workbookFormattingModel) {\n return undefined;\n }\n else {\n var formattingMap = workbookFormattingModel.formattingSheets.map(function (currentFormattingSheet) {\n var formattingSheet = {\n classNameKey: api_shared_js_1.InternalToExternalEnumMappings.classNameKey.convert(currentFormattingSheet.classNameKey),\n cssProperties: {\n fontFamily: currentFormattingSheet.cssProperties.fontFamily,\n fontSize: currentFormattingSheet.cssProperties.fontSize,\n fontWeight: currentFormattingSheet.cssProperties.fontWeight,\n fontStyle: currentFormattingSheet.cssProperties.fontStyle,\n textDecoration: currentFormattingSheet.cssProperties.textDecoration,\n color: currentFormattingSheet.cssProperties.color,\n },\n };\n return formattingSheet;\n });\n var result = {\n formattingSheets: formattingMap,\n };\n return result;\n }\n };\n return WorkbookFormattingEnvUtil;\n}());\nexports.WorkbookFormattingEnvUtil = WorkbookFormattingEnvUtil;\n//# sourceMappingURL=WorkbookFormattingEnvUtil.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar InitializationServiceImpl = /** @class */ (function (_super) {\n __extends(InitializationServiceImpl, _super);\n function InitializationServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(InitializationServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"InitializationService\" /* InitializationService */;\n },\n enumerable: true,\n configurable: true\n });\n InitializationServiceImpl.prototype.initializeDashboardExtensionsAsync = function (isExtensionDialog, contextMenuIds) {\n var _a;\n var params = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'initializeDashboardExtensionsAsync',\n _a[api_internal_contract_js_1.ParameterId.ExtensionContextMenuIds] = contextMenuIds,\n _a[api_internal_contract_js_1.ParameterId.IsExtensionDialog] = isExtensionDialog,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.InitializeExtension, params).then(function (response) {\n // TODO - Validate return value\n var result = response.result;\n return result;\n });\n };\n return InitializationServiceImpl;\n}(api_shared_js_1.ServiceImplBase));\nexports.InitializationServiceImpl = InitializationServiceImpl;\n//# sourceMappingURL=InitializationServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar SettingsServiceImpl = /** @class */ (function (_super) {\n __extends(SettingsServiceImpl, _super);\n function SettingsServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SettingsServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"SettingsService\" /* SettingsService */;\n },\n enumerable: true,\n configurable: true\n });\n SettingsServiceImpl.prototype.saveSettingsAsync = function (settings) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveSettingsAsync',\n _a[api_internal_contract_js_1.ParameterId.SettingsValues] = settings,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SaveExtensionSettings, parameters).then(function (value) {\n var result = value.result;\n if (!result || !result.settingsValues) {\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Unexpected error savings settings.');\n }\n return result.settingsValues;\n });\n };\n return SettingsServiceImpl;\n}(api_shared_js_1.ServiceImplBase));\nexports.SettingsServiceImpl = SettingsServiceImpl;\n//# sourceMappingURL=SettingsServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar DEFAULT_DIALOG_HEIGHT = 400; // in pixels\nvar DEFAULT_DIALOG_WIDTH = 600; // in pixels\nvar DEFAULT_DIALOG_STYLE = api_external_contract_js_1.DialogStyle.Window;\nvar UIServiceImpl = /** @class */ (function (_super) {\n __extends(UIServiceImpl, _super);\n function UIServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(UIServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"UIService\" /* UIService */;\n },\n enumerable: true,\n configurable: true\n });\n UIServiceImpl.prototype.displayDialogAsync = function (url, payload, options) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'displayDialogAsync',\n _a[api_internal_contract_js_1.ParameterId.ExtensionDialogUrl] = url,\n _a[api_internal_contract_js_1.ParameterId.ExtensionDialogPayload] = payload,\n _a);\n var h = options && options.height ? options.height : DEFAULT_DIALOG_HEIGHT;\n var w = options && options.width ? options.width : DEFAULT_DIALOG_WIDTH;\n var dialogStyle = options && options.dialogStyle ? options.dialogStyle : DEFAULT_DIALOG_STYLE;\n // On the platform side, we do something reasonable regardess of whether the passed\n // height and width are too large or too small. But this likely indicates a developer error,\n // so we throw an error here to help with debugging.\n if (h <= 0 || w <= 0) {\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'Size parameters for displayDialogAsync must be positive');\n }\n parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogH] = h;\n parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogW] = w;\n api_shared_js_1.ErrorHelpers.verifyEnumValue(dialogStyle, api_external_contract_js_1.DialogStyle, 'DialogStyle');\n parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogStyle] = api_shared_js_1.ExternalToInternalEnumMappings.dialogStyles.convert(dialogStyle);\n return this.execute(api_internal_contract_js_1.VerbId.DisplayDialog, parameters).then(function (response) {\n var dialogResult = response.result;\n switch (dialogResult) {\n case api_internal_contract_js_1.ExtensionDialogResult.DialogAlreadyOpen:\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.DialogAlreadyOpen, 'There already exists an open dialog for this extension.');\n case api_internal_contract_js_1.ExtensionDialogResult.InvalidDomain:\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidDomainDialog, 'The url of an extension dialog must match the domain of the parent extension.');\n default:\n // Success case\n return;\n }\n });\n };\n UIServiceImpl.prototype.closeDialog = function (payload) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'closeDialog',\n _a);\n if (payload) {\n parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogPayload] = payload;\n }\n return this.execute(api_internal_contract_js_1.VerbId.CloseDialog, parameters).then(function () {\n return;\n });\n };\n UIServiceImpl.prototype.setClickThroughAsync = function (clickThroughEnabled, extensionZoneId) {\n var _a;\n api_shared_js_1.ErrorHelpers.verifyParameterType(clickThroughEnabled, 'boolean', 'clickThroughEnabled');\n if (extensionZoneId === undefined || extensionZoneId <= 0) {\n throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Extension Id is invalid.');\n }\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.ExtensionZoneId] = extensionZoneId,\n _a[api_internal_contract_js_1.ParameterId.ClickThroughEnabled] = clickThroughEnabled,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SetClickThrough, parameters).then(function () {\n return;\n });\n };\n return UIServiceImpl;\n}(api_shared_js_1.ServiceImplBase));\nexports.UIServiceImpl = UIServiceImpl;\n//# sourceMappingURL=UIServiceImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nvar InitializationServiceImpl_1 = require(\"./Impl/InitializationServiceImpl\");\nvar SettingsServiceImpl_1 = require(\"./Impl/SettingsServiceImpl\");\nvar UIServiceImpl_1 = require(\"./Impl/UIServiceImpl\");\nvar ServiceRegistryUtil_1 = require(\"./ServiceRegistryUtil\");\nfunction registerAllExtensionsServices(dispatcher) {\n api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new SettingsServiceImpl_1.SettingsServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId));\n api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new UIServiceImpl_1.UIServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId));\n}\nexports.registerAllExtensionsServices = registerAllExtensionsServices;\nfunction registerInitializationExtensionsServices(dispatcher) {\n api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new InitializationServiceImpl_1.InitializationServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId));\n}\nexports.registerInitializationExtensionsServices = registerInitializationExtensionsServices;\n//# sourceMappingURL=RegisterAllExtensionsServices.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ExtensionsRegistryId = 0;\n//# sourceMappingURL=ServiceRegistryUtil.js.map","\"use strict\";\n// This file re-exports everything which is part of the extensions api public interface\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./ExternalContract/Embedding/AskDataInterfaces\"));\nvar Enums_1 = require(\"./ExternalContract/Embedding/Enums\");\nexports.ApiMenuType = Enums_1.ApiMenuType;\nexports.DeviceType = Enums_1.DeviceType;\nexports.EmbeddingErrorCodes = Enums_1.EmbeddingErrorCodes;\nexports.SheetSizeBehavior = Enums_1.SheetSizeBehavior;\nexports.TableauDialogType = Enums_1.TableauDialogType;\nexports.EmbeddingTableauEventType = Enums_1.TableauEventType;\nexports.Toolbar = Enums_1.Toolbar;\n__export(require(\"./ExternalContract/Embedding/VizInterfaces\"));\n__export(require(\"./ExternalContract/Embedding/WebComponentInterfaces\"));\n__export(require(\"./SharedApiExternalContract\"));\n//# sourceMappingURL=EmbeddingApiExternalContract.js.map","\"use strict\";\n// This file re-exports everything which is part of the extensions api public interface\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Tableau_1 = require(\"./ExternalContract/Extensions/Namespaces/Tableau\");\nexports.ErrorCodes = Tableau_1.ErrorCodes;\nexports.ExtensionContext = Tableau_1.ExtensionContext;\nexports.ExtensionMode = Tableau_1.ExtensionMode;\nexports.TableauEventType = Tableau_1.TableauEventType;\nexports.VizImageEncodingType = Tableau_1.VizImageEncodingType;\nexports.VizImagePaletteType = Tableau_1.VizImagePaletteType;\nexports.VizImageSizeSettingAlignmentType = Tableau_1.VizImageSizeSettingAlignmentType;\nexports.VizImageSizeSettingType = Tableau_1.VizImageSizeSettingType;\nexports.VizImageSortDirectionType = Tableau_1.VizImageSortDirectionType;\n__export(require(\"./SharedApiExternalContract\"));\n//# sourceMappingURL=ExtensionsApiExternalContract.js.map","\"use strict\";\n/**\n * This is your main. This is where you re-export everything you want to be publicly available.\n *\n * The build enforces that the file has the same name as the global variable that is exported.\n */\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./EmbeddingApiExternalContract\"));\n__export(require(\"./ExtensionsApiExternalContract\"));\n//# sourceMappingURL=ExternalContract.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The names of the string constants you can use as HTML attributes for the web component.\n * @ignore\n */\nvar AskDataAttributes;\n(function (AskDataAttributes) {\n AskDataAttributes[\"Origin\"] = \"origin\";\n AskDataAttributes[\"ShowEmbed\"] = \"showEmbed\";\n AskDataAttributes[\"ShowPin\"] = \"showPin\";\n AskDataAttributes[\"ShowSave\"] = \"showSave\";\n AskDataAttributes[\"ShowShare\"] = \"showShare\";\n})(AskDataAttributes = exports.AskDataAttributes || (exports.AskDataAttributes = {}));\n//# sourceMappingURL=AskDataInterfaces.js.map","\"use strict\";\n// All enum values made available to Embedding developers.\n// Enums should be kept in alphabetical order.\n// Most of them should match an enum on the server defined at\n// workgroup/vqlweb/scriptsharp/src/ApiShared/PublicEnums.cs#L398:17\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Device types available to use with {@link Viz.device}\n */\nvar DeviceType;\n(function (DeviceType) {\n DeviceType[\"Default\"] = \"default\";\n DeviceType[\"Desktop\"] = \"desktop\";\n DeviceType[\"Tablet\"] = \"tablet\";\n DeviceType[\"Phone\"] = \"phone\";\n})(DeviceType = exports.DeviceType || (exports.DeviceType = {}));\n/**\n * All error codes used by the Embedding API.\n */\nvar EmbeddingErrorCodes;\n(function (EmbeddingErrorCodes) {\n /**\n * The browser is not capable of supporting the Tableau Embedding API\n */\n EmbeddingErrorCodes[\"BrowserNotCapable\"] = \"browser-not-capable\";\n /**\n * The permissions on a workbook or a view do not allow downloading the workbook.\n */\n EmbeddingErrorCodes[\"DownloadWorkbookNotAllowed\"] = \"download-workbook-not-allowed\";\n /**\n * Thrown when an error occurs while attempting to perform a filter operation.\n */\n EmbeddingErrorCodes[\"FilterCannotBePerformed\"] = \"filter-cannot-be-performed\";\n /**\n * Thrown when attempting to switch to a sheet by index that does not exist in the workbook.\n */\n EmbeddingErrorCodes[\"IndexOutOfRange\"] = \"index-out-of-range\";\n /**\n * Thrown when an error occurs within the Tableau Embedding API. Contact Tableau Support.\n */\n EmbeddingErrorCodes[\"InternalError\"] = \"internal-error\";\n /**\n * An operation was attempted on a custom view that does not exist.\n */\n EmbeddingErrorCodes[\"InvalidCustomViewName\"] = \"invalid-custom-view-name\";\n /**\n * An invalid date was specified in a method that required a date parameter.\n */\n EmbeddingErrorCodes[\"InvalidDateParameter\"] = \"invalid-date-parameter\";\n /**\n * Either a filter operation was attempted on a field that does not exist in the data source, or the value supplied\n * in the filter operation is the wrong data type or format.\n */\n EmbeddingErrorCodes[\"invalidFilterFieldNameOrValue\"] = \"invalid-filter-field-name\";\n /**\n * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message\n * field.\n */\n EmbeddingErrorCodes[\"InvalidParameter\"] = \"invalid-parameter\";\n /**\n * A negative size was specified or the maxSize value is less than minSize in Sheet.changeSizeAsync().\n */\n EmbeddingErrorCodes[\"InvalidSize\"] = \"invalid-size\";\n /**\n * A behavior value was found that is not included in the SheetSizeBehavior enum.\n */\n EmbeddingErrorCodes[\"InvalidSizeBehavior\"] = \"invalid-size-behavior\";\n /**\n * A behavior other than SheetSizeBehavior.Automatic was specified in Sheet.changeSizeAsync() when the sheet is a\n * Worksheet instance.\n */\n EmbeddingErrorCodes[\"InvalidSizeBehaviorOnWorksheet\"] = \"invalid-size-behavior-on-worksheet\";\n /**\n * The URL specified in the Viz class constructor is not valid.\n */\n EmbeddingErrorCodes[\"InvalidUrl\"] = \"invalid-url\";\n /**\n * The maxSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.AtMost.\n */\n EmbeddingErrorCodes[\"MissingMaxSize\"] = \"missing-max-size\";\n /**\n * The minSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.AtLeast.\n */\n EmbeddingErrorCodes[\"MissingMinSize\"] = \"missing-min-size\";\n /**\n * The minSize or maxSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.Range.\n */\n EmbeddingErrorCodes[\"MissingMinMaxSize\"] = \"missing-min-max-size\";\n /**\n * Can occur if the embedding app interacts with a parameter that has been removed from the worksheet.\n */\n EmbeddingErrorCodes[\"MissingParameter\"] = \"missing-parameter\";\n /**\n * The rangeN field is missing for a relative date filter of type LASTN or NEXTN.\n */\n EmbeddingErrorCodes[\"MissingRangeNForRelativeDateFilters\"] = \"missing-range-n-for-relative-date-filters\";\n /**\n * An attempt was made to access Sheet.getUrl() on a hidden sheet. Hidden sheets do not have URLs.\n */\n EmbeddingErrorCodes[\"NoUrlForHiddenWorksheet\"] = \"no-url-for-hidden-worksheet\";\n /**\n * One or both of the parentElement or the URL parameters is not specified in the Viz constructor.\n */\n EmbeddingErrorCodes[\"NoUrlOrParentElementNotFound\"] = \"no-url-or-parent-element-not-found\";\n /**\n * An operation was attempted on a sheet that is not active or embedded within the active dashboard.\n */\n EmbeddingErrorCodes[\"NotActiveSheet\"] = \"not-active-sheet\";\n /**\n * A required parameter was not specified, null, or an empty string/array.\n */\n EmbeddingErrorCodes[\"NullOrEmptyParameter\"] = \"null-or-empty-parameter\";\n /**\n * An operation was attempted on a sheet that does not exist in the workbook.\n */\n EmbeddingErrorCodes[\"SheetNotInWorkbook\"] = \"sheet-not-in-workbook\";\n /**\n * An operation is performed on a CustomView object that is no longer valid (it has been removed).\n */\n EmbeddingErrorCodes[\"StaleDataReference\"] = \"stale-data-reference\";\n /**\n * An unknown event name was specified in the call to Viz.addEventListener or Viz.removeEventListener.\n */\n EmbeddingErrorCodes[\"UnsupportedEventName\"] = \"unsupported-event-name\";\n /**\n * A Viz object has already been created as a child of the parentElement specified in the Viz constructor.\n */\n EmbeddingErrorCodes[\"VizAlreadyInManager\"] = \"viz-already-in-manager\";\n /**\n * Function is not supported in the embedding api.\n */\n EmbeddingErrorCodes[\"ImplementationError\"] = \"wrong-implementation\";\n /**\n * @NotImplemented\n */\n EmbeddingErrorCodes[\"NotImplemented\"] = \"not-implemented\";\n /**\n * Unknown error during event initialization\n */\n EmbeddingErrorCodes[\"EventInitializationError\"] = \"event-initialization-error\";\n /**\n * Version of the embedding api not supported by the version of tableau\n */\n EmbeddingErrorCodes[\"IncompatibleVersionError\"] = \"incompatible-version-error\";\n /**\n * Unknown {@link TableauDialogType} passed in to Viz.displayDialogAsync.\n */\n EmbeddingErrorCodes[\"UnknownDialogType\"] = \"unknown-dialog-type\";\n /**\n * Can occur if the API interacts with a filter that has been removed from the worksheet.\n * Can also occurs if a {@link FilterType} has not been implemented.\n */\n EmbeddingErrorCodes[\"FilterMissingOrNotImplemented\"] = \"filter-missing-not-implemented\";\n /**\n * Can occur if story point ids no longer match.\n */\n EmbeddingErrorCodes[\"StoryPointIdMismatch\"] = \"storypoint-id-mismatch\";\n})(EmbeddingErrorCodes = exports.EmbeddingErrorCodes || (exports.EmbeddingErrorCodes = {}));\n/**\n * Formats available to use with displayStaticImage in @VizInterfaces\n */\nvar FileFormats;\n(function (FileFormats) {\n FileFormats[\"PDF\"] = \"pdf\";\n FileFormats[\"PNG\"] = \"png\";\n})(FileFormats = exports.FileFormats || (exports.FileFormats = {}));\nvar RevertVizSelection;\n(function (RevertVizSelection) {\n RevertVizSelection[\"All\"] = \"all\";\n RevertVizSelection[\"Axes\"] = \"axes\";\n RevertVizSelection[\"Filters\"] = \"filters\";\n RevertVizSelection[\"Sorts\"] = \"sorts\";\n RevertVizSelection[\"Shelves\"] = \"shelves\";\n})(RevertVizSelection = exports.RevertVizSelection || (exports.RevertVizSelection = {}));\nvar ToolbarButtons;\n(function (ToolbarButtons) {\n ToolbarButtons[\"Alerts\"] = \"alerts\";\n ToolbarButtons[\"AskData\"] = \"askData\";\n ToolbarButtons[\"CustomViews\"] = \"customViews\";\n ToolbarButtons[\"DataDetails\"] = \"dataDetails\";\n ToolbarButtons[\"Share\"] = \"share\";\n ToolbarButtons[\"Subscribe\"] = \"subscribe\";\n})(ToolbarButtons = exports.ToolbarButtons || (exports.ToolbarButtons = {}));\nvar Toolbar;\n(function (Toolbar) {\n Toolbar[\"Top\"] = \"top\";\n Toolbar[\"Bottom\"] = \"bottom\";\n Toolbar[\"Hidden\"] = \"hidden\";\n})(Toolbar = exports.Toolbar || (exports.Toolbar = {}));\nvar SheetSizeBehavior;\n(function (SheetSizeBehavior) {\n SheetSizeBehavior[\"Automatic\"] = \"automatic\";\n SheetSizeBehavior[\"Exactly\"] = \"exactly\";\n SheetSizeBehavior[\"Range\"] = \"range\";\n SheetSizeBehavior[\"AtLeast\"] = \"atleast\";\n SheetSizeBehavior[\"AtMost\"] = \"atmost\";\n})(SheetSizeBehavior = exports.SheetSizeBehavior || (exports.SheetSizeBehavior = {}));\n/**\n * Be careful when adding new event types. Extensions and embedding follow two different patterns on how events are named.\n * Events should be all lower case and without hyphens or underscores.\n */\n/**\n * Represents the type of tableau embedding event that can be listened for.\n */\nvar TableauEventType;\n(function (TableauEventType) {\n /**\n * Raised when a custom view has finished loading. This event is raised after the callback function for {@link FirstInteractive} (if any) has been called.\n *\n * @category Viewing\n */\n TableauEventType[\"CustomViewLoaded\"] = \"customviewloaded\";\n /**\n * Raised when a custom view has been removed.\n *\n * @category Viewing\n */\n TableauEventType[\"CustomViewRemoved\"] = \"customviewremoved\";\n /**\n * Raised when a custom view has been saved (newly created or updated).\n *\n * @category Viewing\n */\n TableauEventType[\"CustomViewSaved\"] = \"customviewsaved\";\n /**\n * Raised when a custom view has been set as the default view for a workbook.\n *\n * @category Viewing\n */\n TableauEventType[\"CustomViewSetDefault\"] = \"customviewsetdefault\";\n /** Raised when the user clicks on the Edit Button.\n *\n * @category Viewing\n */\n TableauEventType[\"EditButtonClicked\"] = \"editbuttonclicked\";\n /** Raised when the user clicks on the Edit In Desktop Button.\n *\n * @category Authoring, Viewing\n */\n TableauEventType[\"EditInDesktopButtonClicked\"] = \"editindesktopbuttonclicked\";\n /** Raised when any filter has changed state. You can use this event type with TableauViz objects.\n *\n * @category Viewing\n */\n TableauEventType[\"FilterChanged\"] = \"filterchanged\";\n /** Fired when viz size is known\n *\n * @category Authoring, Viewing\n */\n TableauEventType[\"FirstVizSizeKnown\"] = \"firstvizsizeknown\";\n /** Fired when a viz first becomes interactive\n *\n * @category Authoring, Viewing\n */\n TableauEventType[\"FirstInteractive\"] = \"firstinteractive\";\n /** Raised when a custom mark context menu is clicked.\n *\n * @category Viewing\n */\n TableauEventType[\"CustomMarkContextMenuEvent\"] = \"custommarkcontextmenu\";\n /** The selected marks on a visualization have changed. You can use this event type with TableauViz objects.\n *\n * @category Viewing\n */\n TableauEventType[\"MarkSelectionChanged\"] = \"markselectionchanged\";\n /** A parameter has had its value modified. You can use this event type with [[Parameter]] objects.\n *\n * @category Viewing\n */\n TableauEventType[\"ParameterChanged\"] = \"parameterchanged\";\n /** Raised when a toolbar button or control becomes available or becomes unavailable.\n *\n * @category Viewing\n */\n TableauEventType[\"ToolbarStateChanged\"] = \"toolbarstatechanged\";\n /** Raised when the workbook is ready to close. This notification is sent when using embedded web authoring functionality.\n *\n * @category Authoring\n */\n TableauEventType[\"WorkbookReadyToClose\"] = \"workbookreadytoclose\";\n /** Raised when the workbook has been published. This notification is sent when using embedded web authoring functionality.\n *\n * @category Authoring\n */\n TableauEventType[\"WorkbookPublished\"] = \"workbookpublished\";\n /** Raised when \"publish as\" is successful. This notification is sent when using embedded web authoring functionality.\n *\n * @category Authoring\n */\n TableauEventType[\"WorkbookPublishedAs\"] = \"workbookpublishedas\";\n /**\n * Raised when a URL action occurs. See the {@link UrlActionEvent} class.\n *\n * @category Viewing\n */\n TableauEventType[\"UrlAction\"] = \"urlaction\";\n /**\n * Raised after a tab switch occurs (the active sheet has changed). Guarantees the viz object will be interactive after this.\n *\n * @category Viewing\n */\n TableauEventType[\"TabSwitched\"] = \"tabswitched\";\n /**\n *\n * Raised after a new story point becomes active.\n *\n * @category Viewing\n */\n TableauEventType[\"StoryPointSwitched\"] = \"storypointswitched\";\n})(TableauEventType = exports.TableauEventType || (exports.TableauEventType = {}));\n/**\n * Represents the location of a context menu where users can add external menu items.\n */\nvar ApiMenuType;\n(function (ApiMenuType) {\n /** External menu item will be injected in ubertip dialog */\n ApiMenuType[\"Ubertip\"] = \"ubertip\";\n})(ApiMenuType = exports.ApiMenuType || (exports.ApiMenuType = {}));\n/** You can use this type with a {@link Viz} object. */\nvar TableauDialogType;\n(function (TableauDialogType) {\n /**\n * Used to display the download PDF dialog.\n */\n TableauDialogType[\"ExportPDF\"] = \"export-pdf\";\n /**\n * Used to display the download PowerPoint dialog.\n */\n TableauDialogType[\"ExportPowerPoint\"] = \"export-powerpoint\";\n /**\n * Used to display the download Data dialog.\n */\n TableauDialogType[\"ExportData\"] = \"export-data\";\n /**\n * Used to display the download CrossTab dialog.\n */\n TableauDialogType[\"ExportCrossTab\"] = \"export-cross-tab\";\n /**\n * Used to display the download Workbook dialog.\n */\n TableauDialogType[\"ExportWorkbook\"] = \"export-workbook\";\n /**\n * Used to display the Share dialog.\n */\n TableauDialogType[\"Share\"] = \"share\";\n})(TableauDialogType = exports.TableauDialogType || (exports.TableauDialogType = {}));\n//# sourceMappingURL=Enums.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The shared string constants you can use as HTML attributes for the and web component.\n * @ignore\n */\nvar VizSharedAttributes;\n(function (VizSharedAttributes) {\n VizSharedAttributes[\"TouchOptimize\"] = \"touch-optimize\";\n VizSharedAttributes[\"HideEditInDesktopButton\"] = \"hide-edit-in-desktop-button\";\n VizSharedAttributes[\"SuppressDefaultEditBehavior\"] = \"suppress-default-edit-behavior\";\n VizSharedAttributes[\"DisableVersionCheck\"] = \"disable-version-check\";\n VizSharedAttributes[\"OnEditInDesktopButtonClicked\"] = \"onEditInDesktopButtonClicked\";\n VizSharedAttributes[\"OnFirstVizSizeKnown\"] = \"onFirstVizSizeKnown\";\n VizSharedAttributes[\"OnFirstInteractive\"] = \"onFirstInteractive\";\n})(VizSharedAttributes = exports.VizSharedAttributes || (exports.VizSharedAttributes = {}));\n/**\n * The names of the string constants you can use as HTML attributes for the web component.\n * @ignore\n */\nvar VizAttributes;\n(function (VizAttributes) {\n VizAttributes[\"DisableUrlActionsPopups\"] = \"disable-url-actions\";\n VizAttributes[\"HideTabs\"] = \"hide-tabs\";\n VizAttributes[\"Toolbar\"] = \"toolbar\";\n VizAttributes[\"InstanceIdToClone\"] = \"instance-id-to-clone\";\n VizAttributes[\"Device\"] = \"device\";\n VizAttributes[\"HideEditButton\"] = \"hide-edit-button\";\n VizAttributes[\"OnEditButtonClicked\"] = \"onEditButtonClicked\";\n VizAttributes[\"OnFilterChanged\"] = \"onFilterChanged\";\n VizAttributes[\"OnCustomMarkContextMenuEvent\"] = \"onCustomMarkContextMenuEvent\";\n VizAttributes[\"OnMarkSelectionChanged\"] = \"onMarkSelectionChanged\";\n VizAttributes[\"OnParameterChanged\"] = \"onParameterChanged\";\n VizAttributes[\"OnToolbarStateChanged\"] = \"onToolbarStateChanged\";\n VizAttributes[\"OnUrlAction\"] = \"onUrlAction\";\n VizAttributes[\"OnTabSwitched\"] = \"onTabSwitched\";\n VizAttributes[\"OnCustomViewLoaded\"] = \"onCustomViewLoaded\";\n VizAttributes[\"OnCustomViewRemoved\"] = \"onCustomViewRemoved\";\n VizAttributes[\"OnCustomViewSaved\"] = \"onCustomViewSaved\";\n VizAttributes[\"OnCustomViewSetDefault\"] = \"onCustomViewSetDefault\";\n VizAttributes[\"OnStoryPointSwitched\"] = \"onStoryPointSwitched\";\n})(VizAttributes = exports.VizAttributes || (exports.VizAttributes = {}));\n/**\n * The names of the string constants you can use as HTML attributes for the web component.\n * @ignore\n */\nvar VizAuthoringAttributes;\n(function (VizAuthoringAttributes) {\n VizAuthoringAttributes[\"OnWorkbookPublished\"] = \"onWorkbookPublished\";\n VizAuthoringAttributes[\"OnWorkbookPublishedAs\"] = \"onWorkbookPublishedAs\";\n VizAuthoringAttributes[\"OnWorkbookReadyToClose\"] = \"onWorkbookReadyToClose\";\n VizAuthoringAttributes[\"HideCloseButton\"] = \"hide-close-button\";\n})(VizAuthoringAttributes = exports.VizAuthoringAttributes || (exports.VizAuthoringAttributes = {}));\n/**\n * The names of the string constants you can use as child tags for TableauViz and TableauAuthoringViz custom elements.\n */\nvar VizChildElements;\n(function (VizChildElements) {\n /**\n * Contains a list of filter parameters. Available only in viewing mode.\n */\n VizChildElements[\"VizFilter\"] = \"viz-filter\";\n /**\n * Contains a name and value for a parameter. Available only in viewing mode.\n */\n VizChildElements[\"VizParameter\"] = \"viz-parameter\";\n /**\n * Contains a list of custom parameters. Available in both viewing and authoring modes.\n */\n VizChildElements[\"CustomParameter\"] = \"custom-parameter\";\n})(VizChildElements = exports.VizChildElements || (exports.VizChildElements = {}));\nvar VizChildElementAttributes;\n(function (VizChildElementAttributes) {\n VizChildElementAttributes[\"Field\"] = \"field\";\n VizChildElementAttributes[\"Value\"] = \"value\";\n VizChildElementAttributes[\"Name\"] = \"name\";\n})(VizChildElementAttributes = exports.VizChildElementAttributes || (exports.VizChildElementAttributes = {}));\n//# sourceMappingURL=VizInterfaces.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The names of the common string constants you can use as HTML attributes for the tableau web component.\n * @ignore\n */\nvar WebComponentAttributes;\n(function (WebComponentAttributes) {\n WebComponentAttributes[\"Src\"] = \"src\";\n WebComponentAttributes[\"Width\"] = \"width\";\n WebComponentAttributes[\"Height\"] = \"height\";\n WebComponentAttributes[\"Token\"] = \"token\";\n WebComponentAttributes[\"Debug\"] = \"debug\";\n})(WebComponentAttributes = exports.WebComponentAttributes || (exports.WebComponentAttributes = {}));\n/**\n * The names of the string constants you can use as child tags for TableauViz, TableauAuthoringViz and TableauAskData custom elements.\n * @ignore\n */\nvar WebComponentChildElements;\n(function (WebComponentChildElements) {\n /**\n * Contains a list of custom parameters. Available in viz viewing, viz authoring and askdata.\n */\n WebComponentChildElements[\"CustomParameter\"] = \"custom-parameter\";\n})(WebComponentChildElements = exports.WebComponentChildElements || (exports.WebComponentChildElements = {}));\nvar WebComponentChildElementAttributes;\n(function (WebComponentChildElementAttributes) {\n WebComponentChildElementAttributes[\"Field\"] = \"field\";\n WebComponentChildElementAttributes[\"Value\"] = \"value\";\n WebComponentChildElementAttributes[\"Name\"] = \"name\";\n})(WebComponentChildElementAttributes = exports.WebComponentChildElementAttributes || (exports.WebComponentChildElementAttributes = {}));\n//# sourceMappingURL=WebComponentInterfaces.js.map","\"use strict\";\n// All enum values made available to Extensions developers.\n// Enums should be kept in alphabetical order.\nvar Tableau;\n(function (Tableau) {\n /**\n * All error codes used by the Extensions API.\n */\n var ErrorCodes;\n (function (ErrorCodes) {\n /**\n * Thrown when caller attempts to execute command before initialization has completed.\n */\n ErrorCodes[\"APINotInitialized\"] = \"api-not-initialized\";\n /**\n * Thrown when caller attempts to execute command while extension is not visible.\n */\n ErrorCodes[\"VisibilityError\"] = \"visibility-error\";\n /**\n * Only one dialog can be opened at time with the UI namespace functionality.\n */\n ErrorCodes[\"DialogAlreadyOpen\"] = \"dialog-already-open\";\n /**\n * The open dialog was closed by the user.\n */\n ErrorCodes[\"DialogClosedByUser\"] = \"dialog-closed-by-user\";\n /**\n * An error occurred within the Tableau Extensions API. Contact Tableau Support.\n */\n ErrorCodes[\"InternalError\"] = \"internal-error\";\n /**\n * A dialog must start on the same domain as the parent extenion.\n */\n ErrorCodes[\"InvalidDomainDialog\"] = \"invalid-dialog-domain\";\n /**\n * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message field.\n */\n ErrorCodes[\"InvalidParameter\"] = \"invalid-parameter\";\n /**\n * Can occur if the extension interacts with a filter that has been removed from the worksheet.\n */\n ErrorCodes[\"MissingFilter\"] = \"missing-filter\";\n /**\n * Can occur if the extension interacts with a parameter that has been removed from the worksheet.\n */\n ErrorCodes[\"MissingParameter\"] = \"missing-parameter\";\n /**\n * Internal Server Error\n */\n ErrorCodes[\"ServerError\"] = \"server-error\";\n /**\n * Developer cannot save settings while another save is still in progress.\n */\n ErrorCodes[\"SettingSaveInProgress\"] = \"setting-save-in-progress\";\n /**\n * An unknown event name was specified in the call to `addEventListener` or `removeEventListener`.\n */\n ErrorCodes[\"UnsupportedEventName\"] = \"unsupported-event-name\";\n /**\n * A method was used for a type of data source that doesn't support that method (see getActiveTablesAsync for an example)\n */\n ErrorCodes[\"UnsupportedMethodForDataSourceType\"] = \"unsupported-method-for-data-source-type\";\n })(ErrorCodes = Tableau.ErrorCodes || (Tableau.ErrorCodes = {}));\n /**\n * The context in which the Extensions is currently running.\n */\n var ExtensionContext;\n (function (ExtensionContext) {\n ExtensionContext[\"Desktop\"] = \"desktop\";\n ExtensionContext[\"Server\"] = \"server\";\n })(ExtensionContext = Tableau.ExtensionContext || (Tableau.ExtensionContext = {}));\n /**\n * The mode in which the Extensions is currently running.\n */\n var ExtensionMode;\n (function (ExtensionMode) {\n ExtensionMode[\"Authoring\"] = \"authoring\";\n ExtensionMode[\"Viewing\"] = \"viewing\";\n })(ExtensionMode = Tableau.ExtensionMode || (Tableau.ExtensionMode = {}));\n /**\n * Represents the type of event that can be listened for.\n */\n var TableauEventType;\n (function (TableauEventType) {\n /** Raised when any filter has changed state. You can use this event type with [Worksheet](../interfaces/worksheet.html) objects.*/\n TableauEventType[\"FilterChanged\"] = \"filter-changed\";\n /** The selected marks on a visualization has changed.\n * You can use this event type with [Worksheet](../interfaces/worksheet.html) objects. */\n TableauEventType[\"MarkSelectionChanged\"] = \"mark-selection-changed\";\n /** A parameter has had its value modified. You can use this event type with [[Parameter]] objects. */\n TableauEventType[\"ParameterChanged\"] = \"parameter-changed\";\n /** Settings have been changed for this extension. You can use this event type with [[Settings]] objects. */\n TableauEventType[\"SettingsChanged\"] = \"settings-changed\";\n /** The dashboard layout has changed */\n TableauEventType[\"DashboardLayoutChanged\"] = \"dashboard-layout-changed\";\n /** The workbook formatting has changed */\n TableauEventType[\"WorkbookFormattingChanged\"] = \"workbook-formatting-changed\";\n })(TableauEventType = Tableau.TableauEventType || (Tableau.TableauEventType = {}));\n /**\n * Enum that represents the data type of encodings for createVizImageAsync.\n * @since 1.6.0\n */\n var VizImageEncodingType;\n (function (VizImageEncodingType) {\n VizImageEncodingType[\"Discrete\"] = \"discrete\";\n VizImageEncodingType[\"Continuous\"] = \"continuous\";\n })(VizImageEncodingType = Tableau.VizImageEncodingType || (Tableau.VizImageEncodingType = {}));\n /**\n * Enum that represents the sort direction for createVizImageAsync.\n * @since 1.8.0 and Tableau 2021.4\n */\n var VizImageSortDirectionType;\n (function (VizImageSortDirectionType) {\n VizImageSortDirectionType[\"Ascending\"] = \"ascending\";\n VizImageSortDirectionType[\"Descending\"] = \"descending\";\n })(VizImageSortDirectionType = Tableau.VizImageSortDirectionType || (Tableau.VizImageSortDirectionType = {}));\n /**\n * Enum that represents the palette type for createVizImageAsync.\n * @since 1.8.0 and Tableau 2021.4\n */\n var VizImagePaletteType;\n (function (VizImagePaletteType) {\n VizImagePaletteType[\"CustomDiverging\"] = \"custom-diverging\";\n VizImagePaletteType[\"CustomSequential\"] = \"custom-sequential\";\n })(VizImagePaletteType = Tableau.VizImagePaletteType || (Tableau.VizImagePaletteType = {}));\n /**\n * Enum that represents the Size Setting type for createVizImageAsync.\n * @since 1.8.0 and Tableau 2021.4\n */\n var VizImageSizeSettingType;\n (function (VizImageSizeSettingType) {\n VizImageSizeSettingType[\"Fixed\"] = \"fixed\";\n VizImageSizeSettingType[\"Manual\"] = \"manual\";\n })(VizImageSizeSettingType = Tableau.VizImageSizeSettingType || (Tableau.VizImageSizeSettingType = {}));\n /**\n * Enum that represents the Size Setting alignment type for createVizImageAsync.\n * @since 1.8.0 and Tableau 2021.4\n */\n var VizImageSizeSettingAlignmentType;\n (function (VizImageSizeSettingAlignmentType) {\n VizImageSizeSettingAlignmentType[\"Right\"] = \"right\";\n VizImageSizeSettingAlignmentType[\"Left\"] = \"left\";\n VizImageSizeSettingAlignmentType[\"Center\"] = \"center\";\n })(VizImageSizeSettingAlignmentType = Tableau.VizImageSizeSettingAlignmentType || (Tableau.VizImageSizeSettingAlignmentType = {}));\n})(Tableau || (Tableau = {}));\nmodule.exports = Tableau;\n//# sourceMappingURL=Tableau.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar SharedErrorCodes;\n(function (SharedErrorCodes) {\n /**\n * An invalid aggregation was specified for the filter, such as setting a range filter to \"SUM(Sales)\" instead of\n * \"Sales\".\n */\n SharedErrorCodes[\"InvalidAggregationFieldName\"] = \"invalid-aggregation-field-name\";\n /**\n * A filter operation was attempted on a field that does not exist in the data source.\n */\n SharedErrorCodes[\"InvalidFilterFieldName\"] = \"invalid-filter-name\";\n /**\n * A filter operation was attempted using a value that is the wrong data type or format.\n */\n SharedErrorCodes[\"InvalidFilterFieldValue\"] = \"invalid-filter-fieldValue\";\n /**\n * An invalid date value was specified in a Sheet.selectMarksAsync() call for a date field.\n */\n SharedErrorCodes[\"InvalidSelectionDate\"] = \"invalid-selection-date\";\n /**\n * A field was specified in a Sheet.selectMarksAsync() call that does not exist in the data source.\n */\n SharedErrorCodes[\"InvalidSelectionFieldName\"] = \"invalid-selection-fieldName\";\n /**\n * An invalid value was specified in a Sheet.selectMarksAsync() call.\n */\n SharedErrorCodes[\"InvalidSelectionValue\"] = \"invalid-selection-value\";\n /**\n * An error occurred within the Tableau API. Contact Tableau Support.\n */\n SharedErrorCodes[\"InternalError\"] = \"internal-error\";\n /**\n * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message field.\n */\n SharedErrorCodes[\"InvalidParameter\"] = \"invalid-parameter\";\n /**\n * An operation was attempted on a sheet that is not active or embedded within the active dashboard.\n */\n SharedErrorCodes[\"NotActiveSheet\"] = \"not-active-sheet\";\n /**\n * Property or Function is not supported within the Tableau API.\n */\n SharedErrorCodes[\"ImplementationError\"] = \"wrong-implementation\";\n /**\n * Can occur when two incompatible calls are triggered together.\n */\n SharedErrorCodes[\"ApiExecutionError\"] = \"api-execution-error\";\n /**\n * A general-purpose server error occurred. Details are contained in the Error object.\n */\n SharedErrorCodes[\"ServerError\"] = \"server-error\";\n /**\n * Can occur when an api call times out.\n */\n SharedErrorCodes[\"Timeout\"] = \"timeout\";\n})(SharedErrorCodes = exports.SharedErrorCodes || (exports.SharedErrorCodes = {}));\n//# sourceMappingURL=Enums.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n/**\n * The tableau namespace exists for organization and to avoid polluting\n * the global namespace. It contains no constructs other than sub-namespaces and the Tableau enumerations.\n */\nvar Tableau;\n(function (Tableau) {\n var AnalyticsObjectType;\n (function (AnalyticsObjectType) {\n AnalyticsObjectType[\"Cluster\"] = \"cluster\";\n AnalyticsObjectType[\"Forecast\"] = \"forecast\";\n AnalyticsObjectType[\"TrendLine\"] = \"trend-line\";\n })(AnalyticsObjectType = Tableau.AnalyticsObjectType || (Tableau.AnalyticsObjectType = {}));\n var AnnotationType;\n (function (AnnotationType) {\n AnnotationType[\"Mark\"] = \"mark\";\n AnnotationType[\"Point\"] = \"point\";\n AnnotationType[\"Area\"] = \"area\";\n })(AnnotationType = Tableau.AnnotationType || (Tableau.AnnotationType = {}));\n var ColumnType;\n (function (ColumnType) {\n ColumnType[\"Discrete\"] = \"discrete\";\n ColumnType[\"Continuous\"] = \"continuous\";\n })(ColumnType = Tableau.ColumnType || (Tableau.ColumnType = {}));\n var ClassNameKey;\n (function (ClassNameKey) {\n ClassNameKey[\"WorksheetTitle\"] = \"tableau-worksheet-title\";\n ClassNameKey[\"Worksheet\"] = \"tableau-worksheet\";\n ClassNameKey[\"Tooltip\"] = \"tableau-tooltip\";\n ClassNameKey[\"StoryTitle\"] = \"tableau-story-title\";\n ClassNameKey[\"DashboardTitle\"] = \"tableau-dashboard-title\";\n })(ClassNameKey = Tableau.ClassNameKey || (Tableau.ClassNameKey = {}));\n /**\n * What the object represents in a dashboard.\n */\n var DashboardObjectType;\n (function (DashboardObjectType) {\n DashboardObjectType[\"Blank\"] = \"blank\";\n DashboardObjectType[\"Worksheet\"] = \"worksheet\";\n DashboardObjectType[\"QuickFilter\"] = \"quick-filter\";\n DashboardObjectType[\"ParameterControl\"] = \"parameter-control\";\n DashboardObjectType[\"PageFilter\"] = \"page-filter\";\n DashboardObjectType[\"Legend\"] = \"legend\";\n DashboardObjectType[\"Title\"] = \"title\";\n DashboardObjectType[\"Text\"] = \"text\";\n DashboardObjectType[\"Image\"] = \"image\";\n DashboardObjectType[\"WebPage\"] = \"web-page\";\n DashboardObjectType[\"Extension\"] = \"extension\";\n })(DashboardObjectType = Tableau.DashboardObjectType || (Tableau.DashboardObjectType = {}));\n /**\n * Enum that represents the visibility state of a dashboard object.\n * @since 1.7.0\n */\n var DashboardObjectVisibilityType;\n (function (DashboardObjectVisibilityType) {\n /** Used for turning on the visibility of a dashboard object.*/\n DashboardObjectVisibilityType[\"Show\"] = \"show\";\n /** Used for turning off the visibility of a dashboard object.*/\n DashboardObjectVisibilityType[\"Hide\"] = \"hide\";\n })(DashboardObjectVisibilityType = Tableau.DashboardObjectVisibilityType || (Tableau.DashboardObjectVisibilityType = {}));\n /**\n * The different types of data a value can have\n */\n var DataType;\n (function (DataType) {\n DataType[\"String\"] = \"string\";\n DataType[\"Int\"] = \"int\";\n DataType[\"Float\"] = \"float\";\n DataType[\"Bool\"] = \"bool\";\n DataType[\"Date\"] = \"date\";\n DataType[\"DateTime\"] = \"date-time\";\n DataType[\"Spatial\"] = \"spatial\";\n })(DataType = Tableau.DataType || (Tableau.DataType = {}));\n /**\n * Enum that represents the changes that occur to a dashboard object.\n */\n var DashboardLayoutChange;\n (function (DashboardLayoutChange) {\n /** A dashboard object was added */\n DashboardLayoutChange[\"Added\"] = \"added\";\n /** A dashboard object was removed */\n DashboardLayoutChange[\"Removed\"] = \"removed\";\n /** A dashboard object's floating state changed */\n DashboardLayoutChange[\"IsFloatingChanged\"] = \"is-floating-changed\";\n /** A dashboard object's visibility changed */\n DashboardLayoutChange[\"IsVisibleChanged\"] = \"is-visible-changed\";\n /** A dashboard object's position changed */\n DashboardLayoutChange[\"PositionChanged\"] = \"position-changed\";\n /** A dashboard object's size changed */\n DashboardLayoutChange[\"SizeChanged\"] = \"size-changed\";\n /** A dashboard object was renamed */\n DashboardLayoutChange[\"NameChanged\"] = \"name-changed\";\n })(DashboardLayoutChange = Tableau.DashboardLayoutChange || (Tableau.DashboardLayoutChange = {}));\n /**\n * Valid date ranges for a relative date filter.\n */\n var DateRangeType;\n (function (DateRangeType) {\n DateRangeType[\"Last\"] = \"last\";\n DateRangeType[\"LastN\"] = \"last-n\";\n DateRangeType[\"Next\"] = \"next\";\n DateRangeType[\"NextN\"] = \"next-n\";\n DateRangeType[\"Current\"] = \"current\";\n DateRangeType[\"ToDate\"] = \"to-date\";\n })(DateRangeType = Tableau.DateRangeType || (Tableau.DateRangeType = {}));\n /**\n * Enum that represents the types of dialog popup styles.\n */\n var DialogStyle;\n (function (DialogStyle) {\n DialogStyle[\"Window\"] = \"window\";\n DialogStyle[\"Modal\"] = \"modal\";\n DialogStyle[\"Modeless\"] = \"modeless\";\n })(DialogStyle = Tableau.DialogStyle || (Tableau.DialogStyle = {}));\n var EncodingType;\n (function (EncodingType) {\n EncodingType[\"Column\"] = \"column\";\n EncodingType[\"Row\"] = \"row\";\n EncodingType[\"Page\"] = \"page\";\n EncodingType[\"Filter\"] = \"filter\";\n EncodingType[\"MarksType\"] = \"marks-type\";\n EncodingType[\"MeasureValues\"] = \"measure-values\";\n EncodingType[\"Color\"] = \"color\";\n EncodingType[\"Size\"] = \"size\";\n EncodingType[\"Label\"] = \"label\";\n EncodingType[\"Detail\"] = \"detail\";\n EncodingType[\"Tooltip\"] = \"tooltip\";\n EncodingType[\"Shape\"] = \"shape\";\n EncodingType[\"Path\"] = \"path\";\n EncodingType[\"Angle\"] = \"angle\";\n })(EncodingType = Tableau.EncodingType || (Tableau.EncodingType = {}));\n /**\n * Type of aggregation on a field.\n */\n var FieldAggregationType;\n (function (FieldAggregationType) {\n FieldAggregationType[\"Sum\"] = \"sum\";\n FieldAggregationType[\"Avg\"] = \"avg\";\n FieldAggregationType[\"Min\"] = \"min\";\n FieldAggregationType[\"Max\"] = \"max\";\n FieldAggregationType[\"Stdev\"] = \"stdev\";\n FieldAggregationType[\"Stdevp\"] = \"stdevp\";\n FieldAggregationType[\"Var\"] = \"var\";\n FieldAggregationType[\"Varp\"] = \"varp\";\n FieldAggregationType[\"Count\"] = \"count\";\n FieldAggregationType[\"Countd\"] = \"countd\";\n FieldAggregationType[\"Median\"] = \"median\";\n FieldAggregationType[\"Attr\"] = \"attr\";\n FieldAggregationType[\"None\"] = \"none\";\n FieldAggregationType[\"Year\"] = \"year\";\n FieldAggregationType[\"Qtr\"] = \"qtr\";\n FieldAggregationType[\"Month\"] = \"month\";\n FieldAggregationType[\"Day\"] = \"day\";\n FieldAggregationType[\"Hour\"] = \"hour\";\n FieldAggregationType[\"Minute\"] = \"minute\";\n FieldAggregationType[\"Second\"] = \"second\";\n FieldAggregationType[\"Week\"] = \"week\";\n FieldAggregationType[\"Weekday\"] = \"weekday\";\n FieldAggregationType[\"MonthYear\"] = \"month-year\";\n FieldAggregationType[\"Mdy\"] = \"mdy\";\n FieldAggregationType[\"End\"] = \"end\";\n FieldAggregationType[\"TruncYear\"] = \"trunc-year\";\n FieldAggregationType[\"TruncQtr\"] = \"trunc-qtr\";\n FieldAggregationType[\"TruncMonth\"] = \"trunc-month\";\n FieldAggregationType[\"TruncWeek\"] = \"trunc-week\";\n FieldAggregationType[\"TruncDay\"] = \"trunc-day\";\n FieldAggregationType[\"TruncHour\"] = \"trunc-hour\";\n FieldAggregationType[\"TruncMinute\"] = \"trunc-minute\";\n FieldAggregationType[\"TruncSecond\"] = \"trunc-second\";\n FieldAggregationType[\"Quart1\"] = \"quart1\";\n FieldAggregationType[\"Quart3\"] = \"quart3\";\n FieldAggregationType[\"Skewness\"] = \"skewness\";\n FieldAggregationType[\"Kurtosis\"] = \"kurtosis\";\n FieldAggregationType[\"InOut\"] = \"in-out\";\n FieldAggregationType[\"User\"] = \"user\";\n })(FieldAggregationType = Tableau.FieldAggregationType || (Tableau.FieldAggregationType = {}));\n /**\n * Role of a field.\n */\n var FieldRoleType;\n (function (FieldRoleType) {\n FieldRoleType[\"Dimension\"] = \"dimension\";\n FieldRoleType[\"Measure\"] = \"measure\";\n FieldRoleType[\"Unknown\"] = \"unknown\";\n })(FieldRoleType = Tableau.FieldRoleType || (Tableau.FieldRoleType = {}));\n /**\n * An enumeration of the valid types of filters that can be applied.\n */\n var FilterType;\n (function (FilterType) {\n FilterType[\"Categorical\"] = \"categorical\";\n FilterType[\"Range\"] = \"range\";\n FilterType[\"Hierarchical\"] = \"hierarchical\";\n FilterType[\"RelativeDate\"] = \"relative-date\";\n })(FilterType = Tableau.FilterType || (Tableau.FilterType = {}));\n /**\n * The different update types for applying filter\n */\n var FilterUpdateType;\n (function (FilterUpdateType) {\n FilterUpdateType[\"Add\"] = \"add\";\n FilterUpdateType[\"All\"] = \"all\";\n FilterUpdateType[\"Replace\"] = \"replace\";\n FilterUpdateType[\"Remove\"] = \"remove\";\n })(FilterUpdateType = Tableau.FilterUpdateType || (Tableau.FilterUpdateType = {}));\n /**\n * The domain type for a filter\n */\n var FilterDomainType;\n (function (FilterDomainType) {\n /**\n * The domain values that are relevant to the specified filter\n * i.e. the domain is restricted by a previous filter\n */\n FilterDomainType[\"Relevant\"] = \"relevant\";\n /**\n * list of all possible domain values from database\n */\n FilterDomainType[\"Database\"] = \"database\";\n })(FilterDomainType = Tableau.FilterDomainType || (Tableau.FilterDomainType = {}));\n /**\n * The option for specifying which values to include for filtering\n * Indicates what to do with null values for a given filter or mark selection call.\n */\n var FilterNullOption;\n (function (FilterNullOption) {\n FilterNullOption[\"NullValues\"] = \"null-values\";\n FilterNullOption[\"NonNullValues\"] = \"non-null-values\";\n FilterNullOption[\"AllValues\"] = \"all-values\";\n })(FilterNullOption = Tableau.FilterNullOption || (Tableau.FilterNullOption = {}));\n /**\n * Enum that serves as a filter on the DataValues returned from `getSummaryDataReaderAsync`,\n * `getUnderlyingTableDataReaderAsync` and `getLogicalTableDataReaderAsync`.\n * This is an optimization of returned data values only. Tableau versions prior to 2021.2\n * will pass the data across and populate the DataValue properties.\n * Please note that all properties not requested will be `undefined` in the DataValue results.\n * @since 1.5.0\n */\n var IncludeDataValuesOption;\n (function (IncludeDataValuesOption) {\n /** DataValues will include all properties.*/\n IncludeDataValuesOption[\"AllValues\"] = \"all-values\";\n /** DataValues will only include value and nativeValue properties.*/\n IncludeDataValuesOption[\"OnlyNativeValues\"] = \"only-native-values\";\n /** DataValues will only include formattedValue properties. */\n IncludeDataValuesOption[\"OnlyFormattedValues\"] = \"only-formatted-values\";\n })(IncludeDataValuesOption = Tableau.IncludeDataValuesOption || (Tableau.IncludeDataValuesOption = {}));\n /**\n * Type of mark for a given marks card in a viz.\n */\n var MarkType;\n (function (MarkType) {\n MarkType[\"Bar\"] = \"bar\";\n MarkType[\"Line\"] = \"line\";\n MarkType[\"Area\"] = \"area\";\n MarkType[\"Square\"] = \"square\";\n MarkType[\"Circle\"] = \"circle\";\n MarkType[\"Shape\"] = \"shape\";\n MarkType[\"Text\"] = \"text\";\n MarkType[\"Map\"] = \"map\";\n MarkType[\"Pie\"] = \"pie\";\n MarkType[\"GanttBar\"] = \"gantt-bar\";\n MarkType[\"Polygon\"] = \"polygon\";\n })(MarkType = Tableau.MarkType || (Tableau.MarkType = {}));\n /**\n * An enumeration describing the different types of allowable values.\n * This is used for restricting the domain of a parameter\n */\n var ParameterValueType;\n (function (ParameterValueType) {\n ParameterValueType[\"All\"] = \"all\";\n ParameterValueType[\"List\"] = \"list\";\n ParameterValueType[\"Range\"] = \"range\";\n })(ParameterValueType = Tableau.ParameterValueType || (Tableau.ParameterValueType = {}));\n /**\n * Date period used in filters and in parameters.\n */\n var PeriodType;\n (function (PeriodType) {\n PeriodType[\"Years\"] = \"years\";\n PeriodType[\"Quarters\"] = \"quarters\";\n PeriodType[\"Months\"] = \"months\";\n PeriodType[\"Weeks\"] = \"weeks\";\n PeriodType[\"Days\"] = \"days\";\n PeriodType[\"Hours\"] = \"hours\";\n PeriodType[\"Minutes\"] = \"minutes\";\n PeriodType[\"Seconds\"] = \"seconds\";\n })(PeriodType = Tableau.PeriodType || (Tableau.PeriodType = {}));\n var QuickTableCalcType;\n (function (QuickTableCalcType) {\n QuickTableCalcType[\"RunningTotal\"] = \"running-total\";\n QuickTableCalcType[\"Difference\"] = \"difference\";\n QuickTableCalcType[\"PercentDifference\"] = \"percent-difference\";\n QuickTableCalcType[\"PercentOfTotal\"] = \"percent-of-total\";\n QuickTableCalcType[\"Rank\"] = \"rank\";\n QuickTableCalcType[\"Percentile\"] = \"percentile\";\n QuickTableCalcType[\"MovingAverage\"] = \"moving-average\";\n QuickTableCalcType[\"YTDTotal\"] = \"ytd-total\";\n QuickTableCalcType[\"CompoundGrowthRate\"] = \"compound-growth-rate\";\n QuickTableCalcType[\"YearOverYearGrowth\"] = \"year-over-year-growth\";\n QuickTableCalcType[\"YTDGrowth\"] = \"ytd-growth\";\n QuickTableCalcType[\"Undefined\"] = \"undefined\";\n })(QuickTableCalcType = Tableau.QuickTableCalcType || (Tableau.QuickTableCalcType = {}));\n /**\n * Enum for specifying the selection type for select marks api.\n */\n var SelectionUpdateType;\n (function (SelectionUpdateType) {\n SelectionUpdateType[\"Replace\"] = \"select-replace\";\n SelectionUpdateType[\"Add\"] = \"select-add\";\n SelectionUpdateType[\"Remove\"] = \"select-remove\";\n })(SelectionUpdateType = Tableau.SelectionUpdateType || (Tableau.SelectionUpdateType = {}));\n /**\n * The type of sheet a [[Sheet]] object represents\n */\n var SheetType;\n (function (SheetType) {\n SheetType[\"Dashboard\"] = \"dashboard\";\n SheetType[\"Story\"] = \"story\";\n SheetType[\"Worksheet\"] = \"worksheet\";\n })(SheetType = Tableau.SheetType || (Tableau.SheetType = {}));\n var SortDirection;\n (function (SortDirection) {\n SortDirection[\"Increasing\"] = \"increasing\";\n SortDirection[\"Decreasing\"] = \"decreasing\";\n })(SortDirection = Tableau.SortDirection || (Tableau.SortDirection = {}));\n var TrendLineModelType;\n (function (TrendLineModelType) {\n TrendLineModelType[\"Linear\"] = \"linear\";\n TrendLineModelType[\"Logarithmic\"] = \"logarithmic\";\n TrendLineModelType[\"Exponential\"] = \"exponential\";\n TrendLineModelType[\"Polynomial\"] = \"polynomial\";\n })(TrendLineModelType = Tableau.TrendLineModelType || (Tableau.TrendLineModelType = {}));\n /**\n * Enum that represents the replay speed of an animation.\n * @since 1.7.0\n */\n var ReplaySpeedType;\n (function (ReplaySpeedType) {\n /** Used for setting the replay speed of an animation to 0.5x.*/\n ReplaySpeedType[\"Slow\"] = \"slow\";\n /** Used for setting the replay speed of an animation to 1.0x.*/\n ReplaySpeedType[\"Normal\"] = \"normal\";\n /** Used for setting the replay speed of an animation to 2.0x.*/\n ReplaySpeedType[\"Fast\"] = \"fast\";\n })(ReplaySpeedType = Tableau.ReplaySpeedType || (Tableau.ReplaySpeedType = {}));\n /**\n * Enum that represents the selection state of a level in a hierarchical filter\n * @since Extensions 1.10.0\n */\n var HierarchicalLevelSelectionState;\n (function (HierarchicalLevelSelectionState) {\n HierarchicalLevelSelectionState[\"AllSelected\"] = \"all-selected\";\n HierarchicalLevelSelectionState[\"NoneSelected\"] = \"none-selected\";\n HierarchicalLevelSelectionState[\"SomeSelected\"] = \"some-selected\";\n HierarchicalLevelSelectionState[\"UnknownSelected\"] = \"unknown-selected\";\n })(HierarchicalLevelSelectionState = Tableau.HierarchicalLevelSelectionState || (Tableau.HierarchicalLevelSelectionState = {}));\n Tableau.ZoneVisibilityType = __assign({}, DashboardObjectVisibilityType);\n})(Tableau || (Tableau = {}));\nmodule.exports = Tableau;\n//# sourceMappingURL=Tableau.js.map","\"use strict\";\n// This file re-exports everything which is part of the shared api public interface\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./ExternalContract/Shared/Enums\"));\nvar Tableau_1 = require(\"./ExternalContract/Shared/Namespaces/Tableau\");\nexports.AnalyticsObjectType = Tableau_1.AnalyticsObjectType;\nexports.AnnotationType = Tableau_1.AnnotationType;\nexports.ClassNameKey = Tableau_1.ClassNameKey;\nexports.ColumnType = Tableau_1.ColumnType;\nexports.DashboardLayoutChange = Tableau_1.DashboardLayoutChange;\nexports.DashboardObjectType = Tableau_1.DashboardObjectType;\nexports.DashboardObjectVisibilityType = Tableau_1.DashboardObjectVisibilityType;\nexports.DataType = Tableau_1.DataType;\nexports.DateRangeType = Tableau_1.DateRangeType;\nexports.DialogStyle = Tableau_1.DialogStyle;\nexports.EncodingType = Tableau_1.EncodingType;\nexports.FieldAggregationType = Tableau_1.FieldAggregationType;\nexports.FieldRoleType = Tableau_1.FieldRoleType;\nexports.FilterDomainType = Tableau_1.FilterDomainType;\nexports.FilterNullOption = Tableau_1.FilterNullOption;\nexports.FilterType = Tableau_1.FilterType;\nexports.FilterUpdateType = Tableau_1.FilterUpdateType;\nexports.HierarchicalLevelSelectionState = Tableau_1.HierarchicalLevelSelectionState;\nexports.IncludeDataValuesOption = Tableau_1.IncludeDataValuesOption;\nexports.MarkType = Tableau_1.MarkType;\nexports.ParameterValueType = Tableau_1.ParameterValueType;\nexports.PeriodType = Tableau_1.PeriodType;\nexports.QuickTableCalcType = Tableau_1.QuickTableCalcType;\nexports.ReplaySpeedType = Tableau_1.ReplaySpeedType;\nexports.SelectionUpdateType = Tableau_1.SelectionUpdateType;\nexports.SheetType = Tableau_1.SheetType;\nexports.SortDirection = Tableau_1.SortDirection;\nexports.TrendLineModelType = Tableau_1.TrendLineModelType;\nexports.ZoneVisibilityType = Tableau_1.ZoneVisibilityType;\n//# sourceMappingURL=SharedApiExternalContract.js.map","\"use strict\";\n/**\n * This is your main. This is where you re-export everything you want to be publicly available.\n *\n * The build enforces that the file has the same name as the global variable that is exported.\n */\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// The following polyfills are needed for IE11\nrequire(\"core-js/es/number/is-integer\");\nrequire(\"core-js/es/number/is-nan\");\nrequire(\"core-js/es/object/assign\");\n// Export the version of the internal contract to be available at runtime\n// This file is generated by yarn publish:bump via scripts/publish-check.ts\n// updateInternalContractRuntimeVersion in the monorepo root.\nvar internalContractVersion = require(\"../internal-contract-version.json\");\nexports.INTERNAL_CONTRACT_VERSION = internalContractVersion;\n__export(require(\"./contract/DataTypeConverter\"));\n__export(require(\"./contract/Enums\"));\n__export(require(\"./contract/Notifications\"));\n__export(require(\"./contract/Parameters\"));\n__export(require(\"./contract/Verbs\"));\n__export(require(\"./interface/AskDataInterface\"));\n__export(require(\"./interface/VqlInterface\"));\n__export(require(\"./messaging/CrossFrameMessenger\"));\n__export(require(\"./messaging/interface/MessageTypes\"));\n__export(require(\"./versioning/external/ExternalIdentityVersionConverter\"));\n__export(require(\"./versioning/external/ExternalVersionConverterFactory\"));\n__export(require(\"./versioning/VersionConverterFactory\"));\n// Export the version number of messaging for consumers to use.\n// Be very careful making any updates to this contract which break version compatibility.\nexports.MESSAGING_VERSION = {\n major: 1,\n minor: 0,\n fix: 0,\n};\n//# sourceMappingURL=JsApiInternalContract.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Enums_1 = require(\"./Enums\");\nvar DataTypeConverter = /** @class */ (function () {\n function DataTypeConverter() {\n }\n DataTypeConverter.isSpecial = function (valueAsString) {\n // Prior to ShowDataTablePresModel, special values come to us as\n // '%null%', '%all%', '%wildcard%', '%missing%'...\n // While this function will never return true for ShowDataTablePresModel conversion,\n // it is as cheap as passing around a version and checking that.\n // (See DataValueFormatter.cpp)\n if (valueAsString.length > 2 && valueAsString[0] === '%' && valueAsString[valueAsString.length - 1] === '%') {\n return true;\n }\n return false;\n };\n // tslint:disable-next-line:no-any\n DataTypeConverter.parseBoolean = function (booleanString) {\n // boolean values come to us as 'true'|'false'\n var normalizedBoolean = booleanString.toLowerCase();\n return normalizedBoolean !== 'true' && normalizedBoolean !== 'false' ? this.specialValueIndicator : normalizedBoolean === 'true';\n };\n // tslint:disable-next-line:no-any\n DataTypeConverter.parseNumber = function (valueAsString) {\n var value = Number(valueAsString);\n return isNaN(value) ? this.specialValueIndicator : value;\n };\n DataTypeConverter.parseDate = function (dateAsString) {\n // Note that without a time, the date is assumed to be UTC\n // Input of 2020-03-25 is printed as: Mar 24 2020 17:00:00 GMT-0700\n // This matches style used in existing convertFilterValuePresModel\n var value = new Date(dateAsString);\n return Number.isNaN(value.getTime()) ? null : value;\n };\n DataTypeConverter.parseDateTime = function (dateAsString) {\n // With a time, the date is assumed to be UTC.\n // Our date format is always: yyyy-mm-dd hh:mm:ss\n // Unfortunately, IE11 can't parse that format so we add a T between the day and time.\n // We also add a Z so that it is UTC. (Without the Z, some browsers assume local, and others UTC)\n var formattedDateString = dateAsString.replace(' ', 'T').concat('Z');\n var value = new Date(formattedDateString);\n return Number.isNaN(value.getTime()) ? null : value;\n };\n // tslint:disable-next-line:no-any\n DataTypeConverter.convertValueAsStringToValue = function (valueAsString, type) {\n // This is both DataDictionary and ShowDataTablePresModel compatible.\n // In the DataDictionary, valueAsString can be '%null%' or '%missing%', while in\n // ShowDataTablePresModel, we can get 'null' or 'missing', or '%null%' for string special values.\n // For either of these cases, we return specialValueIndicator (or the original special string).\n // To maintain backwards compatibilty, this converter:\n // 1. returns a string for any special values\n // 2. returns a string for any date\n // Parameter min/max values can be undefined, so result is also undefined\n if (valueAsString === undefined || valueAsString === null) {\n return undefined;\n }\n if (this.isSpecial(valueAsString)) {\n return valueAsString;\n }\n switch (type) {\n case Enums_1.DataType.Bool:\n return this.parseBoolean(valueAsString);\n case Enums_1.DataType.Int:\n case Enums_1.DataType.Float:\n // Return special value '%null%' for any failure in parsing.\n // We need to do that because ShowDataTablePresModel will give us strings like 'null'\n // for special values.\n return this.parseNumber(valueAsString);\n case Enums_1.DataType.Date:\n // For ShowDataTablePresModel, special values will be \"null\" which will fail to parse.\n // In that case, we return '%null%'.\n return this.parseDate(valueAsString) === null ? this.specialValueIndicator : valueAsString;\n case Enums_1.DataType.DateTime:\n // For ShowDataTablePresModel, special values will be \"null\" which will fail to parse.\n // In that case, we return '%null%'\n return this.parseDateTime(valueAsString) === null ? this.specialValueIndicator : valueAsString;\n case Enums_1.DataType.Spatial:\n case Enums_1.DataType.String:\n default:\n return valueAsString;\n }\n };\n // tslint:disable-next-line:no-any\n DataTypeConverter.convertValueToNativeValue = function (value, type) {\n // This converts from our 1.2 API that returns strings for specials, and dates as strings.\n // It takes the special case of '%null%' and returns a null.\n // For dates, it returns a Date object rather than a string.\n // convertValueToNativeValue should be used to build a DataValue.nativeValue field.\n // Parameter min/max can be undefined. If that is the case, nativeValue is treated like a special\n if (value === undefined || value === null) {\n return null;\n }\n switch (type) {\n case Enums_1.DataType.Bool:\n return typeof value === 'string' ? null : value;\n case Enums_1.DataType.Int:\n case Enums_1.DataType.Float:\n return typeof value === 'string' ? null : value;\n case Enums_1.DataType.Date:\n // Convert the string to Date object (or null if parsing fails ... we assume special)\n return this.parseDate(value);\n case Enums_1.DataType.DateTime:\n // Convert the string to Date object (or null if parsing fails ... we assume special)\n return this.parseDateTime(value);\n case Enums_1.DataType.String:\n return this.isSpecial(value) ? null : value;\n case Enums_1.DataType.Spatial:\n default:\n return value;\n }\n };\n // tslint:disable-next-line:no-any\n DataTypeConverter.convertStringValueToNativeValue = function (value, type) {\n // This handles the conversion from string directly to native value for all types\n return this.convertValueToNativeValue(this.convertValueAsStringToValue(value, type), type);\n };\n DataTypeConverter.specialValueIndicator = '%null%';\n return DataTypeConverter;\n}());\nexports.DataTypeConverter = DataTypeConverter;\n//# sourceMappingURL=DataTypeConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ExtensionContext;\n(function (ExtensionContext) {\n ExtensionContext[\"Desktop\"] = \"desktop\";\n ExtensionContext[\"Server\"] = \"server\";\n ExtensionContext[\"Unknown\"] = \"unknown\";\n})(ExtensionContext = exports.ExtensionContext || (exports.ExtensionContext = {}));\nvar ExtensionMode;\n(function (ExtensionMode) {\n ExtensionMode[\"Authoring\"] = \"authoring\";\n ExtensionMode[\"Viewing\"] = \"viewing\";\n ExtensionMode[\"Unknown\"] = \"unknown\";\n})(ExtensionMode = exports.ExtensionMode || (exports.ExtensionMode = {}));\nvar AnnotateEnum;\n(function (AnnotateEnum) {\n AnnotateEnum[\"Mark\"] = \"mark\";\n AnnotateEnum[\"Point\"] = \"point\";\n AnnotateEnum[\"Area\"] = \"area\";\n})(AnnotateEnum = exports.AnnotateEnum || (exports.AnnotateEnum = {}));\nvar ColumnType;\n(function (ColumnType) {\n ColumnType[\"Discrete\"] = \"discrete\";\n ColumnType[\"Continuous\"] = \"continuous\";\n})(ColumnType = exports.ColumnType || (exports.ColumnType = {}));\nvar DashboardObjectType;\n(function (DashboardObjectType) {\n DashboardObjectType[\"Blank\"] = \"blank\";\n DashboardObjectType[\"Worksheet\"] = \"worksheet\";\n DashboardObjectType[\"QuickFilter\"] = \"quick-filter\";\n DashboardObjectType[\"ParameterControl\"] = \"parameter-control\";\n DashboardObjectType[\"PageFilter\"] = \"page-filter\";\n DashboardObjectType[\"Legend\"] = \"legend\";\n DashboardObjectType[\"Title\"] = \"title\";\n DashboardObjectType[\"Text\"] = \"text\";\n DashboardObjectType[\"Image\"] = \"image\";\n DashboardObjectType[\"WebPage\"] = \"web-page\";\n DashboardObjectType[\"Extension\"] = \"extension\";\n})(DashboardObjectType = exports.DashboardObjectType || (exports.DashboardObjectType = {}));\nvar DataType;\n(function (DataType) {\n DataType[\"String\"] = \"string\";\n DataType[\"Int\"] = \"int\";\n DataType[\"Float\"] = \"float\";\n DataType[\"Bool\"] = \"bool\";\n DataType[\"Date\"] = \"date\";\n DataType[\"DateTime\"] = \"date-time\";\n DataType[\"Spatial\"] = \"spatial\";\n})(DataType = exports.DataType || (exports.DataType = {}));\nvar DialogStyle;\n(function (DialogStyle) {\n DialogStyle[\"Window\"] = \"window\";\n DialogStyle[\"Modal\"] = \"modal\";\n DialogStyle[\"Modeless\"] = \"modeless\";\n})(DialogStyle = exports.DialogStyle || (exports.DialogStyle = {}));\nvar EncodedDataType;\n(function (EncodedDataType) {\n EncodedDataType[\"Number\"] = \"number\";\n EncodedDataType[\"String\"] = \"string\";\n EncodedDataType[\"Date\"] = \"date\";\n EncodedDataType[\"Boolean\"] = \"boolean\";\n})(EncodedDataType = exports.EncodedDataType || (exports.EncodedDataType = {}));\nvar ErrorCodes;\n(function (ErrorCodes) {\n ErrorCodes[\"INITIALIZATION_ERROR\"] = \"initialization-error\";\n ErrorCodes[\"INTERNAL_ERROR\"] = \"internal-error\";\n ErrorCodes[\"MISSING_ENUM_MAPPING\"] = \"missing-enum-mapping\";\n ErrorCodes[\"MISSING_PARAMETER\"] = \"missing-parameter\";\n ErrorCodes[\"PERMISSION_DENIED\"] = \"permission-denied\";\n ErrorCodes[\"PRES_MODEL_PARSING_ERROR\"] = \"pres-model-parsing-error\";\n ErrorCodes[\"VERSION_NOT_CONFIGURED\"] = \"version-not-configured\";\n ErrorCodes[\"VISIBILITY_ERROR\"] = \"visibility-error\";\n ErrorCodes[\"UNKNOWN_VERB_ID\"] = \"unknown-verb-id\";\n})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));\nvar FieldAggregationType;\n(function (FieldAggregationType) {\n FieldAggregationType[\"Sum\"] = \"sum\";\n FieldAggregationType[\"Avg\"] = \"avg\";\n FieldAggregationType[\"Min\"] = \"min\";\n FieldAggregationType[\"Max\"] = \"max\";\n FieldAggregationType[\"Stdev\"] = \"stdev\";\n FieldAggregationType[\"Stdevp\"] = \"stdevp\";\n FieldAggregationType[\"Var\"] = \"var\";\n FieldAggregationType[\"Varp\"] = \"varp\";\n FieldAggregationType[\"Count\"] = \"count\";\n FieldAggregationType[\"Countd\"] = \"countd\";\n FieldAggregationType[\"Median\"] = \"median\";\n FieldAggregationType[\"Attr\"] = \"attr\";\n FieldAggregationType[\"None\"] = \"none\";\n FieldAggregationType[\"Year\"] = \"year\";\n FieldAggregationType[\"Qtr\"] = \"qtr\";\n FieldAggregationType[\"Month\"] = \"month\";\n FieldAggregationType[\"Day\"] = \"day\";\n FieldAggregationType[\"Hour\"] = \"hour\";\n FieldAggregationType[\"Minute\"] = \"minute\";\n FieldAggregationType[\"Second\"] = \"second\";\n FieldAggregationType[\"Week\"] = \"week\";\n FieldAggregationType[\"Weekday\"] = \"weekday\";\n FieldAggregationType[\"MonthYear\"] = \"month-year\";\n FieldAggregationType[\"Mdy\"] = \"mdy\";\n FieldAggregationType[\"End\"] = \"end\";\n FieldAggregationType[\"TruncYear\"] = \"trunc-year\";\n FieldAggregationType[\"TruncQtr\"] = \"trunc-qtr\";\n FieldAggregationType[\"TruncMonth\"] = \"trunc-month\";\n FieldAggregationType[\"TruncWeek\"] = \"trunc-week\";\n FieldAggregationType[\"TruncDay\"] = \"trunc-day\";\n FieldAggregationType[\"TruncHour\"] = \"trunc-hour\";\n FieldAggregationType[\"TruncMinute\"] = \"trunc-minute\";\n FieldAggregationType[\"TruncSecond\"] = \"trunc-second\";\n FieldAggregationType[\"Quart1\"] = \"quart1\";\n FieldAggregationType[\"Quart3\"] = \"quart3\";\n FieldAggregationType[\"Skewness\"] = \"skewness\";\n FieldAggregationType[\"Kurtosis\"] = \"kurtosis\";\n FieldAggregationType[\"InOut\"] = \"in-out\";\n FieldAggregationType[\"User\"] = \"user\";\n})(FieldAggregationType = exports.FieldAggregationType || (exports.FieldAggregationType = {}));\nvar FieldRoleType;\n(function (FieldRoleType) {\n FieldRoleType[\"Dimension\"] = \"dimension\";\n FieldRoleType[\"Measure\"] = \"measure\";\n FieldRoleType[\"Unknown\"] = \"unknown\";\n})(FieldRoleType = exports.FieldRoleType || (exports.FieldRoleType = {}));\n/**\n * The different update types for applying filter.\n */\nvar FilterUpdateType;\n(function (FilterUpdateType) {\n FilterUpdateType[\"Add\"] = \"add\";\n FilterUpdateType[\"All\"] = \"all\";\n FilterUpdateType[\"Replace\"] = \"replace\";\n FilterUpdateType[\"Remove\"] = \"remove\";\n})(FilterUpdateType = exports.FilterUpdateType || (exports.FilterUpdateType = {}));\nvar SheetType;\n(function (SheetType) {\n SheetType[\"Dashboard\"] = \"dashboard\";\n SheetType[\"Story\"] = \"story\";\n SheetType[\"Worksheet\"] = \"worksheet\";\n})(SheetType = exports.SheetType || (exports.SheetType = {}));\nvar DomainRestrictionType;\n(function (DomainRestrictionType) {\n DomainRestrictionType[\"All\"] = \"all\";\n DomainRestrictionType[\"List\"] = \"list\";\n DomainRestrictionType[\"Range\"] = \"range\";\n})(DomainRestrictionType = exports.DomainRestrictionType || (exports.DomainRestrictionType = {}));\nvar DateStepPeriod;\n(function (DateStepPeriod) {\n DateStepPeriod[\"Years\"] = \"years\";\n DateStepPeriod[\"Quarters\"] = \"quarters\";\n DateStepPeriod[\"Months\"] = \"months\";\n DateStepPeriod[\"Weeks\"] = \"weeks\";\n DateStepPeriod[\"Days\"] = \"days\";\n DateStepPeriod[\"Hours\"] = \"hours\";\n DateStepPeriod[\"Minutes\"] = \"minutes\";\n DateStepPeriod[\"Seconds\"] = \"seconds\";\n})(DateStepPeriod = exports.DateStepPeriod || (exports.DateStepPeriod = {}));\n/**\n * The option for specifying which values to include for filtering.\n */\nvar FilterNullOption;\n(function (FilterNullOption) {\n FilterNullOption[\"NullValues\"] = \"nullvalues\";\n FilterNullOption[\"NonNullValues\"] = \"nonnullvalues\";\n FilterNullOption[\"AllValues\"] = \"allvalues\";\n})(FilterNullOption = exports.FilterNullOption || (exports.FilterNullOption = {}));\n/**\n * The type of filter domain\n */\nvar FilterDomainType;\n(function (FilterDomainType) {\n FilterDomainType[\"Relevant\"] = \"relevant\";\n FilterDomainType[\"Database\"] = \"database\";\n})(FilterDomainType = exports.FilterDomainType || (exports.FilterDomainType = {}));\n/**\n * Internal enum for specifying the selection type for select marks api.\n */\nvar SelectionUpdateType;\n(function (SelectionUpdateType) {\n SelectionUpdateType[\"Replace\"] = \"select-replace\";\n SelectionUpdateType[\"Add\"] = \"select-add\";\n SelectionUpdateType[\"Remove\"] = \"select-remove\";\n})(SelectionUpdateType = exports.SelectionUpdateType || (exports.SelectionUpdateType = {}));\n/**\n * Internal enum for specifying the included values type for range selection.\n */\nvar QuantitativeIncludedValues;\n(function (QuantitativeIncludedValues) {\n QuantitativeIncludedValues[\"IncludeNull\"] = \"include-null\";\n QuantitativeIncludedValues[\"IncludeNonNull\"] = \"include-non-null\";\n QuantitativeIncludedValues[\"IncludeAll\"] = \"include-all\";\n})(QuantitativeIncludedValues = exports.QuantitativeIncludedValues || (exports.QuantitativeIncludedValues = {}));\n/**\n * Internal enum for specifying a hierarchical level selection state.\n */\nvar HierarchicalLevelSelectionState;\n(function (HierarchicalLevelSelectionState) {\n HierarchicalLevelSelectionState[\"AllSelected\"] = \"all-selected\";\n HierarchicalLevelSelectionState[\"NoneSelected\"] = \"none-selected\";\n HierarchicalLevelSelectionState[\"SomeSelected\"] = \"some-selected\";\n HierarchicalLevelSelectionState[\"UnknownSelected\"] = \"unknown-selected\";\n})(HierarchicalLevelSelectionState = exports.HierarchicalLevelSelectionState || (exports.HierarchicalLevelSelectionState = {}));\n/**\n * Type of mark for a given marks card in a viz.\n */\nvar MarkType;\n(function (MarkType) {\n MarkType[\"Bar\"] = \"bar\";\n MarkType[\"Line\"] = \"line\";\n MarkType[\"Area\"] = \"area\";\n MarkType[\"Square\"] = \"square\";\n MarkType[\"Circle\"] = \"circle\";\n MarkType[\"Shape\"] = \"shape\";\n MarkType[\"Text\"] = \"text\";\n MarkType[\"Map\"] = \"map\";\n MarkType[\"Pie\"] = \"pie\";\n MarkType[\"GanttBar\"] = \"gantt-bar\";\n MarkType[\"Polygon\"] = \"polygon\";\n})(MarkType = exports.MarkType || (exports.MarkType = {}));\n/**\n * Internal enum for specifying the type of filter\n */\nvar FilterType;\n(function (FilterType) {\n FilterType[\"Categorical\"] = \"categorical\";\n FilterType[\"Range\"] = \"range\";\n FilterType[\"RelativeDate\"] = \"relativeDate\";\n FilterType[\"Hierarchical\"] = \"hierarchical\";\n})(FilterType = exports.FilterType || (exports.FilterType = {}));\n/**\n * Internal enum for specifying the DateRangeType of a relative date filter\n */\nvar DateRangeType;\n(function (DateRangeType) {\n /**\n * Refers to the last day, week, month, etc. of the date period.\n */\n DateRangeType[\"Last\"] = \"last\";\n /**\n * Refers to the last N days, weeks, months, etc. of the date period.\n */\n DateRangeType[\"LastN\"] = \"lastN\";\n /**\n * Refers to the next day, week, month, etc. of the date period.\n */\n DateRangeType[\"Next\"] = \"next\";\n /**\n * Refers to the next N days, weeks, months, etc. of the date period.\n */\n DateRangeType[\"NextN\"] = \"nextN\";\n /**\n * Refers to the current day, week, month, etc. of the date period.\n */\n DateRangeType[\"Current\"] = \"current\";\n /**\n * Refers to everything up to and including the current day, week, month, etc. of the date period.\n */\n DateRangeType[\"ToDate\"] = \"toDate\";\n})(DateRangeType = exports.DateRangeType || (exports.DateRangeType = {}));\n/**\n * Used to determine if the launching of an extension dialog succeeded or failed.\n */\nvar ExtensionDialogResult;\n(function (ExtensionDialogResult) {\n ExtensionDialogResult[\"DialogAlreadyOpen\"] = \"dialog-already-open\";\n ExtensionDialogResult[\"InvalidDomain\"] = \"invalid-domain\";\n ExtensionDialogResult[\"Success\"] = \"success\";\n})(ExtensionDialogResult = exports.ExtensionDialogResult || (exports.ExtensionDialogResult = {}));\n// Enumeration for ApiShowData table id sentinels.\nvar ApiShowDataTableSentinel;\n(function (ApiShowDataTableSentinel) {\n // find the one logical table - used in version compatibility check for getUnderlyingDataTable and getLogicalDataTable commands\n ApiShowDataTableSentinel[\"SingleTableId\"] = \"single-table-id-sentinel\";\n ApiShowDataTableSentinel[\"SingleTableCaption\"] = \"Single table id sentinel\";\n})(ApiShowDataTableSentinel = exports.ApiShowDataTableSentinel || (exports.ApiShowDataTableSentinel = {}));\n/**\n * Used to optimize the getSummaryData/getUnderlyingTableData results\n * Mapped from external IncludeDataValuesOption\n */\nvar ApiShowDataTableFormat;\n(function (ApiShowDataTableFormat) {\n ApiShowDataTableFormat[\"NativeValuesOnly\"] = \"native-values-only\";\n ApiShowDataTableFormat[\"FormattedValuesOnly\"] = \"formatted-values-only\";\n ApiShowDataTableFormat[\"NativeAndFormattedValues\"] = \"native-and-formatted-values\";\n})(ApiShowDataTableFormat = exports.ApiShowDataTableFormat || (exports.ApiShowDataTableFormat = {}));\n//# sourceMappingURL=Enums.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar NotificationId;\n(function (NotificationId) {\n NotificationId[\"CustomMarkContextMenuClicked\"] = \"custom-mark-context-menu-clicked\";\n NotificationId[\"ContextMenuClick\"] = \"context-menu-click\";\n NotificationId[\"CustomViewRemoved\"] = \"custom-view-removed\";\n NotificationId[\"CustomViewSaved\"] = \"custom-view-saved\";\n NotificationId[\"CustomViewSetDefault\"] = \"custom-view-set-default\";\n NotificationId[\"CustomViewsLoaded\"] = \"custom-views-loaded\";\n NotificationId[\"DashboardLayoutChanged\"] = \"dashboard-layout-changed\";\n NotificationId[\"EditButtonClicked\"] = \"edit-button-clicked\";\n NotificationId[\"EditInDesktopButtonClicked\"] = \"edit-in-desktop-button-clicked\";\n NotificationId[\"ExtensionDialogUpdate\"] = \"extension-dialog-update\";\n NotificationId[\"FilterChanged\"] = \"filter-changed\";\n NotificationId[\"FirstVizSizeKnown\"] = \"first-viz-size-known\";\n NotificationId[\"ParameterChanged\"] = \"parameter-changed\";\n NotificationId[\"SelectedMarksChanged\"] = \"selected-marks-changed\";\n NotificationId[\"SettingsChanged\"] = \"settings-changed\";\n NotificationId[\"TestConversionNotification\"] = \"test-conversion-notification\";\n NotificationId[\"ToolbarStateChanged\"] = \"toolbar-state-changed\";\n NotificationId[\"VizInteractive\"] = \"viz-interactive\";\n NotificationId[\"AskDataInteractive\"] = \"ask-data-interactive\";\n NotificationId[\"WorkbookReadyToClose\"] = \"workbook-ready-to-close\";\n NotificationId[\"WorkbookFormattingChanged\"] = \"workbook-formatting-changed\";\n NotificationId[\"WorkbookPublished\"] = \"workbook-published\";\n NotificationId[\"WorkbookPublishedAs\"] = \"workbook-published-as\";\n NotificationId[\"UrlAction\"] = \"url-action\";\n NotificationId[\"TabSwitched\"] = \"tab-switched\";\n NotificationId[\"StoryPointSwitched\"] = \"story-point-switched\";\n})(NotificationId = exports.NotificationId || (exports.NotificationId = {}));\n//# sourceMappingURL=Notifications.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// PLEASE KEEP IN ALPHABETICAL ORDER. This helps with visually finding entries, knowing where to put\n// new ones, and merge conflicts.\nvar ParameterId;\n(function (ParameterId) {\n ParameterId[\"ActiveTablesInfo\"] = \"active-tables-info\";\n ParameterId[\"AnchorDate\"] = \"anchor-date\";\n ParameterId[\"AnnotateEnum\"] = \"annotate-enum\";\n ParameterId[\"AnnotationList\"] = \"annotation-list\";\n ParameterId[\"CategoricalDomain\"] = \"categorical-domain\";\n ParameterId[\"ClickThroughEnabled\"] = \"click-through-enabled\";\n ParameterId[\"ColumnsToInclude\"] = \"columns-to-include\";\n ParameterId[\"ColumnsToIncludeById\"] = \"columns-to-include-by-id\";\n ParameterId[\"ConnectionDescriptionSummaries\"] = \"connection-description-summaries\";\n ParameterId[\"CustomView\"] = \"custom-view\";\n ParameterId[\"CustomViewIsDefault\"] = \"custom-view-is-default\";\n ParameterId[\"CustomViewIsPublic\"] = \"custom-view-is-public\";\n ParameterId[\"CustomViewLuid\"] = \"custom-view-luid\";\n ParameterId[\"CustomViewName\"] = \"custom-view-name\";\n ParameterId[\"CustomViews\"] = \"custom-views\";\n ParameterId[\"Dashboard\"] = \"dashboard\";\n ParameterId[\"DashboardFilters\"] = \"dashboard-filters\";\n ParameterId[\"DashboardName\"] = \"dashboard\";\n ParameterId[\"DashboardObjectPositionAndSizeUpdate\"] = \"dashboard-object-position-and-size-update\";\n ParameterId[\"DashboardObjectPositionAndSizeUpdateList\"] = \"dashboard-object-position-and-size-update-list\";\n ParameterId[\"DataRowIndex\"] = \"data-row-index\";\n ParameterId[\"DataSchema\"] = \"data-schema\";\n ParameterId[\"DataSource\"] = \"data-source\";\n ParameterId[\"DataSourceDataTable\"] = \"data-source-data-table\";\n ParameterId[\"DataSourceId\"] = \"data-source-id\";\n ParameterId[\"DataSourceName\"] = \"data-source-name\";\n ParameterId[\"DataTable\"] = \"data-table\";\n ParameterId[\"DataTableReader\"] = \"data-table-reader\";\n ParameterId[\"DateRangeType\"] = \"date-range-type\";\n ParameterId[\"DeltaTimeMs\"] = \"delta-time-ms\";\n ParameterId[\"DimValSelectionModels\"] = \"dimensionValueSelectionModels\";\n ParameterId[\"DomainType\"] = \"domain-type\";\n ParameterId[\"EmbeddingBootstrapInfo\"] = \"embedding-bootstrap-info\";\n ParameterId[\"ExtensionBootstrapInfo\"] = \"extension-bootstrap-info\";\n ParameterId[\"ExtensionContextMenuIds\"] = \"extension-context-menu-ids\";\n ParameterId[\"ExtensionDialogH\"] = \"extension-dialog-height\";\n ParameterId[\"ExtensionDialogPayload\"] = \"extension-dialog-payload\";\n ParameterId[\"ExtensionDialogResult\"] = \"extension-dialog-result\";\n ParameterId[\"ExtensionDialogStyle\"] = \"extension-dialog-style\";\n ParameterId[\"ExtensionDialogUrl\"] = \"extension-dialog-url\";\n ParameterId[\"ExtensionDialogW\"] = \"extension-dialog-width\";\n ParameterId[\"ExtensionLocator\"] = \"extension-locator\";\n ParameterId[\"ExtensionSettingsInfo\"] = \"extension-settings-info\";\n ParameterId[\"ExtensionZoneId\"] = \"extension-zone-id\";\n ParameterId[\"ExternalMenuDescription\"] = \"external-menu-description\";\n ParameterId[\"ExternalMenuHeader\"] = \"external-menu-header\";\n ParameterId[\"ExternalMenuItemDisplayName\"] = \"external-menu-item-display-name\";\n ParameterId[\"ExternalMenuItemId\"] = \"external-menu-item-id\";\n ParameterId[\"Field\"] = \"field\";\n ParameterId[\"FieldId\"] = \"field-id\";\n ParameterId[\"FieldName\"] = \"field-name\";\n ParameterId[\"FilterLevels\"] = \"filter-levels\";\n ParameterId[\"FilterRangeMax\"] = \"filter-range-max\";\n ParameterId[\"FilterRangeMin\"] = \"filter-range-min\";\n ParameterId[\"FilterRangeNullOption\"] = \"filter-range-null-option\";\n ParameterId[\"FilterUpdateType\"] = \"filter-update-type\";\n ParameterId[\"FilterValues\"] = \"filter-values\";\n ParameterId[\"FontNameListItems\"] = \"font-name-list-items\";\n ParameterId[\"FormattedText\"] = \"formatted-text\";\n ParameterId[\"FunctionName\"] = \"function-name\";\n ParameterId[\"HierValSelectionModels\"] = \"hierarchicalValueSelectionModels\";\n ParameterId[\"HighlightedData\"] = \"highlighted-data\";\n ParameterId[\"IgnoreAliases\"] = \"ignore-aliases\";\n ParameterId[\"IgnoreSelection\"] = \"ignore-selection\";\n ParameterId[\"IncludeAllColumns\"] = \"include-all-columns\";\n ParameterId[\"InvalidAggFieldName\"] = \"invalid-agg-field-name\";\n ParameterId[\"InvalidDates\"] = \"invalid-dates\";\n ParameterId[\"InvalidFieldCaption\"] = \"invalid-field-caption\";\n ParameterId[\"InvalidFields\"] = \"invalid-fields\";\n ParameterId[\"InvalidValues\"] = \"invalid-values\";\n ParameterId[\"IsExcludeMode\"] = \"is-exclude\";\n ParameterId[\"IsExtensionDialog\"] = \"is-extension-dialog\";\n ParameterId[\"JoinDescription\"] = \"join-description\";\n ParameterId[\"LogicalTableId\"] = \"logical-table-id\";\n ParameterId[\"LogicalTableInfoList\"] = \"logical-table-info-list\";\n ParameterId[\"MaxHeight\"] = \"max-height\";\n ParameterId[\"MaxRows\"] = \"max-rows\";\n ParameterId[\"MaxWidth\"] = \"max-width\";\n ParameterId[\"MinHeight\"] = \"min-height\";\n ParameterId[\"MinWidth\"] = \"min-width\";\n ParameterId[\"PageRowCount\"] = \"page-row-count\";\n ParameterId[\"ParameterCaption\"] = \"paremeter-caption\";\n ParameterId[\"ParameterError\"] = \"parameter-error\";\n ParameterId[\"ParameterFieldName\"] = \"parameter-field-name\";\n ParameterId[\"ParameterInfo\"] = \"parameter-info\";\n ParameterId[\"ParameterInfos\"] = \"parameter-infos\";\n ParameterId[\"ParameterValue\"] = \"parameter-value\";\n ParameterId[\"PeriodType\"] = \"period-type\";\n ParameterId[\"QuantitativeDomain\"] = \"quantitative-dmain\";\n ParameterId[\"QuantRangeSelectionModels\"] = \"quantativeRangeSelectionModels\";\n ParameterId[\"RangeN\"] = \"range-n\";\n ParameterId[\"ReplaySpeed\"] = \"replay-speed\";\n ParameterId[\"SelectedData\"] = \"selected-data\";\n ParameterId[\"Selection\"] = \"selection\";\n ParameterId[\"SelectionList\"] = \"selection-list\";\n ParameterId[\"SelectionUpdateType\"] = \"selectionUpdateType\";\n ParameterId[\"SettingsValues\"] = \"settings-values\";\n ParameterId[\"SharedFilterSheets\"] = \"shared-filter-sheets\";\n ParameterId[\"SharedFiltersInfo\"] = \"shared-filters-info\";\n ParameterId[\"SheetName\"] = \"sheet-name\";\n ParameterId[\"SheetPath\"] = \"sheet-path\";\n ParameterId[\"ShouldRefreshDS\"] = \"should-refresh-ds\";\n ParameterId[\"ShowDataTableFormat\"] = \"show-data-table-format\";\n ParameterId[\"State\"] = \"state\";\n ParameterId[\"StoryPointIndex\"] = \"story-point-index\";\n ParameterId[\"StoryPointInfo\"] = \"story-point-info\";\n ParameterId[\"SwitchToSheetName\"] = \"switch-to-sheet-name\";\n ParameterId[\"TargetPoint\"] = \"target-point\";\n ParameterId[\"TestConversionParameter\"] = \"test-conversion-parameter\";\n ParameterId[\"Text\"] = \"formatted-text\";\n ParameterId[\"UnderlyingDataTable\"] = \"underlying-data-table\";\n ParameterId[\"UnderlyingSummaryDataTable\"] = \"underlying-summary-data-table\";\n ParameterId[\"Url\"] = \"url\";\n ParameterId[\"ViewDataTableCacheId\"] = \"view-data-table-cache-id\";\n ParameterId[\"ViewDataTableId\"] = \"view-data-table-id\";\n ParameterId[\"VisualId\"] = \"visual-id\";\n ParameterId[\"VizAPIInputJson\"] = \"vizapi-input-json\";\n ParameterId[\"VizAPISVG\"] = \"vizapi-svg\";\n ParameterId[\"WorksheetName\"] = \"worksheet-name\";\n ParameterId[\"WorksheetFilters\"] = \"worksheet-filters\";\n ParameterId[\"ZoneIdsVisibilityMap\"] = \"zone-ids-visibility-map\";\n})(ParameterId = exports.ParameterId || (exports.ParameterId = {}));\n//# sourceMappingURL=Parameters.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Declare this key type and export the NotificationId to make this behave like a string enum.\n//\n// PLEASE KEEP IN ALPHABETICAL ORDER. This helps with visually finding entries, knowing where to put\n// new ones, and merge conflicts.\nvar VerbId;\n(function (VerbId) {\n VerbId[\"ActivateNextStoryPoint\"] = \"activate-next-story-point\";\n VerbId[\"ActivatePreviousStoryPoint\"] = \"activate-previous-story-point\";\n VerbId[\"ActivateSheet\"] = \"activateSheet\";\n VerbId[\"ActivateStoryPoint\"] = \"activate-story-point\";\n VerbId[\"AppendExternalMenuItem\"] = \"append-external-menu-item\";\n VerbId[\"ApplyCategoricalFilter\"] = \"categorical-filter\";\n VerbId[\"ApplyRangeFilter\"] = \"range-filter\";\n VerbId[\"ApplyRelativeDateFilter\"] = \"apply-relative-date-Filter\";\n VerbId[\"BlockExtension\"] = \"block-extension\";\n VerbId[\"ChangeParameterValue\"] = \"change-parameter-value\";\n VerbId[\"ChangeSharedFilter\"] = \"change-shared-filter\";\n VerbId[\"ClearFilter\"] = \"clear-filter\";\n VerbId[\"ClearSelectedMarks\"] = \"clear-selected-marks\";\n VerbId[\"CloseDialog\"] = \"close-dialog\";\n VerbId[\"CreateAnnotation\"] = \"create-annotation\";\n VerbId[\"DashboardCategoricalFilter\"] = \"dashboard-categorical-filter\";\n VerbId[\"DisplayDialog\"] = \"display-dialog\";\n VerbId[\"DownloadWorkbook\"] = \"download-workbook\";\n VerbId[\"ExecuteExternalMenuItem\"] = \"execute-external-menu-item\";\n VerbId[\"ExportCrosstab\"] = \"export-crosstab\";\n VerbId[\"ExportData\"] = \"export-data\";\n VerbId[\"ExportImage\"] = \"export-image\";\n VerbId[\"ExportPdf\"] = \"export-pdf\";\n VerbId[\"ExportPowerpoint\"] = \"export-powerpoint\";\n VerbId[\"FindParameter\"] = \"find-parameter\";\n VerbId[\"GetActiveTables\"] = \"get-active-tables\";\n VerbId[\"GetAllDataSources\"] = \"get-all-data-sources\";\n VerbId[\"GetAnnotations\"] = \"get-annotations\";\n VerbId[\"GetCategoricalDomain\"] = \"get-categorical-domain\";\n VerbId[\"GetConnectionDescriptionSummaries\"] = \"get-connection-description-summaries\";\n VerbId[\"GetCurrentSrc\"] = \"get-current-src\";\n VerbId[\"GetCustomViews\"] = \"get-custom-views\";\n VerbId[\"GetDashboardFilters\"] = \"get-dashboard-filters\";\n VerbId[\"GetDataSource\"] = \"get-datasource\";\n VerbId[\"GetDataSourceData\"] = \"get-datasource-data\";\n VerbId[\"GetDataSources\"] = \"get-data-sources\";\n VerbId[\"GetDataSummaryData\"] = \"get-summary-data\";\n VerbId[\"GetDataSummaryDataReader\"] = \"get-summary-data-reader\";\n VerbId[\"GetDataTableReaderPage\"] = \"get-data-table-reader-page\";\n VerbId[\"GetEmbeddingClientInfo\"] = \"get-embedding-client-info\";\n VerbId[\"GetField\"] = \"get-field\";\n VerbId[\"GetFieldAndDataSource\"] = \"get-field-and-datasource\";\n VerbId[\"GetFilters\"] = \"get-filters\";\n VerbId[\"GetFonts\"] = \"get-fonts\";\n VerbId[\"GetHighlightedMarks\"] = \"get-highlighted-marks\";\n VerbId[\"GetJoinDescription\"] = \"get-join-description\";\n VerbId[\"GetLogicalTableData\"] = \"get-logical-table-data\";\n VerbId[\"GetLogicalTableDataReader\"] = \"get-logical-table-data-reader\";\n VerbId[\"GetLogicalTables\"] = \"get-logical-tables\";\n VerbId[\"GetParametersForSheet\"] = \"get-parameters-for-sheet\";\n VerbId[\"GetRangeDomain\"] = \"get-range-domain\";\n VerbId[\"GetSelectedMarks\"] = \"get-selected-marks\";\n VerbId[\"GetSharedFilter\"] = \"get-shared-filter\";\n VerbId[\"GetUnderlyingData\"] = \"get-underlying-data\";\n VerbId[\"GetUnderlyingTableData\"] = \"get-underlying-table-data\";\n VerbId[\"GetUnderlyingTableDataReader\"] = \"get-underlying-table-data-reader\";\n VerbId[\"GetUnderlyingTables\"] = \"get-underlying-tables\";\n VerbId[\"HierarchicalFilter\"] = \"hierachical-filter\";\n VerbId[\"InitializeExtension\"] = \"initialize-extension\";\n VerbId[\"MoveAndResizeZones\"] = \"move-and-resize-zones\";\n VerbId[\"Redo\"] = \"redo\";\n VerbId[\"RefreshDataSource\"] = \"refresh-data-source\";\n VerbId[\"ReleaseDataTableReader\"] = \"release-data-table-reader\";\n VerbId[\"RemoveAnnotation\"] = \"remove-annotation\";\n VerbId[\"RemoveCustomView\"] = \"remove-custom-view\";\n VerbId[\"RemoveExternalMenuItem\"] = \"remove-external-menu-item\";\n VerbId[\"RenameExternalMenu\"] = \"rename-external-menu\";\n VerbId[\"ReplayAnimation\"] = \"replay-animation\";\n VerbId[\"RevertStoryPoint\"] = \"revert-story-point\";\n VerbId[\"RevertWorkbook\"] = \"revert-workbook\";\n VerbId[\"SaveExtensionSettings\"] = \"save-extension-settings\";\n VerbId[\"SaveWorkbookAsCustomView\"] = \"save-workbook-as-custom-view\";\n VerbId[\"SelectByValue\"] = \"select-by-value\";\n VerbId[\"SetActiveCustomViewAsDefault\"] = \"set-active-custom-view-as-default\";\n VerbId[\"SetAutoUpdate\"] = \"set-auto-update\";\n VerbId[\"SetClickThrough\"] = \"set-click-through\";\n VerbId[\"SetSheetSize\"] = \"set-sheet-size\";\n VerbId[\"SetZoneVisibility\"] = \"set-zone-visibility\";\n VerbId[\"Share\"] = \"share\";\n VerbId[\"ShowCustomView\"] = \"show-custom-view\";\n VerbId[\"TestConversionVerb\"] = \"test-conversion-verb\";\n VerbId[\"Undo\"] = \"undo\";\n VerbId[\"UpdateCustomView\"] = \"update-custom-view\";\n VerbId[\"VizAPI\"] = \"viz-api\";\n})(VerbId = exports.VerbId || (exports.VerbId = {}));\n//# sourceMappingURL=Verbs.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar AskDataOptionNames;\n(function (AskDataOptionNames) {\n AskDataOptionNames[\"token\"] = \"token\";\n AskDataOptionNames[\"origin\"] = \"origin\";\n AskDataOptionNames[\"showEmbed\"] = \"showEmbed\";\n AskDataOptionNames[\"showPin\"] = \"showPin\";\n AskDataOptionNames[\"showSave\"] = \"showSave\";\n AskDataOptionNames[\"showShare\"] = \"showShare\";\n AskDataOptionNames[\"debug\"] = \":jsdebug\";\n AskDataOptionNames[\"ApiID\"] = \":apiID\";\n AskDataOptionNames[\"ApiExternalVersion\"] = \":apiExternalVersion\";\n AskDataOptionNames[\"ApiInternalVersion\"] = \":apiInternalVersion\";\n AskDataOptionNames[\"AskDataWebComponent\"] = \":askDataWebComponent\";\n})(AskDataOptionNames = exports.AskDataOptionNames || (exports.AskDataOptionNames = {}));\n//# sourceMappingURL=AskDataInterface.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * These strings were *manually copied* from the server,\n * workgroup/src/silos/tableau-server/libraries/tab-controller-vizql/src/com/tableausoftware/\n * controller/vizql/constants/ParameterKeys.java#L9\n * should be exported instead\n * parameters that vizql will accept in an embedding URL\n **/\nvar VqlParameterNames;\n(function (VqlParameterNames) {\n VqlParameterNames[\"ONE\"] = \"1\";\n VqlParameterNames[\"ALERTS\"] = \":alerts\";\n VqlParameterNames[\"ALIAS\"] = \"alias\";\n VqlParameterNames[\"ALLOW_DEFERRED_BOOTSTRAP\"] = \":allowDeferredBootstrap\";\n VqlParameterNames[\"ALLOW_AUTOGEN_WORKSHEET_PHONE_LAYOUTS\"] = \"allowAutogenWorksheetPhoneLayouts\";\n VqlParameterNames[\"API_ID\"] = \":apiID\";\n VqlParameterNames[\"APP\"] = \":app\";\n VqlParameterNames[\"ATTACHMENT\"] = \"attachment\";\n VqlParameterNames[\"IS_IPAD_APP\"] = \"app\";\n VqlParameterNames[\"ANIMATE_TRANSITION\"] = \":animate_transition\";\n VqlParameterNames[\"ASCENDING\"] = \"ascending\";\n VqlParameterNames[\"AUTHENTICATION\"] = \"authentication\";\n VqlParameterNames[\"ATTRIBUTES\"] = \"attributes\";\n VqlParameterNames[\"AUTHORING_SHEET\"] = \":authSheet\";\n VqlParameterNames[\"AXIS\"] = \"axis\";\n VqlParameterNames[\"BOOTSTRAP_WHEN_NOTIFIED\"] = \":bootstrapWhenNotified\";\n VqlParameterNames[\"BROWSER_BACK_BUTTON_UNDO\"] = \":browserBackButtonUndo\";\n VqlParameterNames[\"BROWSER_RENDERING_ON\"] = \"isBrowserRendering\";\n VqlParameterNames[\"BROWSER_RENDERING_THRESHOLD\"] = \"browserRenderingThreshold\";\n VqlParameterNames[\"CHARSET\"] = \"charset\";\n VqlParameterNames[\"CLIENT_DIMENSION\"] = \"clientDimension\";\n VqlParameterNames[\"CLIENT_IP\"] = \"client_ip\";\n VqlParameterNames[\"CLIENT_NUM\"] = \"clientNum\";\n VqlParameterNames[\"COLON_EMBEDDED\"] = \":embedded\";\n VqlParameterNames[\"COLON_MOBILE\"] = \":mobile\";\n VqlParameterNames[\"COLON_DEEP_LINKING_DISABLED\"] = \":deepLinkingDisabled\";\n VqlParameterNames[\"COLON_WATERMARK\"] = \":watermark\";\n VqlParameterNames[\"COMMENTS\"] = \":comments\";\n VqlParameterNames[\"COMMENTING_ENABLED\"] = \":commentingEnabled\";\n VqlParameterNames[\"COMMENTING_MENTIONS_ENABLED\"] = \":commentingMentions\";\n VqlParameterNames[\"CONNECTION\"] = \"connection\";\n VqlParameterNames[\"CREATED_BY_FEATURE\"] = \"createdByFeature\";\n VqlParameterNames[\"CRYPTED_PASSWORD\"] = \"crypted\";\n VqlParameterNames[\"CSSDEBUG\"] = \":cssdebug\";\n VqlParameterNames[\"CSV\"] = \"csv\";\n VqlParameterNames[\"CUSTOM_VIEWS\"] = \":customViews\";\n VqlParameterNames[\"CV\"] = \":cv\";\n VqlParameterNames[\"CV_ID\"] = \"cvId\";\n VqlParameterNames[\"DASHBOARD_PORT_SIZE\"] = \"dashboardPortSize\";\n VqlParameterNames[\"DATA_DETAILS\"] = \":dataDetails\";\n VqlParameterNames[\"DATASOURCE\"] = \"datasource\";\n VqlParameterNames[\"DEBUG\"] = \":debug\";\n VqlParameterNames[\"DELAY\"] = \":delay\";\n VqlParameterNames[\"DEPTH\"] = \"depth\";\n VqlParameterNames[\"DEVICE_TYPE\"] = \":device\";\n VqlParameterNames[\"DEVICE_PIXEL_RATIO\"] = \"devicePixelRatio\";\n VqlParameterNames[\"DEVICE_PREVIEW_MODE\"] = \":devicepreviewmode\";\n VqlParameterNames[\"DIMENSIONS\"] = \":dimensions\";\n VqlParameterNames[\"DISABLE_SHARED_SESSIONS\"] = \":disable_shared_sessions\";\n VqlParameterNames[\"DISABLE_URL_ACTIONS_POPUPS\"] = \":disableUrlActionsPopups\";\n VqlParameterNames[\"DIRECTION\"] = \"direction\";\n VqlParameterNames[\"DISPLAY_OVERLAY\"] = \":display_overlay\";\n VqlParameterNames[\"DISPLAY_SHARE\"] = \":display_share\";\n VqlParameterNames[\"DISPLAY_SPINNER\"] = \":display_spinner\";\n VqlParameterNames[\"DISPLAY_STATIC_IMAGE\"] = \":display_static_image\";\n VqlParameterNames[\"DISPLAY_TABS\"] = \"display_tabs\";\n VqlParameterNames[\"DISPLAY_VIEW_COUNT\"] = \":display_count\";\n VqlParameterNames[\"IGNORE_STICKY_SESSION\"] = \":ignore_sticky_session\";\n VqlParameterNames[\"INCREMENT_VIEW_COUNT\"] = \":increment_view_count\";\n VqlParameterNames[\"DOCMODE\"] = \"docmode\";\n VqlParameterNames[\"DOMAIN\"] = \"domain\";\n VqlParameterNames[\"DO_WORK\"] = \"do_work\";\n VqlParameterNames[\"DX\"] = \"dx\";\n VqlParameterNames[\"DY\"] = \"dy\";\n VqlParameterNames[\"EDIT_DATA_ALERT\"] = \":editDataAlert\";\n VqlParameterNames[\"EMBED\"] = \":embed\";\n VqlParameterNames[\"EMBEDDED\"] = \"embedded\";\n VqlParameterNames[\"ENCRYPTED\"] = \"encrypted\";\n VqlParameterNames[\"API_EXTERNAL_VERSION\"] = \":apiExternalVersion\";\n VqlParameterNames[\"API_INTERNAL_VERSION\"] = \":apiInternalVersion\";\n VqlParameterNames[\"EXCLUDE\"] = \"exclude\";\n VqlParameterNames[\"EXPORT_FORMAT\"] = \":export_format\";\n VqlParameterNames[\"FIELDNAME\"] = \"fieldname\";\n VqlParameterNames[\"FIELD_NAME\"] = \"field_name\";\n VqlParameterNames[\"FIELD_SEP\"] = \"field_sep\";\n VqlParameterNames[\"FILE\"] = \"file\";\n VqlParameterNames[\"FILTER_TILE_SIZE\"] = \"filterTileSize\";\n VqlParameterNames[\"FN\"] = \"fn\";\n VqlParameterNames[\"FOCUS\"] = \"focus\";\n VqlParameterNames[\"FORCE_CACHE\"] = \"force_cache\";\n VqlParameterNames[\"FORMAT\"] = \"format\";\n VqlParameterNames[\"FORMAT_DATA_VALUE_LOCALLY\"] = \"formatDataValueLocally\";\n VqlParameterNames[\"FROM_WG\"] = \":from_wg\";\n VqlParameterNames[\"GRAPHQL_DATABASE_ID\"] = \":graphQLDatabaseId\";\n VqlParameterNames[\"GRAPHQL_TABLE_ID\"] = \":graphQLTableId\";\n VqlParameterNames[\"GUID\"] = \":guid\";\n VqlParameterNames[\"H\"] = \"h\";\n VqlParameterNames[\"HIDDEN\"] = \"hidden\";\n VqlParameterNames[\"HIDE_CLOSE_BUTTON\"] = \":hideCloseButton\";\n VqlParameterNames[\"HIDE_EDIT_BUTTON\"] = \":hideEditButton\";\n VqlParameterNames[\"HIDE_EDIT_IN_DESKTOP_BUTTON\"] = \":hideEditInDesktopButton\";\n VqlParameterNames[\"HIGH_DPI\"] = \":highdpi\";\n VqlParameterNames[\"IMAGE_SIZE_LIMIT\"] = \"imageSizeLimit\";\n VqlParameterNames[\"TRANSPARENT_LINE_MARKS_LIMIT\"] = \"transparentLineMarkLimit\";\n VqlParameterNames[\"CLIENT_RENDER_PIXEL_LIMIT\"] = \"clientRenderPixelLimit\";\n VqlParameterNames[\"IN\"] = \"in\";\n VqlParameterNames[\"INSTANCE_ID\"] = \":iid\";\n VqlParameterNames[\"IS_GUEST_REDIRECT_FROM_VIZPORTAL\"] = \":isGuestRedirectFromVizportal\";\n VqlParameterNames[\"IS_MARK_ANIMATION_ENABLED\"] = \"isMarkAnimationEnabled\";\n VqlParameterNames[\"IS_VIZPORTAL\"] = \":isVizPortal\";\n VqlParameterNames[\"INPUT_\"] = \"input_string\";\n VqlParameterNames[\"JSDEBUG\"] = \":jsdebug\";\n VqlParameterNames[\"JSON\"] = \"json\";\n VqlParameterNames[\"JSON_ONLY\"] = \":jsonOnly\";\n VqlParameterNames[\"KEEPFILE\"] = \"keepfile\";\n VqlParameterNames[\"KEY\"] = \"key\";\n VqlParameterNames[\"LANGUAGE\"] = \"language\";\n VqlParameterNames[\"LANGUAGE_REQUESTED\"] = \":language\";\n VqlParameterNames[\"LINKTARGET\"] = \":linktarget\";\n VqlParameterNames[\"LOAD_ORDER_ID\"] = \":loadOrderID\";\n VqlParameterNames[\"LOAD_NEWEST_REVISION\"] = \":loadNewestRevision\";\n VqlParameterNames[\"LOCAL_PATHS\"] = \":localPaths\";\n VqlParameterNames[\"LOCALE\"] = \"locale\";\n VqlParameterNames[\"LOCATION_ID\"] = \"locationid\";\n VqlParameterNames[\"LOCATION_TYPE\"] = \"locationtype\";\n VqlParameterNames[\"WORKBOOK_LOCALE\"] = \"workbookLocale\";\n VqlParameterNames[\"MAXROWS\"] = \"maxrows\";\n VqlParameterNames[\"MAX_AGE\"] = \"maxAge\";\n VqlParameterNames[\"MAX_ROWS\"] = \"maxRows\";\n VqlParameterNames[\"METHOD\"] = \"method\";\n VqlParameterNames[\"MOBILE\"] = \"mobile\";\n VqlParameterNames[\"MODIFIER\"] = \"modifier\";\n VqlParameterNames[\"NAME\"] = \"name\";\n VqlParameterNames[\"NAV_TYPE\"] = \"navType\";\n VqlParameterNames[\"NAV_SRC\"] = \"navSrc\";\n VqlParameterNames[\"NOATTACHMENT\"] = \"no-attachment\";\n VqlParameterNames[\"NO_OVERWRITE\"] = \"no_overwrite\";\n VqlParameterNames[\"OPEN_AUTHORING_IN_TOP_WINDOW\"] = \":openAuthoringInTopWindow\";\n VqlParameterNames[\"OPENID_HD\"] = \":openid_hd\";\n VqlParameterNames[\"OPENID_LOGIN_HINT\"] = \":openid_login_hint\";\n VqlParameterNames[\"OAUTHREQUEST\"] = \"oauthrequest\";\n VqlParameterNames[\"OAUTH_CREDENTIAL_IDS\"] = \"oauth_credential_ids\";\n VqlParameterNames[\"OFFLINE_MODE\"] = \":offlinemode\";\n VqlParameterNames[\"ORIGIN\"] = \":origin\";\n VqlParameterNames[\"OVERLAY\"] = \":overlay\";\n VqlParameterNames[\"P\"] = \"p\";\n VqlParameterNames[\"PATH\"] = \"path\";\n VqlParameterNames[\"PANE_RESOLVER_X\"] = \"paneResolverX\";\n VqlParameterNames[\"PANE_RESOLVER_Y\"] = \"paneResolverY\";\n VqlParameterNames[\"PARAM\"] = \"param\";\n VqlParameterNames[\"PARENT_ID\"] = \"parent_id\";\n VqlParameterNames[\"PASSWORD\"] = \"password\";\n VqlParameterNames[\"PATTERN\"] = \"pattern\";\n VqlParameterNames[\"PIXEL_RATIO\"] = \":pixelratio\";\n VqlParameterNames[\"PREFIX\"] = \":prefix\";\n VqlParameterNames[\"PREVIEW\"] = \":preview\";\n VqlParameterNames[\"PRIMARY_CONTENT_URL\"] = \"primary_content_url\";\n VqlParameterNames[\"PROJECT\"] = \"project\";\n VqlParameterNames[\"PROTOCOL\"] = \"protocol\";\n VqlParameterNames[\"PSEUDO\"] = \":pseudo\";\n VqlParameterNames[\"QUERY\"] = \"query\";\n VqlParameterNames[\"R\"] = \"r\";\n VqlParameterNames[\"RANGE_TYPE\"] = \"range_type\";\n VqlParameterNames[\"RECORD_SEP\"] = \"record_sep\";\n VqlParameterNames[\"RECORD_CLIENT_PERFORMANCE\"] = \":record_client_performance\";\n VqlParameterNames[\"RECORD_PERFORMANCE\"] = \":record_performance\";\n VqlParameterNames[\"RECOVER_OLD_SESSION_ID\"] = \":recover_old_session_id\";\n VqlParameterNames[\"RECOVER_SESSION_STATE_TICKETS\"] = \":recover_session_state_tickets\";\n VqlParameterNames[\"REFRESH\"] = \":refresh\";\n VqlParameterNames[\"REFRESHUNMODIFIED\"] = \":refreshunmodified\";\n VqlParameterNames[\"REGION\"] = \"region\";\n VqlParameterNames[\"RELOAD_ON_CUSTOM_VIEW_SAVE\"] = \":reloadOnCustomViewSave\";\n VqlParameterNames[\"RENDER\"] = \":render\";\n VqlParameterNames[\"RENDER_MAPS_CLIENT_SIDE\"] = \"renderMapsClientSide\";\n VqlParameterNames[\"RETRY\"] = \":retry\";\n VqlParameterNames[\"REUSE\"] = \"reuse\";\n VqlParameterNames[\"REUSE_FOREVER\"] = \"reuse_forever\";\n VqlParameterNames[\"REVERT\"] = \":revert\";\n VqlParameterNames[\"SAVE_DB_PASSWORDS\"] = \"save_db_passwords\";\n VqlParameterNames[\"SELECT_X\"] = \"select_x\";\n VqlParameterNames[\"SELECT_Y\"] = \"select_y\";\n VqlParameterNames[\"SESSION_FEATURE_PREFIX\"] = \":ff_\";\n VqlParameterNames[\"SESSION_FLAGS\"] = \":session_feature_flags\";\n VqlParameterNames[\"SHARE_BUTTON\"] = \"share_button\";\n VqlParameterNames[\"SHEET_ID\"] = \"sheet_id\";\n VqlParameterNames[\"SHARED\"] = \"shared\";\n VqlParameterNames[\"SHOWALL\"] = \"showall\";\n VqlParameterNames[\"SHOW_APP_BANNER\"] = \":showAppBanner\";\n VqlParameterNames[\"SHOW_ASK_DATA\"] = \":showAskData\";\n VqlParameterNames[\"SHOW_PARAMS\"] = \"showParams\";\n VqlParameterNames[\"SHOW_SHARE_OPTIONS\"] = \":showShareOptions\";\n VqlParameterNames[\"SIZE\"] = \":size\";\n VqlParameterNames[\"SOURCE\"] = \"source\";\n VqlParameterNames[\"STATE\"] = \"state\";\n VqlParameterNames[\"STICKY_SESSION_KEY\"] = \"stickySessionKey\";\n VqlParameterNames[\"SUBSCRIPTIONS\"] = \":subscriptions\";\n VqlParameterNames[\"SUMMARY\"] = \"summary\";\n VqlParameterNames[\"SUPPRESS_DEFAULT_EDIT_BEHAVIOR\"] = \":suppressDefaultEditBehavior\";\n VqlParameterNames[\"SYNC_SESSION\"] = \":sync_session\";\n VqlParameterNames[\"SYNC_SESSION_STATE\"] = \"sync_session_state\";\n VqlParameterNames[\"TABS\"] = \":tabs\";\n VqlParameterNames[\"TARGET\"] = \"target\";\n VqlParameterNames[\"TARGET_SITE\"] = \"target_site\";\n VqlParameterNames[\"TOOLBAR\"] = \":toolbar\";\n VqlParameterNames[\"TOOLTIP\"] = \":tooltip\";\n VqlParameterNames[\"TS\"] = \"ts\";\n VqlParameterNames[\"UNDERLYING_TABLE_ID\"] = \"underlying_table_id\";\n VqlParameterNames[\"UNDERLYING_TABLE_CAPTION\"] = \"underlying_table_caption\";\n VqlParameterNames[\"UPDATE_TYPE\"] = \"update_type\";\n VqlParameterNames[\"USE_GUEST\"] = \":useGuest\";\n VqlParameterNames[\"USE_INLINE_IMAGES\"] = \"use_inline_images\";\n VqlParameterNames[\"USERAGENT\"] = \"useragent\";\n VqlParameterNames[\"USERNAME\"] = \"username\";\n VqlParameterNames[\"VALUE\"] = \"value\";\n VqlParameterNames[\"VERBOSE_MODE\"] = \"verboseMode\";\n VqlParameterNames[\"VIEW_ID\"] = \"views_id\";\n VqlParameterNames[\"VIZ_SNAPSHOT_ID\"] = \"viz_snapshot_id\";\n VqlParameterNames[\"VW\"] = \":vw\";\n VqlParameterNames[\"W\"] = \"w\";\n VqlParameterNames[\"WORKSHEET_PORT_SIZE\"] = \"worksheetPortSize\";\n VqlParameterNames[\"WATERMARK\"] = \"watermark\";\n VqlParameterNames[\"WATERMARK_MARGIN\"] = \":watermark_margin\";\n VqlParameterNames[\"WB\"] = \":wb\";\n VqlParameterNames[\"WHICH\"] = \"which\";\n VqlParameterNames[\"X\"] = \"x\";\n VqlParameterNames[\"Y\"] = \"y\";\n VqlParameterNames[\"ZID\"] = \"zid\";\n VqlParameterNames[\"ZONE_ID\"] = \"zone_id\";\n VqlParameterNames[\"KEYCHAIN_VERSION\"] = \"keychain_version\";\n VqlParameterNames[\"DATASOURCE_ID\"] = \"datasource_id\";\n VqlParameterNames[\"DATASOURCE_NAME\"] = \"datasource_name\";\n VqlParameterNames[\"LENS_ID\"] = \"lens_id\";\n VqlParameterNames[\"WIDTH\"] = \"width\";\n VqlParameterNames[\"HEIGHT\"] = \"height\";\n // Default Layout params\n VqlParameterNames[\"LAYOUT_VIEWS\"] = \"views\";\n VqlParameterNames[\"LAYOUT_MENUS\"] = \"menus\";\n VqlParameterNames[\"LAYOUT_GEOMETRY\"] = \"geometry\";\n VqlParameterNames[\"LAYOUT_PAGES\"] = \"pages\";\n VqlParameterNames[\"LAYOUT_CACHEURL\"] = \"cacheurl\";\n VqlParameterNames[\"LAYOUT_SHEET\"] = \"sheet\";\n VqlParameterNames[\"LAYOUT_DEPTH\"] = \"depth\";\n})(VqlParameterNames || (VqlParameterNames = {}));\n/**\n * parameters that are only relevant when working with Tableau Public\n * maybe not really necessry to split them out\n */\nvar PublicParameterNames;\n(function (PublicParameterNames) {\n PublicParameterNames[\"SHOW_VIZ_HOME\"] = \":showVizHome\";\n // display view count\n})(PublicParameterNames || (PublicParameterNames = {}));\n/**\n * Map the parameter names as used in the url to what we call them publicly in the embedding library.\n * The only parameters listed here should be the ones that get sent to vizql\n * - this should match the interface at external-contract:VizInterfaces:VizSettings\n */\nvar VizOptionNames;\n(function (VizOptionNames) {\n // publicName = internalStringValue\n VizOptionNames[\"Size\"] = \":size\";\n VizOptionNames[\"Embed\"] = \":embed\";\n VizOptionNames[\"ApiInternalVersion\"] = \":apiInternalVersion\";\n VizOptionNames[\"ApiExternalVersion\"] = \":apiExternalVersion\";\n VizOptionNames[\"ShowVizHome\"] = \":showVizHome\";\n VizOptionNames[\"Jsdebug\"] = \":jsdebug\";\n VizOptionNames[\"BootstrapWhenNotified\"] = \":bootstrapWhenNotified\";\n VizOptionNames[\"NavType\"] = \"navType\";\n VizOptionNames[\"NavSrc\"] = \"navSrc\";\n VizOptionNames[\"debug\"] = \":jsdebug\";\n VizOptionNames[\"ApiID\"] = \":apiID\";\n VizOptionNames[\"disableUrlActionsPopups\"] = \":disableUrlActionsPopups\";\n VizOptionNames[\"hideTabs\"] = \":tabs\";\n VizOptionNames[\"toolbar\"] = \":toolbar\";\n VizOptionNames[\"device\"] = \":device\";\n VizOptionNames[\"instanceIdToClone\"] = \":iid\";\n VizOptionNames[\"touchOptimize\"] = \"mobile\";\n VizOptionNames[\"hideEditButton\"] = \":hideEditButton\";\n VizOptionNames[\"hideEditInDesktopButton\"] = \":hideEditInDesktopButton\";\n VizOptionNames[\"suppressDefaultEditBehavior\"] = \":suppressDefaultEditBehavior\";\n VizOptionNames[\"hideCloseButton\"] = \":hideCloseButton\";\n})(VizOptionNames = exports.VizOptionNames || (exports.VizOptionNames = {}));\n//# sourceMappingURL=VqlInterface.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar guid = require(\"guid\");\nvar JsApiInternalContract_1 = require(\"../JsApiInternalContract\");\nvar CrossFramePreparedMessage_1 = require(\"./CrossFramePreparedMessage\");\nvar MessageTypeChecks_1 = require(\"./MessageTypeChecks\");\nvar MessageTypes_1 = require(\"./interface/MessageTypes\");\n/**\n * The CrossFrameMessenger is the primary export from the api-messaging module. An instance of\n * this class can be instantiated on both sides of a frame boundary to facilitate communication\n * in both directions between the frames. This class implements both the dispatcher and the listener\n * portions, but doesn't require callers to care about both.\n */\nvar CrossFrameMessenger = /** @class */ (function () {\n /**\n * Creates an instance of CrossFrameMessenger. If you would like to use the CrossFrameMessenger as a MessageListener,\n * be sure to call StartListening and register message handlers.\n * @param thisWindow The window object which the CrossFrameMessenger lives. An onMessage listener will be added here.\n * @param [otherWindow] Optional otherWindow which messages will be posted to.\n * If defined, incoming messages must originate from otherWindow to be passed on\n * @param [otherWindowOrigin] The target origin which otherWindow must have in order to receive dispatched messages.\n * This value will be sent as the targetOrigin of a postMessage\n * (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)\n */\n function CrossFrameMessenger(thisWindow, otherWindow, otherWindowOrigin) {\n this.thisWindow = thisWindow;\n this.otherWindow = otherWindow;\n this.otherWindowOrigin = otherWindowOrigin;\n // Make sure to call StartListening\n }\n ///// MessageListener Implementation\n CrossFrameMessenger.prototype.startListening = function () {\n var _this = this;\n // Check if we already are listening, if not, hook up a message listener\n if (!this.unregisterFunction) {\n var boundHandler_1 = this.onMessageReceived.bind(this);\n this.thisWindow.addEventListener('message', boundHandler_1, true);\n this.unregisterFunction = function () { return _this.thisWindow.removeEventListener('message', boundHandler_1, true); };\n }\n };\n CrossFrameMessenger.prototype.stopListening = function () {\n // Stop listening if we have started listening\n if (this.unregisterFunction) {\n this.unregisterFunction();\n this.unregisterFunction = undefined;\n }\n };\n CrossFrameMessenger.prototype.setInitializeMessageHandler = function (handler) {\n this.initializeMessageHandler = handler;\n };\n CrossFrameMessenger.prototype.setCommandResponseMessageHandler = function (handler) {\n this.commandResponseMessageHandler = handler;\n };\n CrossFrameMessenger.prototype.setCommandMessageHandler = function (handler) {\n this.commandMessageHandler = handler;\n };\n CrossFrameMessenger.prototype.setNotificationMessageHandler = function (handler) {\n this.notificationMessageHandler = handler;\n };\n CrossFrameMessenger.prototype.setHandshakeMessageHandler = function (handler) {\n this.handshakeMessageHandler = handler;\n };\n ///// MessageDispatcher Implementation\n /**\n * @param apiVersion api-internal-contract-js version (exported in JsApiInternalConntract)\n * @param crossFrameVersion crossframe messaging version (exported in JsApiInternalConntract)\n * @param options additional options that can be passed at initialization (information about the version of\n * external being used for example)\n */\n CrossFrameMessenger.prototype.prepareInitializationMessage = function (apiVersion, crossFrameVersion, options) {\n var message = {\n msgGuid: guid.raw(),\n msgType: MessageTypes_1.MessageType.Initialize,\n crossFrameVersion: crossFrameVersion,\n apiVersion: apiVersion,\n options: options,\n };\n return this.prepareMessage(message);\n };\n CrossFrameMessenger.prototype.prepareCommandMessage = function (verbId, parameters) {\n var message = {\n msgGuid: guid.raw(),\n msgType: MessageTypes_1.MessageType.Command,\n verbId: verbId,\n parameters: parameters,\n };\n return this.prepareMessage(message);\n };\n CrossFrameMessenger.prototype.prepareCommandResponseMessage = function (commandGuid, data, error) {\n var message = {\n msgGuid: guid.raw(),\n msgType: MessageTypes_1.MessageType.CommandResponse,\n commandGuid: commandGuid,\n data: data,\n error: error,\n };\n if (error) {\n // stringify error object to remove unserializable fields like functions and prevent serialization errors\n message.error = JSON.parse(JSON.stringify(error));\n }\n return this.prepareMessage(message);\n };\n CrossFrameMessenger.prototype.prepareNotificationMessage = function (notificationId, data) {\n var message = {\n msgGuid: guid.raw(),\n msgType: MessageTypes_1.MessageType.Notification,\n notificationId: notificationId,\n data: data,\n };\n return this.prepareMessage(message);\n };\n CrossFrameMessenger.prototype.prepareAckMessage = function () {\n var message = {\n msgGuid: guid.raw(),\n msgType: MessageTypes_1.MessageType.Ack,\n platformVersion: JsApiInternalContract_1.INTERNAL_CONTRACT_VERSION,\n };\n return this.prepareMessage(message);\n };\n /**\n * Prepares a pending message for sending and returns the prepared message\n *\n * @param msg The message to be sent to this.otherWindow\n * @returns The prepared message\n */\n CrossFrameMessenger.prototype.prepareMessage = function (msg) {\n if (!this.otherWindow || !this.otherWindowOrigin) {\n throw 'Other window not initialized, cannot dispatch messages';\n }\n var preparedMessage = new CrossFramePreparedMessage_1.CrossFramePreparedMessage(msg, this.otherWindow, this.otherWindowOrigin);\n return preparedMessage;\n };\n /**\n * Called when a message is received. Does some validation of the message, and then\n * calls an appropriate message handler if one is defined\n *\n * @param event The incoming MessageEvent\n */\n CrossFrameMessenger.prototype.onMessageReceived = function (event) {\n // If we have an otherWindow defined, make sure the message is coming from there\n if (this.otherWindow && event.source !== this.otherWindow) {\n return;\n }\n // Do some validation on event.data to make sure that we have received a real message\n if (!event.data) {\n return;\n }\n var message = event.data;\n if (!MessageTypeChecks_1.isMessage(message)) {\n return;\n }\n // Check the declared message type, validate the message, and call an appropriate hander if one exists\n switch (message.msgType) {\n case MessageTypes_1.MessageType.Initialize: {\n if (!MessageTypeChecks_1.isInitMessage(message) || !this.initializeMessageHandler) {\n return;\n }\n this.initializeMessageHandler(message, event.source);\n break;\n }\n case MessageTypes_1.MessageType.CommandResponse: {\n if (!MessageTypeChecks_1.isCommandResponseMessage(message) || !this.commandResponseMessageHandler) {\n return;\n }\n this.commandResponseMessageHandler(message, event.source);\n break;\n }\n case MessageTypes_1.MessageType.Command: {\n if (!MessageTypeChecks_1.isCommandMessage(message) || !this.commandMessageHandler) {\n return;\n }\n this.commandMessageHandler(message, event.source);\n break;\n }\n case MessageTypes_1.MessageType.Notification: {\n if (!MessageTypeChecks_1.isNotificationMessage(message) || !this.notificationMessageHandler) {\n return;\n }\n this.notificationMessageHandler(message, event.source);\n break;\n }\n case MessageTypes_1.MessageType.Handshake: {\n if (!MessageTypeChecks_1.isHandshakeMessage(message) || !this.handshakeMessageHandler) {\n return;\n }\n this.handshakeMessageHandler(message, event.source);\n break;\n }\n default:\n // Just ignore this since we don't know how to handle the message type\n }\n };\n CrossFrameMessenger.prototype.setOtherWindow = function (otherWindow) {\n this.otherWindow = otherWindow;\n };\n CrossFrameMessenger.prototype.setOtherWindowOrigin = function (origin) {\n this.otherWindowOrigin = origin;\n };\n return CrossFrameMessenger;\n}());\nexports.CrossFrameMessenger = CrossFrameMessenger;\n//# sourceMappingURL=CrossFrameMessenger.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of the PreparedMessage interface used to post messages between\n * two frames using window.postMessage\n */\nvar CrossFramePreparedMessage = /** @class */ (function () {\n /**\n * Creates an instance of CrossFramePreparedMessage.\n * @param _message The message to be sent\n * @param _target The target window where the message will be sent\n * @param _origin The targetOrigin where this message can be received\n */\n function CrossFramePreparedMessage(_message, _target, _origin) {\n this._message = _message;\n this._target = _target;\n this._origin = _origin;\n }\n Object.defineProperty(CrossFramePreparedMessage.prototype, \"messageGuid\", {\n get: function () {\n return this._message.msgGuid;\n },\n enumerable: true,\n configurable: true\n });\n CrossFramePreparedMessage.prototype.send = function () {\n this._target.postMessage(this._message, this._origin);\n return this;\n };\n return CrossFramePreparedMessage;\n}());\nexports.CrossFramePreparedMessage = CrossFramePreparedMessage;\n//# sourceMappingURL=CrossFramePreparedMessage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar guid = require(\"guid\");\nvar Notifications_1 = require(\"../contract/Notifications\");\nvar MessageTypes_1 = require(\"./interface/MessageTypes\");\nvar expectedEmptyNotifications = new Set([\n Notifications_1.NotificationId.EditButtonClicked,\n Notifications_1.NotificationId.EditInDesktopButtonClicked,\n Notifications_1.NotificationId.WorkbookPublished,\n Notifications_1.NotificationId.WorkbookReadyToClose,\n]);\n/* tslint:disable no-any */\nfunction isMessage(data) {\n if (!data) {\n return false;\n }\n var message = data;\n if (!message || !message.msgGuid || !message.msgType) {\n return false;\n }\n if (!guid.isGuid(message.msgGuid)) {\n return false;\n }\n if (typeof message.msgType !== 'string') {\n return false;\n }\n var messageTypes = [\n MessageTypes_1.MessageType.Command,\n MessageTypes_1.MessageType.CommandResponse,\n MessageTypes_1.MessageType.Initialize,\n MessageTypes_1.MessageType.Notification,\n MessageTypes_1.MessageType.Handshake,\n ];\n if (messageTypes.indexOf(message.msgType) < 0) {\n return false;\n }\n return true;\n}\nexports.isMessage = isMessage;\nfunction isVersion(versionNumber) {\n if (!versionNumber) {\n return false;\n }\n var v = versionNumber;\n if (typeof v !== 'object') {\n return false;\n }\n if (typeof v.fix !== 'number' || typeof v.minor !== 'number' || typeof v.major !== 'number') {\n return false;\n }\n return true;\n}\nexports.isVersion = isVersion;\nfunction isInitMessage(message) {\n if (!isMessage(message)) {\n return false;\n }\n var initMessage = message;\n if (initMessage.msgType !== MessageTypes_1.MessageType.Initialize) {\n return false;\n }\n if (!initMessage.apiVersion || !isVersion(initMessage.apiVersion)) {\n return false;\n }\n if (!initMessage.crossFrameVersion || !isVersion(initMessage.crossFrameVersion)) {\n return false;\n }\n return true;\n}\nexports.isInitMessage = isInitMessage;\nfunction isCommandResponseMessage(message) {\n if (!isMessage(message)) {\n return false;\n }\n var crMessage = message;\n if (crMessage.msgType !== MessageTypes_1.MessageType.CommandResponse) {\n return false;\n }\n if (!guid.isGuid(crMessage.commandGuid)) {\n return false;\n }\n if (!crMessage.data && !crMessage.error) {\n return false;\n }\n return true;\n}\nexports.isCommandResponseMessage = isCommandResponseMessage;\nfunction isCommandMessage(message) {\n if (!isMessage(message)) {\n return false;\n }\n var commandMessage = message;\n if (commandMessage.msgType !== MessageTypes_1.MessageType.Command) {\n return false;\n }\n if (!commandMessage.parameters || typeof commandMessage.parameters !== 'object') {\n return false;\n }\n if (!commandMessage.verbId || typeof commandMessage.verbId !== 'string') {\n return false;\n }\n return true;\n}\nexports.isCommandMessage = isCommandMessage;\nfunction isNotificationMessage(message) {\n if (!isMessage(message)) {\n return false;\n }\n var notificationMessage = message;\n if (notificationMessage.msgType !== MessageTypes_1.MessageType.Notification) {\n return false;\n }\n if (!notificationMessage.data && !expectedEmptyNotifications.has(notificationMessage.notificationId)) {\n return false;\n }\n if (!notificationMessage.notificationId || typeof notificationMessage.notificationId !== 'string') {\n return false;\n }\n return true;\n}\nexports.isNotificationMessage = isNotificationMessage;\nfunction isHandshakeMessage(message) {\n if (!isMessage(message)) {\n return false;\n }\n var handshakeMessage = message;\n if (handshakeMessage.msgType !== MessageTypes_1.MessageType.Handshake) {\n return false;\n }\n return true;\n}\nexports.isHandshakeMessage = isHandshakeMessage;\n//# sourceMappingURL=MessageTypeChecks.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Enum defining the 4 different types of messages we have defined\n */\nvar MessageType;\n(function (MessageType) {\n MessageType[\"Initialize\"] = \"initialize\";\n MessageType[\"Notification\"] = \"notification\";\n MessageType[\"Command\"] = \"command\";\n MessageType[\"CommandResponse\"] = \"command-response\";\n MessageType[\"Handshake\"] = \"v-handshake\";\n MessageType[\"Ack\"] = \"v-ack\";\n})(MessageType = exports.MessageType || (exports.MessageType = {}));\n//# sourceMappingURL=MessageTypes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable:no-any\n/**\n * This version converter doesn't actually do anything but is useful for testing or when we have\n * a matching platform and internal version number\n */\nvar IdentityVersionConverter = /** @class */ (function () {\n function IdentityVersionConverter() {\n }\n IdentityVersionConverter.prototype.upgradeExecuteCall = function (verb, parameters) {\n return {\n verb: verb,\n parameters: parameters,\n };\n };\n IdentityVersionConverter.prototype.downgradeExecuteReturn = function (executeResponse) {\n return executeResponse;\n };\n IdentityVersionConverter.prototype.downgradeNotification = function (notification) {\n return notification;\n };\n return IdentityVersionConverter;\n}());\nexports.IdentityVersionConverter = IdentityVersionConverter;\n//# sourceMappingURL=IdentityVersionConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable:no-any\n/**\n * The version converter is designed to allow the platform and external modules\n * to seemlessly communicate over two different versions of the internal API. The only\n * mode it supports is external's version <= platform's version. When executing\n * commands, it is used to upgrade the external representation to what platform knows on the way in\n * and downgrade the representations on the way out. Similarly for notifications, it can\n * downgrade those on the way from platform to external.\n */\nvar StackingVersionConverter = /** @class */ (function () {\n /**\n * Creates a new instance of the StackingVersionConverter\n *\n * @param _externalMajorVersion The major version of the internal contract api-external-js is using\n * @param _platformMajorVersion The major version of the internal contract the api-platform-js is using\n * @param _upgradeExecuteTranslations Ordered list of the translations to perform when upgrading cmd parameters\n * @param _downgradeExecuteTranslations Ordered list of downgrade translations to perform after a cmd\n * @param _downgradeNotificationTranslations Ordered list of downgrade translations to perform on a notification\n */\n function StackingVersionConverter(_externalMajorVersion, _platformMajorVersion, _upgradeExecuteTranslations, _downgradeExecuteTranslations, _downgradeNotificationTranslations) {\n this._externalMajorVersion = _externalMajorVersion;\n this._platformMajorVersion = _platformMajorVersion;\n this._upgradeExecuteTranslations = _upgradeExecuteTranslations;\n this._downgradeExecuteTranslations = _downgradeExecuteTranslations;\n this._downgradeNotificationTranslations = _downgradeNotificationTranslations;\n if (this._externalMajorVersion > this._platformMajorVersion) {\n throw new Error(\"Cannot convert between external version \" + this._externalMajorVersion + \" and \" + this._platformMajorVersion);\n }\n }\n /**\n * Creates a new instance of the StackingVersionConverter\n *\n * @param _externalVersion The version of the internal contract api-external-js is using\n * @param _platformVersion The version of the internal contract the api-platform-js is using\n * @param _upgradeExecuteTranslations Ordered list of the translations to perform when upgrading cmd parameters\n * @param _downgradeExecuteTranslations Ordered list of downgrade translations to perform after a cmd\n * @param _downgradeNotificationTranslations Ordered list of downgrade translations to perform on a notification\n */\n StackingVersionConverter.fromData = function (externalVersion, platformVersion, upgradeExecuteTranslations, downgradeExecuteTranslations, downgradeNotificationTranslations) {\n return new this(externalVersion.major, platformVersion.major, upgradeExecuteTranslations, downgradeExecuteTranslations, downgradeNotificationTranslations);\n };\n StackingVersionConverter.prototype.upgradeExecuteCall = function (verb, parameters) {\n // Perform the upgrade of the verb and parameters to the level that platform is using\n var upgraded = { verb: verb, parameters: parameters };\n for (var _i = 0, _a = this._upgradeExecuteTranslations; _i < _a.length; _i++) {\n var upgradeTranslation = _a[_i];\n upgraded = upgradeTranslation(upgraded.verb, upgraded.parameters);\n }\n return upgraded;\n };\n StackingVersionConverter.prototype.downgradeExecuteReturn = function (executeResponse) {\n // Downgrade the response to what the external module is expecting\n var downgraded = executeResponse;\n for (var _i = 0, _a = this._downgradeExecuteTranslations; _i < _a.length; _i++) {\n var downgradeTranslation = _a[_i];\n downgraded = downgradeTranslation(downgraded);\n }\n return downgraded;\n };\n StackingVersionConverter.prototype.downgradeNotification = function (notification) {\n // Downgrade the notification to what the external module is expecting\n var downgraded = notification;\n for (var _i = 0, _a = this._downgradeNotificationTranslations; _i < _a.length; _i++) {\n var downgradeTranslation = _a[_i];\n downgraded = downgradeTranslation(downgraded);\n }\n return downgraded;\n };\n return StackingVersionConverter;\n}());\nexports.StackingVersionConverter = StackingVersionConverter;\n//# sourceMappingURL=StackingVersionConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar IdentityVersionConverter_1 = require(\"./IdentityVersionConverter\");\nvar StackingVersionConverter_1 = require(\"./StackingVersionConverter\");\nvar VersionTranslations_1 = require(\"./VersionTranslations\");\n/**\n * @returns true if lhs < rhs (ignoring fix number)\n * @param lhs\n * @param rhs\n */\nfunction VersionLessThan(lhs, rhs) {\n if (lhs.major > rhs.major) {\n return false;\n }\n if (lhs.major < rhs.major) {\n return true;\n }\n return lhs.minor < rhs.minor;\n}\nexports.VersionLessThan = VersionLessThan;\n/**\n * @returns true if lhs == rhs (ignoring fix number)\n * @param lhs\n * @param rhs\n */\nfunction VersionEqualTo(lhs, rhs) {\n return lhs.major === rhs.major && lhs.minor === rhs.minor;\n}\nexports.VersionEqualTo = VersionEqualTo;\n// A mapping from an older client version of internal-contract to the current platform version of this contract.\n// Each version bump can have an array of translations to perform in order. Notice that this is\n// different than the major upgrades/downgrades above because it handles both major and minor version changes.\n// Also please note: downgradeExecuteCall is handled on the client/external side rather than platform side.\n// When updating the major or minor version of our internal-contract, you will need to update these data structures.\n// * If there are translations to add, add them to the version to \"upgrade from\" or \"downgrade to\".\nexports.ExecuteMinorUpgrades = {\n 1: {\n 9: [],\n },\n};\nexports.ExecuteMinorDowngrades = {\n 1: {\n 5: [VersionTranslations_1.DowngradeWorksheetNames],\n 9: [],\n },\n};\nexports.NotificationMinorDowngrades = {\n 1: {\n 9: [],\n 10: [VersionTranslations_1.DowngradeFlipboardZoneID],\n },\n};\n/**\n * Creates a new InternalContractVersionConverter which has the ability to upgrade and downgrade the contract\n * between the two versions, which are specified. If externalMajorVersion is greater than platformMajorVersion,\n * an error will be thrown because we won't know how to do those conversions.\n * This converter can handle both major and minor updates when the platform version is greater than external version.\n *\n * @param externalVersion VersionNumber of the internal api which the external module is using\n * @param platformVersion VersionNumber of the internal api which the platform is using\n */\nfunction CreateVersionConverter(externalVersion, platformVersion) {\n return CreateVersionConverterWithTranslators(externalVersion, platformVersion, exports.ExecuteMinorUpgrades, exports.ExecuteMinorDowngrades, exports.NotificationMinorDowngrades);\n}\nexports.CreateVersionConverter = CreateVersionConverter;\n/**\n * Implementation of CreateVersionConverter. This function takes the upgrade, downgrade, and\n * notification arrays so that all the logic can be tested.\n *\n * @param externalVersion VersionNumber of the internal api which the external module is using\n * @param platformVersion VersionNumber of the internal api which the platform is using\n * @param upgrades MajorMinorTranslators for upgrades\n * @param downgrades MajorMinorTranslators for downgrades\n * @param notificationDowngrades MajorMinorTranslators for notification downgrades\n */\nfunction CreateVersionConverterWithTranslators(externalVersion, platformVersion, upgrades, downgrades, notificationDowngrades) {\n var externalMajorVersion = externalVersion.major;\n var externalMinorVersion = externalVersion.minor;\n var platformMajorVersion = platformVersion.major;\n if (externalMajorVersion > platformMajorVersion) {\n throw new Error(\"External version must be less than or equal to platform version.\\n externalMajorVersion=\" + externalMajorVersion + \" platformMajorVersion=\" + platformMajorVersion);\n }\n // If we are using the exact same versions (major.minor), just use the identity converter\n if (VersionEqualTo(externalVersion, platformVersion)) {\n return new IdentityVersionConverter_1.IdentityVersionConverter();\n }\n // Walk the span between the versions we have here and collect the upgrade and downgrades necessary\n var neededExecuteUpgrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, upgrades);\n var neededExecuteDowngrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, downgrades);\n var neededNotificationDowngrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, notificationDowngrades);\n // We want to apply the downgrades in reverse order in case of dependencies between them\n neededExecuteDowngrades.reverse();\n neededNotificationDowngrades.reverse();\n return StackingVersionConverter_1.StackingVersionConverter.fromData(externalVersion, platformVersion, neededExecuteUpgrades, neededExecuteDowngrades, neededNotificationDowngrades);\n}\nexports.CreateVersionConverterWithTranslators = CreateVersionConverterWithTranslators;\nfunction GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, majorMinorTranslators) {\n var neededTranslations = [];\n for (var major = externalMajorVersion; major <= platformMajorVersion; major++) {\n if (major in majorMinorTranslators) {\n var start = major === externalMajorVersion ? externalMinorVersion : 0;\n var maximumMinorVersion = GetMaximumMinorIndex(Object.keys(majorMinorTranslators[major]));\n for (var minor = start; minor <= maximumMinorVersion; minor++) {\n if (minor in majorMinorTranslators[major]) {\n neededTranslations.push.apply(neededTranslations, majorMinorTranslators[major][minor]);\n }\n }\n }\n }\n return neededTranslations;\n}\nfunction GetMaximumMinorIndex(minorVersions) {\n return minorVersions.map(function (a) { return Number(a); }).reduce(function (a, b) { return (a > b ? a : b); });\n}\nexports.GetMaximumMinorIndex = GetMaximumMinorIndex;\n//# sourceMappingURL=VersionConverterFactory.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Notifications_1 = require(\"../contract/Notifications\");\n// This is where we will start to define some of these translations.\n// When modifying existing models, add the requisite conversion functions here, then use them\n// in the VersionConverterFactory implementation. Import old versions as you would any other module\n// 0 <-> Translations\n// Uncomment this line to import from the V0 definition of the API\n// import * as V0 from '@tableau-api-internal-contract-js_v0';\n// 1 <-> 2 Translations\n// Uncomment this line to import from the V1 definition of the API\n// import * as V1 from '@tableau-api-internal-contract-js_v1';\nfunction DowngradeWorksheetNames(executeResponse) {\n // Fix the dashboard friendly name issue. The structures are compatible,\n // so we still return the original reply, but we copy the SheetInfo.name\n // into the DashboardZone.name, where v1 wants to find it.\n var bootstrapInfo = executeResponse.result;\n if (bootstrapInfo.extensionDashboardInfo !== undefined) {\n bootstrapInfo.extensionDashboardInfo.zones.forEach(function (zone) {\n if (zone.sheetInfo) {\n zone.name = zone.sheetInfo.name;\n }\n });\n }\n return executeResponse;\n}\nexports.DowngradeWorksheetNames = DowngradeWorksheetNames;\nfunction DowngradeFlipboardZoneID(notification) {\n // Fix the FlipboardZoneId issue. Older external versions still check for flipboardZoneIDs.\n // When running against a newer server, if flipboardZoneId is absent, set it to default(0).\n if (notification.notificationId === Notifications_1.NotificationId.SelectedMarksChanged) {\n var visualModel = notification.data;\n if (visualModel.flipboardZoneID === undefined) {\n visualModel.flipboardZoneID = 0;\n }\n }\n return notification;\n}\nexports.DowngradeFlipboardZoneID = DowngradeFlipboardZoneID;\n//# sourceMappingURL=VersionTranslations.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable:no-any\n/**\n * This version converter doesn't actually do anything but is useful for testing or when we have\n * a matching platform and external version number\n */\nvar ExternalIdentityVersionConverter = /** @class */ (function () {\n function ExternalIdentityVersionConverter() {\n }\n ExternalIdentityVersionConverter.prototype.downgradeExecuteCall = function (verb, parameters) {\n return {\n verb: verb,\n parameters: parameters,\n };\n };\n ExternalIdentityVersionConverter.prototype.upgradeExecuteReturn = function (executeResponse, verb, parameters) {\n return executeResponse;\n };\n ExternalIdentityVersionConverter.prototype.upgradeNotification = function (notification) {\n return notification;\n };\n return ExternalIdentityVersionConverter;\n}());\nexports.ExternalIdentityVersionConverter = ExternalIdentityVersionConverter;\n//# sourceMappingURL=ExternalIdentityVersionConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// tslint:disable:no-any\n/**\n * The version converter is designed to allow the platform and external modules\n * to seemlessly communicate over two different versions of the internal API. This converter\n * supports external's version(minor) >= platform's version(minor). When executing\n * commands, it is used to downgrade the external representation to what platform knows on the way in\n * and upgrade the representations on the way out.\n */\nvar ExternalStackingVersionConverter = /** @class */ (function () {\n /**\n * Creates a new instance of the StackingVersionConverter\n *\n * @param _externalVersion The version of the internal contract api-external-js is using\n * @param _platformVersion The version of the internal contract the api-platform-js is using\n * @param _downgradeExecuteCallTranslations Ordered list of the translations to perform when downgrading cmd parameters\n * @param _upgradeExecuteReturnTranslations Ordered list of upgrade translations to perform after a cmd is executed\n * @param _upgradeNotificationTranslations Ordered list of upgrade notfications to perform on events\n */\n function ExternalStackingVersionConverter(_externalVersion, _platformVersion, _downgradeExecuteCallTranslations, _upgradeExecuteReturnTranslations, _upgradeNotificationTranslations) {\n this._externalVersion = _externalVersion;\n this._platformVersion = _platformVersion;\n this._downgradeExecuteCallTranslations = _downgradeExecuteCallTranslations;\n this._upgradeExecuteReturnTranslations = _upgradeExecuteReturnTranslations;\n this._upgradeNotificationTranslations = _upgradeNotificationTranslations;\n if (this._externalVersion.major > this._platformVersion.major) {\n throw new Error(\"Cannot convert between external version \" + this._externalVersion.major + \"\\n and \" + this._platformVersion.major);\n }\n }\n ExternalStackingVersionConverter.prototype.downgradeExecuteCall = function (verb, parameters) {\n // Perform the downgrade of the verb and parameters to the level that platform is using\n var downgraded = { verb: verb, parameters: parameters };\n for (var _i = 0, _a = this._downgradeExecuteCallTranslations; _i < _a.length; _i++) {\n var downgradeTranslation = _a[_i];\n downgraded = downgradeTranslation(downgraded.verb, downgraded.parameters);\n }\n return downgraded;\n };\n ExternalStackingVersionConverter.prototype.upgradeExecuteReturn = function (executeResponse, verb, parameters) {\n // Perform the upgrade of the response to what the external module is expecting\n var upgraded = executeResponse;\n for (var _i = 0, _a = this._upgradeExecuteReturnTranslations; _i < _a.length; _i++) {\n var upgradeTranslation = _a[_i];\n upgraded = upgradeTranslation(upgraded, verb, parameters);\n }\n return upgraded;\n };\n ExternalStackingVersionConverter.prototype.upgradeNotification = function (notification) {\n // Perform the upgrade of notification to what the external module is expecting\n var upgraded = notification;\n for (var _i = 0, _a = this._upgradeNotificationTranslations; _i < _a.length; _i++) {\n var upgradeNotification = _a[_i];\n upgraded = upgradeNotification(upgraded);\n }\n return upgraded;\n };\n return ExternalStackingVersionConverter;\n}());\nexports.ExternalStackingVersionConverter = ExternalStackingVersionConverter;\n//# sourceMappingURL=ExternalStackingVersionConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar VersionConverterFactory_1 = require(\"../VersionConverterFactory\");\nvar ExternalIdentityVersionConverter_1 = require(\"./ExternalIdentityVersionConverter\");\nvar ExternalStackingVersionConverter_1 = require(\"./ExternalStackingVersionConverter\");\nvar ExternalVersionTranslations_1 = require(\"./ExternalVersionTranslations\");\n// A mapping from the current client version of internal-contract to an older platform version of the contract.\n// Each version bump can have an array of translations to perform in order.\n// These translations handle downgradeExecuteCall and upgradeExecuteReturn and are meant to be called on the\n// client/external side.\n// When updating the major or minor version of our internal-contract, you will need to update these data structures.\n// * If there are translations to add, add them to the version to 'upgrade from' or 'downgrade to'.\nexports.ExecuteMinorDowngradeCallExternal = {\n 1: {\n 9: [],\n 13: [ExternalVersionTranslations_1.DowngradeUnderlyingTableDataAsync, ExternalVersionTranslations_1.DowngradeLogicalTableDataAsync],\n },\n};\nexports.ExecuteMinorUpgradeReturnExternal = {\n 1: {\n 9: [ExternalVersionTranslations_1.UpgradeDataTableTypes],\n 29: [ExternalVersionTranslations_1.UpgradeDataTableRowsAndColumns],\n },\n};\nexports.ExecuteMinorUpgradeNotification = {\n 1: {\n 9: [],\n },\n};\n/**\n * Creates a new ExternalContractVersionConverter which has the ability to upgrade and downgrade\n * the contract between the two versions which are specified. If externalMajorVersion is less than\n * platformMajorVersion, an ExternalIdentityVersionConverter will be returned.\n * Handles upgrade/downgrade for both major and minor updates.\n *\n * @param externalVersion VersionNumber of the internal api which the external module is using\n * @param platformVersion VersionNumber of the internal api which the platform is using\n */\nfunction CreateExternalCompatibleVersionConverter(externalVersion, platformVersion) {\n return CreateExternalCompatibleVersionConverterWithTranslators(externalVersion, platformVersion, exports.ExecuteMinorDowngradeCallExternal, exports.ExecuteMinorUpgradeReturnExternal, exports.ExecuteMinorUpgradeNotification);\n}\nexports.CreateExternalCompatibleVersionConverter = CreateExternalCompatibleVersionConverter;\n/**\n * Implementation of CreateExternalCompatibleVersionConverterWithTranslators.\n * This function takes the upgrade, downgrade arrays so that all the logic can be tested.\n *\n * @param externalVersion VersionNumber of the internal contract which the external module is using\n * @param platformVersion VersionNumber of the internal contract which the platform is using\n * @param upgrades MajorMinorTranslators for response upgrades\n * @param downgrades MajorMinorTranslators for execute call downgrades\n */\nfunction CreateExternalCompatibleVersionConverterWithTranslators(externalVersion, platformVersion, downgrades, upgrades, upgradeNotifications) {\n var externalMajorVersion = externalVersion.major;\n var platformMajorVersion = platformVersion.major;\n var platformMinorVersion = platformVersion.minor;\n // This check is present in VersionConverterFactory. We throw the same error here as well.\n // Hence we only need to check the minor versions for translations.\n if (externalMajorVersion > platformMajorVersion) {\n throw new Error(\"External version must be less than or equal to platform version.\\n externalMajorVersion=\" + externalMajorVersion + \" platformMajorVersion=\" + platformMajorVersion);\n }\n if (externalMajorVersion < platformMajorVersion || VersionConverterFactory_1.VersionEqualTo(externalVersion, platformVersion)) {\n return new ExternalIdentityVersionConverter_1.ExternalIdentityVersionConverter();\n }\n // Walk the span between the versions we have here and collect the upgrade and downgrades necessary\n var neededExecuteCallDowngrade = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, downgrades);\n var neededExecuteReturnUpgrades = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, upgrades);\n var neededNotificationUpgrades = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, upgradeNotifications);\n // Reverse the downgrade calls, so that we start the downgrade from the external version to the platform version\n neededExecuteCallDowngrade.reverse();\n return new ExternalStackingVersionConverter_1.ExternalStackingVersionConverter(externalVersion, platformVersion, neededExecuteCallDowngrade, neededExecuteReturnUpgrades, neededNotificationUpgrades);\n}\nexports.CreateExternalCompatibleVersionConverterWithTranslators = CreateExternalCompatibleVersionConverterWithTranslators;\nfunction GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, majorMinorTranslators) {\n var neededTranslations = [];\n if (platformMajorVersion in majorMinorTranslators) {\n var start = platformMinorVersion;\n var maximumMinorVersion = VersionConverterFactory_1.GetMaximumMinorIndex(Object.keys(majorMinorTranslators[platformMajorVersion]));\n for (var minor = start; minor <= maximumMinorVersion; minor++) {\n if (minor in majorMinorTranslators[platformMajorVersion]) {\n neededTranslations.push.apply(neededTranslations, majorMinorTranslators[platformMajorVersion][minor]);\n }\n }\n }\n return neededTranslations;\n}\n//# sourceMappingURL=ExternalVersionConverterFactory.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar JsApiInternalContract_1 = require(\"../../JsApiInternalContract\");\n// 1.2 -> 1.0 Translations\n// Uncomment this line to import from the V1 definition of the API\n// import * as V1 from '@tableau-api-internal-contract-js_v1';\n/**\n * Prior to 2019.2 (internal-contract v1.9), DataValue.value were all strings.\n * Go through all DataValue objects. If we have a string, but the type should not be a string,\n * convert it to the correct type. The type of DataValue.value is 'any' in the contract, so\n * this change doesn't need any updates to classes or types.\n */\nfunction UpgradeDataTableTypes(executeResponse, verb, parameters) {\n if (!executeResponse) {\n return executeResponse;\n }\n var oldUnderlyingDataTable = executeResponse.result;\n if (oldUnderlyingDataTable.data !== undefined && oldUnderlyingDataTable.isSummary !== undefined) {\n convertDataValues(oldUnderlyingDataTable.data);\n return executeResponse;\n }\n var oldSelectedMarksTable = executeResponse.result;\n if (oldSelectedMarksTable.data !== undefined && Array.isArray(oldSelectedMarksTable.data)) {\n oldSelectedMarksTable.data.forEach(function (marksTable) {\n convertDataValues(marksTable);\n });\n return executeResponse;\n }\n return executeResponse;\n}\nexports.UpgradeDataTableTypes = UpgradeDataTableTypes;\n/**\n * Prior to 2020.2 (internal-contract v1.13 and older), worksheet.getUnderlyingTableDataAsync doesn't exist.\n * Map it to the older GetUnderlyingData verb and validate the the logical table Id.\n **/\nfunction DowngradeUnderlyingTableDataAsync(verb, parameters) {\n if (verb === JsApiInternalContract_1.VerbId.GetUnderlyingTableData) {\n validateParametersForObjectModel(verb, parameters);\n verb = JsApiInternalContract_1.VerbId.GetUnderlyingData;\n }\n return {\n verb: verb,\n parameters: parameters,\n };\n}\nexports.DowngradeUnderlyingTableDataAsync = DowngradeUnderlyingTableDataAsync;\n/**\n * Prior to 2020.2 (internal-contract v1.13 and older), datasource.getLogicalTableDataAsync doesn't exist.\n * Map it to the older GetDataSourceData verb and validate the the logical table Id.\n **/\nfunction DowngradeLogicalTableDataAsync(verb, parameters) {\n if (verb === JsApiInternalContract_1.VerbId.GetLogicalTableData) {\n validateParametersForObjectModel(verb, parameters);\n verb = JsApiInternalContract_1.VerbId.GetDataSourceData;\n }\n return {\n verb: verb,\n parameters: parameters,\n };\n}\nexports.DowngradeLogicalTableDataAsync = DowngradeLogicalTableDataAsync;\nfunction convertDataValues(table) {\n // dataTable is a two-dimensional array of data. First index is the row, second is the column.\n if (table === undefined || table.dataTable === undefined || !Array.isArray(table.dataTable)) {\n return;\n }\n table.dataTable.forEach(function (row) {\n row.forEach(function (dataValue, columnIndex) {\n var value = dataValue.value;\n if (value !== null) {\n dataValue.value = JsApiInternalContract_1.DataTypeConverter.convertValueAsStringToValue(value, table.headers[columnIndex].dataType);\n }\n });\n });\n}\n// ToDo: TFS1069027 Refactor input verbs & parameters in api-internal-contract Upgrade/Downgrade framework\nfunction validateParametersForObjectModel(verb, parameters) {\n if (parameters[JsApiInternalContract_1.ParameterId.LogicalTableId] !== JsApiInternalContract_1.ApiShowDataTableSentinel.SingleTableId) {\n throw new Error(\"Invalid logical table id passed to \" + verb + \".\");\n }\n}\n/**\n * Prior to 2021.2 (internal-contract v1.29 and below), getSummaryDataAsync did not support maxRows,\n * and any get...DataAsync did not support columnsToIncludeById.\n * Trim result to maxRows if it is included in the parameters for getSummaryDataAsync\n * Trim columns to columnsToInclude if included in the parameters for any get...DataAsync\n */\nfunction UpgradeDataTableRowsAndColumns(executeResponse, verb, parameters) {\n if (isGetSummaryDataVerb(verb) && parameters[JsApiInternalContract_1.ParameterId.MaxRows]) {\n executeResponse = adjustDataRowLength(executeResponse, parameters[JsApiInternalContract_1.ParameterId.MaxRows]);\n }\n if (isGetTableDataVerb(verb) && parameters[JsApiInternalContract_1.ParameterId.ColumnsToIncludeById]) {\n executeResponse = adjustDataColumns(executeResponse, parameters[JsApiInternalContract_1.ParameterId.ColumnsToIncludeById]);\n }\n return executeResponse;\n}\nexports.UpgradeDataTableRowsAndColumns = UpgradeDataTableRowsAndColumns;\nfunction isGetSummaryDataVerb(verb) {\n return verb === JsApiInternalContract_1.VerbId.GetDataSummaryData;\n}\nfunction isGetTableDataVerb(verb) {\n return (verb === JsApiInternalContract_1.VerbId.GetDataSummaryData ||\n verb === JsApiInternalContract_1.VerbId.GetUnderlyingTableData ||\n verb === JsApiInternalContract_1.VerbId.GetLogicalTableData ||\n verb === JsApiInternalContract_1.VerbId.GetDataSourceData ||\n verb === JsApiInternalContract_1.VerbId.GetUnderlyingData);\n}\nfunction adjustDataRowLength(executeResponse, maxRows) {\n var underlyingDataTable = executeResponse.result;\n if (!underlyingDataTable.data || !Array.isArray(underlyingDataTable.data.dataTable)) {\n return executeResponse;\n }\n if (maxRows > 0 && maxRows < underlyingDataTable.data.dataTable.length) {\n underlyingDataTable.data.dataTable.length = maxRows;\n }\n return executeResponse;\n}\nfunction adjustDataColumns(executeResponse, columnsToInclude) {\n if (columnsToInclude.length === 0) {\n return executeResponse;\n }\n // verify that we have a valid UnderlyingDataTable\n var underlyingDataTable = executeResponse.result;\n if (!underlyingDataTable.data || !Array.isArray(underlyingDataTable.data.dataTable) || !Array.isArray(underlyingDataTable.data.headers)) {\n return executeResponse;\n }\n // 1. filter the headers to only columnsToInclude\n // 2. use the new headers to filter all rows\n // 3. update the indices in our new headers\n var newHeaders = underlyingDataTable.data.headers.filter(function (header, index) {\n return columnsToInclude.find(function (name) { return name === header.fieldName; });\n });\n underlyingDataTable.data.dataTable.forEach(function (row, index) {\n underlyingDataTable.data.dataTable[index] = row.filter(function (value, valueIndex) { return newHeaders.findIndex(function (header) { return header.index === valueIndex; }) !== -1; });\n });\n var newIndex = 0;\n underlyingDataTable.data.headers = newHeaders.map(function (header) {\n header.index = newIndex++;\n return header;\n });\n return executeResponse;\n}\n//# sourceMappingURL=ExternalVersionTranslations.js.map","\"use strict\";\n// Export everything which had been previously in the api-shared module\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ApiVersion_1 = require(\"./ApiShared/ApiVersion\");\nexports.ApiVersion = ApiVersion_1.ApiVersion;\nvar ExternalToInternalEnumMappings_1 = require(\"./ApiShared/EnumMappings/ExternalToInternalEnumMappings\");\nexports.ExternalToInternalEnumMappings = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings;\n__export(require(\"./ApiShared/CrossFrame/CrossFrameBootstrap\"));\nvar CrossFrameDispatcher_1 = require(\"./ApiShared/CrossFrame/CrossFrameDispatcher\");\nexports.CrossFrameDispatcher = CrossFrameDispatcher_1.CrossFrameDispatcher;\nvar DataSource_1 = require(\"./ApiShared/DataSource\");\nexports.DataSource = DataSource_1.DataSource;\nvar InternalToExternalEnumMappings_1 = require(\"./ApiShared/EnumMappings/InternalToExternalEnumMappings\");\nexports.InternalToExternalEnumMappings = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings;\nvar EventListenerManager_1 = require(\"./ApiShared/EventListenerManager\");\nexports.EventListenerManager = EventListenerManager_1.EventListenerManager;\nvar Field_1 = require(\"./ApiShared/Field\");\nexports.Field = Field_1.Field;\nvar CustomViewImpl_1 = require(\"./ApiShared/Impl/CustomViewImpl\");\nexports.CustomViewImpl = CustomViewImpl_1.CustomViewImpl;\nvar DashboardImpl_1 = require(\"./ApiShared/Impl/DashboardImpl\");\nexports.DashboardImpl = DashboardImpl_1.DashboardImpl;\nvar DashboardObjectImpl_1 = require(\"./ApiShared/Impl/DashboardObjectImpl\");\nexports.DashboardObjectImpl = DashboardObjectImpl_1.DashboardObjectImpl;\nvar DataSourceImpl_1 = require(\"./ApiShared/Impl/DataSourceImpl\");\nexports.DataSourceImpl = DataSourceImpl_1.DataSourceImpl;\nvar ParameterImpl_1 = require(\"./ApiShared/Impl/ParameterImpl\");\nexports.ParameterImpl = ParameterImpl_1.ParameterImpl;\nvar SheetImpl_1 = require(\"./ApiShared/Impl/SheetImpl\");\nexports.SheetImpl = SheetImpl_1.SheetImpl;\nvar SheetInfoImpl_1 = require(\"./ApiShared/Impl/SheetInfoImpl\");\nexports.SheetInfoImpl = SheetInfoImpl_1.SheetInfoImpl;\nvar SingleEventManagerImpl_1 = require(\"./ApiShared/Impl/SingleEventManagerImpl\");\nexports.SingleEventManagerImpl = SingleEventManagerImpl_1.SingleEventManagerImpl;\nvar StoryImpl_1 = require(\"./ApiShared/Impl/StoryImpl\");\nexports.StoryImpl = StoryImpl_1.StoryImpl;\nvar StoryPointImpl_1 = require(\"./ApiShared/Impl/StoryPointImpl\");\nexports.StoryPointImpl = StoryPointImpl_1.StoryPointImpl;\nvar StoryPointInfoImpl_1 = require(\"./ApiShared/Impl/StoryPointInfoImpl\");\nexports.StoryPointInfoImpl = StoryPointInfoImpl_1.StoryPointInfoImpl;\nvar WorkbookImpl_1 = require(\"./ApiShared/Impl/WorkbookImpl\");\nexports.WorkbookImpl = WorkbookImpl_1.WorkbookImpl;\nvar WorksheetImpl_1 = require(\"./ApiShared/Impl/WorksheetImpl\");\nexports.WorksheetImpl = WorksheetImpl_1.WorksheetImpl;\nvar Point_1 = require(\"./ApiShared/Point\");\nexports.Point = Point_1.Point;\nvar ClientInfoServiceImpl_1 = require(\"./ApiShared/Services/impl/ClientInfoServiceImpl\");\nexports.ClientInfoServiceImpl = ClientInfoServiceImpl_1.ClientInfoServiceImpl;\nvar NotificationServiceImpl_1 = require(\"./ApiShared/Services/impl/NotificationServiceImpl\");\nexports.NotificationServiceImpl = NotificationServiceImpl_1.NotificationServiceImpl;\nvar NotificationServiceImplBase_1 = require(\"./ApiShared/Services/impl/NotificationServiceImplBase\");\nexports.NotificationServiceImplBase = NotificationServiceImplBase_1.NotificationServiceImplBase;\nexports.Registration = NotificationServiceImplBase_1.Registration;\nvar ServiceImplBase_1 = require(\"./ApiShared/Services/impl/ServiceImplBase\");\nexports.ServiceImplBase = ServiceImplBase_1.ServiceImplBase;\nvar SizeServiceImpl_1 = require(\"./ApiShared/Services/impl/SizeServiceImpl\");\nexports.SizeServiceImpl = SizeServiceImpl_1.SizeServiceImpl;\nvar StoryActivationServiceImpl_1 = require(\"./ApiShared/Services/impl/StoryActivationServiceImpl\");\nexports.StoryActivationServiceImpl = StoryActivationServiceImpl_1.StoryActivationServiceImpl;\n__export(require(\"./ApiShared/Services/RegisterAllSharedServices\"));\n__export(require(\"./ApiShared/Services/ServiceRegistry\"));\nvar TableauError_1 = require(\"./ApiShared/TableauError\");\nexports.TableauError = TableauError_1.TableauError;\nvar Deferred_1 = require(\"./ApiShared/Utils/Deferred\");\nexports.Deferred = Deferred_1.Deferred;\nvar ErrorHelpers_1 = require(\"./ApiShared/Utils/ErrorHelpers\");\nexports.ErrorHelpers = ErrorHelpers_1.ErrorHelpers;\nvar SheetUtils_1 = require(\"./ApiShared/Utils/SheetUtils\");\nexports.SheetUtils = SheetUtils_1.SheetUtils;\nvar VersionNumber_1 = require(\"./ApiShared/VersionNumber\");\nexports.VersionNumber = VersionNumber_1.VersionNumber;\nvar VersionedExternalApiDispatcher_1 = require(\"./VersionedExternalApiDispatcher\");\nexports.VersionedExternalApiDispatcher = VersionedExternalApiDispatcher_1.VersionedExternalApiDispatcher;\n//# sourceMappingURL=ApiShared.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar VersionNumber_1 = require(\"./VersionNumber\");\n/**\n * This is the singleton wrapper of VersionNumber\n */\nvar ApiVersion = /** @class */ (function () {\n function ApiVersion() {\n }\n Object.defineProperty(ApiVersion, \"Instance\", {\n /**\n * Gets the singleton instance of the version number.\n */\n get: function () {\n return ApiVersion._instance;\n },\n enumerable: true,\n configurable: true\n });\n ApiVersion.SetVersionNumber = function (numString, isAlpha) {\n ApiVersion._instance = new VersionNumber_1.VersionNumber(numString, isAlpha);\n };\n return ApiVersion;\n}());\nexports.ApiVersion = ApiVersion;\n//# sourceMappingURL=ApiVersion.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of a connection summary.\n * This does not follow the Impl pattern as it is just a property bag.\n */\nvar ConnectionSummary = /** @class */ (function () {\n function ConnectionSummary(_connectionInfo) {\n this._connectionInfo = _connectionInfo;\n }\n Object.defineProperty(ConnectionSummary.prototype, \"name\", {\n get: function () {\n return this._connectionInfo.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ConnectionSummary.prototype, \"id\", {\n get: function () {\n return this._connectionInfo.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ConnectionSummary.prototype, \"serverURI\", {\n get: function () {\n return this._connectionInfo.serverURI;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ConnectionSummary.prototype, \"type\", {\n get: function () {\n return this._connectionInfo.type;\n },\n enumerable: true,\n configurable: true\n });\n return ConnectionSummary;\n}());\nexports.ConnectionSummary = ConnectionSummary;\n//# sourceMappingURL=ConnectionSummary.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar CrossFrameDispatcher_1 = require(\"./CrossFrameDispatcher\");\n// Checks to see if we are running in an iframe currently: https://stackoverflow.com/a/326076/8821153\nfunction inIframe(thisWindow) {\n try {\n return thisWindow.self !== thisWindow.parent;\n }\n catch (e) {\n return true;\n }\n}\n/**\n * Attempts to bootstrap the extension with a cross-frame parent where Tableau is running\n *\n * @param thisWindow The window which we are running in (injected for unit testing purposes)\n * @param internalContractVersion The version number of the internal contract we are using\n * @returns A promise which is doing the actual bootstrapping\n */\nfunction doCrossFrameBootstrap(thisWindow, internalContractVersion, options) {\n return new Promise(function (resolve, reject) {\n var parent;\n // Normally, we are running inside an iframe. The exception to this is\n // when we are running as an extension inside a dialog as part of the UINamespace\n // functionality. In that case, we want the opener of this window rather than the parent.\n if (!inIframe(thisWindow)) {\n parent = thisWindow.opener;\n }\n else {\n parent = thisWindow.parent;\n }\n if (!parent) {\n reject('This extension is not running inside an iframe, desktop, or popup window. Initialization failed.');\n }\n // Create the messenger which will do he communication between this window and our parent\n // Since we don't know where we are running yet, we have to make this initial origin '*'. Once\n // we have successfully initialized our extension, we will limit where we send messages\n var messenger = new api_internal_contract_js_1.CrossFrameMessenger(thisWindow, parent, '*');\n // Prepare to send an initialization message to the parent frame\n var initializationMessage = messenger.prepareInitializationMessage(internalContractVersion, api_internal_contract_js_1.MESSAGING_VERSION, options);\n // When we receive a response back from the parent, we check to make sure the guids match and then we know\n // that the parent is aware of us and we can start communicating\n messenger.setCommandResponseMessageHandler(function (msg) {\n // Verify we are getting a response from our initialize message\n if (msg.commandGuid === initializationMessage.messageGuid) {\n // The versioning of the dispatcher happens on the other side of our frame, and\n // in a wrapper on this side. This one doesn't have any version knowledge.\n var dispatcherFactory = function () { return new CrossFrameDispatcher_1.CrossFrameDispatcher(messenger); };\n resolve(dispatcherFactory);\n }\n });\n // Now that our handlers are ready, start listening and send our initialization message\n messenger.startListening();\n initializationMessage.send();\n });\n}\nexports.doCrossFrameBootstrap = doCrossFrameBootstrap;\n//# sourceMappingURL=CrossFrameBootstrap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\n/**\n * This is an implementation of the InternalApiDispatcher interface which functions by passing messages\n * across a frame boundary. This is usually between the code where our javscript library has been included\n * by a 3rd party dev and another frame where Tableau server has content.\n */\nvar CrossFrameDispatcher = /** @class */ (function () {\n /**\n * Creates an instance of CrossFrameDispatcher which will use the given messenger to communicate\n * @param _messenger an instantiated and listening messenger object\n */\n function CrossFrameDispatcher(_messenger) {\n this._messenger = _messenger;\n // Collection of pending promises which are waiting to be resolved. When we receive a response back from the other frame,\n // these promises can be either resolved or rejected\n this._pendingPromises = {};\n // The collection of notification handlers which have been registered with this dispatcher\n this._notificationHandlers = [];\n if (!this._messenger) {\n throw 'Missing messenger object';\n }\n // Set up our message handlers. We only care about incoming notifications and command responses\n this._messenger.setCommandResponseMessageHandler(this.onCommandResponse.bind(this));\n this._messenger.setNotificationMessageHandler(this.onNotification.bind(this));\n }\n ////// Start InternalApiDispatcher implementation\n CrossFrameDispatcher.prototype.execute = function (verb, parameters) {\n var _this = this;\n // To execute a verb, we first prepare a command message and then define a promise.\n var preparedMessage = this._messenger.prepareCommandMessage(verb, parameters);\n var promise = new Promise(function (resolve, reject) {\n // Save off the pending promise by the messageGuid we are about to send. When a response is\n // received, we'll be able to resolve this promise with the result\n _this._pendingPromises[preparedMessage.messageGuid] = { resolve: resolve, reject: reject };\n });\n // Actually send the message and return the promise\n preparedMessage.send();\n return promise;\n };\n CrossFrameDispatcher.prototype.registerNotificationHandler = function (handler) {\n this._notificationHandlers.push(handler);\n };\n CrossFrameDispatcher.prototype.unregisterNotificationHandler = function (handler) {\n this._notificationHandlers = this._notificationHandlers.filter(function (h) { return h !== handler; });\n };\n ////// End InternalApiDispatcher implementation\n CrossFrameDispatcher.prototype.onCommandResponse = function (response) {\n // We got a command response, look through the pending promises and resolve\n if (Object.keys(this._pendingPromises).indexOf(response.commandGuid) < 0) {\n return; // We don't have any reference to this command, just return\n }\n var pendingPromise = this._pendingPromises[response.commandGuid];\n // If we have an error defined, reject the promise\n if (response.error) {\n pendingPromise.reject(response.error);\n }\n // If we have data defined, resolve the promise\n if (response.data) {\n pendingPromise.resolve({ result: response.data });\n }\n // Clean up our pending promises object\n delete this._pendingPromises[response.commandGuid];\n };\n CrossFrameDispatcher.prototype.onNotification = function (notificationMessage) {\n // Go through each notification handler we have registered and let them know a notification came in\n for (var _i = 0, _a = this._notificationHandlers; _i < _a.length; _i++) {\n var handler = _a[_i];\n try {\n handler({ notificationId: notificationMessage.notificationId, data: notificationMessage.data });\n }\n catch (e) {\n // Incase of a IncompatibleVersionError, re-throw the error.\n if (e.errorCode === api_external_contract_js_1.EmbeddingErrorCodes.IncompatibleVersionError) {\n throw e;\n }\n // Else Ignore so if one handler errors, the other still get the message.\n }\n }\n };\n return CrossFrameDispatcher;\n}());\nexports.CrossFrameDispatcher = CrossFrameDispatcher;\n//# sourceMappingURL=CrossFrameDispatcher.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar DataSource = /** @class */ (function () {\n function DataSource(_dataSourceImpl) {\n this._dataSourceImpl = _dataSourceImpl;\n }\n Object.defineProperty(DataSource.prototype, \"name\", {\n get: function () {\n return this._dataSourceImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"id\", {\n get: function () {\n return this._dataSourceImpl.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"fields\", {\n get: function () {\n return this._dataSourceImpl.fields;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"extractUpdateTime\", {\n get: function () {\n return this._dataSourceImpl.extractUpdateTime;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"isExtract\", {\n get: function () {\n return this._dataSourceImpl.isExtract;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSource.prototype, \"isPublished\", {\n get: function () {\n return this._dataSourceImpl.isPublished;\n },\n enumerable: true,\n configurable: true\n });\n DataSource.prototype.publishedUrl = function () {\n return this._dataSourceImpl.publishedUrl();\n };\n DataSource.prototype.refreshAsync = function () {\n return this._dataSourceImpl.refreshAsync();\n };\n DataSource.prototype.getActiveTablesAsync = function () {\n console.warn('DataSource.getActiveTablesAsync is deprecated. Please use DataSource.getLogicalTablesAsync.');\n return this._dataSourceImpl.getActiveTablesAsync();\n };\n DataSource.prototype.getConnectionSummariesAsync = function () {\n return this._dataSourceImpl.getConnectionSummariesAsync();\n };\n DataSource.prototype.getUnderlyingDataAsync = function (options) {\n console.warn('DataSource.getUnderlyingDataAsync is deprecated. Please use ' +\n 'DataSource.getLogicalTablesAsync and DataSource.getLogicalTableDataAsync.');\n return this._dataSourceImpl.getUnderlyingDataAsync(options);\n };\n DataSource.prototype.getLogicalTablesAsync = function () {\n return this._dataSourceImpl.getLogicalTablesAsync();\n };\n DataSource.prototype.getLogicalTableDataAsync = function (logicalTableId, options) {\n return this._dataSourceImpl.getLogicalTableDataAsync(logicalTableId, options);\n };\n DataSource.prototype.getLogicalTableDataReaderAsync = function (logicalTableId, pageRowCount, options) {\n return this._dataSourceImpl.getLogicalTableDataReaderAsync(logicalTableId, pageRowCount, options);\n };\n return DataSource;\n}());\nexports.DataSource = DataSource;\n//# sourceMappingURL=DataSource.js.map","\"use strict\";\nvar _a, _b, _c, _d, _e, _f, _g, _h, _j;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar EnumConverter_1 = require(\"../Utils/EnumConverter\");\n/* tslint:disable:typedef - Disable this to make declaring these classes a bit easier */\n/**\n * Maps enums used by the external-api-contract to the enums used\n * in the internal-api-contract, which developers code against.\n */\nvar ExternalToInternalEnumMappings = /** @class */ (function () {\n function ExternalToInternalEnumMappings() {\n }\n ExternalToInternalEnumMappings.filterDomainType = new EnumConverter_1.EnumConverter((_a = {},\n _a[api_external_contract_js_1.FilterDomainType.Relevant] = api_internal_contract_js_1.FilterDomainType.Relevant,\n _a[api_external_contract_js_1.FilterDomainType.Database] = api_internal_contract_js_1.FilterDomainType.Database,\n _a));\n ExternalToInternalEnumMappings.nullOptions = new EnumConverter_1.EnumConverter((_b = {},\n _b[api_external_contract_js_1.FilterNullOption.AllValues] = api_internal_contract_js_1.FilterNullOption.AllValues,\n _b[api_external_contract_js_1.FilterNullOption.NonNullValues] = api_internal_contract_js_1.FilterNullOption.NonNullValues,\n _b[api_external_contract_js_1.FilterNullOption.NullValues] = api_internal_contract_js_1.FilterNullOption.NullValues,\n _b));\n ExternalToInternalEnumMappings.filterUpdateType = new EnumConverter_1.EnumConverter((_c = {},\n _c[api_external_contract_js_1.FilterUpdateType.Add] = api_internal_contract_js_1.FilterUpdateType.Add,\n _c[api_external_contract_js_1.FilterUpdateType.All] = api_internal_contract_js_1.FilterUpdateType.All,\n _c[api_external_contract_js_1.FilterUpdateType.Remove] = api_internal_contract_js_1.FilterUpdateType.Remove,\n _c[api_external_contract_js_1.FilterUpdateType.Replace] = api_internal_contract_js_1.FilterUpdateType.Replace,\n _c));\n ExternalToInternalEnumMappings.setVisibilityType = new EnumConverter_1.EnumConverter((_d = {},\n _d[api_external_contract_js_1.ZoneVisibilityType.Show] = true,\n _d[api_external_contract_js_1.ZoneVisibilityType.Hide] = false,\n _d));\n ExternalToInternalEnumMappings.setReplaySpeedType = new EnumConverter_1.EnumConverter((_e = {},\n // these numbers are duration multipliers\n // 2.0, for example, doubles the duration of the replay, slowing it down to 0.5x speed\n _e[api_external_contract_js_1.ReplaySpeedType.Slow] = 2.0,\n _e[api_external_contract_js_1.ReplaySpeedType.Normal] = 1.0,\n _e[api_external_contract_js_1.ReplaySpeedType.Fast] = 0.5,\n _e));\n ExternalToInternalEnumMappings.showDataTableFormatType = new EnumConverter_1.EnumConverter((_f = {},\n _f[api_external_contract_js_1.IncludeDataValuesOption.AllValues] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeAndFormattedValues,\n _f[api_external_contract_js_1.IncludeDataValuesOption.OnlyNativeValues] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeValuesOnly,\n _f[api_external_contract_js_1.IncludeDataValuesOption.OnlyFormattedValues] = api_internal_contract_js_1.ApiShowDataTableFormat.FormattedValuesOnly,\n _f));\n ExternalToInternalEnumMappings.periodType = new EnumConverter_1.EnumConverter((_g = {},\n _g[api_external_contract_js_1.PeriodType.Years] = api_internal_contract_js_1.DateStepPeriod.Years,\n _g[api_external_contract_js_1.PeriodType.Quarters] = api_internal_contract_js_1.DateStepPeriod.Quarters,\n _g[api_external_contract_js_1.PeriodType.Months] = api_internal_contract_js_1.DateStepPeriod.Months,\n _g[api_external_contract_js_1.PeriodType.Weeks] = api_internal_contract_js_1.DateStepPeriod.Weeks,\n _g[api_external_contract_js_1.PeriodType.Days] = api_internal_contract_js_1.DateStepPeriod.Days,\n _g[api_external_contract_js_1.PeriodType.Hours] = api_internal_contract_js_1.DateStepPeriod.Hours,\n _g[api_external_contract_js_1.PeriodType.Minutes] = api_internal_contract_js_1.DateStepPeriod.Minutes,\n _g[api_external_contract_js_1.PeriodType.Seconds] = api_internal_contract_js_1.DateStepPeriod.Seconds,\n _g));\n ExternalToInternalEnumMappings.dateRangeType = new EnumConverter_1.EnumConverter((_h = {},\n _h[api_external_contract_js_1.DateRangeType.Last] = api_internal_contract_js_1.DateRangeType.Last,\n _h[api_external_contract_js_1.DateRangeType.LastN] = api_internal_contract_js_1.DateRangeType.LastN,\n _h[api_external_contract_js_1.DateRangeType.Next] = api_internal_contract_js_1.DateRangeType.Next,\n _h[api_external_contract_js_1.DateRangeType.NextN] = api_internal_contract_js_1.DateRangeType.NextN,\n _h[api_external_contract_js_1.DateRangeType.Current] = api_internal_contract_js_1.DateRangeType.Current,\n _h[api_external_contract_js_1.DateRangeType.ToDate] = api_internal_contract_js_1.DateRangeType.ToDate,\n _h));\n ExternalToInternalEnumMappings.dialogStyles = new EnumConverter_1.EnumConverter((_j = {},\n _j[api_external_contract_js_1.DialogStyle.Window] = api_internal_contract_js_1.DialogStyle.Window,\n _j[api_external_contract_js_1.DialogStyle.Modal] = api_internal_contract_js_1.DialogStyle.Modal,\n _j[api_external_contract_js_1.DialogStyle.Modeless] = api_internal_contract_js_1.DialogStyle.Modeless,\n _j));\n return ExternalToInternalEnumMappings;\n}());\nexports.ExternalToInternalEnumMappings = ExternalToInternalEnumMappings;\n/* tslint:enable:typedef */\n//# sourceMappingURL=ExternalToInternalEnumMappings.js.map","\"use strict\";\nvar _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar EnumConverter_1 = require(\"../Utils/EnumConverter\");\n/* tslint:disable:typedef - Disable this to make declaring these classes a bit easier */\n/**\n * Maps enums used by the internal-api-contract to the enums used\n * in the external-api-contract, which developers code against.\n */\nvar InternalToExternalEnumMappings = /** @class */ (function () {\n function InternalToExternalEnumMappings() {\n }\n InternalToExternalEnumMappings.extensionContext = new EnumConverter_1.EnumConverter((_a = {},\n _a[api_internal_contract_js_1.ExtensionContext.Desktop] = api_external_contract_js_1.ExtensionContext.Desktop,\n _a[api_internal_contract_js_1.ExtensionContext.Server] = api_external_contract_js_1.ExtensionContext.Server,\n _a));\n InternalToExternalEnumMappings.extensionMode = new EnumConverter_1.EnumConverter((_b = {},\n _b[api_internal_contract_js_1.ExtensionMode.Authoring] = api_external_contract_js_1.ExtensionMode.Authoring,\n _b[api_internal_contract_js_1.ExtensionMode.Viewing] = api_external_contract_js_1.ExtensionMode.Viewing,\n _b));\n InternalToExternalEnumMappings.columnType = new EnumConverter_1.EnumConverter((_c = {},\n _c[api_internal_contract_js_1.ColumnType.Continuous] = api_external_contract_js_1.ColumnType.Continuous,\n _c[api_internal_contract_js_1.ColumnType.Discrete] = api_external_contract_js_1.ColumnType.Discrete,\n _c));\n InternalToExternalEnumMappings.fieldAggregationType = new EnumConverter_1.EnumConverter((_d = {},\n _d[api_internal_contract_js_1.FieldAggregationType.Attr] = api_external_contract_js_1.FieldAggregationType.Attr,\n _d[api_internal_contract_js_1.FieldAggregationType.Avg] = api_external_contract_js_1.FieldAggregationType.Avg,\n _d[api_internal_contract_js_1.FieldAggregationType.Count] = api_external_contract_js_1.FieldAggregationType.Count,\n _d[api_internal_contract_js_1.FieldAggregationType.Countd] = api_external_contract_js_1.FieldAggregationType.Countd,\n _d[api_internal_contract_js_1.FieldAggregationType.Day] = api_external_contract_js_1.FieldAggregationType.Day,\n _d[api_internal_contract_js_1.FieldAggregationType.End] = api_external_contract_js_1.FieldAggregationType.End,\n _d[api_internal_contract_js_1.FieldAggregationType.Hour] = api_external_contract_js_1.FieldAggregationType.Hour,\n _d[api_internal_contract_js_1.FieldAggregationType.InOut] = api_external_contract_js_1.FieldAggregationType.InOut,\n _d[api_internal_contract_js_1.FieldAggregationType.Kurtosis] = api_external_contract_js_1.FieldAggregationType.Kurtosis,\n _d[api_internal_contract_js_1.FieldAggregationType.Max] = api_external_contract_js_1.FieldAggregationType.Max,\n _d[api_internal_contract_js_1.FieldAggregationType.Mdy] = api_external_contract_js_1.FieldAggregationType.Mdy,\n _d[api_internal_contract_js_1.FieldAggregationType.Median] = api_external_contract_js_1.FieldAggregationType.Median,\n _d[api_internal_contract_js_1.FieldAggregationType.Min] = api_external_contract_js_1.FieldAggregationType.Min,\n _d[api_internal_contract_js_1.FieldAggregationType.Minute] = api_external_contract_js_1.FieldAggregationType.Minute,\n _d[api_internal_contract_js_1.FieldAggregationType.MonthYear] = api_external_contract_js_1.FieldAggregationType.MonthYear,\n _d[api_internal_contract_js_1.FieldAggregationType.None] = api_external_contract_js_1.FieldAggregationType.None,\n _d[api_internal_contract_js_1.FieldAggregationType.Qtr] = api_external_contract_js_1.FieldAggregationType.Qtr,\n _d[api_internal_contract_js_1.FieldAggregationType.Quart1] = api_external_contract_js_1.FieldAggregationType.Quart1,\n _d[api_internal_contract_js_1.FieldAggregationType.Quart3] = api_external_contract_js_1.FieldAggregationType.Quart3,\n _d[api_internal_contract_js_1.FieldAggregationType.Second] = api_external_contract_js_1.FieldAggregationType.Second,\n _d[api_internal_contract_js_1.FieldAggregationType.Skewness] = api_external_contract_js_1.FieldAggregationType.Skewness,\n _d[api_internal_contract_js_1.FieldAggregationType.Stdev] = api_external_contract_js_1.FieldAggregationType.Stdev,\n _d[api_internal_contract_js_1.FieldAggregationType.Stdevp] = api_external_contract_js_1.FieldAggregationType.Stdevp,\n _d[api_internal_contract_js_1.FieldAggregationType.Sum] = api_external_contract_js_1.FieldAggregationType.Sum,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncDay] = api_external_contract_js_1.FieldAggregationType.TruncDay,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncHour] = api_external_contract_js_1.FieldAggregationType.TruncHour,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncMinute] = api_external_contract_js_1.FieldAggregationType.TruncMinute,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncMonth] = api_external_contract_js_1.FieldAggregationType.TruncMonth,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncQtr] = api_external_contract_js_1.FieldAggregationType.TruncQtr,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncSecond] = api_external_contract_js_1.FieldAggregationType.TruncSecond,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncWeek] = api_external_contract_js_1.FieldAggregationType.TruncWeek,\n _d[api_internal_contract_js_1.FieldAggregationType.TruncYear] = api_external_contract_js_1.FieldAggregationType.TruncYear,\n _d[api_internal_contract_js_1.FieldAggregationType.User] = api_external_contract_js_1.FieldAggregationType.User,\n _d[api_internal_contract_js_1.FieldAggregationType.Var] = api_external_contract_js_1.FieldAggregationType.Var,\n _d[api_internal_contract_js_1.FieldAggregationType.Varp] = api_external_contract_js_1.FieldAggregationType.Varp,\n _d[api_internal_contract_js_1.FieldAggregationType.Week] = api_external_contract_js_1.FieldAggregationType.Week,\n _d[api_internal_contract_js_1.FieldAggregationType.Weekday] = api_external_contract_js_1.FieldAggregationType.Weekday,\n _d[api_internal_contract_js_1.FieldAggregationType.Year] = api_external_contract_js_1.FieldAggregationType.Year,\n _d));\n InternalToExternalEnumMappings.fieldRoleType = new EnumConverter_1.EnumConverter((_e = {},\n _e[api_internal_contract_js_1.FieldRoleType.Dimension] = api_external_contract_js_1.FieldRoleType.Dimension,\n _e[api_internal_contract_js_1.FieldRoleType.Measure] = api_external_contract_js_1.FieldRoleType.Measure,\n _e[api_internal_contract_js_1.FieldRoleType.Unknown] = api_external_contract_js_1.FieldRoleType.Unknown,\n _e));\n InternalToExternalEnumMappings.sheetType = new EnumConverter_1.EnumConverter((_f = {},\n _f[api_internal_contract_js_1.SheetType.Dashboard] = api_external_contract_js_1.SheetType.Dashboard,\n _f[api_internal_contract_js_1.SheetType.Story] = api_external_contract_js_1.SheetType.Story,\n _f[api_internal_contract_js_1.SheetType.Worksheet] = api_external_contract_js_1.SheetType.Worksheet,\n _f));\n InternalToExternalEnumMappings.dashboardObjectType = new EnumConverter_1.EnumConverter((_g = {},\n _g[api_internal_contract_js_1.DashboardObjectType.Extension] = api_external_contract_js_1.DashboardObjectType.Extension,\n _g[api_internal_contract_js_1.DashboardObjectType.Blank] = api_external_contract_js_1.DashboardObjectType.Blank,\n _g[api_internal_contract_js_1.DashboardObjectType.Image] = api_external_contract_js_1.DashboardObjectType.Image,\n _g[api_internal_contract_js_1.DashboardObjectType.Legend] = api_external_contract_js_1.DashboardObjectType.Legend,\n _g[api_internal_contract_js_1.DashboardObjectType.PageFilter] = api_external_contract_js_1.DashboardObjectType.PageFilter,\n _g[api_internal_contract_js_1.DashboardObjectType.ParameterControl] = api_external_contract_js_1.DashboardObjectType.ParameterControl,\n _g[api_internal_contract_js_1.DashboardObjectType.QuickFilter] = api_external_contract_js_1.DashboardObjectType.QuickFilter,\n _g[api_internal_contract_js_1.DashboardObjectType.Text] = api_external_contract_js_1.DashboardObjectType.Text,\n _g[api_internal_contract_js_1.DashboardObjectType.Title] = api_external_contract_js_1.DashboardObjectType.Title,\n _g[api_internal_contract_js_1.DashboardObjectType.WebPage] = api_external_contract_js_1.DashboardObjectType.WebPage,\n _g[api_internal_contract_js_1.DashboardObjectType.Worksheet] = api_external_contract_js_1.DashboardObjectType.Worksheet,\n _g));\n InternalToExternalEnumMappings.dataType = new EnumConverter_1.EnumConverter((_h = {},\n _h[api_internal_contract_js_1.DataType.Bool] = api_external_contract_js_1.DataType.Bool,\n _h[api_internal_contract_js_1.DataType.Date] = api_external_contract_js_1.DataType.Date,\n _h[api_internal_contract_js_1.DataType.DateTime] = api_external_contract_js_1.DataType.DateTime,\n _h[api_internal_contract_js_1.DataType.Float] = api_external_contract_js_1.DataType.Float,\n _h[api_internal_contract_js_1.DataType.Int] = api_external_contract_js_1.DataType.Int,\n _h[api_internal_contract_js_1.DataType.String] = api_external_contract_js_1.DataType.String,\n _h));\n InternalToExternalEnumMappings.filterUpdateType = new EnumConverter_1.EnumConverter((_j = {},\n _j[api_internal_contract_js_1.FilterUpdateType.Add] = api_external_contract_js_1.FilterUpdateType.Add,\n _j[api_internal_contract_js_1.FilterUpdateType.All] = api_external_contract_js_1.FilterUpdateType.All,\n _j[api_internal_contract_js_1.FilterUpdateType.Remove] = api_external_contract_js_1.FilterUpdateType.Remove,\n _j[api_internal_contract_js_1.FilterUpdateType.Replace] = api_external_contract_js_1.FilterUpdateType.Replace,\n _j));\n InternalToExternalEnumMappings.allowableValues = new EnumConverter_1.EnumConverter((_k = {},\n _k[api_internal_contract_js_1.DomainRestrictionType.All] = api_external_contract_js_1.ParameterValueType.All,\n _k[api_internal_contract_js_1.DomainRestrictionType.List] = api_external_contract_js_1.ParameterValueType.List,\n _k[api_internal_contract_js_1.DomainRestrictionType.Range] = api_external_contract_js_1.ParameterValueType.Range,\n _k));\n InternalToExternalEnumMappings.dateStepPeriod = new EnumConverter_1.EnumConverter((_l = {},\n _l[api_internal_contract_js_1.DateStepPeriod.Years] = api_external_contract_js_1.PeriodType.Years,\n _l[api_internal_contract_js_1.DateStepPeriod.Quarters] = api_external_contract_js_1.PeriodType.Quarters,\n _l[api_internal_contract_js_1.DateStepPeriod.Months] = api_external_contract_js_1.PeriodType.Months,\n _l[api_internal_contract_js_1.DateStepPeriod.Weeks] = api_external_contract_js_1.PeriodType.Weeks,\n _l[api_internal_contract_js_1.DateStepPeriod.Days] = api_external_contract_js_1.PeriodType.Days,\n _l[api_internal_contract_js_1.DateStepPeriod.Hours] = api_external_contract_js_1.PeriodType.Hours,\n _l[api_internal_contract_js_1.DateStepPeriod.Minutes] = api_external_contract_js_1.PeriodType.Minutes,\n _l[api_internal_contract_js_1.DateStepPeriod.Seconds] = api_external_contract_js_1.PeriodType.Seconds,\n _l));\n InternalToExternalEnumMappings.dateRangeType = new EnumConverter_1.EnumConverter((_m = {},\n _m[api_internal_contract_js_1.DateRangeType.Current] = api_external_contract_js_1.DateRangeType.Current,\n _m[api_internal_contract_js_1.DateRangeType.Last] = api_external_contract_js_1.DateRangeType.Last,\n _m[api_internal_contract_js_1.DateRangeType.LastN] = api_external_contract_js_1.DateRangeType.LastN,\n _m[api_internal_contract_js_1.DateRangeType.Next] = api_external_contract_js_1.DateRangeType.Next,\n _m[api_internal_contract_js_1.DateRangeType.NextN] = api_external_contract_js_1.DateRangeType.NextN,\n _m[api_internal_contract_js_1.DateRangeType.ToDate] = api_external_contract_js_1.DateRangeType.ToDate,\n _m));\n InternalToExternalEnumMappings.errorCode = new EnumConverter_1.EnumConverter((_o = {},\n _o[api_internal_contract_js_1.ErrorCodes.INITIALIZATION_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.INTERNAL_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.MISSING_ENUM_MAPPING] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.MISSING_PARAMETER] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.PERMISSION_DENIED] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.PRES_MODEL_PARSING_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.UNKNOWN_VERB_ID] = api_external_contract_js_1.ErrorCodes.InternalError,\n _o[api_internal_contract_js_1.ErrorCodes.VERSION_NOT_CONFIGURED] = api_external_contract_js_1.ErrorCodes.APINotInitialized,\n _o[api_internal_contract_js_1.ErrorCodes.VISIBILITY_ERROR] = api_external_contract_js_1.ErrorCodes.VisibilityError,\n _o), api_external_contract_js_1.ErrorCodes.InternalError);\n InternalToExternalEnumMappings.filterType = new EnumConverter_1.EnumConverter((_p = {},\n _p[api_internal_contract_js_1.FilterType.Categorical] = api_external_contract_js_1.FilterType.Categorical,\n _p[api_internal_contract_js_1.FilterType.Range] = api_external_contract_js_1.FilterType.Range,\n _p[api_internal_contract_js_1.FilterType.RelativeDate] = api_external_contract_js_1.FilterType.RelativeDate,\n _p[api_internal_contract_js_1.FilterType.Hierarchical] = api_external_contract_js_1.FilterType.Hierarchical,\n _p));\n InternalToExternalEnumMappings.classNameKey = new EnumConverter_1.EnumConverter((_q = {},\n _q[\"tableau-dashboard-title\" /* DashboardTitle */] = api_external_contract_js_1.ClassNameKey.DashboardTitle,\n _q[\"tableau-story-title\" /* StoryTitle */] = api_external_contract_js_1.ClassNameKey.StoryTitle,\n _q[\"tableau-tooltip\" /* Tooltip */] = api_external_contract_js_1.ClassNameKey.Tooltip,\n _q[\"tableau-worksheet\" /* Worksheet */] = api_external_contract_js_1.ClassNameKey.Worksheet,\n _q[\"tableau-worksheet-title\" /* WorksheetTitle */] = api_external_contract_js_1.ClassNameKey.WorksheetTitle,\n // Temporary until we fix 1317266 - Platform hasn't been updated currently because near branch is closed\n _q['dashboard-title'] = api_external_contract_js_1.ClassNameKey.DashboardTitle,\n _q['story-title'] = api_external_contract_js_1.ClassNameKey.StoryTitle,\n _q['tooltip'] = api_external_contract_js_1.ClassNameKey.Tooltip,\n _q['worksheet'] = api_external_contract_js_1.ClassNameKey.Worksheet,\n _q['worksheet-title'] = api_external_contract_js_1.ClassNameKey.WorksheetTitle,\n _q));\n InternalToExternalEnumMappings.hierarchicalLevelSelectionState = new EnumConverter_1.EnumConverter((_r = {},\n _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.AllSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.AllSelected,\n _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.NoneSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.NoneSelected,\n _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.SomeSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.SomeSelected,\n _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.UnknownSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.UnknownSelected,\n _r));\n InternalToExternalEnumMappings.annotationType = new EnumConverter_1.EnumConverter((_s = {},\n _s[api_internal_contract_js_1.AnnotateEnum.Area] = api_external_contract_js_1.AnnotationType.Area,\n _s[api_internal_contract_js_1.AnnotateEnum.Mark] = api_external_contract_js_1.AnnotationType.Mark,\n _s[api_internal_contract_js_1.AnnotateEnum.Point] = api_external_contract_js_1.AnnotationType.Point,\n _s));\n return InternalToExternalEnumMappings;\n}());\nexports.InternalToExternalEnumMappings = InternalToExternalEnumMappings;\n/* tslint:enable:typedef */\n//# sourceMappingURL=InternalToExternalEnumMappings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"./TableauError\");\n/**\n * Class designed to register and unregister handlers from a user. Only those events\n * which are added via AddNewEventType will be supported by this instance\n */\nvar EventListenerManager = /** @class */ (function () {\n function EventListenerManager() {\n this._eventListenerManagers = {};\n }\n EventListenerManager.prototype.addEventListener = function (eventType, handler) {\n if (!this._eventListenerManagers.hasOwnProperty(eventType)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedEventName, \"Cannot add event, unsupported event type: \" + eventType);\n }\n return this._eventListenerManagers[eventType].addEventListener(handler);\n };\n EventListenerManager.prototype.removeEventListener = function (eventType, handler) {\n if (!this._eventListenerManagers.hasOwnProperty(eventType)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedEventName, \"Cannot remove event, unsupported event type: \" + eventType);\n }\n return this._eventListenerManagers[eventType].removeEventListener(handler);\n };\n EventListenerManager.prototype.addNewEventType = function (eventManager) {\n this._eventListenerManagers[eventManager.eventType] = eventManager;\n };\n return EventListenerManager;\n}());\nexports.EventListenerManager = EventListenerManager;\n//# sourceMappingURL=EventListenerManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ErrorHelpers_1 = require(\"./Utils/ErrorHelpers\");\nvar Field = /** @class */ (function () {\n function Field(_fieldImpl) {\n this._fieldImpl = _fieldImpl;\n }\n Object.defineProperty(Field.prototype, \"name\", {\n get: function () {\n return this._fieldImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"id\", {\n get: function () {\n return this._fieldImpl.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"description\", {\n get: function () {\n return this._fieldImpl.description;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"aggregation\", {\n get: function () {\n return this._fieldImpl.aggregation;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"dataSource\", {\n get: function () {\n return this._fieldImpl.dataSource;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"role\", {\n get: function () {\n return this._fieldImpl.role;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"isHidden\", {\n get: function () {\n return this._fieldImpl.isHidden;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"isGenerated\", {\n get: function () {\n return this._fieldImpl.isGenerated;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"isCalculatedField\", {\n get: function () {\n return this._fieldImpl.isCalculatedField;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"columnType\", {\n get: function () {\n throw ErrorHelpers_1.ErrorHelpers.apiNotImplemented('Field.columnType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Field.prototype, \"isCombinedField\", {\n get: function () {\n return this._fieldImpl.isCombinedField;\n },\n enumerable: true,\n configurable: true\n });\n return Field;\n}());\nexports.Field = Field;\n//# sourceMappingURL=Field.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ApiShared_1 = require(\"../../ApiShared\");\nvar CustomViewImpl = /** @class */ (function () {\n function CustomViewImpl(customViewModel, _registryId) {\n this._registryId = _registryId;\n this._luid = customViewModel.luid;\n this._name = customViewModel.name;\n this._shared = customViewModel.shared;\n this._isDefault = customViewModel.isDefault;\n this._ownerName = customViewModel.owner.userFriendlyName;\n this._url = customViewModel.url;\n }\n Object.defineProperty(CustomViewImpl.prototype, \"luid\", {\n get: function () {\n return this._luid;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomViewImpl.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n set: function (name) {\n this._name = name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomViewImpl.prototype, \"shared\", {\n get: function () {\n return this._shared;\n },\n set: function (shared) {\n this._shared = shared;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomViewImpl.prototype, \"isDefault\", {\n get: function () {\n return this._isDefault;\n },\n set: function (isDefault) {\n this._isDefault = isDefault;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomViewImpl.prototype, \"ownerName\", {\n get: function () {\n return this._ownerName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CustomViewImpl.prototype, \"url\", {\n get: function () {\n return this._url;\n },\n enumerable: true,\n configurable: true\n });\n CustomViewImpl.prototype.saveAsync = function () {\n var service = ApiShared_1.ApiServiceRegistry.get(this._registryId).getService(\"viz-service\" /* Viz */);\n return service.saveAsync(this);\n };\n return CustomViewImpl;\n}());\nexports.CustomViewImpl = CustomViewImpl;\n//# sourceMappingURL=CustomViewImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar InternalToExternalEnumMappings_1 = require(\"../EnumMappings/InternalToExternalEnumMappings\");\nvar Point_1 = require(\"../Point\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar TableauError_1 = require(\"../TableauError\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar DashboardObjectImpl_1 = require(\"./DashboardObjectImpl\");\nvar SheetImpl_1 = require(\"./SheetImpl\");\nvar SheetInfoImpl_1 = require(\"./SheetInfoImpl\");\nvar WorksheetImpl_1 = require(\"./WorksheetImpl\");\nvar DashboardImpl = /** @class */ (function (_super) {\n __extends(DashboardImpl, _super);\n function DashboardImpl(_sheetInfo, _zones, _sheetPath, _registryId, _parentStoryPointImpl) {\n var _this = _super.call(this, _sheetInfo, _registryId) || this;\n _this._zones = _zones;\n _this._sheetPath = _sheetPath;\n _this._parentStoryPointImpl = _parentStoryPointImpl;\n return _this;\n }\n Object.defineProperty(DashboardImpl.prototype, \"worksheetsImpl\", {\n get: function () {\n return this._worksheetsImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardImpl.prototype, \"objects\", {\n get: function () {\n return this._objects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardImpl.prototype, \"parentStoryPoint\", {\n get: function () {\n return this._parentStoryPointImpl;\n },\n enumerable: true,\n configurable: true\n });\n DashboardImpl.prototype.initializeWithPublicInterfaces = function () {\n this._worksheetsImpl = new Array();\n this._objects = new Array();\n this.zoneMap = new Map();\n // Process all the zones which are contained in this dashboard\n for (var _i = 0, _a = this._zones; _i < _a.length; _i++) {\n var zone = _a[_i];\n var worksheetImpl = undefined;\n var zoneSize = { width: zone.width, height: zone.height };\n // As the dashboard is active, all other zones in the dashboard are inactive.\n var isActive = false;\n if (zone.zoneType === api_internal_contract_js_1.DashboardObjectType.Worksheet) {\n var worksheetName = '';\n var worksheetUrl = '';\n var isHidden = false;\n if (zone.sheetInfo) {\n // zone.sheetInfo was not initialized prior to internal-contract 1.6.0\n worksheetName = zone.sheetInfo.name;\n // worksheetUrl & isHidden is for Embedding only\n worksheetUrl = zone.sheetInfo.url || '';\n // If there's a url, then it's not hidden\n isHidden = worksheetUrl === '';\n }\n else {\n worksheetName = zone.name;\n }\n // Indexes, isActive and some more properties in sheetInfoImpl are embedding specific.\n // But we init them for both extensions and embedding as the Models will only use what is relevant.\n var sheetInfoImpl = new SheetInfoImpl_1.SheetInfoImpl(worksheetName, api_external_contract_js_1.SheetType.Worksheet, zoneSize, this._worksheetsImpl.length, isActive, isHidden, worksheetUrl);\n var vizId = {\n worksheet: worksheetName,\n dashboard: this._sheetInfoImpl.name,\n storyboard: this._sheetPath.storyboard,\n flipboardZoneID: this._sheetPath.flipboardZoneID,\n storyPointID: this._sheetPath.storyPointID,\n };\n worksheetImpl = new WorksheetImpl_1.WorksheetImpl(sheetInfoImpl, this._registryId, vizId, this, this._parentStoryPointImpl);\n this._worksheetsImpl.push(worksheetImpl);\n }\n var zonePoint = new Point_1.Point(zone.x, zone.y);\n var dashboardObjectImpl = new DashboardObjectImpl_1.DashboardObjectImpl(this, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dashboardObjectType.convert(zone.zoneType), zonePoint, zoneSize, worksheetImpl, zone.name, zone.isFloating !== undefined ? zone.isFloating : false, // before 1.6.0 we didn't have isFloating, so we assume false\n zone.isVisible !== undefined ? zone.isVisible : true, // before 1.6.0 we didn't have isVisible, so we assume true\n zone.zoneId);\n this._objects.push(dashboardObjectImpl);\n this.zoneMap.set(zone.zoneId, dashboardObjectImpl);\n }\n };\n DashboardImpl.prototype.setDashboardObjectVisibilityAsync = function (dashboardObjectVisibilityMap) {\n var zoneService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"zone-service\" /* Zone */);\n return zoneService.setVisibilityAsync(/*Dashboard Name*/ this.name, this.zoneMap, dashboardObjectVisibilityMap);\n };\n DashboardImpl.prototype.getDashboardObjectById = function (dashboardObjectId) {\n return this.zoneMap.get(dashboardObjectId);\n };\n DashboardImpl.prototype.updateZones = function (newZones) {\n var _this = this;\n // getting previous dashboard objects\n var oldDashboardObjects = this._objects;\n var oldZoneMap = this.zoneMap;\n // updating zones, and reinitializing instance variables\n this._zones = newZones;\n this.initializeWithPublicInterfaces();\n // getting new dashboard objects\n var newDashboardObjects = this._objects;\n var newZoneMap = this.zoneMap;\n // initializing map for changes\n var zoneChanges = new Map();\n // comparing old dashboard objects with new ones\n oldDashboardObjects.forEach(function (oldObject) {\n var oldId = oldObject.id;\n // checking if zone was removed\n if (!newZoneMap.has(oldId)) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Removed);\n return;\n }\n var newObject = newZoneMap.get(oldId);\n if (oldObject.isFloating !== newObject.isFloating) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.IsFloatingChanged);\n }\n if (oldObject.isVisible !== newObject.isVisible) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.IsVisibleChanged);\n }\n if (oldObject.name !== newObject.name) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.NameChanged);\n }\n if (oldObject.position.x !== newObject.position.x || oldObject.position.y !== newObject.position.y) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.PositionChanged);\n }\n if (oldObject.size.width !== newObject.size.width || oldObject.size.height !== newObject.size.height) {\n _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.SizeChanged);\n }\n });\n // Checking for any added zones\n newDashboardObjects.forEach(function (newObject) {\n if (!oldZoneMap.has(newObject.id)) {\n _this.addChange(newObject.id, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Added);\n }\n });\n return zoneChanges;\n };\n DashboardImpl.prototype.addChange = function (zoneId, zoneChanges, change) {\n if (!zoneChanges.has(zoneId)) {\n zoneChanges.set(zoneId, []);\n }\n zoneChanges.get(zoneId).push(change);\n };\n DashboardImpl.prototype.moveAndResizeDashboardObjectsAsync = function (dashboardObjectPositionAndSizeUpdateArray) {\n var zoneService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"zone-service\" /* Zone */);\n return zoneService.moveAndResizeAsync(/*Dashboard Name*/ this.name, this.zoneMap, dashboardObjectPositionAndSizeUpdateArray);\n };\n DashboardImpl.prototype.replayAnimationAsync = function (replaySpeed) {\n var animationService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"animation-service\" /* Animation */);\n return animationService.replayAsync(replaySpeed);\n };\n DashboardImpl.prototype.getFiltersAsync = function () {\n this.verifyActiveSheetOrEmbeddedInActiveStoryPoint();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.getDashboardFiltersAsync();\n };\n DashboardImpl.prototype.applyFilterAsync = function (fieldName, values, updateType, options) {\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'FilterUpdateType');\n ErrorHelpers_1.ErrorHelpers.verifyStringParameter(fieldName, 'fieldName');\n if (!Array.isArray(values)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyDashboardFilterAsync must be an array');\n }\n this.verifyActiveSheetOrEmbeddedInActiveStoryPoint();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.applyDashboardFilterAsync(fieldName, values, updateType, options);\n };\n DashboardImpl.prototype.verifyActiveSheetOrEmbeddedInActiveStoryPoint = function () {\n var isRootAndActiveDashboard = this.active;\n var isWithinActiveStoryPoint = this.parentStoryPoint != null && this.parentStoryPoint.active;\n if (!isRootAndActiveDashboard && !isWithinActiveStoryPoint) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.NotActiveSheet, 'Operation not allowed on non-active sheet');\n }\n };\n return DashboardImpl;\n}(SheetImpl_1.SheetImpl));\nexports.DashboardImpl = DashboardImpl;\n//# sourceMappingURL=DashboardImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of the dashboard objects - the zones in a dashboard.\n * This does not follow the Impl pattern as it is just a property bag.\n */\nvar DashboardObjectImpl = /** @class */ (function () {\n function DashboardObjectImpl(_dashboardImpl, _type, _position, _size, _worksheetImpl, _name, _isFloating, _isVisible, _id) {\n this._dashboardImpl = _dashboardImpl;\n this._type = _type;\n this._position = _position;\n this._size = _size;\n this._worksheetImpl = _worksheetImpl;\n this._name = _name;\n this._isFloating = _isFloating;\n this._isVisible = _isVisible;\n this._id = _id;\n }\n Object.defineProperty(DashboardObjectImpl.prototype, \"dashboardImpl\", {\n get: function () {\n return this._dashboardImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"type\", {\n get: function () {\n return this._type;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"position\", {\n get: function () {\n return this._position;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"worksheetImpl\", {\n get: function () {\n return this._worksheetImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"isFloating\", {\n get: function () {\n return this._isFloating;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"isVisible\", {\n get: function () {\n return this._isVisible;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DashboardObjectImpl.prototype, \"id\", {\n get: function () {\n return this._id;\n },\n enumerable: true,\n configurable: true\n });\n return DashboardObjectImpl;\n}());\nexports.DashboardObjectImpl = DashboardObjectImpl;\n//# sourceMappingURL=DashboardObjectImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar ConnectionSummary_1 = require(\"../ConnectionSummary\");\nvar Field_1 = require(\"../Field\");\nvar LogicalTable_1 = require(\"../LogicalTable\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar TableSummary_1 = require(\"../TableSummary\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar FieldImpl_1 = require(\"./FieldImpl\");\nvar DataSourceImpl = /** @class */ (function () {\n function DataSourceImpl(_dataSourceInfo, _registryId) {\n var _this = this;\n this._dataSourceInfo = _dataSourceInfo;\n this._registryId = _registryId;\n this._fields = _dataSourceInfo.fields.map(function (fieldModel) {\n var fieldImpl = new FieldImpl_1.FieldImpl(fieldModel, _this);\n return new Field_1.Field(fieldImpl);\n });\n }\n Object.defineProperty(DataSourceImpl.prototype, \"name\", {\n get: function () {\n return this._dataSourceInfo.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSourceImpl.prototype, \"id\", {\n get: function () {\n return this._dataSourceInfo.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSourceImpl.prototype, \"extractUpdateTime\", {\n get: function () {\n return this._dataSourceInfo.extractUpdateTime;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSourceImpl.prototype, \"fields\", {\n get: function () {\n return this._fields;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSourceImpl.prototype, \"isExtract\", {\n get: function () {\n return this._dataSourceInfo.isExtract;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataSourceImpl.prototype, \"isPublished\", {\n get: function () {\n return this._dataSourceInfo.isPublished;\n },\n enumerable: true,\n configurable: true\n });\n DataSourceImpl.prototype.publishedUrl = function () {\n return this._dataSourceInfo.publishedUrl;\n };\n DataSourceImpl.prototype.getMaxPageRowLimit = function () {\n return 10000;\n };\n DataSourceImpl.prototype.refreshAsync = function () {\n var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return dataSourceService.refreshAsync(this._dataSourceInfo.id);\n };\n DataSourceImpl.prototype.getConnectionSummariesAsync = function () {\n var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return dataSourceService.getConnectionSummariesAsync(this._dataSourceInfo.id).then(function (summaries) {\n return summaries.map(function (summary) { return new ConnectionSummary_1.ConnectionSummary(summary); });\n });\n };\n DataSourceImpl.prototype.getActiveTablesAsync = function () {\n var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return dataSourceService.getActiveTablesAsync(this._dataSourceInfo.id).then(function (tableInfos) {\n return tableInfos.map(function (tableInfo) { return new TableSummary_1.TableSummary(tableInfo); });\n });\n };\n DataSourceImpl.prototype.getUnderlyingDataAsync = function (options) {\n var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return getDataService.getDataSourceDataAsync(this.id, !!options.ignoreAliases, options.maxRows || 0, // 0 and [] are defaults\n options.columnsToInclude || [], options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n DataSourceImpl.prototype.getLogicalTableDataAsync = function (logicalTableId, options) {\n var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return getDataService.getLogicalTableDataAsync(this.id, logicalTableId, !!options.ignoreAliases, options.maxRows || 0, // 0 and [] are defaults\n options.columnsToInclude || [], options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n DataSourceImpl.prototype.getLogicalTableDataReaderAsync = function (logicalTableId, pageRowCount, options) {\n var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return getDataService.getLogicalTableDataReaderAsync(this.id, logicalTableId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n DataSourceImpl.prototype.initializeWithPublicInterfaces = function (dataSource) {\n ErrorHelpers_1.ErrorHelpers.verifyInternalValue(dataSource, 'dataSource');\n this._fields = this._dataSourceInfo.fields.map(function (fieldModel) {\n var fieldImpl = new FieldImpl_1.FieldImpl(fieldModel, dataSource);\n return new Field_1.Field(fieldImpl);\n });\n };\n DataSourceImpl.prototype.getLogicalTablesAsync = function () {\n var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return dataSourceService.getLogicalTablesAsync(this.id).then(function (logicalTableInfos) {\n return logicalTableInfos.map(function (logicalTableInfo) { return new LogicalTable_1.LogicalTable(logicalTableInfo); });\n });\n };\n return DataSourceImpl;\n}());\nexports.DataSourceImpl = DataSourceImpl;\n//# sourceMappingURL=DataSourceImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar InternalToExternalEnumMappings_1 = require(\"../EnumMappings/InternalToExternalEnumMappings\");\nvar FieldImpl = /** @class */ (function () {\n function FieldImpl(_fieldInfo, _parentDataSource) {\n this._fieldInfo = _fieldInfo;\n this._parentDataSource = _parentDataSource;\n }\n Object.defineProperty(FieldImpl.prototype, \"name\", {\n get: function () {\n return this._fieldInfo.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"id\", {\n get: function () {\n return this._fieldInfo.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"description\", {\n get: function () {\n return this._fieldInfo.description;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"aggregation\", {\n get: function () {\n return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.fieldAggregationType.convert(this._fieldInfo.aggregation);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"dataSource\", {\n get: function () {\n return this._parentDataSource;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"role\", {\n get: function () {\n return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.fieldRoleType.convert(this._fieldInfo.role);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"isHidden\", {\n get: function () {\n return this._fieldInfo.isHidden;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"isGenerated\", {\n get: function () {\n return this._fieldInfo.isGenerated;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"isCalculatedField\", {\n get: function () {\n return this._fieldInfo.isCalculatedField;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldImpl.prototype, \"isCombinedField\", {\n get: function () {\n return this._fieldInfo.isCombinedField;\n },\n enumerable: true,\n configurable: true\n });\n return FieldImpl;\n}());\nexports.FieldImpl = FieldImpl;\n//# sourceMappingURL=FieldImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar InternalToExternalEnumMappings_1 = require(\"../EnumMappings/InternalToExternalEnumMappings\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar DataValueFactory_1 = require(\"../Utils/DataValueFactory\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar Param_1 = require(\"../Utils/Param\");\nvar ParameterImpl = /** @class */ (function () {\n function ParameterImpl(parameterInfo, _registryId) {\n this._registryId = _registryId;\n this.setParameterInfo(parameterInfo);\n }\n Object.defineProperty(ParameterImpl.prototype, \"name\", {\n get: function () {\n return this._parameterInfo.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ParameterImpl.prototype, \"currentValue\", {\n get: function () {\n return DataValueFactory_1.DataValueFactory.MakeParameterDataValue(this._parameterInfo.currentValue, this._parameterInfo.dataType);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ParameterImpl.prototype, \"dataType\", {\n get: function () {\n return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dataType.convert(this._parameterInfo.dataType);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ParameterImpl.prototype, \"id\", {\n get: function () {\n return this._globalFieldName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ParameterImpl.prototype, \"allowableValues\", {\n get: function () {\n return this._allowableValues;\n },\n enumerable: true,\n configurable: true\n });\n ParameterImpl.prototype.changeValueAsync = function (newValue) {\n var _this = this;\n ErrorHelpers_1.ErrorHelpers.verifyParameter(newValue, 'newValue');\n var coercedValue = Param_1.Param.serializeParameterValue(newValue);\n var parametersService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"parameters-service\" /* Parameters */);\n return parametersService.changeParameterValueAsync(this._globalFieldName, coercedValue).then(function (parameterInfo) {\n _this.setParameterInfo(parameterInfo);\n return _this.currentValue;\n });\n };\n ParameterImpl.prototype.setParameterInfo = function (parameterInfo) {\n this._parameterInfo = parameterInfo;\n this._globalFieldName = parameterInfo.fieldName;\n var type = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.allowableValues.convert(parameterInfo.allowableValuesType);\n var listValues;\n var minValue;\n var maxValue;\n var stepSize;\n var dateStepPeriod;\n if (type === api_external_contract_js_1.ParameterValueType.List) {\n var values = parameterInfo.allowableValues || [];\n listValues = values.map(function (val) { return DataValueFactory_1.DataValueFactory.MakeParameterDataValue(val, parameterInfo.dataType); });\n }\n else if (type === api_external_contract_js_1.ParameterValueType.Range) {\n minValue = parameterInfo.minValue && DataValueFactory_1.DataValueFactory.MakeParameterDataValue(parameterInfo.minValue, parameterInfo.dataType);\n maxValue = parameterInfo.maxValue && DataValueFactory_1.DataValueFactory.MakeParameterDataValue(parameterInfo.maxValue, parameterInfo.dataType);\n stepSize = parameterInfo.stepSize;\n dateStepPeriod = parameterInfo.dateStepPeriod && InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateStepPeriod.convert(parameterInfo.dateStepPeriod);\n }\n this._allowableValues = {\n type: type,\n allowableValues: listValues,\n minValue: minValue,\n maxValue: maxValue,\n stepSize: stepSize,\n dateStepPeriod: dateStepPeriod,\n };\n };\n return ParameterImpl;\n}());\nexports.ParameterImpl = ParameterImpl;\n//# sourceMappingURL=ParameterImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar TableauError_1 = require(\"../TableauError\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar Param_1 = require(\"../Utils/Param\");\nvar SheetUtils_1 = require(\"../Utils/SheetUtils\");\nvar SheetImpl = /** @class */ (function () {\n function SheetImpl(_sheetInfoImpl, _registryId) {\n this._sheetInfoImpl = _sheetInfoImpl;\n this._registryId = _registryId;\n }\n Object.defineProperty(SheetImpl.prototype, \"name\", {\n get: function () {\n return this._sheetInfoImpl.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"sheetType\", {\n get: function () {\n return this._sheetInfoImpl.sheetType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"sheetPath\", {\n get: function () {\n return this._sheetInfoImpl.sheetPath;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"size\", {\n get: function () {\n return this._sheetInfoImpl.sheetSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"hidden\", {\n get: function () {\n if (this._sheetInfoImpl.isHidden !== undefined) {\n return this._sheetInfoImpl.isHidden;\n }\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, \"isHidden not implemented\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"active\", {\n get: function () {\n if (this._sheetInfoImpl.isActive !== undefined) {\n return this._sheetInfoImpl.isActive;\n }\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, \"active not implemented\");\n },\n set: function (active) {\n if (this._sheetInfoImpl.isActive !== undefined) {\n this._sheetInfoImpl.active = active;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"index\", {\n get: function () {\n if (this._sheetInfoImpl.index !== undefined) {\n return this._sheetInfoImpl.index;\n }\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, \"index not implemented\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetImpl.prototype, \"url\", {\n get: function () {\n if (this._sheetInfoImpl.url !== undefined) {\n return this._sheetInfoImpl.url;\n }\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, \"url not implemented\");\n },\n enumerable: true,\n configurable: true\n });\n SheetImpl.prototype.getSheetSize = function () {\n if (!SheetUtils_1.SheetUtils.isValidSheetSize(this.size)) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InternalError, 'size is not of type SheetSize');\n }\n return this.size;\n };\n SheetImpl.prototype.findParameterAsync = function (parameterName) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(parameterName, 'parameterName');\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"parameters-service\" /* Parameters */);\n return service.findParameterByNameAsync(parameterName);\n };\n SheetImpl.prototype.getParametersAsync = function () {\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"parameters-service\" /* Parameters */);\n return service.getParametersForSheetAsync(this.sheetPath);\n };\n SheetImpl.prototype.changeSizeAsync = function (newSize) {\n var _this = this;\n var invalidSizeError = new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Invalid sheet size parameter');\n if (!newSize || !newSize.behavior) {\n throw invalidSizeError;\n }\n var partialSheetSize = this.normalizeSheetSize(newSize);\n var isAutomatic = partialSheetSize.behavior === Contract.SheetSizeBehavior.Automatic;\n if (!isAutomatic && !partialSheetSize.minSize && !partialSheetSize.maxSize) {\n throw invalidSizeError;\n }\n if (!isAutomatic && this.sheetType === Contract.SheetType.Worksheet) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSizeBehaviorOnWorksheet, 'Only SheetSizeBehavior.Automatic is allowed on Worksheets');\n }\n if (isAutomatic && this.getSheetSize().behavior === partialSheetSize.behavior) {\n return Promise.resolve(newSize);\n }\n var processedNewSize = this.processNewSize(partialSheetSize);\n var sizeService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"size-service\" /* Size */);\n return sizeService.changeSizeAsync(this.name, processedNewSize).then(function () {\n var clientInfoService = ServiceRegistry_1.ApiServiceRegistry.get(_this._registryId).getService(\"client-info-service\" /* ClientInfo */);\n return clientInfoService.getClientInfoAsync().then(function (bootstrapInfo) {\n var sheet = bootstrapInfo.publishedSheets.find(function (s) { return s.name === _this.name; });\n if (!sheet) {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InternalError, \"Can't find sheet with name \" + _this.name);\n }\n var sheetSize = SheetUtils_1.SheetUtils.getSheetSizeFromSizeConstraints(sheet.sizeConstraint);\n _this._sheetInfoImpl.sheetSize = sheetSize;\n return sheetSize;\n });\n });\n };\n SheetImpl.prototype.normalizeSheetSize = function (newSize) {\n var behavior = newSize.behavior;\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(behavior, Contract.SheetSizeBehavior, 'SheetSizeBehavior');\n var minSize = SheetImpl.parseDimensions(newSize.minSize);\n var maxSize = SheetImpl.parseDimensions(newSize.maxSize);\n return { behavior: behavior, minSize: minSize, maxSize: maxSize };\n };\n SheetImpl.prototype.processNewSize = function (newSize) {\n var _a, _b, _c, _d;\n var behavior = newSize.behavior, minSizeMaybe = newSize.minSize, maxSizeMaybe = newSize.maxSize;\n var hasMinWidth = !Param_1.Param.isNullOrUndefined((_a = minSizeMaybe) === null || _a === void 0 ? void 0 : _a.width);\n var hasMinHeight = !Param_1.Param.isNullOrUndefined((_b = minSizeMaybe) === null || _b === void 0 ? void 0 : _b.height);\n var hasMaxWidth = !Param_1.Param.isNullOrUndefined((_c = maxSizeMaybe) === null || _c === void 0 ? void 0 : _c.width);\n var hasMaxHeight = !Param_1.Param.isNullOrUndefined((_d = maxSizeMaybe) === null || _d === void 0 ? void 0 : _d.height);\n var hasValidMinSize = hasMinWidth && hasMinHeight;\n var hasValidMaxSize = hasMaxWidth && hasMaxHeight;\n switch (behavior) {\n case Contract.SheetSizeBehavior.Automatic: {\n return { behavior: behavior };\n }\n case Contract.SheetSizeBehavior.AtMost: {\n if (!maxSizeMaybe || !hasValidMaxSize) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMaxSize, 'Missing maxSize for SheetSizeBehavior.AtMost');\n }\n var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height };\n if (maxSize.width < 0 || maxSize.height < 0) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Size value cannot be less than zero');\n }\n return { behavior: behavior, maxSize: maxSize };\n }\n case Contract.SheetSizeBehavior.AtLeast: {\n if (!minSizeMaybe || !hasValidMinSize) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMinSize, 'Missing minSize for SheetSizeBehavior.AtLeast');\n }\n var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height };\n if (minSize.width < 0 || minSize.height < 0) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Size value cannot be less than zero');\n }\n return { behavior: behavior, minSize: minSize };\n }\n case Contract.SheetSizeBehavior.Range: {\n if (!minSizeMaybe || !maxSizeMaybe || !hasValidMinSize || !hasValidMaxSize) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMinMaxSize, 'Missing minSize or maxSize for SheetSizeBehavior.Range');\n }\n var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height };\n var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height };\n if (minSize.width < 0 ||\n minSize.height < 0 ||\n maxSize.width < 0 ||\n maxSize.height < 0 ||\n minSize.width > maxSize.width ||\n minSize.height > maxSize.height) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Missing minSize or maxSize for SheetSizeBehavior.Range');\n }\n return { behavior: behavior, minSize: minSize, maxSize: maxSize };\n }\n case Contract.SheetSizeBehavior.Exactly: {\n if (minSizeMaybe && maxSizeMaybe) {\n if (hasValidMinSize && hasValidMaxSize) {\n var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height };\n var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height };\n if (minSize.width !== maxSize.width || minSize.height !== maxSize.height) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Conflicting size values for SheetSizeBehavior.Exactly');\n }\n return { behavior: behavior, minSize: minSize, maxSize: maxSize };\n }\n if (hasValidMinSize) {\n var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height };\n return { behavior: behavior, minSize: minSize, maxSize: minSize };\n }\n if (hasValidMaxSize) {\n var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height };\n return { behavior: behavior, minSize: maxSize, maxSize: maxSize };\n }\n }\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Invalid sheet size parameter');\n }\n default: {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InternalError, \"Unsupported sheet size behavior: \" + behavior);\n }\n }\n };\n SheetImpl.parseDimensions = function (size) {\n var empty = { width: undefined, height: undefined };\n if (!size) {\n return empty;\n }\n var _a = Param_1.Param.tryParseNumber(size.width), widthParsed = _a.success, parsedWidth = _a.parsed;\n var _b = Param_1.Param.tryParseNumber(size.height), heightParsed = _b.success, parsedHeight = _b.parsed;\n if (widthParsed && heightParsed) {\n return { width: parsedWidth, height: parsedHeight };\n }\n if (widthParsed) {\n return { width: parsedWidth };\n }\n if (heightParsed) {\n return { height: parsedHeight };\n }\n return empty;\n };\n return SheetImpl;\n}());\nexports.SheetImpl = SheetImpl;\n//# sourceMappingURL=SheetImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar SheetInfoImpl = /** @class */ (function () {\n function SheetInfoImpl(_name, _sheetType, _sheetSize, _index, _isActive, _isHidden, _url) {\n this._name = _name;\n this._sheetType = _sheetType;\n this._sheetSize = _sheetSize;\n this._index = _index;\n this._isActive = _isActive;\n this._isHidden = _isHidden;\n this._url = _url;\n }\n Object.defineProperty(SheetInfoImpl.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"sheetSize\", {\n get: function () {\n return this._sheetSize;\n },\n set: function (value) {\n this._sheetSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"sheetType\", {\n get: function () {\n return this._sheetType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"sheetPath\", {\n get: function () {\n return {\n sheetName: this.name,\n isDashboard: this.sheetType === api_external_contract_js_1.SheetType.Dashboard,\n };\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"index\", {\n get: function () {\n return this._index;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"isActive\", {\n get: function () {\n return this._isActive;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"active\", {\n set: function (active) {\n this._isActive = active;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"isHidden\", {\n get: function () {\n return this._isHidden;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SheetInfoImpl.prototype, \"url\", {\n get: function () {\n return this._url;\n },\n enumerable: true,\n configurable: true\n });\n return SheetInfoImpl;\n}());\nexports.SheetInfoImpl = SheetInfoImpl;\n//# sourceMappingURL=SheetInfoImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * This class implements the SingleEventManager interface for a single type of Tableau event\n *\n * @template TEventType The Tableau event type this class specializes\n */\nvar SingleEventManagerImpl = /** @class */ (function () {\n function SingleEventManagerImpl(eventType) {\n this._eventType = eventType;\n this._handlers = [];\n }\n Object.defineProperty(SingleEventManagerImpl.prototype, \"eventType\", {\n get: function () {\n return this._eventType;\n },\n enumerable: true,\n configurable: true\n });\n SingleEventManagerImpl.prototype.addEventListener = function (handler) {\n var _this = this;\n this._handlers.push(handler);\n return function () { return _this.removeEventListener(handler); };\n };\n SingleEventManagerImpl.prototype.removeEventListener = function (handler) {\n var beforeCount = this._handlers.length;\n this._handlers = this._handlers.filter(function (h) { return h !== handler; });\n return beforeCount > this._handlers.length;\n };\n SingleEventManagerImpl.prototype.triggerEvent = function (eventGenerator) {\n for (var _i = 0, _a = this._handlers; _i < _a.length; _i++) {\n var handler = _a[_i];\n try {\n var eventModel = eventGenerator();\n handler(eventModel);\n }\n catch (e) {\n // Since this handler could be outside our control, just catch anything it throws and continue on\n continue;\n }\n }\n };\n return SingleEventManagerImpl;\n}());\nexports.SingleEventManagerImpl = SingleEventManagerImpl;\n//# sourceMappingURL=SingleEventManagerImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar TableauError_1 = require(\"../TableauError\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar ShortLivedDeferred_1 = require(\"../Utils/ShortLivedDeferred\");\nvar SheetImpl_1 = require(\"./SheetImpl\");\nvar StoryPointImpl_1 = require(\"./StoryPointImpl\");\nvar StoryPointInfoImpl_1 = require(\"./StoryPointInfoImpl\");\nvar StoryImpl = /** @class */ (function (_super) {\n __extends(StoryImpl, _super);\n function StoryImpl(_sheetInfoImpl, storyModel, _publishedSheetInfos, _registryId) {\n var _this = _super.call(this, _sheetInfoImpl, _registryId) || this;\n _this._sheetInfoImpl = _sheetInfoImpl;\n _this._publishedSheetInfos = _publishedSheetInfos;\n _this._registryId = _registryId;\n _this._storyPointInfoImpls = [];\n _this._deferred = new ShortLivedDeferred_1.ShortLivedDeferred();\n _this.initializeStory(storyModel);\n return _this;\n }\n StoryImpl.prototype.initializeStory = function (storyModel) {\n var _this = this;\n storyModel.storyPoints.forEach(function (storyPointModel) {\n var isActive = storyPointModel.index === storyModel.activeStoryPointIndex;\n var storyPointInfoImpl = new StoryPointInfoImpl_1.StoryPointInfoImpl(storyPointModel.caption, storyPointModel.index, storyPointModel.storyPointId, isActive, storyPointModel.updated, _this);\n _this._storyPointInfoImpls.push(storyPointInfoImpl);\n if (isActive) {\n _this._activeStoryPointImpl = new StoryPointImpl_1.StoryPointImpl(storyPointInfoImpl, _this._publishedSheetInfos, _this._registryId, storyPointModel.containedSheetInfo);\n }\n });\n };\n StoryImpl.prototype.updateStoryInfo = function (index, storyPointModel) {\n if (!this._storyPointInfoImpls) {\n return;\n }\n var storyInfoImpl = this._storyPointInfoImpls[index];\n if (storyInfoImpl.storyPointId !== storyPointModel.storyPointId) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.StoryPointIdMismatch, \"We should not be updating a story point when the IDs don't match. Existing storyPointID=\" + storyInfoImpl.storyPointId + \", newStoryPointID=\" + storyPointModel.storyPointId);\n }\n storyInfoImpl.caption = storyPointModel.caption;\n storyInfoImpl.updated = storyPointModel.updated;\n if (this._activeStoryPointImpl.storyPointId === storyPointModel.storyPointId) {\n this._activeStoryPointImpl.updated = storyInfoImpl.updated;\n }\n };\n StoryImpl.prototype.updateStory = function (storyPointModel) {\n var _this = this;\n if (!this._storyPointInfoImpls) {\n return;\n }\n this._storyPointInfoImpls.forEach(function (storyPointInfoImpl) {\n var isActive = storyPointInfoImpl.storyPointId === storyPointModel.storyPointId;\n if (isActive) {\n // update the state\n storyPointInfoImpl.caption = storyPointModel.caption;\n storyPointInfoImpl.index = storyPointModel.index;\n storyPointInfoImpl.active = true;\n storyPointInfoImpl.updated = storyPointModel.updated;\n // re-initialize activeStoryPointImpl\n _this._activeStoryPointImpl = new StoryPointImpl_1.StoryPointImpl(storyPointInfoImpl, _this._publishedSheetInfos, _this._registryId, storyPointModel.containedSheetInfo);\n }\n else {\n // set old ones to false\n storyPointInfoImpl.active = false;\n }\n });\n if (this.activeStoryPoint) {\n this._deferred.resolve(this.activeStoryPoint);\n }\n };\n Object.defineProperty(StoryImpl.prototype, \"activeStoryPoint\", {\n get: function () {\n return this._activeStoryPointImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryImpl.prototype, \"storyPointsInfo\", {\n get: function () {\n return this._storyPointInfoImpls;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryImpl.prototype, \"isActive\", {\n get: function () {\n return this._sheetInfoImpl.active;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryImpl.prototype, \"isHidden\", {\n get: function () {\n return !!this._sheetInfoImpl.isHidden;\n },\n enumerable: true,\n configurable: true\n });\n StoryImpl.prototype.activateNextStoryPointAsync = function () {\n if (this._activeStoryPointImpl.index === this._storyPointInfoImpls.length - 1) {\n return Promise.resolve(this._activeStoryPointImpl);\n }\n var promise = this._deferred.getNewPromiseOrThrowIfBusy();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"story-activation-service\" /* StoryActivation */);\n service.activateNextStoryPointAsync();\n return promise;\n };\n StoryImpl.prototype.activatePreviousStoryPointAsync = function () {\n if (this._activeStoryPointImpl.index === 0) {\n return Promise.resolve(this._activeStoryPointImpl);\n }\n var promise = this._deferred.getNewPromiseOrThrowIfBusy();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"story-activation-service\" /* StoryActivation */);\n service.activatePreviousStoryPointAsync();\n return promise;\n };\n StoryImpl.prototype.activateStoryPointAsync = function (index) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(index, 'index');\n ErrorHelpers_1.ErrorHelpers.verifyParameterType(index, 'number', 'index');\n if (index < 0 || index >= this._storyPointInfoImpls.length) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.IndexOutOfRange, 'The index passed to this command is out of range.');\n }\n if (index === this._activeStoryPointImpl.index) {\n return Promise.resolve(this._activeStoryPointImpl);\n }\n var promise = this._deferred.getNewPromiseOrThrowIfBusy();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"story-activation-service\" /* StoryActivation */);\n service.activateStoryPointAsync(index);\n return promise;\n };\n StoryImpl.prototype.revertStoryPointAsync = function (index) {\n var _this = this;\n ErrorHelpers_1.ErrorHelpers.verifyParameter(index, 'index');\n ErrorHelpers_1.ErrorHelpers.verifyParameterType(index, 'number', 'index');\n if (index < 0 || index >= this._storyPointInfoImpls.length) {\n throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.IndexOutOfRange, 'The index passed to this command is out of range.');\n }\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"story-activation-service\" /* StoryActivation */);\n return service.revertStoryPointAsync(index).then(function (response) {\n _this.updateStoryInfo(response.index, response);\n var storyPointInfoImpl = new StoryPointInfoImpl_1.StoryPointInfoImpl(response.caption, response.index, response.storyPointId, false, response.updated, _this);\n return storyPointInfoImpl;\n });\n };\n StoryImpl.prototype.clearPendingPromises = function () {\n if (this._deferred) {\n this._deferred.reject('All pending promises cleared');\n }\n };\n return StoryImpl;\n}(SheetImpl_1.SheetImpl));\nexports.StoryImpl = StoryImpl;\n//# sourceMappingURL=StoryImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nvar SheetUtils_1 = require(\"../Utils/SheetUtils\");\nvar DashboardImpl_1 = require(\"./DashboardImpl\");\nvar SheetInfoImpl_1 = require(\"./SheetInfoImpl\");\nvar WorksheetImpl_1 = require(\"./WorksheetImpl\");\nvar StoryPointImpl = /** @class */ (function () {\n function StoryPointImpl(_storyPointInfoImpl, sheetInfos, registryId, containedSheetInfo) {\n this._storyPointInfoImpl = _storyPointInfoImpl;\n if (containedSheetInfo) {\n this._containedSheetImpl = this.createContainedSheet(containedSheetInfo, sheetInfos, registryId);\n }\n }\n Object.defineProperty(StoryPointImpl.prototype, \"index\", {\n get: function () {\n return this._storyPointInfoImpl.index;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"caption\", {\n get: function () {\n return this._storyPointInfoImpl.caption;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"active\", {\n get: function () {\n return this._storyPointInfoImpl.active;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"updated\", {\n get: function () {\n return this._storyPointInfoImpl.updated;\n },\n set: function (updated) {\n this._storyPointInfoImpl.updated = updated;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"parentStory\", {\n get: function () {\n return this._storyPointInfoImpl.parentStory;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"containedSheet\", {\n get: function () {\n return this._containedSheetImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointImpl.prototype, \"storyPointId\", {\n get: function () {\n return this._storyPointInfoImpl.storyPointId;\n },\n enumerable: true,\n configurable: true\n });\n StoryPointImpl.prototype.createContainedSheet = function (containedSheetInfo, sheetInfos, registryId) {\n var containedSheetIdx = -1;\n var publishedSheetInfo = SheetUtils_1.SheetUtils.getPublishedSheetInfoByName(containedSheetInfo.name, sheetInfos);\n var containedSheetSize = SheetUtils_1.SheetUtils.createAutomaticSize();\n var isContainedSheetHidden = publishedSheetInfo === undefined;\n var containedSheetUrl = publishedSheetInfo ? publishedSheetInfo.url : '';\n // Contained sheets aren't active - the containing sheet is active.\n var containedSheetActive = false;\n var containedSheetInfoImpl = new SheetInfoImpl_1.SheetInfoImpl(containedSheetInfo.name, SheetUtils_1.SheetUtils.getSheetTypeEnum(containedSheetInfo.sheetType), containedSheetSize, containedSheetIdx, containedSheetActive, isContainedSheetHidden, containedSheetUrl);\n var sheetImpl;\n switch (containedSheetInfoImpl.sheetType) {\n case Contract.SheetType.Worksheet: {\n var vizId = {\n worksheet: containedSheetInfoImpl.name,\n };\n sheetImpl = new WorksheetImpl_1.WorksheetImpl(containedSheetInfoImpl, registryId, vizId, null, this);\n break;\n }\n case Contract.SheetType.Dashboard: {\n var sheetPath = {\n sheetName: containedSheetInfoImpl.name,\n isDashboard: true,\n };\n sheetImpl = new DashboardImpl_1.DashboardImpl(containedSheetInfoImpl, containedSheetInfo.dashboardZones, sheetPath, registryId, this);\n break;\n }\n default: {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ServerError, 'Invalid SheetType');\n }\n }\n return sheetImpl;\n };\n return StoryPointImpl;\n}());\nexports.StoryPointImpl = StoryPointImpl;\n//# sourceMappingURL=StoryPointImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar StoryPointInfoImpl = /** @class */ (function () {\n function StoryPointInfoImpl(_caption, _index, _storyPointId, _active, _updated, _parentStoryImpl) {\n this._caption = _caption;\n this._index = _index;\n this._storyPointId = _storyPointId;\n this._active = _active;\n this._updated = _updated;\n this._parentStoryImpl = _parentStoryImpl;\n }\n Object.defineProperty(StoryPointInfoImpl.prototype, \"caption\", {\n get: function () {\n return this._caption;\n },\n set: function (caption) {\n this._caption = caption;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointInfoImpl.prototype, \"index\", {\n get: function () {\n return this._index;\n },\n set: function (index) {\n this._index = index;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointInfoImpl.prototype, \"storyPointId\", {\n get: function () {\n return this._storyPointId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointInfoImpl.prototype, \"active\", {\n get: function () {\n return this._active;\n },\n set: function (isActive) {\n this._active = isActive;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointInfoImpl.prototype, \"updated\", {\n get: function () {\n return this._updated;\n },\n set: function (isUpdated) {\n this._updated = isUpdated;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StoryPointInfoImpl.prototype, \"parentStory\", {\n get: function () {\n return this._parentStoryImpl;\n },\n enumerable: true,\n configurable: true\n });\n return StoryPointInfoImpl;\n}());\nexports.StoryPointInfoImpl = StoryPointInfoImpl;\n//# sourceMappingURL=StoryPointInfoImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar WorkbookImpl = /** @class */ (function () {\n function WorkbookImpl() {\n }\n return WorkbookImpl;\n}());\nexports.WorkbookImpl = WorkbookImpl;\n//# sourceMappingURL=WorkbookImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar DataSource_1 = require(\"../DataSource\");\nvar LogicalTable_1 = require(\"../LogicalTable\");\nvar GetDataService_1 = require(\"../Services/GetDataService\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar TableauError_1 = require(\"../TableauError\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar DataSourceImpl_1 = require(\"./DataSourceImpl\");\nvar SheetImpl_1 = require(\"./SheetImpl\");\nvar WorksheetImpl = /** @class */ (function (_super) {\n __extends(WorksheetImpl, _super);\n function WorksheetImpl(sheetInfoImpl, _registryId, _visualId, _parentDashboardImpl, _parentStoryPointImpl) {\n var _this = _super.call(this, sheetInfoImpl, _registryId) || this;\n _this._visualId = _visualId;\n _this._parentDashboardImpl = _parentDashboardImpl;\n _this._parentStoryPointImpl = _parentStoryPointImpl;\n return _this;\n }\n Object.defineProperty(WorksheetImpl.prototype, \"parentDashboard\", {\n get: function () {\n return this._parentDashboardImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WorksheetImpl.prototype, \"parentStoryPoint\", {\n get: function () {\n return this._parentStoryPointImpl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WorksheetImpl.prototype, \"visualId\", {\n get: function () {\n return this._visualId;\n },\n enumerable: true,\n configurable: true\n });\n WorksheetImpl.prototype.getMaxPageRowLimit = function () {\n return 10000;\n };\n WorksheetImpl.prototype.applyFilterAsync = function (fieldName, values, updateType, options) {\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'Contract.FilterUpdateType');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.applyFilterAsync(this.visualId, fieldName, values, updateType, options);\n };\n WorksheetImpl.prototype.applyRangeFilterAsync = function (fieldName, filterOptions) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName');\n ErrorHelpers_1.ErrorHelpers.verifyParameter(filterOptions, 'filterOptions');\n if (filterOptions.nullOption) {\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(filterOptions.nullOption, api_external_contract_js_1.FilterNullOption, 'FilterNullOption');\n }\n else {\n ErrorHelpers_1.ErrorHelpers.verifyRangeParamType(filterOptions.min, filterOptions.max);\n }\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.applyRangeFilterAsync(this.visualId, fieldName, filterOptions);\n };\n WorksheetImpl.prototype.applyHierarchicalFilterAsync = function (fieldName, values, updateType, options) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName');\n ErrorHelpers_1.ErrorHelpers.verifyParameter(values, 'values');\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'Contract.FilterUpdateType');\n if (!Array.isArray(values) && !values.levels) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyHierarchicalFilterAsync must be an array or contain a levels key');\n }\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.applyHierarchicalFilterAsync(this.visualId, fieldName, values, updateType, options);\n };\n WorksheetImpl.prototype.clearFilterAsync = function (fieldName) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.clearFilterAsync(this.visualId, fieldName);\n };\n WorksheetImpl.prototype.applyRelativeDateFilterAsync = function (fieldName, options) {\n ErrorHelpers_1.ErrorHelpers.verifyStringParameter(fieldName, 'fieldName');\n ErrorHelpers_1.ErrorHelpers.verifyParameter(options, 'options');\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(options.periodType, api_external_contract_js_1.PeriodType, 'PeriodType');\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(options.rangeType, api_external_contract_js_1.DateRangeType, 'DateRangeType');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.applyRelativeDateFilterAsync(this.visualId, fieldName, options);\n };\n WorksheetImpl.prototype.getDataSourcesAsync = function () {\n var _this = this;\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return service.getDataSourcesAsync(this.visualId).then(function (result) {\n var dataSchema = result;\n var worksheetDataSourceInfo = dataSchema.worksheetDataSchemaMap[_this.name];\n var dataSources = [];\n // First, add the primary datasource. By convention, it comes first in the returned array.\n var primaryId = worksheetDataSourceInfo.primaryDataSource;\n dataSources.push(_this.createDataSourceFromInfo(dataSchema.dataSources[primaryId]));\n // Then, loop through any secondary data sources and add them.\n for (var _i = 0, _a = worksheetDataSourceInfo.referencedDataSourceList; _i < _a.length; _i++) {\n var secondaryId = _a[_i];\n if (secondaryId !== primaryId) {\n dataSources.push(_this.createDataSourceFromInfo(dataSchema.dataSources[secondaryId]));\n }\n }\n return dataSources;\n });\n };\n WorksheetImpl.prototype.getFiltersAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.getFiltersAsync(this.visualId);\n };\n WorksheetImpl.prototype.getSelectedMarksAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n return service.getSelectedMarksAsync(this.visualId);\n };\n WorksheetImpl.prototype.getHighlightedMarksAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n return service.getHighlightedMarksAsync(this.visualId);\n };\n WorksheetImpl.prototype.getSummaryDataAsync = function (options) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return service.getUnderlyingDataAsync(this.visualId, GetDataService_1.GetDataType.Summary, !!options.ignoreAliases, !!options.ignoreSelection, true, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n WorksheetImpl.prototype.getSummaryDataReaderAsync = function (pageRowCount, options) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return service.getSummaryDataReaderAsync(this.visualId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, !!options.ignoreSelection, true, // includeAllColumns (can be overridden by columnsToIncludeById)\n options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n WorksheetImpl.prototype.getSummaryColumnsInfoAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n return service.getSummaryColumnsInfoAsync(this.visualId);\n };\n WorksheetImpl.prototype.getUnderlyingDataAsync = function (options) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return service.getUnderlyingDataAsync(this.visualId, GetDataService_1.GetDataType.Underlying, !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n WorksheetImpl.prototype.getUnderlyingTablesAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return service.getUnderlyingTablesAsync(this.visualId).then(function (logicalTableInfos) {\n return logicalTableInfos.map(function (logicalTableInfo) { return new LogicalTable_1.LogicalTable(logicalTableInfo); });\n });\n };\n WorksheetImpl.prototype.getUnderlyingTableDataAsync = function (logicalTableId, options) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return service.getUnderlyingTableDataAsync(this.visualId, logicalTableId, !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n WorksheetImpl.prototype.getUnderlyingTableDataReaderAsync = function (logicalTableId, pageRowCount, options) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n options = options || {};\n return service.getUnderlyingTableDataReaderAsync(this.visualId, logicalTableId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues);\n };\n WorksheetImpl.prototype.clearSelectedMarksAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"selection-service\" /* Selection */);\n return service.clearSelectedMarksAsync(this.visualId);\n };\n WorksheetImpl.prototype.selectMarksByValueAsync = function (selections, selectionUpdateType) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(selections, 'fieldName');\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(selectionUpdateType, api_external_contract_js_1.SelectionUpdateType, 'SelectionUpdateType');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"selection-service\" /* Selection */);\n return service.selectMarksByValueAsync(this.visualId, selections, selectionUpdateType);\n };\n WorksheetImpl.prototype.selectMarksByIdAsync = function (selections, selectionUpdateType) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(selections, 'fieldName');\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(selectionUpdateType, api_external_contract_js_1.SelectionUpdateType, 'SelectionUpdateType');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"selection-service\" /* Selection */);\n return service.selectMarksByIdAsync(this.visualId, selections, selectionUpdateType);\n };\n WorksheetImpl.prototype.annotateMarkAsync = function (mark, annotationText) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(mark, 'mark');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"annotation-service\" /* Annotation */);\n return service.annotateMarkAsync(this.visualId, mark, annotationText);\n };\n WorksheetImpl.prototype.getAnnotationsAsync = function () {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"annotation-service\" /* Annotation */);\n return service.getAnnotationsAsync(this.visualId);\n };\n WorksheetImpl.prototype.removeAnnotationAsync = function (annotation) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(annotation, 'annotation');\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"annotation-service\" /* Annotation */);\n return service.removeAnnotationAsync(this.visualId, annotation);\n };\n WorksheetImpl.prototype.appendContextMenuAsync = function (targetMenu, config) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"external-context-menu-service\" /* ExternalContextMenu */);\n return service.appendContextMenuAsync(this.visualId.worksheet, targetMenu, config);\n };\n WorksheetImpl.prototype.removeContextMenuAsync = function (targetMenu, menuItemId) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"external-context-menu-service\" /* ExternalContextMenu */);\n return service.removeContextMenuAsync(this.visualId.worksheet, targetMenu, menuItemId);\n };\n WorksheetImpl.prototype.executeContextMenuAsync = function (targetMenu, menuItemId) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"external-context-menu-service\" /* ExternalContextMenu */);\n return service.executeContextMenuAsync(this.visualId.worksheet, targetMenu, menuItemId);\n };\n WorksheetImpl.prototype.renameContextMenuAsync = function (targetMenu, menuHeader, menuDescription) {\n this.verifyActiveSheet();\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"external-context-menu-service\" /* ExternalContextMenu */);\n return service.renameContextMenuAsync(this.visualId.worksheet, targetMenu, menuHeader, menuDescription);\n };\n WorksheetImpl.prototype.createDataSourceFromInfo = function (dataSourceInfo) {\n var dataSourceImpl = new DataSourceImpl_1.DataSourceImpl(dataSourceInfo, this._registryId);\n var dataSource = new DataSource_1.DataSource(dataSourceImpl);\n dataSourceImpl.initializeWithPublicInterfaces(dataSource);\n return dataSource;\n };\n WorksheetImpl.prototype.verifyActiveSheet = function () {\n var isRootAndActiveWorksheet = this.active;\n var isInsideActiveDashboard = this.isInsideActiveDashboard();\n var isInsideActiveStoryPoint = this.isInsideActiveStoryPoint();\n if (!isRootAndActiveWorksheet && !isInsideActiveDashboard && !isInsideActiveStoryPoint) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.NotActiveSheet, 'Operation not allowed on non-active sheet');\n }\n };\n WorksheetImpl.prototype.isInsideActiveStoryPoint = function () {\n return this._parentStoryPointImpl && this._parentStoryPointImpl.active;\n };\n WorksheetImpl.prototype.isInsideActiveDashboard = function () {\n return this._parentDashboardImpl && this._parentDashboardImpl.active;\n };\n return WorksheetImpl;\n}(SheetImpl_1.SheetImpl));\nexports.WorksheetImpl = WorksheetImpl;\n//# sourceMappingURL=WorksheetImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of a logical table.\n * This does not follow the Impl pattern as it is just a property bag.\n */\nvar LogicalTable = /** @class */ (function () {\n function LogicalTable(_logicalTable) {\n this._logicalTable = _logicalTable;\n }\n Object.defineProperty(LogicalTable.prototype, \"id\", {\n get: function () {\n return this._logicalTable.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LogicalTable.prototype, \"caption\", {\n get: function () {\n return this._logicalTable.caption;\n },\n enumerable: true,\n configurable: true\n });\n return LogicalTable;\n}());\nexports.LogicalTable = LogicalTable;\n//# sourceMappingURL=LogicalTable.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar Filter = /** @class */ (function () {\n function Filter(_worksheetName, _fieldName, _filterType, _fieldId, _registryId) {\n this._worksheetName = _worksheetName;\n this._fieldName = _fieldName;\n this._filterType = _filterType;\n this._fieldId = _fieldId;\n this._registryId = _registryId;\n }\n Object.defineProperty(Filter.prototype, \"worksheetName\", {\n get: function () {\n return this._worksheetName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Filter.prototype, \"fieldName\", {\n get: function () {\n return this._fieldName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Filter.prototype, \"fieldId\", {\n get: function () {\n return this._fieldId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Filter.prototype, \"filterType\", {\n get: function () {\n return this._filterType;\n },\n enumerable: true,\n configurable: true\n });\n Filter.prototype.getFieldAsync = function () {\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"data-source-service\" /* DataSourceService */);\n return service.getFieldAsync(this._fieldId);\n };\n Filter.prototype.getAppliedWorksheetsAsync = function () {\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.getAppliedWorksheetsAsync(this._worksheetName, this._fieldId);\n };\n Filter.prototype.setAppliedWorksheetsAsync = function (applyToWorksheets) {\n ErrorHelpers_1.ErrorHelpers.verifyParameter(applyToWorksheets, 'applyToWorksheets');\n var uniqueWorksheets = new Set(applyToWorksheets);\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.setAppliedWorksheetsAsync(this._worksheetName, this._fieldName, this._fieldId, Array.from(uniqueWorksheets));\n };\n return Filter;\n}());\nexports.Filter = Filter;\nvar CategoricalFilter = /** @class */ (function (_super) {\n __extends(CategoricalFilter, _super);\n function CategoricalFilter(worksheetName, fieldName, fieldId, filterType, registryId, _appliedValues, _isExcludeMode, _isAllSelected) {\n var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this;\n _this._appliedValues = _appliedValues;\n _this._isExcludeMode = _isExcludeMode;\n _this._isAllSelected = _isAllSelected;\n return _this;\n }\n Object.defineProperty(CategoricalFilter.prototype, \"isAllSelected\", {\n get: function () {\n return this._isAllSelected;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CategoricalFilter.prototype, \"appliedValues\", {\n get: function () {\n return this._appliedValues;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CategoricalFilter.prototype, \"isExcludeMode\", {\n get: function () {\n return this._isExcludeMode;\n },\n enumerable: true,\n configurable: true\n });\n CategoricalFilter.prototype.getDomainAsync = function (domainType) {\n if (!domainType) {\n domainType = api_external_contract_js_1.FilterDomainType.Relevant;\n }\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(domainType, api_external_contract_js_1.FilterDomainType, 'FilterDomainType');\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n return service.getCategoricalDomainAsync(this._worksheetName, this._fieldId, domainType);\n };\n return CategoricalFilter;\n}(Filter));\nexports.CategoricalFilter = CategoricalFilter;\nvar HierarchicalDataValue = /** @class */ (function () {\n function HierarchicalDataValue(_value, _hierarchicalPath, _level) {\n this._value = _value;\n this._hierarchicalPath = _hierarchicalPath;\n this._level = _level;\n }\n Object.defineProperty(HierarchicalDataValue.prototype, \"value\", {\n get: function () {\n return this._value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalDataValue.prototype, \"hierarchicalPath\", {\n get: function () {\n return this._hierarchicalPath;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalDataValue.prototype, \"level\", {\n get: function () {\n return this._level;\n },\n enumerable: true,\n configurable: true\n });\n return HierarchicalDataValue;\n}());\nexports.HierarchicalDataValue = HierarchicalDataValue;\nvar HierarchicalLevelDetail = /** @class */ (function () {\n function HierarchicalLevelDetail(_name, _levelSelectionState) {\n this._name = _name;\n this._levelSelectionState = _levelSelectionState;\n }\n Object.defineProperty(HierarchicalLevelDetail.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalLevelDetail.prototype, \"levelSelectionState\", {\n get: function () {\n return this._levelSelectionState;\n },\n enumerable: true,\n configurable: true\n });\n return HierarchicalLevelDetail;\n}());\nexports.HierarchicalLevelDetail = HierarchicalLevelDetail;\nvar HierarchicalFilter = /** @class */ (function (_super) {\n __extends(HierarchicalFilter, _super);\n function HierarchicalFilter(worksheetName, fieldName, fieldId, filterType, registryId, _dimensionName, _hierarchyCaption, _numberOfLevels, _levelDetails, _appliedValues, _isAllSelected) {\n var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this;\n _this._dimensionName = _dimensionName;\n _this._hierarchyCaption = _hierarchyCaption;\n _this._numberOfLevels = _numberOfLevels;\n _this._levelDetails = _levelDetails;\n _this._appliedValues = _appliedValues;\n _this._isAllSelected = _isAllSelected;\n return _this;\n }\n HierarchicalFilter.prototype.getDomainAsync = function (domainType) {\n throw new Error('Method not implemented.');\n };\n Object.defineProperty(HierarchicalFilter.prototype, \"dimensionName\", {\n get: function () {\n return this._dimensionName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalFilter.prototype, \"hierarchyCaption\", {\n get: function () {\n return this._hierarchyCaption;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalFilter.prototype, \"numberOfLevels\", {\n get: function () {\n return this._numberOfLevels;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalFilter.prototype, \"levelDetails\", {\n get: function () {\n return this._levelDetails;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalFilter.prototype, \"isAllSelected\", {\n get: function () {\n return this._isAllSelected;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HierarchicalFilter.prototype, \"appliedValues\", {\n get: function () {\n return this._appliedValues;\n },\n enumerable: true,\n configurable: true\n });\n return HierarchicalFilter;\n}(Filter));\nexports.HierarchicalFilter = HierarchicalFilter;\nvar RangeFilter = /** @class */ (function (_super) {\n __extends(RangeFilter, _super);\n function RangeFilter(worksheetName, fieldName, fieldId, filterType, registryId, _min, _max, _includeNullValues) {\n var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this;\n _this._min = _min;\n _this._max = _max;\n _this._includeNullValues = _includeNullValues;\n return _this;\n }\n Object.defineProperty(RangeFilter.prototype, \"minValue\", {\n get: function () {\n return this._min;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RangeFilter.prototype, \"maxValue\", {\n get: function () {\n return this._max;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RangeFilter.prototype, \"includeNullValues\", {\n get: function () {\n return this._includeNullValues;\n },\n enumerable: true,\n configurable: true\n });\n RangeFilter.prototype.getDomainAsync = function (domainType) {\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"filter-service\" /* Filter */);\n if (!domainType) {\n domainType = api_external_contract_js_1.FilterDomainType.Relevant;\n }\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(domainType, api_external_contract_js_1.FilterDomainType, 'FilterDomainType');\n return service.getRangeDomainAsync(this._worksheetName, this._fieldId, domainType);\n };\n return RangeFilter;\n}(Filter));\nexports.RangeFilter = RangeFilter;\nvar RelativeDateFilter = /** @class */ (function (_super) {\n __extends(RelativeDateFilter, _super);\n function RelativeDateFilter(worksheetName, fieldName, fieldId, filterType, registryId, _anchorDate, _periodType, _rangeType, _rangeN) {\n var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this;\n _this._anchorDate = _anchorDate;\n _this._periodType = _periodType;\n _this._rangeType = _rangeType;\n _this._rangeN = _rangeN;\n return _this;\n }\n Object.defineProperty(RelativeDateFilter.prototype, \"anchorDate\", {\n get: function () {\n return this._anchorDate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RelativeDateFilter.prototype, \"periodType\", {\n get: function () {\n return this._periodType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RelativeDateFilter.prototype, \"rangeType\", {\n get: function () {\n return this._rangeType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RelativeDateFilter.prototype, \"rangeN\", {\n get: function () {\n return this._rangeN;\n },\n enumerable: true,\n configurable: true\n });\n return RelativeDateFilter;\n}(Filter));\nexports.RelativeDateFilter = RelativeDateFilter;\nvar CategoricalDomain = /** @class */ (function () {\n function CategoricalDomain(_values, _domainType) {\n this._values = _values;\n this._domainType = _domainType;\n }\n Object.defineProperty(CategoricalDomain.prototype, \"values\", {\n get: function () {\n return this._values;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CategoricalDomain.prototype, \"type\", {\n get: function () {\n return this._domainType;\n },\n enumerable: true,\n configurable: true\n });\n return CategoricalDomain;\n}());\nexports.CategoricalDomain = CategoricalDomain;\nvar RangeDomain = /** @class */ (function () {\n function RangeDomain(_min, _max, _domainType) {\n this._min = _min;\n this._max = _max;\n this._domainType = _domainType;\n }\n Object.defineProperty(RangeDomain.prototype, \"type\", {\n get: function () {\n return this._domainType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RangeDomain.prototype, \"min\", {\n get: function () {\n return this._min;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RangeDomain.prototype, \"max\", {\n get: function () {\n return this._max;\n },\n enumerable: true,\n configurable: true\n });\n return RangeDomain;\n}());\nexports.RangeDomain = RangeDomain;\n//# sourceMappingURL=FilterModels.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar DataTable = /** @class */ (function () {\n function DataTable(_data, _columns, _totalRowCount, _isTotalRowCountLimited, _isSummaryData, _marksInfo) {\n this._data = _data;\n this._columns = _columns;\n this._totalRowCount = _totalRowCount;\n this._isTotalRowCountLimited = _isTotalRowCountLimited;\n this._isSummaryData = _isSummaryData;\n this._marksInfo = _marksInfo;\n this._name = _isSummaryData ? 'Summary Data Table' : 'Underlying Data Table';\n }\n Object.defineProperty(DataTable.prototype, \"name\", {\n get: function () {\n return this._name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"data\", {\n get: function () {\n return this._data;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"columns\", {\n get: function () {\n return this._columns;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"marksInfo\", {\n get: function () {\n return this._marksInfo;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"totalRowCount\", {\n get: function () {\n return this._totalRowCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"isTotalRowCountLimited\", {\n get: function () {\n return this._isTotalRowCountLimited;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTable.prototype, \"isSummaryData\", {\n get: function () {\n return this._isSummaryData;\n },\n enumerable: true,\n configurable: true\n });\n return DataTable;\n}());\nexports.DataTable = DataTable;\nvar MarkInfo = /** @class */ (function () {\n function MarkInfo(_type, _color, _tupleId) {\n this._type = _type;\n this._color = _color;\n this._tupleId = _tupleId;\n }\n Object.defineProperty(MarkInfo.prototype, \"type\", {\n get: function () {\n return this._type;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkInfo.prototype, \"color\", {\n get: function () {\n return this._color;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkInfo.prototype, \"tupleId\", {\n get: function () {\n return this._tupleId;\n },\n enumerable: true,\n configurable: true\n });\n return MarkInfo;\n}());\nexports.MarkInfo = MarkInfo;\nvar Column = /** @class */ (function () {\n function Column(_fieldName, _fieldId, _dataType, _isReferenced, _index) {\n this._fieldName = _fieldName;\n this._fieldId = _fieldId;\n this._dataType = _dataType;\n this._isReferenced = _isReferenced;\n this._index = _index;\n }\n Object.defineProperty(Column.prototype, \"fieldName\", {\n get: function () {\n return this._fieldName;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Column.prototype, \"fieldId\", {\n get: function () {\n return this._fieldId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Column.prototype, \"dataType\", {\n get: function () {\n return this._dataType;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Column.prototype, \"isReferenced\", {\n get: function () {\n return this._isReferenced;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Column.prototype, \"index\", {\n get: function () {\n return this._index;\n },\n enumerable: true,\n configurable: true\n });\n return Column;\n}());\nexports.Column = Column;\nvar DataValue = /** @class */ (function () {\n /* tslint:disable:no-any */\n function DataValue(_value, _nativeValue, _formattedValue) {\n this._value = _value;\n this._nativeValue = _nativeValue;\n this._formattedValue = _formattedValue;\n }\n Object.defineProperty(DataValue.prototype, \"value\", {\n get: function () {\n return this._value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataValue.prototype, \"nativeValue\", {\n get: function () {\n return this._nativeValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataValue.prototype, \"formattedValue\", {\n get: function () {\n return this._formattedValue;\n },\n enumerable: true,\n configurable: true\n });\n return DataValue;\n}());\nexports.DataValue = DataValue;\n//# sourceMappingURL=GetDataModels.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ServiceRegistry_1 = require(\"../Services/ServiceRegistry\");\nvar ErrorHelpers_1 = require(\"../Utils/ErrorHelpers\");\nvar DataTableReader = /** @class */ (function () {\n function DataTableReader(_id, _totalRowCount, _pageRowCount, _registryId) {\n this._id = _id;\n this._totalRowCount = _totalRowCount;\n this._pageRowCount = _pageRowCount;\n this._registryId = _registryId;\n this._pageCount = Math.ceil(_totalRowCount / _pageRowCount);\n }\n Object.defineProperty(DataTableReader.prototype, \"totalRowCount\", {\n get: function () {\n return this._totalRowCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTableReader.prototype, \"pageCount\", {\n get: function () {\n return this._pageCount;\n },\n enumerable: true,\n configurable: true\n });\n DataTableReader.prototype.getPageAsync = function (pageNumber) {\n ErrorHelpers_1.ErrorHelpers.verifyRange(pageNumber, 0, this._pageCount);\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n return service.getPageAsync(this._id, pageNumber, this._pageRowCount);\n };\n DataTableReader.prototype.getAllPagesAsync = function (maxRows) {\n return __awaiter(this, void 0, void 0, function () {\n var firstPage, rowsRequested, pagesRequested, pagesToFetch, isDataLimited, remainingData, i, page, fullData;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.getPageAsync(0)];\n case 1:\n firstPage = _b.sent();\n maxRows = maxRows || this.totalRowCount;\n rowsRequested = Math.min(maxRows, this.totalRowCount);\n pagesRequested = Math.ceil(rowsRequested / this._pageRowCount);\n pagesToFetch = Math.min(pagesRequested, 400);\n isDataLimited = pagesToFetch < pagesRequested;\n remainingData = [];\n i = 1;\n _b.label = 2;\n case 2:\n if (!(i < pagesToFetch)) return [3 /*break*/, 5];\n return [4 /*yield*/, this.getPageAsync(i)];\n case 3:\n page = _b.sent();\n remainingData.push(page.data);\n _b.label = 4;\n case 4:\n i++;\n return [3 /*break*/, 2];\n case 5:\n fullData = (_a = firstPage.data).concat.apply(_a, remainingData);\n // This slices the array only if maxRows has been set and is less than totalRowCount\n fullData.length = rowsRequested;\n return [2 /*return*/, {\n name: firstPage.name,\n data: fullData,\n columns: firstPage.columns,\n totalRowCount: isDataLimited ? pagesToFetch * this._pageRowCount : rowsRequested,\n isTotalRowCountLimited: isDataLimited,\n isSummaryData: firstPage.isSummaryData,\n }];\n }\n });\n });\n };\n DataTableReader.prototype.releaseAsync = function () {\n var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService(\"get-data-service\" /* GetData */);\n return service.releaseAsync(this._id);\n };\n return DataTableReader;\n}());\nexports.DataTableReader = DataTableReader;\n//# sourceMappingURL=GetDataTableReaderModels.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Selection Model.\n */\nvar SelectionModel = /** @class */ (function () {\n function SelectionModel() {\n }\n return SelectionModel;\n}());\nexports.SelectionModel = SelectionModel;\n/**\n * Value based selection model. Meant for hierarchical, range and categorical selections.\n */\nvar ValueSelectionModel = /** @class */ (function (_super) {\n __extends(ValueSelectionModel, _super);\n function ValueSelectionModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.selectValues = [];\n return _this;\n }\n return ValueSelectionModel;\n}(SelectionModel));\nexports.ValueSelectionModel = ValueSelectionModel;\n/**\n * Hierarchical value selection model\n */\nvar HierarchicalSelectionModel = /** @class */ (function (_super) {\n __extends(HierarchicalSelectionModel, _super);\n function HierarchicalSelectionModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return HierarchicalSelectionModel;\n}(ValueSelectionModel));\nexports.HierarchicalSelectionModel = HierarchicalSelectionModel;\n/**\n * Range based value selection model\n */\nvar RangeSelectionModel = /** @class */ (function (_super) {\n __extends(RangeSelectionModel, _super);\n function RangeSelectionModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return RangeSelectionModel;\n}(SelectionModel));\nexports.RangeSelectionModel = RangeSelectionModel;\n/**\n * Dimension value selection model\n */\nvar DimensionSelectionModel = /** @class */ (function (_super) {\n __extends(DimensionSelectionModel, _super);\n function DimensionSelectionModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return DimensionSelectionModel;\n}(ValueSelectionModel));\nexports.DimensionSelectionModel = DimensionSelectionModel;\n/**\n * Tuple based selection model\n */\nvar TupleSelectionModel = /** @class */ (function () {\n function TupleSelectionModel() {\n this.objectIds = [];\n }\n return TupleSelectionModel;\n}());\nexports.TupleSelectionModel = TupleSelectionModel;\n/**\n * Container class to populate all the selection models when parsing input\n */\nvar SelectionModelsContainer = /** @class */ (function () {\n function SelectionModelsContainer() {\n this.hierModelArr = [];\n this.dimModelArr = [];\n this.quantModelArr = [];\n }\n return SelectionModelsContainer;\n}());\nexports.SelectionModelsContainer = SelectionModelsContainer;\n//# sourceMappingURL=SelectionModels.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Point = /** @class */ (function () {\n function Point(_x, _y) {\n this._x = _x;\n this._y = _y;\n }\n Object.defineProperty(Point.prototype, \"x\", {\n get: function () {\n return this._x;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Point.prototype, \"y\", {\n get: function () {\n return this._y;\n },\n enumerable: true,\n configurable: true\n });\n return Point;\n}());\nexports.Point = Point;\n//# sourceMappingURL=Point.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Defines which type of getData call to make.\n */\nvar GetDataType;\n(function (GetDataType) {\n GetDataType[\"Summary\"] = \"summary\";\n GetDataType[\"Underlying\"] = \"underlying\";\n})(GetDataType = exports.GetDataType || (exports.GetDataType = {}));\n//# sourceMappingURL=GetDataService.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar AnimationServiceImpl_1 = require(\"./impl/AnimationServiceImpl\");\nvar AnnotationServiceImpl_1 = require(\"./impl/AnnotationServiceImpl\");\nvar DataSourceServiceImpl_1 = require(\"./impl/DataSourceServiceImpl\");\nvar ExternalContextMenuServiceImpl_1 = require(\"./impl/ExternalContextMenuServiceImpl\");\nvar FilterServiceImpl_1 = require(\"./impl/FilterServiceImpl\");\nvar GetDataServiceImpl_1 = require(\"./impl/GetDataServiceImpl\");\nvar NotificationServiceImpl_1 = require(\"./impl/NotificationServiceImpl\");\nvar ParametersServiceImpl_1 = require(\"./impl/ParametersServiceImpl\");\nvar SelectionServiceImpl_1 = require(\"./impl/SelectionServiceImpl\");\nvar SizeServiceImpl_1 = require(\"./impl/SizeServiceImpl\");\nvar VizServiceImpl_1 = require(\"./impl/VizServiceImpl\");\nvar ZoneServiceImpl_1 = require(\"./impl/ZoneServiceImpl\");\nvar ServiceRegistry_1 = require(\"./ServiceRegistry\");\nfunction registerAllSharedServices(dispatcher, registryId, platformVersion) {\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new AnimationServiceImpl_1.AnimationServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new DataSourceServiceImpl_1.DataSourceServiceImpl(dispatcher, registryId, platformVersion));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new GetDataServiceImpl_1.GetDataServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new FilterServiceImpl_1.FilterServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new NotificationServiceImpl_1.NotificationServiceImpl(dispatcher));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ParametersServiceImpl_1.ParametersServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new SelectionServiceImpl_1.SelectionServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new AnnotationServiceImpl_1.AnnotationServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ZoneServiceImpl_1.ZoneServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new SizeServiceImpl_1.SizeServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new VizServiceImpl_1.VizServiceImpl(dispatcher, registryId));\n ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ExternalContextMenuServiceImpl_1.ExternalContextMenuServiceImpl(dispatcher, registryId));\n}\nexports.registerAllSharedServices = registerAllSharedServices;\n//# sourceMappingURL=RegisterAllSharedServices.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nwindow.__tableauApiServiceRegistry = window.__tableauApiServiceRegistry || {};\nvar ServiceRegistryImpl = /** @class */ (function () {\n function ServiceRegistryImpl() {\n this._services = {};\n }\n ServiceRegistryImpl.prototype.registerService = function (service) {\n this._services[service.serviceName] = service;\n };\n ServiceRegistryImpl.prototype.getService = function (serviceName) {\n if (!this._services.hasOwnProperty(serviceName)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"Service not registered: \" + serviceName);\n }\n return this._services[serviceName];\n };\n return ServiceRegistryImpl;\n}());\n/**\n * Static class used for getting access to the single instance\n * of the ApiServiceRegistry associated with the registryId.\n *\n * Extensions by design don't need to store/access multiple service registries. Their single instance of ServiceRegistry is\n * stored/access with registryId = 0.\n *\n * Whereas Embedding needs to be aware of which ServiceRegistry to use when there are multiple vizzes embedded.\n * An example of how window.__tableauApiServiceRegistry will look when there are two vizzes: { 0 : ServiceRegistry, 1 : ServiceRegistry}\n * where registry ID of 0 & 1 refers to viz's internal identifier (which is generated by VizManager).\n */\nvar ApiServiceRegistry = /** @class */ (function () {\n // Private to avoid anyone constructing this\n function ApiServiceRegistry() {\n }\n /**\n * Gets the singleton instance of the ServiceRegistry\n */\n ApiServiceRegistry.get = function (registryId) {\n if (!window.__tableauApiServiceRegistry || !window.__tableauApiServiceRegistry[registryId]) {\n ApiServiceRegistry.setInstance(registryId, new ServiceRegistryImpl());\n }\n if (!window.__tableauApiServiceRegistry[registryId]) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Service registry failed');\n }\n return window.__tableauApiServiceRegistry[registryId];\n };\n /**\n * Helper method that sets the service registry instance for the corresponding registryId. Can be used by unit tests\n *\n * @param {ServiceRegistry} serviceRegistry The new registry\n */\n ApiServiceRegistry.setInstance = function (registryId, serviceRegistry) {\n if (!window.__tableauApiServiceRegistry) {\n window.__tableauApiServiceRegistry = {};\n }\n window.__tableauApiServiceRegistry[registryId] = serviceRegistry;\n };\n /**\n * Only used by unit tests\n */\n ApiServiceRegistry.clearRegistry = function () {\n window.__tableauApiServiceRegistry = {};\n };\n return ApiServiceRegistry;\n}());\nexports.ApiServiceRegistry = ApiServiceRegistry;\n//# sourceMappingURL=ServiceRegistry.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ExternalToInternalEnumMappings_1 = require(\"../../EnumMappings/ExternalToInternalEnumMappings\");\nvar ErrorHelpers_1 = require(\"../../Utils/ErrorHelpers\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar AnimationServiceImpl = /** @class */ (function (_super) {\n __extends(AnimationServiceImpl, _super);\n function AnimationServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(AnimationServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"animation-service\" /* Animation */;\n },\n enumerable: true,\n configurable: true\n });\n AnimationServiceImpl.prototype.replayAsync = function (replaySpeed) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.ReplaySpeed] = 1.0,\n _a);\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(replaySpeed, api_external_contract_js_1.ReplaySpeedType, 'ReplaySpeedType');\n parameters[api_internal_contract_js_1.ParameterId.ReplaySpeed] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.setReplaySpeedType.convert(replaySpeed);\n return this.execute(api_internal_contract_js_1.VerbId.ReplayAnimation, parameters).then(function (response) {\n return;\n });\n };\n return AnimationServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.AnimationServiceImpl = AnimationServiceImpl;\n//# sourceMappingURL=AnimationServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar InternalToExternalEnumMappings_1 = require(\"../../EnumMappings/InternalToExternalEnumMappings\");\nvar SelectionModels_1 = require(\"../../Models/SelectionModels\");\nvar TableauError_1 = require(\"../../TableauError\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar AnnotationServiceImpl = /** @class */ (function (_super) {\n __extends(AnnotationServiceImpl, _super);\n function AnnotationServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(AnnotationServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"annotation-service\" /* Annotation */;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Method to annotate a mark on the given worksheet.\n *\n * @param visualId\n * @param mark\n * @param annotationText\n */\n AnnotationServiceImpl.prototype.annotateMarkAsync = function (visualId, mark, annotationText) {\n var _a;\n var selectionModelContainer = this.parseMarkSelectionIds([mark]);\n var dummyTargetPoint = { x: 0, y: 0 };\n var formattedText = \"\" + annotationText + \"\";\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'annotateMarkAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.AnnotateEnum] = api_internal_contract_js_1.AnnotateEnum.Mark,\n _a[api_internal_contract_js_1.ParameterId.TargetPoint] = dummyTargetPoint,\n _a[api_internal_contract_js_1.ParameterId.SelectionList] = [selectionModelContainer.selection],\n _a[api_internal_contract_js_1.ParameterId.FormattedText] = formattedText,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.CreateAnnotation, parameters).then(function (response) {\n // Expecting an empty model and hence the void response.\n return;\n });\n };\n /**\n * Method to retrieve annotations for the given worksheet.\n *\n * @param visualId\n * @returns {Promise>}\n */\n AnnotationServiceImpl.prototype.getAnnotationsAsync = function (visualId) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getAnnotationsAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetAnnotations, parameters).then(function (response) {\n var annotationsList = response.result;\n return _this.annotationFilterMap(annotationsList);\n });\n };\n /**\n * Method to remove an annotation from a given worksheet.\n *\n * @param visualId\n * @param annotation\n */\n AnnotationServiceImpl.prototype.removeAnnotationAsync = function (visualId, annotation) {\n var _a;\n var selectionModelContainer = this.parseAnnotationSelectionIds([annotation]);\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeAnnotationAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.SelectionList] = [selectionModelContainer.selection],\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.RemoveAnnotation, parameters).then(function (response) {\n // Expecting an empty model and hence the void response.\n return;\n });\n };\n /**\n * Method to prepare the pres models for selection by MarksInfo\n * @param marks\n */\n AnnotationServiceImpl.prototype.parseMarkSelectionIds = function (marks) {\n var ids = [];\n var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer();\n marks.forEach(function (mark) {\n var tupleId = mark.tupleId;\n if (tupleId !== undefined && tupleId !== null && tupleId > 0) {\n ids.push(tupleId.toString()); // collect the tuple ids\n }\n else {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'invalid tupleId');\n }\n });\n if (ids.length !== 0) {\n // tuple ids based selection\n var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel();\n tupleSelectionModel.selectionType = 'tuples';\n tupleSelectionModel.objectIds = ids;\n selectionModelContainer.selection = tupleSelectionModel;\n }\n return selectionModelContainer;\n };\n /**\n * Method to prepare the pres models for selection by MarkAnnotationInfo\n * @param marks\n */\n AnnotationServiceImpl.prototype.parseAnnotationSelectionIds = function (annotations) {\n var ids = [];\n var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer();\n annotations.forEach(function (annotation) {\n var annotationId = annotation.annotationId;\n if (annotationId !== undefined && annotationId !== null && annotationId >= 0) {\n ids.push(annotationId.toString()); // collect the annotation ids\n }\n else {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'invalid annotationId');\n }\n });\n if (ids.length !== 0) {\n // annotation ids based selection\n var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel();\n tupleSelectionModel.selectionType = 'annotations';\n tupleSelectionModel.objectIds = ids;\n selectionModelContainer.selection = tupleSelectionModel;\n }\n return selectionModelContainer;\n };\n /**\n * Method to map Annotation to MarkAnnotationInfo\n * @param annotation\n * @returns {Annotation}\n */\n AnnotationServiceImpl.prototype.mapAnnotation = function (annotation) {\n return {\n annotationHTML: annotation.annotationText,\n annotationId: annotation.annotationId,\n annotationText: annotation.annotationPlainText,\n annotationType: InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.annotationType.convert(annotation.annotateEnum),\n tupleId: annotation.tupleId,\n };\n };\n /**\n * Filter the Annotations to Mark Annotations, and map them to MarkAnnotationInfo\n * @param annotations\n * @returns {Array}\n */\n AnnotationServiceImpl.prototype.annotationFilterMap = function (annotations) {\n var _this = this;\n var annotationInfos = annotations.map(function (annotation) { return _this.mapAnnotation(annotation); });\n return annotationInfos;\n };\n return AnnotationServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.AnnotationServiceImpl = AnnotationServiceImpl;\n//# sourceMappingURL=AnnotationServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar ClientInfoServiceImpl = /** @class */ (function (_super) {\n __extends(ClientInfoServiceImpl, _super);\n function ClientInfoServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ClientInfoServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"client-info-service\" /* ClientInfo */;\n },\n enumerable: true,\n configurable: true\n });\n ClientInfoServiceImpl.prototype.getClientInfoAsync = function () {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.GetEmbeddingClientInfo;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getClientInfoAsync',\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var clientInfo = response.result;\n return clientInfo;\n });\n };\n return ClientInfoServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.ClientInfoServiceImpl = ClientInfoServiceImpl;\n//# sourceMappingURL=ClientInfoServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar InternalContract = require(\"@tableau/api-internal-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar DataSource_1 = require(\"../../DataSource\");\nvar Field_1 = require(\"../../Field\");\nvar DataSourceImpl_1 = require(\"../../Impl/DataSourceImpl\");\nvar FieldImpl_1 = require(\"../../Impl/FieldImpl\");\nvar TableauError_1 = require(\"../../TableauError\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nexports.SENTINEL_LOGICAL_TABLE_INFO = {\n id: InternalContract.ApiShowDataTableSentinel.SingleTableId,\n caption: InternalContract.ApiShowDataTableSentinel.SingleTableCaption,\n};\n// The minimum platform version when Object Model was supported\nvar platformVersionObjectModelSupport = { major: 1, minor: 20, fix: 1 };\nvar DataSourceServiceImpl = /** @class */ (function (_super) {\n __extends(DataSourceServiceImpl, _super);\n // Since Object Model is supported since Tableau 2020.2, DataSourceServiceImpl can be initialized with the\n // platform version when OM was supported. Once we drop support for Tableau versions <= 2020.1, all additional\n // code in here for Object Model can be removed.\n function DataSourceServiceImpl(dispatcher, registryId, _platformVersion) {\n if (_platformVersion === void 0) { _platformVersion = platformVersionObjectModelSupport; }\n var _this = _super.call(this, dispatcher, registryId) || this;\n _this._platformVersion = _platformVersion;\n return _this;\n }\n Object.defineProperty(DataSourceServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"data-source-service\" /* DataSourceService */;\n },\n enumerable: true,\n configurable: true\n });\n DataSourceServiceImpl.prototype.refreshAsync = function (dataSourceId) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'refreshAsync',\n _a[api_internal_contract_js_1.ParameterId.DeltaTimeMs] = 0,\n _a[api_internal_contract_js_1.ParameterId.ShouldRefreshDS] = true,\n _a);\n // On server: Not passing the datasource id will refresh all datasources.\n if (dataSourceId) {\n parameters[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId;\n }\n return this.execute(api_internal_contract_js_1.VerbId.RefreshDataSource, parameters).then(function (response) {\n return;\n });\n };\n DataSourceServiceImpl.prototype.getActiveTablesAsync = function (dataSourceId) {\n var _a;\n var joinParameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getActiveTablesAsync',\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId,\n _a);\n // Get the description of the tables used by this connection\n return this.execute(api_internal_contract_js_1.VerbId.GetActiveTables, joinParameters).then(function (joinResponse) {\n var tableInfos = joinResponse.result;\n // getActiveTables is unsupported for cubes and GA. We do not have a connection type property\n // available from the platform (intentionally, to reduce code churn as new connections are added).\n // Instead,just check if any tables are returned. This array will be empty for any non-table based datasource.\n if (tableInfos.tables.length === 0) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedMethodForDataSourceType, \"getActiveTables is not supported for: \" + dataSourceId);\n }\n return tableInfos.tables;\n });\n };\n DataSourceServiceImpl.prototype.getDataSourcesAsync = function (visualId) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDataSourcesAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetDataSources, parameters).then(function (response) {\n var dataSchema = response.result;\n return dataSchema;\n });\n };\n DataSourceServiceImpl.prototype.getAllDataSourcesAsync = function () {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getAllDataSourcesAsync',\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetAllDataSources, parameters).then(function (response) {\n var dataSchema = response.result;\n return dataSchema;\n });\n };\n DataSourceServiceImpl.prototype.getConnectionSummariesAsync = function (dataSourceId) {\n var _a;\n var params = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getConnectionSummariesAsync',\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId,\n _a);\n // Get the description of the tables used by this connection\n return this.execute(api_internal_contract_js_1.VerbId.GetConnectionDescriptionSummaries, params).then(function (response) {\n var descriptionSummaries = response.result;\n return descriptionSummaries;\n });\n };\n DataSourceServiceImpl.prototype.getFieldAsync = function (globalfieldName) {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.GetFieldAndDataSource;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getFieldAsync',\n _a[api_internal_contract_js_1.ParameterId.FieldId] = globalfieldName,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var dataSource = response.result[api_internal_contract_js_1.ParameterId.DataSource];\n var field = response.result[api_internal_contract_js_1.ParameterId.Field];\n return _this.convertField(field, _this.convertDataSource(dataSource));\n });\n };\n DataSourceServiceImpl.prototype.getLogicalTablesAsync = function (dataSourceId) {\n var _a;\n if (!this.isObjectModelSupportedByPlatform()) {\n /**\n * This sentinel ID can be passed to datasource.getLogicalTableData.\n * Once the desktop is upgraded to a version that supports object model,\n * the sentinel ID will automatically fetch the upgraded table.\n * */\n return new Promise(function (resolve) { return resolve([exports.SENTINEL_LOGICAL_TABLE_INFO]); });\n }\n var params = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTablesAsync',\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTables, params).then(function (response) {\n return response.result;\n });\n };\n DataSourceServiceImpl.prototype.getUnderlyingTablesAsync = function (visualId) {\n var _a;\n if (!this.isObjectModelSupportedByPlatform()) {\n /**\n * This sentinel ID can be passed to worksheet.getUnderlyingTableData.\n * Once the desktop is upgraded to a version that supports object model,\n * the sentinel ID will automatically fetch the upgraded table.\n * */\n return new Promise(function (resolve) { return resolve([exports.SENTINEL_LOGICAL_TABLE_INFO]); });\n }\n var params = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTablesAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTables, params).then(function (response) {\n return response.result;\n });\n };\n DataSourceServiceImpl.prototype.convertField = function (field, dataSource) {\n return new Field_1.Field(new FieldImpl_1.FieldImpl(field, dataSource));\n };\n DataSourceServiceImpl.prototype.convertDataSource = function (dataSource) {\n return new DataSource_1.DataSource(new DataSourceImpl_1.DataSourceImpl(dataSource, this._registryId));\n };\n DataSourceServiceImpl.prototype.isObjectModelSupportedByPlatform = function () {\n var platformVersionNoObjectModelSupport = { major: 1, minor: 13, fix: 0 };\n return InternalContract.VersionLessThan(platformVersionNoObjectModelSupport, this._platformVersion);\n };\n return DataSourceServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.DataSourceServiceImpl = DataSourceServiceImpl;\n//# sourceMappingURL=DataSourceServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar ExternalContextMenuServiceImpl = /** @class */ (function (_super) {\n __extends(ExternalContextMenuServiceImpl, _super);\n function ExternalContextMenuServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ExternalContextMenuServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"external-context-menu-service\" /* ExternalContextMenu */;\n },\n enumerable: true,\n configurable: true\n });\n ExternalContextMenuServiceImpl.prototype.appendContextMenuAsync = function (sheetName, targetMenu, config) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.AppendExternalMenuItem;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'appendContextMenuAsync',\n _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName,\n _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemDisplayName] = config.displayName,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var newMenuItemId = response.result;\n return newMenuItemId;\n });\n };\n ExternalContextMenuServiceImpl.prototype.removeContextMenuAsync = function (sheetName, targetMenu, menuItemId) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.RemoveExternalMenuItem;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeContextMenuAsync',\n _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName,\n _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemId] = menuItemId,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n ExternalContextMenuServiceImpl.prototype.executeContextMenuAsync = function (sheetName, targetMenu, menuItemId) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ExecuteExternalMenuItem;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'executeContextMenuAsync',\n _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName,\n _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemId] = menuItemId,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n ExternalContextMenuServiceImpl.prototype.renameContextMenuAsync = function (sheetName, targetMenu, menuHeader, menuDescription) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.RenameExternalMenu;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'renameContextMenuAsync',\n _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName,\n _a[api_internal_contract_js_1.ParameterId.ExternalMenuHeader] = menuHeader,\n _a[api_internal_contract_js_1.ParameterId.ExternalMenuDescription] = menuDescription,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n return ExternalContextMenuServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.ExternalContextMenuServiceImpl = ExternalContextMenuServiceImpl;\n//# sourceMappingURL=ExternalContextMenuServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar InternalContract = require(\"@tableau/api-internal-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ApiShared_1 = require(\"../../../ApiShared\");\nvar ExternalToInternalEnumMappings_1 = require(\"../../EnumMappings/ExternalToInternalEnumMappings\");\nvar InternalToExternalEnumMappings_1 = require(\"../../EnumMappings/InternalToExternalEnumMappings\");\nvar FilterModels_1 = require(\"../../Models/FilterModels\");\nvar DataValueFactory_1 = require(\"../../Utils/DataValueFactory\");\nvar Param_1 = require(\"../../Utils/Param\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar FilterServiceImpl = /** @class */ (function (_super) {\n __extends(FilterServiceImpl, _super);\n function FilterServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(FilterServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"filter-service\" /* Filter */;\n },\n enumerable: true,\n configurable: true\n });\n FilterServiceImpl.prototype.applyFilterAsync = function (visualId, fieldName, values, updateType, filterOptions) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ApplyCategoricalFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyFilterAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n if (!Array.isArray(values)) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyFilterAsync must be an array');\n }\n parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values;\n parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType);\n parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] =\n filterOptions === undefined || filterOptions.isExcludeMode === undefined ? false : filterOptions.isExcludeMode;\n return this.execute(verb, parameters).then(function (response) {\n return fieldName;\n });\n };\n FilterServiceImpl.prototype.applyRangeFilterAsync = function (visualId, fieldName, filterOptions) {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.ApplyRangeFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyRangeFilterAsync',\n _a);\n if (filterOptions.min !== undefined && filterOptions.min !== null) {\n var min = void 0;\n if (filterOptions.min instanceof Date) {\n min = Param_1.Param.serializeDateForPlatform(filterOptions.min);\n }\n else {\n min = filterOptions.min;\n }\n parameters[api_internal_contract_js_1.ParameterId.FilterRangeMin] = min;\n }\n if (filterOptions.max !== undefined && filterOptions.max !== null) {\n var max = void 0;\n if (filterOptions.max instanceof Date) {\n max = Param_1.Param.serializeDateForPlatform(filterOptions.max);\n }\n else {\n max = filterOptions.max;\n }\n parameters[api_internal_contract_js_1.ParameterId.FilterRangeMax] = max;\n }\n // The null option is used with min+max for 'include-range' or 'include-range-or-null'\n if (filterOptions.nullOption) {\n parameters[api_internal_contract_js_1.ParameterId.FilterRangeNullOption] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.nullOptions.convert(filterOptions.nullOption);\n }\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n return this.execute(verb, parameters).then(function (response) {\n _this.apiFilterHandlerCheckForCommandError(response.result);\n return fieldName;\n });\n };\n FilterServiceImpl.prototype.applyHierarchicalFilterAsync = function (visualId, fieldName, values, updateType, filterOptions) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.HierarchicalFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyHierarchicalFilterAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n var hierarchicalLevels = values.levels;\n if (Array.isArray(hierarchicalLevels) && hierarchicalLevels.length > 0) {\n parameters[api_internal_contract_js_1.ParameterId.FilterLevels] = hierarchicalLevels;\n }\n else if (values.length > 0) {\n parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values;\n }\n else {\n // the server command expects empty list for clearing the filter\n // it also expects eithers FilterLevels or FilterValues to be set\n parameters[api_internal_contract_js_1.ParameterId.FilterLevels] = [];\n }\n parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType);\n parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] = filterOptions && !!filterOptions.isExcludeMode;\n return this.execute(verb, parameters).then(function (response) {\n return fieldName;\n });\n };\n FilterServiceImpl.prototype.clearFilterAsync = function (visualId, fieldName) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ClearFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'clearFilterAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n return this.execute(verb, parameters).then(function (resposne) {\n return fieldName;\n });\n };\n FilterServiceImpl.prototype.applyRelativeDateFilterAsync = function (visualId, fieldName, options) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ApplyRelativeDateFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyRelativeDateFilterAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n parameters[api_internal_contract_js_1.ParameterId.PeriodType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.periodType.convert(options.periodType);\n parameters[api_internal_contract_js_1.ParameterId.DateRangeType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.dateRangeType.convert(options.rangeType);\n if (options.rangeType === api_external_contract_js_1.DateRangeType.LastN || options.rangeType === api_external_contract_js_1.DateRangeType.NextN) {\n if (options.rangeN === undefined || options.rangeN === null) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.EmbeddingErrorCodes.MissingRangeNForRelativeDateFilters, 'Missing rangeN field for a relative date filter of LASTN or NEXTN.');\n }\n parameters[api_internal_contract_js_1.ParameterId.RangeN] = options.rangeN;\n }\n if (options.anchorDate !== undefined && options.anchorDate !== null) {\n parameters[api_internal_contract_js_1.ParameterId.AnchorDate] = this.convertAnchorDate(options.anchorDate);\n }\n return this.execute(verb, parameters).then(function (response) {\n return response.result;\n });\n };\n FilterServiceImpl.prototype.getFiltersAsync = function (visualId) {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.GetFilters;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getFiltersAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n return this.execute(verb, parameters).then(function (response) {\n var filters = response.result;\n return _this.convertDomainFilters(filters);\n });\n };\n FilterServiceImpl.prototype.getCategoricalDomainAsync = function (worksheetName, fieldId, domainType) {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.GetCategoricalDomain;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCategoricalDomainAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = {\n worksheet: worksheetName,\n };\n parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId;\n parameters[api_internal_contract_js_1.ParameterId.DomainType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterDomainType.convert(domainType);\n return this.execute(verb, parameters).then(function (response) {\n var domain = response.result;\n return _this.convertCategoricalDomain(domain, domainType);\n });\n };\n FilterServiceImpl.prototype.getRangeDomainAsync = function (worksheetName, fieldId, domainType) {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.GetRangeDomain;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getRangeDomainAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = {\n worksheet: worksheetName,\n };\n parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId;\n parameters[api_internal_contract_js_1.ParameterId.DomainType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterDomainType.convert(domainType);\n return this.execute(verb, parameters).then(function (response) {\n var domain = response.result;\n return _this.convertRangeDomain(domain, domainType);\n });\n };\n FilterServiceImpl.prototype.getDashboardFiltersAsync = function () {\n var _a;\n var _this = this;\n var verb = api_internal_contract_js_1.VerbId.GetDashboardFilters;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDashboardFiltersAsync',\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var filters = response.result;\n return _this.convertDomainFilters(filters);\n });\n };\n FilterServiceImpl.prototype.applyDashboardFilterAsync = function (fieldName, values, updateType, filterOptions) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.DashboardCategoricalFilter;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyDashboardFilterAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName;\n parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values;\n parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType);\n parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] = filterOptions && !!filterOptions.isExcludeMode;\n return this.execute(verb, parameters).then(function (response) {\n return response.result;\n });\n };\n FilterServiceImpl.prototype.getAppliedWorksheetsAsync = function (worksheetName, fieldId) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var sharedFilterModel, worksheetNames;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.executeGetAppliedWorksheets(worksheetName, fieldId, 'getAppliedWorksheetsAsync')];\n case 1:\n sharedFilterModel = _b.sent();\n worksheetNames = [];\n (_a = sharedFilterModel.worksheets) === null || _a === void 0 ? void 0 : _a.map(function (worksheetInfo) {\n if (worksheetInfo.isSelected) {\n worksheetNames.push(worksheetInfo.worksheetName);\n }\n });\n return [2 /*return*/, worksheetNames];\n }\n });\n });\n };\n FilterServiceImpl.prototype.setAppliedWorksheetsAsync = function (worksheetName, fieldName, fieldId, applyToWorksheets) {\n return __awaiter(this, void 0, void 0, function () {\n var sharedFilterModel, allowedWorksheets, activeWorksheet, verb, parameters;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.executeGetAppliedWorksheets(worksheetName, fieldId, 'getAppliedWorksheetsAsyncInternal')];\n case 1:\n sharedFilterModel = _a.sent();\n if (!sharedFilterModel || !sharedFilterModel.worksheets) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'This filter does not apply to multiple worksheets');\n }\n allowedWorksheets = [];\n activeWorksheet = '';\n sharedFilterModel.worksheets.forEach(function (worksheet) {\n // Get active worksheet\n if (worksheet.isActive) {\n activeWorksheet = worksheet.worksheetName;\n }\n // Populate allowed worksheets\n if (worksheet.isSelected || worksheet.isEnabled) {\n allowedWorksheets.push(worksheet.worksheetName);\n }\n });\n if (activeWorksheet === '') {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'No active worksheet');\n }\n if (!applyToWorksheets.includes(activeWorksheet)) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, activeWorksheet + \" must be included in the applied worksheets\");\n }\n applyToWorksheets.forEach(function (sheet) {\n // check if it's present within compatible sheets\n if (!allowedWorksheets.includes(sheet)) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, \"The field \" + fieldName + \" isn't applicable to the worksheet \" + sheet);\n }\n });\n verb = api_internal_contract_js_1.VerbId.ChangeSharedFilter;\n parameters = {};\n parameters[api_internal_contract_js_1.ParameterId.FunctionName] = 'setAppliedWorksheetsAsync';\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = {\n worksheet: worksheetName,\n };\n parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId;\n parameters[api_internal_contract_js_1.ParameterId.SharedFilterSheets] = applyToWorksheets;\n return [2 /*return*/, this.execute(verb, parameters).then(function (response) {\n return applyToWorksheets;\n })];\n }\n });\n });\n };\n // Helper Methods\n FilterServiceImpl.prototype.executeGetAppliedWorksheets = function (worksheetName, fieldId, telemetryFunctionName) {\n var verb = api_internal_contract_js_1.VerbId.GetSharedFilter;\n var parameters = {};\n parameters[api_internal_contract_js_1.ParameterId.FunctionName] = telemetryFunctionName;\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = {\n worksheet: worksheetName,\n };\n parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId;\n return this.execute(verb, parameters).then(function (response) {\n var sharedFilterModel = response.result;\n return sharedFilterModel;\n });\n };\n FilterServiceImpl.prototype.convertDomainFilters = function (domainFilters) {\n var _this = this;\n var filters = [];\n domainFilters.forEach(function (domainFilter) {\n switch (domainFilter.filterType) {\n case api_internal_contract_js_1.FilterType.Categorical: {\n var filter = domainFilter;\n if (filter) {\n filters.push(_this.convertCategoricalFilter(filter));\n }\n else {\n throw new Error('Invalid Categorical Filter');\n }\n break;\n }\n case api_internal_contract_js_1.FilterType.Hierarchical: {\n var filter = domainFilter;\n if (filter) {\n filters.push(_this.convertHierarchicalFilter(filter));\n }\n else {\n throw new Error('Invalid Hierarchical Filter');\n }\n break;\n }\n case api_internal_contract_js_1.FilterType.Range: {\n var filter = domainFilter;\n if (filter) {\n filters.push(_this.convertRangeFilter(filter));\n }\n else {\n throw new Error('Invalid Range Filter');\n }\n break;\n }\n case api_internal_contract_js_1.FilterType.RelativeDate: {\n var filter = domainFilter;\n if (filter) {\n filters.push(_this.convertRelativeDateFilter(filter));\n }\n else {\n throw new Error('Invalid Relative Date Filter');\n }\n break;\n }\n default: {\n break;\n }\n }\n });\n return filters;\n };\n FilterServiceImpl.prototype.convertCategoricalFilter = function (domainFilter) {\n var appliedValues = domainFilter.values.map(function (dv) {\n return DataValueFactory_1.DataValueFactory.MakeFilterDataValue(dv);\n });\n return new FilterModels_1.CategoricalFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Categorical, this._registryId, appliedValues, domainFilter.isExclude, domainFilter.isAllSelected);\n };\n FilterServiceImpl.prototype.convertHierarchicalFilter = function (domainFilter) {\n var appliedValues = domainFilter.values.map(function (hierarchicalDataValue) {\n return new FilterModels_1.HierarchicalDataValue(DataValueFactory_1.DataValueFactory.MakeFilterDataValue(hierarchicalDataValue.value), hierarchicalDataValue.hierarchicalPath, hierarchicalDataValue.level);\n });\n var levelDetails = domainFilter.levelInfo.map(function (aLevel) {\n return new FilterModels_1.HierarchicalLevelDetail(aLevel.name, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.hierarchicalLevelSelectionState.convert(aLevel.levelSelectionState));\n });\n return new FilterModels_1.HierarchicalFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Hierarchical, this._registryId, domainFilter.dimensionName, domainFilter.hierarchyCaption, domainFilter.levels, levelDetails, appliedValues, domainFilter.isAllSelected);\n };\n FilterServiceImpl.prototype.convertRangeFilter = function (domainFilter) {\n var minValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.min);\n var maxValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.max);\n return new FilterModels_1.RangeFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Range, this._registryId, minValue, maxValue, domainFilter.includeNullValues);\n };\n FilterServiceImpl.prototype.convertRelativeDateFilter = function (domainFilter) {\n var anchorDateValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.anchorDate);\n return new FilterModels_1.RelativeDateFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_external_contract_js_1.FilterType.RelativeDate, this._registryId, anchorDateValue, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateStepPeriod.convert(domainFilter.periodType), InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateRangeType.convert(domainFilter.rangeType), domainFilter.rangeN);\n };\n FilterServiceImpl.prototype.convertCategoricalDomain = function (domain, domainType) {\n var values = domain.values.map(function (domainDv) {\n return DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainDv);\n });\n return new FilterModels_1.CategoricalDomain(values, domainType);\n };\n FilterServiceImpl.prototype.convertRangeDomain = function (domain, domainType) {\n var min = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domain.min);\n var max = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domain.max);\n return new FilterModels_1.RangeDomain(min, max, domainType);\n };\n FilterServiceImpl.prototype.convertAnchorDate = function (anchorDate) {\n // Converts a Date object into a string format that the server expects for date/time values.\n // If anchorDate doesn't represent a valid Date object, any of these would be NaN.\n var year = anchorDate.getUTCFullYear();\n var month = anchorDate.getUTCMonth() + 1;\n var day = anchorDate.getUTCDate();\n var hh = anchorDate.getUTCHours();\n var mm = anchorDate.getUTCMinutes();\n var sec = anchorDate.getUTCSeconds();\n if (isNaN(year) || isNaN(month) || isNaN(day) || isNaN(hh) || isNaN(mm) || isNaN(sec)) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.EmbeddingErrorCodes.InvalidDateParameter, 'Invalid date parameter: anchorDate');\n }\n var result = year + \"-\" + month + \"-\" + day + \" \" + hh + \":\" + mm + \":\" + sec;\n return result;\n };\n FilterServiceImpl.prototype.apiFilterHandlerCheckForCommandError = function (serverPm) {\n if (!serverPm[InternalContract.ParameterId.ParameterError]) {\n return;\n }\n if (serverPm[InternalContract.ParameterId.InvalidFieldCaption]) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidFilterFieldName, serverPm[InternalContract.ParameterId.InvalidFieldCaption]);\n }\n if (serverPm[InternalContract.ParameterId.InvalidValues]) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidFilterFieldValue, serverPm[InternalContract.ParameterId.InvalidValues]);\n }\n if (serverPm[InternalContract.ParameterId.InvalidAggFieldName]) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidAggregationFieldName, serverPm[InternalContract.ParameterId.InvalidAggFieldName]);\n }\n throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.ServerError, 'Server Error');\n };\n return FilterServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.FilterServiceImpl = FilterServiceImpl;\n//# sourceMappingURL=FilterServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar uuid_1 = require(\"uuid\");\nvar ApiShared_1 = require(\"../../../ApiShared\");\nvar ExternalToInternalEnumMappings_1 = require(\"../../EnumMappings/ExternalToInternalEnumMappings\");\nvar GetDataModels_1 = require(\"../../Models/GetDataModels\");\nvar GetDataTableReaderModels_1 = require(\"../../Models/GetDataTableReaderModels\");\nvar DataValueFactory_1 = require(\"../../Utils/DataValueFactory\");\nvar GetDataService_1 = require(\"../GetDataService\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar GetDataServiceImpl = /** @class */ (function (_super) {\n __extends(GetDataServiceImpl, _super);\n function GetDataServiceImpl() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n // The extension/embedding instance uses the same cache for all DataTableReaders.\n _this.viewDataTableCacheId = uuid_1.v4();\n return _this;\n }\n Object.defineProperty(GetDataServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"get-data-service\" /* GetData */;\n },\n enumerable: true,\n configurable: true\n });\n GetDataServiceImpl.prototype.getMaxRowLimit = function () {\n return 10000;\n };\n GetDataServiceImpl.prototype.getViewDataTableCacheId = function () {\n return this.viewDataTableCacheId;\n };\n GetDataServiceImpl.prototype.getLimitedMaxRows = function (requestedRows) {\n var rowCountLimit = this.getMaxRowLimit() + 1;\n return requestedRows > 0 && requestedRows < rowCountLimit ? requestedRows : rowCountLimit;\n };\n GetDataServiceImpl.prototype.getUnderlyingDataAsync = function (visualId, getType, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, maxRows, includeDataValuesOption) {\n var _a;\n var _this = this;\n // Create all of our parameters\n var summaryData = getType === GetDataService_1.GetDataType.Summary;\n var functionName = summaryData ? 'getSummaryDataAsync' : 'getUnderlyingDataAsync';\n var verb = summaryData ? api_internal_contract_js_1.VerbId.GetDataSummaryData : api_internal_contract_js_1.VerbId.GetUnderlyingData;\n var requestMaxRows = verb === api_internal_contract_js_1.VerbId.GetUnderlyingData ? this.getLimitedMaxRows(maxRows) : maxRows;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = functionName,\n _a);\n parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId;\n parameters[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases;\n parameters[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection;\n parameters[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns;\n parameters[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById);\n parameters[api_internal_contract_js_1.ParameterId.MaxRows] = requestMaxRows;\n parameters[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption);\n return this.execute(verb, parameters).then(function (response) {\n var responseData = response.result;\n return _this.processResultsTable(responseData.data, responseData.isSummary);\n });\n };\n GetDataServiceImpl.prototype.getSummaryDataReaderAsync = function (visualId, pageRowCount, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSummaryDataReaderAsync',\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(),\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection,\n _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns,\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetDataSummaryDataReader, parameters).then(function (response) {\n var responseData = response.result;\n return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId);\n });\n };\n GetDataServiceImpl.prototype.getSummaryColumnsInfoAsync = function (visualId) {\n var _a;\n // Create all the parameters for GetDataType of Summary with 1 row, and only native values\n // Then return just the columns\n var verb = api_internal_contract_js_1.VerbId.GetDataSummaryData;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSummaryColumnsInfoAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = true,\n _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = true,\n _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = true,\n _a[api_internal_contract_js_1.ParameterId.MaxRows] = 1,\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeValuesOnly,\n _a);\n return this.execute(verb, parameters).then(function (response) {\n var underlyingDataTable = response.result;\n var dataTable = underlyingDataTable.data;\n var columns = dataTable.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); });\n return columns;\n });\n };\n GetDataServiceImpl.prototype.getSelectedMarksAsync = function (visualId) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSelectedMarksAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetSelectedMarks, parameters).then(function (response) {\n var responseData = response.result;\n return {\n data: responseData.data.map(function (table) { return _this.processResultsTable(table, true); }),\n };\n });\n };\n GetDataServiceImpl.prototype.getHighlightedMarksAsync = function (visualId) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getHighlightedMarksAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetHighlightedMarks, parameters).then(function (response) {\n var responseData = response.result;\n return {\n data: responseData.data.map(function (table) { return _this.processResultsTable(table, true); }),\n };\n });\n };\n GetDataServiceImpl.prototype.getDataSourceDataAsync = function (dataSourceId, ignoreAliases, maxRows, columnsToInclude, columnsToIncludeById, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDataSourceDataAsync',\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows),\n _a[api_internal_contract_js_1.ParameterId.ColumnsToInclude] = this.verifyIncludeColumnArray(columnsToInclude),\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetDataSourceData, parameters).then(function (response) {\n var responseData = response.result;\n return _this.processResultsTable(responseData.data, false);\n });\n };\n GetDataServiceImpl.prototype.getLogicalTableDataAsync = function (datasourceId, logicalTableId, ignoreAliases, maxRows, columnsToInclude, columnsToIncludeById, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTableDataAsync',\n _a[api_internal_contract_js_1.ParameterId.ColumnsToInclude] = columnsToInclude,\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = datasourceId,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId,\n _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTableData, parameters).then(function (response) {\n var responseData = response.result;\n return _this.processResultsTable(responseData.data, false);\n });\n };\n GetDataServiceImpl.prototype.getLogicalTableDataReaderAsync = function (datasourceId, logicalTableId, pageRowCount, ignoreAliases, columnsToIncludeById, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTableDataReaderAsync',\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(),\n _a[api_internal_contract_js_1.ParameterId.DataSourceId] = datasourceId,\n _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId,\n _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTableDataReader, parameters).then(function (response) {\n var responseData = response.result;\n return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId);\n });\n };\n GetDataServiceImpl.prototype.getUnderlyingTableDataAsync = function (visualId, logicalTableId, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, maxRows, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTableDataAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection,\n _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns,\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTableData, parameters).then(function (response) {\n var responseData = response.result;\n return _this.processResultsTable(responseData.data, false);\n });\n };\n GetDataServiceImpl.prototype.getUnderlyingTableDataReaderAsync = function (visualId, logicalTableId, pageRowCount, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, includeDataValuesOption) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTableDataReaderAsync',\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(),\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId,\n _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases,\n _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection,\n _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns,\n _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById),\n _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption),\n _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTableDataReader, parameters).then(function (response) {\n var responseData = response.result;\n return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId);\n });\n };\n GetDataServiceImpl.prototype.getPageAsync = function (tableId, pageNumber, pageSize) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getPageAsync',\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(),\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableId] = tableId,\n _a[api_internal_contract_js_1.ParameterId.DataRowIndex] = pageNumber * pageSize,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetDataTableReaderPage, parameters).then(function (response) {\n var responseData = response.result;\n return _this.processResultsPage(responseData, tableId === GetDataServiceImpl.summaryTableId ? true : false);\n });\n };\n GetDataServiceImpl.prototype.releaseAsync = function (tableId) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'release',\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(),\n _a[api_internal_contract_js_1.ParameterId.ViewDataTableId] = tableId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.ReleaseDataTableReader, parameters).then(function (response) {\n return;\n });\n };\n GetDataServiceImpl.prototype.verifyIncludeColumnArray = function (columns) {\n // columns must be a valid array\n if (!Array.isArray(columns)) {\n throw new ApiShared_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'columnsToInclude and columnsToIncludeById must be valid arrays');\n }\n // Remove any duplicates from the input array\n var columnsAsSet = new Set(columns);\n return Array.from(columnsAsSet);\n };\n GetDataServiceImpl.prototype.processResultsTable = function (responseData, isSummary) {\n var headers = responseData.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); });\n // TODO This should be controlled by a flag indicating whether this api will respond marks info or not\n var marks;\n if (responseData.marks) {\n marks = responseData.marks.map(function (h) { return new GetDataModels_1.MarkInfo(h.type, h.color, h.tupleId); });\n }\n // Limit+1 is our sentinal that underlying data contains more rows than user is allowed to fetch.\n // Remove the last element so we always return MaxRowLimit\n var isTotalRowCountLimited = isSummary === false && responseData.dataTable.length === this.getMaxRowLimit() + 1;\n if (isTotalRowCountLimited) {\n responseData.dataTable.length -= 1;\n }\n var table = responseData.dataTable.map(function (row) {\n return row.map(function (cell, index) {\n return DataValueFactory_1.DataValueFactory.MakeTableDataValue(cell, headers[index].dataType);\n });\n });\n if (marks) {\n return new GetDataModels_1.DataTable(table, headers, table.length, isTotalRowCountLimited, isSummary, marks);\n }\n return new GetDataModels_1.DataTable(table, headers, table.length, isTotalRowCountLimited, isSummary);\n };\n GetDataServiceImpl.prototype.processResultsPage = function (responseData, isSummary) {\n var headers = responseData.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); });\n var marks;\n if (responseData.marks) {\n marks = responseData.marks.map(function (h) { return new GetDataModels_1.MarkInfo(h.type, h.color, h.tupleId); });\n }\n var table = responseData.dataTable.map(function (row) {\n return row.map(function (cell, index) {\n return DataValueFactory_1.DataValueFactory.MakeTableDataValue(cell, headers[index].dataType);\n });\n });\n if (marks) {\n return new GetDataModels_1.DataTable(table, headers, table.length, false, isSummary, marks);\n }\n return new GetDataModels_1.DataTable(table, headers, table.length, false, isSummary);\n };\n GetDataServiceImpl.summaryTableId = '';\n return GetDataServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.GetDataServiceImpl = GetDataServiceImpl;\n//# sourceMappingURL=GetDataServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar NotificationServiceImplBase_1 = require(\"./NotificationServiceImplBase\");\nvar NotificationServiceImpl = /** @class */ (function (_super) {\n __extends(NotificationServiceImpl, _super);\n function NotificationServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(NotificationServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"notification-service\" /* Notification */;\n },\n enumerable: true,\n configurable: true\n });\n return NotificationServiceImpl;\n}(NotificationServiceImplBase_1.NotificationServiceImplBase));\nexports.NotificationServiceImpl = NotificationServiceImpl;\n//# sourceMappingURL=NotificationServiceImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registration = /** @class */ (function () {\n function Registration(_filterFn, _callbackFn) {\n this._filterFn = _filterFn;\n this._callbackFn = _callbackFn;\n // Nothing Here\n }\n Registration.prototype.onNotification = function (notificationModel) {\n if (this._filterFn(notificationModel)) {\n this._callbackFn(notificationModel);\n }\n };\n return Registration;\n}());\nexports.Registration = Registration;\nvar NotificationServiceImplBase = /** @class */ (function () {\n function NotificationServiceImplBase(dispatcher) {\n this.dispatcher = dispatcher;\n this._handlers = {};\n this.dispatcher.registerNotificationHandler(this.onNotification.bind(this));\n }\n NotificationServiceImplBase.prototype.registerHandler = function (id, filterFn, handler) {\n var _this = this;\n var handlers = this._handlers[id] || new Array();\n var registration = new Registration(filterFn, handler);\n handlers.push(registration);\n this._handlers[id] = handlers;\n return function () { return _this.removeRegistration(id, registration); };\n };\n NotificationServiceImplBase.prototype.hasHandlersForNotificationType = function (id) {\n // eslint-disable-next-line no-prototype-builtins\n return this._handlers.hasOwnProperty(id);\n };\n NotificationServiceImplBase.prototype.onNotification = function (notification) {\n if (!this.hasHandlersForNotificationType(notification.notificationId)) {\n return;\n }\n // Go through and check for all the handlers of this particular notification\n this._handlers[notification.notificationId].forEach(function (h) { return h.onNotification(notification.data); });\n };\n NotificationServiceImplBase.prototype.removeRegistration = function (id, registration) {\n if (!this.hasHandlersForNotificationType(id)) {\n return;\n }\n this._handlers[id] = this._handlers[id].filter(function (reg) { return reg !== registration; });\n };\n return NotificationServiceImplBase;\n}());\nexports.NotificationServiceImplBase = NotificationServiceImplBase;\n//# sourceMappingURL=NotificationServiceImplBase.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ParameterImpl_1 = require(\"../../Impl/ParameterImpl\");\nvar TableauError_1 = require(\"../../TableauError\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar ParametersServiceImpl = /** @class */ (function (_super) {\n __extends(ParametersServiceImpl, _super);\n function ParametersServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ParametersServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"parameters-service\" /* Parameters */;\n },\n enumerable: true,\n configurable: true\n });\n ParametersServiceImpl.prototype.getParametersForSheetAsync = function (sheetPath) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getParametersForSheetAsync',\n _a[api_internal_contract_js_1.ParameterId.SheetPath] = sheetPath,\n _a);\n return this.getParametersAsync(parameters);\n };\n ParametersServiceImpl.prototype.getAllParametersAsync = function () {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getParametersForSheetAsync',\n _a);\n return this.getParametersAsync(parameters);\n };\n ParametersServiceImpl.prototype.getParametersAsync = function (inputParameters) {\n var _this = this;\n return this.execute(api_internal_contract_js_1.VerbId.GetParametersForSheet, inputParameters).then(function (response) {\n var result = response.result;\n return result.map(function (parameterInfo) {\n return new ParameterImpl_1.ParameterImpl(parameterInfo, _this._registryId);\n });\n });\n };\n ParametersServiceImpl.prototype.changeParameterValueAsync = function (fieldName, newValue) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'changeParameterValueAsync',\n _a[api_internal_contract_js_1.ParameterId.ParameterFieldName] = fieldName,\n _a[api_internal_contract_js_1.ParameterId.ParameterValue] = newValue,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.ChangeParameterValue, parameters).then(function (response) {\n var result = response.result;\n return result;\n });\n };\n ParametersServiceImpl.prototype.findParameterByNameAsync = function (name) {\n return this.findParameterAsync(name, undefined);\n };\n ParametersServiceImpl.prototype.findParameterByGlobalFieldNameAsync = function (fieldName) {\n return this.findParameterAsync(undefined, fieldName);\n };\n ParametersServiceImpl.prototype.findParameterAsync = function (name, fieldName) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'findParameterAsync',\n _a);\n if (name !== undefined) {\n parameters[api_internal_contract_js_1.ParameterId.ParameterCaption] = name;\n }\n else if (fieldName !== undefined) {\n parameters[api_internal_contract_js_1.ParameterId.ParameterFieldName] = fieldName;\n }\n else {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'name or fieldName must be provided to find parameter');\n }\n return this.execute(api_internal_contract_js_1.VerbId.FindParameter, parameters).then(function (response) {\n var instanceOfParameterInfo = function (object) {\n return 'fieldName' in object;\n };\n // We need to check to see if we got a valid response back again\n if (instanceOfParameterInfo(response.result)) {\n var result = response.result;\n return new ParameterImpl_1.ParameterImpl(result, _this._registryId);\n }\n else {\n return undefined;\n }\n });\n };\n return ParametersServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.ParametersServiceImpl = ParametersServiceImpl;\n//# sourceMappingURL=ParametersServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar SelectionModels_1 = require(\"../../Models/SelectionModels\");\nvar TableauError_1 = require(\"../../TableauError\");\nvar Param_1 = require(\"../../Utils/Param\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar SelectionServiceImpl = /** @class */ (function (_super) {\n __extends(SelectionServiceImpl, _super);\n function SelectionServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SelectionServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"selection-service\" /* Selection */;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Method to clear all the selected marks for the given worksheet.\n *\n * @param visualId\n */\n SelectionServiceImpl.prototype.clearSelectedMarksAsync = function (visualId) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'clearSelectedMarksAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.ClearSelectedMarks, parameters).then(function (response) {\n return; // Expecting an empty model and hence the void response.\n });\n };\n /**\n * Method to select marks for the given worksheet.\n *\n * @param visualId\n * @param selectionCriteria\n * @param selectionUpdateType\n */\n SelectionServiceImpl.prototype.selectMarksByValueAsync = function (visualId, selectionCriterias, selectionUpdateType) {\n var _a;\n var _this = this;\n if (selectionCriterias.length === 0) {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InvalidParameter, 'Selection criteria missing for selecting marks by value');\n }\n var selectionType = this.validateSelectionUpdateType(selectionUpdateType);\n var selectionModelContainer = this.parseSelectionMarks(selectionCriterias);\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'selectMarksByValueAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.SelectionUpdateType] = selectionType,\n _a);\n if (selectionModelContainer.hierModelArr && selectionModelContainer.hierModelArr.length) {\n parameters[api_internal_contract_js_1.ParameterId.HierValSelectionModels] = selectionModelContainer.hierModelArr;\n }\n if (selectionModelContainer.quantModelArr && selectionModelContainer.quantModelArr.length) {\n parameters[api_internal_contract_js_1.ParameterId.QuantRangeSelectionModels] = selectionModelContainer.quantModelArr;\n }\n if (selectionModelContainer.dimModelArr && selectionModelContainer.dimModelArr.length) {\n parameters[api_internal_contract_js_1.ParameterId.DimValSelectionModels] = selectionModelContainer.dimModelArr;\n }\n return this.execute(api_internal_contract_js_1.VerbId.SelectByValue, parameters).then(function (response) {\n _this.apiFilterHandlerCheckForCommandError(response.result);\n return;\n });\n };\n SelectionServiceImpl.prototype.apiFilterHandlerCheckForCommandError = function (serverPm) {\n if (!serverPm[api_internal_contract_js_1.ParameterId.ParameterError]) {\n return;\n }\n if (serverPm[api_internal_contract_js_1.ParameterId.InvalidFields]) {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionFieldName, serverPm[api_internal_contract_js_1.ParameterId.InvalidFields]);\n }\n if (serverPm[api_internal_contract_js_1.ParameterId.InvalidValues]) {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionValue, serverPm[api_internal_contract_js_1.ParameterId.InvalidValues]);\n }\n if (serverPm[api_internal_contract_js_1.ParameterId.InvalidDates]) {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionDate, serverPm[api_internal_contract_js_1.ParameterId.InvalidDates]);\n }\n };\n /**\n * Method to select marks for the given worksheet.\n *\n * @param visualId\n * @param MarkInfo\n * @param selectionUpdateType\n */\n SelectionServiceImpl.prototype.selectMarksByIdAsync = function (visualId, marks, selectionUpdateType) {\n var _a;\n if (marks.length === 0) {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InvalidParameter, 'Marks info missing for selecting marks by Id');\n }\n var selectionType = this.validateSelectionUpdateType(selectionUpdateType);\n var selectionModelContainer = this.parseSelectionIds(marks);\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'selectMarksByIdAsync',\n _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId,\n _a[api_internal_contract_js_1.ParameterId.SelectionUpdateType] = selectionType,\n _a[api_internal_contract_js_1.ParameterId.Selection] = selectionModelContainer.selection,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SelectByValue, parameters).then(function (response) {\n // Expecting an empty model and hence the void response.\n return;\n // TODO Investigate the error response with multiple output params and throw error accordingly.\n });\n };\n /**\n * Method to prepare the pres models for selection by MarksInfo\n * @param marks\n */\n SelectionServiceImpl.prototype.parseSelectionIds = function (marks) {\n var ids = [];\n var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer();\n for (var i = 0; i < marks.length; i++) {\n var tupleId = marks[i].tupleId;\n if (tupleId !== undefined && tupleId !== null) {\n // If tuple id is provided use that instead of pair\n ids.push(tupleId.toString()); // collect the tuple ids\n }\n else {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'tupleId parsing error');\n }\n }\n if (ids.length !== 0) {\n // tuple ids based selection\n var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel();\n tupleSelectionModel.selectionType = 'tuples';\n tupleSelectionModel.objectIds = ids;\n selectionModelContainer.selection = tupleSelectionModel;\n }\n return selectionModelContainer;\n };\n /**\n * Method to prepare the pres models for selection by values.\n *\n * Supports 3 types for selection:\n * 1) Hierarchical value based selection\n * 2) Range value based selection\n * 3) Dimension value based selection\n *\n * @param marks\n */\n SelectionServiceImpl.prototype.parseSelectionMarks = function (selectionCriterias) {\n var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer();\n for (var i = 0; i < selectionCriterias.length; i++) {\n var st = selectionCriterias[i];\n if (!(st.fieldName && st.value !== undefined && st.value !== null)) {\n throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'Selection Criteria parsing error');\n }\n var catRegex = new RegExp('([[A-Za-z0-9]+]).*', 'g');\n var rangeOption = st.value;\n if (catRegex.test(st.fieldName)) {\n // Hierarchical value selection\n var hierModel = this.addToParamsList(st.fieldName, st.value);\n selectionModelContainer.hierModelArr.push(hierModel);\n }\n else if (rangeOption.min !== undefined && rangeOption.max !== undefined) {\n // Range value selection\n var quantModel = this.addToRangeParamsList(st.fieldName, rangeOption);\n selectionModelContainer.quantModelArr.push(quantModel);\n }\n else {\n // Dimension value selection\n var dimModel = this.addToParamsList(st.fieldName, st.value);\n selectionModelContainer.dimModelArr.push(dimModel);\n }\n }\n return selectionModelContainer;\n };\n /**\n * Method to transform the key value pair into value based pres model object.\n *\n * @param valueSelectionModel\n * @param fieldName\n * @param value\n */\n SelectionServiceImpl.prototype.addToParamsList = function (fieldName, value) {\n var valueSelectionModel = new SelectionModels_1.ValueSelectionModel();\n var markValues = [];\n if (value instanceof Array) {\n var valueArr = value;\n for (var i = 0; i < valueArr.length; i++) {\n markValues.push(Param_1.Param.serializeParameterValue(valueArr[i]));\n }\n }\n else {\n markValues.push(Param_1.Param.serializeParameterValue(value));\n }\n valueSelectionModel.qualifiedFieldCaption = fieldName;\n valueSelectionModel.selectValues = markValues;\n return valueSelectionModel;\n };\n /**\n * Method to transform the key value pair into range based selection pres model.\n *\n * TODO: Need to handle the parsing of date type values.\n *\n * @param valueSelectionModel\n * @param fieldName\n * @param value\n */\n SelectionServiceImpl.prototype.addToRangeParamsList = function (fieldName, value) {\n var rangeSelectionModel = new SelectionModels_1.RangeSelectionModel();\n rangeSelectionModel.qualifiedFieldCaption = fieldName;\n if (value.max !== undefined && value.max !== null) {\n rangeSelectionModel.maxValue = Param_1.Param.serializeParameterValue(value.max);\n }\n if (value.min !== undefined && value.min !== null) {\n rangeSelectionModel.minValue = Param_1.Param.serializeParameterValue(value.min);\n }\n rangeSelectionModel.included = this.validateNullOptionType(value.nullOption);\n return rangeSelectionModel;\n };\n /**\n * Method to validate the selection update type.\n *\n * @param selectionUpdateType\n */\n SelectionServiceImpl.prototype.validateSelectionUpdateType = function (selectionUpdateType) {\n if (selectionUpdateType === Contract.SelectionUpdateType.Replace) {\n return api_internal_contract_js_1.SelectionUpdateType.Replace;\n }\n else if (selectionUpdateType === Contract.SelectionUpdateType.Add) {\n return api_internal_contract_js_1.SelectionUpdateType.Add;\n }\n else if (selectionUpdateType === Contract.SelectionUpdateType.Remove) {\n return api_internal_contract_js_1.SelectionUpdateType.Remove;\n }\n return api_internal_contract_js_1.SelectionUpdateType.Replace;\n };\n /**\n * Method to validate the include type for range selection.\n *\n * @param nullOption\n */\n SelectionServiceImpl.prototype.validateNullOptionType = function (nullOption) {\n if (nullOption) {\n if (nullOption === Contract.FilterNullOption.NullValues) {\n return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeNull;\n }\n else if (nullOption === Contract.FilterNullOption.NonNullValues) {\n return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeNonNull;\n }\n else if (nullOption === Contract.FilterNullOption.AllValues) {\n return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeAll;\n }\n }\n return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeAll;\n };\n return SelectionServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.SelectionServiceImpl = SelectionServiceImpl;\n//# sourceMappingURL=SelectionServiceImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar InternalToExternalEnumMappings_1 = require(\"../../EnumMappings/InternalToExternalEnumMappings\");\nvar TableauError_1 = require(\"../../TableauError\");\nvar EnumConverter_1 = require(\"../../Utils/EnumConverter\");\n/**\n * Each ServceImpl should extend this base class for the sake of\n * proper error handling. This base handles the conversion\n * from internal errors to external errors that we throw to developers\n */\nvar ServiceImplBase = /** @class */ (function () {\n function ServiceImplBase(_dispatcher, _registryId) {\n this._dispatcher = _dispatcher;\n this._registryId = _registryId;\n }\n ServiceImplBase.prototype.execute = function (verb, params) {\n return this._dispatcher.execute(verb, params).catch(function (error) {\n // Any internal error that comes from the dispatcher should be converted\n // to an external error using the enum mapper for error codes.\n var internalError = error;\n var externalErrorCode = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.errorCode.convert(internalError.errorCode, EnumConverter_1.ShouldThrow.No);\n throw new TableauError_1.TableauError(externalErrorCode, internalError.message);\n });\n };\n return ServiceImplBase;\n}());\nexports.ServiceImplBase = ServiceImplBase;\n//# sourceMappingURL=ServiceImplBase.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar SizeServiceImpl = /** @class */ (function (_super) {\n __extends(SizeServiceImpl, _super);\n function SizeServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SizeServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"size-service\" /* Size */;\n },\n enumerable: true,\n configurable: true\n });\n SizeServiceImpl.prototype.changeSizeAsync = function (name, newSize) {\n var _a;\n var _b, _c, _d, _e;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'changeSizeAsync',\n _a[api_internal_contract_js_1.ParameterId.SheetName] = name,\n _a[api_internal_contract_js_1.ParameterId.MinHeight] = ((_b = newSize.minSize) === null || _b === void 0 ? void 0 : _b.height) || 0,\n _a[api_internal_contract_js_1.ParameterId.MinWidth] = ((_c = newSize.minSize) === null || _c === void 0 ? void 0 : _c.width) || 0,\n _a[api_internal_contract_js_1.ParameterId.MaxHeight] = ((_d = newSize.maxSize) === null || _d === void 0 ? void 0 : _d.height) || 0,\n _a[api_internal_contract_js_1.ParameterId.MaxWidth] = ((_e = newSize.maxSize) === null || _e === void 0 ? void 0 : _e.width) || 0,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SetSheetSize, parameters).then(function (_response) {\n return;\n });\n };\n return SizeServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.SizeServiceImpl = SizeServiceImpl;\n//# sourceMappingURL=SizeServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar StoryActivationServiceImpl = /** @class */ (function (_super) {\n __extends(StoryActivationServiceImpl, _super);\n function StoryActivationServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(StoryActivationServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"story-activation-service\" /* StoryActivation */;\n },\n enumerable: true,\n configurable: true\n });\n StoryActivationServiceImpl.prototype.activateNextStoryPointAsync = function () {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ActivateNextStoryPoint;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateNextStoryPointAsync',\n _a);\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n StoryActivationServiceImpl.prototype.activatePreviousStoryPointAsync = function () {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ActivatePreviousStoryPoint;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activatePreviousStoryPointAsync',\n _a);\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n StoryActivationServiceImpl.prototype.activateStoryPointAsync = function (index) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.ActivateStoryPoint;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateStoryPointAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.StoryPointIndex] = index;\n return this.execute(verb, parameters).then(function (response) {\n return;\n });\n };\n StoryActivationServiceImpl.prototype.revertStoryPointAsync = function (index) {\n var _a;\n var verb = api_internal_contract_js_1.VerbId.RevertStoryPoint;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'revertStoryPointAsync',\n _a);\n parameters[api_internal_contract_js_1.ParameterId.StoryPointIndex] = index;\n return this.execute(verb, parameters).then(function (response) {\n return response.result;\n });\n };\n return StoryActivationServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.StoryActivationServiceImpl = StoryActivationServiceImpl;\n//# sourceMappingURL=StoryActivationServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar CustomViewImpl_1 = require(\"../../Impl/CustomViewImpl\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar VizServiceImpl = /** @class */ (function (_super) {\n __extends(VizServiceImpl, _super);\n function VizServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(VizServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"viz-service\" /* Viz */;\n },\n enumerable: true,\n configurable: true\n });\n VizServiceImpl.prototype.createVizImageAsync = function (inputSpec) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'createVizImageAsync',\n _a[api_internal_contract_js_1.ParameterId.VizAPIInputJson] = JSON.stringify(inputSpec),\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.VizAPI, parameters).then(function (response) {\n var result = response.result;\n return result;\n });\n };\n VizServiceImpl.prototype.activateSheetAsync = function (name) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateSheetAsync',\n _a[api_internal_contract_js_1.ParameterId.SwitchToSheetName] = name,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.ActivateSheet, parameters).then(function () {\n return;\n });\n };\n VizServiceImpl.prototype.getCustomViewsAsync = function () {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCustomViewsAsync',\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetCustomViews, parameters).then(function (response) {\n var customViews = response.result;\n return customViews.map(function (customView) {\n return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId);\n });\n });\n };\n VizServiceImpl.prototype.showCustomViewAsync = function (customViewName) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'showCustomViewAsync',\n _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.ShowCustomView, parameters).then(function (response) {\n var customView = response.result;\n return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId);\n });\n };\n VizServiceImpl.prototype.removeCustomViewAsync = function (customViewName) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeCustomViewAsync',\n _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.RemoveCustomView, parameters).then(function (response) {\n var customView = response.result;\n return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId);\n });\n };\n VizServiceImpl.prototype.saveCustomViewAsync = function (customViewName) {\n var _a;\n var _this = this;\n // CustomViewIsDefault is a required parameter, but our API has not been updated to allow it to be specified yet.\n // We should add a 'default' parameter to the interface.\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveCustomViewAsync',\n _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName,\n _a[api_internal_contract_js_1.ParameterId.CustomViewIsDefault] = false,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SaveWorkbookAsCustomView, parameters).then(function (response) {\n var customView = response.result;\n return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId);\n });\n };\n VizServiceImpl.prototype.setActiveCustomViewAsDefaultAsync = function () {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'setActiveCustomViewAsDefaultAsync',\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.SetActiveCustomViewAsDefault, parameters).then(function () {\n return;\n });\n };\n VizServiceImpl.prototype.saveAsync = function (customView) {\n var _a;\n var _this = this;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveAsync',\n _a[api_internal_contract_js_1.ParameterId.CustomViewLuid] = customView.luid,\n _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customView.name,\n _a[api_internal_contract_js_1.ParameterId.CustomViewIsDefault] = customView.isDefault,\n _a[api_internal_contract_js_1.ParameterId.CustomViewIsPublic] = customView.shared,\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.UpdateCustomView, parameters).then(function (response) {\n var customView = response.result;\n return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId);\n });\n };\n VizServiceImpl.prototype.getCurrentSrcAsync = function () {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCurrentSrcAsync',\n _a);\n return this.execute(api_internal_contract_js_1.VerbId.GetCurrentSrc, parameters).then(function (response) { return response.result; });\n };\n return VizServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.VizServiceImpl = VizServiceImpl;\n//# sourceMappingURL=VizServiceImpl.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar ExternalToInternalEnumMappings_1 = require(\"../../EnumMappings/ExternalToInternalEnumMappings\");\nvar ErrorHelpers_1 = require(\"../../Utils/ErrorHelpers\");\nvar Param_1 = require(\"../../Utils/Param\");\nvar ServiceImplBase_1 = require(\"./ServiceImplBase\");\nvar ZoneServiceImpl = /** @class */ (function (_super) {\n __extends(ZoneServiceImpl, _super);\n function ZoneServiceImpl() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(ZoneServiceImpl.prototype, \"serviceName\", {\n get: function () {\n return \"zone-service\" /* Zone */;\n },\n enumerable: true,\n configurable: true\n });\n ZoneServiceImpl.prototype.setVisibilityAsync = function (dashboard, dashboardZoneMap, zoneVisibilityMap) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'setVisibilityAsync',\n _a[api_internal_contract_js_1.ParameterId.Dashboard] = dashboard,\n _a[api_internal_contract_js_1.ParameterId.ZoneIdsVisibilityMap] = {},\n _a);\n // zoneVisibilityMap can be either an object or a Map - convert it to a Map\n var parameterAsMap = Param_1.Param.convertParameterToMap(zoneVisibilityMap, 'zoneVisibilityMap');\n parameterAsMap.forEach(function (value, key) {\n ErrorHelpers_1.ErrorHelpers.verifyZoneIsValid(dashboardZoneMap, Number.parseInt(key, 10));\n ErrorHelpers_1.ErrorHelpers.verifyEnumValue(value, api_external_contract_js_1.DashboardObjectVisibilityType, 'DashboardObjectVisibilityType');\n parameters[api_internal_contract_js_1.ParameterId.ZoneIdsVisibilityMap][key] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.setVisibilityType.convert(value);\n });\n return this.execute(api_internal_contract_js_1.VerbId.SetZoneVisibility, parameters).then(function (response) {\n return;\n });\n };\n ZoneServiceImpl.prototype.moveAndResizeAsync = function (dashboard, dashboardZoneMap, dashboardObjectPositionAndSizeUpdateArray) {\n var _a;\n var parameters = (_a = {},\n _a[api_internal_contract_js_1.ParameterId.Dashboard] = dashboard,\n _a[api_internal_contract_js_1.ParameterId.DashboardObjectPositionAndSizeUpdateList] = dashboardObjectPositionAndSizeUpdateArray,\n _a);\n dashboardObjectPositionAndSizeUpdateArray.forEach(function (dashboardObject) {\n ErrorHelpers_1.ErrorHelpers.verifyZoneIsValidAndFloating(dashboardZoneMap, dashboardObject.dashboardObjectID);\n ErrorHelpers_1.ErrorHelpers.verifyWidthAndHeightOfDashboardObjectPositionAndSizeUpdate(dashboardObject);\n });\n return this.execute(api_internal_contract_js_1.VerbId.MoveAndResizeZones, parameters).then(function (response) {\n return;\n });\n };\n return ZoneServiceImpl;\n}(ServiceImplBase_1.ServiceImplBase));\nexports.ZoneServiceImpl = ZoneServiceImpl;\n//# sourceMappingURL=ZoneServiceImpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implementation of a table summary.\n * This does not follow the Impl pattern as it is just a property bag.\n */\nvar TableSummary = /** @class */ (function () {\n function TableSummary(_tableInfo) {\n this._tableInfo = _tableInfo;\n }\n Object.defineProperty(TableSummary.prototype, \"name\", {\n get: function () {\n return this._tableInfo.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableSummary.prototype, \"id\", {\n get: function () {\n return this._tableInfo.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableSummary.prototype, \"connectionId\", {\n get: function () {\n return this._tableInfo.connectionId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableSummary.prototype, \"customSQL\", {\n get: function () {\n return this._tableInfo.customSQL;\n },\n enumerable: true,\n configurable: true\n });\n return TableSummary;\n}());\nexports.TableSummary = TableSummary;\n//# sourceMappingURL=TableSummary.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Custom error class that extends the default JavaScript Error object.\n * This allows us to provide a field with a specific error code\n * so that developers can more easily programmatically respond\n * to error scenarios.\n */\nvar TableauError = /** @class */ (function (_super) {\n __extends(TableauError, _super);\n function TableauError(_errorCode, message) {\n var _this = _super.call(this, _errorCode + \": \" + message) || this;\n _this._errorCode = _errorCode;\n /*tslint:disable-next-line */\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n // Error inheritance does not work propertly when compiling to ES5, this is a workaround to force\n // the proto chain to be built correctly. See the github link above for details.\n Object.setPrototypeOf(_this, TableauError.prototype);\n return _this;\n }\n Object.defineProperty(TableauError.prototype, \"errorCode\", {\n get: function () {\n return this._errorCode;\n },\n enumerable: true,\n configurable: true\n });\n return TableauError;\n}(Error));\nexports.TableauError = TableauError;\n//# sourceMappingURL=TableauError.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar InternalContract = require(\"@tableau/api-internal-contract-js\");\nvar GetDataModels_1 = require(\"../Models/GetDataModels\");\n/**\n * In version 2 of the interface, we should collapse value into nativeValue, and do all this work over\n * in the platform.\n */\nvar DataValueFactory = /** @class */ (function () {\n function DataValueFactory() {\n }\n DataValueFactory.MakeParameterDataValue = function (internalDataValue, dataType) {\n // Parameter values are all strings, convert from string to value\n return new GetDataModels_1.DataValue(internalDataValue.value, InternalContract.DataTypeConverter.convertStringValueToNativeValue(internalDataValue.value, dataType), internalDataValue.formattedValue);\n };\n DataValueFactory.MakeFilterDataValue = function (internalDataValue) {\n // Filters already have native type in value, just use that for nativeValue also\n return new GetDataModels_1.DataValue(internalDataValue.value, internalDataValue.value, internalDataValue.formattedValue);\n };\n DataValueFactory.MakeTableDataValue = function (internalDataValue, dataType) {\n // DataTables contain boolean | number | string | date as string | '%null%\n // convertValueToNativeValue converts dates as string to dates, and any special to null\n // (boolean, numbers, strings are passed through)\n // Because of IncludeDataValuesOption - we can have undefined values, which are different than any special\n return new GetDataModels_1.DataValue(internalDataValue.value, internalDataValue.value !== undefined\n ? InternalContract.DataTypeConverter.convertValueToNativeValue(internalDataValue.value, dataType)\n : undefined, internalDataValue.formattedValue);\n };\n return DataValueFactory;\n}());\nexports.DataValueFactory = DataValueFactory;\n//# sourceMappingURL=DataValueFactory.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * A Promise wrapper class allowing for resolving/rejecting the Promise outside the context of its constructor.\n *\n * @export\n * @class Deferred\n * @template TResolve The type used to resolve the promise.\n * @template TReject The type used to reject the promise. Defaults to any.\n * @link https://stackoverflow.com/a/34637436\n */\nvar Deferred = /** @class */ (function () {\n /**\n * Creates an instance of Deferred.\n */\n function Deferred() {\n var _this = this;\n this._promise = new Promise(function (resolve, reject) {\n _this._resolve = resolve;\n _this._reject = reject;\n });\n }\n Object.defineProperty(Deferred.prototype, \"promise\", {\n /**\n * Gets the Promise.\n *\n * @readonly\n * @type {Promise}\n */\n get: function () {\n return this._promise;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Resolves the wrapped Promise.\n *\n * @param {(TResolve | PromiseLike)} response The argument to be resolved by the Promise.\n * @returns {*} {void}\n */\n Deferred.prototype.resolve = function (response) {\n if (!this._resolve) {\n return;\n }\n this._resolve(response);\n };\n /**\n *\n *\n * @param {TReject} [reason] The reason why the Promise rejected.\n * @returns {*} {void}\n */\n Deferred.prototype.reject = function (reason) {\n if (!this._reject) {\n return;\n }\n this._reject(reason);\n };\n return Deferred;\n}());\nexports.Deferred = Deferred;\nexports.UnregisterTimeoutInMilliseconds = 30000;\n//# sourceMappingURL=Deferred.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\n/**\n * This class converts from a source enum value to destination enum\n * value given a mapping from source to destination when constructed.\n *\n * Note: This exact same class is defined in api-core. Given its small\n * nature, it is not worth having in a separate project to share this between\n * api-core and api-shared. If more utility functionality is added that is used by api-core\n * and api-shared but has no other dependecies, a utiltity project might be merited,\n * and this class could be moved.\n */\nvar EnumConverter = /** @class */ (function () {\n function EnumConverter(_mappings, _defaultVal) {\n this._mappings = _mappings;\n this._defaultVal = _defaultVal;\n }\n EnumConverter.prototype.convert = function (enumVal, throwIfMissing) {\n if (throwIfMissing === void 0) { throwIfMissing = ShouldThrow.Yes; }\n if (this._mappings.hasOwnProperty(enumVal)) {\n return this._mappings[enumVal];\n }\n if (this._defaultVal !== undefined && throwIfMissing !== ShouldThrow.Yes) {\n return this._defaultVal;\n }\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"Enum Mapping not found for: \" + enumVal);\n };\n return EnumConverter;\n}());\nexports.EnumConverter = EnumConverter;\nvar ShouldThrow;\n(function (ShouldThrow) {\n ShouldThrow[\"Yes\"] = \"yes\";\n ShouldThrow[\"No\"] = \"no\";\n})(ShouldThrow = exports.ShouldThrow || (exports.ShouldThrow = {}));\n//# sourceMappingURL=EnumConverter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nvar Param_1 = require(\"./Param\");\n/**\n * This class is used to construct common errors throughout the external\n * projects (api-shared, extensions-api, etc.). It has some duplication with\n * the ErrorHelpers class in api-core, but is separate due to the need to throw\n * an external TableauError vs. an InternalTableauError.\n */\nvar ErrorHelpers = /** @class */ (function () {\n function ErrorHelpers() {\n }\n /**\n * Throws with code InternalError.\n *\n * @param apiName name of api that was called.\n */\n ErrorHelpers.apiNotImplemented = function (apiName) {\n return new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, apiName + \" API not yet implemented.\");\n };\n /**\n * Throws an internal error if argument is null or undefined.\n *\n * @param argumentValue value to verify\n * @param argumentName name of argument to verify\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyInternalValue = function (argumentValue, argumentName) {\n if (argumentValue === null || argumentValue === undefined) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, argumentValue + \" is invalid value for: \" + argumentName);\n }\n };\n /**\n * Throws an InvalidParameter error if argument is null or undefined.\n *\n * @param argumentValue value to verify\n * @param argumentName name of argument to verify\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyParameter = function (argumentValue, argumentName) {\n if (argumentValue === null || argumentValue === undefined) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + \" is invalid value for parameter: \" + argumentName);\n }\n };\n /**\n * Throws an InvalidParameter error if argument is not the specified type.\n * For objects, it just tests that it is an object\n *\n * @param argumentValue value to verify\n * @param expectedType expected result of typeof\n * @param argumentName name of argument to verify\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyParameterType = function (argumentValue, expectedType, argumentName) {\n if (typeof argumentValue !== expectedType) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + \" has invalid type for parameter: \" + argumentName + \".\");\n }\n };\n /**\n * Throws an InvalidParameter error if argument is empty string, null or undefined.\n *\n * @param argumentValue value to verify\n * @param argumentName name of argument to verify\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyStringParameter = function (argumentValue, argumentName) {\n if (argumentValue === null || argumentValue === undefined || argumentValue === '') {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + \" is invalid value for paramter: \" + argumentName);\n }\n };\n /**\n * Verifies passed value is a valid value for that enum.\n * Throws an InvalidParameter error if the enum value is not valid.\n *\n * String enums are {string : string} dictionaries which are not reverse mappable\n * This is an ugly workaround\n *\n * @param enumValue value to verify\n * @param enumType enum to verify against\n * @param enumName enum name for clear error message\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyEnumValue = function (enumValue, enumType, enumName) {\n var isValid = false;\n Object.keys(enumType).forEach(function (enumKey) {\n if (enumType[enumKey] === enumValue.toString()) {\n isValid = true;\n }\n });\n if (!isValid) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, enumValue + \" is invalid value for enum: \" + enumName + \".\");\n }\n };\n /**\n * Verifies passed value is between [min, max) ... min <= value < max\n * Throws an InvalidParameter error if the value is not valid.\n *\n *\n * @param value value to verify\n * @param min value must be >= min\n * @param max value must be < max\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyRange = function (value, min, max) {\n var isValid = min <= value && value < max;\n if (!isValid) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, value + \" is invalid value for range: [\" + min + \"..\" + max + \")\");\n }\n };\n /**\n * Verifies the params min and max for applying range filter.\n * Throws with error code InvalidParameter if range is invalid.\n *\n * @param min range min\n * @param max range max\n */\n /*tslint:disable-next-line */\n ErrorHelpers.verifyRangeParamType = function (min, max) {\n if (!min && !max) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, at least one of min or max is required.');\n }\n if (min && !Param_1.Param.isTypeNumber(min) && !Param_1.Param.isTypeDate(min)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, only Date and number are allowed for parameter min.');\n }\n if (max && !Param_1.Param.isTypeNumber(max) && !Param_1.Param.isTypeDate(max)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, only Date and number are allowed for parameter max.');\n }\n if (min && max && typeof min !== typeof max) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, parameters min and max should be of the same type.');\n }\n };\n /**\n * Verifies that the zoneId is present in the current dashboard.\n * Throws with error code InvalidParameter if either condition is false.\n *\n * @param dashboardZoneMap A map of zoneId's to the corresponding dashboard object.\n * @param zoneID ZoneId to be validated\n */\n ErrorHelpers.verifyZoneIsValid = function (dashboardZoneMap, zoneID) {\n if (dashboardZoneMap.has(zoneID)) {\n return;\n }\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, \"Unexpected invalid param value, Dashboard Object Id: \" + zoneID + \" is not present in dashboard.\");\n };\n /**\n * Verifies that the zone is present and floating in the current dashboard.\n * Throws with error code InvalidParameter if either condition is false.\n *\n * @param dashboardZoneMap A map of zoneId's to the corresponding dashboard object.\n * @param zoneID ZoneId to be validated\n */\n ErrorHelpers.verifyZoneIsValidAndFloating = function (dashboardZoneMap, zoneID) {\n if (dashboardZoneMap.has(zoneID) && dashboardZoneMap.get(zoneID).isFloating) {\n return;\n }\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, \"Unexpected invalid param value, Dashboard Object Id: \" + zoneID + \" is not present or is a fixed zone in the dashboard.\");\n };\n /**\n * Verifies that width and height are > 0 for each DashboardObjectPositionAndSizeUpdate object.\n * Throws with error code InvalidParameter if either condition is false.\n *\n * @param dashboardObjectPositionAndSizeUpdate DashboardObjectPositionAndSizeUpdate object for which width and height will be validated\n */\n ErrorHelpers.verifyWidthAndHeightOfDashboardObjectPositionAndSizeUpdate = function (dashboardObjectPositionAndSizeUpdate) {\n if (dashboardObjectPositionAndSizeUpdate.width < 0 || dashboardObjectPositionAndSizeUpdate.height < 0) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, \"Unexpected invalid param value for dashboard object ID \" + dashboardObjectPositionAndSizeUpdate.dashboardObjectID + \":\" +\n \" negative widths and heights are not allowed.\");\n }\n };\n return ErrorHelpers;\n}());\nexports.ErrorHelpers = ErrorHelpers;\n//# sourceMappingURL=ErrorHelpers.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nvar ErrorHelpers_1 = require(\"./ErrorHelpers\");\nvar Param = /** @class */ (function () {\n function Param() {\n }\n /**\n * serializes the date into the format that the server expects.\n * @param date the date to serialize\n */\n Param.serializeDateForPlatform = function (date) {\n var year = date.getUTCFullYear();\n var month = date.getUTCMonth() + 1;\n var day = date.getUTCDate();\n var hh = date.getUTCHours();\n var mm = date.getUTCMinutes();\n var sec = date.getUTCSeconds();\n return year + \"-\" + month + \"-\" + day + \" \" + hh + \":\" + mm + \":\" + sec;\n };\n Param.serializeBooleanForPlatform = function (bool) {\n return bool ? 'true' : 'false';\n };\n Param.serializeNumberForPlatform = function (num) {\n return num.toString(10);\n };\n /**\n * Verifies the input is a number\n */\n /* tslint:disable-next-line:no-any */\n Param.isTypeNumber = function (input) {\n return typeof input === 'number' || input instanceof Number;\n };\n /**\n * Verifies the input is a Date\n */\n /* tslint:disable-next-line:no-any */\n Param.isTypeDate = function (input) {\n return input instanceof Date;\n };\n /* tslint:disable-next-line:no-any */\n Param.isTypeString = function (input) {\n return typeof input === 'string' || input instanceof String;\n };\n /* tslint:disable-next-line:no-any */\n Param.isTypeBool = function (input) {\n return typeof input === 'boolean' || input instanceof Boolean;\n };\n /**\n * Determines if the input is null or undefined\n */\n /* tslint:disable-next-line:no-any */\n Param.isNullOrUndefined = function (input) {\n return input === null || input === undefined;\n };\n /* tslint:disable-next-line:no-any */\n Param.serializeParameterValue = function (value) {\n if (Param.isTypeNumber(value)) {\n return Param.serializeNumberForPlatform(value);\n }\n else if (Param.isTypeDate(value)) {\n return Param.serializeDateForPlatform(value);\n }\n else if (Param.isTypeBool(value)) {\n return Param.serializeBooleanForPlatform(value);\n }\n else if (Param.isTypeString(value)) {\n return value;\n }\n else {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"Unexpected invalid value for: \" + value);\n }\n };\n /**\n * Verifies that the parameter is already a Map, or converts an object to a Map.\n * If the parameter is an object, we convert it to a Map using Object.entries.\n * @throws if the parameter is not an object or Map\n */\n // tslint:disable-next-line:no-any\n Param.convertParameterToMap = function (param, paramName) {\n ErrorHelpers_1.ErrorHelpers.verifyParameterType(param, 'object', paramName);\n if (Array.isArray(param)) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, \"Expecting object or Map for: \" + paramName + \".\");\n }\n return param instanceof Map ? param : new Map(Object.entries(param));\n };\n /* tslint:disable-next-line:no-any */\n Param.tryParseNumber = function (value) {\n if (Param.isNullOrUndefined(value)) {\n return { success: false };\n }\n if (Param.isTypeNumber(value)) {\n return { parsed: value, success: true };\n }\n var valueString = value.toString();\n if (valueString === 'NaN') {\n // 'NaN' parses as NaN which is indistinguishable from a failed parse.\n return { parsed: NaN, success: true };\n }\n var parsed = parseFloat(valueString);\n if (isNaN(parsed)) {\n return { success: false };\n }\n return { parsed: parsed, success: true };\n };\n return Param;\n}());\nexports.Param = Param;\n//# sourceMappingURL=Param.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nvar SheetUtils = /** @class */ (function () {\n function SheetUtils() {\n }\n // This is a direct port from SheetSize.cs - SheetSizeFactory\n SheetUtils.getSheetSizeFromSizeConstraints = function (sizeConstraint) {\n var minWidth = sizeConstraint.minWidth, minHeight = sizeConstraint.minHeight, maxWidth = sizeConstraint.maxWidth, maxHeight = sizeConstraint.maxHeight;\n if (minHeight === 0 && minWidth === 0) {\n if (maxHeight === 0 && maxWidth === 0) {\n return {\n behavior: Contract.SheetSizeBehavior.Automatic,\n };\n }\n return {\n behavior: Contract.SheetSizeBehavior.AtMost,\n maxSize: { width: maxWidth, height: maxHeight },\n };\n }\n if (maxHeight === 0 && maxWidth === 0) {\n return {\n behavior: Contract.SheetSizeBehavior.AtLeast,\n minSize: { width: minWidth, height: minHeight },\n };\n }\n if (maxHeight === minHeight && maxWidth === minWidth && minWidth > 0) {\n return {\n behavior: Contract.SheetSizeBehavior.Exactly,\n minSize: { width: minWidth, height: minHeight },\n maxSize: { width: minWidth, height: minHeight },\n };\n }\n // 'Fit Width' for a DSD layout\n var isDsdLayout = minWidth === 0 && maxWidth === 0;\n return {\n behavior: Contract.SheetSizeBehavior.Range,\n minSize: { width: minWidth, height: minHeight },\n maxSize: { width: isDsdLayout ? 2147483647 : maxWidth, height: maxHeight },\n };\n };\n SheetUtils.createAutomaticSize = function () {\n var behavior = Contract.SheetSizeBehavior.Automatic;\n var minSize = { width: 0, height: 0 };\n var maxSize = { width: 0, height: 0 };\n return { behavior: behavior, minSize: minSize, maxSize: maxSize };\n };\n SheetUtils.getPublishedSheetInfoByName = function (name, sheetInfos) {\n var sheetInfo = sheetInfos.find(function (sheet) { return sheet.name === name; });\n return sheetInfo;\n };\n SheetUtils.getSheetTypeEnum = function (internalSheetType) {\n var sheetType;\n switch (internalSheetType) {\n case api_internal_contract_js_1.SheetType.Worksheet: {\n sheetType = Contract.SheetType.Worksheet;\n break;\n }\n case api_internal_contract_js_1.SheetType.Dashboard: {\n sheetType = Contract.SheetType.Dashboard;\n break;\n }\n case api_internal_contract_js_1.SheetType.Story: {\n sheetType = Contract.SheetType.Story;\n break;\n }\n default: {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ServerError, 'Invalid SheetType');\n }\n }\n return sheetType;\n };\n SheetUtils.isValidSheetSize = function (sizeObject) {\n return sizeObject.behavior !== undefined;\n };\n return SheetUtils;\n}());\nexports.SheetUtils = SheetUtils;\n//# sourceMappingURL=SheetUtils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Contract = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"../TableauError\");\nvar Deferred_1 = require(\"./Deferred\");\n/**\n * A Deferred wrapper class adding functionality to reject unresponsive promises after timeout\n *\n * this class handles two things:\n\n * 1. Adds timeout logic for deferred\n * 2. It blocks multiple calls from executing at the same time.\n *\n * @export\n * @class ShortLivedDeferred\n * @template TResolve The type used to resolve the promise.\n * @template TReject The type used to reject the promise. Defaults to any.\n *\n */\nvar ShortLivedDeferred = /** @class */ (function () {\n function ShortLivedDeferred(_timeoutInMilliseconds) {\n if (_timeoutInMilliseconds === void 0) { _timeoutInMilliseconds = Deferred_1.UnregisterTimeoutInMilliseconds; }\n this._timeoutInMilliseconds = _timeoutInMilliseconds;\n }\n ShortLivedDeferred.prototype.getNewPromiseOrThrowIfBusy = function () {\n var _this = this;\n if (this._deferred) {\n throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ApiExecutionError, 'This api cannot be executed till previous call is resolved.');\n }\n this._deferred = new Deferred_1.Deferred();\n this._timeoutId = setTimeout(function () {\n var error = new TableauError_1.TableauError(Contract.SharedErrorCodes.Timeout, \"Api failed to complete in \" + _this._timeoutInMilliseconds / 1000 + \" seconds\");\n _this.reject(error);\n }, this._timeoutInMilliseconds);\n return this._deferred.promise;\n };\n ShortLivedDeferred.prototype.resolve = function (response) {\n if (this._deferred) {\n clearTimeout(this._timeoutId);\n this._deferred.resolve(response);\n this._deferred = undefined;\n }\n };\n ShortLivedDeferred.prototype.reject = function (error) {\n if (this._deferred) {\n clearTimeout(this._timeoutId);\n this._deferred.reject(error);\n this._deferred = undefined;\n }\n };\n return ShortLivedDeferred;\n}());\nexports.ShortLivedDeferred = ShortLivedDeferred;\n//# sourceMappingURL=ShortLivedDeferred.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nvar TableauError_1 = require(\"./TableauError\");\n/**\n * Represents the current version of the extensions, embedding\n * and extensions-api-types library\n */\nvar VersionNumber = /** @class */ (function () {\n // private constructor so everyone uses the singleton instance\n // build numbers have this form: M.m.f-pre.N\n function VersionNumber(versionString, isAlpha) {\n var partStr = versionString.split('-');\n this.build = this.getBuildNumber(partStr[1]);\n versionString = partStr[0];\n var parts = versionString.split('.').map(function (p) { return parseInt(p, 10); });\n if (parts.length !== 3) {\n throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, \"Invalid version number: \" + versionString);\n }\n this.major = parts[0];\n this.minor = parts[1];\n this.fix = parts[2];\n this.isAlpha = isAlpha;\n }\n VersionNumber.prototype.getBuildNumber = function (preReleaseString) {\n var noBuildNumber = -1;\n if (!preReleaseString) {\n return noBuildNumber;\n }\n // The preRelease string has this form: pre.N, but we don't depend on the actual string being 'pre'\n var partStr = preReleaseString.split('.');\n return partStr[1] ? parseInt(partStr[1], 10) : noBuildNumber;\n };\n Object.defineProperty(VersionNumber.prototype, \"formattedValue\", {\n get: function () {\n return this.major + \".\" + this.minor + \".\" + this.fix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(VersionNumber.prototype, \"fullFormattedValue\", {\n get: function () {\n return this.major + \".\" + this.minor + \".\" + this.fix + \"-pre.\" + this.build;\n },\n enumerable: true,\n configurable: true\n });\n return VersionNumber;\n}());\nexports.VersionNumber = VersionNumber;\n//# sourceMappingURL=VersionNumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar api_internal_contract_js_1 = require(\"@tableau/api-internal-contract-js\");\n/**\n * Implementation of the InternalApiDispatcher which supports upgrading and downgrading the input\n * internal contract to the version that this module is built against\n *\n * @class VersionedExternalApiDispatcher\n * @implements {InternalApiDispatcher}\n */\nvar VersionedExternalApiDispatcher = /** @class */ (function () {\n /**\n * Creates a new instance of the VersionedExternalApiDispatcher\n * We have multiple version converting dispatchers that work together.\n * If needed, the VersionedExternalApiDispatcher wraps either the InternalApiDispatcher (desktop)\n * or the CrossFrameDispatcher (server).\n * The Internal/CrossFrame dispatchers handle an updated platform with an older external library.\n * (The CrossFrameDispatcher sends messages across the frame, and it is handled by the PresLayerHandler.)\n * Meanwhile, the VersionedExternalApiDispatcher handles an updated external library with an older platform.\n \n * @param _apiDelegateDispatcher The delegate that does the actual work.\n * @param platformVersionNumber The version of the internal contract which the platform module is using.\n * This number will be used to figure out how to downgrade incoming commands and upgrade the results\n */\n function VersionedExternalApiDispatcher(_apiDelegateDispatcher, platformVersionNumber) {\n var _this = this;\n this._apiDelegateDispatcher = _apiDelegateDispatcher;\n this._versionConverter = api_internal_contract_js_1.CreateExternalCompatibleVersionConverter(api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION, platformVersionNumber);\n this._notificationHandlers = [];\n _apiDelegateDispatcher.registerNotificationHandler(function (notification) {\n if (_this._notificationHandlers.length === 0) {\n return;\n }\n var upgradedNotification = _this._versionConverter.upgradeNotification(notification);\n _this._notificationHandlers.forEach(function (handler) {\n handler(upgradedNotification);\n });\n });\n }\n VersionedExternalApiDispatcher.needsVersionConverter = function (platformVersion) {\n // If our platform is less than external library version, then we need a converter\n return api_internal_contract_js_1.VersionLessThan(platformVersion, api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION);\n };\n VersionedExternalApiDispatcher.prototype.execute = function (verb, parameters) {\n var _this = this;\n try {\n var downgradeParameters = this._versionConverter.downgradeExecuteCall(verb, parameters);\n return this._apiDelegateDispatcher.execute(downgradeParameters.verb, downgradeParameters.parameters).then(function (response) {\n var upgradeResponse = _this._versionConverter.upgradeExecuteReturn(response, verb, parameters);\n return upgradeResponse;\n });\n }\n catch (e) {\n return Promise.reject(e);\n }\n };\n VersionedExternalApiDispatcher.prototype.registerNotificationHandler = function (handler) {\n this._notificationHandlers.push(handler);\n };\n VersionedExternalApiDispatcher.prototype.unregisterNotificationHandler = function (handler) {\n this._notificationHandlers = this._notificationHandlers.filter(function (h) { return h !== handler; });\n };\n return VersionedExternalApiDispatcher;\n}());\nexports.VersionedExternalApiDispatcher = VersionedExternalApiDispatcher;\n//# sourceMappingURL=VersionedExternalApiDispatcher.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","\"use strict\";\n/**\n * This is your main. This is where you re-export everything you want to be publicly available.\n *\n * The build enforces that the file has the same name as the global variable that is exported.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// The following polyfills are needed for IE11\nvar api_shared_js_1 = require(\"@tableau/api-shared-js\");\nrequire(\"core-js/es/array/find\");\nrequire(\"core-js/es/array/from\");\nrequire(\"core-js/es/map\");\nrequire(\"core-js/es/number/is-integer\");\nrequire(\"core-js/es/number/is-nan\");\nrequire(\"core-js/es/number/parse-float\");\nrequire(\"core-js/es/number/parse-int\");\nrequire(\"core-js/es/object/assign\");\nrequire(\"core-js/es/object/entries\");\nrequire(\"core-js/es/object/set-prototype-of\");\nrequire(\"core-js/es/promise\");\n// Due to the way we configured webpack, we should be exporting things which will be under\n// a global variable called \"tableau\". Export everything we want to be visible under tableau\n// from this file.\nvar ExtensionsImpl_1 = require(\"./ExtensionsApi/Impl/ExtensionsImpl\");\nvar Extensions_1 = require(\"./ExtensionsApi/Namespaces/Extensions\");\nvar isAlpha = typeof VERSION_IS_ALPHA !== 'undefined' ? VERSION_IS_ALPHA : false;\napi_shared_js_1.ApiVersion.SetVersionNumber(typeof API_VERSION_NUMBER !== 'undefined' ? API_VERSION_NUMBER : '0.0.0', isAlpha);\nvar extensionImpl = new ExtensionsImpl_1.ExtensionsImpl();\nexports.extensions = new Extensions_1.Extensions(extensionImpl);\n// Export Enums\n// These show up under the tableau object. I.e. tableau.ExtensionContext.Server\nvar api_external_contract_js_1 = require(\"@tableau/api-external-contract-js\");\nexports.AnalyticsObjectType = api_external_contract_js_1.AnalyticsObjectType;\nexports.AnnotationType = api_external_contract_js_1.AnnotationType;\nexports.ClassNameKey = api_external_contract_js_1.ClassNameKey;\nexports.ColumnType = api_external_contract_js_1.ColumnType;\nexports.DashboardLayoutChange = api_external_contract_js_1.DashboardLayoutChange;\nexports.DashboardObjectType = api_external_contract_js_1.DashboardObjectType;\nexports.DashboardObjectVisibilityType = api_external_contract_js_1.DashboardObjectVisibilityType;\nexports.DataType = api_external_contract_js_1.DataType;\nexports.DateRangeType = api_external_contract_js_1.DateRangeType;\nexports.DialogStyle = api_external_contract_js_1.DialogStyle;\nexports.EncodingType = api_external_contract_js_1.EncodingType;\nexports.ErrorCodes = api_external_contract_js_1.ErrorCodes;\nexports.ExtensionContext = api_external_contract_js_1.ExtensionContext;\nexports.ExtensionMode = api_external_contract_js_1.ExtensionMode;\nexports.FieldAggregationType = api_external_contract_js_1.FieldAggregationType;\nexports.FieldRoleType = api_external_contract_js_1.FieldRoleType;\nexports.FilterDomainType = api_external_contract_js_1.FilterDomainType;\nexports.FilterNullOption = api_external_contract_js_1.FilterNullOption;\nexports.FilterType = api_external_contract_js_1.FilterType;\nexports.FilterUpdateType = api_external_contract_js_1.FilterUpdateType;\nexports.HierarchicalLevelSelectionState = api_external_contract_js_1.HierarchicalLevelSelectionState;\nexports.IncludeDataValuesOption = api_external_contract_js_1.IncludeDataValuesOption;\nexports.MarkType = api_external_contract_js_1.MarkType;\nexports.ParameterValueType = api_external_contract_js_1.ParameterValueType;\nexports.PeriodType = api_external_contract_js_1.PeriodType;\nexports.QuickTableCalcType = api_external_contract_js_1.QuickTableCalcType;\nexports.ReplaySpeedType = api_external_contract_js_1.ReplaySpeedType;\nexports.SelectionUpdateType = api_external_contract_js_1.SelectionUpdateType;\nexports.SheetType = api_external_contract_js_1.SheetType;\nexports.SortDirection = api_external_contract_js_1.SortDirection;\nexports.TableauEventType = api_external_contract_js_1.TableauEventType;\nexports.TrendLineModelType = api_external_contract_js_1.TrendLineModelType;\nexports.VizImageEncodingType = api_external_contract_js_1.VizImageEncodingType;\nexports.VizImagePaletteType = api_external_contract_js_1.VizImagePaletteType;\nexports.VizImageSizeSettingAlignmentType = api_external_contract_js_1.VizImageSizeSettingAlignmentType;\nexports.VizImageSizeSettingType = api_external_contract_js_1.VizImageSizeSettingType;\nexports.VizImageSortDirectionType = api_external_contract_js_1.VizImageSortDirectionType;\nexports.ZoneVisibilityType = api_external_contract_js_1.ZoneVisibilityType;\n//# sourceMappingURL=ExtensionsApi.js.map"],"names":["entryUnbind","module","exports","path","Array","from","Map","Number","isInteger","isNaN","parseFloat","parseInt","Object","assign","entries","setPrototypeOf","Promise","global","isCallable","tryToString","TypeError","argument","isConstructor","String","wellKnownSymbol","create","definePropertyModule","UNSCOPABLES","ArrayPrototype","prototype","undefined","f","configurable","value","key","isPrototypeOf","it","Prototype","isObject","bind","call","toObject","callWithSafeIterationClosing","isArrayIteratorMethod","lengthOfArrayLike","createProperty","getIterator","getIteratorMethod","arrayLike","O","IS_CONSTRUCTOR","this","argumentsLength","arguments","length","mapfn","mapping","result","step","iterator","next","iteratorMethod","index","done","toIndexedObject","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","el","fromIndex","includes","indexOf","uncurryThis","IndexedObject","arraySpeciesCreate","push","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","that","specificCreate","self","boundFunction","target","forEach","map","filter","some","every","find","findIndex","filterReject","slice","isArray","SPECIES","originalArray","C","constructor","arraySpeciesConstructor","anObject","iteratorClose","fn","ENTRIES","error","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","exec","SKIP_CLOSING","ITERATION_SUPPORT","object","toString","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","arraySlice","replace","split","join","TEST","Error","stack","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","test","IS_FIREFOX_OR_SAFARI_STACK","dropEntries","defineProperty","redefineAll","anInstance","iterate","defineIterator","setSpecies","DESCRIPTORS","fastKey","InternalStateModule","setInternalState","set","internalStateGetterFor","getterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","ADDER","Constructor","iterable","type","first","last","size","AS_ENTRIES","getInternalState","define","previous","state","entry","getEntry","removed","clear","data","prev","has","get","add","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","kind","$","isForced","redefine","InternalMetadataModule","fails","checkCorrectnessOfIteration","setToStringTag","inheritIfRequired","common","IS_WEAK","NativeConstructor","NativePrototype","exported","fixMethod","KEY","uncurriedNativeMethod","enable","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","forced","hasOwn","ownKeys","getOwnPropertyDescriptorModule","source","keys","getOwnPropertyDescriptor","i","F","getPrototypeOf","IteratorPrototype","createPropertyDescriptor","Iterators","returnThis","IteratorConstructor","NAME","bitmap","enumerable","writable","toPropertyKey","propertyKey","IS_PURE","FunctionName","createIteratorConstructor","createNonEnumerableProperty","IteratorsCore","PROPER_FUNCTION_NAME","PROPER","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","Iterable","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","name","values","proto","document","EXISTS","createElement","window","userAgent","Pebble","classof","process","getBuiltIn","match","version","Deno","versions","v8","CONSTRUCTOR","METHOD","setGlobal","copyConstructorProperties","options","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","sham","isExtensible","preventExtensions","FunctionPrototype","Function","apply","Reflect","aCallable","getDescriptor","callBind","aFunction","namespace","method","getMethod","usingIterator","V","P","func","check","Math","globalThis","g","hasOwnProperty","a","b","console","propertyIsEnumerable","Wrapper","NewTarget","NewTargetPrototype","store","functionToString","inspectSource","cause","hiddenKeys","getOwnPropertyNamesModule","getOwnPropertyNamesExternalModule","uid","FREEZING","REQUIRED","METADATA","id","setMetadata","objectID","weakData","meta","getOwnPropertyNames","splice","getWeakData","onFreeze","NATIVE_WEAK_MAP","shared","sharedKey","OBJECT_ALREADY_INITIALIZED","WeakMap","wmget","wmhas","wmset","metadata","facade","STATE","enforce","noop","empty","construct","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","replacement","feature","detection","normalize","POLYFILL","NATIVE","string","toLowerCase","floor","isFinite","USE_SYMBOL_AS_UID","$Symbol","Result","stopped","ResultPrototype","unboundFunction","iterFn","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","innerResult","innerError","PrototypeOfArrayIteratorPrototype","arrayIterator","toLength","obj","flush","head","notify","toggle","node","promise","then","macrotask","IS_IOS","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","IS_NODE","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","parent","domain","exit","enter","resolve","nextTick","createTextNode","observe","characterData","task","V8_VERSION","getOwnPropertySymbols","symbol","Symbol","PromiseCapability","reject","$$resolve","$$reject","$default","trim","whitespaces","charAt","n$ParseFloat","trimmedString","$parseInt","hex","radix","S","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","$assign","concat","A","B","alphabet","chr","T","j","activeXDocument","defineProperties","enumBugKeys","html","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","Properties","props","IE8_DOM_DEFINE","$defineProperty","Attributes","$getOwnPropertyDescriptor","$getOwnPropertyNames","windowNames","getWindowNames","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","names","$propertyIsEnumerable","NASHORN_BUG","aPossiblePrototype","setter","CORRECT_SETTER","__proto__","TO_ENTRIES","input","pref","val","valueOf","newPromiseCapability","x","promiseCapability","enforceInternalState","TEMPLATE","unsafe","simple","TAG","SHARED","mode","copyright","aConstructor","defaultConstructor","toIntegerOrInfinity","requireObjectCoercible","charCodeAt","CONVERT_TO_STRING","pos","second","position","codeAt","whitespace","ltrim","RegExp","rtrim","start","end","location","defer","channel","port","setImmediate","clearImmediate","Dispatch","MessageChannel","counter","queue","run","runner","listener","event","post","postMessage","protocol","host","args","now","port2","port1","onmessage","addEventListener","importScripts","removeChild","setTimeout","max","min","integer","ceil","number","isSymbol","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","toPrimitive","postfix","random","NATIVE_SYMBOL","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","description","clearErrorStack","installErrorCause","normalizeStringArgument","ERROR_STACK_INSTALLABLE","$AggregateError","errors","message","AggregateErrorPrototype","errorsArray","AggregateError","$find","addToUnscopables","FIND","SKIPS_HOLES","ARRAY_ITERATOR","Arguments","collection","init","$entries","newPromiseCapabilityModule","perform","allSettled","capability","promiseResolve","remaining","alreadyCalled","status","reason","PROMISE_ANY_ERROR","any","alreadyResolved","alreadyRejected","NativePromise","speciesConstructor","real","onFinally","isFunction","e","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","microtask","hostReportErrors","IS_BROWSER","PROMISE","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromisePrototype","newGenericPromiseCapability","DISPATCH_EVENT","createEvent","dispatchEvent","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","SUBCLASSING","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","all","isThenable","isReject","notified","chain","reactions","ok","exited","reaction","handler","fail","rejection","onHandleUnhandled","onUnhandled","initEvent","isUnhandled","emit","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","wrap","r","$promiseResolve","race","STRING_ITERATOR","point","validator","gen","count","out","substring","Guid","guid","EMPTY","isGuid","equals","other","isEmpty","toJSON","raw","v1","v4","uuid","byteToHex","substr","buf","offset","bth","getRandomValues","crypto","msCrypto","rnds8","Uint8Array","rnds","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","Date","getTime","nsecs","dt","tl","tmh","n","ii","extendStatics","__extends","d","p","__","Contract","DashboardLayoutChangedEvent","_super","_dashboardLayoutChangeDetails","_this","TableauEventType","DashboardLayoutChanged","TableauEvent","api_external_contract_js_1","api_shared_js_1","FilterChangedEvent","worksheet","_fieldName","_fieldId","FilterChanged","getFilterAsync","_worksheet","getFiltersAsync","filters","eventedFilter","fieldId","fieldName","TableauError","ErrorCodes","MissingFilter","TableauWorksheetEvent","MarksSelectedEvent","MarkSelectionChanged","getMarksAsync","getSelectedMarksAsync","Parameter_1","ServiceRegistryUtil_1","ParameterChangedEvent","_globalFieldName","sheet","ParameterChanged","getParameterAsync","ApiServiceRegistry","ExtensionsRegistryId","getService","findParameterByGlobalFieldNameAsync","parameterImpl","MissingParameter","Parameter","TableauSheetEvent","_type","_sheet","WorkbookFormattingChangedEvent","_formatting","WorkbookFormattingChanged","BentonSansFontFamilyName","BentonSansLowDPIFontFamilyName","BentonSansBookFontFaceName","BentonSansBookItalicFontFaceName","BentonSansSemiDemiFontFaceName","BentonSansSemiDemiItalicFontFaceName","BentonSansLightFontFaceName","BentonSansMediumFontFaceName","SupportedBentonSansFontFaces","ConnectedServer","_userId","_siteId","_workbookId","ExtensionWorkbookImpl","getAllDataSourcesAsync","dataSchema","dataSources","ds","createDataSourceFromInfo","dataSourceInfo","dataSourceImpl","DataSourceImpl","dataSource","DataSource","initializeWithPublicInterfaces","WorkbookImpl","__spreadArrays","s","il","k","jl","api_internal_contract_js_1","Dashboard_1","Workbook_1","DashboardContent_1","Environment_1","Settings_1","UI_1","RegisterAllExtensionsServices_1","BentonSansFontNameConstants_1","ExtensionWorkbookImpl_1","LegacyInternalApiDispatcherHolder_1","SettingsImpl_1","TableauBookFontNameConstants_1","UIImpl_1","ExtensionsImpl","initializeAsync","isExtensionDialog","contextMenuCallbacks","_initializationPromise","_a","initOptions","isAlpha","ApiVersion","Instance","LegacyInternalApiDispatcherHolder","hasDesktopApiDispatcherPromise","getDesktopDispatcherPromise","dispatcherFactory","onDispatcherReceived","openPayload","catch","onDispatcherReceivedCallback_1","doCrossFrameBootstrap","INTERNAL_CONTRACT_VERSION","factory","createVizImageAsync","inputSpec","setClickThroughAsync","clickThroughEnabled","extensionZoneId","contextMenuFunctions","dispatcher","registerInitializationExtensionsServices","initializationService","callbackMapKeys","initializeDashboardExtensionsAsync","extensionInstance","locator","dashboardPath","InternalError","platformVersion","extensionEnvironment","major","minor","fix","VersionedExternalApiDispatcher","needsVersionConverter","registerAllSharedServices","registerAllExtensionsServices","dashboardContent","initializeDashboardContent","extensionDashboardInfo","environment","Environment","settings","initializeSettings","extensionSettingsInfo","ui","UI","UIImpl","workbook","Workbook","workbookFormatting","initializeTableauFonts","applyAllFormatting","initializeContextMenuCallbacks","initializeWorkbookFormattingChangedEventCallback","extensionDialogPayload","formattingModel","_styleElement","stylesheet","cssRules","deleteRule","formattingSheets","currentFormattingSheet","applyFormattingSheetToStyleSheet","styleInfo","cssProperties","fontFamily","fontSize","fontWeight","fontStyle","textDecoration","color","rule","classNameKey","insertRule","registerHandler","NotificationId","eventFormatting","fontNames","SupportedTableauFontFaces","formattingSheet","parameters","ParameterId","FontNameListItems","execute","VerbId","GetFonts","response","loadFonts","fonts","fontNameAndInfo","fontName","loadTableauFonts","loadBentonSansFonts","FontFace","fontBinaryInfo","info","sheetPath","sheetInfoImpl","SheetInfoImpl","SheetType","Dashboard","width","w","height","h","dashboardImpl","DashboardImpl","zones","dashboard","DashboardContent","settingsInfo","settingsImpl","SettingsImpl","Settings","ContextMenuClick","TableauBookFontFaceName","TableauBookFontFamilyName","weight","TableauLightFontFaceName","TableauLightFontFamilyName","TableauRegularFontFaceName","TableauRegularFontFamilyName","TableauSemiBoldFontFaceName","TableauSemiboldFontFamilyName","TableauBoldFontFaceName","TableauBoldFontFamilyName","TableauMediumFontFamilyName","TableauMediumFontFaceName","__warningIssued","__platformIsOfficialRelease","__tableauDesktopDispatcher","BlockExtension","warn","TableauEvent_1","SettingsChangedEvent","_newSettings","SettingsChanged","_saveInProgress","erase","ErrorHelpers","verifyParameter","_currentSettings","verifySettingsAreUnlocked","_isModified","getAll","saveAsync","saveSettingsAsync","newSettings","verifyStringParameter","initializeEvents","notificationService","results","settingsChangedEvent","SingleEventManagerImpl","triggerEvent","settingsValues","SettingSaveInProgress","ASYNC_SAVE_IN_PROGRESS","displayDialogAsync","url","payload","uiService","unregisterFn","ExtensionDialogUpdate","isCloseEvent","closePayload","DialogClosedByUser","closeDialog","DashboardLayoutChangedEvent_1","WorkbookFormattingChangedEvent_1","DashboardObject_1","Sheet_1","Worksheet_1","_dashboardImpl","addNewEventType","worksheetsImpl","worksheetImpl","Worksheet","objects","dashboardObjectImpl","DashboardObject","setZoneVisibilityAsync","zoneVisibilityMap","setDashboardObjectVisibilityAsync","dashboardObjectVisibilityMap","getDashboardObjectById","dashboardObjectId","zone","dashboardLayoutChangedEvent","dashboardObjectChanges","updateZones","workbookFormattingChangedEvent","moveAndResizeDashboardObjectsAsync","dashboardObjectPositionAndSizeUpdateArray","replayAnimationAsync","replaySpeed","applyFilterAsync","updateType","Sheet","_dashboardObjectImpl","isFloating","isVisible","ParameterChangedEvent_1","currentValue","dataType","allowableValues","changeValueAsync","newValue","verifyInternalValue","parameterEvent","model","EventListenerManager","_sheetImpl","sheetType","isValidSize","EmbeddingErrorCodes","ImplementationError","testSize","findParameterAsync","parameterName","getParametersAsync","parametersImpl","_workbookImpl","FilterChangedEvent_1","MarksSelectedEvent_1","_worksheetImpl","parentDashboard","SharedErrorCodes","marksEvent","SelectedMarksChanged","visualId","visualIdsAreEqual","filterEvent","filterEventResponse","applyRangeFilterAsync","filterOptions","applyHierarchicalFilterAsync","applyRelativeDateFilterAsync","clearFilterAsync","getDataSourcesAsync","getHighlightedMarksAsync","getSummaryDataAsync","getSummaryDataReaderAsync","pageRowCount","getSummaryColumnsInfoAsync","getUnderlyingDataAsync","getUnderlyingTablesAsync","getUnderlyingTableDataAsync","logicalTableId","getUnderlyingTableDataReaderAsync","clearSelectedMarksAsync","selectMarksByIDAsync","marksInfo","selectMarksByIdAsync","selectMarksByValueAsync","selections","selectionUpdateType","annotateMarkAsync","mark","annotationText","getAnnotationsAsync","removeAnnotationAsync","annotation","storyboard","storyPointID","_dashboard","ConnectedServer_1","WorkbookFormattingEnvUtil_1","_apiVersion","formattedValue","_context","InternalToExternalEnumMappings","extensionContext","convert","WorkbookFormattingEnvUtil","convertToWorkbookFormatting","_language","extensionLanguage","_country","extensionCountry","_locale","extensionLocale","_mode","extensionMode","_operatingSystem","operatingSystem","_tableauVersion","tableauVersion","userId","connectedServer","siteId","workbookId","Extensions","extensionImpl","initializeDialogAsync","_settingsImpl","isModified","_impl","workbookFormattingModel","InitializationServiceImpl","contextMenuIds","params","ExtensionContextMenuIds","IsExtensionDialog","InitializeExtension","ServiceImplBase","SettingsServiceImpl","SettingsValues","SaveExtensionSettings","DEFAULT_DIALOG_STYLE","DialogStyle","Window","UIServiceImpl","ExtensionDialogUrl","ExtensionDialogPayload","dialogStyle","InvalidParameter","ExtensionDialogH","ExtensionDialogW","verifyEnumValue","ExtensionDialogStyle","ExternalToInternalEnumMappings","dialogStyles","DisplayDialog","ExtensionDialogResult","DialogAlreadyOpen","InvalidDomain","InvalidDomainDialog","CloseDialog","verifyParameterType","ExtensionZoneId","ClickThroughEnabled","SetClickThrough","InitializationServiceImpl_1","SettingsServiceImpl_1","UIServiceImpl_1","registerService","__export","m","Enums_1","ApiMenuType","DeviceType","SheetSizeBehavior","TableauDialogType","EmbeddingTableauEventType","Toolbar","Tableau_1","ExtensionContext","ExtensionMode","VizImageEncodingType","VizImagePaletteType","VizImageSizeSettingAlignmentType","VizImageSizeSettingType","VizImageSortDirectionType","AskDataAttributes","ToolbarButtons","RevertVizSelection","FileFormats","VizChildElementAttributes","VizChildElements","VizAuthoringAttributes","VizAttributes","VizSharedAttributes","WebComponentChildElementAttributes","WebComponentAttributes","WebComponentChildElements","Tableau","__assign","t","DashboardObjectVisibilityType","HierarchicalLevelSelectionState","ReplaySpeedType","TrendLineModelType","SortDirection","SelectionUpdateType","QuickTableCalcType","PeriodType","ParameterValueType","MarkType","IncludeDataValuesOption","FilterNullOption","FilterDomainType","FilterUpdateType","FilterType","FieldRoleType","FieldAggregationType","EncodingType","DateRangeType","DashboardLayoutChange","DataType","DashboardObjectType","ClassNameKey","ColumnType","AnnotationType","AnalyticsObjectType","ZoneVisibilityType","internalContractVersion","MESSAGING_VERSION","DataTypeConverter","isSpecial","valueAsString","parseBoolean","booleanString","normalizedBoolean","specialValueIndicator","parseNumber","parseDate","dateAsString","parseDateTime","formattedDateString","convertValueAsStringToValue","Bool","Int","Float","DateTime","Spatial","convertValueToNativeValue","convertStringValueToNativeValue","ApiShowDataTableFormat","ApiShowDataTableSentinel","QuantitativeIncludedValues","DateStepPeriod","DomainRestrictionType","EncodedDataType","AnnotateEnum","AskDataOptionNames","VqlParameterNames","PublicParameterNames","VizOptionNames","JsApiInternalContract_1","CrossFramePreparedMessage_1","MessageTypeChecks_1","MessageTypes_1","CrossFrameMessenger","thisWindow","otherWindow","otherWindowOrigin","startListening","unregisterFunction","boundHandler_1","onMessageReceived","removeEventListener","stopListening","setInitializeMessageHandler","initializeMessageHandler","setCommandResponseMessageHandler","commandResponseMessageHandler","setCommandMessageHandler","commandMessageHandler","setNotificationMessageHandler","notificationMessageHandler","setHandshakeMessageHandler","handshakeMessageHandler","prepareInitializationMessage","apiVersion","crossFrameVersion","msgGuid","msgType","MessageType","Initialize","prepareMessage","prepareCommandMessage","verbId","Command","prepareCommandResponseMessage","commandGuid","CommandResponse","JSON","parse","stringify","prepareNotificationMessage","notificationId","Notification","prepareAckMessage","Ack","msg","CrossFramePreparedMessage","isMessage","isInitMessage","isCommandResponseMessage","isCommandMessage","isNotificationMessage","Handshake","isHandshakeMessage","setOtherWindow","setOtherWindowOrigin","origin","_message","_target","_origin","send","Notifications_1","expectedEmptyNotifications","Set","EditButtonClicked","EditInDesktopButtonClicked","WorkbookPublished","WorkbookReadyToClose","isVersion","versionNumber","v","initMessage","crMessage","commandMessage","notificationMessage","IdentityVersionConverter","upgradeExecuteCall","verb","downgradeExecuteReturn","executeResponse","downgradeNotification","notification","StackingVersionConverter","_externalMajorVersion","_platformMajorVersion","_upgradeExecuteTranslations","_downgradeExecuteTranslations","_downgradeNotificationTranslations","fromData","externalVersion","upgradeExecuteTranslations","downgradeExecuteTranslations","downgradeNotificationTranslations","upgraded","_i","upgradeTranslation","downgraded","downgradeTranslation","IdentityVersionConverter_1","StackingVersionConverter_1","VersionTranslations_1","VersionEqualTo","lhs","rhs","CreateVersionConverterWithTranslators","upgrades","downgrades","notificationDowngrades","externalMajorVersion","externalMinorVersion","platformMajorVersion","neededExecuteUpgrades","GetNeededTranslations","neededExecuteDowngrades","neededNotificationDowngrades","reverse","majorMinorTranslators","neededTranslations","maximumMinorVersion","GetMaximumMinorIndex","minorVersions","reduce","VersionLessThan","ExecuteMinorUpgrades","ExecuteMinorDowngrades","DowngradeWorksheetNames","NotificationMinorDowngrades","DowngradeFlipboardZoneID","CreateVersionConverter","bootstrapInfo","sheetInfo","visualModel","flipboardZoneID","ExternalIdentityVersionConverter","downgradeExecuteCall","upgradeExecuteReturn","upgradeNotification","ExternalStackingVersionConverter","_externalVersion","_platformVersion","_downgradeExecuteCallTranslations","_upgradeExecuteReturnTranslations","_upgradeNotificationTranslations","VersionConverterFactory_1","ExternalIdentityVersionConverter_1","ExternalStackingVersionConverter_1","ExternalVersionTranslations_1","CreateExternalCompatibleVersionConverterWithTranslators","upgradeNotifications","platformMinorVersion","neededExecuteCallDowngrade","GetNeededExternalTranslations","neededExecuteReturnUpgrades","neededNotificationUpgrades","ExecuteMinorDowngradeCallExternal","DowngradeUnderlyingTableDataAsync","DowngradeLogicalTableDataAsync","ExecuteMinorUpgradeReturnExternal","UpgradeDataTableTypes","UpgradeDataTableRowsAndColumns","ExecuteMinorUpgradeNotification","CreateExternalCompatibleVersionConverter","convertDataValues","table","dataTable","row","dataValue","columnIndex","headers","validateParametersForObjectModel","LogicalTableId","SingleTableId","oldUnderlyingDataTable","isSummary","oldSelectedMarksTable","marksTable","GetUnderlyingTableData","GetUnderlyingData","GetLogicalTableData","GetDataSourceData","GetDataSummaryData","isGetSummaryDataVerb","MaxRows","maxRows","underlyingDataTable","adjustDataRowLength","isGetTableDataVerb","ColumnsToIncludeById","columnsToInclude","newHeaders","header","valueIndex","newIndex","adjustDataColumns","ApiVersion_1","ExternalToInternalEnumMappings_1","CrossFrameDispatcher_1","CrossFrameDispatcher","DataSource_1","InternalToExternalEnumMappings_1","EventListenerManager_1","Field_1","Field","CustomViewImpl_1","CustomViewImpl","DashboardImpl_1","DashboardObjectImpl_1","DashboardObjectImpl","DataSourceImpl_1","ParameterImpl_1","ParameterImpl","SheetImpl_1","SheetImpl","SheetInfoImpl_1","SingleEventManagerImpl_1","StoryImpl_1","StoryImpl","StoryPointImpl_1","StoryPointImpl","StoryPointInfoImpl_1","StoryPointInfoImpl","WorkbookImpl_1","WorksheetImpl_1","WorksheetImpl","Point_1","Point","ClientInfoServiceImpl_1","ClientInfoServiceImpl","NotificationServiceImpl_1","NotificationServiceImpl","NotificationServiceImplBase_1","NotificationServiceImplBase","Registration","ServiceImplBase_1","SizeServiceImpl_1","SizeServiceImpl","StoryActivationServiceImpl_1","StoryActivationServiceImpl","TableauError_1","Deferred_1","Deferred","ErrorHelpers_1","SheetUtils_1","SheetUtils","VersionNumber_1","VersionNumber","VersionedExternalApiDispatcher_1","_instance","SetVersionNumber","numString","ConnectionSummary","_connectionInfo","serverURI","inIframe","opener","messenger","initializationMessage","messageGuid","_messenger","_pendingPromises","_notificationHandlers","onCommandResponse","onNotification","preparedMessage","registerNotificationHandler","unregisterNotificationHandler","pendingPromise","errorCode","IncompatibleVersionError","_dataSourceImpl","fields","extractUpdateTime","isExtract","isPublished","publishedUrl","refreshAsync","getActiveTablesAsync","getConnectionSummariesAsync","getLogicalTablesAsync","getLogicalTableDataAsync","getLogicalTableDataReaderAsync","_b","_c","_d","_e","_f","_g","_h","_j","EnumConverter_1","filterDomainType","EnumConverter","Relevant","Database","nullOptions","AllValues","NonNullValues","NullValues","filterUpdateType","Add","All","Remove","Replace","setVisibilityType","Show","Hide","setReplaySpeedType","Slow","Normal","Fast","showDataTableFormatType","NativeAndFormattedValues","OnlyNativeValues","NativeValuesOnly","OnlyFormattedValues","FormattedValuesOnly","periodType","Years","Quarters","Months","Weeks","Days","Hours","Minutes","Seconds","dateRangeType","Last","LastN","Next","NextN","Current","ToDate","Modal","Modeless","_k","_l","_m","_o","_p","_q","_r","_s","Desktop","Server","Authoring","Viewing","columnType","Continuous","Discrete","fieldAggregationType","Attr","Avg","Count","Countd","Day","End","Hour","InOut","Kurtosis","Max","Mdy","Median","Min","Minute","MonthYear","None","Qtr","Quart1","Quart3","Second","Skewness","Stdev","Stdevp","Sum","TruncDay","TruncHour","TruncMinute","TruncMonth","TruncQtr","TruncSecond","TruncWeek","TruncYear","User","Var","Varp","Week","Weekday","Year","fieldRoleType","Dimension","Measure","Unknown","Story","dashboardObjectType","Extension","Blank","Image","Legend","PageFilter","ParameterControl","QuickFilter","Text","Title","WebPage","List","Range","dateStepPeriod","INITIALIZATION_ERROR","INTERNAL_ERROR","MISSING_ENUM_MAPPING","MISSING_PARAMETER","PERMISSION_DENIED","PRES_MODEL_PARSING_ERROR","UNKNOWN_VERB_ID","VERSION_NOT_CONFIGURED","APINotInitialized","VISIBILITY_ERROR","VisibilityError","filterType","Categorical","RelativeDate","Hierarchical","DashboardTitle","StoryTitle","Tooltip","WorksheetTitle","hierarchicalLevelSelectionState","AllSelected","NoneSelected","SomeSelected","UnknownSelected","annotationType","Area","Mark","_eventListenerManagers","eventType","UnsupportedEventName","eventManager","_fieldImpl","aggregation","role","isHidden","isGenerated","isCalculatedField","apiNotImplemented","isCombinedField","ApiShared_1","customViewModel","_registryId","_luid","luid","_name","_shared","_isDefault","isDefault","_ownerName","owner","userFriendlyName","_url","ServiceRegistry_1","_sheetInfo","_zones","_sheetPath","_parentStoryPointImpl","_worksheetsImpl","_objects","zoneMap","zoneSize","zoneType","worksheetName","worksheetUrl","vizId","_sheetInfoImpl","zonePoint","y","zoneId","setVisibilityAsync","newZones","oldDashboardObjects","oldZoneMap","newDashboardObjects","newZoneMap","zoneChanges","oldObject","oldId","newObject","addChange","IsFloatingChanged","IsVisibleChanged","NameChanged","PositionChanged","SizeChanged","Removed","Added","change","moveAndResizeAsync","replayAsync","verifyActiveSheetOrEmbeddedInActiveStoryPoint","getDashboardFiltersAsync","applyDashboardFilterAsync","isRootAndActiveDashboard","active","isWithinActiveStoryPoint","parentStoryPoint","NotActiveSheet","_position","_size","_isFloating","_isVisible","_id","ConnectionSummary_1","LogicalTable_1","TableSummary_1","FieldImpl_1","_dataSourceInfo","_fields","fieldModel","fieldImpl","FieldImpl","getMaxPageRowLimit","summaries","summary","tableInfos","tableInfo","TableSummary","getDataSourceDataAsync","ignoreAliases","columnsToIncludeById","includeDataValuesOption","logicalTableInfos","logicalTableInfo","LogicalTable","_fieldInfo","_parentDataSource","DataValueFactory_1","Param_1","parameterInfo","setParameterInfo","_parameterInfo","DataValueFactory","MakeParameterDataValue","_allowableValues","coercedValue","Param","serializeParameterValue","changeParameterValueAsync","listValues","minValue","maxValue","stepSize","allowableValuesType","sheetSize","isActive","getSheetSize","isValidSheetSize","findParameterByNameAsync","getParametersForSheetAsync","changeSizeAsync","newSize","invalidSizeError","InvalidSize","behavior","partialSheetSize","normalizeSheetSize","isAutomatic","Automatic","minSize","maxSize","InvalidSizeBehaviorOnWorksheet","processedNewSize","processNewSize","getClientInfoAsync","publishedSheets","getSheetSizeFromSizeConstraints","sizeConstraint","parseDimensions","minSizeMaybe","maxSizeMaybe","hasMinWidth","isNullOrUndefined","hasMinHeight","hasMaxWidth","hasMaxHeight","hasValidMinSize","hasValidMaxSize","AtMost","MissingMaxSize","AtLeast","MissingMinSize","MissingMinMaxSize","Exactly","tryParseNumber","widthParsed","success","parsedWidth","parsed","heightParsed","parsedHeight","_sheetType","_sheetSize","_index","_isActive","_isHidden","sheetName","isDashboard","_eventType","_handlers","beforeCount","eventGenerator","ShortLivedDeferred_1","storyModel","_publishedSheetInfos","_storyPointInfoImpls","_deferred","ShortLivedDeferred","initializeStory","storyPoints","storyPointModel","activeStoryPointIndex","storyPointInfoImpl","caption","storyPointId","updated","_activeStoryPointImpl","containedSheetInfo","updateStoryInfo","storyInfoImpl","StoryPointIdMismatch","updateStory","activeStoryPoint","activateNextStoryPointAsync","getNewPromiseOrThrowIfBusy","activatePreviousStoryPointAsync","activateStoryPointAsync","IndexOutOfRange","revertStoryPointAsync","clearPendingPromises","_storyPointInfoImpl","sheetInfos","registryId","_containedSheetImpl","createContainedSheet","parentStory","sheetImpl","publishedSheetInfo","getPublishedSheetInfoByName","containedSheetSize","createAutomaticSize","isContainedSheetHidden","containedSheetUrl","containedSheetInfoImpl","getSheetTypeEnum","dashboardZones","ServerError","_caption","_storyPointId","_active","_updated","_parentStoryImpl","isUpdated","GetDataService_1","_visualId","_parentDashboardImpl","verifyActiveSheet","nullOption","verifyRangeParamType","levels","rangeType","worksheetDataSourceInfo","worksheetDataSchemaMap","primaryId","primaryDataSource","referencedDataSourceList","secondaryId","GetDataType","Summary","ignoreSelection","Underlying","includeAllColumns","appendContextMenuAsync","targetMenu","config","removeContextMenuAsync","menuItemId","executeContextMenuAsync","renameContextMenuAsync","menuHeader","menuDescription","isRootAndActiveWorksheet","isInsideActiveDashboard","isInsideActiveStoryPoint","_logicalTable","Filter","_worksheetName","_filterType","getFieldAsync","getAppliedWorksheetsAsync","setAppliedWorksheetsAsync","applyToWorksheets","uniqueWorksheets","CategoricalFilter","_appliedValues","_isExcludeMode","_isAllSelected","getDomainAsync","domainType","getCategoricalDomainAsync","HierarchicalDataValue","_value","_hierarchicalPath","_level","HierarchicalLevelDetail","_levelSelectionState","HierarchicalFilter","_dimensionName","_hierarchyCaption","_numberOfLevels","_levelDetails","RangeFilter","_min","_max","_includeNullValues","service","getRangeDomainAsync","RelativeDateFilter","_anchorDate","_periodType","_rangeType","_rangeN","CategoricalDomain","_values","_domainType","RangeDomain","DataTable","_data","_columns","_totalRowCount","_isTotalRowCountLimited","_isSummaryData","_marksInfo","MarkInfo","_color","_tupleId","Column","_dataType","_isReferenced","DataValue","_nativeValue","_formattedValue","__awaiter","thisArg","_arguments","generator","fulfilled","rejected","__generator","body","_","label","sent","trys","ops","op","pop","DataTableReader","_pageRowCount","_pageCount","getPageAsync","pageNumber","verifyRange","getAllPagesAsync","firstPage","rowsRequested","pagesRequested","pagesToFetch","isDataLimited","remainingData","page","fullData","totalRowCount","columns","isTotalRowCountLimited","isSummaryData","releaseAsync","SelectionModel","ValueSelectionModel","selectValues","HierarchicalSelectionModel","RangeSelectionModel","DimensionSelectionModel","TupleSelectionModel","objectIds","SelectionModelsContainer","hierModelArr","dimModelArr","quantModelArr","_x","_y","AnimationServiceImpl_1","AnnotationServiceImpl_1","DataSourceServiceImpl_1","ExternalContextMenuServiceImpl_1","FilterServiceImpl_1","GetDataServiceImpl_1","ParametersServiceImpl_1","SelectionServiceImpl_1","VizServiceImpl_1","ZoneServiceImpl_1","AnimationServiceImpl","DataSourceServiceImpl","GetDataServiceImpl","FilterServiceImpl","ParametersServiceImpl","SelectionServiceImpl","AnnotationServiceImpl","ZoneServiceImpl","VizServiceImpl","ExternalContextMenuServiceImpl","__tableauApiServiceRegistry","ServiceRegistryImpl","_services","serviceName","setInstance","serviceRegistry","clearRegistry","ReplaySpeed","ReplayAnimation","SelectionModels_1","selectionModelContainer","parseMarkSelectionIds","formattedText","VisualId","TargetPoint","SelectionList","selection","FormattedText","CreateAnnotation","GetAnnotations","annotationsList","annotationFilterMap","parseAnnotationSelectionIds","RemoveAnnotation","marks","ids","tupleId","tupleSelectionModel","selectionType","annotations","annotationId","mapAnnotation","annotationHTML","annotationPlainText","annotateEnum","GetEmbeddingClientInfo","InternalContract","SENTINEL_LOGICAL_TABLE_INFO","SingleTableCaption","platformVersionObjectModelSupport","dataSourceId","DeltaTimeMs","ShouldRefreshDS","DataSourceId","RefreshDataSource","joinParameters","GetActiveTables","joinResponse","tables","UnsupportedMethodForDataSourceType","GetDataSources","GetAllDataSources","GetConnectionDescriptionSummaries","globalfieldName","GetFieldAndDataSource","FieldId","field","convertField","convertDataSource","isObjectModelSupportedByPlatform","GetLogicalTables","GetUnderlyingTables","AppendExternalMenuItem","WorksheetName","ExternalMenuItemDisplayName","displayName","RemoveExternalMenuItem","ExternalMenuItemId","ExecuteExternalMenuItem","RenameExternalMenu","ExternalMenuHeader","ExternalMenuDescription","FilterModels_1","ApplyCategoricalFilter","FieldName","FilterValues","IsExcludeMode","isExcludeMode","ApplyRangeFilter","serializeDateForPlatform","FilterRangeMin","FilterRangeMax","FilterRangeNullOption","apiFilterHandlerCheckForCommandError","hierarchicalLevels","FilterLevels","ClearFilter","resposne","ApplyRelativeDateFilter","rangeN","MissingRangeNForRelativeDateFilters","RangeN","anchorDate","AnchorDate","convertAnchorDate","GetFilters","convertDomainFilters","GetCategoricalDomain","DomainType","convertCategoricalDomain","GetRangeDomain","convertRangeDomain","GetDashboardFilters","DashboardCategoricalFilter","sharedFilterModel","worksheetNames","executeGetAppliedWorksheets","worksheets","worksheetInfo","isSelected","allowedWorksheets","activeWorksheet","isEnabled","ChangeSharedFilter","SharedFilterSheets","telemetryFunctionName","GetSharedFilter","domainFilters","domainFilter","convertCategoricalFilter","convertHierarchicalFilter","convertRangeFilter","convertRelativeDateFilter","appliedValues","dv","MakeFilterDataValue","fieldCaption","isExclude","isAllSelected","hierarchicalDataValue","hierarchicalPath","level","levelDetails","levelInfo","aLevel","levelSelectionState","dimensionName","hierarchyCaption","includeNullValues","anchorDateValue","domainDv","year","getUTCFullYear","month","getUTCMonth","day","getUTCDate","hh","getUTCHours","mm","getUTCMinutes","sec","getUTCSeconds","InvalidDateParameter","serverPm","ParameterError","InvalidFieldCaption","InvalidFilterFieldName","InvalidValues","InvalidFilterFieldValue","InvalidAggFieldName","InvalidAggregationFieldName","uuid_1","GetDataModels_1","GetDataTableReaderModels_1","viewDataTableCacheId","getMaxRowLimit","getViewDataTableCacheId","getLimitedMaxRows","requestedRows","rowCountLimit","getType","summaryData","functionName","requestMaxRows","IgnoreAliases","IgnoreSelection","IncludeAllColumns","verifyIncludeColumnArray","ShowDataTableFormat","responseData","processResultsTable","ViewDataTableCacheId","PageRowCount","GetDataSummaryDataReader","isReferenced","GetSelectedMarks","GetHighlightedMarks","ColumnsToInclude","datasourceId","GetLogicalTableDataReader","GetUnderlyingTableDataReader","tableId","pageSize","ViewDataTableId","DataRowIndex","GetDataTableReaderPage","processResultsPage","summaryTableId","ReleaseDataTableReader","columnsAsSet","cell","MakeTableDataValue","_filterFn","_callbackFn","notificationModel","filterFn","handlers","registration","removeRegistration","hasHandlersForNotificationType","reg","SheetPath","getAllParametersAsync","inputParameters","GetParametersForSheet","ParameterFieldName","ParameterValue","ChangeParameterValue","ParameterCaption","FindParameter","ClearSelectedMarks","selectionCriterias","validateSelectionUpdateType","parseSelectionMarks","HierValSelectionModels","QuantRangeSelectionModels","DimValSelectionModels","SelectByValue","InvalidFields","InvalidSelectionFieldName","InvalidSelectionValue","InvalidDates","InvalidSelectionDate","parseSelectionIds","Selection","st","catRegex","rangeOption","hierModel","addToParamsList","quantModel","addToRangeParamsList","dimModel","valueSelectionModel","markValues","valueArr","qualifiedFieldCaption","rangeSelectionModel","included","validateNullOptionType","IncludeNull","IncludeNonNull","IncludeAll","_dispatcher","internalError","externalErrorCode","ShouldThrow","No","SheetName","MinHeight","MinWidth","MaxHeight","MaxWidth","SetSheetSize","_response","ActivateNextStoryPoint","ActivatePreviousStoryPoint","ActivateStoryPoint","StoryPointIndex","RevertStoryPoint","VizAPIInputJson","VizAPI","activateSheetAsync","SwitchToSheetName","ActivateSheet","getCustomViewsAsync","GetCustomViews","customView","showCustomViewAsync","customViewName","CustomViewName","ShowCustomView","removeCustomViewAsync","RemoveCustomView","saveCustomViewAsync","CustomViewIsDefault","SaveWorkbookAsCustomView","setActiveCustomViewAsDefaultAsync","SetActiveCustomViewAsDefault","CustomViewLuid","CustomViewIsPublic","UpdateCustomView","getCurrentSrcAsync","GetCurrentSrc","dashboardZoneMap","ZoneIdsVisibilityMap","convertParameterToMap","verifyZoneIsValid","SetZoneVisibility","DashboardObjectPositionAndSizeUpdateList","dashboardObject","verifyZoneIsValidAndFloating","dashboardObjectID","verifyWidthAndHeightOfDashboardObjectPositionAndSizeUpdate","MoveAndResizeZones","_tableInfo","connectionId","customSQL","_errorCode","internalDataValue","_promise","_resolve","_reject","UnregisterTimeoutInMilliseconds","_mappings","_defaultVal","enumVal","throwIfMissing","Yes","apiName","argumentValue","argumentName","expectedType","enumValue","enumType","enumName","isValid","enumKey","isTypeNumber","isTypeDate","zoneID","dashboardObjectPositionAndSizeUpdate","date","serializeBooleanForPlatform","bool","serializeNumberForPlatform","num","isTypeString","isTypeBool","Boolean","param","paramName","valueString","NaN","minWidth","minHeight","maxWidth","maxHeight","isDsdLayout","internalSheetType","sizeObject","_timeoutInMilliseconds","ApiExecutionError","_timeoutId","Timeout","clearTimeout","versionString","partStr","build","getBuildNumber","parts","preReleaseString","_apiDelegateDispatcher","platformVersionNumber","_versionConverter","upgradedNotification","downgradeParameters","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","ExtensionsImpl_1","Extensions_1","VERSION_IS_ALPHA","extensions"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/tableau.extensions.1.10.0.js b/lib/tableau.extensions.1.10.0.js new file mode 100644 index 00000000..bfd442a5 --- /dev/null +++ b/lib/tableau.extensions.1.10.0.js @@ -0,0 +1,18092 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "../../node_modules/core-js/es/array/find.js": +/*!***************************************************!*\ + !*** ../../node_modules/core-js/es/array/find.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.array.find */ "../../node_modules/core-js/modules/es.array.find.js"); +var entryUnbind = __webpack_require__(/*! ../../internals/entry-unbind */ "../../node_modules/core-js/internals/entry-unbind.js"); + +module.exports = entryUnbind('Array', 'find'); + + +/***/ }), + +/***/ "../../node_modules/core-js/es/array/from.js": +/*!***************************************************!*\ + !*** ../../node_modules/core-js/es/array/from.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.string.iterator */ "../../node_modules/core-js/modules/es.string.iterator.js"); +__webpack_require__(/*! ../../modules/es.array.from */ "../../node_modules/core-js/modules/es.array.from.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Array.from; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/map/index.js": +/*!**************************************************!*\ + !*** ../../node_modules/core-js/es/map/index.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.array.iterator */ "../../node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! ../../modules/es.map */ "../../node_modules/core-js/modules/es.map.js"); +__webpack_require__(/*! ../../modules/es.object.to-string */ "../../node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! ../../modules/es.string.iterator */ "../../node_modules/core-js/modules/es.string.iterator.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Map; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/number/is-integer.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/es/number/is-integer.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.number.is-integer */ "../../node_modules/core-js/modules/es.number.is-integer.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Number.isInteger; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/number/is-nan.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/es/number/is-nan.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.number.is-nan */ "../../node_modules/core-js/modules/es.number.is-nan.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Number.isNaN; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/number/parse-float.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/es/number/parse-float.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.number.parse-float */ "../../node_modules/core-js/modules/es.number.parse-float.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Number.parseFloat; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/number/parse-int.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/es/number/parse-int.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.number.parse-int */ "../../node_modules/core-js/modules/es.number.parse-int.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Number.parseInt; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/object/assign.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/es/object/assign.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.object.assign */ "../../node_modules/core-js/modules/es.object.assign.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Object.assign; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/object/entries.js": +/*!*******************************************************!*\ + !*** ../../node_modules/core-js/es/object/entries.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.object.entries */ "../../node_modules/core-js/modules/es.object.entries.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Object.entries; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/object/set-prototype-of.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/es/object/set-prototype-of.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.object.set-prototype-of */ "../../node_modules/core-js/modules/es.object.set-prototype-of.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Object.setPrototypeOf; + + +/***/ }), + +/***/ "../../node_modules/core-js/es/promise/index.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/es/promise/index.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +__webpack_require__(/*! ../../modules/es.aggregate-error */ "../../node_modules/core-js/modules/es.aggregate-error.js"); +__webpack_require__(/*! ../../modules/es.array.iterator */ "../../node_modules/core-js/modules/es.array.iterator.js"); +__webpack_require__(/*! ../../modules/es.object.to-string */ "../../node_modules/core-js/modules/es.object.to-string.js"); +__webpack_require__(/*! ../../modules/es.promise */ "../../node_modules/core-js/modules/es.promise.js"); +__webpack_require__(/*! ../../modules/es.promise.all-settled */ "../../node_modules/core-js/modules/es.promise.all-settled.js"); +__webpack_require__(/*! ../../modules/es.promise.any */ "../../node_modules/core-js/modules/es.promise.any.js"); +__webpack_require__(/*! ../../modules/es.promise.finally */ "../../node_modules/core-js/modules/es.promise.finally.js"); +__webpack_require__(/*! ../../modules/es.string.iterator */ "../../node_modules/core-js/modules/es.string.iterator.js"); +var path = __webpack_require__(/*! ../../internals/path */ "../../node_modules/core-js/internals/path.js"); + +module.exports = path.Promise; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/a-callable.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/a-callable.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "../../node_modules/core-js/internals/try-to-string.js"); + +var TypeError = global.TypeError; + +// `Assert: IsCallable(argument) is true` +module.exports = function (argument) { + if (isCallable(argument)) return argument; + throw TypeError(tryToString(argument) + ' is not a function'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/a-constructor.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/a-constructor.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ "../../node_modules/core-js/internals/is-constructor.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "../../node_modules/core-js/internals/try-to-string.js"); + +var TypeError = global.TypeError; + +// `Assert: IsConstructor(argument) is true` +module.exports = function (argument) { + if (isConstructor(argument)) return argument; + throw TypeError(tryToString(argument) + ' is not a constructor'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/a-possible-prototype.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/internals/a-possible-prototype.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); + +var String = global.String; +var TypeError = global.TypeError; + +module.exports = function (argument) { + if (typeof argument == 'object' || isCallable(argument)) return argument; + throw TypeError("Can't set " + String(argument) + ' as a prototype'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/add-to-unscopables.js": +/*!******************************************************************!*\ + !*** ../../node_modules/core-js/internals/add-to-unscopables.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var create = __webpack_require__(/*! ../internals/object-create */ "../../node_modules/core-js/internals/object-create.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); + +var UNSCOPABLES = wellKnownSymbol('unscopables'); +var ArrayPrototype = Array.prototype; + +// Array.prototype[@@unscopables] +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +if (ArrayPrototype[UNSCOPABLES] == undefined) { + definePropertyModule.f(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); +} + +// add a key to Array.prototype[@@unscopables] +module.exports = function (key) { + ArrayPrototype[UNSCOPABLES][key] = true; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/an-instance.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/an-instance.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "../../node_modules/core-js/internals/object-is-prototype-of.js"); + +var TypeError = global.TypeError; + +module.exports = function (it, Prototype) { + if (isPrototypeOf(Prototype, it)) return it; + throw TypeError('Incorrect invocation'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/an-object.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/an-object.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); + +var String = global.String; +var TypeError = global.TypeError; + +// `Assert: Type(argument) is Object` +module.exports = function (argument) { + if (isObject(argument)) return argument; + throw TypeError(String(argument) + ' is not an object'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-from.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/array-from.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "../../node_modules/core-js/internals/to-object.js"); +var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ "../../node_modules/core-js/internals/call-with-safe-iteration-closing.js"); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "../../node_modules/core-js/internals/is-array-iterator-method.js"); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ "../../node_modules/core-js/internals/is-constructor.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "../../node_modules/core-js/internals/length-of-array-like.js"); +var createProperty = __webpack_require__(/*! ../internals/create-property */ "../../node_modules/core-js/internals/create-property.js"); +var getIterator = __webpack_require__(/*! ../internals/get-iterator */ "../../node_modules/core-js/internals/get-iterator.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "../../node_modules/core-js/internals/get-iterator-method.js"); + +var Array = global.Array; + +// `Array.from` method implementation +// https://tc39.es/ecma262/#sec-array.from +module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + // if the target is not iterable or it's an array with the default iterator - use a simple case + if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + for (;!(step = call(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : Array(length); + for (;length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-includes.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/array-includes.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "../../node_modules/core-js/internals/to-absolute-index.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "../../node_modules/core-js/internals/length-of-array-like.js"); + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare -- NaN check + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +module.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-iteration.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/array-iteration.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "../../node_modules/core-js/internals/indexed-object.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "../../node_modules/core-js/internals/to-object.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "../../node_modules/core-js/internals/length-of-array-like.js"); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ "../../node_modules/core-js/internals/array-species-create.js"); + +var push = uncurryThis([].push); + +// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation +var createMethod = function (TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var IS_FILTER_REJECT = TYPE == 7; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = IndexedObject(O); + var boundFunction = bind(callbackfn, that); + var length = lengthOfArrayLike(self); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push(target, value); // filter + } else switch (TYPE) { + case 4: return false; // every + case 7: push(target, value); // filterReject + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; +}; + +module.exports = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-slice.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/array-slice.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); + +module.exports = uncurryThis([].slice); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-species-constructor.js": +/*!*************************************************************************!*\ + !*** ../../node_modules/core-js/internals/array-species-constructor.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isArray = __webpack_require__(/*! ../internals/is-array */ "../../node_modules/core-js/internals/is-array.js"); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ "../../node_modules/core-js/internals/is-constructor.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var SPECIES = wellKnownSymbol('species'); +var Array = global.Array; + +// a part of `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return C === undefined ? Array : C; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/array-species-create.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/internals/array-species-create.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var arraySpeciesConstructor = __webpack_require__(/*! ../internals/array-species-constructor */ "../../node_modules/core-js/internals/array-species-constructor.js"); + +// `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/call-with-safe-iteration-closing.js": +/*!********************************************************************************!*\ + !*** ../../node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! + \********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ "../../node_modules/core-js/internals/iterator-close.js"); + +// call something on iterator step with safe closing on error +module.exports = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/check-correctness-of-iteration.js": +/*!******************************************************************************!*\ + !*** ../../node_modules/core-js/internals/check-correctness-of-iteration.js ***! + \******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing + Array.from(iteratorWithReturn, function () { throw 2; }); +} catch (error) { /* empty */ } + +module.exports = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/classof-raw.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/classof-raw.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); + +var toString = uncurryThis({}.toString); +var stringSlice = uncurryThis(''.slice); + +module.exports = function (it) { + return stringSlice(toString(it), 8, -1); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/classof.js": +/*!*******************************************************!*\ + !*** ../../node_modules/core-js/internals/classof.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "../../node_modules/core-js/internals/to-string-tag-support.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "../../node_modules/core-js/internals/classof-raw.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var Object = global.Object; + +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/clear-error-stack.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/clear-error-stack.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "../../node_modules/core-js/internals/array-slice.js"); + +var replace = uncurryThis(''.replace); +var split = uncurryThis(''.split); +var join = uncurryThis([].join); + +var TEST = (function (arg) { return String(Error(arg).stack); })('zxcasd'); +var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; +var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); +var IS_FIREFOX_OR_SAFARI_STACK = /@[^\n]*\n/.test(TEST) && !/zxcasd/.test(TEST); + +module.exports = function (stack, dropEntries) { + if (typeof stack != 'string') return stack; + if (IS_V8_OR_CHAKRA_STACK) { + while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ''); + } else if (IS_FIREFOX_OR_SAFARI_STACK) { + return join(arraySlice(split(stack, '\n'), dropEntries), '\n'); + } return stack; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/collection-strong.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/collection-strong.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js").f; +var create = __webpack_require__(/*! ../internals/object-create */ "../../node_modules/core-js/internals/object-create.js"); +var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ "../../node_modules/core-js/internals/redefine-all.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "../../node_modules/core-js/internals/an-instance.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); +var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ "../../node_modules/core-js/internals/define-iterator.js"); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ "../../node_modules/core-js/internals/set-species.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var fastKey = __webpack_require__(/*! ../internals/internal-metadata */ "../../node_modules/core-js/internals/internal-metadata.js").fastKey; +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../../node_modules/core-js/internals/internal-state.js"); + +var setInternalState = InternalStateModule.set; +var internalStateGetterFor = InternalStateModule.getterFor; + +module.exports = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var Constructor = wrapper(function (that, iterable) { + anInstance(that, Prototype); + setInternalState(that, { + type: CONSTRUCTOR_NAME, + index: create(null), + first: undefined, + last: undefined, + size: 0 + }); + if (!DESCRIPTORS) that.size = 0; + if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + }); + + var Prototype = Constructor.prototype; + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; + // change existing entry + if (entry) { + entry.value = value; + // create new entry + } else { + state.last = entry = { + index: index = fastKey(key, true), + key: key, + value: value, + previous: previous = state.last, + next: undefined, + removed: false + }; + if (!state.first) state.first = entry; + if (previous) previous.next = entry; + if (DESCRIPTORS) state.size++; + else that.size++; + // add to index + if (index !== 'F') state.index[index] = entry; + } return that; + }; + + var getEntry = function (that, key) { + var state = getInternalState(that); + // fast case + var index = fastKey(key); + var entry; + if (index !== 'F') return state.index[index]; + // frozen object case + for (entry = state.first; entry; entry = entry.next) { + if (entry.key == key) return entry; + } + }; + + redefineAll(Prototype, { + // `{ Map, Set }.prototype.clear()` methods + // https://tc39.es/ecma262/#sec-map.prototype.clear + // https://tc39.es/ecma262/#sec-set.prototype.clear + clear: function clear() { + var that = this; + var state = getInternalState(that); + var data = state.index; + var entry = state.first; + while (entry) { + entry.removed = true; + if (entry.previous) entry.previous = entry.previous.next = undefined; + delete data[entry.index]; + entry = entry.next; + } + state.first = state.last = undefined; + if (DESCRIPTORS) state.size = 0; + else that.size = 0; + }, + // `{ Map, Set }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.delete + // https://tc39.es/ecma262/#sec-set.prototype.delete + 'delete': function (key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) prev.next = next; + if (next) next.previous = prev; + if (state.first == entry) state.first = next; + if (state.last == entry) state.last = prev; + if (DESCRIPTORS) state.size--; + else that.size--; + } return !!entry; + }, + // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods + // https://tc39.es/ecma262/#sec-map.prototype.foreach + // https://tc39.es/ecma262/#sec-set.prototype.foreach + forEach: function forEach(callbackfn /* , that = undefined */) { + var state = getInternalState(this); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined); + var entry; + while (entry = entry ? entry.next : state.first) { + boundFunction(entry.value, entry.key, this); + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + } + }, + // `{ Map, Set}.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.has + // https://tc39.es/ecma262/#sec-set.prototype.has + has: function has(key) { + return !!getEntry(this, key); + } + }); + + redefineAll(Prototype, IS_MAP ? { + // `Map.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-map.prototype.get + get: function get(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // `Map.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-map.prototype.set + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } : { + // `Set.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-set.prototype.add + add: function add(value) { + return define(this, value = value === 0 ? 0 : value, value); + } + }); + if (DESCRIPTORS) defineProperty(Prototype, 'size', { + get: function () { + return getInternalState(this).size; + } + }); + return Constructor; + }, + setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; + var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); + var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); + // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods + // https://tc39.es/ecma262/#sec-map.prototype.entries + // https://tc39.es/ecma262/#sec-map.prototype.keys + // https://tc39.es/ecma262/#sec-map.prototype.values + // https://tc39.es/ecma262/#sec-map.prototype-@@iterator + // https://tc39.es/ecma262/#sec-set.prototype.entries + // https://tc39.es/ecma262/#sec-set.prototype.keys + // https://tc39.es/ecma262/#sec-set.prototype.values + // https://tc39.es/ecma262/#sec-set.prototype-@@iterator + defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) { + setInternalState(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: undefined + }); + }, function () { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + // get next entry + if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { + // or finish the iteration + state.target = undefined; + return { value: undefined, done: true }; + } + // return step by kind + if (kind == 'keys') return { value: entry.key, done: false }; + if (kind == 'values') return { value: entry.value, done: false }; + return { value: [entry.key, entry.value], done: false }; + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); + + // `{ Map, Set }.prototype[@@species]` accessors + // https://tc39.es/ecma262/#sec-get-map-@@species + // https://tc39.es/ecma262/#sec-get-set-@@species + setSpecies(CONSTRUCTOR_NAME); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/collection.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/collection.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var isForced = __webpack_require__(/*! ../internals/is-forced */ "../../node_modules/core-js/internals/is-forced.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var InternalMetadataModule = __webpack_require__(/*! ../internals/internal-metadata */ "../../node_modules/core-js/internals/internal-metadata.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "../../node_modules/core-js/internals/an-instance.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "../../node_modules/core-js/internals/check-correctness-of-iteration.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../../node_modules/core-js/internals/set-to-string-tag.js"); +var inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ "../../node_modules/core-js/internals/inherit-if-required.js"); + +module.exports = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; + var ADDER = IS_MAP ? 'set' : 'add'; + var NativeConstructor = global[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var Constructor = NativeConstructor; + var exported = {}; + + var fixMethod = function (KEY) { + var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]); + redefine(NativePrototype, KEY, + KEY == 'add' ? function add(value) { + uncurriedNativeMethod(this, value === 0 ? 0 : value); + return this; + } : KEY == 'delete' ? function (key) { + return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY == 'get' ? function get(key) { + return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY == 'has' ? function has(key) { + return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : function set(key, value) { + uncurriedNativeMethod(this, key === 0 ? 0 : key, value); + return this; + } + ); + }; + + var REPLACE = isForced( + CONSTRUCTOR_NAME, + !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () { + new NativeConstructor().entries().next(); + })) + ); + + if (REPLACE) { + // create collection constructor + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + InternalMetadataModule.enable(); + } else if (isForced(CONSTRUCTOR_NAME, true)) { + var instance = new Constructor(); + // early implementations not supports chaining + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; + // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); + // most early implementations doesn't supports iterables, most modern - not close it correctly + // eslint-disable-next-line no-new -- required for testing + var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); }); + // for early implementations -0 and +0 not the same + var BUGGY_ZERO = !IS_WEAK && fails(function () { + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new NativeConstructor(); + var index = 5; + while (index--) $instance[ADDER](index, index); + return !$instance.has(-0); + }); + + if (!ACCEPT_ITERABLES) { + Constructor = wrapper(function (dummy, iterable) { + anInstance(dummy, NativePrototype); + var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor); + if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + return that; + }); + Constructor.prototype = NativePrototype; + NativePrototype.constructor = Constructor; + } + + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + + if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); + + // weak collections should not contains .clear method + if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear; + } + + exported[CONSTRUCTOR_NAME] = Constructor; + $({ global: true, forced: Constructor != NativeConstructor }, exported); + + setToStringTag(Constructor, CONSTRUCTOR_NAME); + + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + + return Constructor; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/copy-constructor-properties.js": +/*!***************************************************************************!*\ + !*** ../../node_modules/core-js/internals/copy-constructor-properties.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var ownKeys = __webpack_require__(/*! ../internals/own-keys */ "../../node_modules/core-js/internals/own-keys.js"); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "../../node_modules/core-js/internals/object-get-own-property-descriptor.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); + +module.exports = function (target, source) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/correct-prototype-getter.js": +/*!************************************************************************!*\ + !*** ../../node_modules/core-js/internals/correct-prototype-getter.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); + +module.exports = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + // eslint-disable-next-line es/no-object-getprototypeof -- required for testing + return Object.getPrototypeOf(new F()) !== F.prototype; +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/create-iterator-constructor.js": +/*!***************************************************************************!*\ + !*** ../../node_modules/core-js/internals/create-iterator-constructor.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ "../../node_modules/core-js/internals/iterators-core.js").IteratorPrototype; +var create = __webpack_require__(/*! ../internals/object-create */ "../../node_modules/core-js/internals/object-create.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../../node_modules/core-js/internals/set-to-string-tag.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "../../node_modules/core-js/internals/iterators.js"); + +var returnThis = function () { return this; }; + +module.exports = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/create-non-enumerable-property.js": +/*!******************************************************************************!*\ + !*** ../../node_modules/core-js/internals/create-non-enumerable-property.js ***! + \******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/create-property-descriptor.js": +/*!**************************************************************************!*\ + !*** ../../node_modules/core-js/internals/create-property-descriptor.js ***! + \**************************************************************************/ +/***/ ((module) => { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/create-property.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/create-property.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "../../node_modules/core-js/internals/to-property-key.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); + +module.exports = function (object, key, value) { + var propertyKey = toPropertyKey(key); + if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); + else object[propertyKey] = value; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/define-iterator.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/define-iterator.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../../node_modules/core-js/internals/is-pure.js"); +var FunctionName = __webpack_require__(/*! ../internals/function-name */ "../../node_modules/core-js/internals/function-name.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ "../../node_modules/core-js/internals/create-iterator-constructor.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "../../node_modules/core-js/internals/object-get-prototype-of.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../../node_modules/core-js/internals/object-set-prototype-of.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../../node_modules/core-js/internals/set-to-string-tag.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "../../node_modules/core-js/internals/iterators.js"); +var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ "../../node_modules/core-js/internals/iterators-core.js"); + +var PROPER_FUNCTION_NAME = FunctionName.PROPER; +var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; +var IteratorPrototype = IteratorsCore.IteratorPrototype; +var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; +var ITERATOR = wellKnownSymbol('iterator'); +var KEYS = 'keys'; +var VALUES = 'values'; +var ENTRIES = 'entries'; + +var returnThis = function () { return this; }; + +module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + redefine(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array.prototype.{ values, @@iterator }.name in V8 / FF + if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, 'name', VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return call(nativeIterator, this); }; + } + } + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + redefine(IterablePrototype, KEY, methods[KEY]); + } + } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + // define iterator + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + + return methods; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/descriptors.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/descriptors.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); + +// Detect IE8's incomplete defineProperty implementation +module.exports = !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/document-create-element.js": +/*!***********************************************************************!*\ + !*** ../../node_modules/core-js/internals/document-create-element.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); + +var document = global.document; +// typeof document.createElement is 'object' in old IE +var EXISTS = isObject(document) && isObject(document.createElement); + +module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-is-browser.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-is-browser.js ***! + \*****************************************************************/ +/***/ ((module) => { + +module.exports = typeof window == 'object'; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-is-ios-pebble.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-is-ios-pebble.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "../../node_modules/core-js/internals/engine-user-agent.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +module.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-is-ios.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-is-ios.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "../../node_modules/core-js/internals/engine-user-agent.js"); + +module.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-is-node.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-is-node.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var classof = __webpack_require__(/*! ../internals/classof-raw */ "../../node_modules/core-js/internals/classof-raw.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +module.exports = classof(global.process) == 'process'; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-is-webos-webkit.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-is-webos-webkit.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "../../node_modules/core-js/internals/engine-user-agent.js"); + +module.exports = /web0s(?!.*chrome)/i.test(userAgent); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-user-agent.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-user-agent.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); + +module.exports = getBuiltIn('navigator', 'userAgent') || ''; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/engine-v8-version.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/engine-v8-version.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "../../node_modules/core-js/internals/engine-user-agent.js"); + +var process = global.process; +var Deno = global.Deno; +var versions = process && process.versions || Deno && Deno.version; +var v8 = versions && versions.v8; +var match, version; + +if (v8) { + match = v8.split('.'); + // in old Chrome, versions of V8 isn't V8 = Chrome / 10 + // but their correct versions are not interesting for us + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); +} + +// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` +// so check `userAgent` even if `.v8` exists, but 0 +if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = +match[1]; + } +} + +module.exports = version; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/entry-unbind.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/entry-unbind.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); + +module.exports = function (CONSTRUCTOR, METHOD) { + return uncurryThis(global[CONSTRUCTOR].prototype[METHOD]); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/enum-bug-keys.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/enum-bug-keys.js ***! + \*************************************************************/ +/***/ ((module) => { + +// IE8- don't enum bug keys +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/error-stack-installable.js": +/*!***********************************************************************!*\ + !*** ../../node_modules/core-js/internals/error-stack-installable.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); + +module.exports = !fails(function () { + var error = Error('a'); + if (!('stack' in error)) return true; + // eslint-disable-next-line es/no-object-defineproperty -- safe + Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7)); + return error.stack !== 7; +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/export.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/internals/export.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "../../node_modules/core-js/internals/object-get-own-property-descriptor.js").f; +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ "../../node_modules/core-js/internals/set-global.js"); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ "../../node_modules/core-js/internals/copy-constructor-properties.js"); +var isForced = __webpack_require__(/*! ../internals/is-forced */ "../../node_modules/core-js/internals/is-forced.js"); + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key +*/ +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global; + } else if (STATIC) { + target = global[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global[TARGET] || {}).prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty == typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + // extend global + redefine(target, key, sourceProperty, options); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/fails.js": +/*!*****************************************************!*\ + !*** ../../node_modules/core-js/internals/fails.js ***! + \*****************************************************/ +/***/ ((module) => { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/freezing.js": +/*!********************************************************!*\ + !*** ../../node_modules/core-js/internals/freezing.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); + +module.exports = !fails(function () { + // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing + return Object.isExtensible(Object.preventExtensions({})); +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/function-apply.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/function-apply.js ***! + \**************************************************************/ +/***/ ((module) => { + +var FunctionPrototype = Function.prototype; +var apply = FunctionPrototype.apply; +var bind = FunctionPrototype.bind; +var call = FunctionPrototype.call; + +// eslint-disable-next-line es/no-reflect -- safe +module.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () { + return call.apply(apply, arguments); +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/function-bind-context.js": +/*!*********************************************************************!*\ + !*** ../../node_modules/core-js/internals/function-bind-context.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); + +var bind = uncurryThis(uncurryThis.bind); + +// optional / simple context binding +module.exports = function (fn, that) { + aCallable(fn); + return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/function-call.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/function-call.js ***! + \*************************************************************/ +/***/ ((module) => { + +var call = Function.prototype.call; + +module.exports = call.bind ? call.bind(call) : function () { + return call.apply(call, arguments); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/function-name.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/function-name.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); + +var FunctionPrototype = Function.prototype; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + +var EXISTS = hasOwn(FunctionPrototype, 'name'); +// additional protection from minified / mangled / dropped function names +var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; +var CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable)); + +module.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/function-uncurry-this.js": +/*!*********************************************************************!*\ + !*** ../../node_modules/core-js/internals/function-uncurry-this.js ***! + \*********************************************************************/ +/***/ ((module) => { + +var FunctionPrototype = Function.prototype; +var bind = FunctionPrototype.bind; +var call = FunctionPrototype.call; +var callBind = bind && bind.bind(call); + +module.exports = bind ? function (fn) { + return fn && callBind(call, fn); +} : function (fn) { + return fn && function () { + return call.apply(fn, arguments); + }; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/get-built-in.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/get-built-in.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); + +var aFunction = function (argument) { + return isCallable(argument) ? argument : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method]; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/get-iterator-method.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/core-js/internals/get-iterator-method.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var classof = __webpack_require__(/*! ../internals/classof */ "../../node_modules/core-js/internals/classof.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "../../node_modules/core-js/internals/get-method.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "../../node_modules/core-js/internals/iterators.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = function (it) { + if (it != undefined) return getMethod(it, ITERATOR) + || getMethod(it, '@@iterator') + || Iterators[classof(it)]; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/get-iterator.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/get-iterator.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "../../node_modules/core-js/internals/try-to-string.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "../../node_modules/core-js/internals/get-iterator-method.js"); + +var TypeError = global.TypeError; + +module.exports = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument)); + throw TypeError(tryToString(argument) + ' is not iterable'); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/get-method.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/get-method.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); + +// `GetMethod` abstract operation +// https://tc39.es/ecma262/#sec-getmethod +module.exports = function (V, P) { + var func = V[P]; + return func == null ? undefined : aCallable(func); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/global.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/internals/global.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var check = function (it) { + return it && it.Math == Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || + check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) || + // eslint-disable-next-line no-new-func -- fallback + (function () { return this; })() || Function('return this')(); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/has-own-property.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/internals/has-own-property.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "../../node_modules/core-js/internals/to-object.js"); + +var hasOwnProperty = uncurryThis({}.hasOwnProperty); + +// `HasOwnProperty` abstract operation +// https://tc39.es/ecma262/#sec-hasownproperty +module.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/hidden-keys.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/hidden-keys.js ***! + \***********************************************************/ +/***/ ((module) => { + +module.exports = {}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/host-report-errors.js": +/*!******************************************************************!*\ + !*** ../../node_modules/core-js/internals/host-report-errors.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +module.exports = function (a, b) { + var console = global.console; + if (console && console.error) { + arguments.length == 1 ? console.error(a) : console.error(a, b); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/html.js": +/*!****************************************************!*\ + !*** ../../node_modules/core-js/internals/html.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); + +module.exports = getBuiltIn('document', 'documentElement'); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/ie8-dom-define.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/ie8-dom-define.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ "../../node_modules/core-js/internals/document-create-element.js"); + +// Thank's IE8 for his funny defineProperty +module.exports = !DESCRIPTORS && !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- requied for testing + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a != 7; +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/indexed-object.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/indexed-object.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var classof = __webpack_require__(/*! ../internals/classof-raw */ "../../node_modules/core-js/internals/classof-raw.js"); + +var Object = global.Object; +var split = uncurryThis(''.split); + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof(it) == 'String' ? split(it, '') : Object(it); +} : Object; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/inherit-if-required.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/core-js/internals/inherit-if-required.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../../node_modules/core-js/internals/object-set-prototype-of.js"); + +// makes subclassing work correct for wrapped built-ins +module.exports = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && + // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable(NewTarget = dummy.constructor) && + NewTarget !== Wrapper && + isObject(NewTargetPrototype = NewTarget.prototype) && + NewTargetPrototype !== Wrapper.prototype + ) setPrototypeOf($this, NewTargetPrototype); + return $this; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/inspect-source.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/inspect-source.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var store = __webpack_require__(/*! ../internals/shared-store */ "../../node_modules/core-js/internals/shared-store.js"); + +var functionToString = uncurryThis(Function.toString); + +// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper +if (!isCallable(store.inspectSource)) { + store.inspectSource = function (it) { + return functionToString(it); + }; +} + +module.exports = store.inspectSource; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/install-error-cause.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/core-js/internals/install-error-cause.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); + +// `InstallErrorCause` abstract operation +// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause +module.exports = function (O, options) { + if (isObject(options) && 'cause' in options) { + createNonEnumerableProperty(O, 'cause', options.cause); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/internal-metadata.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/internal-metadata.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../../node_modules/core-js/internals/hidden-keys.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js").f; +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "../../node_modules/core-js/internals/object-get-own-property-names.js"); +var getOwnPropertyNamesExternalModule = __webpack_require__(/*! ../internals/object-get-own-property-names-external */ "../../node_modules/core-js/internals/object-get-own-property-names-external.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "../../node_modules/core-js/internals/uid.js"); +var FREEZING = __webpack_require__(/*! ../internals/freezing */ "../../node_modules/core-js/internals/freezing.js"); + +var REQUIRED = false; +var METADATA = uid('meta'); +var id = 0; + +// eslint-disable-next-line es/no-object-isextensible -- safe +var isExtensible = Object.isExtensible || function () { + return true; +}; + +var setMetadata = function (it) { + defineProperty(it, METADATA, { value: { + objectID: 'O' + id++, // object ID + weakData: {} // weak collections IDs + } }); +}; + +var fastKey = function (it, create) { + // return a primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!hasOwn(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMetadata(it); + // return object ID + } return it[METADATA].objectID; +}; + +var getWeakData = function (it, create) { + if (!hasOwn(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMetadata(it); + // return the store of weak collections IDs + } return it[METADATA].weakData; +}; + +// add metadata on freeze-family methods calling +var onFreeze = function (it) { + if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it); + return it; +}; + +var enable = function () { + meta.enable = function () { /* empty */ }; + REQUIRED = true; + var getOwnPropertyNames = getOwnPropertyNamesModule.f; + var splice = uncurryThis([].splice); + var test = {}; + test[METADATA] = 1; + + // prevent exposing of metadata key + if (getOwnPropertyNames(test).length) { + getOwnPropertyNamesModule.f = function (it) { + var result = getOwnPropertyNames(it); + for (var i = 0, length = result.length; i < length; i++) { + if (result[i] === METADATA) { + splice(result, i, 1); + break; + } + } return result; + }; + + $({ target: 'Object', stat: true, forced: true }, { + getOwnPropertyNames: getOwnPropertyNamesExternalModule.f + }); + } +}; + +var meta = module.exports = { + enable: enable, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze +}; + +hiddenKeys[METADATA] = true; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/internal-state.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/internal-state.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ "../../node_modules/core-js/internals/native-weak-map.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var shared = __webpack_require__(/*! ../internals/shared-store */ "../../node_modules/core-js/internals/shared-store.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "../../node_modules/core-js/internals/shared-key.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../../node_modules/core-js/internals/hidden-keys.js"); + +var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; +var TypeError = global.TypeError; +var WeakMap = global.WeakMap; +var set, get, has; + +var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (NATIVE_WEAK_MAP || shared.state) { + var store = shared.state || (shared.state = new WeakMap()); + var wmget = uncurryThis(store.get); + var wmhas = uncurryThis(store.has); + var wmset = uncurryThis(store.set); + set = function (it, metadata) { + if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + wmset(store, it, metadata); + return metadata; + }; + get = function (it) { + return wmget(store, it) || {}; + }; + has = function (it) { + return wmhas(store, it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwn(it, STATE); + }; +} + +module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-array-iterator-method.js": +/*!************************************************************************!*\ + !*** ../../node_modules/core-js/internals/is-array-iterator-method.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "../../node_modules/core-js/internals/iterators.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; + +// check on default Array iterator +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-array.js": +/*!********************************************************!*\ + !*** ../../node_modules/core-js/internals/is-array.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var classof = __webpack_require__(/*! ../internals/classof-raw */ "../../node_modules/core-js/internals/classof-raw.js"); + +// `IsArray` abstract operation +// https://tc39.es/ecma262/#sec-isarray +// eslint-disable-next-line es/no-array-isarray -- safe +module.exports = Array.isArray || function isArray(argument) { + return classof(argument) == 'Array'; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-callable.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/is-callable.js ***! + \***********************************************************/ +/***/ ((module) => { + +// `IsCallable` abstract operation +// https://tc39.es/ecma262/#sec-iscallable +module.exports = function (argument) { + return typeof argument == 'function'; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-constructor.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/is-constructor.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var classof = __webpack_require__(/*! ../internals/classof */ "../../node_modules/core-js/internals/classof.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "../../node_modules/core-js/internals/inspect-source.js"); + +var noop = function () { /* empty */ }; +var empty = []; +var construct = getBuiltIn('Reflect', 'construct'); +var constructorRegExp = /^\s*(?:class|function)\b/; +var exec = uncurryThis(constructorRegExp.exec); +var INCORRECT_TO_STRING = !constructorRegExp.exec(noop); + +var isConstructorModern = function (argument) { + if (!isCallable(argument)) return false; + try { + construct(noop, empty, argument); + return true; + } catch (error) { + return false; + } +}; + +var isConstructorLegacy = function (argument) { + if (!isCallable(argument)) return false; + switch (classof(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': return false; + // we can't check .prototype since constructors produced by .bind haven't it + } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); +}; + +// `IsConstructor` abstract operation +// https://tc39.es/ecma262/#sec-isconstructor +module.exports = !construct || fails(function () { + var called; + return isConstructorModern(isConstructorModern.call) + || !isConstructorModern(Object) + || !isConstructorModern(function () { called = true; }) + || called; +}) ? isConstructorLegacy : isConstructorModern; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-forced.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/is-forced.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); + +var replacement = /#|\.prototype\./; + +var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true + : value == NATIVE ? false + : isCallable(detection) ? fails(detection) + : !!detection; +}; + +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; + +module.exports = isForced; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-integral-number.js": +/*!******************************************************************!*\ + !*** ../../node_modules/core-js/internals/is-integral-number.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); + +var floor = Math.floor; + +// `IsIntegralNumber` abstract operation +// https://tc39.es/ecma262/#sec-isintegralnumber +// eslint-disable-next-line es/no-number-isinteger -- safe +module.exports = Number.isInteger || function isInteger(it) { + return !isObject(it) && isFinite(it) && floor(it) === it; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-object.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/is-object.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); + +module.exports = function (it) { + return typeof it == 'object' ? it !== null : isCallable(it); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-pure.js": +/*!*******************************************************!*\ + !*** ../../node_modules/core-js/internals/is-pure.js ***! + \*******************************************************/ +/***/ ((module) => { + +module.exports = false; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/is-symbol.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/is-symbol.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "../../node_modules/core-js/internals/object-is-prototype-of.js"); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "../../node_modules/core-js/internals/use-symbol-as-uid.js"); + +var Object = global.Object; + +module.exports = USE_SYMBOL_AS_UID ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + var $Symbol = getBuiltIn('Symbol'); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it)); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/iterate.js": +/*!*******************************************************!*\ + !*** ../../node_modules/core-js/internals/iterate.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ "../../node_modules/core-js/internals/try-to-string.js"); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "../../node_modules/core-js/internals/is-array-iterator-method.js"); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ "../../node_modules/core-js/internals/length-of-array-like.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "../../node_modules/core-js/internals/object-is-prototype-of.js"); +var getIterator = __webpack_require__(/*! ../internals/get-iterator */ "../../node_modules/core-js/internals/get-iterator.js"); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "../../node_modules/core-js/internals/get-iterator-method.js"); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ "../../node_modules/core-js/internals/iterator-close.js"); + +var TypeError = global.TypeError; + +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; + +var ResultPrototype = Result.prototype; + +module.exports = function (iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + + var stop = function (condition) { + if (iterator) iteratorClose(iterator, 'normal', condition); + return new Result(true, condition); + }; + + var callFn = function (value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } return INTERRUPTED ? fn(value, stop) : fn(value); + }; + + if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + + next = iterator.next; + while (!(step = call(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } + if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/iterator-close.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/iterator-close.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "../../node_modules/core-js/internals/get-method.js"); + +module.exports = function (iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, 'return'); + if (!innerResult) { + if (kind === 'throw') throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === 'throw') throw value; + if (innerError) throw innerResult; + anObject(innerResult); + return value; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/iterators-core.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/internals/iterators-core.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var create = __webpack_require__(/*! ../internals/object-create */ "../../node_modules/core-js/internals/object-create.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "../../node_modules/core-js/internals/object-get-prototype-of.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../../node_modules/core-js/internals/is-pure.js"); + +var ITERATOR = wellKnownSymbol('iterator'); +var BUGGY_SAFARI_ITERATORS = false; + +// `%IteratorPrototype%` object +// https://tc39.es/ecma262/#sec-%iteratorprototype%-object +var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + +/* eslint-disable es/no-array-prototype-keys -- safe */ +if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } +} + +var NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () { + var test = {}; + // FF44- legacy iterators case + return IteratorPrototype[ITERATOR].call(test) !== test; +}); + +if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {}; +else if (IS_PURE) IteratorPrototype = create(IteratorPrototype); + +// `%IteratorPrototype%[@@iterator]()` method +// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator +if (!isCallable(IteratorPrototype[ITERATOR])) { + redefine(IteratorPrototype, ITERATOR, function () { + return this; + }); +} + +module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/iterators.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/iterators.js ***! + \*********************************************************/ +/***/ ((module) => { + +module.exports = {}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/length-of-array-like.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/internals/length-of-array-like.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toLength = __webpack_require__(/*! ../internals/to-length */ "../../node_modules/core-js/internals/to-length.js"); + +// `LengthOfArrayLike` abstract operation +// https://tc39.es/ecma262/#sec-lengthofarraylike +module.exports = function (obj) { + return toLength(obj.length); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/microtask.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/microtask.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "../../node_modules/core-js/internals/object-get-own-property-descriptor.js").f; +var macrotask = __webpack_require__(/*! ../internals/task */ "../../node_modules/core-js/internals/task.js").set; +var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ "../../node_modules/core-js/internals/engine-is-ios.js"); +var IS_IOS_PEBBLE = __webpack_require__(/*! ../internals/engine-is-ios-pebble */ "../../node_modules/core-js/internals/engine-is-ios-pebble.js"); +var IS_WEBOS_WEBKIT = __webpack_require__(/*! ../internals/engine-is-webos-webkit */ "../../node_modules/core-js/internals/engine-is-webos-webkit.js"); +var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ "../../node_modules/core-js/internals/engine-is-node.js"); + +var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; +var document = global.document; +var process = global.process; +var Promise = global.Promise; +// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` +var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); +var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; + +var flush, head, last, notify, toggle, node, promise, then; + +// modern engines have queueMicrotask method +if (!queueMicrotask) { + flush = function () { + var parent, fn; + if (IS_NODE && (parent = process.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (error) { + if (head) notify(); + else last = undefined; + throw error; + } + } last = undefined; + if (parent) parent.enter(); + }; + + // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898 + if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) { + toggle = true; + node = document.createTextNode(''); + new MutationObserver(flush).observe(node, { characterData: true }); + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise.resolve(undefined); + // workaround of WebKit ~ iOS Safari 10.1 bug + promise.constructor = Promise; + then = bind(promise.then, promise); + notify = function () { + then(flush); + }; + // Node.js without promises + } else if (IS_NODE) { + notify = function () { + process.nextTick(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + // strange IE + webpack dev server bug - use .bind(global) + macrotask = bind(macrotask, global); + notify = function () { + macrotask(flush); + }; + } +} + +module.exports = queueMicrotask || function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify(); + } last = task; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/native-promise-constructor.js": +/*!**************************************************************************!*\ + !*** ../../node_modules/core-js/internals/native-promise-constructor.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +module.exports = global.Promise; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/native-symbol.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/native-symbol.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* eslint-disable es/no-symbol -- required for testing */ +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ "../../node_modules/core-js/internals/engine-v8-version.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + var symbol = Symbol(); + // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + return !String(symbol) || !(Object(symbol) instanceof Symbol) || + // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/native-weak-map.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/native-weak-map.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "../../node_modules/core-js/internals/inspect-source.js"); + +var WeakMap = global.WeakMap; + +module.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap)); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/new-promise-capability.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/core-js/internals/new-promise-capability.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); + +var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aCallable(resolve); + this.reject = aCallable(reject); +}; + +// `NewPromiseCapability` abstract operation +// https://tc39.es/ecma262/#sec-newpromisecapability +module.exports.f = function (C) { + return new PromiseCapability(C); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/normalize-string-argument.js": +/*!*************************************************************************!*\ + !*** ../../node_modules/core-js/internals/normalize-string-argument.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); + +module.exports = function (argument, $default) { + return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/number-parse-float.js": +/*!******************************************************************!*\ + !*** ../../node_modules/core-js/internals/number-parse-float.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); +var trim = __webpack_require__(/*! ../internals/string-trim */ "../../node_modules/core-js/internals/string-trim.js").trim; +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ "../../node_modules/core-js/internals/whitespaces.js"); + +var charAt = uncurryThis(''.charAt); +var n$ParseFloat = global.parseFloat; +var Symbol = global.Symbol; +var ITERATOR = Symbol && Symbol.iterator; +var FORCED = 1 / n$ParseFloat(whitespaces + '-0') !== -Infinity + // MS Edge 18- broken with boxed symbols + || (ITERATOR && !fails(function () { n$ParseFloat(Object(ITERATOR)); })); + +// `parseFloat` method +// https://tc39.es/ecma262/#sec-parsefloat-string +module.exports = FORCED ? function parseFloat(string) { + var trimmedString = trim(toString(string)); + var result = n$ParseFloat(trimmedString); + return result === 0 && charAt(trimmedString, 0) == '-' ? -0 : result; +} : n$ParseFloat; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/number-parse-int.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/internals/number-parse-int.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); +var trim = __webpack_require__(/*! ../internals/string-trim */ "../../node_modules/core-js/internals/string-trim.js").trim; +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ "../../node_modules/core-js/internals/whitespaces.js"); + +var $parseInt = global.parseInt; +var Symbol = global.Symbol; +var ITERATOR = Symbol && Symbol.iterator; +var hex = /^[+-]?0x/i; +var exec = uncurryThis(hex.exec); +var FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22 + // MS Edge 18- broken with boxed symbols + || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); })); + +// `parseInt` method +// https://tc39.es/ecma262/#sec-parseint-string-radix +module.exports = FORCED ? function parseInt(string, radix) { + var S = trim(toString(string)); + return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10)); +} : $parseInt; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-assign.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-assign.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "../../node_modules/core-js/internals/object-keys.js"); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "../../node_modules/core-js/internals/object-get-own-property-symbols.js"); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "../../node_modules/core-js/internals/object-property-is-enumerable.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "../../node_modules/core-js/internals/to-object.js"); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "../../node_modules/core-js/internals/indexed-object.js"); + +// eslint-disable-next-line es/no-object-assign -- safe +var $assign = Object.assign; +// eslint-disable-next-line es/no-object-defineproperty -- required for testing +var defineProperty = Object.defineProperty; +var concat = uncurryThis([].concat); + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +module.exports = !$assign || fails(function () { + // should have correct order of operations (Edge bug) + if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', { + enumerable: true, + get: function () { + defineProperty(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line es/no-symbol -- safe + var symbol = Symbol(); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet; +}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length` + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + var propertyIsEnumerable = propertyIsEnumerableModule.f; + while (argumentsLength > index) { + var S = IndexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key]; + } + } return T; +} : $assign; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-create.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-create.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* global ActiveXObject -- old IE, WSH */ +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ "../../node_modules/core-js/internals/object-define-properties.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "../../node_modules/core-js/internals/enum-bug-keys.js"); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../../node_modules/core-js/internals/hidden-keys.js"); +var html = __webpack_require__(/*! ../internals/html */ "../../node_modules/core-js/internals/html.js"); +var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ "../../node_modules/core-js/internals/document-create-element.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "../../node_modules/core-js/internals/shared-key.js"); + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; +}; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = typeof document != 'undefined' + ? document.domain && activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() + : NullProtoObjectViaActiveX(activeXDocument); // WSH + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; + +hiddenKeys[IE_PROTO] = true; + +// `Object.create` method +// https://tc39.es/ecma262/#sec-object.create +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : defineProperties(result, Properties); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-define-properties.js": +/*!************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-define-properties.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "../../node_modules/core-js/internals/object-keys.js"); + +// `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties +// eslint-disable-next-line es/no-object-defineproperties -- safe +module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]); + return O; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-define-property.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-define-property.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "../../node_modules/core-js/internals/ie8-dom-define.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "../../node_modules/core-js/internals/to-property-key.js"); + +var TypeError = global.TypeError; +// eslint-disable-next-line es/no-object-defineproperty -- safe +var $defineProperty = Object.defineProperty; + +// `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty +exports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-get-own-property-descriptor.js": +/*!**********************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-get-own-property-descriptor.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "../../node_modules/core-js/internals/object-property-is-enumerable.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ "../../node_modules/core-js/internals/to-property-key.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "../../node_modules/core-js/internals/ie8-dom-define.js"); + +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor +exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-get-own-property-names-external.js": +/*!**************************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-get-own-property-names-external.js ***! + \**************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* eslint-disable es/no-object-getownpropertynames -- safe */ +var classof = __webpack_require__(/*! ../internals/classof-raw */ "../../node_modules/core-js/internals/classof-raw.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var $getOwnPropertyNames = __webpack_require__(/*! ../internals/object-get-own-property-names */ "../../node_modules/core-js/internals/object-get-own-property-names.js").f; +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "../../node_modules/core-js/internals/array-slice.js"); + +var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + +var getWindowNames = function (it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } +}; + +// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window +module.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) == 'Window' + ? getWindowNames(it) + : $getOwnPropertyNames(toIndexedObject(it)); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-get-own-property-names.js": +/*!*****************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-get-own-property-names.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "../../node_modules/core-js/internals/object-keys-internal.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "../../node_modules/core-js/internals/enum-bug-keys.js"); + +var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + +// `Object.getOwnPropertyNames` method +// https://tc39.es/ecma262/#sec-object.getownpropertynames +// eslint-disable-next-line es/no-object-getownpropertynames -- safe +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-get-own-property-symbols.js": +/*!*******************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-get-own-property-symbols.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe +exports.f = Object.getOwnPropertySymbols; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-get-prototype-of.js": +/*!***********************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-get-prototype-of.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var toObject = __webpack_require__(/*! ../internals/to-object */ "../../node_modules/core-js/internals/to-object.js"); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "../../node_modules/core-js/internals/shared-key.js"); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ "../../node_modules/core-js/internals/correct-prototype-getter.js"); + +var IE_PROTO = sharedKey('IE_PROTO'); +var Object = global.Object; +var ObjectPrototype = Object.prototype; + +// `Object.getPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.getprototypeof +module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } return object instanceof Object ? ObjectPrototype : null; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-is-prototype-of.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-is-prototype-of.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); + +module.exports = uncurryThis({}.isPrototypeOf); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-keys-internal.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-keys-internal.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var indexOf = __webpack_require__(/*! ../internals/array-includes */ "../../node_modules/core-js/internals/array-includes.js").indexOf; +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "../../node_modules/core-js/internals/hidden-keys.js"); + +var push = uncurryThis([].push); + +module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + // Don't enum bug & hidden keys + while (names.length > i) if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-keys.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/object-keys.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "../../node_modules/core-js/internals/object-keys-internal.js"); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "../../node_modules/core-js/internals/enum-bug-keys.js"); + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +// eslint-disable-next-line es/no-object-keys -- safe +module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-property-is-enumerable.js": +/*!*****************************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-property-is-enumerable.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +var $propertyIsEnumerable = {}.propertyIsEnumerable; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable +exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; +} : $propertyIsEnumerable; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-set-prototype-of.js": +/*!***********************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-set-prototype-of.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* eslint-disable no-proto -- safe */ +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ "../../node_modules/core-js/internals/a-possible-prototype.js"); + +// `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof +// Works with __proto__ only. Old v8 can't work with null proto objects. +// eslint-disable-next-line es/no-object-setprototypeof -- safe +module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter(O, proto); + else O.__proto__ = proto; + return O; + }; +}() : undefined); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-to-array.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-to-array.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "../../node_modules/core-js/internals/object-keys.js"); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var $propertyIsEnumerable = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "../../node_modules/core-js/internals/object-property-is-enumerable.js").f; + +var propertyIsEnumerable = uncurryThis($propertyIsEnumerable); +var push = uncurryThis([].push); + +// `Object.{ entries, values }` methods implementation +var createMethod = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!DESCRIPTORS || propertyIsEnumerable(O, key)) { + push(result, TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + return result; + }; +}; + +module.exports = { + // `Object.entries` method + // https://tc39.es/ecma262/#sec-object.entries + entries: createMethod(true), + // `Object.values` method + // https://tc39.es/ecma262/#sec-object.values + values: createMethod(false) +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/object-to-string.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/internals/object-to-string.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "../../node_modules/core-js/internals/to-string-tag-support.js"); +var classof = __webpack_require__(/*! ../internals/classof */ "../../node_modules/core-js/internals/classof.js"); + +// `Object.prototype.toString` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.tostring +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/ordinary-to-primitive.js": +/*!*********************************************************************!*\ + !*** ../../node_modules/core-js/internals/ordinary-to-primitive.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); + +var TypeError = global.TypeError; + +// `OrdinaryToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-ordinarytoprimitive +module.exports = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val; + if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/own-keys.js": +/*!********************************************************!*\ + !*** ../../node_modules/core-js/internals/own-keys.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "../../node_modules/core-js/internals/object-get-own-property-names.js"); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "../../node_modules/core-js/internals/object-get-own-property-symbols.js"); +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); + +var concat = uncurryThis([].concat); + +// all object keys, includes non-enumerable and symbols +module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/path.js": +/*!****************************************************!*\ + !*** ../../node_modules/core-js/internals/path.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +module.exports = global; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/perform.js": +/*!*******************************************************!*\ + !*** ../../node_modules/core-js/internals/perform.js ***! + \*******************************************************/ +/***/ ((module) => { + +module.exports = function (exec) { + try { + return { error: false, value: exec() }; + } catch (error) { + return { error: true, value: error }; + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/promise-resolve.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/promise-resolve.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ "../../node_modules/core-js/internals/new-promise-capability.js"); + +module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/redefine-all.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/redefine-all.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); + +module.exports = function (target, src, options) { + for (var key in src) redefine(target, key, src[key], options); + return target; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/redefine.js": +/*!********************************************************!*\ + !*** ../../node_modules/core-js/internals/redefine.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ "../../node_modules/core-js/internals/set-global.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "../../node_modules/core-js/internals/inspect-source.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../../node_modules/core-js/internals/internal-state.js"); +var CONFIGURABLE_FUNCTION_NAME = __webpack_require__(/*! ../internals/function-name */ "../../node_modules/core-js/internals/function-name.js").CONFIGURABLE; + +var getInternalState = InternalStateModule.get; +var enforceInternalState = InternalStateModule.enforce; +var TEMPLATE = String(String).split('String'); + +(module.exports = function (O, key, value, options) { + var unsafe = options ? !!options.unsafe : false; + var simple = options ? !!options.enumerable : false; + var noTargetGet = options ? !!options.noTargetGet : false; + var name = options && options.name !== undefined ? options.name : key; + var state; + if (isCallable(value)) { + if (String(name).slice(0, 7) === 'Symbol(') { + name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']'; + } + if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) { + createNonEnumerableProperty(value, 'name', name); + } + state = enforceInternalState(value); + if (!state.source) { + state.source = TEMPLATE.join(typeof name == 'string' ? name : ''); + } + } + if (O === global) { + if (simple) O[key] = value; + else setGlobal(key, value); + return; + } else if (!unsafe) { + delete O[key]; + } else if (!noTargetGet && O[key]) { + simple = true; + } + if (simple) O[key] = value; + else createNonEnumerableProperty(O, key, value); +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +})(Function.prototype, 'toString', function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/require-object-coercible.js": +/*!************************************************************************!*\ + !*** ../../node_modules/core-js/internals/require-object-coercible.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +var TypeError = global.TypeError; + +// `RequireObjectCoercible` abstract operation +// https://tc39.es/ecma262/#sec-requireobjectcoercible +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/set-global.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/set-global.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +// eslint-disable-next-line es/no-object-defineproperty -- safe +var defineProperty = Object.defineProperty; + +module.exports = function (key, value) { + try { + defineProperty(global, key, { value: value, configurable: true, writable: true }); + } catch (error) { + global[key] = value; + } return value; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/set-species.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/set-species.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "../../node_modules/core-js/internals/descriptors.js"); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + var defineProperty = definePropertyModule.f; + + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineProperty(Constructor, SPECIES, { + configurable: true, + get: function () { return this; } + }); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/set-to-string-tag.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/set-to-string-tag.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "../../node_modules/core-js/internals/object-define-property.js").f; +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +module.exports = function (it, TAG, STATIC) { + if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { + defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/shared-key.js": +/*!**********************************************************!*\ + !*** ../../node_modules/core-js/internals/shared-key.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var shared = __webpack_require__(/*! ../internals/shared */ "../../node_modules/core-js/internals/shared.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "../../node_modules/core-js/internals/uid.js"); + +var keys = shared('keys'); + +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/shared-store.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/shared-store.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var setGlobal = __webpack_require__(/*! ../internals/set-global */ "../../node_modules/core-js/internals/set-global.js"); + +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || setGlobal(SHARED, {}); + +module.exports = store; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/shared.js": +/*!******************************************************!*\ + !*** ../../node_modules/core-js/internals/shared.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../../node_modules/core-js/internals/is-pure.js"); +var store = __webpack_require__(/*! ../internals/shared-store */ "../../node_modules/core-js/internals/shared-store.js"); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.19.0', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2021 Denis Pushkarev (zloirock.ru)' +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/species-constructor.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/core-js/internals/species-constructor.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var anObject = __webpack_require__(/*! ../internals/an-object */ "../../node_modules/core-js/internals/an-object.js"); +var aConstructor = __webpack_require__(/*! ../internals/a-constructor */ "../../node_modules/core-js/internals/a-constructor.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var SPECIES = wellKnownSymbol('species'); + +// `SpeciesConstructor` abstract operation +// https://tc39.es/ecma262/#sec-speciesconstructor +module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/string-multibyte.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/internals/string-multibyte.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "../../node_modules/core-js/internals/to-integer-or-infinity.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../../node_modules/core-js/internals/require-object-coercible.js"); + +var charAt = uncurryThis(''.charAt); +var charCodeAt = uncurryThis(''.charCodeAt); +var stringSlice = uncurryThis(''.slice); + +var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = charCodeAt(S, position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING + ? charAt(S, position) + : first + : CONVERT_TO_STRING + ? stringSlice(S, position, position + 2) + : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +module.exports = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/string-trim.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/string-trim.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../../node_modules/core-js/internals/require-object-coercible.js"); +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ "../../node_modules/core-js/internals/whitespaces.js"); + +var replace = uncurryThis(''.replace); +var whitespace = '[' + whitespaces + ']'; +var ltrim = RegExp('^' + whitespace + whitespace + '*'); +var rtrim = RegExp(whitespace + whitespace + '*$'); + +// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation +var createMethod = function (TYPE) { + return function ($this) { + var string = toString(requireObjectCoercible($this)); + if (TYPE & 1) string = replace(string, ltrim, ''); + if (TYPE & 2) string = replace(string, rtrim, ''); + return string; + }; +}; + +module.exports = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimstart + start: createMethod(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimend + end: createMethod(2), + // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + trim: createMethod(3) +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/task.js": +/*!****************************************************!*\ + !*** ../../node_modules/core-js/internals/task.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var apply = __webpack_require__(/*! ../internals/function-apply */ "../../node_modules/core-js/internals/function-apply.js"); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ "../../node_modules/core-js/internals/function-bind-context.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var html = __webpack_require__(/*! ../internals/html */ "../../node_modules/core-js/internals/html.js"); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ "../../node_modules/core-js/internals/array-slice.js"); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ "../../node_modules/core-js/internals/document-create-element.js"); +var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ "../../node_modules/core-js/internals/engine-is-ios.js"); +var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ "../../node_modules/core-js/internals/engine-is-node.js"); + +var set = global.setImmediate; +var clear = global.clearImmediate; +var process = global.process; +var Dispatch = global.Dispatch; +var Function = global.Function; +var MessageChannel = global.MessageChannel; +var String = global.String; +var counter = 0; +var queue = {}; +var ONREADYSTATECHANGE = 'onreadystatechange'; +var location, defer, channel, port; + +try { + // Deno throws a ReferenceError on `location` access without `--location` flag + location = global.location; +} catch (error) { /* empty */ } + +var run = function (id) { + if (hasOwn(queue, id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; + +var runner = function (id) { + return function () { + run(id); + }; +}; + +var listener = function (event) { + run(event.data); +}; + +var post = function (id) { + // old engines have not location.origin + global.postMessage(String(id), location.protocol + '//' + location.host); +}; + +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if (!set || !clear) { + set = function setImmediate(fn) { + var args = arraySlice(arguments, 1); + queue[++counter] = function () { + apply(isCallable(fn) ? fn : Function(fn), undefined, args); + }; + defer(counter); + return counter; + }; + clear = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (IS_NODE) { + defer = function (id) { + process.nextTick(runner(id)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(runner(id)); + }; + // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !IS_IOS) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = bind(port.postMessage, port); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if ( + global.addEventListener && + isCallable(global.postMessage) && + !global.importScripts && + location && location.protocol !== 'file:' && + !fails(post) + ) { + defer = post; + global.addEventListener('message', listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in createElement('script')) { + defer = function (id) { + html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } +} + +module.exports = { + set: set, + clear: clear +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-absolute-index.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-absolute-index.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "../../node_modules/core-js/internals/to-integer-or-infinity.js"); + +var max = Math.max; +var min = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +module.exports = function (index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-indexed-object.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-indexed-object.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +// toObject with fallback for non-array-like ES3 strings +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "../../node_modules/core-js/internals/indexed-object.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../../node_modules/core-js/internals/require-object-coercible.js"); + +module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-integer-or-infinity.js": +/*!**********************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-integer-or-infinity.js ***! + \**********************************************************************/ +/***/ ((module) => { + +var ceil = Math.ceil; +var floor = Math.floor; + +// `ToIntegerOrInfinity` abstract operation +// https://tc39.es/ecma262/#sec-tointegerorinfinity +module.exports = function (argument) { + var number = +argument; + // eslint-disable-next-line no-self-compare -- safe + return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-length.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/to-length.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ "../../node_modules/core-js/internals/to-integer-or-infinity.js"); + +var min = Math.min; + +// `ToLength` abstract operation +// https://tc39.es/ecma262/#sec-tolength +module.exports = function (argument) { + return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-object.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/to-object.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "../../node_modules/core-js/internals/require-object-coercible.js"); + +var Object = global.Object; + +// `ToObject` abstract operation +// https://tc39.es/ecma262/#sec-toobject +module.exports = function (argument) { + return Object(requireObjectCoercible(argument)); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-primitive.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-primitive.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "../../node_modules/core-js/internals/is-symbol.js"); +var getMethod = __webpack_require__(/*! ../internals/get-method */ "../../node_modules/core-js/internals/get-method.js"); +var ordinaryToPrimitive = __webpack_require__(/*! ../internals/ordinary-to-primitive */ "../../node_modules/core-js/internals/ordinary-to-primitive.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var TypeError = global.TypeError; +var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + +// `ToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-toprimitive +module.exports = function (input, pref) { + if (!isObject(input) || isSymbol(input)) return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) return result; + throw TypeError("Can't convert object to primitive value"); + } + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive(input, pref); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-property-key.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-property-key.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "../../node_modules/core-js/internals/to-primitive.js"); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ "../../node_modules/core-js/internals/is-symbol.js"); + +// `ToPropertyKey` abstract operation +// https://tc39.es/ecma262/#sec-topropertykey +module.exports = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol(key) ? key : key + ''; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-string-tag-support.js": +/*!*********************************************************************!*\ + !*** ../../node_modules/core-js/internals/to-string-tag-support.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/to-string.js": +/*!*********************************************************!*\ + !*** ../../node_modules/core-js/internals/to-string.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var classof = __webpack_require__(/*! ../internals/classof */ "../../node_modules/core-js/internals/classof.js"); + +var String = global.String; + +module.exports = function (argument) { + if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string'); + return String(argument); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/try-to-string.js": +/*!*************************************************************!*\ + !*** ../../node_modules/core-js/internals/try-to-string.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); + +var String = global.String; + +module.exports = function (argument) { + try { + return String(argument); + } catch (error) { + return 'Object'; + } +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/uid.js": +/*!***************************************************!*\ + !*** ../../node_modules/core-js/internals/uid.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ "../../node_modules/core-js/internals/function-uncurry-this.js"); + +var id = 0; +var postfix = Math.random(); +var toString = uncurryThis(1.0.toString); + +module.exports = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36); +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/use-symbol-as-uid.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/use-symbol-as-uid.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +/* eslint-disable es/no-symbol -- required for testing */ +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "../../node_modules/core-js/internals/native-symbol.js"); + +module.exports = NATIVE_SYMBOL + && !Symbol.sham + && typeof Symbol.iterator == 'symbol'; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/well-known-symbol.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/internals/well-known-symbol.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var shared = __webpack_require__(/*! ../internals/shared */ "../../node_modules/core-js/internals/shared.js"); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ "../../node_modules/core-js/internals/has-own-property.js"); +var uid = __webpack_require__(/*! ../internals/uid */ "../../node_modules/core-js/internals/uid.js"); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "../../node_modules/core-js/internals/native-symbol.js"); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "../../node_modules/core-js/internals/use-symbol-as-uid.js"); + +var WellKnownSymbolsStore = shared('wks'); +var Symbol = global.Symbol; +var symbolFor = Symbol && Symbol['for']; +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; + +module.exports = function (name) { + if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) { + var description = 'Symbol.' + name; + if (NATIVE_SYMBOL && hasOwn(Symbol, name)) { + WellKnownSymbolsStore[name] = Symbol[name]; + } else if (USE_SYMBOL_AS_UID && symbolFor) { + WellKnownSymbolsStore[name] = symbolFor(description); + } else { + WellKnownSymbolsStore[name] = createWellKnownSymbol(description); + } + } return WellKnownSymbolsStore[name]; +}; + + +/***/ }), + +/***/ "../../node_modules/core-js/internals/whitespaces.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/internals/whitespaces.js ***! + \***********************************************************/ +/***/ ((module) => { + +// a string of all valid unicode whitespaces +module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' + + '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.aggregate-error.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.aggregate-error.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ "../../node_modules/core-js/internals/object-is-prototype-of.js"); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "../../node_modules/core-js/internals/object-get-prototype-of.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../../node_modules/core-js/internals/object-set-prototype-of.js"); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ "../../node_modules/core-js/internals/copy-constructor-properties.js"); +var create = __webpack_require__(/*! ../internals/object-create */ "../../node_modules/core-js/internals/object-create.js"); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "../../node_modules/core-js/internals/create-non-enumerable-property.js"); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "../../node_modules/core-js/internals/create-property-descriptor.js"); +var clearErrorStack = __webpack_require__(/*! ../internals/clear-error-stack */ "../../node_modules/core-js/internals/clear-error-stack.js"); +var installErrorCause = __webpack_require__(/*! ../internals/install-error-cause */ "../../node_modules/core-js/internals/install-error-cause.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); +var normalizeStringArgument = __webpack_require__(/*! ../internals/normalize-string-argument */ "../../node_modules/core-js/internals/normalize-string-argument.js"); +var ERROR_STACK_INSTALLABLE = __webpack_require__(/*! ../internals/error-stack-installable */ "../../node_modules/core-js/internals/error-stack-installable.js"); + +var Error = global.Error; +var push = [].push; + +var $AggregateError = function AggregateError(errors, message /* , options */) { + var that = isPrototypeOf(AggregateErrorPrototype, this) ? this : create(AggregateErrorPrototype); + var options = arguments.length > 2 ? arguments[2] : undefined; + if (setPrototypeOf) { + that = setPrototypeOf(new Error(undefined), getPrototypeOf(that)); + } + createNonEnumerableProperty(that, 'message', normalizeStringArgument(message, '')); + if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1)); + installErrorCause(that, options); + var errorsArray = []; + iterate(errors, push, { that: errorsArray }); + createNonEnumerableProperty(that, 'errors', errorsArray); + return that; +}; + +if (setPrototypeOf) setPrototypeOf($AggregateError, Error); +else copyConstructorProperties($AggregateError, Error); + +var AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, { + constructor: createPropertyDescriptor(1, $AggregateError), + message: createPropertyDescriptor(1, ''), + name: createPropertyDescriptor(1, 'AggregateError') +}); + +// `AggregateError` constructor +// https://tc39.es/ecma262/#sec-aggregate-error-constructor +$({ global: true }, { + AggregateError: $AggregateError +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.array.find.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/modules/es.array.find.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var $find = __webpack_require__(/*! ../internals/array-iteration */ "../../node_modules/core-js/internals/array-iteration.js").find; +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ "../../node_modules/core-js/internals/add-to-unscopables.js"); + +var FIND = 'find'; +var SKIPS_HOLES = true; + +// Shouldn't skip holes +if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); + +// `Array.prototype.find` method +// https://tc39.es/ecma262/#sec-array.prototype.find +$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, { + find: function find(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables(FIND); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.array.from.js": +/*!***********************************************************!*\ + !*** ../../node_modules/core-js/modules/es.array.from.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var from = __webpack_require__(/*! ../internals/array-from */ "../../node_modules/core-js/internals/array-from.js"); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "../../node_modules/core-js/internals/check-correctness-of-iteration.js"); + +var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) { + // eslint-disable-next-line es/no-array-from -- required for testing + Array.from(iterable); +}); + +// `Array.from` method +// https://tc39.es/ecma262/#sec-array.from +$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, { + from: from +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.array.iterator.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.array.iterator.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "../../node_modules/core-js/internals/to-indexed-object.js"); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ "../../node_modules/core-js/internals/add-to-unscopables.js"); +var Iterators = __webpack_require__(/*! ../internals/iterators */ "../../node_modules/core-js/internals/iterators.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../../node_modules/core-js/internals/internal-state.js"); +var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ "../../node_modules/core-js/internals/define-iterator.js"); + +var ARRAY_ITERATOR = 'Array Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + +// `Array.prototype.entries` method +// https://tc39.es/ecma262/#sec-array.prototype.entries +// `Array.prototype.keys` method +// https://tc39.es/ecma262/#sec-array.prototype.keys +// `Array.prototype.values` method +// https://tc39.es/ecma262/#sec-array.prototype.values +// `Array.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-array.prototype-@@iterator +// `CreateArrayIterator` internal method +// https://tc39.es/ecma262/#sec-createarrayiterator +module.exports = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); +// `%ArrayIteratorPrototype%.next` method +// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next +}, function () { + var state = getInternalState(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return { value: undefined, done: true }; + } + if (kind == 'keys') return { value: index, done: false }; + if (kind == 'values') return { value: target[index], done: false }; + return { value: [index, target[index]], done: false }; +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% +// https://tc39.es/ecma262/#sec-createunmappedargumentsobject +// https://tc39.es/ecma262/#sec-createmappedargumentsobject +Iterators.Arguments = Iterators.Array; + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.map.js": +/*!****************************************************!*\ + !*** ../../node_modules/core-js/modules/es.map.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var collection = __webpack_require__(/*! ../internals/collection */ "../../node_modules/core-js/internals/collection.js"); +var collectionStrong = __webpack_require__(/*! ../internals/collection-strong */ "../../node_modules/core-js/internals/collection-strong.js"); + +// `Map` constructor +// https://tc39.es/ecma262/#sec-map-objects +collection('Map', function (init) { + return function Map() { return init(this, arguments.length ? arguments[0] : undefined); }; +}, collectionStrong); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.number.is-integer.js": +/*!******************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.number.is-integer.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var isIntegralNumber = __webpack_require__(/*! ../internals/is-integral-number */ "../../node_modules/core-js/internals/is-integral-number.js"); + +// `Number.isInteger` method +// https://tc39.es/ecma262/#sec-number.isinteger +$({ target: 'Number', stat: true }, { + isInteger: isIntegralNumber +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.number.is-nan.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.number.is-nan.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); + +// `Number.isNaN` method +// https://tc39.es/ecma262/#sec-number.isnan +$({ target: 'Number', stat: true }, { + isNaN: function isNaN(number) { + // eslint-disable-next-line no-self-compare -- NaN check + return number != number; + } +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.number.parse-float.js": +/*!*******************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.number.parse-float.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var parseFloat = __webpack_require__(/*! ../internals/number-parse-float */ "../../node_modules/core-js/internals/number-parse-float.js"); + +// `Number.parseFloat` method +// https://tc39.es/ecma262/#sec-number.parseFloat +// eslint-disable-next-line es/no-number-parsefloat -- required for testing +$({ target: 'Number', stat: true, forced: Number.parseFloat != parseFloat }, { + parseFloat: parseFloat +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.number.parse-int.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.number.parse-int.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var parseInt = __webpack_require__(/*! ../internals/number-parse-int */ "../../node_modules/core-js/internals/number-parse-int.js"); + +// `Number.parseInt` method +// https://tc39.es/ecma262/#sec-number.parseint +// eslint-disable-next-line es/no-number-parseint -- required for testing +$({ target: 'Number', stat: true, forced: Number.parseInt != parseInt }, { + parseInt: parseInt +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.object.assign.js": +/*!**************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.object.assign.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var assign = __webpack_require__(/*! ../internals/object-assign */ "../../node_modules/core-js/internals/object-assign.js"); + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +// eslint-disable-next-line es/no-object-assign -- required for testing +$({ target: 'Object', stat: true, forced: Object.assign !== assign }, { + assign: assign +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.object.entries.js": +/*!***************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.object.entries.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var $entries = __webpack_require__(/*! ../internals/object-to-array */ "../../node_modules/core-js/internals/object-to-array.js").entries; + +// `Object.entries` method +// https://tc39.es/ecma262/#sec-object.entries +$({ target: 'Object', stat: true }, { + entries: function entries(O) { + return $entries(O); + } +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.object.set-prototype-of.js": +/*!************************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.object.set-prototype-of.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../../node_modules/core-js/internals/object-set-prototype-of.js"); + +// `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof +$({ target: 'Object', stat: true }, { + setPrototypeOf: setPrototypeOf +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.object.to-string.js": +/*!*****************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.object.to-string.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "../../node_modules/core-js/internals/to-string-tag-support.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var toString = __webpack_require__(/*! ../internals/object-to-string */ "../../node_modules/core-js/internals/object-to-string.js"); + +// `Object.prototype.toString` method +// https://tc39.es/ecma262/#sec-object.prototype.tostring +if (!TO_STRING_TAG_SUPPORT) { + redefine(Object.prototype, 'toString', toString, { unsafe: true }); +} + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.promise.all-settled.js": +/*!********************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.promise.all-settled.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "../../node_modules/core-js/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "../../node_modules/core-js/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); + +// `Promise.allSettled` method +// https://tc39.es/ecma262/#sec-promise.allsettled +$({ target: 'Promise', stat: true }, { + allSettled: function allSettled(iterable) { + var C = this; + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + call(promiseResolve, C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { status: 'fulfilled', value: value }; + --remaining || resolve(values); + }, function (error) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { status: 'rejected', reason: error }; + --remaining || resolve(values); + }); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.promise.any.js": +/*!************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.promise.any.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "../../node_modules/core-js/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "../../node_modules/core-js/internals/perform.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); + +var PROMISE_ANY_ERROR = 'No one promise resolved'; + +// `Promise.any` method +// https://tc39.es/ecma262/#sec-promise.any +$({ target: 'Promise', stat: true }, { + any: function any(iterable) { + var C = this; + var AggregateError = getBuiltIn('AggregateError'); + var capability = newPromiseCapabilityModule.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var promiseResolve = aCallable(C.resolve); + var errors = []; + var counter = 0; + var remaining = 1; + var alreadyResolved = false; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyRejected = false; + remaining++; + call(promiseResolve, C, promise).then(function (value) { + if (alreadyRejected || alreadyResolved) return; + alreadyResolved = true; + resolve(value); + }, function (error) { + if (alreadyRejected || alreadyResolved) return; + alreadyRejected = true; + errors[index] = error; + --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR)); + }); + }); + --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR)); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.promise.finally.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.promise.finally.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../../node_modules/core-js/internals/is-pure.js"); +var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ "../../node_modules/core-js/internals/native-promise-constructor.js"); +var fails = __webpack_require__(/*! ../internals/fails */ "../../node_modules/core-js/internals/fails.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "../../node_modules/core-js/internals/species-constructor.js"); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ "../../node_modules/core-js/internals/promise-resolve.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); + +// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829 +var NON_GENERIC = !!NativePromise && fails(function () { + NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ }); +}); + +// `Promise.prototype.finally` method +// https://tc39.es/ecma262/#sec-promise.prototype.finally +$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, { + 'finally': function (onFinally) { + var C = speciesConstructor(this, getBuiltIn('Promise')); + var isFunction = isCallable(onFinally); + return this.then( + isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { return x; }); + } : onFinally, + isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { throw e; }); + } : onFinally + ); + } +}); + +// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then` +if (!IS_PURE && isCallable(NativePromise)) { + var method = getBuiltIn('Promise').prototype['finally']; + if (NativePromise.prototype['finally'] !== method) { + redefine(NativePromise.prototype, 'finally', method, { unsafe: true }); + } +} + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.promise.js": +/*!********************************************************!*\ + !*** ../../node_modules/core-js/modules/es.promise.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ "../../node_modules/core-js/internals/export.js"); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "../../node_modules/core-js/internals/is-pure.js"); +var global = __webpack_require__(/*! ../internals/global */ "../../node_modules/core-js/internals/global.js"); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "../../node_modules/core-js/internals/get-built-in.js"); +var call = __webpack_require__(/*! ../internals/function-call */ "../../node_modules/core-js/internals/function-call.js"); +var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ "../../node_modules/core-js/internals/native-promise-constructor.js"); +var redefine = __webpack_require__(/*! ../internals/redefine */ "../../node_modules/core-js/internals/redefine.js"); +var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ "../../node_modules/core-js/internals/redefine-all.js"); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "../../node_modules/core-js/internals/object-set-prototype-of.js"); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "../../node_modules/core-js/internals/set-to-string-tag.js"); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ "../../node_modules/core-js/internals/set-species.js"); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ "../../node_modules/core-js/internals/a-callable.js"); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ "../../node_modules/core-js/internals/is-callable.js"); +var isObject = __webpack_require__(/*! ../internals/is-object */ "../../node_modules/core-js/internals/is-object.js"); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ "../../node_modules/core-js/internals/an-instance.js"); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "../../node_modules/core-js/internals/inspect-source.js"); +var iterate = __webpack_require__(/*! ../internals/iterate */ "../../node_modules/core-js/internals/iterate.js"); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "../../node_modules/core-js/internals/check-correctness-of-iteration.js"); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ "../../node_modules/core-js/internals/species-constructor.js"); +var task = __webpack_require__(/*! ../internals/task */ "../../node_modules/core-js/internals/task.js").set; +var microtask = __webpack_require__(/*! ../internals/microtask */ "../../node_modules/core-js/internals/microtask.js"); +var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ "../../node_modules/core-js/internals/promise-resolve.js"); +var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ "../../node_modules/core-js/internals/host-report-errors.js"); +var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ "../../node_modules/core-js/internals/new-promise-capability.js"); +var perform = __webpack_require__(/*! ../internals/perform */ "../../node_modules/core-js/internals/perform.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../../node_modules/core-js/internals/internal-state.js"); +var isForced = __webpack_require__(/*! ../internals/is-forced */ "../../node_modules/core-js/internals/is-forced.js"); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "../../node_modules/core-js/internals/well-known-symbol.js"); +var IS_BROWSER = __webpack_require__(/*! ../internals/engine-is-browser */ "../../node_modules/core-js/internals/engine-is-browser.js"); +var IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ "../../node_modules/core-js/internals/engine-is-node.js"); +var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ "../../node_modules/core-js/internals/engine-v8-version.js"); + +var SPECIES = wellKnownSymbol('species'); +var PROMISE = 'Promise'; + +var getInternalState = InternalStateModule.get; +var setInternalState = InternalStateModule.set; +var getInternalPromiseState = InternalStateModule.getterFor(PROMISE); +var NativePromisePrototype = NativePromise && NativePromise.prototype; +var PromiseConstructor = NativePromise; +var PromisePrototype = NativePromisePrototype; +var TypeError = global.TypeError; +var document = global.document; +var process = global.process; +var newPromiseCapability = newPromiseCapabilityModule.f; +var newGenericPromiseCapability = newPromiseCapability; + +var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); +var NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent); +var UNHANDLED_REJECTION = 'unhandledrejection'; +var REJECTION_HANDLED = 'rejectionhandled'; +var PENDING = 0; +var FULFILLED = 1; +var REJECTED = 2; +var HANDLED = 1; +var UNHANDLED = 2; +var SUBCLASSING = false; + +var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + +var FORCED = isForced(PROMISE, function () { + var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor); + var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor); + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true; + // We need Promise#finally in the pure version for preventing prototype pollution + if (IS_PURE && !PromisePrototype['finally']) return true; + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false; + // Detect correctness of subclassing with @@species support + var promise = new PromiseConstructor(function (resolve) { resolve(1); }); + var FakePromise = function (exec) { + exec(function () { /* empty */ }, function () { /* empty */ }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES] = FakePromise; + SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise; + if (!SUBCLASSING) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT; +}); + +var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { + PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); +}); + +// helpers +var isThenable = function (it) { + var then; + return isObject(it) && isCallable(then = it.then) ? then : false; +}; + +var notify = function (state, isReject) { + if (state.notified) return; + state.notified = true; + var chain = state.reactions; + microtask(function () { + var value = state.value; + var ok = state.state == FULFILLED; + var index = 0; + // variable length - can't use forEach + while (chain.length > index) { + var reaction = chain[index++]; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) onHandleUnhandled(state); + state.rejection = HANDLED; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // can throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(TypeError('Promise-chain cycle')); + } else if (then = isThenable(result)) { + call(then, result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } + } + state.reactions = []; + state.notified = false; + if (isReject && !state.rejection) onUnhandled(state); + }); +}; + +var dispatchEvent = function (name, promise, reason) { + var event, handler; + if (DISPATCH_EVENT) { + event = document.createEvent('Event'); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global.dispatchEvent(event); + } else event = { promise: promise, reason: reason }; + if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event); + else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); +}; + +var onUnhandled = function (state) { + call(task, global, function () { + var promise = state.facade; + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + if (IS_UNHANDLED) { + result = perform(function () { + if (IS_NODE) { + process.emit('unhandledRejection', value, promise); + } else dispatchEvent(UNHANDLED_REJECTION, promise, value); + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); +}; + +var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; +}; + +var onHandleUnhandled = function (state) { + call(task, global, function () { + var promise = state.facade; + if (IS_NODE) { + process.emit('rejectionHandled', promise); + } else dispatchEvent(REJECTION_HANDLED, promise, state.value); + }); +}; + +var bind = function (fn, state, unwrap) { + return function (value) { + fn(state, value, unwrap); + }; +}; + +var internalReject = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify(state, true); +}; + +var internalResolve = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + try { + if (state.facade === value) throw TypeError("Promise can't be resolved itself"); + var then = isThenable(value); + if (then) { + microtask(function () { + var wrapper = { done: false }; + try { + call(then, value, + bind(internalResolve, wrapper, state), + bind(internalReject, wrapper, state) + ); + } catch (error) { + internalReject(wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(state, false); + } + } catch (error) { + internalReject({ done: false }, error, state); + } +}; + +// constructor polyfill +if (FORCED) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance(this, PromisePrototype); + aCallable(executor); + call(Internal, this); + var state = getInternalState(this); + try { + executor(bind(internalResolve, state), bind(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + PromisePrototype = PromiseConstructor.prototype; + // eslint-disable-next-line no-unused-vars -- required for `.length` + Internal = function Promise(executor) { + setInternalState(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: [], + rejection: false, + state: PENDING, + value: undefined + }); + }; + Internal.prototype = redefineAll(PromisePrototype, { + // `Promise.prototype.then` method + // https://tc39.es/ecma262/#sec-promise.prototype.then + then: function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reactions = state.reactions; + var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); + reaction.ok = isCallable(onFulfilled) ? onFulfilled : true; + reaction.fail = isCallable(onRejected) && onRejected; + reaction.domain = IS_NODE ? process.domain : undefined; + state.parent = true; + reactions[reactions.length] = reaction; + if (state.state != PENDING) notify(state, false); + return reaction.promise; + }, + // `Promise.prototype.catch` method + // https://tc39.es/ecma262/#sec-promise.prototype.catch + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } + }); + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalState(promise); + this.promise = promise; + this.resolve = bind(internalResolve, state); + this.reject = bind(internalReject, state); + }; + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + + if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) { + nativeThen = NativePromisePrototype.then; + + if (!SUBCLASSING) { + // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs + redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + call(nativeThen, that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, { unsafe: true }); + + // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then` + redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true }); + } + + // make `.constructor === Promise` work for native promise-based APIs + try { + delete NativePromisePrototype.constructor; + } catch (error) { /* empty */ } + + // make `instanceof Promise` work for native promise-based APIs + if (setPrototypeOf) { + setPrototypeOf(NativePromisePrototype, PromisePrototype); + } + } +} + +$({ global: true, wrap: true, forced: FORCED }, { + Promise: PromiseConstructor +}); + +setToStringTag(PromiseConstructor, PROMISE, false, true); +setSpecies(PROMISE); + +PromiseWrapper = getBuiltIn(PROMISE); + +// statics +$({ target: PROMISE, stat: true, forced: FORCED }, { + // `Promise.reject` method + // https://tc39.es/ecma262/#sec-promise.reject + reject: function reject(r) { + var capability = newPromiseCapability(this); + call(capability.reject, undefined, r); + return capability.promise; + } +}); + +$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, { + // `Promise.resolve` method + // https://tc39.es/ecma262/#sec-promise.resolve + resolve: function resolve(x) { + return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x); + } +}); + +$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { + // `Promise.all` method + // https://tc39.es/ecma262/#sec-promise.all + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + remaining++; + call($promiseResolve, C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + }, + // `Promise.race` method + // https://tc39.es/ecma262/#sec-promise.race + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform(function () { + var $promiseResolve = aCallable(C.resolve); + iterate(iterable, function (promise) { + call($promiseResolve, C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + + +/***/ }), + +/***/ "../../node_modules/core-js/modules/es.string.iterator.js": +/*!****************************************************************!*\ + !*** ../../node_modules/core-js/modules/es.string.iterator.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var charAt = __webpack_require__(/*! ../internals/string-multibyte */ "../../node_modules/core-js/internals/string-multibyte.js").charAt; +var toString = __webpack_require__(/*! ../internals/to-string */ "../../node_modules/core-js/internals/to-string.js"); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "../../node_modules/core-js/internals/internal-state.js"); +var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ "../../node_modules/core-js/internals/define-iterator.js"); + +var STRING_ITERATOR = 'String Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + +// `String.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-string.prototype-@@iterator +defineIterator(String, 'String', function (iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); +// `%StringIteratorPrototype%.next` method +// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next +}, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { value: undefined, done: true }; + point = charAt(string, index); + state.index += point.length; + return { value: point, done: false }; +}); + + +/***/ }), + +/***/ "../../node_modules/guid/guid.js": +/*!***************************************!*\ + !*** ../../node_modules/guid/guid.js ***! + \***************************************/ +/***/ ((module) => { + +(function () { + var validator = new RegExp("^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$", "i"); + + function gen(count) { + var out = ""; + for (var i=0; i { + +var v1 = __webpack_require__(/*! ./v1 */ "../../node_modules/uuid/v1.js"); +var v4 = __webpack_require__(/*! ./v4 */ "../../node_modules/uuid/v4.js"); + +var uuid = v4; +uuid.v1 = v1; +uuid.v4 = v4; + +module.exports = uuid; + + +/***/ }), + +/***/ "../../node_modules/uuid/lib/bytesToUuid.js": +/*!**************************************************!*\ + !*** ../../node_modules/uuid/lib/bytesToUuid.js ***! + \**************************************************/ +/***/ ((module) => { + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +var byteToHex = []; +for (var i = 0; i < 256; ++i) { + byteToHex[i] = (i + 0x100).toString(16).substr(1); +} + +function bytesToUuid(buf, offset) { + var i = offset || 0; + var bth = byteToHex; + // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 + return ([ + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]] + ]).join(''); +} + +module.exports = bytesToUuid; + + +/***/ }), + +/***/ "../../node_modules/uuid/lib/rng-browser.js": +/*!**************************************************!*\ + !*** ../../node_modules/uuid/lib/rng-browser.js ***! + \**************************************************/ +/***/ ((module) => { + +// Unique ID creation requires a high quality random # generator. In the +// browser this is a little complicated due to unknown quality of Math.random() +// and inconsistent support for the `crypto` API. We do the best we can via +// feature-detection + +// getRandomValues needs to be invoked in a context where "this" is a Crypto +// implementation. Also, find the complete implementation of crypto on IE11. +var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) || + (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto)); + +if (getRandomValues) { + // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto + var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef + + module.exports = function whatwgRNG() { + getRandomValues(rnds8); + return rnds8; + }; +} else { + // Math.random()-based (RNG) + // + // If all else fails, use Math.random(). It's fast, but is of unspecified + // quality. + var rnds = new Array(16); + + module.exports = function mathRNG() { + for (var i = 0, r; i < 16; i++) { + if ((i & 0x03) === 0) r = Math.random() * 0x100000000; + rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; + } + + return rnds; + }; +} + + +/***/ }), + +/***/ "../../node_modules/uuid/v1.js": +/*!*************************************!*\ + !*** ../../node_modules/uuid/v1.js ***! + \*************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var rng = __webpack_require__(/*! ./lib/rng */ "../../node_modules/uuid/lib/rng-browser.js"); +var bytesToUuid = __webpack_require__(/*! ./lib/bytesToUuid */ "../../node_modules/uuid/lib/bytesToUuid.js"); + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +var _nodeId; +var _clockseq; + +// Previous uuid creation time +var _lastMSecs = 0; +var _lastNSecs = 0; + +// See https://github.com/uuidjs/uuid for API details +function v1(options, buf, offset) { + var i = buf && offset || 0; + var b = buf || []; + + options = options || {}; + var node = options.node || _nodeId; + var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; + + // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + if (node == null || clockseq == null) { + var seedBytes = rng(); + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [ + seedBytes[0] | 0x01, + seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5] + ]; + } + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } + + // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); + + // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; + + // Time since last uuid creation (in msecs) + var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; + + // Per 4.2.1.2, Bump clockseq on clock regression + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } + + // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } + + // Per 4.2.1.2 Throw error if too many uuids are requested + if (nsecs >= 10000) { + throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; + + // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + msecs += 12219292800000; + + // `time_low` + var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; + + // `time_mid` + var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; + + // `time_high_and_version` + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + b[i++] = tmh >>> 16 & 0xff; + + // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + b[i++] = clockseq >>> 8 | 0x80; + + // `clock_seq_low` + b[i++] = clockseq & 0xff; + + // `node` + for (var n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf ? buf : bytesToUuid(b); +} + +module.exports = v1; + + +/***/ }), + +/***/ "../../node_modules/uuid/v4.js": +/*!*************************************!*\ + !*** ../../node_modules/uuid/v4.js ***! + \*************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var rng = __webpack_require__(/*! ./lib/rng */ "../../node_modules/uuid/lib/rng-browser.js"); +var bytesToUuid = __webpack_require__(/*! ./lib/bytesToUuid */ "../../node_modules/uuid/lib/bytesToUuid.js"); + +function v4(options, buf, offset) { + var i = buf && offset || 0; + + if (typeof(options) == 'string') { + buf = options === 'binary' ? new Array(16) : null; + options = null; + } + options = options || {}; + + var rnds = options.random || (options.rng || rng)(); + + // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + rnds[6] = (rnds[6] & 0x0f) | 0x40; + rnds[8] = (rnds[8] & 0x3f) | 0x80; + + // Copy bytes to buffer, if provided + if (buf) { + for (var ii = 0; ii < 16; ++ii) { + buf[i + ii] = rnds[ii]; + } + } + + return buf || bytesToUuid(rnds); +} + +module.exports = v4; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Events/DashboardLayoutChangedEvent.js": +/*!*********************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Events/DashboardLayoutChangedEvent.js ***! + \*********************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauEvent_1 = __webpack_require__(/*! ./TableauEvent */ "./lib/src/ExtensionsApi/Events/TableauEvent.js"); +var DashboardLayoutChangedEvent = /** @class */ (function (_super) { + __extends(DashboardLayoutChangedEvent, _super); + function DashboardLayoutChangedEvent(_dashboardLayoutChangeDetails) { + var _this = _super.call(this, Contract.TableauEventType.DashboardLayoutChanged) || this; + _this._dashboardLayoutChangeDetails = _dashboardLayoutChangeDetails; + return _this; + } + Object.defineProperty(DashboardLayoutChangedEvent.prototype, "dashboardLayoutChangeDetails", { + get: function () { + return this._dashboardLayoutChangeDetails; + }, + enumerable: true, + configurable: true + }); + return DashboardLayoutChangedEvent; +}(TableauEvent_1.TableauEvent)); +exports.DashboardLayoutChangedEvent = DashboardLayoutChangedEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Events/FilterChangedEvent.js": +/*!************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Events/FilterChangedEvent.js ***! + \************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var TableauWorksheetEvent_1 = __webpack_require__(/*! ./TableauWorksheetEvent */ "./lib/src/ExtensionsApi/Events/TableauWorksheetEvent.js"); +var FilterChangedEvent = /** @class */ (function (_super) { + __extends(FilterChangedEvent, _super); + function FilterChangedEvent(worksheet, _fieldName, _fieldId) { + var _this = _super.call(this, api_external_contract_js_1.TableauEventType.FilterChanged, worksheet) || this; + _this._fieldName = _fieldName; + _this._fieldId = _fieldId; + return _this; + } + Object.defineProperty(FilterChangedEvent.prototype, "fieldName", { + get: function () { + return this._fieldName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FilterChangedEvent.prototype, "fieldId", { + get: function () { + return this._fieldId; + }, + enumerable: true, + configurable: true + }); + FilterChangedEvent.prototype.getFilterAsync = function () { + var _this = this; + return this._worksheet.getFiltersAsync().then(function (filters) { + // TODO: Filtering of the filters should eventually be done platform side. + var eventedFilter = _this.fieldId + ? filters.find(function (filter) { return filter.fieldId === _this.fieldId; }, _this) + : filters.find(function (filter) { return filter.fieldName === _this.fieldName; }, _this); + if (!eventedFilter) { + // We shouldn't hit this unless the filter was removed from the worksheet + // after the event was raised. + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.MissingFilter, "cannot find filter: " + _this._fieldName); + } + return eventedFilter; + }); + }; + return FilterChangedEvent; +}(TableauWorksheetEvent_1.TableauWorksheetEvent)); +exports.FilterChangedEvent = FilterChangedEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Events/MarksSelectedEvent.js": +/*!************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Events/MarksSelectedEvent.js ***! + \************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauWorksheetEvent_1 = __webpack_require__(/*! ./TableauWorksheetEvent */ "./lib/src/ExtensionsApi/Events/TableauWorksheetEvent.js"); +var MarksSelectedEvent = /** @class */ (function (_super) { + __extends(MarksSelectedEvent, _super); + function MarksSelectedEvent(worksheet) { + return _super.call(this, api_external_contract_js_1.TableauEventType.MarkSelectionChanged, worksheet) || this; + } + MarksSelectedEvent.prototype.getMarksAsync = function () { + return this.worksheet.getSelectedMarksAsync(); + }; + return MarksSelectedEvent; +}(TableauWorksheetEvent_1.TableauWorksheetEvent)); +exports.MarksSelectedEvent = MarksSelectedEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Events/ParameterChangedEvent.js": +/*!***************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Events/ParameterChangedEvent.js ***! + \***************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var Parameter_1 = __webpack_require__(/*! ../Models/Parameter */ "./lib/src/ExtensionsApi/Models/Parameter.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var TableauSheetEvent_1 = __webpack_require__(/*! ./TableauSheetEvent */ "./lib/src/ExtensionsApi/Events/TableauSheetEvent.js"); +var ParameterChangedEvent = /** @class */ (function (_super) { + __extends(ParameterChangedEvent, _super); + function ParameterChangedEvent(_globalFieldName, sheet) { + var _this = _super.call(this, api_external_contract_js_1.TableauEventType.ParameterChanged, sheet) || this; + _this._globalFieldName = _globalFieldName; + return _this; + } + ParameterChangedEvent.prototype.getParameterAsync = function () { + var _this = this; + // Call down to our service to get the parameter back via its field name + var service = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("parameters-service" /* Parameters */); + return service.findParameterByGlobalFieldNameAsync(this._globalFieldName).then(function (parameterImpl) { + if (parameterImpl === undefined) { + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.MissingParameter, "Cannot find parameter: " + _this._globalFieldName); + } + return new Parameter_1.Parameter(parameterImpl, _this.sheet); + }); + }; + return ParameterChangedEvent; +}(TableauSheetEvent_1.TableauSheetEvent)); +exports.ParameterChangedEvent = ParameterChangedEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Events/TableauEvent.js": +/*!******************************************************!*\ + !*** ./lib/src/ExtensionsApi/Events/TableauEvent.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var TableauEvent = /** @class */ (function () { + function TableauEvent(type) { + this._type = type; + } + Object.defineProperty(TableauEvent.prototype, "type", { + get: function () { + return this._type; + }, + enumerable: true, + configurable: true + }); + return TableauEvent; +}()); +exports.TableauEvent = TableauEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Events/TableauSheetEvent.js": +/*!***********************************************************!*\ + !*** ./lib/src/ExtensionsApi/Events/TableauSheetEvent.js ***! + \***********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var TableauEvent_1 = __webpack_require__(/*! ./TableauEvent */ "./lib/src/ExtensionsApi/Events/TableauEvent.js"); +var TableauSheetEvent = /** @class */ (function (_super) { + __extends(TableauSheetEvent, _super); + function TableauSheetEvent(type, sheet) { + var _this = _super.call(this, type) || this; + _this._sheet = sheet; + return _this; + } + Object.defineProperty(TableauSheetEvent.prototype, "sheet", { + get: function () { + return this._sheet; + }, + enumerable: true, + configurable: true + }); + return TableauSheetEvent; +}(TableauEvent_1.TableauEvent)); +exports.TableauSheetEvent = TableauSheetEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Events/TableauWorksheetEvent.js": +/*!***************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Events/TableauWorksheetEvent.js ***! + \***************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var TableauSheetEvent_1 = __webpack_require__(/*! ./TableauSheetEvent */ "./lib/src/ExtensionsApi/Events/TableauSheetEvent.js"); +var TableauWorksheetEvent = /** @class */ (function (_super) { + __extends(TableauWorksheetEvent, _super); + function TableauWorksheetEvent(type, _worksheet) { + var _this = _super.call(this, type, _worksheet) || this; + _this._worksheet = _worksheet; + return _this; + } + Object.defineProperty(TableauWorksheetEvent.prototype, "worksheet", { + get: function () { + return this._worksheet; + }, + enumerable: true, + configurable: true + }); + return TableauWorksheetEvent; +}(TableauSheetEvent_1.TableauSheetEvent)); +exports.TableauWorksheetEvent = TableauWorksheetEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Events/WorkbookFormattingChangedEvent.js": +/*!************************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Events/WorkbookFormattingChangedEvent.js ***! + \************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauEvent_1 = __webpack_require__(/*! ./TableauEvent */ "./lib/src/ExtensionsApi/Events/TableauEvent.js"); +var WorkbookFormattingChangedEvent = /** @class */ (function (_super) { + __extends(WorkbookFormattingChangedEvent, _super); + function WorkbookFormattingChangedEvent(_formatting) { + var _this = _super.call(this, Contract.TableauEventType.WorkbookFormattingChanged) || this; + _this._formatting = _formatting; + return _this; + } + Object.defineProperty(WorkbookFormattingChangedEvent.prototype, "formatting", { + get: function () { + return this._formatting; + }, + enumerable: true, + configurable: true + }); + return WorkbookFormattingChangedEvent; +}(TableauEvent_1.TableauEvent)); +exports.WorkbookFormattingChangedEvent = WorkbookFormattingChangedEvent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/BentonSansFontNameConstants.js": +/*!*******************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/BentonSansFontNameConstants.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BentonSansFontFamilyName = 'Benton Sans'; +exports.BentonSansLowDPIFontFamilyName = 'Benton Sans Low-DPI'; +exports.BentonSansBookFontFaceName = 'Benton Sans Book'; +exports.BentonSansBookItalicFontFaceName = 'Benton Sans Book Italic'; +exports.BentonSansSemiDemiFontFaceName = 'Benton Sans SemiDemi'; +exports.BentonSansSemiDemiItalicFontFaceName = 'Benton Sans SemiDemi Italic'; +exports.BentonSansLightFontFaceName = 'Benton Sans Light'; +exports.BentonSansMediumFontFaceName = 'Benton Sans Medium'; +exports.SupportedBentonSansFontFaces = [ + exports.BentonSansBookFontFaceName, + exports.BentonSansBookItalicFontFaceName, + exports.BentonSansSemiDemiFontFaceName, + exports.BentonSansSemiDemiItalicFontFaceName, + exports.BentonSansLightFontFaceName, + exports.BentonSansMediumFontFaceName, +]; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/ConnectedServer.js": +/*!*******************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/ConnectedServer.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ConnectedServer = /** @class */ (function () { + function ConnectedServer(_userId, _siteId, _workbookId) { + this._userId = _userId; + this._siteId = _siteId; + this._workbookId = _workbookId; + } + Object.defineProperty(ConnectedServer.prototype, "userId", { + get: function () { + return this._userId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectedServer.prototype, "siteId", { + get: function () { + return this._siteId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectedServer.prototype, "workbookId", { + get: function () { + return this._workbookId; + }, + enumerable: true, + configurable: true + }); + return ConnectedServer; +}()); +exports.ConnectedServer = ConnectedServer; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/ExtensionWorkbookImpl.js": +/*!*************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/ExtensionWorkbookImpl.js ***! + \*************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var ExtensionWorkbookImpl = /** @class */ (function (_super) { + __extends(ExtensionWorkbookImpl, _super); + function ExtensionWorkbookImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + ExtensionWorkbookImpl.prototype.getAllDataSourcesAsync = function () { + var _this = this; + var service = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("data-source-service" /* DataSourceService */); + return service.getAllDataSourcesAsync().then(function (result) { + var dataSchema = result; + var dataSources = []; + // Loop through all data sources and add them. + Object.values(dataSchema.dataSources).forEach(function (ds) { + dataSources.push(_this.createDataSourceFromInfo(ds)); + }); + return dataSources; + }); + }; + ExtensionWorkbookImpl.prototype.createDataSourceFromInfo = function (dataSourceInfo) { + var dataSourceImpl = new api_shared_js_1.DataSourceImpl(dataSourceInfo, ServiceRegistryUtil_1.ExtensionsRegistryId); + var dataSource = new api_shared_js_1.DataSource(dataSourceImpl); + dataSourceImpl.initializeWithPublicInterfaces(dataSource); + return dataSource; + }; + return ExtensionWorkbookImpl; +}(api_shared_js_1.WorkbookImpl)); +exports.ExtensionWorkbookImpl = ExtensionWorkbookImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/ExtensionsImpl.js": +/*!******************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/ExtensionsImpl.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __spreadArrays = (this && this.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var Dashboard_1 = __webpack_require__(/*! ../Models/Dashboard */ "./lib/src/ExtensionsApi/Models/Dashboard.js"); +var Workbook_1 = __webpack_require__(/*! ../Models/Workbook */ "./lib/src/ExtensionsApi/Models/Workbook.js"); +var DashboardContent_1 = __webpack_require__(/*! ../Namespaces/DashboardContent */ "./lib/src/ExtensionsApi/Namespaces/DashboardContent.js"); +var Environment_1 = __webpack_require__(/*! ../Namespaces/Environment */ "./lib/src/ExtensionsApi/Namespaces/Environment.js"); +var Settings_1 = __webpack_require__(/*! ../Namespaces/Settings */ "./lib/src/ExtensionsApi/Namespaces/Settings.js"); +var UI_1 = __webpack_require__(/*! ../Namespaces/UI */ "./lib/src/ExtensionsApi/Namespaces/UI.js"); +var RegisterAllExtensionsServices_1 = __webpack_require__(/*! ../Services/RegisterAllExtensionsServices */ "./lib/src/ExtensionsApi/Services/RegisterAllExtensionsServices.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var BentonSansFontNameConstants_1 = __webpack_require__(/*! ./BentonSansFontNameConstants */ "./lib/src/ExtensionsApi/Impl/BentonSansFontNameConstants.js"); +var ExtensionWorkbookImpl_1 = __webpack_require__(/*! ./ExtensionWorkbookImpl */ "./lib/src/ExtensionsApi/Impl/ExtensionWorkbookImpl.js"); +var LegacyInternalApiDispatcherHolder_1 = __webpack_require__(/*! ./LegacyInternalApiDispatcherHolder */ "./lib/src/ExtensionsApi/Impl/LegacyInternalApiDispatcherHolder.js"); +var SettingsImpl_1 = __webpack_require__(/*! ./SettingsImpl */ "./lib/src/ExtensionsApi/Impl/SettingsImpl.js"); +var TableauBookFontNameConstants_1 = __webpack_require__(/*! ./TableauBookFontNameConstants */ "./lib/src/ExtensionsApi/Impl/TableauBookFontNameConstants.js"); +var UIImpl_1 = __webpack_require__(/*! ./UIImpl */ "./lib/src/ExtensionsApi/Impl/UIImpl.js"); +var ExtensionsImpl = /** @class */ (function () { + function ExtensionsImpl() { + } + ExtensionsImpl.prototype.initializeAsync = function (isExtensionDialog, contextMenuCallbacks) { + var _this = this; + if (!this._initializationPromise) { + this._initializationPromise = new Promise(function (resolve, reject) { + var _a; + var initOptions = { isAlpha: api_shared_js_1.ApiVersion.Instance.isAlpha }; + // First thing we want to do is check to see if there is a desktop dispatcher already registered for us + if (LegacyInternalApiDispatcherHolder_1.LegacyInternalApiDispatcherHolder.hasDesktopApiDispatcherPromise(initOptions)) { + // Running in a pre-2019.3 desktop, use our legacy dispatcher promise + var desktopDispatcherPromise = LegacyInternalApiDispatcherHolder_1.LegacyInternalApiDispatcherHolder.getDesktopDispatcherPromise(initOptions); + (_a = desktopDispatcherPromise) === null || _a === void 0 ? void 0 : _a.then(function (dispatcherFactory) { return _this.onDispatcherReceived(dispatcherFactory, isExtensionDialog, contextMenuCallbacks); }).then(function (openPayload) { + resolve(openPayload); + }).catch(function (error) { + reject(error); + }); + } + else { + // We must be running in server, so we should try to kick of the server dispatcher bootstrapping + var onDispatcherReceivedCallback_1 = _this.onDispatcherReceived.bind(_this); + api_shared_js_1.doCrossFrameBootstrap(window, api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION, initOptions) + .then(function (factory) { + return onDispatcherReceivedCallback_1(factory, isExtensionDialog, contextMenuCallbacks); + }) + .then(function (openPayload) { + resolve(openPayload); + }) + .catch(function (error) { + reject(error); + }); + } + }); + } + return this._initializationPromise; + }; + ExtensionsImpl.prototype.createVizImageAsync = function (inputSpec) { + var vizService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("viz-service" /* Viz */); + return vizService.createVizImageAsync(inputSpec); + }; + ExtensionsImpl.prototype.setClickThroughAsync = function (clickThroughEnabled) { + var uiService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("UIService" /* UIService */); + return uiService.setClickThroughAsync(clickThroughEnabled, this.extensionZoneId); + }; + ExtensionsImpl.prototype.onDispatcherReceived = function (dispatcherFactory, isExtensionDialog, contextMenuFunctions) { + var _this = this; + var dispatcher = dispatcherFactory(api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION); + // Call to register all the services which will use the newly initialized dispatcher + RegisterAllExtensionsServices_1.registerInitializationExtensionsServices(dispatcher); + // Get the initialization service and initialize this extension + var initializationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("InitializationService" /* InitializationService */); + var callbackMapKeys = contextMenuFunctions ? Object.keys(contextMenuFunctions) : []; + return initializationService.initializeDashboardExtensionsAsync(isExtensionDialog, callbackMapKeys).then(function (result) { + if (!result.extensionInstance.locator.dashboardPath) { + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Unexpected error during initialization.'); + } + // If we receive an invalid plaform version, this means that platform is runnning 1.4 or 2.1 and + // doesn't pass the platform version to external. In this case we assume the platform version to be 1.9 + var platformVersion = result.extensionEnvironment.platformVersion + ? result.extensionEnvironment.platformVersion + : { major: 1, minor: 9, fix: 0 }; + // Wrap our existing dispatcher in a dispatcher that can downgrade/upgrade for an older platform. + if (api_shared_js_1.VersionedExternalApiDispatcher.needsVersionConverter(platformVersion)) { + dispatcher = new api_shared_js_1.VersionedExternalApiDispatcher(dispatcher, platformVersion); + } + // Registration of services must happen before initializing content and environment + // Extensions doesn't need to pass in a registryId. By default, the service registry instance is associated with registryId=0. + api_shared_js_1.registerAllSharedServices(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId, platformVersion); + RegisterAllExtensionsServices_1.registerAllExtensionsServices(dispatcher); + _this.dashboardContent = _this.initializeDashboardContent(result.extensionDashboardInfo, result.extensionInstance.locator.dashboardPath); + _this.environment = new Environment_1.Environment(result.extensionEnvironment); + _this.settings = _this.initializeSettings(result.extensionSettingsInfo); + _this.ui = new UI_1.UI(new UIImpl_1.UIImpl()); + _this.workbook = new Workbook_1.Workbook(new ExtensionWorkbookImpl_1.ExtensionWorkbookImpl()); + _this.extensionZoneId = result.extensionDashboardInfo.extensionZoneId; + if (result.extensionEnvironment.workbookFormatting) { + _this.initializeTableauFonts(dispatcher, result.extensionEnvironment.workbookFormatting); + _this.applyAllFormatting(result.extensionEnvironment.workbookFormatting); + } + // After initialization has completed, setup listeners for the callback functions that + // are meant to be triggered whenever a context menu item is clicked. + _this.initializeContextMenuCallbacks(contextMenuFunctions); + // Also set up listeners for ExtensionStylesChangedEvent + _this.initializeWorkbookFormattingChangedEventCallback(dispatcher); + // In the normal initialization case, this will be an empty string. When returning from initializeAsync to the + // developer, we just ingore that string. In the case of initializing from an extension dialog, this string + // is an optional payload sent from the parent extension. + return result.extensionDialogPayload; + }); + }; + ExtensionsImpl.prototype.applyAllFormatting = function (formattingModel) { + var _this = this; + if (!this._styleElement) { + this._styleElement = document.createElement('style'); + this._styleElement.id = 'Tableau-Extension-Formatting'; + document.head.appendChild(this._styleElement); + } + if (!this._styleElement.sheet || !formattingModel) { + return; + } + var stylesheet = this._styleElement.sheet; + while (stylesheet.cssRules.length > 0) { + stylesheet.deleteRule(stylesheet.cssRules.length - 1); + } + formattingModel.formattingSheets.map(function (currentFormattingSheet) { + _this.applyFormattingSheetToStyleSheet(currentFormattingSheet, stylesheet); + }); + }; + ExtensionsImpl.prototype.applyFormattingSheetToStyleSheet = function (currentFormattingSheet, stylesheet) { + var styleInfo = ''; + var cssProperties = currentFormattingSheet.cssProperties; + if (cssProperties.fontFamily) { + styleInfo += 'font-family: ' + cssProperties.fontFamily.toString() + '; '; + } + if (cssProperties.fontSize) { + styleInfo += 'font-size: ' + cssProperties.fontSize.toString() + '; '; + } + if (cssProperties.fontWeight) { + styleInfo += 'font-weight: ' + cssProperties.fontWeight.toString() + '; '; + } + if (cssProperties.fontStyle) { + styleInfo += 'font-style: ' + cssProperties.fontStyle.toString() + '; '; + } + if (cssProperties.textDecoration) { + styleInfo += 'text-decoration: ' + cssProperties.textDecoration.toString() + '; '; + } + if (cssProperties.color) { + styleInfo += 'color: ' + cssProperties.color + '; '; + } + var selector = '.' + currentFormattingSheet.classNameKey; + var rule = selector + ' { ' + styleInfo + ' }'; + stylesheet.insertRule(rule, stylesheet.cssRules.length); + }; + ExtensionsImpl.prototype.initializeWorkbookFormattingChangedEventCallback = function (dispatcher) { + var _this = this; + var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + // Unregister function not used since these notifications should be + // observed for the full lifetime of the extension. + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.WorkbookFormattingChanged, function () { return true; }, function (eventFormatting) { + if (eventFormatting) { + _this.initializeTableauFonts(dispatcher, eventFormatting); + _this.applyAllFormatting(eventFormatting); + } + }); + }; + ExtensionsImpl.prototype.initializeTableauFonts = function (dispatcher, workbookFormatting) { + var _a; + var _this = this; + var fontNames = __spreadArrays(BentonSansFontNameConstants_1.SupportedBentonSansFontFaces, TableauBookFontNameConstants_1.SupportedTableauFontFaces); + workbookFormatting.formattingSheets.forEach(function (formattingSheet) { + if (formattingSheet.cssProperties.fontFamily) { + fontNames.push(formattingSheet.cssProperties.fontFamily); + } + }); + if (fontNames.length > 0) { + var parameters = (_a = {}, _a[api_internal_contract_js_1.ParameterId.FontNameListItems] = fontNames, _a); + dispatcher + .execute(api_internal_contract_js_1.VerbId.GetFonts, parameters) + .then(function (response) { + _this.loadFonts(response.result); + }) + .catch(); + } + }; + ExtensionsImpl.prototype.loadFonts = function (fonts) { + var _this = this; + fonts.forEach(function (fontNameAndInfo) { + if (TableauBookFontNameConstants_1.SupportedTableauFontFaces.includes(fontNameAndInfo.fontName)) { + _this.loadTableauFonts(fontNameAndInfo); + } + else if (BentonSansFontNameConstants_1.SupportedBentonSansFontFaces.includes(fontNameAndInfo.fontName)) { + _this.loadBentonSansFonts(fontNameAndInfo); + } + else { + document.fonts.add(new FontFace(fontNameAndInfo.fontName, fontNameAndInfo.fontBinaryInfo)); + } + }); + }; + ExtensionsImpl.prototype.initializeDashboardContent = function (info, sheetPath) { + // sheets are always active for Extensions + var sheetInfoImpl = new api_shared_js_1.SheetInfoImpl(info.name, api_external_contract_js_1.SheetType.Dashboard, { width: info.size.w, height: info.size.h }, undefined, true); + var dashboardImpl = new api_shared_js_1.DashboardImpl(sheetInfoImpl, info.zones, sheetPath, ServiceRegistryUtil_1.ExtensionsRegistryId, null); + var dashboard = new Dashboard_1.Dashboard(dashboardImpl); + return new DashboardContent_1.DashboardContent(dashboard); + }; + ExtensionsImpl.prototype.initializeSettings = function (settingsInfo) { + var settingsImpl = new SettingsImpl_1.SettingsImpl(settingsInfo); + return new Settings_1.Settings(settingsImpl); + }; + ExtensionsImpl.prototype.initializeContextMenuCallbacks = function (contextMenuFunctions) { + var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + // Unregister function not used since these notifications should be + // observed for the full lifetime of the extension. + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ContextMenuClick, function () { + // Let through any context menu event, these are already filtered on api-core + // based on the extension locator. + return true; + }, function (event) { + // Execute the function associated with this context menu ID + if (contextMenuFunctions) { + if (!contextMenuFunctions[event.id]) { + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "Received unexpected context menu Id from event: " + event.id); + } + contextMenuFunctions[event.id](); + } + }); + }; + ExtensionsImpl.prototype.loadTableauFonts = function (fontNameAndInfo) { + switch (fontNameAndInfo.fontName) { + case TableauBookFontNameConstants_1.TableauBookFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBookFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + break; + case TableauBookFontNameConstants_1.TableauLightFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauLightFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + break; + case TableauBookFontNameConstants_1.TableauRegularFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauRegularFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + break; + case TableauBookFontNameConstants_1.TableauSemiBoldFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauSemiboldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauRegularFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + break; + case TableauBookFontNameConstants_1.TableauBoldFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBoldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBoldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauMediumFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauSemiboldFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + break; + case TableauBookFontNameConstants_1.TableauMediumFontFaceName: + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauMediumFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauLightFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + document.fonts.add(new FontFace(TableauBookFontNameConstants_1.TableauBookFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + break; + default: + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "'attempted to load unsupported font: " + fontNameAndInfo.fontName + ".'"); + } + }; + ExtensionsImpl.prototype.loadBentonSansFonts = function (fontNameAndInfo) { + switch (fontNameAndInfo.fontName) { + case BentonSansFontNameConstants_1.BentonSansBookFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: '100', style: 'normal' })); + break; + case BentonSansFontNameConstants_1.BentonSansLightFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: '100', style: 'normal' })); + break; + case BentonSansFontNameConstants_1.BentonSansMediumFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'bold', style: 'normal' })); + break; + case BentonSansFontNameConstants_1.BentonSansSemiDemiFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { weight: 'normal', style: 'normal' })); + break; + case BentonSansFontNameConstants_1.BentonSansBookItalicFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansFontFamilyName, fontNameAndInfo.fontBinaryInfo, { style: 'italic' })); + break; + case BentonSansFontNameConstants_1.BentonSansSemiDemiItalicFontFaceName: + document.fonts.add(new FontFace(BentonSansFontNameConstants_1.BentonSansLowDPIFontFamilyName, fontNameAndInfo.fontBinaryInfo, { style: 'italic' })); + break; + default: + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "'attempted to load unsupported font: " + fontNameAndInfo.fontName + ".'"); + } + }; + return ExtensionsImpl; +}()); +exports.ExtensionsImpl = ExtensionsImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/LegacyInternalApiDispatcherHolder.js": +/*!*************************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/LegacyInternalApiDispatcherHolder.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +/** + * LegacyInternalApiDispatcherHolder has been moved (and renamed) from api-internal-contract. + * It supports running a newer external library against a pre 2019.3 desktop. + * Starting in 2019.3, we have a merged bootstrap style for both desktop and server. + * In addition, the alpha checking that is happening here is not necessary in external-api-js + * after 2019.3 because that checking happens in api-platform-js (ApiDispatcherTest.ts) + * TFSID: 1091561 tracks an improvement to this system to make it less complex and tie it directly to + * tableau beta release versions. + * @deprecated + */ +// eslint-disable-next-line @typescript-eslint/no-namespace +var LegacyInternalApiDispatcherHolder; +(function (LegacyInternalApiDispatcherHolder) { + /** + * @param options + */ + function getDesktopDispatcherPromise(options) { + var _a; + if ((!options || typeof options.isAlpha === 'undefined') && !window.__warningIssued) { + // tslint:disable-next-line:no-console + console.warn('This is a beta version of the Extensions API. Please upgrade to an official release.'); + window.__warningIssued = true; + } + else if (((_a = options) === null || _a === void 0 ? void 0 : _a.isAlpha) && window.__platformIsOfficialRelease) { + window.__tableauDesktopDispatcher + .then(function (dispatcherFactory) { + var dispatcher = dispatcherFactory(api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION); + dispatcher.execute(api_internal_contract_js_1.VerbId.BlockExtension, {}).catch(); + }) + .catch(); + } + // this will be undefined if promise is rejected or throws + return window.__tableauDesktopDispatcher; + } + LegacyInternalApiDispatcherHolder.getDesktopDispatcherPromise = getDesktopDispatcherPromise; + /** + * @param options + */ + function hasDesktopApiDispatcherPromise(options) { + return !!getDesktopDispatcherPromise(options); + } + LegacyInternalApiDispatcherHolder.hasDesktopApiDispatcherPromise = hasDesktopApiDispatcherPromise; +})(LegacyInternalApiDispatcherHolder = exports.LegacyInternalApiDispatcherHolder || (exports.LegacyInternalApiDispatcherHolder = {})); + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/SettingsImpl.js": +/*!****************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/SettingsImpl.js ***! + \****************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var TableauEvent_1 = __webpack_require__(/*! ../Events/TableauEvent */ "./lib/src/ExtensionsApi/Events/TableauEvent.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var SettingsChangedEvent = /** @class */ (function (_super) { + __extends(SettingsChangedEvent, _super); + function SettingsChangedEvent(_newSettings) { + var _this = _super.call(this, Contract.TableauEventType.SettingsChanged) || this; + _this._newSettings = _newSettings; + return _this; + } + Object.defineProperty(SettingsChangedEvent.prototype, "newSettings", { + get: function () { + return this._newSettings; + }, + enumerable: true, + configurable: true + }); + return SettingsChangedEvent; +}(TableauEvent_1.TableauEvent)); +var SettingsImpl = /** @class */ (function () { + function SettingsImpl(settingsInfo) { + // Since promises can't be introspected for state, keep a variable that + // indicates a save is in progress, so that set/erase can't be called during a save. + this._saveInProgress = false; + this.initializeSettings(settingsInfo); + } + SettingsImpl.prototype.erase = function (key) { + api_shared_js_1.ErrorHelpers.verifyParameter(key, 'key'); + // Only make a modification if we have the key already + if (this._currentSettings[key]) { + this.verifySettingsAreUnlocked(); + delete this._currentSettings[key]; + this._isModified = true; + } + }; + SettingsImpl.prototype.get = function (key) { + api_shared_js_1.ErrorHelpers.verifyParameter(key, 'key'); + return this._currentSettings[key]; + }; + SettingsImpl.prototype.getAll = function () { + // Returns a mutable copy of the settings + return Object.assign({}, this._currentSettings); + }; + Object.defineProperty(SettingsImpl.prototype, "isModified", { + get: function () { + return this._isModified; + }, + enumerable: true, + configurable: true + }); + SettingsImpl.prototype.saveAsync = function () { + var _this = this; + this.verifySettingsAreUnlocked(); + // Just resolve immediately if settings are unchanged + if (!this._isModified) { + return Promise.resolve(this._currentSettings); + } + this._saveInProgress = true; + // Use the settings service to save settings to twb + var settingsService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("SettingsService" /* SettingsService */); + return settingsService.saveSettingsAsync(this._currentSettings).then(function (newSettings) { + _this._saveInProgress = false; + _this._isModified = false; + if (_this._currentSettings === undefined) { + _this._currentSettings = newSettings; + } + else { + Object.assign(_this._currentSettings, newSettings); + } + return newSettings; + }, function (reason) { + _this._saveInProgress = false; + return Promise.reject(reason); + }); + }; + SettingsImpl.prototype.set = function (key, value) { + api_shared_js_1.ErrorHelpers.verifyStringParameter(key, 'key'); // Key shouldn't be an empty string. + api_shared_js_1.ErrorHelpers.verifyParameter(value, 'value'); // Empty string value is allowed. + this.verifySettingsAreUnlocked(); + this._currentSettings[key] = value; + this._isModified = true; + }; + /** + * Initializes all events relevant to settings object. This is only a settingsUpdate event currently. + * + * @returns {Array} Collection of event managers to pass to an EventListenerManager. + */ + SettingsImpl.prototype.initializeEvents = function () { + var _this = this; + var results = new Array(); + var notificationService; + try { + notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + } + catch (e) { + // If we don't have this service registered, just return + return results; + } + var settingsChangedEvent = new api_shared_js_1.SingleEventManagerImpl(Contract.TableauEventType.SettingsChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.SettingsChanged, function () { return true; }, function (event) { + _this._currentSettings = event.newSettings; + settingsChangedEvent.triggerEvent(function () { return new SettingsChangedEvent(event.newSettings); }); + }); + results.push(settingsChangedEvent); + return results; + }; + SettingsImpl.prototype.initializeSettings = function (settingsInfo) { + api_shared_js_1.ErrorHelpers.verifyParameter(settingsInfo, 'settingsInfo'); + api_shared_js_1.ErrorHelpers.verifyParameter(settingsInfo.settingsValues, 'settingsInfo.SettingsValues'); + this._currentSettings = settingsInfo.settingsValues; + // Reset the isModified flag + this._isModified = false; + }; + /** + * This helper should be called before any local update to this.currentSettings. + * Checks if a current save call is still in progress and throws an error if so. + */ + SettingsImpl.prototype.verifySettingsAreUnlocked = function () { + if (this._saveInProgress) { + throw new api_shared_js_1.TableauError(Contract.ErrorCodes.SettingSaveInProgress, SettingsImpl.ASYNC_SAVE_IN_PROGRESS); + } + }; + SettingsImpl.ASYNC_SAVE_IN_PROGRESS = 'Async Save is in progress, updating settings is not allowed.'; + return SettingsImpl; +}()); +exports.SettingsImpl = SettingsImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/TableauBookFontNameConstants.js": +/*!********************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/TableauBookFontNameConstants.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TableauBookFontFamilyName = 'Tableau Book'; +exports.TableauLightFontFamilyName = 'Tableau Light'; +exports.TableauRegularFontFamilyName = 'Tableau Regular'; +exports.TableauMediumFontFamilyName = 'Tableau Medium'; +exports.TableauSemiboldFontFamilyName = 'Tableau Semibold'; +exports.TableauBoldFontFamilyName = 'Tableau Bold'; +exports.TableauBookFontFaceName = 'Tableau Book'; +exports.TableauBoldFontFaceName = 'Tableau Bold'; +exports.TableauLightFontFaceName = 'Tableau Light'; +exports.TableauMediumFontFaceName = 'Tableau Medium'; +exports.TableauRegularFontFaceName = 'Tableau Regular'; +exports.TableauSemiBoldFontFaceName = 'Tableau Semi Bold'; +exports.SupportedTableauFontFaces = [ + exports.TableauBookFontFaceName, + exports.TableauBoldFontFaceName, + exports.TableauLightFontFaceName, + exports.TableauMediumFontFaceName, + exports.TableauRegularFontFaceName, + exports.TableauSemiBoldFontFaceName, +]; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Impl/UIImpl.js": +/*!**********************************************!*\ + !*** ./lib/src/ExtensionsApi/Impl/UIImpl.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var UIImpl = /** @class */ (function () { + function UIImpl() { + } + UIImpl.prototype.displayDialogAsync = function (url, payload, options) { + var uiService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("UIService" /* UIService */); + var notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + return new Promise(function (resolve, reject) { + uiService + .displayDialogAsync(url, payload || '', options) + .then(function () { + var unregisterFn = notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ExtensionDialogUpdate, function () { + // Let through any dialog update event + return true; + }, function (event) { + if (event.isCloseEvent) { + if (event.closePayload === undefined) { + throw new api_shared_js_1.TableauError(Contract.ErrorCodes.InternalError, 'closePayload is undefined'); + } + resolve(event.closePayload); + } + else { + reject(new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.DialogClosedByUser, 'Extension dialog closed by user.')); + } + unregisterFn(); + }); + }) + .catch(function (error) { + reject(error); + }); + }); + }; + UIImpl.prototype.closeDialog = function (payload) { + var uiService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("UIService" /* UIService */); + uiService.closeDialog(payload); + }; + return UIImpl; +}()); +exports.UIImpl = UIImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/Dashboard.js": +/*!***************************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/Dashboard.js ***! + \***************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var DashboardLayoutChangedEvent_1 = __webpack_require__(/*! ../Events/DashboardLayoutChangedEvent */ "./lib/src/ExtensionsApi/Events/DashboardLayoutChangedEvent.js"); +var WorkbookFormattingChangedEvent_1 = __webpack_require__(/*! ../Events/WorkbookFormattingChangedEvent */ "./lib/src/ExtensionsApi/Events/WorkbookFormattingChangedEvent.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var DashboardObject_1 = __webpack_require__(/*! ./DashboardObject */ "./lib/src/ExtensionsApi/Models/DashboardObject.js"); +var Sheet_1 = __webpack_require__(/*! ./Sheet */ "./lib/src/ExtensionsApi/Models/Sheet.js"); +var Worksheet_1 = __webpack_require__(/*! ./Worksheet */ "./lib/src/ExtensionsApi/Models/Worksheet.js"); +var Dashboard = /** @class */ (function (_super) { + __extends(Dashboard, _super); + function Dashboard(_dashboardImpl) { + var _this = _super.call(this, _dashboardImpl) || this; + _this._dashboardImpl = _dashboardImpl; + _dashboardImpl.initializeWithPublicInterfaces(); + _this.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); }); + return _this; + } + Object.defineProperty(Dashboard.prototype, "worksheets", { + get: function () { + return this._dashboardImpl.worksheetsImpl.map(function (worksheetImpl) { + return new Worksheet_1.Worksheet(worksheetImpl); + }); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Dashboard.prototype, "objects", { + get: function () { + return this._dashboardImpl.objects.map(function (dashboardObjectImpl) { + return new DashboardObject_1.DashboardObject(dashboardObjectImpl); + }); + }, + enumerable: true, + configurable: true + }); + Dashboard.prototype.setZoneVisibilityAsync = function (zoneVisibilityMap) { + return this._dashboardImpl.setDashboardObjectVisibilityAsync(zoneVisibilityMap); + }; + Dashboard.prototype.setDashboardObjectVisibilityAsync = function (dashboardObjectVisibilityMap) { + return this._dashboardImpl.setDashboardObjectVisibilityAsync(dashboardObjectVisibilityMap); + }; + Dashboard.prototype.getDashboardObjectById = function (dashboardObjectId) { + var zone = this._dashboardImpl.getDashboardObjectById(dashboardObjectId); + return zone && new DashboardObject_1.DashboardObject(zone); + }; + Dashboard.prototype.initializeEvents = function () { + var _this = this; + var results = new Array(); + // Initializing events and registering notification service + var notificationService; + try { + notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + } + catch (e) { + // If we don't have this service registered, just return (allows unit testing without NotificationService mock) + return results; + } + var dashboardLayoutChangedEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.DashboardLayoutChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.DashboardLayoutChanged, function () { return true; }, function (event) { + var dashboardObjectChanges = _this._dashboardImpl.updateZones(event.zones); + dashboardLayoutChangedEvent.triggerEvent(function () { return new DashboardLayoutChangedEvent_1.DashboardLayoutChangedEvent(dashboardObjectChanges); }); + }); + results.push(dashboardLayoutChangedEvent); + var workbookFormattingChangedEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.WorkbookFormattingChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.WorkbookFormattingChanged, function () { return true; }, function (eventFormatting) { + workbookFormattingChangedEvent.triggerEvent(function () { return new WorkbookFormattingChangedEvent_1.WorkbookFormattingChangedEvent(eventFormatting); }); + }); + results.push(workbookFormattingChangedEvent); + return results; + }; + Dashboard.prototype.moveAndResizeDashboardObjectsAsync = function (dashboardObjectPositionAndSizeUpdateArray) { + return this._dashboardImpl.moveAndResizeDashboardObjectsAsync(dashboardObjectPositionAndSizeUpdateArray); + }; + Dashboard.prototype.replayAnimationAsync = function (replaySpeed) { + return this._dashboardImpl.replayAnimationAsync(replaySpeed); + }; + Dashboard.prototype.getFiltersAsync = function () { + return this._dashboardImpl.getFiltersAsync(); + }; + Dashboard.prototype.applyFilterAsync = function (fieldName, values, updateType, options) { + return this._dashboardImpl.applyFilterAsync(fieldName, values, updateType, options); + }; + return Dashboard; +}(Sheet_1.Sheet)); +exports.Dashboard = Dashboard; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/DashboardObject.js": +/*!*********************************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/DashboardObject.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Dashboard_1 = __webpack_require__(/*! ./Dashboard */ "./lib/src/ExtensionsApi/Models/Dashboard.js"); +var Worksheet_1 = __webpack_require__(/*! ./Worksheet */ "./lib/src/ExtensionsApi/Models/Worksheet.js"); +/** + * Implementation of the dashboard objects - the zones in a dashboard. + */ +var DashboardObject = /** @class */ (function () { + function DashboardObject(_dashboardObjectImpl) { + this._dashboardObjectImpl = _dashboardObjectImpl; + } + Object.defineProperty(DashboardObject.prototype, "dashboard", { + get: function () { + return new Dashboard_1.Dashboard(this._dashboardObjectImpl.dashboardImpl); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "type", { + get: function () { + return this._dashboardObjectImpl.type; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "position", { + get: function () { + return this._dashboardObjectImpl.position; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "size", { + get: function () { + return this._dashboardObjectImpl.size; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "worksheet", { + get: function () { + if (this._dashboardObjectImpl.worksheetImpl) { + return new Worksheet_1.Worksheet(this._dashboardObjectImpl.worksheetImpl); + } + return undefined; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "name", { + get: function () { + return this._dashboardObjectImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "isFloating", { + get: function () { + return this._dashboardObjectImpl.isFloating; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "isVisible", { + get: function () { + return this._dashboardObjectImpl.isVisible; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObject.prototype, "id", { + get: function () { + return this._dashboardObjectImpl.id; + }, + enumerable: true, + configurable: true + }); + return DashboardObject; +}()); +exports.DashboardObject = DashboardObject; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/Parameter.js": +/*!***************************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/Parameter.js ***! + \***************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var ParameterChangedEvent_1 = __webpack_require__(/*! ../Events/ParameterChangedEvent */ "./lib/src/ExtensionsApi/Events/ParameterChangedEvent.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +/** + * Implementation of the Parameter contract. Calls down to the impl + * class for almost all of the work it does. + */ +var Parameter = /** @class */ (function (_super) { + __extends(Parameter, _super); + function Parameter(parameterImpl, sheet) { + var _this = _super.call(this) || this; + _this.parameterImpl = parameterImpl; + // Initialize our event handling for this class + _this.initializeEvents(sheet).forEach(function (e) { return _this.addNewEventType(e); }); + return _this; + } + Object.defineProperty(Parameter.prototype, "name", { + get: function () { + return this.parameterImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Parameter.prototype, "currentValue", { + get: function () { + return this.parameterImpl.currentValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Parameter.prototype, "dataType", { + get: function () { + return this.parameterImpl.dataType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Parameter.prototype, "allowableValues", { + get: function () { + return this.parameterImpl.allowableValues; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Parameter.prototype, "id", { + get: function () { + return this.parameterImpl.id; + }, + enumerable: true, + configurable: true + }); + Parameter.prototype.changeValueAsync = function (newValue) { + return this.parameterImpl.changeValueAsync(newValue); + }; + /** + * Helper method which goes through and registers each event type this impl knows about + * with the NotificationService. It returns an array of SingleEventManager objects which + * can then be passed to an EventListenerManager to handle user registration / unregistration. + * + * @param sheet The sheet object which will be included with the event notifications + * @returns {Array} Collection of event managers to pass to an EventListenerManager + */ + Parameter.prototype.initializeEvents = function (sheet) { + var _this = this; + api_shared_js_1.ErrorHelpers.verifyInternalValue(sheet, 'sheet'); + var results = new Array(); + var notificationService; + try { + notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + } + catch (e) { + // If we don't have this service registered, just return + return results; + } + // Initialize all of the event managers we'll need (one for each event type) + var parameterEvent = new api_shared_js_1.SingleEventManagerImpl(Contract.TableauEventType.ParameterChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.ParameterChanged, function (model) { + var fieldName = model; + return fieldName === _this.parameterImpl.id; + }, function (fieldName) { + parameterEvent.triggerEvent(function () { return new ParameterChangedEvent_1.ParameterChangedEvent(fieldName, sheet); }); + }); + results.push(parameterEvent); + return results; + }; + return Parameter; +}(api_shared_js_1.EventListenerManager)); +exports.Parameter = Parameter; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/Sheet.js": +/*!***********************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/Sheet.js ***! + \***********************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var Parameter_1 = __webpack_require__(/*! ./Parameter */ "./lib/src/ExtensionsApi/Models/Parameter.js"); +var Sheet = /** @class */ (function (_super) { + __extends(Sheet, _super); + function Sheet(_sheetImpl) { + var _this = _super.call(this) || this; + _this._sheetImpl = _sheetImpl; + return _this; + } + Object.defineProperty(Sheet.prototype, "name", { + get: function () { + return this._sheetImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Sheet.prototype, "sheetType", { + get: function () { + return this._sheetImpl.sheetType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Sheet.prototype, "size", { + get: function () { + if (this.isValidSize(this._sheetImpl.size)) { + return this._sheetImpl.size; + } + throw new api_shared_js_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, 'Size not implemented'); + }, + enumerable: true, + configurable: true + }); + Sheet.prototype.isValidSize = function (size) { + var testSize = size; + if (testSize.width !== undefined && testSize.height !== undefined) { + return true; + } + return false; + }; + Sheet.prototype.findParameterAsync = function (parameterName) { + var _this = this; + return this._sheetImpl.findParameterAsync(parameterName).then(function (parameterImpl) { + if (parameterImpl) { + return new Promise(function (resolve) { return resolve(new Parameter_1.Parameter(parameterImpl, _this)); }); + } + else { + return new Promise(function (resolve) { return resolve(undefined); }); + } + }); + }; + Sheet.prototype.getParametersAsync = function () { + var _this = this; + return this._sheetImpl.getParametersAsync().then(function (parametersImpl) { + return parametersImpl.map(function (parameterImpl) { + return new Parameter_1.Parameter(parameterImpl, _this); + }); + }); + }; + return Sheet; +}(api_shared_js_1.EventListenerManager)); +exports.Sheet = Sheet; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/Workbook.js": +/*!**************************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/Workbook.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Workbook = /** @class */ (function () { + function Workbook(_workbookImpl) { + this._workbookImpl = _workbookImpl; + } + Workbook.prototype.getAllDataSourcesAsync = function () { + return this._workbookImpl.getAllDataSourcesAsync(); + }; + return Workbook; +}()); +exports.Workbook = Workbook; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Models/Worksheet.js": +/*!***************************************************!*\ + !*** ./lib/src/ExtensionsApi/Models/Worksheet.js ***! + \***************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var FilterChangedEvent_1 = __webpack_require__(/*! ../Events/FilterChangedEvent */ "./lib/src/ExtensionsApi/Events/FilterChangedEvent.js"); +var MarksSelectedEvent_1 = __webpack_require__(/*! ../Events/MarksSelectedEvent */ "./lib/src/ExtensionsApi/Events/MarksSelectedEvent.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ../Services/ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +var Dashboard_1 = __webpack_require__(/*! ./Dashboard */ "./lib/src/ExtensionsApi/Models/Dashboard.js"); +var Sheet_1 = __webpack_require__(/*! ./Sheet */ "./lib/src/ExtensionsApi/Models/Sheet.js"); +var Worksheet = /** @class */ (function (_super) { + __extends(Worksheet, _super); + function Worksheet(_worksheetImpl) { + var _this = _super.call(this, _worksheetImpl) || this; + _this._worksheetImpl = _worksheetImpl; + // Call to initialize events and then call down to the event listener manager to handle things + _this.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); }); + return _this; + } + Object.defineProperty(Worksheet.prototype, "parentDashboard", { + get: function () { + // This should never happen for Extensions if the DashboardImpls are created correctly + if (this._worksheetImpl.parentDashboard == null) { + throw new api_shared_js_1.TableauError(Contract.SharedErrorCodes.ImplementationError, "Parent dashboard not implemented"); + } + return new Dashboard_1.Dashboard(this._worksheetImpl.parentDashboard); + }, + enumerable: true, + configurable: true + }); + /** + * Helper method which goes through and registers each event type this impl knows about + * with the NotificationService. It returns an array of SingleEventManager objects which + * can then be passed to an EventListenerManager to handle user registration / unregistration. + * + * @param {Worksheet} worksheet The worksheet object which will be included with the event notifications + * @returns {Array} Collection of event managers to pass to an EventListenerManager + */ + Worksheet.prototype.initializeEvents = function () { + var _this = this; + var results = new Array(); + var notificationService; + try { + notificationService = api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).getService("notification-service" /* Notification */); + } + catch (e) { + // If we don't have this service registered, just return + return results; + } + // Initialize all of the event managers we'll need (one for each event type) + var marksEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.MarkSelectionChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.SelectedMarksChanged, function (model) { + var visualId = model; + return _this.visualIdsAreEqual(visualId, _this._worksheetImpl.visualId); + }, function () { return marksEvent.triggerEvent(function () { return new MarksSelectedEvent_1.MarksSelectedEvent(_this); }); }); + var filterEvent = new api_shared_js_1.SingleEventManagerImpl(api_external_contract_js_1.TableauEventType.FilterChanged); + notificationService.registerHandler(api_internal_contract_js_1.NotificationId.FilterChanged, function (model) { + var filterEventResponse = model; + return _this._worksheetImpl.visualId.worksheet === filterEventResponse.visualId.worksheet; + }, function (event) { + filterEvent.triggerEvent(function () { return new FilterChangedEvent_1.FilterChangedEvent(_this, event.fieldName, event.fieldId); }); + }); + results.push(marksEvent); + results.push(filterEvent); + // TODO - other event types + return results; + }; + Worksheet.prototype.applyFilterAsync = function (fieldName, values, updateType, options) { + return this._worksheetImpl.applyFilterAsync(fieldName, values, updateType, options); + }; + Worksheet.prototype.applyRangeFilterAsync = function (fieldName, filterOptions) { + return this._worksheetImpl.applyRangeFilterAsync(fieldName, filterOptions); + }; + Worksheet.prototype.applyHierarchicalFilterAsync = function (fieldName, values, updateType, options) { + return this._worksheetImpl.applyHierarchicalFilterAsync(fieldName, values, updateType, options); + }; + Worksheet.prototype.applyRelativeDateFilterAsync = function (fieldName, options) { + return this._worksheetImpl.applyRelativeDateFilterAsync(fieldName, options); + }; + Worksheet.prototype.clearFilterAsync = function (fieldName) { + return this._worksheetImpl.clearFilterAsync(fieldName); + }; + Worksheet.prototype.getDataSourcesAsync = function () { + return this._worksheetImpl.getDataSourcesAsync(); + }; + Worksheet.prototype.getFiltersAsync = function () { + return this._worksheetImpl.getFiltersAsync(); + }; + Worksheet.prototype.getSelectedMarksAsync = function () { + return this._worksheetImpl.getSelectedMarksAsync(); + }; + Worksheet.prototype.getHighlightedMarksAsync = function () { + return this._worksheetImpl.getHighlightedMarksAsync(); + }; + Worksheet.prototype.getSummaryDataAsync = function (options) { + return this._worksheetImpl.getSummaryDataAsync(options); + }; + Worksheet.prototype.getSummaryDataReaderAsync = function (pageRowCount, options) { + return this._worksheetImpl.getSummaryDataReaderAsync(pageRowCount, options); + }; + Worksheet.prototype.getSummaryColumnsInfoAsync = function () { + return this._worksheetImpl.getSummaryColumnsInfoAsync(); + }; + Worksheet.prototype.getUnderlyingDataAsync = function (options) { + console.warn('Worksheet.getUnderlyingDataAsync is deprecated. Please use ' + + 'Worksheet.getUnderlyingTablesAsync and Worksheet.getUnderlyingTableDataAsync'); + return this._worksheetImpl.getUnderlyingDataAsync(options); + }; + Worksheet.prototype.getUnderlyingTablesAsync = function () { + return this._worksheetImpl.getUnderlyingTablesAsync(); + }; + Worksheet.prototype.getUnderlyingTableDataAsync = function (logicalTableId, options) { + return this._worksheetImpl.getUnderlyingTableDataAsync(logicalTableId, options); + }; + Worksheet.prototype.getUnderlyingTableDataReaderAsync = function (logicalTableId, pageRowCount, options) { + return this._worksheetImpl.getUnderlyingTableDataReaderAsync(logicalTableId, pageRowCount, options); + }; + Worksheet.prototype.clearSelectedMarksAsync = function () { + return this._worksheetImpl.clearSelectedMarksAsync(); + }; + Worksheet.prototype.selectMarksByIDAsync = function (marksInfo, updateType) { + return this._worksheetImpl.selectMarksByIdAsync(marksInfo, updateType); + }; + Worksheet.prototype.selectMarksByValueAsync = function (selections, selectionUpdateType) { + return this._worksheetImpl.selectMarksByValueAsync(selections, selectionUpdateType); + }; + Worksheet.prototype.selectMarksByIdAsync = function (selections, selectionUpdateType) { + return this._worksheetImpl.selectMarksByIdAsync(selections, selectionUpdateType); + }; + Worksheet.prototype.annotateMarkAsync = function (mark, annotationText) { + return this._worksheetImpl.annotateMarkAsync(mark, annotationText); + }; + Worksheet.prototype.getAnnotationsAsync = function () { + return this._worksheetImpl.getAnnotationsAsync(); + }; + Worksheet.prototype.removeAnnotationAsync = function (annotation) { + return this._worksheetImpl.removeAnnotationAsync(annotation); + }; + Worksheet.prototype.visualIdsAreEqual = function (a, b) { + return (a && + b && + a.worksheet === b.worksheet && + a.dashboard === b.dashboard && + a.storyboard === b.storyboard && + a.storyPointID === b.storyPointID); + }; + return Worksheet; +}(Sheet_1.Sheet)); +exports.Worksheet = Worksheet; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/DashboardContent.js": +/*!**************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/DashboardContent.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of the external DashboardContent namespace. + * This does not follow the Impl pattern as DashboardContent is + * currently just a (single) property bag. + */ +var DashboardContent = /** @class */ (function () { + function DashboardContent(_dashboard) { + this._dashboard = _dashboard; + } + Object.defineProperty(DashboardContent.prototype, "dashboard", { + get: function () { + return this._dashboard; + }, + enumerable: true, + configurable: true + }); + return DashboardContent; +}()); +exports.DashboardContent = DashboardContent; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/Environment.js": +/*!*********************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/Environment.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var ConnectedServer_1 = __webpack_require__(/*! ../Impl/ConnectedServer */ "./lib/src/ExtensionsApi/Impl/ConnectedServer.js"); +var WorkbookFormattingEnvUtil_1 = __webpack_require__(/*! ./WorkbookFormattingEnvUtil */ "./lib/src/ExtensionsApi/Namespaces/WorkbookFormattingEnvUtil.js"); +/** + * Implementation of the external environment namespace. + * Environment does not follow the Impl pattern as it is + * just a property bag. + * First class extensions can get to ConnectedServer with: environment['connectedServer'] + */ +var Environment = /** @class */ (function () { + function Environment(extensionEnvironment) { + this._apiVersion = api_shared_js_1.ApiVersion.Instance && api_shared_js_1.ApiVersion.Instance.formattedValue; // maj.min.fix (no build) + this._context = api_shared_js_1.InternalToExternalEnumMappings.extensionContext.convert(extensionEnvironment.extensionContext); + this._formatting = WorkbookFormattingEnvUtil_1.WorkbookFormattingEnvUtil.convertToWorkbookFormatting(extensionEnvironment.workbookFormatting); + this._language = extensionEnvironment.extensionLanguage; + this._country = extensionEnvironment.extensionCountry; + this._locale = extensionEnvironment.extensionLocale; + this._mode = api_shared_js_1.InternalToExternalEnumMappings.extensionMode.convert(extensionEnvironment.extensionMode); + this._operatingSystem = extensionEnvironment.operatingSystem; + this._tableauVersion = extensionEnvironment.tableauVersion; + // If we have a userId, then we are a first class extension + // Add our hidden member 'connectedServer' + if (extensionEnvironment.userId) { + this.connectedServer = new ConnectedServer_1.ConnectedServer(extensionEnvironment.userId, extensionEnvironment.siteId, extensionEnvironment.workbookId); + } + } + Object.defineProperty(Environment.prototype, "apiVersion", { + get: function () { + return this._apiVersion; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "context", { + get: function () { + return this._context; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "workbookFormatting", { + get: function () { + return this._formatting; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "language", { + get: function () { + return this._language; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "country", { + get: function () { + return this._country; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "locale", { + get: function () { + return this._locale; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "mode", { + get: function () { + return this._mode; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "operatingSystem", { + get: function () { + return this._operatingSystem; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Environment.prototype, "tableauVersion", { + get: function () { + return this._tableauVersion; + }, + enumerable: true, + configurable: true + }); + return Environment; +}()); +exports.Environment = Environment; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/Extensions.js": +/*!********************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/Extensions.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of the external Extensions namespace. + */ +var Extensions = /** @class */ (function () { + function Extensions(extensionImpl) { + this.extensionImpl = extensionImpl; + this.extensionImpl = extensionImpl; + } + Object.defineProperty(Extensions.prototype, "dashboardContent", { + get: function () { + return this.extensionImpl.dashboardContent; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Extensions.prototype, "environment", { + get: function () { + return this.extensionImpl.environment; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Extensions.prototype, "settings", { + get: function () { + return this.extensionImpl.settings; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Extensions.prototype, "ui", { + get: function () { + return this.extensionImpl.ui; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Extensions.prototype, "workbook", { + get: function () { + return this.extensionImpl.workbook; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Extensions.prototype, "dashboardObjectId", { + get: function () { + return this.extensionImpl.extensionZoneId; + }, + enumerable: true, + configurable: true + }); + Extensions.prototype.initializeAsync = function (contextMenuCallbacks) { + return this.extensionImpl.initializeAsync(false, contextMenuCallbacks).then(); + }; + Extensions.prototype.initializeDialogAsync = function () { + return this.extensionImpl.initializeAsync(true); + }; + Extensions.prototype.createVizImageAsync = function (inputSpec) { + return this.extensionImpl.createVizImageAsync(inputSpec); + }; + Extensions.prototype.setClickThroughAsync = function (clickThroughEnabled) { + return this.extensionImpl.setClickThroughAsync(clickThroughEnabled); + }; + return Extensions; +}()); +exports.Extensions = Extensions; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/Settings.js": +/*!******************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/Settings.js ***! + \******************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +/** + * Implementation of the external settings namespace. + */ +var Settings = /** @class */ (function (_super) { + __extends(Settings, _super); + function Settings(_settingsImpl) { + var _this = _super.call(this) || this; + _this._settingsImpl = _settingsImpl; + // Initialize our event handling for this class + _this._settingsImpl.initializeEvents().forEach(function (e) { return _this.addNewEventType(e); }); + return _this; + } + Settings.prototype.erase = function (key) { + this._settingsImpl.erase(key); + }; + Settings.prototype.get = function (key) { + return this._settingsImpl.get(key); + }; + Settings.prototype.getAll = function () { + return this._settingsImpl.getAll(); + }; + Object.defineProperty(Settings.prototype, "isModified", { + get: function () { + return this._settingsImpl.isModified; + }, + enumerable: true, + configurable: true + }); + Settings.prototype.saveAsync = function () { + return this._settingsImpl.saveAsync(); + }; + Settings.prototype.set = function (key, value) { + this._settingsImpl.set(key, value); + }; + return Settings; +}(api_shared_js_1.EventListenerManager)); +exports.Settings = Settings; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/UI.js": +/*!************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/UI.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of the external UI namespace. + */ +var UI = /** @class */ (function () { + function UI(_impl) { + this._impl = _impl; + } + UI.prototype.displayDialogAsync = function (url, payload, options) { + return this._impl.displayDialogAsync(url, payload, options); + }; + UI.prototype.closeDialog = function (payload) { + this._impl.closeDialog(payload); + }; + return UI; +}()); +exports.UI = UI; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Namespaces/WorkbookFormattingEnvUtil.js": +/*!***********************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Namespaces/WorkbookFormattingEnvUtil.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var WorkbookFormattingEnvUtil = /** @class */ (function () { + function WorkbookFormattingEnvUtil() { + } + WorkbookFormattingEnvUtil.convertToWorkbookFormatting = function (workbookFormattingModel) { + if (!workbookFormattingModel) { + return undefined; + } + else { + var formattingMap = workbookFormattingModel.formattingSheets.map(function (currentFormattingSheet) { + var formattingSheet = { + classNameKey: api_shared_js_1.InternalToExternalEnumMappings.classNameKey.convert(currentFormattingSheet.classNameKey), + cssProperties: { + fontFamily: currentFormattingSheet.cssProperties.fontFamily, + fontSize: currentFormattingSheet.cssProperties.fontSize, + fontWeight: currentFormattingSheet.cssProperties.fontWeight, + fontStyle: currentFormattingSheet.cssProperties.fontStyle, + textDecoration: currentFormattingSheet.cssProperties.textDecoration, + color: currentFormattingSheet.cssProperties.color, + }, + }; + return formattingSheet; + }); + var result = { + formattingSheets: formattingMap, + }; + return result; + } + }; + return WorkbookFormattingEnvUtil; +}()); +exports.WorkbookFormattingEnvUtil = WorkbookFormattingEnvUtil; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Services/Impl/InitializationServiceImpl.js": +/*!**************************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Services/Impl/InitializationServiceImpl.js ***! + \**************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var InitializationServiceImpl = /** @class */ (function (_super) { + __extends(InitializationServiceImpl, _super); + function InitializationServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(InitializationServiceImpl.prototype, "serviceName", { + get: function () { + return "InitializationService" /* InitializationService */; + }, + enumerable: true, + configurable: true + }); + InitializationServiceImpl.prototype.initializeDashboardExtensionsAsync = function (isExtensionDialog, contextMenuIds) { + var _a; + var params = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'initializeDashboardExtensionsAsync', + _a[api_internal_contract_js_1.ParameterId.ExtensionContextMenuIds] = contextMenuIds, + _a[api_internal_contract_js_1.ParameterId.IsExtensionDialog] = isExtensionDialog, + _a); + return this.execute(api_internal_contract_js_1.VerbId.InitializeExtension, params).then(function (response) { + // TODO - Validate return value + var result = response.result; + return result; + }); + }; + return InitializationServiceImpl; +}(api_shared_js_1.ServiceImplBase)); +exports.InitializationServiceImpl = InitializationServiceImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Services/Impl/SettingsServiceImpl.js": +/*!********************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Services/Impl/SettingsServiceImpl.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var SettingsServiceImpl = /** @class */ (function (_super) { + __extends(SettingsServiceImpl, _super); + function SettingsServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(SettingsServiceImpl.prototype, "serviceName", { + get: function () { + return "SettingsService" /* SettingsService */; + }, + enumerable: true, + configurable: true + }); + SettingsServiceImpl.prototype.saveSettingsAsync = function (settings) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveSettingsAsync', + _a[api_internal_contract_js_1.ParameterId.SettingsValues] = settings, + _a); + return this.execute(api_internal_contract_js_1.VerbId.SaveExtensionSettings, parameters).then(function (value) { + var result = value.result; + if (!result || !result.settingsValues) { + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Unexpected error savings settings.'); + } + return result.settingsValues; + }); + }; + return SettingsServiceImpl; +}(api_shared_js_1.ServiceImplBase)); +exports.SettingsServiceImpl = SettingsServiceImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Services/Impl/UIServiceImpl.js": +/*!**************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Services/Impl/UIServiceImpl.js ***! + \**************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var DEFAULT_DIALOG_HEIGHT = 400; // in pixels +var DEFAULT_DIALOG_WIDTH = 600; // in pixels +var DEFAULT_DIALOG_STYLE = api_external_contract_js_1.DialogStyle.Window; +var UIServiceImpl = /** @class */ (function (_super) { + __extends(UIServiceImpl, _super); + function UIServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(UIServiceImpl.prototype, "serviceName", { + get: function () { + return "UIService" /* UIService */; + }, + enumerable: true, + configurable: true + }); + UIServiceImpl.prototype.displayDialogAsync = function (url, payload, options) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'displayDialogAsync', + _a[api_internal_contract_js_1.ParameterId.ExtensionDialogUrl] = url, + _a[api_internal_contract_js_1.ParameterId.ExtensionDialogPayload] = payload, + _a); + var h = options && options.height ? options.height : DEFAULT_DIALOG_HEIGHT; + var w = options && options.width ? options.width : DEFAULT_DIALOG_WIDTH; + var dialogStyle = options && options.dialogStyle ? options.dialogStyle : DEFAULT_DIALOG_STYLE; + // On the platform side, we do something reasonable regardess of whether the passed + // height and width are too large or too small. But this likely indicates a developer error, + // so we throw an error here to help with debugging. + if (h <= 0 || w <= 0) { + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'Size parameters for displayDialogAsync must be positive'); + } + parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogH] = h; + parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogW] = w; + api_shared_js_1.ErrorHelpers.verifyEnumValue(dialogStyle, api_external_contract_js_1.DialogStyle, 'DialogStyle'); + parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogStyle] = api_shared_js_1.ExternalToInternalEnumMappings.dialogStyles.convert(dialogStyle); + return this.execute(api_internal_contract_js_1.VerbId.DisplayDialog, parameters).then(function (response) { + var dialogResult = response.result; + switch (dialogResult) { + case api_internal_contract_js_1.ExtensionDialogResult.DialogAlreadyOpen: + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.DialogAlreadyOpen, 'There already exists an open dialog for this extension.'); + case api_internal_contract_js_1.ExtensionDialogResult.InvalidDomain: + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidDomainDialog, 'The url of an extension dialog must match the domain of the parent extension.'); + default: + // Success case + return; + } + }); + }; + UIServiceImpl.prototype.closeDialog = function (payload) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'closeDialog', + _a); + if (payload) { + parameters[api_internal_contract_js_1.ParameterId.ExtensionDialogPayload] = payload; + } + return this.execute(api_internal_contract_js_1.VerbId.CloseDialog, parameters).then(function () { + return; + }); + }; + UIServiceImpl.prototype.setClickThroughAsync = function (clickThroughEnabled, extensionZoneId) { + var _a; + api_shared_js_1.ErrorHelpers.verifyParameterType(clickThroughEnabled, 'boolean', 'clickThroughEnabled'); + if (extensionZoneId === undefined || extensionZoneId <= 0) { + throw new api_shared_js_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Extension Id is invalid.'); + } + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.ExtensionZoneId] = extensionZoneId, + _a[api_internal_contract_js_1.ParameterId.ClickThroughEnabled] = clickThroughEnabled, + _a); + return this.execute(api_internal_contract_js_1.VerbId.SetClickThrough, parameters).then(function () { + return; + }); + }; + return UIServiceImpl; +}(api_shared_js_1.ServiceImplBase)); +exports.UIServiceImpl = UIServiceImpl; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Services/RegisterAllExtensionsServices.js": +/*!*************************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Services/RegisterAllExtensionsServices.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +var InitializationServiceImpl_1 = __webpack_require__(/*! ./Impl/InitializationServiceImpl */ "./lib/src/ExtensionsApi/Services/Impl/InitializationServiceImpl.js"); +var SettingsServiceImpl_1 = __webpack_require__(/*! ./Impl/SettingsServiceImpl */ "./lib/src/ExtensionsApi/Services/Impl/SettingsServiceImpl.js"); +var UIServiceImpl_1 = __webpack_require__(/*! ./Impl/UIServiceImpl */ "./lib/src/ExtensionsApi/Services/Impl/UIServiceImpl.js"); +var ServiceRegistryUtil_1 = __webpack_require__(/*! ./ServiceRegistryUtil */ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js"); +function registerAllExtensionsServices(dispatcher) { + api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new SettingsServiceImpl_1.SettingsServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId)); + api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new UIServiceImpl_1.UIServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId)); +} +exports.registerAllExtensionsServices = registerAllExtensionsServices; +function registerInitializationExtensionsServices(dispatcher) { + api_shared_js_1.ApiServiceRegistry.get(ServiceRegistryUtil_1.ExtensionsRegistryId).registerService(new InitializationServiceImpl_1.InitializationServiceImpl(dispatcher, ServiceRegistryUtil_1.ExtensionsRegistryId)); +} +exports.registerInitializationExtensionsServices = registerInitializationExtensionsServices; + + +/***/ }), + +/***/ "./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js": +/*!***************************************************************!*\ + !*** ./lib/src/ExtensionsApi/Services/ServiceRegistryUtil.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ExtensionsRegistryId = 0; + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/EmbeddingApiExternalContract.js": +/*!***************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/EmbeddingApiExternalContract.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +// This file re-exports everything which is part of the extensions api public interface +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +__export(__webpack_require__(/*! ./ExternalContract/Embedding/AskDataInterfaces */ "../api-external-contract-js/lib/src/ExternalContract/Embedding/AskDataInterfaces.js")); +var Enums_1 = __webpack_require__(/*! ./ExternalContract/Embedding/Enums */ "../api-external-contract-js/lib/src/ExternalContract/Embedding/Enums.js"); +exports.ApiMenuType = Enums_1.ApiMenuType; +exports.DeviceType = Enums_1.DeviceType; +exports.EmbeddingErrorCodes = Enums_1.EmbeddingErrorCodes; +exports.SheetSizeBehavior = Enums_1.SheetSizeBehavior; +exports.TableauDialogType = Enums_1.TableauDialogType; +exports.EmbeddingTableauEventType = Enums_1.TableauEventType; +exports.Toolbar = Enums_1.Toolbar; +__export(__webpack_require__(/*! ./ExternalContract/Embedding/VizInterfaces */ "../api-external-contract-js/lib/src/ExternalContract/Embedding/VizInterfaces.js")); +__export(__webpack_require__(/*! ./ExternalContract/Embedding/WebComponentInterfaces */ "../api-external-contract-js/lib/src/ExternalContract/Embedding/WebComponentInterfaces.js")); +__export(__webpack_require__(/*! ./SharedApiExternalContract */ "../api-external-contract-js/lib/src/SharedApiExternalContract.js")); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExtensionsApiExternalContract.js": +/*!****************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExtensionsApiExternalContract.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +// This file re-exports everything which is part of the extensions api public interface +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Tableau_1 = __webpack_require__(/*! ./ExternalContract/Extensions/Namespaces/Tableau */ "../api-external-contract-js/lib/src/ExternalContract/Extensions/Namespaces/Tableau.js"); +exports.ErrorCodes = Tableau_1.ErrorCodes; +exports.ExtensionContext = Tableau_1.ExtensionContext; +exports.ExtensionMode = Tableau_1.ExtensionMode; +exports.TableauEventType = Tableau_1.TableauEventType; +exports.VizImageEncodingType = Tableau_1.VizImageEncodingType; +exports.VizImagePaletteType = Tableau_1.VizImagePaletteType; +exports.VizImageSizeSettingAlignmentType = Tableau_1.VizImageSizeSettingAlignmentType; +exports.VizImageSizeSettingType = Tableau_1.VizImageSizeSettingType; +exports.VizImageSortDirectionType = Tableau_1.VizImageSortDirectionType; +__export(__webpack_require__(/*! ./SharedApiExternalContract */ "../api-external-contract-js/lib/src/SharedApiExternalContract.js")); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract.js": +/*!***************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +/** + * This is your main. This is where you re-export everything you want to be publicly available. + * + * The build enforces that the file has the same name as the global variable that is exported. + */ +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +__export(__webpack_require__(/*! ./EmbeddingApiExternalContract */ "../api-external-contract-js/lib/src/EmbeddingApiExternalContract.js")); +__export(__webpack_require__(/*! ./ExtensionsApiExternalContract */ "../api-external-contract-js/lib/src/ExtensionsApiExternalContract.js")); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Embedding/AskDataInterfaces.js": +/*!*******************************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Embedding/AskDataInterfaces.js ***! + \*******************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * The names of the string constants you can use as HTML attributes for the web component. + * @ignore + */ +var AskDataAttributes; +(function (AskDataAttributes) { + AskDataAttributes["Origin"] = "origin"; + AskDataAttributes["ShowEmbed"] = "showEmbed"; + AskDataAttributes["ShowPin"] = "showPin"; + AskDataAttributes["ShowSave"] = "showSave"; + AskDataAttributes["ShowShare"] = "showShare"; +})(AskDataAttributes = exports.AskDataAttributes || (exports.AskDataAttributes = {})); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Embedding/Enums.js": +/*!*******************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Embedding/Enums.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// All enum values made available to Embedding developers. +// Enums should be kept in alphabetical order. +// Most of them should match an enum on the server defined at +// workgroup/vqlweb/scriptsharp/src/ApiShared/PublicEnums.cs#L398:17 +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Device types available to use with {@link Viz.device} + */ +var DeviceType; +(function (DeviceType) { + DeviceType["Default"] = "default"; + DeviceType["Desktop"] = "desktop"; + DeviceType["Tablet"] = "tablet"; + DeviceType["Phone"] = "phone"; +})(DeviceType = exports.DeviceType || (exports.DeviceType = {})); +/** + * All error codes used by the Embedding API. + */ +var EmbeddingErrorCodes; +(function (EmbeddingErrorCodes) { + /** + * The browser is not capable of supporting the Tableau Embedding API + */ + EmbeddingErrorCodes["BrowserNotCapable"] = "browser-not-capable"; + /** + * The permissions on a workbook or a view do not allow downloading the workbook. + */ + EmbeddingErrorCodes["DownloadWorkbookNotAllowed"] = "download-workbook-not-allowed"; + /** + * Thrown when an error occurs while attempting to perform a filter operation. + */ + EmbeddingErrorCodes["FilterCannotBePerformed"] = "filter-cannot-be-performed"; + /** + * Thrown when attempting to switch to a sheet by index that does not exist in the workbook. + */ + EmbeddingErrorCodes["IndexOutOfRange"] = "index-out-of-range"; + /** + * Thrown when an error occurs within the Tableau Embedding API. Contact Tableau Support. + */ + EmbeddingErrorCodes["InternalError"] = "internal-error"; + /** + * An operation was attempted on a custom view that does not exist. + */ + EmbeddingErrorCodes["InvalidCustomViewName"] = "invalid-custom-view-name"; + /** + * An invalid date was specified in a method that required a date parameter. + */ + EmbeddingErrorCodes["InvalidDateParameter"] = "invalid-date-parameter"; + /** + * Either a filter operation was attempted on a field that does not exist in the data source, or the value supplied + * in the filter operation is the wrong data type or format. + */ + EmbeddingErrorCodes["invalidFilterFieldNameOrValue"] = "invalid-filter-field-name"; + /** + * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message + * field. + */ + EmbeddingErrorCodes["InvalidParameter"] = "invalid-parameter"; + /** + * A negative size was specified or the maxSize value is less than minSize in Sheet.changeSizeAsync(). + */ + EmbeddingErrorCodes["InvalidSize"] = "invalid-size"; + /** + * A behavior value was found that is not included in the SheetSizeBehavior enum. + */ + EmbeddingErrorCodes["InvalidSizeBehavior"] = "invalid-size-behavior"; + /** + * A behavior other than SheetSizeBehavior.Automatic was specified in Sheet.changeSizeAsync() when the sheet is a + * Worksheet instance. + */ + EmbeddingErrorCodes["InvalidSizeBehaviorOnWorksheet"] = "invalid-size-behavior-on-worksheet"; + /** + * The URL specified in the Viz class constructor is not valid. + */ + EmbeddingErrorCodes["InvalidUrl"] = "invalid-url"; + /** + * The maxSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.AtMost. + */ + EmbeddingErrorCodes["MissingMaxSize"] = "missing-max-size"; + /** + * The minSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.AtLeast. + */ + EmbeddingErrorCodes["MissingMinSize"] = "missing-min-size"; + /** + * The minSize or maxSize field is missing in Sheet.changeSizeAsync() when specifying SheetSizeBehavior.Range. + */ + EmbeddingErrorCodes["MissingMinMaxSize"] = "missing-min-max-size"; + /** + * Can occur if the embedding app interacts with a parameter that has been removed from the worksheet. + */ + EmbeddingErrorCodes["MissingParameter"] = "missing-parameter"; + /** + * The rangeN field is missing for a relative date filter of type LASTN or NEXTN. + */ + EmbeddingErrorCodes["MissingRangeNForRelativeDateFilters"] = "missing-range-n-for-relative-date-filters"; + /** + * An attempt was made to access Sheet.getUrl() on a hidden sheet. Hidden sheets do not have URLs. + */ + EmbeddingErrorCodes["NoUrlForHiddenWorksheet"] = "no-url-for-hidden-worksheet"; + /** + * One or both of the parentElement or the URL parameters is not specified in the Viz constructor. + */ + EmbeddingErrorCodes["NoUrlOrParentElementNotFound"] = "no-url-or-parent-element-not-found"; + /** + * An operation was attempted on a sheet that is not active or embedded within the active dashboard. + */ + EmbeddingErrorCodes["NotActiveSheet"] = "not-active-sheet"; + /** + * A required parameter was not specified, null, or an empty string/array. + */ + EmbeddingErrorCodes["NullOrEmptyParameter"] = "null-or-empty-parameter"; + /** + * An operation was attempted on a sheet that does not exist in the workbook. + */ + EmbeddingErrorCodes["SheetNotInWorkbook"] = "sheet-not-in-workbook"; + /** + * An operation is performed on a CustomView object that is no longer valid (it has been removed). + */ + EmbeddingErrorCodes["StaleDataReference"] = "stale-data-reference"; + /** + * An unknown event name was specified in the call to Viz.addEventListener or Viz.removeEventListener. + */ + EmbeddingErrorCodes["UnsupportedEventName"] = "unsupported-event-name"; + /** + * A Viz object has already been created as a child of the parentElement specified in the Viz constructor. + */ + EmbeddingErrorCodes["VizAlreadyInManager"] = "viz-already-in-manager"; + /** + * Function is not supported in the embedding api. + */ + EmbeddingErrorCodes["ImplementationError"] = "wrong-implementation"; + /** + * @NotImplemented + */ + EmbeddingErrorCodes["NotImplemented"] = "not-implemented"; + /** + * Unknown error during event initialization + */ + EmbeddingErrorCodes["EventInitializationError"] = "event-initialization-error"; + /** + * Version of the embedding api not supported by the version of tableau + */ + EmbeddingErrorCodes["IncompatibleVersionError"] = "incompatible-version-error"; + /** + * Unknown {@link TableauDialogType} passed in to Viz.displayDialogAsync. + */ + EmbeddingErrorCodes["UnknownDialogType"] = "unknown-dialog-type"; + /** + * Can occur if the API interacts with a filter that has been removed from the worksheet. + * Can also occurs if a {@link FilterType} has not been implemented. + */ + EmbeddingErrorCodes["FilterMissingOrNotImplemented"] = "filter-missing-not-implemented"; + /** + * Can occur if story point ids no longer match. + */ + EmbeddingErrorCodes["StoryPointIdMismatch"] = "storypoint-id-mismatch"; +})(EmbeddingErrorCodes = exports.EmbeddingErrorCodes || (exports.EmbeddingErrorCodes = {})); +/** + * Formats available to use with displayStaticImage in @VizInterfaces + */ +var FileFormats; +(function (FileFormats) { + FileFormats["PDF"] = "pdf"; + FileFormats["PNG"] = "png"; +})(FileFormats = exports.FileFormats || (exports.FileFormats = {})); +var RevertVizSelection; +(function (RevertVizSelection) { + RevertVizSelection["All"] = "all"; + RevertVizSelection["Axes"] = "axes"; + RevertVizSelection["Filters"] = "filters"; + RevertVizSelection["Sorts"] = "sorts"; + RevertVizSelection["Shelves"] = "shelves"; +})(RevertVizSelection = exports.RevertVizSelection || (exports.RevertVizSelection = {})); +var ToolbarButtons; +(function (ToolbarButtons) { + ToolbarButtons["Alerts"] = "alerts"; + ToolbarButtons["AskData"] = "askData"; + ToolbarButtons["CustomViews"] = "customViews"; + ToolbarButtons["DataDetails"] = "dataDetails"; + ToolbarButtons["Share"] = "share"; + ToolbarButtons["Subscribe"] = "subscribe"; +})(ToolbarButtons = exports.ToolbarButtons || (exports.ToolbarButtons = {})); +var Toolbar; +(function (Toolbar) { + Toolbar["Top"] = "top"; + Toolbar["Bottom"] = "bottom"; + Toolbar["Hidden"] = "hidden"; +})(Toolbar = exports.Toolbar || (exports.Toolbar = {})); +var SheetSizeBehavior; +(function (SheetSizeBehavior) { + SheetSizeBehavior["Automatic"] = "automatic"; + SheetSizeBehavior["Exactly"] = "exactly"; + SheetSizeBehavior["Range"] = "range"; + SheetSizeBehavior["AtLeast"] = "atleast"; + SheetSizeBehavior["AtMost"] = "atmost"; +})(SheetSizeBehavior = exports.SheetSizeBehavior || (exports.SheetSizeBehavior = {})); +/** + * Be careful when adding new event types. Extensions and embedding follow two different patterns on how events are named. + * Events should be all lower case and without hyphens or underscores. + */ +/** + * Represents the type of tableau embedding event that can be listened for. + */ +var TableauEventType; +(function (TableauEventType) { + /** + * Raised when a custom view has finished loading. This event is raised after the callback function for {@link FirstInteractive} (if any) has been called. + * + * @category Viewing + */ + TableauEventType["CustomViewLoaded"] = "customviewloaded"; + /** + * Raised when a custom view has been removed. + * + * @category Viewing + */ + TableauEventType["CustomViewRemoved"] = "customviewremoved"; + /** + * Raised when a custom view has been saved (newly created or updated). + * + * @category Viewing + */ + TableauEventType["CustomViewSaved"] = "customviewsaved"; + /** + * Raised when a custom view has been set as the default view for a workbook. + * + * @category Viewing + */ + TableauEventType["CustomViewSetDefault"] = "customviewsetdefault"; + /** Raised when the user clicks on the Edit Button. + * + * @category Viewing + */ + TableauEventType["EditButtonClicked"] = "editbuttonclicked"; + /** Raised when the user clicks on the Edit In Desktop Button. + * + * @category Authoring, Viewing + */ + TableauEventType["EditInDesktopButtonClicked"] = "editindesktopbuttonclicked"; + /** Raised when any filter has changed state. You can use this event type with TableauViz objects. + * + * @category Viewing + */ + TableauEventType["FilterChanged"] = "filterchanged"; + /** Fired when viz size is known + * + * @category Authoring, Viewing + */ + TableauEventType["FirstVizSizeKnown"] = "firstvizsizeknown"; + /** Fired when a viz first becomes interactive + * + * @category Authoring, Viewing + */ + TableauEventType["FirstInteractive"] = "firstinteractive"; + /** Raised when a custom mark context menu is clicked. + * + * @category Viewing + */ + TableauEventType["CustomMarkContextMenuEvent"] = "custommarkcontextmenu"; + /** The selected marks on a visualization have changed. You can use this event type with TableauViz objects. + * + * @category Viewing + */ + TableauEventType["MarkSelectionChanged"] = "markselectionchanged"; + /** A parameter has had its value modified. You can use this event type with [[Parameter]] objects. + * + * @category Viewing + */ + TableauEventType["ParameterChanged"] = "parameterchanged"; + /** Raised when a toolbar button or control becomes available or becomes unavailable. + * + * @category Viewing + */ + TableauEventType["ToolbarStateChanged"] = "toolbarstatechanged"; + /** Raised when the workbook is ready to close. This notification is sent when using embedded web authoring functionality. + * + * @category Authoring + */ + TableauEventType["WorkbookReadyToClose"] = "workbookreadytoclose"; + /** Raised when the workbook has been published. This notification is sent when using embedded web authoring functionality. + * + * @category Authoring + */ + TableauEventType["WorkbookPublished"] = "workbookpublished"; + /** Raised when "publish as" is successful. This notification is sent when using embedded web authoring functionality. + * + * @category Authoring + */ + TableauEventType["WorkbookPublishedAs"] = "workbookpublishedas"; + /** + * Raised when a URL action occurs. See the {@link UrlActionEvent} class. + * + * @category Viewing + */ + TableauEventType["UrlAction"] = "urlaction"; + /** + * Raised after a tab switch occurs (the active sheet has changed). Guarantees the viz object will be interactive after this. + * + * @category Viewing + */ + TableauEventType["TabSwitched"] = "tabswitched"; + /** + * + * Raised after a new story point becomes active. + * + * @category Viewing + */ + TableauEventType["StoryPointSwitched"] = "storypointswitched"; +})(TableauEventType = exports.TableauEventType || (exports.TableauEventType = {})); +/** + * Represents the location of a context menu where users can add external menu items. + */ +var ApiMenuType; +(function (ApiMenuType) { + /** External menu item will be injected in ubertip dialog */ + ApiMenuType["Ubertip"] = "ubertip"; +})(ApiMenuType = exports.ApiMenuType || (exports.ApiMenuType = {})); +/** You can use this type with a {@link Viz} object. */ +var TableauDialogType; +(function (TableauDialogType) { + /** + * Used to display the download PDF dialog. + */ + TableauDialogType["ExportPDF"] = "export-pdf"; + /** + * Used to display the download PowerPoint dialog. + */ + TableauDialogType["ExportPowerPoint"] = "export-powerpoint"; + /** + * Used to display the download Data dialog. + */ + TableauDialogType["ExportData"] = "export-data"; + /** + * Used to display the download CrossTab dialog. + */ + TableauDialogType["ExportCrossTab"] = "export-cross-tab"; + /** + * Used to display the download Workbook dialog. + */ + TableauDialogType["ExportWorkbook"] = "export-workbook"; + /** + * Used to display the Share dialog. + */ + TableauDialogType["Share"] = "share"; +})(TableauDialogType = exports.TableauDialogType || (exports.TableauDialogType = {})); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Embedding/VizInterfaces.js": +/*!***************************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Embedding/VizInterfaces.js ***! + \***************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * The shared string constants you can use as HTML attributes for the and web component. + * @ignore + */ +var VizSharedAttributes; +(function (VizSharedAttributes) { + VizSharedAttributes["TouchOptimize"] = "touch-optimize"; + VizSharedAttributes["HideEditInDesktopButton"] = "hide-edit-in-desktop-button"; + VizSharedAttributes["SuppressDefaultEditBehavior"] = "suppress-default-edit-behavior"; + VizSharedAttributes["DisableVersionCheck"] = "disable-version-check"; + VizSharedAttributes["OnEditInDesktopButtonClicked"] = "onEditInDesktopButtonClicked"; + VizSharedAttributes["OnFirstVizSizeKnown"] = "onFirstVizSizeKnown"; + VizSharedAttributes["OnFirstInteractive"] = "onFirstInteractive"; +})(VizSharedAttributes = exports.VizSharedAttributes || (exports.VizSharedAttributes = {})); +/** + * The names of the string constants you can use as HTML attributes for the web component. + * @ignore + */ +var VizAttributes; +(function (VizAttributes) { + VizAttributes["DisableUrlActionsPopups"] = "disable-url-actions"; + VizAttributes["HideTabs"] = "hide-tabs"; + VizAttributes["Toolbar"] = "toolbar"; + VizAttributes["InstanceIdToClone"] = "instance-id-to-clone"; + VizAttributes["Device"] = "device"; + VizAttributes["HideEditButton"] = "hide-edit-button"; + VizAttributes["OnEditButtonClicked"] = "onEditButtonClicked"; + VizAttributes["OnFilterChanged"] = "onFilterChanged"; + VizAttributes["OnCustomMarkContextMenuEvent"] = "onCustomMarkContextMenuEvent"; + VizAttributes["OnMarkSelectionChanged"] = "onMarkSelectionChanged"; + VizAttributes["OnParameterChanged"] = "onParameterChanged"; + VizAttributes["OnToolbarStateChanged"] = "onToolbarStateChanged"; + VizAttributes["OnUrlAction"] = "onUrlAction"; + VizAttributes["OnTabSwitched"] = "onTabSwitched"; + VizAttributes["OnCustomViewLoaded"] = "onCustomViewLoaded"; + VizAttributes["OnCustomViewRemoved"] = "onCustomViewRemoved"; + VizAttributes["OnCustomViewSaved"] = "onCustomViewSaved"; + VizAttributes["OnCustomViewSetDefault"] = "onCustomViewSetDefault"; + VizAttributes["OnStoryPointSwitched"] = "onStoryPointSwitched"; +})(VizAttributes = exports.VizAttributes || (exports.VizAttributes = {})); +/** + * The names of the string constants you can use as HTML attributes for the web component. + * @ignore + */ +var VizAuthoringAttributes; +(function (VizAuthoringAttributes) { + VizAuthoringAttributes["OnWorkbookPublished"] = "onWorkbookPublished"; + VizAuthoringAttributes["OnWorkbookPublishedAs"] = "onWorkbookPublishedAs"; + VizAuthoringAttributes["OnWorkbookReadyToClose"] = "onWorkbookReadyToClose"; + VizAuthoringAttributes["HideCloseButton"] = "hide-close-button"; +})(VizAuthoringAttributes = exports.VizAuthoringAttributes || (exports.VizAuthoringAttributes = {})); +/** + * The names of the string constants you can use as child tags for TableauViz and TableauAuthoringViz custom elements. + */ +var VizChildElements; +(function (VizChildElements) { + /** + * Contains a list of filter parameters. Available only in viewing mode. + */ + VizChildElements["VizFilter"] = "viz-filter"; + /** + * Contains a name and value for a parameter. Available only in viewing mode. + */ + VizChildElements["VizParameter"] = "viz-parameter"; + /** + * Contains a list of custom parameters. Available in both viewing and authoring modes. + */ + VizChildElements["CustomParameter"] = "custom-parameter"; +})(VizChildElements = exports.VizChildElements || (exports.VizChildElements = {})); +var VizChildElementAttributes; +(function (VizChildElementAttributes) { + VizChildElementAttributes["Field"] = "field"; + VizChildElementAttributes["Value"] = "value"; + VizChildElementAttributes["Name"] = "name"; +})(VizChildElementAttributes = exports.VizChildElementAttributes || (exports.VizChildElementAttributes = {})); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Embedding/WebComponentInterfaces.js": +/*!************************************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Embedding/WebComponentInterfaces.js ***! + \************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * The names of the common string constants you can use as HTML attributes for the tableau web component. + * @ignore + */ +var WebComponentAttributes; +(function (WebComponentAttributes) { + WebComponentAttributes["Src"] = "src"; + WebComponentAttributes["Width"] = "width"; + WebComponentAttributes["Height"] = "height"; + WebComponentAttributes["Token"] = "token"; + WebComponentAttributes["Debug"] = "debug"; +})(WebComponentAttributes = exports.WebComponentAttributes || (exports.WebComponentAttributes = {})); +/** + * The names of the string constants you can use as child tags for TableauViz, TableauAuthoringViz and TableauAskData custom elements. + * @ignore + */ +var WebComponentChildElements; +(function (WebComponentChildElements) { + /** + * Contains a list of custom parameters. Available in viz viewing, viz authoring and askdata. + */ + WebComponentChildElements["CustomParameter"] = "custom-parameter"; +})(WebComponentChildElements = exports.WebComponentChildElements || (exports.WebComponentChildElements = {})); +var WebComponentChildElementAttributes; +(function (WebComponentChildElementAttributes) { + WebComponentChildElementAttributes["Field"] = "field"; + WebComponentChildElementAttributes["Value"] = "value"; + WebComponentChildElementAttributes["Name"] = "name"; +})(WebComponentChildElementAttributes = exports.WebComponentChildElementAttributes || (exports.WebComponentChildElementAttributes = {})); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Extensions/Namespaces/Tableau.js": +/*!*********************************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Extensions/Namespaces/Tableau.js ***! + \*********************************************************************************************/ +/***/ ((module) => { + +"use strict"; + +// All enum values made available to Extensions developers. +// Enums should be kept in alphabetical order. +var Tableau; +(function (Tableau) { + /** + * All error codes used by the Extensions API. + */ + var ErrorCodes; + (function (ErrorCodes) { + /** + * Thrown when caller attempts to execute command before initialization has completed. + */ + ErrorCodes["APINotInitialized"] = "api-not-initialized"; + /** + * Thrown when caller attempts to execute command while extension is not visible. + */ + ErrorCodes["VisibilityError"] = "visibility-error"; + /** + * Only one dialog can be opened at time with the UI namespace functionality. + */ + ErrorCodes["DialogAlreadyOpen"] = "dialog-already-open"; + /** + * The open dialog was closed by the user. + */ + ErrorCodes["DialogClosedByUser"] = "dialog-closed-by-user"; + /** + * An error occurred within the Tableau Extensions API. Contact Tableau Support. + */ + ErrorCodes["InternalError"] = "internal-error"; + /** + * A dialog must start on the same domain as the parent extenion. + */ + ErrorCodes["InvalidDomainDialog"] = "invalid-dialog-domain"; + /** + * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message field. + */ + ErrorCodes["InvalidParameter"] = "invalid-parameter"; + /** + * Can occur if the extension interacts with a filter that has been removed from the worksheet. + */ + ErrorCodes["MissingFilter"] = "missing-filter"; + /** + * Can occur if the extension interacts with a parameter that has been removed from the worksheet. + */ + ErrorCodes["MissingParameter"] = "missing-parameter"; + /** + * Internal Server Error + */ + ErrorCodes["ServerError"] = "server-error"; + /** + * Developer cannot save settings while another save is still in progress. + */ + ErrorCodes["SettingSaveInProgress"] = "setting-save-in-progress"; + /** + * An unknown event name was specified in the call to `addEventListener` or `removeEventListener`. + */ + ErrorCodes["UnsupportedEventName"] = "unsupported-event-name"; + /** + * A method was used for a type of data source that doesn't support that method (see getActiveTablesAsync for an example) + */ + ErrorCodes["UnsupportedMethodForDataSourceType"] = "unsupported-method-for-data-source-type"; + })(ErrorCodes = Tableau.ErrorCodes || (Tableau.ErrorCodes = {})); + /** + * The context in which the Extensions is currently running. + */ + var ExtensionContext; + (function (ExtensionContext) { + ExtensionContext["Desktop"] = "desktop"; + ExtensionContext["Server"] = "server"; + })(ExtensionContext = Tableau.ExtensionContext || (Tableau.ExtensionContext = {})); + /** + * The mode in which the Extensions is currently running. + */ + var ExtensionMode; + (function (ExtensionMode) { + ExtensionMode["Authoring"] = "authoring"; + ExtensionMode["Viewing"] = "viewing"; + })(ExtensionMode = Tableau.ExtensionMode || (Tableau.ExtensionMode = {})); + /** + * Represents the type of event that can be listened for. + */ + var TableauEventType; + (function (TableauEventType) { + /** Raised when any filter has changed state. You can use this event type with [Worksheet](../interfaces/worksheet.html) objects.*/ + TableauEventType["FilterChanged"] = "filter-changed"; + /** The selected marks on a visualization has changed. + * You can use this event type with [Worksheet](../interfaces/worksheet.html) objects. */ + TableauEventType["MarkSelectionChanged"] = "mark-selection-changed"; + /** A parameter has had its value modified. You can use this event type with [[Parameter]] objects. */ + TableauEventType["ParameterChanged"] = "parameter-changed"; + /** Settings have been changed for this extension. You can use this event type with [[Settings]] objects. */ + TableauEventType["SettingsChanged"] = "settings-changed"; + /** The dashboard layout has changed */ + TableauEventType["DashboardLayoutChanged"] = "dashboard-layout-changed"; + /** The workbook formatting has changed */ + TableauEventType["WorkbookFormattingChanged"] = "workbook-formatting-changed"; + })(TableauEventType = Tableau.TableauEventType || (Tableau.TableauEventType = {})); + /** + * Enum that represents the data type of encodings for createVizImageAsync. + * @since 1.6.0 + */ + var VizImageEncodingType; + (function (VizImageEncodingType) { + VizImageEncodingType["Discrete"] = "discrete"; + VizImageEncodingType["Continuous"] = "continuous"; + })(VizImageEncodingType = Tableau.VizImageEncodingType || (Tableau.VizImageEncodingType = {})); + /** + * Enum that represents the sort direction for createVizImageAsync. + * @since 1.8.0 and Tableau 2021.4 + */ + var VizImageSortDirectionType; + (function (VizImageSortDirectionType) { + VizImageSortDirectionType["Ascending"] = "ascending"; + VizImageSortDirectionType["Descending"] = "descending"; + })(VizImageSortDirectionType = Tableau.VizImageSortDirectionType || (Tableau.VizImageSortDirectionType = {})); + /** + * Enum that represents the palette type for createVizImageAsync. + * @since 1.8.0 and Tableau 2021.4 + */ + var VizImagePaletteType; + (function (VizImagePaletteType) { + VizImagePaletteType["CustomDiverging"] = "custom-diverging"; + VizImagePaletteType["CustomSequential"] = "custom-sequential"; + })(VizImagePaletteType = Tableau.VizImagePaletteType || (Tableau.VizImagePaletteType = {})); + /** + * Enum that represents the Size Setting type for createVizImageAsync. + * @since 1.8.0 and Tableau 2021.4 + */ + var VizImageSizeSettingType; + (function (VizImageSizeSettingType) { + VizImageSizeSettingType["Fixed"] = "fixed"; + VizImageSizeSettingType["Manual"] = "manual"; + })(VizImageSizeSettingType = Tableau.VizImageSizeSettingType || (Tableau.VizImageSizeSettingType = {})); + /** + * Enum that represents the Size Setting alignment type for createVizImageAsync. + * @since 1.8.0 and Tableau 2021.4 + */ + var VizImageSizeSettingAlignmentType; + (function (VizImageSizeSettingAlignmentType) { + VizImageSizeSettingAlignmentType["Right"] = "right"; + VizImageSizeSettingAlignmentType["Left"] = "left"; + VizImageSizeSettingAlignmentType["Center"] = "center"; + })(VizImageSizeSettingAlignmentType = Tableau.VizImageSizeSettingAlignmentType || (Tableau.VizImageSizeSettingAlignmentType = {})); +})(Tableau || (Tableau = {})); +module.exports = Tableau; + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Shared/Enums.js": +/*!****************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Shared/Enums.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var SharedErrorCodes; +(function (SharedErrorCodes) { + /** + * An invalid aggregation was specified for the filter, such as setting a range filter to "SUM(Sales)" instead of + * "Sales". + */ + SharedErrorCodes["InvalidAggregationFieldName"] = "invalid-aggregation-field-name"; + /** + * A filter operation was attempted on a field that does not exist in the data source. + */ + SharedErrorCodes["InvalidFilterFieldName"] = "invalid-filter-name"; + /** + * A filter operation was attempted using a value that is the wrong data type or format. + */ + SharedErrorCodes["InvalidFilterFieldValue"] = "invalid-filter-fieldValue"; + /** + * An invalid date value was specified in a Sheet.selectMarksAsync() call for a date field. + */ + SharedErrorCodes["InvalidSelectionDate"] = "invalid-selection-date"; + /** + * A field was specified in a Sheet.selectMarksAsync() call that does not exist in the data source. + */ + SharedErrorCodes["InvalidSelectionFieldName"] = "invalid-selection-fieldName"; + /** + * An invalid value was specified in a Sheet.selectMarksAsync() call. + */ + SharedErrorCodes["InvalidSelectionValue"] = "invalid-selection-value"; + /** + * An error occurred within the Tableau API. Contact Tableau Support. + */ + SharedErrorCodes["InternalError"] = "internal-error"; + /** + * A parameter is not the correct data type or format. The name of the parameter is specified in the Error.message field. + */ + SharedErrorCodes["InvalidParameter"] = "invalid-parameter"; + /** + * An operation was attempted on a sheet that is not active or embedded within the active dashboard. + */ + SharedErrorCodes["NotActiveSheet"] = "not-active-sheet"; + /** + * Property or Function is not supported within the Tableau API. + */ + SharedErrorCodes["ImplementationError"] = "wrong-implementation"; + /** + * Can occur when two incompatible calls are triggered together. + */ + SharedErrorCodes["ApiExecutionError"] = "api-execution-error"; + /** + * A general-purpose server error occurred. Details are contained in the Error object. + */ + SharedErrorCodes["ServerError"] = "server-error"; + /** + * Can occur when an api call times out. + */ + SharedErrorCodes["Timeout"] = "timeout"; +})(SharedErrorCodes = exports.SharedErrorCodes || (exports.SharedErrorCodes = {})); + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/ExternalContract/Shared/Namespaces/Tableau.js": +/*!*****************************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/ExternalContract/Shared/Namespaces/Tableau.js ***! + \*****************************************************************************************/ +/***/ (function(module) { + +"use strict"; + +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +/** + * The tableau namespace exists for organization and to avoid polluting + * the global namespace. It contains no constructs other than sub-namespaces and the Tableau enumerations. + */ +var Tableau; +(function (Tableau) { + var AnalyticsObjectType; + (function (AnalyticsObjectType) { + AnalyticsObjectType["Cluster"] = "cluster"; + AnalyticsObjectType["Forecast"] = "forecast"; + AnalyticsObjectType["TrendLine"] = "trend-line"; + })(AnalyticsObjectType = Tableau.AnalyticsObjectType || (Tableau.AnalyticsObjectType = {})); + var AnnotationType; + (function (AnnotationType) { + AnnotationType["Mark"] = "mark"; + AnnotationType["Point"] = "point"; + AnnotationType["Area"] = "area"; + })(AnnotationType = Tableau.AnnotationType || (Tableau.AnnotationType = {})); + var ColumnType; + (function (ColumnType) { + ColumnType["Discrete"] = "discrete"; + ColumnType["Continuous"] = "continuous"; + })(ColumnType = Tableau.ColumnType || (Tableau.ColumnType = {})); + var ClassNameKey; + (function (ClassNameKey) { + ClassNameKey["WorksheetTitle"] = "tableau-worksheet-title"; + ClassNameKey["Worksheet"] = "tableau-worksheet"; + ClassNameKey["Tooltip"] = "tableau-tooltip"; + ClassNameKey["StoryTitle"] = "tableau-story-title"; + ClassNameKey["DashboardTitle"] = "tableau-dashboard-title"; + })(ClassNameKey = Tableau.ClassNameKey || (Tableau.ClassNameKey = {})); + /** + * What the object represents in a dashboard. + */ + var DashboardObjectType; + (function (DashboardObjectType) { + DashboardObjectType["Blank"] = "blank"; + DashboardObjectType["Worksheet"] = "worksheet"; + DashboardObjectType["QuickFilter"] = "quick-filter"; + DashboardObjectType["ParameterControl"] = "parameter-control"; + DashboardObjectType["PageFilter"] = "page-filter"; + DashboardObjectType["Legend"] = "legend"; + DashboardObjectType["Title"] = "title"; + DashboardObjectType["Text"] = "text"; + DashboardObjectType["Image"] = "image"; + DashboardObjectType["WebPage"] = "web-page"; + DashboardObjectType["Extension"] = "extension"; + })(DashboardObjectType = Tableau.DashboardObjectType || (Tableau.DashboardObjectType = {})); + /** + * Enum that represents the visibility state of a dashboard object. + * @since 1.7.0 + */ + var DashboardObjectVisibilityType; + (function (DashboardObjectVisibilityType) { + /** Used for turning on the visibility of a dashboard object.*/ + DashboardObjectVisibilityType["Show"] = "show"; + /** Used for turning off the visibility of a dashboard object.*/ + DashboardObjectVisibilityType["Hide"] = "hide"; + })(DashboardObjectVisibilityType = Tableau.DashboardObjectVisibilityType || (Tableau.DashboardObjectVisibilityType = {})); + /** + * The different types of data a value can have + */ + var DataType; + (function (DataType) { + DataType["String"] = "string"; + DataType["Int"] = "int"; + DataType["Float"] = "float"; + DataType["Bool"] = "bool"; + DataType["Date"] = "date"; + DataType["DateTime"] = "date-time"; + DataType["Spatial"] = "spatial"; + })(DataType = Tableau.DataType || (Tableau.DataType = {})); + /** + * Enum that represents the changes that occur to a dashboard object. + */ + var DashboardLayoutChange; + (function (DashboardLayoutChange) { + /** A dashboard object was added */ + DashboardLayoutChange["Added"] = "added"; + /** A dashboard object was removed */ + DashboardLayoutChange["Removed"] = "removed"; + /** A dashboard object's floating state changed */ + DashboardLayoutChange["IsFloatingChanged"] = "is-floating-changed"; + /** A dashboard object's visibility changed */ + DashboardLayoutChange["IsVisibleChanged"] = "is-visible-changed"; + /** A dashboard object's position changed */ + DashboardLayoutChange["PositionChanged"] = "position-changed"; + /** A dashboard object's size changed */ + DashboardLayoutChange["SizeChanged"] = "size-changed"; + /** A dashboard object was renamed */ + DashboardLayoutChange["NameChanged"] = "name-changed"; + })(DashboardLayoutChange = Tableau.DashboardLayoutChange || (Tableau.DashboardLayoutChange = {})); + /** + * Valid date ranges for a relative date filter. + */ + var DateRangeType; + (function (DateRangeType) { + DateRangeType["Last"] = "last"; + DateRangeType["LastN"] = "last-n"; + DateRangeType["Next"] = "next"; + DateRangeType["NextN"] = "next-n"; + DateRangeType["Current"] = "current"; + DateRangeType["ToDate"] = "to-date"; + })(DateRangeType = Tableau.DateRangeType || (Tableau.DateRangeType = {})); + /** + * Enum that represents the types of dialog popup styles. + */ + var DialogStyle; + (function (DialogStyle) { + DialogStyle["Window"] = "window"; + DialogStyle["Modal"] = "modal"; + DialogStyle["Modeless"] = "modeless"; + })(DialogStyle = Tableau.DialogStyle || (Tableau.DialogStyle = {})); + var EncodingType; + (function (EncodingType) { + EncodingType["Column"] = "column"; + EncodingType["Row"] = "row"; + EncodingType["Page"] = "page"; + EncodingType["Filter"] = "filter"; + EncodingType["MarksType"] = "marks-type"; + EncodingType["MeasureValues"] = "measure-values"; + EncodingType["Color"] = "color"; + EncodingType["Size"] = "size"; + EncodingType["Label"] = "label"; + EncodingType["Detail"] = "detail"; + EncodingType["Tooltip"] = "tooltip"; + EncodingType["Shape"] = "shape"; + EncodingType["Path"] = "path"; + EncodingType["Angle"] = "angle"; + })(EncodingType = Tableau.EncodingType || (Tableau.EncodingType = {})); + /** + * Type of aggregation on a field. + */ + var FieldAggregationType; + (function (FieldAggregationType) { + FieldAggregationType["Sum"] = "sum"; + FieldAggregationType["Avg"] = "avg"; + FieldAggregationType["Min"] = "min"; + FieldAggregationType["Max"] = "max"; + FieldAggregationType["Stdev"] = "stdev"; + FieldAggregationType["Stdevp"] = "stdevp"; + FieldAggregationType["Var"] = "var"; + FieldAggregationType["Varp"] = "varp"; + FieldAggregationType["Count"] = "count"; + FieldAggregationType["Countd"] = "countd"; + FieldAggregationType["Median"] = "median"; + FieldAggregationType["Attr"] = "attr"; + FieldAggregationType["None"] = "none"; + FieldAggregationType["Year"] = "year"; + FieldAggregationType["Qtr"] = "qtr"; + FieldAggregationType["Month"] = "month"; + FieldAggregationType["Day"] = "day"; + FieldAggregationType["Hour"] = "hour"; + FieldAggregationType["Minute"] = "minute"; + FieldAggregationType["Second"] = "second"; + FieldAggregationType["Week"] = "week"; + FieldAggregationType["Weekday"] = "weekday"; + FieldAggregationType["MonthYear"] = "month-year"; + FieldAggregationType["Mdy"] = "mdy"; + FieldAggregationType["End"] = "end"; + FieldAggregationType["TruncYear"] = "trunc-year"; + FieldAggregationType["TruncQtr"] = "trunc-qtr"; + FieldAggregationType["TruncMonth"] = "trunc-month"; + FieldAggregationType["TruncWeek"] = "trunc-week"; + FieldAggregationType["TruncDay"] = "trunc-day"; + FieldAggregationType["TruncHour"] = "trunc-hour"; + FieldAggregationType["TruncMinute"] = "trunc-minute"; + FieldAggregationType["TruncSecond"] = "trunc-second"; + FieldAggregationType["Quart1"] = "quart1"; + FieldAggregationType["Quart3"] = "quart3"; + FieldAggregationType["Skewness"] = "skewness"; + FieldAggregationType["Kurtosis"] = "kurtosis"; + FieldAggregationType["InOut"] = "in-out"; + FieldAggregationType["User"] = "user"; + })(FieldAggregationType = Tableau.FieldAggregationType || (Tableau.FieldAggregationType = {})); + /** + * Role of a field. + */ + var FieldRoleType; + (function (FieldRoleType) { + FieldRoleType["Dimension"] = "dimension"; + FieldRoleType["Measure"] = "measure"; + FieldRoleType["Unknown"] = "unknown"; + })(FieldRoleType = Tableau.FieldRoleType || (Tableau.FieldRoleType = {})); + /** + * An enumeration of the valid types of filters that can be applied. + */ + var FilterType; + (function (FilterType) { + FilterType["Categorical"] = "categorical"; + FilterType["Range"] = "range"; + FilterType["Hierarchical"] = "hierarchical"; + FilterType["RelativeDate"] = "relative-date"; + })(FilterType = Tableau.FilterType || (Tableau.FilterType = {})); + /** + * The different update types for applying filter + */ + var FilterUpdateType; + (function (FilterUpdateType) { + FilterUpdateType["Add"] = "add"; + FilterUpdateType["All"] = "all"; + FilterUpdateType["Replace"] = "replace"; + FilterUpdateType["Remove"] = "remove"; + })(FilterUpdateType = Tableau.FilterUpdateType || (Tableau.FilterUpdateType = {})); + /** + * The domain type for a filter + */ + var FilterDomainType; + (function (FilterDomainType) { + /** + * The domain values that are relevant to the specified filter + * i.e. the domain is restricted by a previous filter + */ + FilterDomainType["Relevant"] = "relevant"; + /** + * list of all possible domain values from database + */ + FilterDomainType["Database"] = "database"; + })(FilterDomainType = Tableau.FilterDomainType || (Tableau.FilterDomainType = {})); + /** + * The option for specifying which values to include for filtering + * Indicates what to do with null values for a given filter or mark selection call. + */ + var FilterNullOption; + (function (FilterNullOption) { + FilterNullOption["NullValues"] = "null-values"; + FilterNullOption["NonNullValues"] = "non-null-values"; + FilterNullOption["AllValues"] = "all-values"; + })(FilterNullOption = Tableau.FilterNullOption || (Tableau.FilterNullOption = {})); + /** + * Enum that serves as a filter on the DataValues returned from `getSummaryDataReaderAsync`, + * `getUnderlyingTableDataReaderAsync` and `getLogicalTableDataReaderAsync`. + * This is an optimization of returned data values only. Tableau versions prior to 2021.2 + * will pass the data across and populate the DataValue properties. + * Please note that all properties not requested will be `undefined` in the DataValue results. + * @since 1.5.0 + */ + var IncludeDataValuesOption; + (function (IncludeDataValuesOption) { + /** DataValues will include all properties.*/ + IncludeDataValuesOption["AllValues"] = "all-values"; + /** DataValues will only include value and nativeValue properties.*/ + IncludeDataValuesOption["OnlyNativeValues"] = "only-native-values"; + /** DataValues will only include formattedValue properties. */ + IncludeDataValuesOption["OnlyFormattedValues"] = "only-formatted-values"; + })(IncludeDataValuesOption = Tableau.IncludeDataValuesOption || (Tableau.IncludeDataValuesOption = {})); + /** + * Type of mark for a given marks card in a viz. + */ + var MarkType; + (function (MarkType) { + MarkType["Bar"] = "bar"; + MarkType["Line"] = "line"; + MarkType["Area"] = "area"; + MarkType["Square"] = "square"; + MarkType["Circle"] = "circle"; + MarkType["Shape"] = "shape"; + MarkType["Text"] = "text"; + MarkType["Map"] = "map"; + MarkType["Pie"] = "pie"; + MarkType["GanttBar"] = "gantt-bar"; + MarkType["Polygon"] = "polygon"; + })(MarkType = Tableau.MarkType || (Tableau.MarkType = {})); + /** + * An enumeration describing the different types of allowable values. + * This is used for restricting the domain of a parameter + */ + var ParameterValueType; + (function (ParameterValueType) { + ParameterValueType["All"] = "all"; + ParameterValueType["List"] = "list"; + ParameterValueType["Range"] = "range"; + })(ParameterValueType = Tableau.ParameterValueType || (Tableau.ParameterValueType = {})); + /** + * Date period used in filters and in parameters. + */ + var PeriodType; + (function (PeriodType) { + PeriodType["Years"] = "years"; + PeriodType["Quarters"] = "quarters"; + PeriodType["Months"] = "months"; + PeriodType["Weeks"] = "weeks"; + PeriodType["Days"] = "days"; + PeriodType["Hours"] = "hours"; + PeriodType["Minutes"] = "minutes"; + PeriodType["Seconds"] = "seconds"; + })(PeriodType = Tableau.PeriodType || (Tableau.PeriodType = {})); + var QuickTableCalcType; + (function (QuickTableCalcType) { + QuickTableCalcType["RunningTotal"] = "running-total"; + QuickTableCalcType["Difference"] = "difference"; + QuickTableCalcType["PercentDifference"] = "percent-difference"; + QuickTableCalcType["PercentOfTotal"] = "percent-of-total"; + QuickTableCalcType["Rank"] = "rank"; + QuickTableCalcType["Percentile"] = "percentile"; + QuickTableCalcType["MovingAverage"] = "moving-average"; + QuickTableCalcType["YTDTotal"] = "ytd-total"; + QuickTableCalcType["CompoundGrowthRate"] = "compound-growth-rate"; + QuickTableCalcType["YearOverYearGrowth"] = "year-over-year-growth"; + QuickTableCalcType["YTDGrowth"] = "ytd-growth"; + QuickTableCalcType["Undefined"] = "undefined"; + })(QuickTableCalcType = Tableau.QuickTableCalcType || (Tableau.QuickTableCalcType = {})); + /** + * Enum for specifying the selection type for select marks api. + */ + var SelectionUpdateType; + (function (SelectionUpdateType) { + SelectionUpdateType["Replace"] = "select-replace"; + SelectionUpdateType["Add"] = "select-add"; + SelectionUpdateType["Remove"] = "select-remove"; + })(SelectionUpdateType = Tableau.SelectionUpdateType || (Tableau.SelectionUpdateType = {})); + /** + * The type of sheet a [[Sheet]] object represents + */ + var SheetType; + (function (SheetType) { + SheetType["Dashboard"] = "dashboard"; + SheetType["Story"] = "story"; + SheetType["Worksheet"] = "worksheet"; + })(SheetType = Tableau.SheetType || (Tableau.SheetType = {})); + var SortDirection; + (function (SortDirection) { + SortDirection["Increasing"] = "increasing"; + SortDirection["Decreasing"] = "decreasing"; + })(SortDirection = Tableau.SortDirection || (Tableau.SortDirection = {})); + var TrendLineModelType; + (function (TrendLineModelType) { + TrendLineModelType["Linear"] = "linear"; + TrendLineModelType["Logarithmic"] = "logarithmic"; + TrendLineModelType["Exponential"] = "exponential"; + TrendLineModelType["Polynomial"] = "polynomial"; + })(TrendLineModelType = Tableau.TrendLineModelType || (Tableau.TrendLineModelType = {})); + /** + * Enum that represents the replay speed of an animation. + * @since 1.7.0 + */ + var ReplaySpeedType; + (function (ReplaySpeedType) { + /** Used for setting the replay speed of an animation to 0.5x.*/ + ReplaySpeedType["Slow"] = "slow"; + /** Used for setting the replay speed of an animation to 1.0x.*/ + ReplaySpeedType["Normal"] = "normal"; + /** Used for setting the replay speed of an animation to 2.0x.*/ + ReplaySpeedType["Fast"] = "fast"; + })(ReplaySpeedType = Tableau.ReplaySpeedType || (Tableau.ReplaySpeedType = {})); + /** + * Enum that represents the selection state of a level in a hierarchical filter + * @since Extensions 1.10.0 + */ + var HierarchicalLevelSelectionState; + (function (HierarchicalLevelSelectionState) { + HierarchicalLevelSelectionState["AllSelected"] = "all-selected"; + HierarchicalLevelSelectionState["NoneSelected"] = "none-selected"; + HierarchicalLevelSelectionState["SomeSelected"] = "some-selected"; + HierarchicalLevelSelectionState["UnknownSelected"] = "unknown-selected"; + })(HierarchicalLevelSelectionState = Tableau.HierarchicalLevelSelectionState || (Tableau.HierarchicalLevelSelectionState = {})); + Tableau.ZoneVisibilityType = __assign({}, DashboardObjectVisibilityType); +})(Tableau || (Tableau = {})); +module.exports = Tableau; + + +/***/ }), + +/***/ "../api-external-contract-js/lib/src/SharedApiExternalContract.js": +/*!************************************************************************!*\ + !*** ../api-external-contract-js/lib/src/SharedApiExternalContract.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +// This file re-exports everything which is part of the shared api public interface +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +__export(__webpack_require__(/*! ./ExternalContract/Shared/Enums */ "../api-external-contract-js/lib/src/ExternalContract/Shared/Enums.js")); +var Tableau_1 = __webpack_require__(/*! ./ExternalContract/Shared/Namespaces/Tableau */ "../api-external-contract-js/lib/src/ExternalContract/Shared/Namespaces/Tableau.js"); +exports.AnalyticsObjectType = Tableau_1.AnalyticsObjectType; +exports.AnnotationType = Tableau_1.AnnotationType; +exports.ClassNameKey = Tableau_1.ClassNameKey; +exports.ColumnType = Tableau_1.ColumnType; +exports.DashboardLayoutChange = Tableau_1.DashboardLayoutChange; +exports.DashboardObjectType = Tableau_1.DashboardObjectType; +exports.DashboardObjectVisibilityType = Tableau_1.DashboardObjectVisibilityType; +exports.DataType = Tableau_1.DataType; +exports.DateRangeType = Tableau_1.DateRangeType; +exports.DialogStyle = Tableau_1.DialogStyle; +exports.EncodingType = Tableau_1.EncodingType; +exports.FieldAggregationType = Tableau_1.FieldAggregationType; +exports.FieldRoleType = Tableau_1.FieldRoleType; +exports.FilterDomainType = Tableau_1.FilterDomainType; +exports.FilterNullOption = Tableau_1.FilterNullOption; +exports.FilterType = Tableau_1.FilterType; +exports.FilterUpdateType = Tableau_1.FilterUpdateType; +exports.HierarchicalLevelSelectionState = Tableau_1.HierarchicalLevelSelectionState; +exports.IncludeDataValuesOption = Tableau_1.IncludeDataValuesOption; +exports.MarkType = Tableau_1.MarkType; +exports.ParameterValueType = Tableau_1.ParameterValueType; +exports.PeriodType = Tableau_1.PeriodType; +exports.QuickTableCalcType = Tableau_1.QuickTableCalcType; +exports.ReplaySpeedType = Tableau_1.ReplaySpeedType; +exports.SelectionUpdateType = Tableau_1.SelectionUpdateType; +exports.SheetType = Tableau_1.SheetType; +exports.SortDirection = Tableau_1.SortDirection; +exports.TrendLineModelType = Tableau_1.TrendLineModelType; +exports.ZoneVisibilityType = Tableau_1.ZoneVisibilityType; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/JsApiInternalContract.js": +/*!********************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/JsApiInternalContract.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +/** + * This is your main. This is where you re-export everything you want to be publicly available. + * + * The build enforces that the file has the same name as the global variable that is exported. + */ +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +// The following polyfills are needed for IE11 +__webpack_require__(/*! core-js/es/number/is-integer */ "../../node_modules/core-js/es/number/is-integer.js"); +__webpack_require__(/*! core-js/es/number/is-nan */ "../../node_modules/core-js/es/number/is-nan.js"); +__webpack_require__(/*! core-js/es/object/assign */ "../../node_modules/core-js/es/object/assign.js"); +// Export the version of the internal contract to be available at runtime +// This file is generated by yarn publish:bump via scripts/publish-check.ts +// updateInternalContractRuntimeVersion in the monorepo root. +var internalContractVersion = __webpack_require__(/*! ../internal-contract-version.json */ "../api-internal-contract-js/lib/internal-contract-version.json"); +exports.INTERNAL_CONTRACT_VERSION = internalContractVersion; +__export(__webpack_require__(/*! ./contract/DataTypeConverter */ "../api-internal-contract-js/lib/src/contract/DataTypeConverter.js")); +__export(__webpack_require__(/*! ./contract/Enums */ "../api-internal-contract-js/lib/src/contract/Enums.js")); +__export(__webpack_require__(/*! ./contract/Notifications */ "../api-internal-contract-js/lib/src/contract/Notifications.js")); +__export(__webpack_require__(/*! ./contract/Parameters */ "../api-internal-contract-js/lib/src/contract/Parameters.js")); +__export(__webpack_require__(/*! ./contract/Verbs */ "../api-internal-contract-js/lib/src/contract/Verbs.js")); +__export(__webpack_require__(/*! ./interface/AskDataInterface */ "../api-internal-contract-js/lib/src/interface/AskDataInterface.js")); +__export(__webpack_require__(/*! ./interface/VqlInterface */ "../api-internal-contract-js/lib/src/interface/VqlInterface.js")); +__export(__webpack_require__(/*! ./messaging/CrossFrameMessenger */ "../api-internal-contract-js/lib/src/messaging/CrossFrameMessenger.js")); +__export(__webpack_require__(/*! ./messaging/interface/MessageTypes */ "../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js")); +__export(__webpack_require__(/*! ./versioning/external/ExternalIdentityVersionConverter */ "../api-internal-contract-js/lib/src/versioning/external/ExternalIdentityVersionConverter.js")); +__export(__webpack_require__(/*! ./versioning/external/ExternalVersionConverterFactory */ "../api-internal-contract-js/lib/src/versioning/external/ExternalVersionConverterFactory.js")); +__export(__webpack_require__(/*! ./versioning/VersionConverterFactory */ "../api-internal-contract-js/lib/src/versioning/VersionConverterFactory.js")); +// Export the version number of messaging for consumers to use. +// Be very careful making any updates to this contract which break version compatibility. +exports.MESSAGING_VERSION = { + major: 1, + minor: 0, + fix: 0, +}; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/contract/DataTypeConverter.js": +/*!*************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/contract/DataTypeConverter.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Enums_1 = __webpack_require__(/*! ./Enums */ "../api-internal-contract-js/lib/src/contract/Enums.js"); +var DataTypeConverter = /** @class */ (function () { + function DataTypeConverter() { + } + DataTypeConverter.isSpecial = function (valueAsString) { + // Prior to ShowDataTablePresModel, special values come to us as + // '%null%', '%all%', '%wildcard%', '%missing%'... + // While this function will never return true for ShowDataTablePresModel conversion, + // it is as cheap as passing around a version and checking that. + // (See DataValueFormatter.cpp) + if (valueAsString.length > 2 && valueAsString[0] === '%' && valueAsString[valueAsString.length - 1] === '%') { + return true; + } + return false; + }; + // tslint:disable-next-line:no-any + DataTypeConverter.parseBoolean = function (booleanString) { + // boolean values come to us as 'true'|'false' + var normalizedBoolean = booleanString.toLowerCase(); + return normalizedBoolean !== 'true' && normalizedBoolean !== 'false' ? this.specialValueIndicator : normalizedBoolean === 'true'; + }; + // tslint:disable-next-line:no-any + DataTypeConverter.parseNumber = function (valueAsString) { + var value = Number(valueAsString); + return isNaN(value) ? this.specialValueIndicator : value; + }; + DataTypeConverter.parseDate = function (dateAsString) { + // Note that without a time, the date is assumed to be UTC + // Input of 2020-03-25 is printed as: Mar 24 2020 17:00:00 GMT-0700 + // This matches style used in existing convertFilterValuePresModel + var value = new Date(dateAsString); + return Number.isNaN(value.getTime()) ? null : value; + }; + DataTypeConverter.parseDateTime = function (dateAsString) { + // With a time, the date is assumed to be UTC. + // Our date format is always: yyyy-mm-dd hh:mm:ss + // Unfortunately, IE11 can't parse that format so we add a T between the day and time. + // We also add a Z so that it is UTC. (Without the Z, some browsers assume local, and others UTC) + var formattedDateString = dateAsString.replace(' ', 'T').concat('Z'); + var value = new Date(formattedDateString); + return Number.isNaN(value.getTime()) ? null : value; + }; + // tslint:disable-next-line:no-any + DataTypeConverter.convertValueAsStringToValue = function (valueAsString, type) { + // This is both DataDictionary and ShowDataTablePresModel compatible. + // In the DataDictionary, valueAsString can be '%null%' or '%missing%', while in + // ShowDataTablePresModel, we can get 'null' or 'missing', or '%null%' for string special values. + // For either of these cases, we return specialValueIndicator (or the original special string). + // To maintain backwards compatibilty, this converter: + // 1. returns a string for any special values + // 2. returns a string for any date + // Parameter min/max values can be undefined, so result is also undefined + if (valueAsString === undefined || valueAsString === null) { + return undefined; + } + if (this.isSpecial(valueAsString)) { + return valueAsString; + } + switch (type) { + case Enums_1.DataType.Bool: + return this.parseBoolean(valueAsString); + case Enums_1.DataType.Int: + case Enums_1.DataType.Float: + // Return special value '%null%' for any failure in parsing. + // We need to do that because ShowDataTablePresModel will give us strings like 'null' + // for special values. + return this.parseNumber(valueAsString); + case Enums_1.DataType.Date: + // For ShowDataTablePresModel, special values will be "null" which will fail to parse. + // In that case, we return '%null%'. + return this.parseDate(valueAsString) === null ? this.specialValueIndicator : valueAsString; + case Enums_1.DataType.DateTime: + // For ShowDataTablePresModel, special values will be "null" which will fail to parse. + // In that case, we return '%null%' + return this.parseDateTime(valueAsString) === null ? this.specialValueIndicator : valueAsString; + case Enums_1.DataType.Spatial: + case Enums_1.DataType.String: + default: + return valueAsString; + } + }; + // tslint:disable-next-line:no-any + DataTypeConverter.convertValueToNativeValue = function (value, type) { + // This converts from our 1.2 API that returns strings for specials, and dates as strings. + // It takes the special case of '%null%' and returns a null. + // For dates, it returns a Date object rather than a string. + // convertValueToNativeValue should be used to build a DataValue.nativeValue field. + // Parameter min/max can be undefined. If that is the case, nativeValue is treated like a special + if (value === undefined || value === null) { + return null; + } + switch (type) { + case Enums_1.DataType.Bool: + return typeof value === 'string' ? null : value; + case Enums_1.DataType.Int: + case Enums_1.DataType.Float: + return typeof value === 'string' ? null : value; + case Enums_1.DataType.Date: + // Convert the string to Date object (or null if parsing fails ... we assume special) + return this.parseDate(value); + case Enums_1.DataType.DateTime: + // Convert the string to Date object (or null if parsing fails ... we assume special) + return this.parseDateTime(value); + case Enums_1.DataType.String: + return this.isSpecial(value) ? null : value; + case Enums_1.DataType.Spatial: + default: + return value; + } + }; + // tslint:disable-next-line:no-any + DataTypeConverter.convertStringValueToNativeValue = function (value, type) { + // This handles the conversion from string directly to native value for all types + return this.convertValueToNativeValue(this.convertValueAsStringToValue(value, type), type); + }; + DataTypeConverter.specialValueIndicator = '%null%'; + return DataTypeConverter; +}()); +exports.DataTypeConverter = DataTypeConverter; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/contract/Enums.js": +/*!*************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/contract/Enums.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ExtensionContext; +(function (ExtensionContext) { + ExtensionContext["Desktop"] = "desktop"; + ExtensionContext["Server"] = "server"; + ExtensionContext["Unknown"] = "unknown"; +})(ExtensionContext = exports.ExtensionContext || (exports.ExtensionContext = {})); +var ExtensionMode; +(function (ExtensionMode) { + ExtensionMode["Authoring"] = "authoring"; + ExtensionMode["Viewing"] = "viewing"; + ExtensionMode["Unknown"] = "unknown"; +})(ExtensionMode = exports.ExtensionMode || (exports.ExtensionMode = {})); +var AnnotateEnum; +(function (AnnotateEnum) { + AnnotateEnum["Mark"] = "mark"; + AnnotateEnum["Point"] = "point"; + AnnotateEnum["Area"] = "area"; +})(AnnotateEnum = exports.AnnotateEnum || (exports.AnnotateEnum = {})); +var ColumnType; +(function (ColumnType) { + ColumnType["Discrete"] = "discrete"; + ColumnType["Continuous"] = "continuous"; +})(ColumnType = exports.ColumnType || (exports.ColumnType = {})); +var DashboardObjectType; +(function (DashboardObjectType) { + DashboardObjectType["Blank"] = "blank"; + DashboardObjectType["Worksheet"] = "worksheet"; + DashboardObjectType["QuickFilter"] = "quick-filter"; + DashboardObjectType["ParameterControl"] = "parameter-control"; + DashboardObjectType["PageFilter"] = "page-filter"; + DashboardObjectType["Legend"] = "legend"; + DashboardObjectType["Title"] = "title"; + DashboardObjectType["Text"] = "text"; + DashboardObjectType["Image"] = "image"; + DashboardObjectType["WebPage"] = "web-page"; + DashboardObjectType["Extension"] = "extension"; +})(DashboardObjectType = exports.DashboardObjectType || (exports.DashboardObjectType = {})); +var DataType; +(function (DataType) { + DataType["String"] = "string"; + DataType["Int"] = "int"; + DataType["Float"] = "float"; + DataType["Bool"] = "bool"; + DataType["Date"] = "date"; + DataType["DateTime"] = "date-time"; + DataType["Spatial"] = "spatial"; +})(DataType = exports.DataType || (exports.DataType = {})); +var DialogStyle; +(function (DialogStyle) { + DialogStyle["Window"] = "window"; + DialogStyle["Modal"] = "modal"; + DialogStyle["Modeless"] = "modeless"; +})(DialogStyle = exports.DialogStyle || (exports.DialogStyle = {})); +var EncodedDataType; +(function (EncodedDataType) { + EncodedDataType["Number"] = "number"; + EncodedDataType["String"] = "string"; + EncodedDataType["Date"] = "date"; + EncodedDataType["Boolean"] = "boolean"; +})(EncodedDataType = exports.EncodedDataType || (exports.EncodedDataType = {})); +var ErrorCodes; +(function (ErrorCodes) { + ErrorCodes["INITIALIZATION_ERROR"] = "initialization-error"; + ErrorCodes["INTERNAL_ERROR"] = "internal-error"; + ErrorCodes["MISSING_ENUM_MAPPING"] = "missing-enum-mapping"; + ErrorCodes["MISSING_PARAMETER"] = "missing-parameter"; + ErrorCodes["PERMISSION_DENIED"] = "permission-denied"; + ErrorCodes["PRES_MODEL_PARSING_ERROR"] = "pres-model-parsing-error"; + ErrorCodes["VERSION_NOT_CONFIGURED"] = "version-not-configured"; + ErrorCodes["VISIBILITY_ERROR"] = "visibility-error"; + ErrorCodes["UNKNOWN_VERB_ID"] = "unknown-verb-id"; +})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {})); +var FieldAggregationType; +(function (FieldAggregationType) { + FieldAggregationType["Sum"] = "sum"; + FieldAggregationType["Avg"] = "avg"; + FieldAggregationType["Min"] = "min"; + FieldAggregationType["Max"] = "max"; + FieldAggregationType["Stdev"] = "stdev"; + FieldAggregationType["Stdevp"] = "stdevp"; + FieldAggregationType["Var"] = "var"; + FieldAggregationType["Varp"] = "varp"; + FieldAggregationType["Count"] = "count"; + FieldAggregationType["Countd"] = "countd"; + FieldAggregationType["Median"] = "median"; + FieldAggregationType["Attr"] = "attr"; + FieldAggregationType["None"] = "none"; + FieldAggregationType["Year"] = "year"; + FieldAggregationType["Qtr"] = "qtr"; + FieldAggregationType["Month"] = "month"; + FieldAggregationType["Day"] = "day"; + FieldAggregationType["Hour"] = "hour"; + FieldAggregationType["Minute"] = "minute"; + FieldAggregationType["Second"] = "second"; + FieldAggregationType["Week"] = "week"; + FieldAggregationType["Weekday"] = "weekday"; + FieldAggregationType["MonthYear"] = "month-year"; + FieldAggregationType["Mdy"] = "mdy"; + FieldAggregationType["End"] = "end"; + FieldAggregationType["TruncYear"] = "trunc-year"; + FieldAggregationType["TruncQtr"] = "trunc-qtr"; + FieldAggregationType["TruncMonth"] = "trunc-month"; + FieldAggregationType["TruncWeek"] = "trunc-week"; + FieldAggregationType["TruncDay"] = "trunc-day"; + FieldAggregationType["TruncHour"] = "trunc-hour"; + FieldAggregationType["TruncMinute"] = "trunc-minute"; + FieldAggregationType["TruncSecond"] = "trunc-second"; + FieldAggregationType["Quart1"] = "quart1"; + FieldAggregationType["Quart3"] = "quart3"; + FieldAggregationType["Skewness"] = "skewness"; + FieldAggregationType["Kurtosis"] = "kurtosis"; + FieldAggregationType["InOut"] = "in-out"; + FieldAggregationType["User"] = "user"; +})(FieldAggregationType = exports.FieldAggregationType || (exports.FieldAggregationType = {})); +var FieldRoleType; +(function (FieldRoleType) { + FieldRoleType["Dimension"] = "dimension"; + FieldRoleType["Measure"] = "measure"; + FieldRoleType["Unknown"] = "unknown"; +})(FieldRoleType = exports.FieldRoleType || (exports.FieldRoleType = {})); +/** + * The different update types for applying filter. + */ +var FilterUpdateType; +(function (FilterUpdateType) { + FilterUpdateType["Add"] = "add"; + FilterUpdateType["All"] = "all"; + FilterUpdateType["Replace"] = "replace"; + FilterUpdateType["Remove"] = "remove"; +})(FilterUpdateType = exports.FilterUpdateType || (exports.FilterUpdateType = {})); +var SheetType; +(function (SheetType) { + SheetType["Dashboard"] = "dashboard"; + SheetType["Story"] = "story"; + SheetType["Worksheet"] = "worksheet"; +})(SheetType = exports.SheetType || (exports.SheetType = {})); +var DomainRestrictionType; +(function (DomainRestrictionType) { + DomainRestrictionType["All"] = "all"; + DomainRestrictionType["List"] = "list"; + DomainRestrictionType["Range"] = "range"; +})(DomainRestrictionType = exports.DomainRestrictionType || (exports.DomainRestrictionType = {})); +var DateStepPeriod; +(function (DateStepPeriod) { + DateStepPeriod["Years"] = "years"; + DateStepPeriod["Quarters"] = "quarters"; + DateStepPeriod["Months"] = "months"; + DateStepPeriod["Weeks"] = "weeks"; + DateStepPeriod["Days"] = "days"; + DateStepPeriod["Hours"] = "hours"; + DateStepPeriod["Minutes"] = "minutes"; + DateStepPeriod["Seconds"] = "seconds"; +})(DateStepPeriod = exports.DateStepPeriod || (exports.DateStepPeriod = {})); +/** + * The option for specifying which values to include for filtering. + */ +var FilterNullOption; +(function (FilterNullOption) { + FilterNullOption["NullValues"] = "nullvalues"; + FilterNullOption["NonNullValues"] = "nonnullvalues"; + FilterNullOption["AllValues"] = "allvalues"; +})(FilterNullOption = exports.FilterNullOption || (exports.FilterNullOption = {})); +/** + * The type of filter domain + */ +var FilterDomainType; +(function (FilterDomainType) { + FilterDomainType["Relevant"] = "relevant"; + FilterDomainType["Database"] = "database"; +})(FilterDomainType = exports.FilterDomainType || (exports.FilterDomainType = {})); +/** + * Internal enum for specifying the selection type for select marks api. + */ +var SelectionUpdateType; +(function (SelectionUpdateType) { + SelectionUpdateType["Replace"] = "select-replace"; + SelectionUpdateType["Add"] = "select-add"; + SelectionUpdateType["Remove"] = "select-remove"; +})(SelectionUpdateType = exports.SelectionUpdateType || (exports.SelectionUpdateType = {})); +/** + * Internal enum for specifying the included values type for range selection. + */ +var QuantitativeIncludedValues; +(function (QuantitativeIncludedValues) { + QuantitativeIncludedValues["IncludeNull"] = "include-null"; + QuantitativeIncludedValues["IncludeNonNull"] = "include-non-null"; + QuantitativeIncludedValues["IncludeAll"] = "include-all"; +})(QuantitativeIncludedValues = exports.QuantitativeIncludedValues || (exports.QuantitativeIncludedValues = {})); +/** + * Internal enum for specifying a hierarchical level selection state. + */ +var HierarchicalLevelSelectionState; +(function (HierarchicalLevelSelectionState) { + HierarchicalLevelSelectionState["AllSelected"] = "all-selected"; + HierarchicalLevelSelectionState["NoneSelected"] = "none-selected"; + HierarchicalLevelSelectionState["SomeSelected"] = "some-selected"; + HierarchicalLevelSelectionState["UnknownSelected"] = "unknown-selected"; +})(HierarchicalLevelSelectionState = exports.HierarchicalLevelSelectionState || (exports.HierarchicalLevelSelectionState = {})); +/** + * Type of mark for a given marks card in a viz. + */ +var MarkType; +(function (MarkType) { + MarkType["Bar"] = "bar"; + MarkType["Line"] = "line"; + MarkType["Area"] = "area"; + MarkType["Square"] = "square"; + MarkType["Circle"] = "circle"; + MarkType["Shape"] = "shape"; + MarkType["Text"] = "text"; + MarkType["Map"] = "map"; + MarkType["Pie"] = "pie"; + MarkType["GanttBar"] = "gantt-bar"; + MarkType["Polygon"] = "polygon"; +})(MarkType = exports.MarkType || (exports.MarkType = {})); +/** + * Internal enum for specifying the type of filter + */ +var FilterType; +(function (FilterType) { + FilterType["Categorical"] = "categorical"; + FilterType["Range"] = "range"; + FilterType["RelativeDate"] = "relativeDate"; + FilterType["Hierarchical"] = "hierarchical"; +})(FilterType = exports.FilterType || (exports.FilterType = {})); +/** + * Internal enum for specifying the DateRangeType of a relative date filter + */ +var DateRangeType; +(function (DateRangeType) { + /** + * Refers to the last day, week, month, etc. of the date period. + */ + DateRangeType["Last"] = "last"; + /** + * Refers to the last N days, weeks, months, etc. of the date period. + */ + DateRangeType["LastN"] = "lastN"; + /** + * Refers to the next day, week, month, etc. of the date period. + */ + DateRangeType["Next"] = "next"; + /** + * Refers to the next N days, weeks, months, etc. of the date period. + */ + DateRangeType["NextN"] = "nextN"; + /** + * Refers to the current day, week, month, etc. of the date period. + */ + DateRangeType["Current"] = "current"; + /** + * Refers to everything up to and including the current day, week, month, etc. of the date period. + */ + DateRangeType["ToDate"] = "toDate"; +})(DateRangeType = exports.DateRangeType || (exports.DateRangeType = {})); +/** + * Used to determine if the launching of an extension dialog succeeded or failed. + */ +var ExtensionDialogResult; +(function (ExtensionDialogResult) { + ExtensionDialogResult["DialogAlreadyOpen"] = "dialog-already-open"; + ExtensionDialogResult["InvalidDomain"] = "invalid-domain"; + ExtensionDialogResult["Success"] = "success"; +})(ExtensionDialogResult = exports.ExtensionDialogResult || (exports.ExtensionDialogResult = {})); +// Enumeration for ApiShowData table id sentinels. +var ApiShowDataTableSentinel; +(function (ApiShowDataTableSentinel) { + // find the one logical table - used in version compatibility check for getUnderlyingDataTable and getLogicalDataTable commands + ApiShowDataTableSentinel["SingleTableId"] = "single-table-id-sentinel"; + ApiShowDataTableSentinel["SingleTableCaption"] = "Single table id sentinel"; +})(ApiShowDataTableSentinel = exports.ApiShowDataTableSentinel || (exports.ApiShowDataTableSentinel = {})); +/** + * Used to optimize the getSummaryData/getUnderlyingTableData results + * Mapped from external IncludeDataValuesOption + */ +var ApiShowDataTableFormat; +(function (ApiShowDataTableFormat) { + ApiShowDataTableFormat["NativeValuesOnly"] = "native-values-only"; + ApiShowDataTableFormat["FormattedValuesOnly"] = "formatted-values-only"; + ApiShowDataTableFormat["NativeAndFormattedValues"] = "native-and-formatted-values"; +})(ApiShowDataTableFormat = exports.ApiShowDataTableFormat || (exports.ApiShowDataTableFormat = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/contract/Notifications.js": +/*!*********************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/contract/Notifications.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var NotificationId; +(function (NotificationId) { + NotificationId["CustomMarkContextMenuClicked"] = "custom-mark-context-menu-clicked"; + NotificationId["ContextMenuClick"] = "context-menu-click"; + NotificationId["CustomViewRemoved"] = "custom-view-removed"; + NotificationId["CustomViewSaved"] = "custom-view-saved"; + NotificationId["CustomViewSetDefault"] = "custom-view-set-default"; + NotificationId["CustomViewsLoaded"] = "custom-views-loaded"; + NotificationId["DashboardLayoutChanged"] = "dashboard-layout-changed"; + NotificationId["EditButtonClicked"] = "edit-button-clicked"; + NotificationId["EditInDesktopButtonClicked"] = "edit-in-desktop-button-clicked"; + NotificationId["ExtensionDialogUpdate"] = "extension-dialog-update"; + NotificationId["FilterChanged"] = "filter-changed"; + NotificationId["FirstVizSizeKnown"] = "first-viz-size-known"; + NotificationId["ParameterChanged"] = "parameter-changed"; + NotificationId["SelectedMarksChanged"] = "selected-marks-changed"; + NotificationId["SettingsChanged"] = "settings-changed"; + NotificationId["TestConversionNotification"] = "test-conversion-notification"; + NotificationId["ToolbarStateChanged"] = "toolbar-state-changed"; + NotificationId["VizInteractive"] = "viz-interactive"; + NotificationId["AskDataInteractive"] = "ask-data-interactive"; + NotificationId["WorkbookReadyToClose"] = "workbook-ready-to-close"; + NotificationId["WorkbookFormattingChanged"] = "workbook-formatting-changed"; + NotificationId["WorkbookPublished"] = "workbook-published"; + NotificationId["WorkbookPublishedAs"] = "workbook-published-as"; + NotificationId["UrlAction"] = "url-action"; + NotificationId["TabSwitched"] = "tab-switched"; + NotificationId["StoryPointSwitched"] = "story-point-switched"; +})(NotificationId = exports.NotificationId || (exports.NotificationId = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/contract/Parameters.js": +/*!******************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/contract/Parameters.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// PLEASE KEEP IN ALPHABETICAL ORDER. This helps with visually finding entries, knowing where to put +// new ones, and merge conflicts. +var ParameterId; +(function (ParameterId) { + ParameterId["ActiveTablesInfo"] = "active-tables-info"; + ParameterId["AnchorDate"] = "anchor-date"; + ParameterId["AnnotateEnum"] = "annotate-enum"; + ParameterId["AnnotationList"] = "annotation-list"; + ParameterId["CategoricalDomain"] = "categorical-domain"; + ParameterId["ClickThroughEnabled"] = "click-through-enabled"; + ParameterId["ColumnsToInclude"] = "columns-to-include"; + ParameterId["ColumnsToIncludeById"] = "columns-to-include-by-id"; + ParameterId["ConnectionDescriptionSummaries"] = "connection-description-summaries"; + ParameterId["CustomView"] = "custom-view"; + ParameterId["CustomViewIsDefault"] = "custom-view-is-default"; + ParameterId["CustomViewIsPublic"] = "custom-view-is-public"; + ParameterId["CustomViewLuid"] = "custom-view-luid"; + ParameterId["CustomViewName"] = "custom-view-name"; + ParameterId["CustomViews"] = "custom-views"; + ParameterId["Dashboard"] = "dashboard"; + ParameterId["DashboardFilters"] = "dashboard-filters"; + ParameterId["DashboardName"] = "dashboard"; + ParameterId["DashboardObjectPositionAndSizeUpdate"] = "dashboard-object-position-and-size-update"; + ParameterId["DashboardObjectPositionAndSizeUpdateList"] = "dashboard-object-position-and-size-update-list"; + ParameterId["DataRowIndex"] = "data-row-index"; + ParameterId["DataSchema"] = "data-schema"; + ParameterId["DataSource"] = "data-source"; + ParameterId["DataSourceDataTable"] = "data-source-data-table"; + ParameterId["DataSourceId"] = "data-source-id"; + ParameterId["DataSourceName"] = "data-source-name"; + ParameterId["DataTable"] = "data-table"; + ParameterId["DataTableReader"] = "data-table-reader"; + ParameterId["DateRangeType"] = "date-range-type"; + ParameterId["DeltaTimeMs"] = "delta-time-ms"; + ParameterId["DimValSelectionModels"] = "dimensionValueSelectionModels"; + ParameterId["DomainType"] = "domain-type"; + ParameterId["EmbeddingBootstrapInfo"] = "embedding-bootstrap-info"; + ParameterId["ExtensionBootstrapInfo"] = "extension-bootstrap-info"; + ParameterId["ExtensionContextMenuIds"] = "extension-context-menu-ids"; + ParameterId["ExtensionDialogH"] = "extension-dialog-height"; + ParameterId["ExtensionDialogPayload"] = "extension-dialog-payload"; + ParameterId["ExtensionDialogResult"] = "extension-dialog-result"; + ParameterId["ExtensionDialogStyle"] = "extension-dialog-style"; + ParameterId["ExtensionDialogUrl"] = "extension-dialog-url"; + ParameterId["ExtensionDialogW"] = "extension-dialog-width"; + ParameterId["ExtensionLocator"] = "extension-locator"; + ParameterId["ExtensionSettingsInfo"] = "extension-settings-info"; + ParameterId["ExtensionZoneId"] = "extension-zone-id"; + ParameterId["ExternalMenuDescription"] = "external-menu-description"; + ParameterId["ExternalMenuHeader"] = "external-menu-header"; + ParameterId["ExternalMenuItemDisplayName"] = "external-menu-item-display-name"; + ParameterId["ExternalMenuItemId"] = "external-menu-item-id"; + ParameterId["Field"] = "field"; + ParameterId["FieldId"] = "field-id"; + ParameterId["FieldName"] = "field-name"; + ParameterId["FilterLevels"] = "filter-levels"; + ParameterId["FilterRangeMax"] = "filter-range-max"; + ParameterId["FilterRangeMin"] = "filter-range-min"; + ParameterId["FilterRangeNullOption"] = "filter-range-null-option"; + ParameterId["FilterUpdateType"] = "filter-update-type"; + ParameterId["FilterValues"] = "filter-values"; + ParameterId["FontNameListItems"] = "font-name-list-items"; + ParameterId["FormattedText"] = "formatted-text"; + ParameterId["FunctionName"] = "function-name"; + ParameterId["HierValSelectionModels"] = "hierarchicalValueSelectionModels"; + ParameterId["HighlightedData"] = "highlighted-data"; + ParameterId["IgnoreAliases"] = "ignore-aliases"; + ParameterId["IgnoreSelection"] = "ignore-selection"; + ParameterId["IncludeAllColumns"] = "include-all-columns"; + ParameterId["InvalidAggFieldName"] = "invalid-agg-field-name"; + ParameterId["InvalidDates"] = "invalid-dates"; + ParameterId["InvalidFieldCaption"] = "invalid-field-caption"; + ParameterId["InvalidFields"] = "invalid-fields"; + ParameterId["InvalidValues"] = "invalid-values"; + ParameterId["IsExcludeMode"] = "is-exclude"; + ParameterId["IsExtensionDialog"] = "is-extension-dialog"; + ParameterId["JoinDescription"] = "join-description"; + ParameterId["LogicalTableId"] = "logical-table-id"; + ParameterId["LogicalTableInfoList"] = "logical-table-info-list"; + ParameterId["MaxHeight"] = "max-height"; + ParameterId["MaxRows"] = "max-rows"; + ParameterId["MaxWidth"] = "max-width"; + ParameterId["MinHeight"] = "min-height"; + ParameterId["MinWidth"] = "min-width"; + ParameterId["PageRowCount"] = "page-row-count"; + ParameterId["ParameterCaption"] = "paremeter-caption"; + ParameterId["ParameterError"] = "parameter-error"; + ParameterId["ParameterFieldName"] = "parameter-field-name"; + ParameterId["ParameterInfo"] = "parameter-info"; + ParameterId["ParameterInfos"] = "parameter-infos"; + ParameterId["ParameterValue"] = "parameter-value"; + ParameterId["PeriodType"] = "period-type"; + ParameterId["QuantitativeDomain"] = "quantitative-dmain"; + ParameterId["QuantRangeSelectionModels"] = "quantativeRangeSelectionModels"; + ParameterId["RangeN"] = "range-n"; + ParameterId["ReplaySpeed"] = "replay-speed"; + ParameterId["SelectedData"] = "selected-data"; + ParameterId["Selection"] = "selection"; + ParameterId["SelectionList"] = "selection-list"; + ParameterId["SelectionUpdateType"] = "selectionUpdateType"; + ParameterId["SettingsValues"] = "settings-values"; + ParameterId["SharedFilterSheets"] = "shared-filter-sheets"; + ParameterId["SharedFiltersInfo"] = "shared-filters-info"; + ParameterId["SheetName"] = "sheet-name"; + ParameterId["SheetPath"] = "sheet-path"; + ParameterId["ShouldRefreshDS"] = "should-refresh-ds"; + ParameterId["ShowDataTableFormat"] = "show-data-table-format"; + ParameterId["State"] = "state"; + ParameterId["StoryPointIndex"] = "story-point-index"; + ParameterId["StoryPointInfo"] = "story-point-info"; + ParameterId["SwitchToSheetName"] = "switch-to-sheet-name"; + ParameterId["TargetPoint"] = "target-point"; + ParameterId["TestConversionParameter"] = "test-conversion-parameter"; + ParameterId["Text"] = "formatted-text"; + ParameterId["UnderlyingDataTable"] = "underlying-data-table"; + ParameterId["UnderlyingSummaryDataTable"] = "underlying-summary-data-table"; + ParameterId["Url"] = "url"; + ParameterId["ViewDataTableCacheId"] = "view-data-table-cache-id"; + ParameterId["ViewDataTableId"] = "view-data-table-id"; + ParameterId["VisualId"] = "visual-id"; + ParameterId["VizAPIInputJson"] = "vizapi-input-json"; + ParameterId["VizAPISVG"] = "vizapi-svg"; + ParameterId["WorksheetName"] = "worksheet-name"; + ParameterId["WorksheetFilters"] = "worksheet-filters"; + ParameterId["ZoneIdsVisibilityMap"] = "zone-ids-visibility-map"; +})(ParameterId = exports.ParameterId || (exports.ParameterId = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/contract/Verbs.js": +/*!*************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/contract/Verbs.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// Declare this key type and export the NotificationId to make this behave like a string enum. +// +// PLEASE KEEP IN ALPHABETICAL ORDER. This helps with visually finding entries, knowing where to put +// new ones, and merge conflicts. +var VerbId; +(function (VerbId) { + VerbId["ActivateNextStoryPoint"] = "activate-next-story-point"; + VerbId["ActivatePreviousStoryPoint"] = "activate-previous-story-point"; + VerbId["ActivateSheet"] = "activateSheet"; + VerbId["ActivateStoryPoint"] = "activate-story-point"; + VerbId["AppendExternalMenuItem"] = "append-external-menu-item"; + VerbId["ApplyCategoricalFilter"] = "categorical-filter"; + VerbId["ApplyRangeFilter"] = "range-filter"; + VerbId["ApplyRelativeDateFilter"] = "apply-relative-date-Filter"; + VerbId["BlockExtension"] = "block-extension"; + VerbId["ChangeParameterValue"] = "change-parameter-value"; + VerbId["ChangeSharedFilter"] = "change-shared-filter"; + VerbId["ClearFilter"] = "clear-filter"; + VerbId["ClearSelectedMarks"] = "clear-selected-marks"; + VerbId["CloseDialog"] = "close-dialog"; + VerbId["CreateAnnotation"] = "create-annotation"; + VerbId["DashboardCategoricalFilter"] = "dashboard-categorical-filter"; + VerbId["DisplayDialog"] = "display-dialog"; + VerbId["DownloadWorkbook"] = "download-workbook"; + VerbId["ExecuteExternalMenuItem"] = "execute-external-menu-item"; + VerbId["ExportCrosstab"] = "export-crosstab"; + VerbId["ExportData"] = "export-data"; + VerbId["ExportImage"] = "export-image"; + VerbId["ExportPdf"] = "export-pdf"; + VerbId["ExportPowerpoint"] = "export-powerpoint"; + VerbId["FindParameter"] = "find-parameter"; + VerbId["GetActiveTables"] = "get-active-tables"; + VerbId["GetAllDataSources"] = "get-all-data-sources"; + VerbId["GetAnnotations"] = "get-annotations"; + VerbId["GetCategoricalDomain"] = "get-categorical-domain"; + VerbId["GetConnectionDescriptionSummaries"] = "get-connection-description-summaries"; + VerbId["GetCurrentSrc"] = "get-current-src"; + VerbId["GetCustomViews"] = "get-custom-views"; + VerbId["GetDashboardFilters"] = "get-dashboard-filters"; + VerbId["GetDataSource"] = "get-datasource"; + VerbId["GetDataSourceData"] = "get-datasource-data"; + VerbId["GetDataSources"] = "get-data-sources"; + VerbId["GetDataSummaryData"] = "get-summary-data"; + VerbId["GetDataSummaryDataReader"] = "get-summary-data-reader"; + VerbId["GetDataTableReaderPage"] = "get-data-table-reader-page"; + VerbId["GetEmbeddingClientInfo"] = "get-embedding-client-info"; + VerbId["GetField"] = "get-field"; + VerbId["GetFieldAndDataSource"] = "get-field-and-datasource"; + VerbId["GetFilters"] = "get-filters"; + VerbId["GetFonts"] = "get-fonts"; + VerbId["GetHighlightedMarks"] = "get-highlighted-marks"; + VerbId["GetJoinDescription"] = "get-join-description"; + VerbId["GetLogicalTableData"] = "get-logical-table-data"; + VerbId["GetLogicalTableDataReader"] = "get-logical-table-data-reader"; + VerbId["GetLogicalTables"] = "get-logical-tables"; + VerbId["GetParametersForSheet"] = "get-parameters-for-sheet"; + VerbId["GetRangeDomain"] = "get-range-domain"; + VerbId["GetSelectedMarks"] = "get-selected-marks"; + VerbId["GetSharedFilter"] = "get-shared-filter"; + VerbId["GetUnderlyingData"] = "get-underlying-data"; + VerbId["GetUnderlyingTableData"] = "get-underlying-table-data"; + VerbId["GetUnderlyingTableDataReader"] = "get-underlying-table-data-reader"; + VerbId["GetUnderlyingTables"] = "get-underlying-tables"; + VerbId["HierarchicalFilter"] = "hierachical-filter"; + VerbId["InitializeExtension"] = "initialize-extension"; + VerbId["MoveAndResizeZones"] = "move-and-resize-zones"; + VerbId["Redo"] = "redo"; + VerbId["RefreshDataSource"] = "refresh-data-source"; + VerbId["ReleaseDataTableReader"] = "release-data-table-reader"; + VerbId["RemoveAnnotation"] = "remove-annotation"; + VerbId["RemoveCustomView"] = "remove-custom-view"; + VerbId["RemoveExternalMenuItem"] = "remove-external-menu-item"; + VerbId["RenameExternalMenu"] = "rename-external-menu"; + VerbId["ReplayAnimation"] = "replay-animation"; + VerbId["RevertStoryPoint"] = "revert-story-point"; + VerbId["RevertWorkbook"] = "revert-workbook"; + VerbId["SaveExtensionSettings"] = "save-extension-settings"; + VerbId["SaveWorkbookAsCustomView"] = "save-workbook-as-custom-view"; + VerbId["SelectByValue"] = "select-by-value"; + VerbId["SetActiveCustomViewAsDefault"] = "set-active-custom-view-as-default"; + VerbId["SetAutoUpdate"] = "set-auto-update"; + VerbId["SetClickThrough"] = "set-click-through"; + VerbId["SetSheetSize"] = "set-sheet-size"; + VerbId["SetZoneVisibility"] = "set-zone-visibility"; + VerbId["Share"] = "share"; + VerbId["ShowCustomView"] = "show-custom-view"; + VerbId["TestConversionVerb"] = "test-conversion-verb"; + VerbId["Undo"] = "undo"; + VerbId["UpdateCustomView"] = "update-custom-view"; + VerbId["VizAPI"] = "viz-api"; +})(VerbId = exports.VerbId || (exports.VerbId = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/interface/AskDataInterface.js": +/*!*************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/interface/AskDataInterface.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var AskDataOptionNames; +(function (AskDataOptionNames) { + AskDataOptionNames["token"] = "token"; + AskDataOptionNames["origin"] = "origin"; + AskDataOptionNames["showEmbed"] = "showEmbed"; + AskDataOptionNames["showPin"] = "showPin"; + AskDataOptionNames["showSave"] = "showSave"; + AskDataOptionNames["showShare"] = "showShare"; + AskDataOptionNames["debug"] = ":jsdebug"; + AskDataOptionNames["ApiID"] = ":apiID"; + AskDataOptionNames["ApiExternalVersion"] = ":apiExternalVersion"; + AskDataOptionNames["ApiInternalVersion"] = ":apiInternalVersion"; + AskDataOptionNames["AskDataWebComponent"] = ":askDataWebComponent"; +})(AskDataOptionNames = exports.AskDataOptionNames || (exports.AskDataOptionNames = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/interface/VqlInterface.js": +/*!*********************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/interface/VqlInterface.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * These strings were *manually copied* from the server, + * workgroup/src/silos/tableau-server/libraries/tab-controller-vizql/src/com/tableausoftware/ + * controller/vizql/constants/ParameterKeys.java#L9 + * should be exported instead + * parameters that vizql will accept in an embedding URL + **/ +var VqlParameterNames; +(function (VqlParameterNames) { + VqlParameterNames["ONE"] = "1"; + VqlParameterNames["ALERTS"] = ":alerts"; + VqlParameterNames["ALIAS"] = "alias"; + VqlParameterNames["ALLOW_DEFERRED_BOOTSTRAP"] = ":allowDeferredBootstrap"; + VqlParameterNames["ALLOW_AUTOGEN_WORKSHEET_PHONE_LAYOUTS"] = "allowAutogenWorksheetPhoneLayouts"; + VqlParameterNames["API_ID"] = ":apiID"; + VqlParameterNames["APP"] = ":app"; + VqlParameterNames["ATTACHMENT"] = "attachment"; + VqlParameterNames["IS_IPAD_APP"] = "app"; + VqlParameterNames["ANIMATE_TRANSITION"] = ":animate_transition"; + VqlParameterNames["ASCENDING"] = "ascending"; + VqlParameterNames["AUTHENTICATION"] = "authentication"; + VqlParameterNames["ATTRIBUTES"] = "attributes"; + VqlParameterNames["AUTHORING_SHEET"] = ":authSheet"; + VqlParameterNames["AXIS"] = "axis"; + VqlParameterNames["BOOTSTRAP_WHEN_NOTIFIED"] = ":bootstrapWhenNotified"; + VqlParameterNames["BROWSER_BACK_BUTTON_UNDO"] = ":browserBackButtonUndo"; + VqlParameterNames["BROWSER_RENDERING_ON"] = "isBrowserRendering"; + VqlParameterNames["BROWSER_RENDERING_THRESHOLD"] = "browserRenderingThreshold"; + VqlParameterNames["CHARSET"] = "charset"; + VqlParameterNames["CLIENT_DIMENSION"] = "clientDimension"; + VqlParameterNames["CLIENT_IP"] = "client_ip"; + VqlParameterNames["CLIENT_NUM"] = "clientNum"; + VqlParameterNames["COLON_EMBEDDED"] = ":embedded"; + VqlParameterNames["COLON_MOBILE"] = ":mobile"; + VqlParameterNames["COLON_DEEP_LINKING_DISABLED"] = ":deepLinkingDisabled"; + VqlParameterNames["COLON_WATERMARK"] = ":watermark"; + VqlParameterNames["COMMENTS"] = ":comments"; + VqlParameterNames["COMMENTING_ENABLED"] = ":commentingEnabled"; + VqlParameterNames["COMMENTING_MENTIONS_ENABLED"] = ":commentingMentions"; + VqlParameterNames["CONNECTION"] = "connection"; + VqlParameterNames["CREATED_BY_FEATURE"] = "createdByFeature"; + VqlParameterNames["CRYPTED_PASSWORD"] = "crypted"; + VqlParameterNames["CSSDEBUG"] = ":cssdebug"; + VqlParameterNames["CSV"] = "csv"; + VqlParameterNames["CUSTOM_VIEWS"] = ":customViews"; + VqlParameterNames["CV"] = ":cv"; + VqlParameterNames["CV_ID"] = "cvId"; + VqlParameterNames["DASHBOARD_PORT_SIZE"] = "dashboardPortSize"; + VqlParameterNames["DATA_DETAILS"] = ":dataDetails"; + VqlParameterNames["DATASOURCE"] = "datasource"; + VqlParameterNames["DEBUG"] = ":debug"; + VqlParameterNames["DELAY"] = ":delay"; + VqlParameterNames["DEPTH"] = "depth"; + VqlParameterNames["DEVICE_TYPE"] = ":device"; + VqlParameterNames["DEVICE_PIXEL_RATIO"] = "devicePixelRatio"; + VqlParameterNames["DEVICE_PREVIEW_MODE"] = ":devicepreviewmode"; + VqlParameterNames["DIMENSIONS"] = ":dimensions"; + VqlParameterNames["DISABLE_SHARED_SESSIONS"] = ":disable_shared_sessions"; + VqlParameterNames["DISABLE_URL_ACTIONS_POPUPS"] = ":disableUrlActionsPopups"; + VqlParameterNames["DIRECTION"] = "direction"; + VqlParameterNames["DISPLAY_OVERLAY"] = ":display_overlay"; + VqlParameterNames["DISPLAY_SHARE"] = ":display_share"; + VqlParameterNames["DISPLAY_SPINNER"] = ":display_spinner"; + VqlParameterNames["DISPLAY_STATIC_IMAGE"] = ":display_static_image"; + VqlParameterNames["DISPLAY_TABS"] = "display_tabs"; + VqlParameterNames["DISPLAY_VIEW_COUNT"] = ":display_count"; + VqlParameterNames["IGNORE_STICKY_SESSION"] = ":ignore_sticky_session"; + VqlParameterNames["INCREMENT_VIEW_COUNT"] = ":increment_view_count"; + VqlParameterNames["DOCMODE"] = "docmode"; + VqlParameterNames["DOMAIN"] = "domain"; + VqlParameterNames["DO_WORK"] = "do_work"; + VqlParameterNames["DX"] = "dx"; + VqlParameterNames["DY"] = "dy"; + VqlParameterNames["EDIT_DATA_ALERT"] = ":editDataAlert"; + VqlParameterNames["EMBED"] = ":embed"; + VqlParameterNames["EMBEDDED"] = "embedded"; + VqlParameterNames["ENCRYPTED"] = "encrypted"; + VqlParameterNames["API_EXTERNAL_VERSION"] = ":apiExternalVersion"; + VqlParameterNames["API_INTERNAL_VERSION"] = ":apiInternalVersion"; + VqlParameterNames["EXCLUDE"] = "exclude"; + VqlParameterNames["EXPORT_FORMAT"] = ":export_format"; + VqlParameterNames["FIELDNAME"] = "fieldname"; + VqlParameterNames["FIELD_NAME"] = "field_name"; + VqlParameterNames["FIELD_SEP"] = "field_sep"; + VqlParameterNames["FILE"] = "file"; + VqlParameterNames["FILTER_TILE_SIZE"] = "filterTileSize"; + VqlParameterNames["FN"] = "fn"; + VqlParameterNames["FOCUS"] = "focus"; + VqlParameterNames["FORCE_CACHE"] = "force_cache"; + VqlParameterNames["FORMAT"] = "format"; + VqlParameterNames["FORMAT_DATA_VALUE_LOCALLY"] = "formatDataValueLocally"; + VqlParameterNames["FROM_WG"] = ":from_wg"; + VqlParameterNames["GRAPHQL_DATABASE_ID"] = ":graphQLDatabaseId"; + VqlParameterNames["GRAPHQL_TABLE_ID"] = ":graphQLTableId"; + VqlParameterNames["GUID"] = ":guid"; + VqlParameterNames["H"] = "h"; + VqlParameterNames["HIDDEN"] = "hidden"; + VqlParameterNames["HIDE_CLOSE_BUTTON"] = ":hideCloseButton"; + VqlParameterNames["HIDE_EDIT_BUTTON"] = ":hideEditButton"; + VqlParameterNames["HIDE_EDIT_IN_DESKTOP_BUTTON"] = ":hideEditInDesktopButton"; + VqlParameterNames["HIGH_DPI"] = ":highdpi"; + VqlParameterNames["IMAGE_SIZE_LIMIT"] = "imageSizeLimit"; + VqlParameterNames["TRANSPARENT_LINE_MARKS_LIMIT"] = "transparentLineMarkLimit"; + VqlParameterNames["CLIENT_RENDER_PIXEL_LIMIT"] = "clientRenderPixelLimit"; + VqlParameterNames["IN"] = "in"; + VqlParameterNames["INSTANCE_ID"] = ":iid"; + VqlParameterNames["IS_GUEST_REDIRECT_FROM_VIZPORTAL"] = ":isGuestRedirectFromVizportal"; + VqlParameterNames["IS_MARK_ANIMATION_ENABLED"] = "isMarkAnimationEnabled"; + VqlParameterNames["IS_VIZPORTAL"] = ":isVizPortal"; + VqlParameterNames["INPUT_"] = "input_string"; + VqlParameterNames["JSDEBUG"] = ":jsdebug"; + VqlParameterNames["JSON"] = "json"; + VqlParameterNames["JSON_ONLY"] = ":jsonOnly"; + VqlParameterNames["KEEPFILE"] = "keepfile"; + VqlParameterNames["KEY"] = "key"; + VqlParameterNames["LANGUAGE"] = "language"; + VqlParameterNames["LANGUAGE_REQUESTED"] = ":language"; + VqlParameterNames["LINKTARGET"] = ":linktarget"; + VqlParameterNames["LOAD_ORDER_ID"] = ":loadOrderID"; + VqlParameterNames["LOAD_NEWEST_REVISION"] = ":loadNewestRevision"; + VqlParameterNames["LOCAL_PATHS"] = ":localPaths"; + VqlParameterNames["LOCALE"] = "locale"; + VqlParameterNames["LOCATION_ID"] = "locationid"; + VqlParameterNames["LOCATION_TYPE"] = "locationtype"; + VqlParameterNames["WORKBOOK_LOCALE"] = "workbookLocale"; + VqlParameterNames["MAXROWS"] = "maxrows"; + VqlParameterNames["MAX_AGE"] = "maxAge"; + VqlParameterNames["MAX_ROWS"] = "maxRows"; + VqlParameterNames["METHOD"] = "method"; + VqlParameterNames["MOBILE"] = "mobile"; + VqlParameterNames["MODIFIER"] = "modifier"; + VqlParameterNames["NAME"] = "name"; + VqlParameterNames["NAV_TYPE"] = "navType"; + VqlParameterNames["NAV_SRC"] = "navSrc"; + VqlParameterNames["NOATTACHMENT"] = "no-attachment"; + VqlParameterNames["NO_OVERWRITE"] = "no_overwrite"; + VqlParameterNames["OPEN_AUTHORING_IN_TOP_WINDOW"] = ":openAuthoringInTopWindow"; + VqlParameterNames["OPENID_HD"] = ":openid_hd"; + VqlParameterNames["OPENID_LOGIN_HINT"] = ":openid_login_hint"; + VqlParameterNames["OAUTHREQUEST"] = "oauthrequest"; + VqlParameterNames["OAUTH_CREDENTIAL_IDS"] = "oauth_credential_ids"; + VqlParameterNames["OFFLINE_MODE"] = ":offlinemode"; + VqlParameterNames["ORIGIN"] = ":origin"; + VqlParameterNames["OVERLAY"] = ":overlay"; + VqlParameterNames["P"] = "p"; + VqlParameterNames["PATH"] = "path"; + VqlParameterNames["PANE_RESOLVER_X"] = "paneResolverX"; + VqlParameterNames["PANE_RESOLVER_Y"] = "paneResolverY"; + VqlParameterNames["PARAM"] = "param"; + VqlParameterNames["PARENT_ID"] = "parent_id"; + VqlParameterNames["PASSWORD"] = "password"; + VqlParameterNames["PATTERN"] = "pattern"; + VqlParameterNames["PIXEL_RATIO"] = ":pixelratio"; + VqlParameterNames["PREFIX"] = ":prefix"; + VqlParameterNames["PREVIEW"] = ":preview"; + VqlParameterNames["PRIMARY_CONTENT_URL"] = "primary_content_url"; + VqlParameterNames["PROJECT"] = "project"; + VqlParameterNames["PROTOCOL"] = "protocol"; + VqlParameterNames["PSEUDO"] = ":pseudo"; + VqlParameterNames["QUERY"] = "query"; + VqlParameterNames["R"] = "r"; + VqlParameterNames["RANGE_TYPE"] = "range_type"; + VqlParameterNames["RECORD_SEP"] = "record_sep"; + VqlParameterNames["RECORD_CLIENT_PERFORMANCE"] = ":record_client_performance"; + VqlParameterNames["RECORD_PERFORMANCE"] = ":record_performance"; + VqlParameterNames["RECOVER_OLD_SESSION_ID"] = ":recover_old_session_id"; + VqlParameterNames["RECOVER_SESSION_STATE_TICKETS"] = ":recover_session_state_tickets"; + VqlParameterNames["REFRESH"] = ":refresh"; + VqlParameterNames["REFRESHUNMODIFIED"] = ":refreshunmodified"; + VqlParameterNames["REGION"] = "region"; + VqlParameterNames["RELOAD_ON_CUSTOM_VIEW_SAVE"] = ":reloadOnCustomViewSave"; + VqlParameterNames["RENDER"] = ":render"; + VqlParameterNames["RENDER_MAPS_CLIENT_SIDE"] = "renderMapsClientSide"; + VqlParameterNames["RETRY"] = ":retry"; + VqlParameterNames["REUSE"] = "reuse"; + VqlParameterNames["REUSE_FOREVER"] = "reuse_forever"; + VqlParameterNames["REVERT"] = ":revert"; + VqlParameterNames["SAVE_DB_PASSWORDS"] = "save_db_passwords"; + VqlParameterNames["SELECT_X"] = "select_x"; + VqlParameterNames["SELECT_Y"] = "select_y"; + VqlParameterNames["SESSION_FEATURE_PREFIX"] = ":ff_"; + VqlParameterNames["SESSION_FLAGS"] = ":session_feature_flags"; + VqlParameterNames["SHARE_BUTTON"] = "share_button"; + VqlParameterNames["SHEET_ID"] = "sheet_id"; + VqlParameterNames["SHARED"] = "shared"; + VqlParameterNames["SHOWALL"] = "showall"; + VqlParameterNames["SHOW_APP_BANNER"] = ":showAppBanner"; + VqlParameterNames["SHOW_ASK_DATA"] = ":showAskData"; + VqlParameterNames["SHOW_PARAMS"] = "showParams"; + VqlParameterNames["SHOW_SHARE_OPTIONS"] = ":showShareOptions"; + VqlParameterNames["SIZE"] = ":size"; + VqlParameterNames["SOURCE"] = "source"; + VqlParameterNames["STATE"] = "state"; + VqlParameterNames["STICKY_SESSION_KEY"] = "stickySessionKey"; + VqlParameterNames["SUBSCRIPTIONS"] = ":subscriptions"; + VqlParameterNames["SUMMARY"] = "summary"; + VqlParameterNames["SUPPRESS_DEFAULT_EDIT_BEHAVIOR"] = ":suppressDefaultEditBehavior"; + VqlParameterNames["SYNC_SESSION"] = ":sync_session"; + VqlParameterNames["SYNC_SESSION_STATE"] = "sync_session_state"; + VqlParameterNames["TABS"] = ":tabs"; + VqlParameterNames["TARGET"] = "target"; + VqlParameterNames["TARGET_SITE"] = "target_site"; + VqlParameterNames["TOOLBAR"] = ":toolbar"; + VqlParameterNames["TOOLTIP"] = ":tooltip"; + VqlParameterNames["TS"] = "ts"; + VqlParameterNames["UNDERLYING_TABLE_ID"] = "underlying_table_id"; + VqlParameterNames["UNDERLYING_TABLE_CAPTION"] = "underlying_table_caption"; + VqlParameterNames["UPDATE_TYPE"] = "update_type"; + VqlParameterNames["USE_GUEST"] = ":useGuest"; + VqlParameterNames["USE_INLINE_IMAGES"] = "use_inline_images"; + VqlParameterNames["USERAGENT"] = "useragent"; + VqlParameterNames["USERNAME"] = "username"; + VqlParameterNames["VALUE"] = "value"; + VqlParameterNames["VERBOSE_MODE"] = "verboseMode"; + VqlParameterNames["VIEW_ID"] = "views_id"; + VqlParameterNames["VIZ_SNAPSHOT_ID"] = "viz_snapshot_id"; + VqlParameterNames["VW"] = ":vw"; + VqlParameterNames["W"] = "w"; + VqlParameterNames["WORKSHEET_PORT_SIZE"] = "worksheetPortSize"; + VqlParameterNames["WATERMARK"] = "watermark"; + VqlParameterNames["WATERMARK_MARGIN"] = ":watermark_margin"; + VqlParameterNames["WB"] = ":wb"; + VqlParameterNames["WHICH"] = "which"; + VqlParameterNames["X"] = "x"; + VqlParameterNames["Y"] = "y"; + VqlParameterNames["ZID"] = "zid"; + VqlParameterNames["ZONE_ID"] = "zone_id"; + VqlParameterNames["KEYCHAIN_VERSION"] = "keychain_version"; + VqlParameterNames["DATASOURCE_ID"] = "datasource_id"; + VqlParameterNames["DATASOURCE_NAME"] = "datasource_name"; + VqlParameterNames["LENS_ID"] = "lens_id"; + VqlParameterNames["WIDTH"] = "width"; + VqlParameterNames["HEIGHT"] = "height"; + // Default Layout params + VqlParameterNames["LAYOUT_VIEWS"] = "views"; + VqlParameterNames["LAYOUT_MENUS"] = "menus"; + VqlParameterNames["LAYOUT_GEOMETRY"] = "geometry"; + VqlParameterNames["LAYOUT_PAGES"] = "pages"; + VqlParameterNames["LAYOUT_CACHEURL"] = "cacheurl"; + VqlParameterNames["LAYOUT_SHEET"] = "sheet"; + VqlParameterNames["LAYOUT_DEPTH"] = "depth"; +})(VqlParameterNames || (VqlParameterNames = {})); +/** + * parameters that are only relevant when working with Tableau Public + * maybe not really necessry to split them out + */ +var PublicParameterNames; +(function (PublicParameterNames) { + PublicParameterNames["SHOW_VIZ_HOME"] = ":showVizHome"; + // display view count +})(PublicParameterNames || (PublicParameterNames = {})); +/** + * Map the parameter names as used in the url to what we call them publicly in the embedding library. + * The only parameters listed here should be the ones that get sent to vizql + * - this should match the interface at external-contract:VizInterfaces:VizSettings + */ +var VizOptionNames; +(function (VizOptionNames) { + // publicName = internalStringValue + VizOptionNames["Size"] = ":size"; + VizOptionNames["Embed"] = ":embed"; + VizOptionNames["ApiInternalVersion"] = ":apiInternalVersion"; + VizOptionNames["ApiExternalVersion"] = ":apiExternalVersion"; + VizOptionNames["ShowVizHome"] = ":showVizHome"; + VizOptionNames["Jsdebug"] = ":jsdebug"; + VizOptionNames["BootstrapWhenNotified"] = ":bootstrapWhenNotified"; + VizOptionNames["NavType"] = "navType"; + VizOptionNames["NavSrc"] = "navSrc"; + VizOptionNames["debug"] = ":jsdebug"; + VizOptionNames["ApiID"] = ":apiID"; + VizOptionNames["disableUrlActionsPopups"] = ":disableUrlActionsPopups"; + VizOptionNames["hideTabs"] = ":tabs"; + VizOptionNames["toolbar"] = ":toolbar"; + VizOptionNames["device"] = ":device"; + VizOptionNames["instanceIdToClone"] = ":iid"; + VizOptionNames["touchOptimize"] = "mobile"; + VizOptionNames["hideEditButton"] = ":hideEditButton"; + VizOptionNames["hideEditInDesktopButton"] = ":hideEditInDesktopButton"; + VizOptionNames["suppressDefaultEditBehavior"] = ":suppressDefaultEditBehavior"; + VizOptionNames["hideCloseButton"] = ":hideCloseButton"; +})(VizOptionNames = exports.VizOptionNames || (exports.VizOptionNames = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/messaging/CrossFrameMessenger.js": +/*!****************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/messaging/CrossFrameMessenger.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var guid = __webpack_require__(/*! guid */ "../../node_modules/guid/guid.js"); +var JsApiInternalContract_1 = __webpack_require__(/*! ../JsApiInternalContract */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var CrossFramePreparedMessage_1 = __webpack_require__(/*! ./CrossFramePreparedMessage */ "../api-internal-contract-js/lib/src/messaging/CrossFramePreparedMessage.js"); +var MessageTypeChecks_1 = __webpack_require__(/*! ./MessageTypeChecks */ "../api-internal-contract-js/lib/src/messaging/MessageTypeChecks.js"); +var MessageTypes_1 = __webpack_require__(/*! ./interface/MessageTypes */ "../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js"); +/** + * The CrossFrameMessenger is the primary export from the api-messaging module. An instance of + * this class can be instantiated on both sides of a frame boundary to facilitate communication + * in both directions between the frames. This class implements both the dispatcher and the listener + * portions, but doesn't require callers to care about both. + */ +var CrossFrameMessenger = /** @class */ (function () { + /** + * Creates an instance of CrossFrameMessenger. If you would like to use the CrossFrameMessenger as a MessageListener, + * be sure to call StartListening and register message handlers. + * @param thisWindow The window object which the CrossFrameMessenger lives. An onMessage listener will be added here. + * @param [otherWindow] Optional otherWindow which messages will be posted to. + * If defined, incoming messages must originate from otherWindow to be passed on + * @param [otherWindowOrigin] The target origin which otherWindow must have in order to receive dispatched messages. + * This value will be sent as the targetOrigin of a postMessage + * (https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) + */ + function CrossFrameMessenger(thisWindow, otherWindow, otherWindowOrigin) { + this.thisWindow = thisWindow; + this.otherWindow = otherWindow; + this.otherWindowOrigin = otherWindowOrigin; + // Make sure to call StartListening + } + ///// MessageListener Implementation + CrossFrameMessenger.prototype.startListening = function () { + var _this = this; + // Check if we already are listening, if not, hook up a message listener + if (!this.unregisterFunction) { + var boundHandler_1 = this.onMessageReceived.bind(this); + this.thisWindow.addEventListener('message', boundHandler_1, true); + this.unregisterFunction = function () { return _this.thisWindow.removeEventListener('message', boundHandler_1, true); }; + } + }; + CrossFrameMessenger.prototype.stopListening = function () { + // Stop listening if we have started listening + if (this.unregisterFunction) { + this.unregisterFunction(); + this.unregisterFunction = undefined; + } + }; + CrossFrameMessenger.prototype.setInitializeMessageHandler = function (handler) { + this.initializeMessageHandler = handler; + }; + CrossFrameMessenger.prototype.setCommandResponseMessageHandler = function (handler) { + this.commandResponseMessageHandler = handler; + }; + CrossFrameMessenger.prototype.setCommandMessageHandler = function (handler) { + this.commandMessageHandler = handler; + }; + CrossFrameMessenger.prototype.setNotificationMessageHandler = function (handler) { + this.notificationMessageHandler = handler; + }; + CrossFrameMessenger.prototype.setHandshakeMessageHandler = function (handler) { + this.handshakeMessageHandler = handler; + }; + ///// MessageDispatcher Implementation + /** + * @param apiVersion api-internal-contract-js version (exported in JsApiInternalConntract) + * @param crossFrameVersion crossframe messaging version (exported in JsApiInternalConntract) + * @param options additional options that can be passed at initialization (information about the version of + * external being used for example) + */ + CrossFrameMessenger.prototype.prepareInitializationMessage = function (apiVersion, crossFrameVersion, options) { + var message = { + msgGuid: guid.raw(), + msgType: MessageTypes_1.MessageType.Initialize, + crossFrameVersion: crossFrameVersion, + apiVersion: apiVersion, + options: options, + }; + return this.prepareMessage(message); + }; + CrossFrameMessenger.prototype.prepareCommandMessage = function (verbId, parameters) { + var message = { + msgGuid: guid.raw(), + msgType: MessageTypes_1.MessageType.Command, + verbId: verbId, + parameters: parameters, + }; + return this.prepareMessage(message); + }; + CrossFrameMessenger.prototype.prepareCommandResponseMessage = function (commandGuid, data, error) { + var message = { + msgGuid: guid.raw(), + msgType: MessageTypes_1.MessageType.CommandResponse, + commandGuid: commandGuid, + data: data, + error: error, + }; + if (error) { + // stringify error object to remove unserializable fields like functions and prevent serialization errors + message.error = JSON.parse(JSON.stringify(error)); + } + return this.prepareMessage(message); + }; + CrossFrameMessenger.prototype.prepareNotificationMessage = function (notificationId, data) { + var message = { + msgGuid: guid.raw(), + msgType: MessageTypes_1.MessageType.Notification, + notificationId: notificationId, + data: data, + }; + return this.prepareMessage(message); + }; + CrossFrameMessenger.prototype.prepareAckMessage = function () { + var message = { + msgGuid: guid.raw(), + msgType: MessageTypes_1.MessageType.Ack, + platformVersion: JsApiInternalContract_1.INTERNAL_CONTRACT_VERSION, + }; + return this.prepareMessage(message); + }; + /** + * Prepares a pending message for sending and returns the prepared message + * + * @param msg The message to be sent to this.otherWindow + * @returns The prepared message + */ + CrossFrameMessenger.prototype.prepareMessage = function (msg) { + if (!this.otherWindow || !this.otherWindowOrigin) { + throw 'Other window not initialized, cannot dispatch messages'; + } + var preparedMessage = new CrossFramePreparedMessage_1.CrossFramePreparedMessage(msg, this.otherWindow, this.otherWindowOrigin); + return preparedMessage; + }; + /** + * Called when a message is received. Does some validation of the message, and then + * calls an appropriate message handler if one is defined + * + * @param event The incoming MessageEvent + */ + CrossFrameMessenger.prototype.onMessageReceived = function (event) { + // If we have an otherWindow defined, make sure the message is coming from there + if (this.otherWindow && event.source !== this.otherWindow) { + return; + } + // Do some validation on event.data to make sure that we have received a real message + if (!event.data) { + return; + } + var message = event.data; + if (!MessageTypeChecks_1.isMessage(message)) { + return; + } + // Check the declared message type, validate the message, and call an appropriate hander if one exists + switch (message.msgType) { + case MessageTypes_1.MessageType.Initialize: { + if (!MessageTypeChecks_1.isInitMessage(message) || !this.initializeMessageHandler) { + return; + } + this.initializeMessageHandler(message, event.source); + break; + } + case MessageTypes_1.MessageType.CommandResponse: { + if (!MessageTypeChecks_1.isCommandResponseMessage(message) || !this.commandResponseMessageHandler) { + return; + } + this.commandResponseMessageHandler(message, event.source); + break; + } + case MessageTypes_1.MessageType.Command: { + if (!MessageTypeChecks_1.isCommandMessage(message) || !this.commandMessageHandler) { + return; + } + this.commandMessageHandler(message, event.source); + break; + } + case MessageTypes_1.MessageType.Notification: { + if (!MessageTypeChecks_1.isNotificationMessage(message) || !this.notificationMessageHandler) { + return; + } + this.notificationMessageHandler(message, event.source); + break; + } + case MessageTypes_1.MessageType.Handshake: { + if (!MessageTypeChecks_1.isHandshakeMessage(message) || !this.handshakeMessageHandler) { + return; + } + this.handshakeMessageHandler(message, event.source); + break; + } + default: + // Just ignore this since we don't know how to handle the message type + } + }; + CrossFrameMessenger.prototype.setOtherWindow = function (otherWindow) { + this.otherWindow = otherWindow; + }; + CrossFrameMessenger.prototype.setOtherWindowOrigin = function (origin) { + this.otherWindowOrigin = origin; + }; + return CrossFrameMessenger; +}()); +exports.CrossFrameMessenger = CrossFrameMessenger; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/messaging/CrossFramePreparedMessage.js": +/*!**********************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/messaging/CrossFramePreparedMessage.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of the PreparedMessage interface used to post messages between + * two frames using window.postMessage + */ +var CrossFramePreparedMessage = /** @class */ (function () { + /** + * Creates an instance of CrossFramePreparedMessage. + * @param _message The message to be sent + * @param _target The target window where the message will be sent + * @param _origin The targetOrigin where this message can be received + */ + function CrossFramePreparedMessage(_message, _target, _origin) { + this._message = _message; + this._target = _target; + this._origin = _origin; + } + Object.defineProperty(CrossFramePreparedMessage.prototype, "messageGuid", { + get: function () { + return this._message.msgGuid; + }, + enumerable: true, + configurable: true + }); + CrossFramePreparedMessage.prototype.send = function () { + this._target.postMessage(this._message, this._origin); + return this; + }; + return CrossFramePreparedMessage; +}()); +exports.CrossFramePreparedMessage = CrossFramePreparedMessage; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/messaging/MessageTypeChecks.js": +/*!**************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/messaging/MessageTypeChecks.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var guid = __webpack_require__(/*! guid */ "../../node_modules/guid/guid.js"); +var Notifications_1 = __webpack_require__(/*! ../contract/Notifications */ "../api-internal-contract-js/lib/src/contract/Notifications.js"); +var MessageTypes_1 = __webpack_require__(/*! ./interface/MessageTypes */ "../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js"); +var expectedEmptyNotifications = new Set([ + Notifications_1.NotificationId.EditButtonClicked, + Notifications_1.NotificationId.EditInDesktopButtonClicked, + Notifications_1.NotificationId.WorkbookPublished, + Notifications_1.NotificationId.WorkbookReadyToClose, +]); +/* tslint:disable no-any */ +function isMessage(data) { + if (!data) { + return false; + } + var message = data; + if (!message || !message.msgGuid || !message.msgType) { + return false; + } + if (!guid.isGuid(message.msgGuid)) { + return false; + } + if (typeof message.msgType !== 'string') { + return false; + } + var messageTypes = [ + MessageTypes_1.MessageType.Command, + MessageTypes_1.MessageType.CommandResponse, + MessageTypes_1.MessageType.Initialize, + MessageTypes_1.MessageType.Notification, + MessageTypes_1.MessageType.Handshake, + ]; + if (messageTypes.indexOf(message.msgType) < 0) { + return false; + } + return true; +} +exports.isMessage = isMessage; +function isVersion(versionNumber) { + if (!versionNumber) { + return false; + } + var v = versionNumber; + if (typeof v !== 'object') { + return false; + } + if (typeof v.fix !== 'number' || typeof v.minor !== 'number' || typeof v.major !== 'number') { + return false; + } + return true; +} +exports.isVersion = isVersion; +function isInitMessage(message) { + if (!isMessage(message)) { + return false; + } + var initMessage = message; + if (initMessage.msgType !== MessageTypes_1.MessageType.Initialize) { + return false; + } + if (!initMessage.apiVersion || !isVersion(initMessage.apiVersion)) { + return false; + } + if (!initMessage.crossFrameVersion || !isVersion(initMessage.crossFrameVersion)) { + return false; + } + return true; +} +exports.isInitMessage = isInitMessage; +function isCommandResponseMessage(message) { + if (!isMessage(message)) { + return false; + } + var crMessage = message; + if (crMessage.msgType !== MessageTypes_1.MessageType.CommandResponse) { + return false; + } + if (!guid.isGuid(crMessage.commandGuid)) { + return false; + } + if (!crMessage.data && !crMessage.error) { + return false; + } + return true; +} +exports.isCommandResponseMessage = isCommandResponseMessage; +function isCommandMessage(message) { + if (!isMessage(message)) { + return false; + } + var commandMessage = message; + if (commandMessage.msgType !== MessageTypes_1.MessageType.Command) { + return false; + } + if (!commandMessage.parameters || typeof commandMessage.parameters !== 'object') { + return false; + } + if (!commandMessage.verbId || typeof commandMessage.verbId !== 'string') { + return false; + } + return true; +} +exports.isCommandMessage = isCommandMessage; +function isNotificationMessage(message) { + if (!isMessage(message)) { + return false; + } + var notificationMessage = message; + if (notificationMessage.msgType !== MessageTypes_1.MessageType.Notification) { + return false; + } + if (!notificationMessage.data && !expectedEmptyNotifications.has(notificationMessage.notificationId)) { + return false; + } + if (!notificationMessage.notificationId || typeof notificationMessage.notificationId !== 'string') { + return false; + } + return true; +} +exports.isNotificationMessage = isNotificationMessage; +function isHandshakeMessage(message) { + if (!isMessage(message)) { + return false; + } + var handshakeMessage = message; + if (handshakeMessage.msgType !== MessageTypes_1.MessageType.Handshake) { + return false; + } + return true; +} +exports.isHandshakeMessage = isHandshakeMessage; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js": +/*!*******************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/messaging/interface/MessageTypes.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Enum defining the 4 different types of messages we have defined + */ +var MessageType; +(function (MessageType) { + MessageType["Initialize"] = "initialize"; + MessageType["Notification"] = "notification"; + MessageType["Command"] = "command"; + MessageType["CommandResponse"] = "command-response"; + MessageType["Handshake"] = "v-handshake"; + MessageType["Ack"] = "v-ack"; +})(MessageType = exports.MessageType || (exports.MessageType = {})); + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/IdentityVersionConverter.js": +/*!**********************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/IdentityVersionConverter.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// tslint:disable:no-any +/** + * This version converter doesn't actually do anything but is useful for testing or when we have + * a matching platform and internal version number + */ +var IdentityVersionConverter = /** @class */ (function () { + function IdentityVersionConverter() { + } + IdentityVersionConverter.prototype.upgradeExecuteCall = function (verb, parameters) { + return { + verb: verb, + parameters: parameters, + }; + }; + IdentityVersionConverter.prototype.downgradeExecuteReturn = function (executeResponse) { + return executeResponse; + }; + IdentityVersionConverter.prototype.downgradeNotification = function (notification) { + return notification; + }; + return IdentityVersionConverter; +}()); +exports.IdentityVersionConverter = IdentityVersionConverter; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/StackingVersionConverter.js": +/*!**********************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/StackingVersionConverter.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// tslint:disable:no-any +/** + * The version converter is designed to allow the platform and external modules + * to seemlessly communicate over two different versions of the internal API. The only + * mode it supports is external's version <= platform's version. When executing + * commands, it is used to upgrade the external representation to what platform knows on the way in + * and downgrade the representations on the way out. Similarly for notifications, it can + * downgrade those on the way from platform to external. + */ +var StackingVersionConverter = /** @class */ (function () { + /** + * Creates a new instance of the StackingVersionConverter + * + * @param _externalMajorVersion The major version of the internal contract api-external-js is using + * @param _platformMajorVersion The major version of the internal contract the api-platform-js is using + * @param _upgradeExecuteTranslations Ordered list of the translations to perform when upgrading cmd parameters + * @param _downgradeExecuteTranslations Ordered list of downgrade translations to perform after a cmd + * @param _downgradeNotificationTranslations Ordered list of downgrade translations to perform on a notification + */ + function StackingVersionConverter(_externalMajorVersion, _platformMajorVersion, _upgradeExecuteTranslations, _downgradeExecuteTranslations, _downgradeNotificationTranslations) { + this._externalMajorVersion = _externalMajorVersion; + this._platformMajorVersion = _platformMajorVersion; + this._upgradeExecuteTranslations = _upgradeExecuteTranslations; + this._downgradeExecuteTranslations = _downgradeExecuteTranslations; + this._downgradeNotificationTranslations = _downgradeNotificationTranslations; + if (this._externalMajorVersion > this._platformMajorVersion) { + throw new Error("Cannot convert between external version " + this._externalMajorVersion + " and " + this._platformMajorVersion); + } + } + /** + * Creates a new instance of the StackingVersionConverter + * + * @param _externalVersion The version of the internal contract api-external-js is using + * @param _platformVersion The version of the internal contract the api-platform-js is using + * @param _upgradeExecuteTranslations Ordered list of the translations to perform when upgrading cmd parameters + * @param _downgradeExecuteTranslations Ordered list of downgrade translations to perform after a cmd + * @param _downgradeNotificationTranslations Ordered list of downgrade translations to perform on a notification + */ + StackingVersionConverter.fromData = function (externalVersion, platformVersion, upgradeExecuteTranslations, downgradeExecuteTranslations, downgradeNotificationTranslations) { + return new this(externalVersion.major, platformVersion.major, upgradeExecuteTranslations, downgradeExecuteTranslations, downgradeNotificationTranslations); + }; + StackingVersionConverter.prototype.upgradeExecuteCall = function (verb, parameters) { + // Perform the upgrade of the verb and parameters to the level that platform is using + var upgraded = { verb: verb, parameters: parameters }; + for (var _i = 0, _a = this._upgradeExecuteTranslations; _i < _a.length; _i++) { + var upgradeTranslation = _a[_i]; + upgraded = upgradeTranslation(upgraded.verb, upgraded.parameters); + } + return upgraded; + }; + StackingVersionConverter.prototype.downgradeExecuteReturn = function (executeResponse) { + // Downgrade the response to what the external module is expecting + var downgraded = executeResponse; + for (var _i = 0, _a = this._downgradeExecuteTranslations; _i < _a.length; _i++) { + var downgradeTranslation = _a[_i]; + downgraded = downgradeTranslation(downgraded); + } + return downgraded; + }; + StackingVersionConverter.prototype.downgradeNotification = function (notification) { + // Downgrade the notification to what the external module is expecting + var downgraded = notification; + for (var _i = 0, _a = this._downgradeNotificationTranslations; _i < _a.length; _i++) { + var downgradeTranslation = _a[_i]; + downgraded = downgradeTranslation(downgraded); + } + return downgraded; + }; + return StackingVersionConverter; +}()); +exports.StackingVersionConverter = StackingVersionConverter; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/VersionConverterFactory.js": +/*!*********************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/VersionConverterFactory.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var IdentityVersionConverter_1 = __webpack_require__(/*! ./IdentityVersionConverter */ "../api-internal-contract-js/lib/src/versioning/IdentityVersionConverter.js"); +var StackingVersionConverter_1 = __webpack_require__(/*! ./StackingVersionConverter */ "../api-internal-contract-js/lib/src/versioning/StackingVersionConverter.js"); +var VersionTranslations_1 = __webpack_require__(/*! ./VersionTranslations */ "../api-internal-contract-js/lib/src/versioning/VersionTranslations.js"); +/** + * @returns true if lhs < rhs (ignoring fix number) + * @param lhs + * @param rhs + */ +function VersionLessThan(lhs, rhs) { + if (lhs.major > rhs.major) { + return false; + } + if (lhs.major < rhs.major) { + return true; + } + return lhs.minor < rhs.minor; +} +exports.VersionLessThan = VersionLessThan; +/** + * @returns true if lhs == rhs (ignoring fix number) + * @param lhs + * @param rhs + */ +function VersionEqualTo(lhs, rhs) { + return lhs.major === rhs.major && lhs.minor === rhs.minor; +} +exports.VersionEqualTo = VersionEqualTo; +// A mapping from an older client version of internal-contract to the current platform version of this contract. +// Each version bump can have an array of translations to perform in order. Notice that this is +// different than the major upgrades/downgrades above because it handles both major and minor version changes. +// Also please note: downgradeExecuteCall is handled on the client/external side rather than platform side. +// When updating the major or minor version of our internal-contract, you will need to update these data structures. +// * If there are translations to add, add them to the version to "upgrade from" or "downgrade to". +exports.ExecuteMinorUpgrades = { + 1: { + 9: [], + }, +}; +exports.ExecuteMinorDowngrades = { + 1: { + 5: [VersionTranslations_1.DowngradeWorksheetNames], + 9: [], + }, +}; +exports.NotificationMinorDowngrades = { + 1: { + 9: [], + 10: [VersionTranslations_1.DowngradeFlipboardZoneID], + }, +}; +/** + * Creates a new InternalContractVersionConverter which has the ability to upgrade and downgrade the contract + * between the two versions, which are specified. If externalMajorVersion is greater than platformMajorVersion, + * an error will be thrown because we won't know how to do those conversions. + * This converter can handle both major and minor updates when the platform version is greater than external version. + * + * @param externalVersion VersionNumber of the internal api which the external module is using + * @param platformVersion VersionNumber of the internal api which the platform is using + */ +function CreateVersionConverter(externalVersion, platformVersion) { + return CreateVersionConverterWithTranslators(externalVersion, platformVersion, exports.ExecuteMinorUpgrades, exports.ExecuteMinorDowngrades, exports.NotificationMinorDowngrades); +} +exports.CreateVersionConverter = CreateVersionConverter; +/** + * Implementation of CreateVersionConverter. This function takes the upgrade, downgrade, and + * notification arrays so that all the logic can be tested. + * + * @param externalVersion VersionNumber of the internal api which the external module is using + * @param platformVersion VersionNumber of the internal api which the platform is using + * @param upgrades MajorMinorTranslators for upgrades + * @param downgrades MajorMinorTranslators for downgrades + * @param notificationDowngrades MajorMinorTranslators for notification downgrades + */ +function CreateVersionConverterWithTranslators(externalVersion, platformVersion, upgrades, downgrades, notificationDowngrades) { + var externalMajorVersion = externalVersion.major; + var externalMinorVersion = externalVersion.minor; + var platformMajorVersion = platformVersion.major; + if (externalMajorVersion > platformMajorVersion) { + throw new Error("External version must be less than or equal to platform version.\n externalMajorVersion=" + externalMajorVersion + " platformMajorVersion=" + platformMajorVersion); + } + // If we are using the exact same versions (major.minor), just use the identity converter + if (VersionEqualTo(externalVersion, platformVersion)) { + return new IdentityVersionConverter_1.IdentityVersionConverter(); + } + // Walk the span between the versions we have here and collect the upgrade and downgrades necessary + var neededExecuteUpgrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, upgrades); + var neededExecuteDowngrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, downgrades); + var neededNotificationDowngrades = GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, notificationDowngrades); + // We want to apply the downgrades in reverse order in case of dependencies between them + neededExecuteDowngrades.reverse(); + neededNotificationDowngrades.reverse(); + return StackingVersionConverter_1.StackingVersionConverter.fromData(externalVersion, platformVersion, neededExecuteUpgrades, neededExecuteDowngrades, neededNotificationDowngrades); +} +exports.CreateVersionConverterWithTranslators = CreateVersionConverterWithTranslators; +function GetNeededTranslations(externalMajorVersion, platformMajorVersion, externalMinorVersion, majorMinorTranslators) { + var neededTranslations = []; + for (var major = externalMajorVersion; major <= platformMajorVersion; major++) { + if (major in majorMinorTranslators) { + var start = major === externalMajorVersion ? externalMinorVersion : 0; + var maximumMinorVersion = GetMaximumMinorIndex(Object.keys(majorMinorTranslators[major])); + for (var minor = start; minor <= maximumMinorVersion; minor++) { + if (minor in majorMinorTranslators[major]) { + neededTranslations.push.apply(neededTranslations, majorMinorTranslators[major][minor]); + } + } + } + } + return neededTranslations; +} +function GetMaximumMinorIndex(minorVersions) { + return minorVersions.map(function (a) { return Number(a); }).reduce(function (a, b) { return (a > b ? a : b); }); +} +exports.GetMaximumMinorIndex = GetMaximumMinorIndex; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/VersionTranslations.js": +/*!*****************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/VersionTranslations.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Notifications_1 = __webpack_require__(/*! ../contract/Notifications */ "../api-internal-contract-js/lib/src/contract/Notifications.js"); +// This is where we will start to define some of these translations. +// When modifying existing models, add the requisite conversion functions here, then use them +// in the VersionConverterFactory implementation. Import old versions as you would any other module +// 0 <-> Translations +// Uncomment this line to import from the V0 definition of the API +// import * as V0 from '@tableau-api-internal-contract-js_v0'; +// 1 <-> 2 Translations +// Uncomment this line to import from the V1 definition of the API +// import * as V1 from '@tableau-api-internal-contract-js_v1'; +function DowngradeWorksheetNames(executeResponse) { + // Fix the dashboard friendly name issue. The structures are compatible, + // so we still return the original reply, but we copy the SheetInfo.name + // into the DashboardZone.name, where v1 wants to find it. + var bootstrapInfo = executeResponse.result; + if (bootstrapInfo.extensionDashboardInfo !== undefined) { + bootstrapInfo.extensionDashboardInfo.zones.forEach(function (zone) { + if (zone.sheetInfo) { + zone.name = zone.sheetInfo.name; + } + }); + } + return executeResponse; +} +exports.DowngradeWorksheetNames = DowngradeWorksheetNames; +function DowngradeFlipboardZoneID(notification) { + // Fix the FlipboardZoneId issue. Older external versions still check for flipboardZoneIDs. + // When running against a newer server, if flipboardZoneId is absent, set it to default(0). + if (notification.notificationId === Notifications_1.NotificationId.SelectedMarksChanged) { + var visualModel = notification.data; + if (visualModel.flipboardZoneID === undefined) { + visualModel.flipboardZoneID = 0; + } + } + return notification; +} +exports.DowngradeFlipboardZoneID = DowngradeFlipboardZoneID; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/external/ExternalIdentityVersionConverter.js": +/*!***************************************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/external/ExternalIdentityVersionConverter.js ***! + \***************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// tslint:disable:no-any +/** + * This version converter doesn't actually do anything but is useful for testing or when we have + * a matching platform and external version number + */ +var ExternalIdentityVersionConverter = /** @class */ (function () { + function ExternalIdentityVersionConverter() { + } + ExternalIdentityVersionConverter.prototype.downgradeExecuteCall = function (verb, parameters) { + return { + verb: verb, + parameters: parameters, + }; + }; + ExternalIdentityVersionConverter.prototype.upgradeExecuteReturn = function (executeResponse, verb, parameters) { + return executeResponse; + }; + ExternalIdentityVersionConverter.prototype.upgradeNotification = function (notification) { + return notification; + }; + return ExternalIdentityVersionConverter; +}()); +exports.ExternalIdentityVersionConverter = ExternalIdentityVersionConverter; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/external/ExternalStackingVersionConverter.js": +/*!***************************************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/external/ExternalStackingVersionConverter.js ***! + \***************************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// tslint:disable:no-any +/** + * The version converter is designed to allow the platform and external modules + * to seemlessly communicate over two different versions of the internal API. This converter + * supports external's version(minor) >= platform's version(minor). When executing + * commands, it is used to downgrade the external representation to what platform knows on the way in + * and upgrade the representations on the way out. + */ +var ExternalStackingVersionConverter = /** @class */ (function () { + /** + * Creates a new instance of the StackingVersionConverter + * + * @param _externalVersion The version of the internal contract api-external-js is using + * @param _platformVersion The version of the internal contract the api-platform-js is using + * @param _downgradeExecuteCallTranslations Ordered list of the translations to perform when downgrading cmd parameters + * @param _upgradeExecuteReturnTranslations Ordered list of upgrade translations to perform after a cmd is executed + * @param _upgradeNotificationTranslations Ordered list of upgrade notfications to perform on events + */ + function ExternalStackingVersionConverter(_externalVersion, _platformVersion, _downgradeExecuteCallTranslations, _upgradeExecuteReturnTranslations, _upgradeNotificationTranslations) { + this._externalVersion = _externalVersion; + this._platformVersion = _platformVersion; + this._downgradeExecuteCallTranslations = _downgradeExecuteCallTranslations; + this._upgradeExecuteReturnTranslations = _upgradeExecuteReturnTranslations; + this._upgradeNotificationTranslations = _upgradeNotificationTranslations; + if (this._externalVersion.major > this._platformVersion.major) { + throw new Error("Cannot convert between external version " + this._externalVersion.major + "\n and " + this._platformVersion.major); + } + } + ExternalStackingVersionConverter.prototype.downgradeExecuteCall = function (verb, parameters) { + // Perform the downgrade of the verb and parameters to the level that platform is using + var downgraded = { verb: verb, parameters: parameters }; + for (var _i = 0, _a = this._downgradeExecuteCallTranslations; _i < _a.length; _i++) { + var downgradeTranslation = _a[_i]; + downgraded = downgradeTranslation(downgraded.verb, downgraded.parameters); + } + return downgraded; + }; + ExternalStackingVersionConverter.prototype.upgradeExecuteReturn = function (executeResponse, verb, parameters) { + // Perform the upgrade of the response to what the external module is expecting + var upgraded = executeResponse; + for (var _i = 0, _a = this._upgradeExecuteReturnTranslations; _i < _a.length; _i++) { + var upgradeTranslation = _a[_i]; + upgraded = upgradeTranslation(upgraded, verb, parameters); + } + return upgraded; + }; + ExternalStackingVersionConverter.prototype.upgradeNotification = function (notification) { + // Perform the upgrade of notification to what the external module is expecting + var upgraded = notification; + for (var _i = 0, _a = this._upgradeNotificationTranslations; _i < _a.length; _i++) { + var upgradeNotification = _a[_i]; + upgraded = upgradeNotification(upgraded); + } + return upgraded; + }; + return ExternalStackingVersionConverter; +}()); +exports.ExternalStackingVersionConverter = ExternalStackingVersionConverter; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/external/ExternalVersionConverterFactory.js": +/*!**************************************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/external/ExternalVersionConverterFactory.js ***! + \**************************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var VersionConverterFactory_1 = __webpack_require__(/*! ../VersionConverterFactory */ "../api-internal-contract-js/lib/src/versioning/VersionConverterFactory.js"); +var ExternalIdentityVersionConverter_1 = __webpack_require__(/*! ./ExternalIdentityVersionConverter */ "../api-internal-contract-js/lib/src/versioning/external/ExternalIdentityVersionConverter.js"); +var ExternalStackingVersionConverter_1 = __webpack_require__(/*! ./ExternalStackingVersionConverter */ "../api-internal-contract-js/lib/src/versioning/external/ExternalStackingVersionConverter.js"); +var ExternalVersionTranslations_1 = __webpack_require__(/*! ./ExternalVersionTranslations */ "../api-internal-contract-js/lib/src/versioning/external/ExternalVersionTranslations.js"); +// A mapping from the current client version of internal-contract to an older platform version of the contract. +// Each version bump can have an array of translations to perform in order. +// These translations handle downgradeExecuteCall and upgradeExecuteReturn and are meant to be called on the +// client/external side. +// When updating the major or minor version of our internal-contract, you will need to update these data structures. +// * If there are translations to add, add them to the version to 'upgrade from' or 'downgrade to'. +exports.ExecuteMinorDowngradeCallExternal = { + 1: { + 9: [], + 13: [ExternalVersionTranslations_1.DowngradeUnderlyingTableDataAsync, ExternalVersionTranslations_1.DowngradeLogicalTableDataAsync], + }, +}; +exports.ExecuteMinorUpgradeReturnExternal = { + 1: { + 9: [ExternalVersionTranslations_1.UpgradeDataTableTypes], + 29: [ExternalVersionTranslations_1.UpgradeDataTableRowsAndColumns], + }, +}; +exports.ExecuteMinorUpgradeNotification = { + 1: { + 9: [], + }, +}; +/** + * Creates a new ExternalContractVersionConverter which has the ability to upgrade and downgrade + * the contract between the two versions which are specified. If externalMajorVersion is less than + * platformMajorVersion, an ExternalIdentityVersionConverter will be returned. + * Handles upgrade/downgrade for both major and minor updates. + * + * @param externalVersion VersionNumber of the internal api which the external module is using + * @param platformVersion VersionNumber of the internal api which the platform is using + */ +function CreateExternalCompatibleVersionConverter(externalVersion, platformVersion) { + return CreateExternalCompatibleVersionConverterWithTranslators(externalVersion, platformVersion, exports.ExecuteMinorDowngradeCallExternal, exports.ExecuteMinorUpgradeReturnExternal, exports.ExecuteMinorUpgradeNotification); +} +exports.CreateExternalCompatibleVersionConverter = CreateExternalCompatibleVersionConverter; +/** + * Implementation of CreateExternalCompatibleVersionConverterWithTranslators. + * This function takes the upgrade, downgrade arrays so that all the logic can be tested. + * + * @param externalVersion VersionNumber of the internal contract which the external module is using + * @param platformVersion VersionNumber of the internal contract which the platform is using + * @param upgrades MajorMinorTranslators for response upgrades + * @param downgrades MajorMinorTranslators for execute call downgrades + */ +function CreateExternalCompatibleVersionConverterWithTranslators(externalVersion, platformVersion, downgrades, upgrades, upgradeNotifications) { + var externalMajorVersion = externalVersion.major; + var platformMajorVersion = platformVersion.major; + var platformMinorVersion = platformVersion.minor; + // This check is present in VersionConverterFactory. We throw the same error here as well. + // Hence we only need to check the minor versions for translations. + if (externalMajorVersion > platformMajorVersion) { + throw new Error("External version must be less than or equal to platform version.\n externalMajorVersion=" + externalMajorVersion + " platformMajorVersion=" + platformMajorVersion); + } + if (externalMajorVersion < platformMajorVersion || VersionConverterFactory_1.VersionEqualTo(externalVersion, platformVersion)) { + return new ExternalIdentityVersionConverter_1.ExternalIdentityVersionConverter(); + } + // Walk the span between the versions we have here and collect the upgrade and downgrades necessary + var neededExecuteCallDowngrade = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, downgrades); + var neededExecuteReturnUpgrades = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, upgrades); + var neededNotificationUpgrades = GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, upgradeNotifications); + // Reverse the downgrade calls, so that we start the downgrade from the external version to the platform version + neededExecuteCallDowngrade.reverse(); + return new ExternalStackingVersionConverter_1.ExternalStackingVersionConverter(externalVersion, platformVersion, neededExecuteCallDowngrade, neededExecuteReturnUpgrades, neededNotificationUpgrades); +} +exports.CreateExternalCompatibleVersionConverterWithTranslators = CreateExternalCompatibleVersionConverterWithTranslators; +function GetNeededExternalTranslations(platformMajorVersion, platformMinorVersion, majorMinorTranslators) { + var neededTranslations = []; + if (platformMajorVersion in majorMinorTranslators) { + var start = platformMinorVersion; + var maximumMinorVersion = VersionConverterFactory_1.GetMaximumMinorIndex(Object.keys(majorMinorTranslators[platformMajorVersion])); + for (var minor = start; minor <= maximumMinorVersion; minor++) { + if (minor in majorMinorTranslators[platformMajorVersion]) { + neededTranslations.push.apply(neededTranslations, majorMinorTranslators[platformMajorVersion][minor]); + } + } + } + return neededTranslations; +} + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/src/versioning/external/ExternalVersionTranslations.js": +/*!**********************************************************************************************!*\ + !*** ../api-internal-contract-js/lib/src/versioning/external/ExternalVersionTranslations.js ***! + \**********************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var JsApiInternalContract_1 = __webpack_require__(/*! ../../JsApiInternalContract */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +// 1.2 -> 1.0 Translations +// Uncomment this line to import from the V1 definition of the API +// import * as V1 from '@tableau-api-internal-contract-js_v1'; +/** + * Prior to 2019.2 (internal-contract v1.9), DataValue.value were all strings. + * Go through all DataValue objects. If we have a string, but the type should not be a string, + * convert it to the correct type. The type of DataValue.value is 'any' in the contract, so + * this change doesn't need any updates to classes or types. + */ +function UpgradeDataTableTypes(executeResponse, verb, parameters) { + if (!executeResponse) { + return executeResponse; + } + var oldUnderlyingDataTable = executeResponse.result; + if (oldUnderlyingDataTable.data !== undefined && oldUnderlyingDataTable.isSummary !== undefined) { + convertDataValues(oldUnderlyingDataTable.data); + return executeResponse; + } + var oldSelectedMarksTable = executeResponse.result; + if (oldSelectedMarksTable.data !== undefined && Array.isArray(oldSelectedMarksTable.data)) { + oldSelectedMarksTable.data.forEach(function (marksTable) { + convertDataValues(marksTable); + }); + return executeResponse; + } + return executeResponse; +} +exports.UpgradeDataTableTypes = UpgradeDataTableTypes; +/** + * Prior to 2020.2 (internal-contract v1.13 and older), worksheet.getUnderlyingTableDataAsync doesn't exist. + * Map it to the older GetUnderlyingData verb and validate the the logical table Id. + **/ +function DowngradeUnderlyingTableDataAsync(verb, parameters) { + if (verb === JsApiInternalContract_1.VerbId.GetUnderlyingTableData) { + validateParametersForObjectModel(verb, parameters); + verb = JsApiInternalContract_1.VerbId.GetUnderlyingData; + } + return { + verb: verb, + parameters: parameters, + }; +} +exports.DowngradeUnderlyingTableDataAsync = DowngradeUnderlyingTableDataAsync; +/** + * Prior to 2020.2 (internal-contract v1.13 and older), datasource.getLogicalTableDataAsync doesn't exist. + * Map it to the older GetDataSourceData verb and validate the the logical table Id. + **/ +function DowngradeLogicalTableDataAsync(verb, parameters) { + if (verb === JsApiInternalContract_1.VerbId.GetLogicalTableData) { + validateParametersForObjectModel(verb, parameters); + verb = JsApiInternalContract_1.VerbId.GetDataSourceData; + } + return { + verb: verb, + parameters: parameters, + }; +} +exports.DowngradeLogicalTableDataAsync = DowngradeLogicalTableDataAsync; +function convertDataValues(table) { + // dataTable is a two-dimensional array of data. First index is the row, second is the column. + if (table === undefined || table.dataTable === undefined || !Array.isArray(table.dataTable)) { + return; + } + table.dataTable.forEach(function (row) { + row.forEach(function (dataValue, columnIndex) { + var value = dataValue.value; + if (value !== null) { + dataValue.value = JsApiInternalContract_1.DataTypeConverter.convertValueAsStringToValue(value, table.headers[columnIndex].dataType); + } + }); + }); +} +// ToDo: TFS1069027 Refactor input verbs & parameters in api-internal-contract Upgrade/Downgrade framework +function validateParametersForObjectModel(verb, parameters) { + if (parameters[JsApiInternalContract_1.ParameterId.LogicalTableId] !== JsApiInternalContract_1.ApiShowDataTableSentinel.SingleTableId) { + throw new Error("Invalid logical table id passed to " + verb + "."); + } +} +/** + * Prior to 2021.2 (internal-contract v1.29 and below), getSummaryDataAsync did not support maxRows, + * and any get...DataAsync did not support columnsToIncludeById. + * Trim result to maxRows if it is included in the parameters for getSummaryDataAsync + * Trim columns to columnsToInclude if included in the parameters for any get...DataAsync + */ +function UpgradeDataTableRowsAndColumns(executeResponse, verb, parameters) { + if (isGetSummaryDataVerb(verb) && parameters[JsApiInternalContract_1.ParameterId.MaxRows]) { + executeResponse = adjustDataRowLength(executeResponse, parameters[JsApiInternalContract_1.ParameterId.MaxRows]); + } + if (isGetTableDataVerb(verb) && parameters[JsApiInternalContract_1.ParameterId.ColumnsToIncludeById]) { + executeResponse = adjustDataColumns(executeResponse, parameters[JsApiInternalContract_1.ParameterId.ColumnsToIncludeById]); + } + return executeResponse; +} +exports.UpgradeDataTableRowsAndColumns = UpgradeDataTableRowsAndColumns; +function isGetSummaryDataVerb(verb) { + return verb === JsApiInternalContract_1.VerbId.GetDataSummaryData; +} +function isGetTableDataVerb(verb) { + return (verb === JsApiInternalContract_1.VerbId.GetDataSummaryData || + verb === JsApiInternalContract_1.VerbId.GetUnderlyingTableData || + verb === JsApiInternalContract_1.VerbId.GetLogicalTableData || + verb === JsApiInternalContract_1.VerbId.GetDataSourceData || + verb === JsApiInternalContract_1.VerbId.GetUnderlyingData); +} +function adjustDataRowLength(executeResponse, maxRows) { + var underlyingDataTable = executeResponse.result; + if (!underlyingDataTable.data || !Array.isArray(underlyingDataTable.data.dataTable)) { + return executeResponse; + } + if (maxRows > 0 && maxRows < underlyingDataTable.data.dataTable.length) { + underlyingDataTable.data.dataTable.length = maxRows; + } + return executeResponse; +} +function adjustDataColumns(executeResponse, columnsToInclude) { + if (columnsToInclude.length === 0) { + return executeResponse; + } + // verify that we have a valid UnderlyingDataTable + var underlyingDataTable = executeResponse.result; + if (!underlyingDataTable.data || !Array.isArray(underlyingDataTable.data.dataTable) || !Array.isArray(underlyingDataTable.data.headers)) { + return executeResponse; + } + // 1. filter the headers to only columnsToInclude + // 2. use the new headers to filter all rows + // 3. update the indices in our new headers + var newHeaders = underlyingDataTable.data.headers.filter(function (header, index) { + return columnsToInclude.find(function (name) { return name === header.fieldName; }); + }); + underlyingDataTable.data.dataTable.forEach(function (row, index) { + underlyingDataTable.data.dataTable[index] = row.filter(function (value, valueIndex) { return newHeaders.findIndex(function (header) { return header.index === valueIndex; }) !== -1; }); + }); + var newIndex = 0; + underlyingDataTable.data.headers = newHeaders.map(function (header) { + header.index = newIndex++; + return header; + }); + return executeResponse; +} + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared.js": +/*!*********************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +// Export everything which had been previously in the api-shared module +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ApiVersion_1 = __webpack_require__(/*! ./ApiShared/ApiVersion */ "../api-shared-js/lib/src/ApiShared/ApiVersion.js"); +exports.ApiVersion = ApiVersion_1.ApiVersion; +var ExternalToInternalEnumMappings_1 = __webpack_require__(/*! ./ApiShared/EnumMappings/ExternalToInternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js"); +exports.ExternalToInternalEnumMappings = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings; +__export(__webpack_require__(/*! ./ApiShared/CrossFrame/CrossFrameBootstrap */ "../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameBootstrap.js")); +var CrossFrameDispatcher_1 = __webpack_require__(/*! ./ApiShared/CrossFrame/CrossFrameDispatcher */ "../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameDispatcher.js"); +exports.CrossFrameDispatcher = CrossFrameDispatcher_1.CrossFrameDispatcher; +var DataSource_1 = __webpack_require__(/*! ./ApiShared/DataSource */ "../api-shared-js/lib/src/ApiShared/DataSource.js"); +exports.DataSource = DataSource_1.DataSource; +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ./ApiShared/EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +exports.InternalToExternalEnumMappings = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings; +var EventListenerManager_1 = __webpack_require__(/*! ./ApiShared/EventListenerManager */ "../api-shared-js/lib/src/ApiShared/EventListenerManager.js"); +exports.EventListenerManager = EventListenerManager_1.EventListenerManager; +var Field_1 = __webpack_require__(/*! ./ApiShared/Field */ "../api-shared-js/lib/src/ApiShared/Field.js"); +exports.Field = Field_1.Field; +var CustomViewImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/CustomViewImpl */ "../api-shared-js/lib/src/ApiShared/Impl/CustomViewImpl.js"); +exports.CustomViewImpl = CustomViewImpl_1.CustomViewImpl; +var DashboardImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/DashboardImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DashboardImpl.js"); +exports.DashboardImpl = DashboardImpl_1.DashboardImpl; +var DashboardObjectImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/DashboardObjectImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DashboardObjectImpl.js"); +exports.DashboardObjectImpl = DashboardObjectImpl_1.DashboardObjectImpl; +var DataSourceImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/DataSourceImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js"); +exports.DataSourceImpl = DataSourceImpl_1.DataSourceImpl; +var ParameterImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/ParameterImpl */ "../api-shared-js/lib/src/ApiShared/Impl/ParameterImpl.js"); +exports.ParameterImpl = ParameterImpl_1.ParameterImpl; +var SheetImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/SheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js"); +exports.SheetImpl = SheetImpl_1.SheetImpl; +var SheetInfoImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/SheetInfoImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js"); +exports.SheetInfoImpl = SheetInfoImpl_1.SheetInfoImpl; +var SingleEventManagerImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/SingleEventManagerImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SingleEventManagerImpl.js"); +exports.SingleEventManagerImpl = SingleEventManagerImpl_1.SingleEventManagerImpl; +var StoryImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/StoryImpl */ "../api-shared-js/lib/src/ApiShared/Impl/StoryImpl.js"); +exports.StoryImpl = StoryImpl_1.StoryImpl; +var StoryPointImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/StoryPointImpl */ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointImpl.js"); +exports.StoryPointImpl = StoryPointImpl_1.StoryPointImpl; +var StoryPointInfoImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/StoryPointInfoImpl */ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointInfoImpl.js"); +exports.StoryPointInfoImpl = StoryPointInfoImpl_1.StoryPointInfoImpl; +var WorkbookImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/WorkbookImpl */ "../api-shared-js/lib/src/ApiShared/Impl/WorkbookImpl.js"); +exports.WorkbookImpl = WorkbookImpl_1.WorkbookImpl; +var WorksheetImpl_1 = __webpack_require__(/*! ./ApiShared/Impl/WorksheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js"); +exports.WorksheetImpl = WorksheetImpl_1.WorksheetImpl; +var Point_1 = __webpack_require__(/*! ./ApiShared/Point */ "../api-shared-js/lib/src/ApiShared/Point.js"); +exports.Point = Point_1.Point; +var ClientInfoServiceImpl_1 = __webpack_require__(/*! ./ApiShared/Services/impl/ClientInfoServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/ClientInfoServiceImpl.js"); +exports.ClientInfoServiceImpl = ClientInfoServiceImpl_1.ClientInfoServiceImpl; +var NotificationServiceImpl_1 = __webpack_require__(/*! ./ApiShared/Services/impl/NotificationServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImpl.js"); +exports.NotificationServiceImpl = NotificationServiceImpl_1.NotificationServiceImpl; +var NotificationServiceImplBase_1 = __webpack_require__(/*! ./ApiShared/Services/impl/NotificationServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImplBase.js"); +exports.NotificationServiceImplBase = NotificationServiceImplBase_1.NotificationServiceImplBase; +exports.Registration = NotificationServiceImplBase_1.Registration; +var ServiceImplBase_1 = __webpack_require__(/*! ./ApiShared/Services/impl/ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +exports.ServiceImplBase = ServiceImplBase_1.ServiceImplBase; +var SizeServiceImpl_1 = __webpack_require__(/*! ./ApiShared/Services/impl/SizeServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/SizeServiceImpl.js"); +exports.SizeServiceImpl = SizeServiceImpl_1.SizeServiceImpl; +var StoryActivationServiceImpl_1 = __webpack_require__(/*! ./ApiShared/Services/impl/StoryActivationServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/StoryActivationServiceImpl.js"); +exports.StoryActivationServiceImpl = StoryActivationServiceImpl_1.StoryActivationServiceImpl; +__export(__webpack_require__(/*! ./ApiShared/Services/RegisterAllSharedServices */ "../api-shared-js/lib/src/ApiShared/Services/RegisterAllSharedServices.js")); +__export(__webpack_require__(/*! ./ApiShared/Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js")); +var TableauError_1 = __webpack_require__(/*! ./ApiShared/TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +exports.TableauError = TableauError_1.TableauError; +var Deferred_1 = __webpack_require__(/*! ./ApiShared/Utils/Deferred */ "../api-shared-js/lib/src/ApiShared/Utils/Deferred.js"); +exports.Deferred = Deferred_1.Deferred; +var ErrorHelpers_1 = __webpack_require__(/*! ./ApiShared/Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +exports.ErrorHelpers = ErrorHelpers_1.ErrorHelpers; +var SheetUtils_1 = __webpack_require__(/*! ./ApiShared/Utils/SheetUtils */ "../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js"); +exports.SheetUtils = SheetUtils_1.SheetUtils; +var VersionNumber_1 = __webpack_require__(/*! ./ApiShared/VersionNumber */ "../api-shared-js/lib/src/ApiShared/VersionNumber.js"); +exports.VersionNumber = VersionNumber_1.VersionNumber; +var VersionedExternalApiDispatcher_1 = __webpack_require__(/*! ./VersionedExternalApiDispatcher */ "../api-shared-js/lib/src/VersionedExternalApiDispatcher.js"); +exports.VersionedExternalApiDispatcher = VersionedExternalApiDispatcher_1.VersionedExternalApiDispatcher; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/ApiVersion.js": +/*!********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/ApiVersion.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var VersionNumber_1 = __webpack_require__(/*! ./VersionNumber */ "../api-shared-js/lib/src/ApiShared/VersionNumber.js"); +/** + * This is the singleton wrapper of VersionNumber + */ +var ApiVersion = /** @class */ (function () { + function ApiVersion() { + } + Object.defineProperty(ApiVersion, "Instance", { + /** + * Gets the singleton instance of the version number. + */ + get: function () { + return ApiVersion._instance; + }, + enumerable: true, + configurable: true + }); + ApiVersion.SetVersionNumber = function (numString, isAlpha) { + ApiVersion._instance = new VersionNumber_1.VersionNumber(numString, isAlpha); + }; + return ApiVersion; +}()); +exports.ApiVersion = ApiVersion; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/ConnectionSummary.js": +/*!***************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/ConnectionSummary.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of a connection summary. + * This does not follow the Impl pattern as it is just a property bag. + */ +var ConnectionSummary = /** @class */ (function () { + function ConnectionSummary(_connectionInfo) { + this._connectionInfo = _connectionInfo; + } + Object.defineProperty(ConnectionSummary.prototype, "name", { + get: function () { + return this._connectionInfo.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionSummary.prototype, "id", { + get: function () { + return this._connectionInfo.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionSummary.prototype, "serverURI", { + get: function () { + return this._connectionInfo.serverURI; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ConnectionSummary.prototype, "type", { + get: function () { + return this._connectionInfo.type; + }, + enumerable: true, + configurable: true + }); + return ConnectionSummary; +}()); +exports.ConnectionSummary = ConnectionSummary; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameBootstrap.js": +/*!****************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameBootstrap.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var CrossFrameDispatcher_1 = __webpack_require__(/*! ./CrossFrameDispatcher */ "../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameDispatcher.js"); +// Checks to see if we are running in an iframe currently: https://stackoverflow.com/a/326076/8821153 +function inIframe(thisWindow) { + try { + return thisWindow.self !== thisWindow.parent; + } + catch (e) { + return true; + } +} +/** + * Attempts to bootstrap the extension with a cross-frame parent where Tableau is running + * + * @param thisWindow The window which we are running in (injected for unit testing purposes) + * @param internalContractVersion The version number of the internal contract we are using + * @returns A promise which is doing the actual bootstrapping + */ +function doCrossFrameBootstrap(thisWindow, internalContractVersion, options) { + return new Promise(function (resolve, reject) { + var parent; + // Normally, we are running inside an iframe. The exception to this is + // when we are running as an extension inside a dialog as part of the UINamespace + // functionality. In that case, we want the opener of this window rather than the parent. + if (!inIframe(thisWindow)) { + parent = thisWindow.opener; + } + else { + parent = thisWindow.parent; + } + if (!parent) { + reject('This extension is not running inside an iframe, desktop, or popup window. Initialization failed.'); + } + // Create the messenger which will do he communication between this window and our parent + // Since we don't know where we are running yet, we have to make this initial origin '*'. Once + // we have successfully initialized our extension, we will limit where we send messages + var messenger = new api_internal_contract_js_1.CrossFrameMessenger(thisWindow, parent, '*'); + // Prepare to send an initialization message to the parent frame + var initializationMessage = messenger.prepareInitializationMessage(internalContractVersion, api_internal_contract_js_1.MESSAGING_VERSION, options); + // When we receive a response back from the parent, we check to make sure the guids match and then we know + // that the parent is aware of us and we can start communicating + messenger.setCommandResponseMessageHandler(function (msg) { + // Verify we are getting a response from our initialize message + if (msg.commandGuid === initializationMessage.messageGuid) { + // The versioning of the dispatcher happens on the other side of our frame, and + // in a wrapper on this side. This one doesn't have any version knowledge. + var dispatcherFactory = function () { return new CrossFrameDispatcher_1.CrossFrameDispatcher(messenger); }; + resolve(dispatcherFactory); + } + }); + // Now that our handlers are ready, start listening and send our initialization message + messenger.startListening(); + initializationMessage.send(); + }); +} +exports.doCrossFrameBootstrap = doCrossFrameBootstrap; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameDispatcher.js": +/*!*****************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/CrossFrame/CrossFrameDispatcher.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +/** + * This is an implementation of the InternalApiDispatcher interface which functions by passing messages + * across a frame boundary. This is usually between the code where our javscript library has been included + * by a 3rd party dev and another frame where Tableau server has content. + */ +var CrossFrameDispatcher = /** @class */ (function () { + /** + * Creates an instance of CrossFrameDispatcher which will use the given messenger to communicate + * @param _messenger an instantiated and listening messenger object + */ + function CrossFrameDispatcher(_messenger) { + this._messenger = _messenger; + // Collection of pending promises which are waiting to be resolved. When we receive a response back from the other frame, + // these promises can be either resolved or rejected + this._pendingPromises = {}; + // The collection of notification handlers which have been registered with this dispatcher + this._notificationHandlers = []; + if (!this._messenger) { + throw 'Missing messenger object'; + } + // Set up our message handlers. We only care about incoming notifications and command responses + this._messenger.setCommandResponseMessageHandler(this.onCommandResponse.bind(this)); + this._messenger.setNotificationMessageHandler(this.onNotification.bind(this)); + } + ////// Start InternalApiDispatcher implementation + CrossFrameDispatcher.prototype.execute = function (verb, parameters) { + var _this = this; + // To execute a verb, we first prepare a command message and then define a promise. + var preparedMessage = this._messenger.prepareCommandMessage(verb, parameters); + var promise = new Promise(function (resolve, reject) { + // Save off the pending promise by the messageGuid we are about to send. When a response is + // received, we'll be able to resolve this promise with the result + _this._pendingPromises[preparedMessage.messageGuid] = { resolve: resolve, reject: reject }; + }); + // Actually send the message and return the promise + preparedMessage.send(); + return promise; + }; + CrossFrameDispatcher.prototype.registerNotificationHandler = function (handler) { + this._notificationHandlers.push(handler); + }; + CrossFrameDispatcher.prototype.unregisterNotificationHandler = function (handler) { + this._notificationHandlers = this._notificationHandlers.filter(function (h) { return h !== handler; }); + }; + ////// End InternalApiDispatcher implementation + CrossFrameDispatcher.prototype.onCommandResponse = function (response) { + // We got a command response, look through the pending promises and resolve + if (Object.keys(this._pendingPromises).indexOf(response.commandGuid) < 0) { + return; // We don't have any reference to this command, just return + } + var pendingPromise = this._pendingPromises[response.commandGuid]; + // If we have an error defined, reject the promise + if (response.error) { + pendingPromise.reject(response.error); + } + // If we have data defined, resolve the promise + if (response.data) { + pendingPromise.resolve({ result: response.data }); + } + // Clean up our pending promises object + delete this._pendingPromises[response.commandGuid]; + }; + CrossFrameDispatcher.prototype.onNotification = function (notificationMessage) { + // Go through each notification handler we have registered and let them know a notification came in + for (var _i = 0, _a = this._notificationHandlers; _i < _a.length; _i++) { + var handler = _a[_i]; + try { + handler({ notificationId: notificationMessage.notificationId, data: notificationMessage.data }); + } + catch (e) { + // Incase of a IncompatibleVersionError, re-throw the error. + if (e.errorCode === api_external_contract_js_1.EmbeddingErrorCodes.IncompatibleVersionError) { + throw e; + } + // Else Ignore so if one handler errors, the other still get the message. + } + } + }; + return CrossFrameDispatcher; +}()); +exports.CrossFrameDispatcher = CrossFrameDispatcher; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/DataSource.js": +/*!********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/DataSource.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DataSource = /** @class */ (function () { + function DataSource(_dataSourceImpl) { + this._dataSourceImpl = _dataSourceImpl; + } + Object.defineProperty(DataSource.prototype, "name", { + get: function () { + return this._dataSourceImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSource.prototype, "id", { + get: function () { + return this._dataSourceImpl.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSource.prototype, "fields", { + get: function () { + return this._dataSourceImpl.fields; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSource.prototype, "extractUpdateTime", { + get: function () { + return this._dataSourceImpl.extractUpdateTime; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSource.prototype, "isExtract", { + get: function () { + return this._dataSourceImpl.isExtract; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSource.prototype, "isPublished", { + get: function () { + return this._dataSourceImpl.isPublished; + }, + enumerable: true, + configurable: true + }); + DataSource.prototype.publishedUrl = function () { + return this._dataSourceImpl.publishedUrl(); + }; + DataSource.prototype.refreshAsync = function () { + return this._dataSourceImpl.refreshAsync(); + }; + DataSource.prototype.getActiveTablesAsync = function () { + console.warn('DataSource.getActiveTablesAsync is deprecated. Please use DataSource.getLogicalTablesAsync.'); + return this._dataSourceImpl.getActiveTablesAsync(); + }; + DataSource.prototype.getConnectionSummariesAsync = function () { + return this._dataSourceImpl.getConnectionSummariesAsync(); + }; + DataSource.prototype.getUnderlyingDataAsync = function (options) { + console.warn('DataSource.getUnderlyingDataAsync is deprecated. Please use ' + + 'DataSource.getLogicalTablesAsync and DataSource.getLogicalTableDataAsync.'); + return this._dataSourceImpl.getUnderlyingDataAsync(options); + }; + DataSource.prototype.getLogicalTablesAsync = function () { + return this._dataSourceImpl.getLogicalTablesAsync(); + }; + DataSource.prototype.getLogicalTableDataAsync = function (logicalTableId, options) { + return this._dataSourceImpl.getLogicalTableDataAsync(logicalTableId, options); + }; + DataSource.prototype.getLogicalTableDataReaderAsync = function (logicalTableId, pageRowCount, options) { + return this._dataSourceImpl.getLogicalTableDataReaderAsync(logicalTableId, pageRowCount, options); + }; + return DataSource; +}()); +exports.DataSource = DataSource; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js": +/*!*****************************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js ***! + \*****************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var _a, _b, _c, _d, _e, _f, _g, _h, _j; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var EnumConverter_1 = __webpack_require__(/*! ../Utils/EnumConverter */ "../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js"); +/* tslint:disable:typedef - Disable this to make declaring these classes a bit easier */ +/** + * Maps enums used by the external-api-contract to the enums used + * in the internal-api-contract, which developers code against. + */ +var ExternalToInternalEnumMappings = /** @class */ (function () { + function ExternalToInternalEnumMappings() { + } + ExternalToInternalEnumMappings.filterDomainType = new EnumConverter_1.EnumConverter((_a = {}, + _a[api_external_contract_js_1.FilterDomainType.Relevant] = api_internal_contract_js_1.FilterDomainType.Relevant, + _a[api_external_contract_js_1.FilterDomainType.Database] = api_internal_contract_js_1.FilterDomainType.Database, + _a)); + ExternalToInternalEnumMappings.nullOptions = new EnumConverter_1.EnumConverter((_b = {}, + _b[api_external_contract_js_1.FilterNullOption.AllValues] = api_internal_contract_js_1.FilterNullOption.AllValues, + _b[api_external_contract_js_1.FilterNullOption.NonNullValues] = api_internal_contract_js_1.FilterNullOption.NonNullValues, + _b[api_external_contract_js_1.FilterNullOption.NullValues] = api_internal_contract_js_1.FilterNullOption.NullValues, + _b)); + ExternalToInternalEnumMappings.filterUpdateType = new EnumConverter_1.EnumConverter((_c = {}, + _c[api_external_contract_js_1.FilterUpdateType.Add] = api_internal_contract_js_1.FilterUpdateType.Add, + _c[api_external_contract_js_1.FilterUpdateType.All] = api_internal_contract_js_1.FilterUpdateType.All, + _c[api_external_contract_js_1.FilterUpdateType.Remove] = api_internal_contract_js_1.FilterUpdateType.Remove, + _c[api_external_contract_js_1.FilterUpdateType.Replace] = api_internal_contract_js_1.FilterUpdateType.Replace, + _c)); + ExternalToInternalEnumMappings.setVisibilityType = new EnumConverter_1.EnumConverter((_d = {}, + _d[api_external_contract_js_1.ZoneVisibilityType.Show] = true, + _d[api_external_contract_js_1.ZoneVisibilityType.Hide] = false, + _d)); + ExternalToInternalEnumMappings.setReplaySpeedType = new EnumConverter_1.EnumConverter((_e = {}, + // these numbers are duration multipliers + // 2.0, for example, doubles the duration of the replay, slowing it down to 0.5x speed + _e[api_external_contract_js_1.ReplaySpeedType.Slow] = 2.0, + _e[api_external_contract_js_1.ReplaySpeedType.Normal] = 1.0, + _e[api_external_contract_js_1.ReplaySpeedType.Fast] = 0.5, + _e)); + ExternalToInternalEnumMappings.showDataTableFormatType = new EnumConverter_1.EnumConverter((_f = {}, + _f[api_external_contract_js_1.IncludeDataValuesOption.AllValues] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeAndFormattedValues, + _f[api_external_contract_js_1.IncludeDataValuesOption.OnlyNativeValues] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeValuesOnly, + _f[api_external_contract_js_1.IncludeDataValuesOption.OnlyFormattedValues] = api_internal_contract_js_1.ApiShowDataTableFormat.FormattedValuesOnly, + _f)); + ExternalToInternalEnumMappings.periodType = new EnumConverter_1.EnumConverter((_g = {}, + _g[api_external_contract_js_1.PeriodType.Years] = api_internal_contract_js_1.DateStepPeriod.Years, + _g[api_external_contract_js_1.PeriodType.Quarters] = api_internal_contract_js_1.DateStepPeriod.Quarters, + _g[api_external_contract_js_1.PeriodType.Months] = api_internal_contract_js_1.DateStepPeriod.Months, + _g[api_external_contract_js_1.PeriodType.Weeks] = api_internal_contract_js_1.DateStepPeriod.Weeks, + _g[api_external_contract_js_1.PeriodType.Days] = api_internal_contract_js_1.DateStepPeriod.Days, + _g[api_external_contract_js_1.PeriodType.Hours] = api_internal_contract_js_1.DateStepPeriod.Hours, + _g[api_external_contract_js_1.PeriodType.Minutes] = api_internal_contract_js_1.DateStepPeriod.Minutes, + _g[api_external_contract_js_1.PeriodType.Seconds] = api_internal_contract_js_1.DateStepPeriod.Seconds, + _g)); + ExternalToInternalEnumMappings.dateRangeType = new EnumConverter_1.EnumConverter((_h = {}, + _h[api_external_contract_js_1.DateRangeType.Last] = api_internal_contract_js_1.DateRangeType.Last, + _h[api_external_contract_js_1.DateRangeType.LastN] = api_internal_contract_js_1.DateRangeType.LastN, + _h[api_external_contract_js_1.DateRangeType.Next] = api_internal_contract_js_1.DateRangeType.Next, + _h[api_external_contract_js_1.DateRangeType.NextN] = api_internal_contract_js_1.DateRangeType.NextN, + _h[api_external_contract_js_1.DateRangeType.Current] = api_internal_contract_js_1.DateRangeType.Current, + _h[api_external_contract_js_1.DateRangeType.ToDate] = api_internal_contract_js_1.DateRangeType.ToDate, + _h)); + ExternalToInternalEnumMappings.dialogStyles = new EnumConverter_1.EnumConverter((_j = {}, + _j[api_external_contract_js_1.DialogStyle.Window] = api_internal_contract_js_1.DialogStyle.Window, + _j[api_external_contract_js_1.DialogStyle.Modal] = api_internal_contract_js_1.DialogStyle.Modal, + _j[api_external_contract_js_1.DialogStyle.Modeless] = api_internal_contract_js_1.DialogStyle.Modeless, + _j)); + return ExternalToInternalEnumMappings; +}()); +exports.ExternalToInternalEnumMappings = ExternalToInternalEnumMappings; +/* tslint:enable:typedef */ + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js": +/*!*****************************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js ***! + \*****************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var EnumConverter_1 = __webpack_require__(/*! ../Utils/EnumConverter */ "../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js"); +/* tslint:disable:typedef - Disable this to make declaring these classes a bit easier */ +/** + * Maps enums used by the internal-api-contract to the enums used + * in the external-api-contract, which developers code against. + */ +var InternalToExternalEnumMappings = /** @class */ (function () { + function InternalToExternalEnumMappings() { + } + InternalToExternalEnumMappings.extensionContext = new EnumConverter_1.EnumConverter((_a = {}, + _a[api_internal_contract_js_1.ExtensionContext.Desktop] = api_external_contract_js_1.ExtensionContext.Desktop, + _a[api_internal_contract_js_1.ExtensionContext.Server] = api_external_contract_js_1.ExtensionContext.Server, + _a)); + InternalToExternalEnumMappings.extensionMode = new EnumConverter_1.EnumConverter((_b = {}, + _b[api_internal_contract_js_1.ExtensionMode.Authoring] = api_external_contract_js_1.ExtensionMode.Authoring, + _b[api_internal_contract_js_1.ExtensionMode.Viewing] = api_external_contract_js_1.ExtensionMode.Viewing, + _b)); + InternalToExternalEnumMappings.columnType = new EnumConverter_1.EnumConverter((_c = {}, + _c[api_internal_contract_js_1.ColumnType.Continuous] = api_external_contract_js_1.ColumnType.Continuous, + _c[api_internal_contract_js_1.ColumnType.Discrete] = api_external_contract_js_1.ColumnType.Discrete, + _c)); + InternalToExternalEnumMappings.fieldAggregationType = new EnumConverter_1.EnumConverter((_d = {}, + _d[api_internal_contract_js_1.FieldAggregationType.Attr] = api_external_contract_js_1.FieldAggregationType.Attr, + _d[api_internal_contract_js_1.FieldAggregationType.Avg] = api_external_contract_js_1.FieldAggregationType.Avg, + _d[api_internal_contract_js_1.FieldAggregationType.Count] = api_external_contract_js_1.FieldAggregationType.Count, + _d[api_internal_contract_js_1.FieldAggregationType.Countd] = api_external_contract_js_1.FieldAggregationType.Countd, + _d[api_internal_contract_js_1.FieldAggregationType.Day] = api_external_contract_js_1.FieldAggregationType.Day, + _d[api_internal_contract_js_1.FieldAggregationType.End] = api_external_contract_js_1.FieldAggregationType.End, + _d[api_internal_contract_js_1.FieldAggregationType.Hour] = api_external_contract_js_1.FieldAggregationType.Hour, + _d[api_internal_contract_js_1.FieldAggregationType.InOut] = api_external_contract_js_1.FieldAggregationType.InOut, + _d[api_internal_contract_js_1.FieldAggregationType.Kurtosis] = api_external_contract_js_1.FieldAggregationType.Kurtosis, + _d[api_internal_contract_js_1.FieldAggregationType.Max] = api_external_contract_js_1.FieldAggregationType.Max, + _d[api_internal_contract_js_1.FieldAggregationType.Mdy] = api_external_contract_js_1.FieldAggregationType.Mdy, + _d[api_internal_contract_js_1.FieldAggregationType.Median] = api_external_contract_js_1.FieldAggregationType.Median, + _d[api_internal_contract_js_1.FieldAggregationType.Min] = api_external_contract_js_1.FieldAggregationType.Min, + _d[api_internal_contract_js_1.FieldAggregationType.Minute] = api_external_contract_js_1.FieldAggregationType.Minute, + _d[api_internal_contract_js_1.FieldAggregationType.MonthYear] = api_external_contract_js_1.FieldAggregationType.MonthYear, + _d[api_internal_contract_js_1.FieldAggregationType.None] = api_external_contract_js_1.FieldAggregationType.None, + _d[api_internal_contract_js_1.FieldAggregationType.Qtr] = api_external_contract_js_1.FieldAggregationType.Qtr, + _d[api_internal_contract_js_1.FieldAggregationType.Quart1] = api_external_contract_js_1.FieldAggregationType.Quart1, + _d[api_internal_contract_js_1.FieldAggregationType.Quart3] = api_external_contract_js_1.FieldAggregationType.Quart3, + _d[api_internal_contract_js_1.FieldAggregationType.Second] = api_external_contract_js_1.FieldAggregationType.Second, + _d[api_internal_contract_js_1.FieldAggregationType.Skewness] = api_external_contract_js_1.FieldAggregationType.Skewness, + _d[api_internal_contract_js_1.FieldAggregationType.Stdev] = api_external_contract_js_1.FieldAggregationType.Stdev, + _d[api_internal_contract_js_1.FieldAggregationType.Stdevp] = api_external_contract_js_1.FieldAggregationType.Stdevp, + _d[api_internal_contract_js_1.FieldAggregationType.Sum] = api_external_contract_js_1.FieldAggregationType.Sum, + _d[api_internal_contract_js_1.FieldAggregationType.TruncDay] = api_external_contract_js_1.FieldAggregationType.TruncDay, + _d[api_internal_contract_js_1.FieldAggregationType.TruncHour] = api_external_contract_js_1.FieldAggregationType.TruncHour, + _d[api_internal_contract_js_1.FieldAggregationType.TruncMinute] = api_external_contract_js_1.FieldAggregationType.TruncMinute, + _d[api_internal_contract_js_1.FieldAggregationType.TruncMonth] = api_external_contract_js_1.FieldAggregationType.TruncMonth, + _d[api_internal_contract_js_1.FieldAggregationType.TruncQtr] = api_external_contract_js_1.FieldAggregationType.TruncQtr, + _d[api_internal_contract_js_1.FieldAggregationType.TruncSecond] = api_external_contract_js_1.FieldAggregationType.TruncSecond, + _d[api_internal_contract_js_1.FieldAggregationType.TruncWeek] = api_external_contract_js_1.FieldAggregationType.TruncWeek, + _d[api_internal_contract_js_1.FieldAggregationType.TruncYear] = api_external_contract_js_1.FieldAggregationType.TruncYear, + _d[api_internal_contract_js_1.FieldAggregationType.User] = api_external_contract_js_1.FieldAggregationType.User, + _d[api_internal_contract_js_1.FieldAggregationType.Var] = api_external_contract_js_1.FieldAggregationType.Var, + _d[api_internal_contract_js_1.FieldAggregationType.Varp] = api_external_contract_js_1.FieldAggregationType.Varp, + _d[api_internal_contract_js_1.FieldAggregationType.Week] = api_external_contract_js_1.FieldAggregationType.Week, + _d[api_internal_contract_js_1.FieldAggregationType.Weekday] = api_external_contract_js_1.FieldAggregationType.Weekday, + _d[api_internal_contract_js_1.FieldAggregationType.Year] = api_external_contract_js_1.FieldAggregationType.Year, + _d)); + InternalToExternalEnumMappings.fieldRoleType = new EnumConverter_1.EnumConverter((_e = {}, + _e[api_internal_contract_js_1.FieldRoleType.Dimension] = api_external_contract_js_1.FieldRoleType.Dimension, + _e[api_internal_contract_js_1.FieldRoleType.Measure] = api_external_contract_js_1.FieldRoleType.Measure, + _e[api_internal_contract_js_1.FieldRoleType.Unknown] = api_external_contract_js_1.FieldRoleType.Unknown, + _e)); + InternalToExternalEnumMappings.sheetType = new EnumConverter_1.EnumConverter((_f = {}, + _f[api_internal_contract_js_1.SheetType.Dashboard] = api_external_contract_js_1.SheetType.Dashboard, + _f[api_internal_contract_js_1.SheetType.Story] = api_external_contract_js_1.SheetType.Story, + _f[api_internal_contract_js_1.SheetType.Worksheet] = api_external_contract_js_1.SheetType.Worksheet, + _f)); + InternalToExternalEnumMappings.dashboardObjectType = new EnumConverter_1.EnumConverter((_g = {}, + _g[api_internal_contract_js_1.DashboardObjectType.Extension] = api_external_contract_js_1.DashboardObjectType.Extension, + _g[api_internal_contract_js_1.DashboardObjectType.Blank] = api_external_contract_js_1.DashboardObjectType.Blank, + _g[api_internal_contract_js_1.DashboardObjectType.Image] = api_external_contract_js_1.DashboardObjectType.Image, + _g[api_internal_contract_js_1.DashboardObjectType.Legend] = api_external_contract_js_1.DashboardObjectType.Legend, + _g[api_internal_contract_js_1.DashboardObjectType.PageFilter] = api_external_contract_js_1.DashboardObjectType.PageFilter, + _g[api_internal_contract_js_1.DashboardObjectType.ParameterControl] = api_external_contract_js_1.DashboardObjectType.ParameterControl, + _g[api_internal_contract_js_1.DashboardObjectType.QuickFilter] = api_external_contract_js_1.DashboardObjectType.QuickFilter, + _g[api_internal_contract_js_1.DashboardObjectType.Text] = api_external_contract_js_1.DashboardObjectType.Text, + _g[api_internal_contract_js_1.DashboardObjectType.Title] = api_external_contract_js_1.DashboardObjectType.Title, + _g[api_internal_contract_js_1.DashboardObjectType.WebPage] = api_external_contract_js_1.DashboardObjectType.WebPage, + _g[api_internal_contract_js_1.DashboardObjectType.Worksheet] = api_external_contract_js_1.DashboardObjectType.Worksheet, + _g)); + InternalToExternalEnumMappings.dataType = new EnumConverter_1.EnumConverter((_h = {}, + _h[api_internal_contract_js_1.DataType.Bool] = api_external_contract_js_1.DataType.Bool, + _h[api_internal_contract_js_1.DataType.Date] = api_external_contract_js_1.DataType.Date, + _h[api_internal_contract_js_1.DataType.DateTime] = api_external_contract_js_1.DataType.DateTime, + _h[api_internal_contract_js_1.DataType.Float] = api_external_contract_js_1.DataType.Float, + _h[api_internal_contract_js_1.DataType.Int] = api_external_contract_js_1.DataType.Int, + _h[api_internal_contract_js_1.DataType.String] = api_external_contract_js_1.DataType.String, + _h)); + InternalToExternalEnumMappings.filterUpdateType = new EnumConverter_1.EnumConverter((_j = {}, + _j[api_internal_contract_js_1.FilterUpdateType.Add] = api_external_contract_js_1.FilterUpdateType.Add, + _j[api_internal_contract_js_1.FilterUpdateType.All] = api_external_contract_js_1.FilterUpdateType.All, + _j[api_internal_contract_js_1.FilterUpdateType.Remove] = api_external_contract_js_1.FilterUpdateType.Remove, + _j[api_internal_contract_js_1.FilterUpdateType.Replace] = api_external_contract_js_1.FilterUpdateType.Replace, + _j)); + InternalToExternalEnumMappings.allowableValues = new EnumConverter_1.EnumConverter((_k = {}, + _k[api_internal_contract_js_1.DomainRestrictionType.All] = api_external_contract_js_1.ParameterValueType.All, + _k[api_internal_contract_js_1.DomainRestrictionType.List] = api_external_contract_js_1.ParameterValueType.List, + _k[api_internal_contract_js_1.DomainRestrictionType.Range] = api_external_contract_js_1.ParameterValueType.Range, + _k)); + InternalToExternalEnumMappings.dateStepPeriod = new EnumConverter_1.EnumConverter((_l = {}, + _l[api_internal_contract_js_1.DateStepPeriod.Years] = api_external_contract_js_1.PeriodType.Years, + _l[api_internal_contract_js_1.DateStepPeriod.Quarters] = api_external_contract_js_1.PeriodType.Quarters, + _l[api_internal_contract_js_1.DateStepPeriod.Months] = api_external_contract_js_1.PeriodType.Months, + _l[api_internal_contract_js_1.DateStepPeriod.Weeks] = api_external_contract_js_1.PeriodType.Weeks, + _l[api_internal_contract_js_1.DateStepPeriod.Days] = api_external_contract_js_1.PeriodType.Days, + _l[api_internal_contract_js_1.DateStepPeriod.Hours] = api_external_contract_js_1.PeriodType.Hours, + _l[api_internal_contract_js_1.DateStepPeriod.Minutes] = api_external_contract_js_1.PeriodType.Minutes, + _l[api_internal_contract_js_1.DateStepPeriod.Seconds] = api_external_contract_js_1.PeriodType.Seconds, + _l)); + InternalToExternalEnumMappings.dateRangeType = new EnumConverter_1.EnumConverter((_m = {}, + _m[api_internal_contract_js_1.DateRangeType.Current] = api_external_contract_js_1.DateRangeType.Current, + _m[api_internal_contract_js_1.DateRangeType.Last] = api_external_contract_js_1.DateRangeType.Last, + _m[api_internal_contract_js_1.DateRangeType.LastN] = api_external_contract_js_1.DateRangeType.LastN, + _m[api_internal_contract_js_1.DateRangeType.Next] = api_external_contract_js_1.DateRangeType.Next, + _m[api_internal_contract_js_1.DateRangeType.NextN] = api_external_contract_js_1.DateRangeType.NextN, + _m[api_internal_contract_js_1.DateRangeType.ToDate] = api_external_contract_js_1.DateRangeType.ToDate, + _m)); + InternalToExternalEnumMappings.errorCode = new EnumConverter_1.EnumConverter((_o = {}, + _o[api_internal_contract_js_1.ErrorCodes.INITIALIZATION_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.INTERNAL_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.MISSING_ENUM_MAPPING] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.MISSING_PARAMETER] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.PERMISSION_DENIED] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.PRES_MODEL_PARSING_ERROR] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.UNKNOWN_VERB_ID] = api_external_contract_js_1.ErrorCodes.InternalError, + _o[api_internal_contract_js_1.ErrorCodes.VERSION_NOT_CONFIGURED] = api_external_contract_js_1.ErrorCodes.APINotInitialized, + _o[api_internal_contract_js_1.ErrorCodes.VISIBILITY_ERROR] = api_external_contract_js_1.ErrorCodes.VisibilityError, + _o), api_external_contract_js_1.ErrorCodes.InternalError); + InternalToExternalEnumMappings.filterType = new EnumConverter_1.EnumConverter((_p = {}, + _p[api_internal_contract_js_1.FilterType.Categorical] = api_external_contract_js_1.FilterType.Categorical, + _p[api_internal_contract_js_1.FilterType.Range] = api_external_contract_js_1.FilterType.Range, + _p[api_internal_contract_js_1.FilterType.RelativeDate] = api_external_contract_js_1.FilterType.RelativeDate, + _p[api_internal_contract_js_1.FilterType.Hierarchical] = api_external_contract_js_1.FilterType.Hierarchical, + _p)); + InternalToExternalEnumMappings.classNameKey = new EnumConverter_1.EnumConverter((_q = {}, + _q["tableau-dashboard-title" /* DashboardTitle */] = api_external_contract_js_1.ClassNameKey.DashboardTitle, + _q["tableau-story-title" /* StoryTitle */] = api_external_contract_js_1.ClassNameKey.StoryTitle, + _q["tableau-tooltip" /* Tooltip */] = api_external_contract_js_1.ClassNameKey.Tooltip, + _q["tableau-worksheet" /* Worksheet */] = api_external_contract_js_1.ClassNameKey.Worksheet, + _q["tableau-worksheet-title" /* WorksheetTitle */] = api_external_contract_js_1.ClassNameKey.WorksheetTitle, + // Temporary until we fix 1317266 - Platform hasn't been updated currently because near branch is closed + _q['dashboard-title'] = api_external_contract_js_1.ClassNameKey.DashboardTitle, + _q['story-title'] = api_external_contract_js_1.ClassNameKey.StoryTitle, + _q['tooltip'] = api_external_contract_js_1.ClassNameKey.Tooltip, + _q['worksheet'] = api_external_contract_js_1.ClassNameKey.Worksheet, + _q['worksheet-title'] = api_external_contract_js_1.ClassNameKey.WorksheetTitle, + _q)); + InternalToExternalEnumMappings.hierarchicalLevelSelectionState = new EnumConverter_1.EnumConverter((_r = {}, + _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.AllSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.AllSelected, + _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.NoneSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.NoneSelected, + _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.SomeSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.SomeSelected, + _r[api_internal_contract_js_1.HierarchicalLevelSelectionState.UnknownSelected] = api_external_contract_js_1.HierarchicalLevelSelectionState.UnknownSelected, + _r)); + InternalToExternalEnumMappings.annotationType = new EnumConverter_1.EnumConverter((_s = {}, + _s[api_internal_contract_js_1.AnnotateEnum.Area] = api_external_contract_js_1.AnnotationType.Area, + _s[api_internal_contract_js_1.AnnotateEnum.Mark] = api_external_contract_js_1.AnnotationType.Mark, + _s[api_internal_contract_js_1.AnnotateEnum.Point] = api_external_contract_js_1.AnnotationType.Point, + _s)); + return InternalToExternalEnumMappings; +}()); +exports.InternalToExternalEnumMappings = InternalToExternalEnumMappings; +/* tslint:enable:typedef */ + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/EventListenerManager.js": +/*!******************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/EventListenerManager.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ./TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +/** + * Class designed to register and unregister handlers from a user. Only those events + * which are added via AddNewEventType will be supported by this instance + */ +var EventListenerManager = /** @class */ (function () { + function EventListenerManager() { + this._eventListenerManagers = {}; + } + EventListenerManager.prototype.addEventListener = function (eventType, handler) { + if (!this._eventListenerManagers.hasOwnProperty(eventType)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedEventName, "Cannot add event, unsupported event type: " + eventType); + } + return this._eventListenerManagers[eventType].addEventListener(handler); + }; + EventListenerManager.prototype.removeEventListener = function (eventType, handler) { + if (!this._eventListenerManagers.hasOwnProperty(eventType)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedEventName, "Cannot remove event, unsupported event type: " + eventType); + } + return this._eventListenerManagers[eventType].removeEventListener(handler); + }; + EventListenerManager.prototype.addNewEventType = function (eventManager) { + this._eventListenerManagers[eventManager.eventType] = eventManager; + }; + return EventListenerManager; +}()); +exports.EventListenerManager = EventListenerManager; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Field.js": +/*!***************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Field.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ErrorHelpers_1 = __webpack_require__(/*! ./Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Field = /** @class */ (function () { + function Field(_fieldImpl) { + this._fieldImpl = _fieldImpl; + } + Object.defineProperty(Field.prototype, "name", { + get: function () { + return this._fieldImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "id", { + get: function () { + return this._fieldImpl.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "description", { + get: function () { + return this._fieldImpl.description; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "aggregation", { + get: function () { + return this._fieldImpl.aggregation; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "dataSource", { + get: function () { + return this._fieldImpl.dataSource; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "role", { + get: function () { + return this._fieldImpl.role; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "isHidden", { + get: function () { + return this._fieldImpl.isHidden; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "isGenerated", { + get: function () { + return this._fieldImpl.isGenerated; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "isCalculatedField", { + get: function () { + return this._fieldImpl.isCalculatedField; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "columnType", { + get: function () { + throw ErrorHelpers_1.ErrorHelpers.apiNotImplemented('Field.columnType'); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Field.prototype, "isCombinedField", { + get: function () { + return this._fieldImpl.isCombinedField; + }, + enumerable: true, + configurable: true + }); + return Field; +}()); +exports.Field = Field; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/CustomViewImpl.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/CustomViewImpl.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ApiShared_1 = __webpack_require__(/*! ../../ApiShared */ "../api-shared-js/lib/src/ApiShared.js"); +var CustomViewImpl = /** @class */ (function () { + function CustomViewImpl(customViewModel, _registryId) { + this._registryId = _registryId; + this._luid = customViewModel.luid; + this._name = customViewModel.name; + this._shared = customViewModel.shared; + this._isDefault = customViewModel.isDefault; + this._ownerName = customViewModel.owner.userFriendlyName; + this._url = customViewModel.url; + } + Object.defineProperty(CustomViewImpl.prototype, "luid", { + get: function () { + return this._luid; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CustomViewImpl.prototype, "name", { + get: function () { + return this._name; + }, + set: function (name) { + this._name = name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CustomViewImpl.prototype, "shared", { + get: function () { + return this._shared; + }, + set: function (shared) { + this._shared = shared; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CustomViewImpl.prototype, "isDefault", { + get: function () { + return this._isDefault; + }, + set: function (isDefault) { + this._isDefault = isDefault; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CustomViewImpl.prototype, "ownerName", { + get: function () { + return this._ownerName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CustomViewImpl.prototype, "url", { + get: function () { + return this._url; + }, + enumerable: true, + configurable: true + }); + CustomViewImpl.prototype.saveAsync = function () { + var service = ApiShared_1.ApiServiceRegistry.get(this._registryId).getService("viz-service" /* Viz */); + return service.saveAsync(this); + }; + return CustomViewImpl; +}()); +exports.CustomViewImpl = CustomViewImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/DashboardImpl.js": +/*!****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/DashboardImpl.js ***! + \****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var Point_1 = __webpack_require__(/*! ../Point */ "../api-shared-js/lib/src/ApiShared/Point.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var DashboardObjectImpl_1 = __webpack_require__(/*! ./DashboardObjectImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DashboardObjectImpl.js"); +var SheetImpl_1 = __webpack_require__(/*! ./SheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js"); +var SheetInfoImpl_1 = __webpack_require__(/*! ./SheetInfoImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js"); +var WorksheetImpl_1 = __webpack_require__(/*! ./WorksheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js"); +var DashboardImpl = /** @class */ (function (_super) { + __extends(DashboardImpl, _super); + function DashboardImpl(_sheetInfo, _zones, _sheetPath, _registryId, _parentStoryPointImpl) { + var _this = _super.call(this, _sheetInfo, _registryId) || this; + _this._zones = _zones; + _this._sheetPath = _sheetPath; + _this._parentStoryPointImpl = _parentStoryPointImpl; + return _this; + } + Object.defineProperty(DashboardImpl.prototype, "worksheetsImpl", { + get: function () { + return this._worksheetsImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardImpl.prototype, "objects", { + get: function () { + return this._objects; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardImpl.prototype, "parentStoryPoint", { + get: function () { + return this._parentStoryPointImpl; + }, + enumerable: true, + configurable: true + }); + DashboardImpl.prototype.initializeWithPublicInterfaces = function () { + this._worksheetsImpl = new Array(); + this._objects = new Array(); + this.zoneMap = new Map(); + // Process all the zones which are contained in this dashboard + for (var _i = 0, _a = this._zones; _i < _a.length; _i++) { + var zone = _a[_i]; + var worksheetImpl = undefined; + var zoneSize = { width: zone.width, height: zone.height }; + // As the dashboard is active, all other zones in the dashboard are inactive. + var isActive = false; + if (zone.zoneType === api_internal_contract_js_1.DashboardObjectType.Worksheet) { + var worksheetName = ''; + var worksheetUrl = ''; + var isHidden = false; + if (zone.sheetInfo) { + // zone.sheetInfo was not initialized prior to internal-contract 1.6.0 + worksheetName = zone.sheetInfo.name; + // worksheetUrl & isHidden is for Embedding only + worksheetUrl = zone.sheetInfo.url || ''; + // If there's a url, then it's not hidden + isHidden = worksheetUrl === ''; + } + else { + worksheetName = zone.name; + } + // Indexes, isActive and some more properties in sheetInfoImpl are embedding specific. + // But we init them for both extensions and embedding as the Models will only use what is relevant. + var sheetInfoImpl = new SheetInfoImpl_1.SheetInfoImpl(worksheetName, api_external_contract_js_1.SheetType.Worksheet, zoneSize, this._worksheetsImpl.length, isActive, isHidden, worksheetUrl); + var vizId = { + worksheet: worksheetName, + dashboard: this._sheetInfoImpl.name, + storyboard: this._sheetPath.storyboard, + flipboardZoneID: this._sheetPath.flipboardZoneID, + storyPointID: this._sheetPath.storyPointID, + }; + worksheetImpl = new WorksheetImpl_1.WorksheetImpl(sheetInfoImpl, this._registryId, vizId, this, this._parentStoryPointImpl); + this._worksheetsImpl.push(worksheetImpl); + } + var zonePoint = new Point_1.Point(zone.x, zone.y); + var dashboardObjectImpl = new DashboardObjectImpl_1.DashboardObjectImpl(this, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dashboardObjectType.convert(zone.zoneType), zonePoint, zoneSize, worksheetImpl, zone.name, zone.isFloating !== undefined ? zone.isFloating : false, // before 1.6.0 we didn't have isFloating, so we assume false + zone.isVisible !== undefined ? zone.isVisible : true, // before 1.6.0 we didn't have isVisible, so we assume true + zone.zoneId); + this._objects.push(dashboardObjectImpl); + this.zoneMap.set(zone.zoneId, dashboardObjectImpl); + } + }; + DashboardImpl.prototype.setDashboardObjectVisibilityAsync = function (dashboardObjectVisibilityMap) { + var zoneService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("zone-service" /* Zone */); + return zoneService.setVisibilityAsync(/*Dashboard Name*/ this.name, this.zoneMap, dashboardObjectVisibilityMap); + }; + DashboardImpl.prototype.getDashboardObjectById = function (dashboardObjectId) { + return this.zoneMap.get(dashboardObjectId); + }; + DashboardImpl.prototype.updateZones = function (newZones) { + var _this = this; + // getting previous dashboard objects + var oldDashboardObjects = this._objects; + var oldZoneMap = this.zoneMap; + // updating zones, and reinitializing instance variables + this._zones = newZones; + this.initializeWithPublicInterfaces(); + // getting new dashboard objects + var newDashboardObjects = this._objects; + var newZoneMap = this.zoneMap; + // initializing map for changes + var zoneChanges = new Map(); + // comparing old dashboard objects with new ones + oldDashboardObjects.forEach(function (oldObject) { + var oldId = oldObject.id; + // checking if zone was removed + if (!newZoneMap.has(oldId)) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Removed); + return; + } + var newObject = newZoneMap.get(oldId); + if (oldObject.isFloating !== newObject.isFloating) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.IsFloatingChanged); + } + if (oldObject.isVisible !== newObject.isVisible) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.IsVisibleChanged); + } + if (oldObject.name !== newObject.name) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.NameChanged); + } + if (oldObject.position.x !== newObject.position.x || oldObject.position.y !== newObject.position.y) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.PositionChanged); + } + if (oldObject.size.width !== newObject.size.width || oldObject.size.height !== newObject.size.height) { + _this.addChange(oldId, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.SizeChanged); + } + }); + // Checking for any added zones + newDashboardObjects.forEach(function (newObject) { + if (!oldZoneMap.has(newObject.id)) { + _this.addChange(newObject.id, zoneChanges, api_external_contract_js_1.DashboardLayoutChange.Added); + } + }); + return zoneChanges; + }; + DashboardImpl.prototype.addChange = function (zoneId, zoneChanges, change) { + if (!zoneChanges.has(zoneId)) { + zoneChanges.set(zoneId, []); + } + zoneChanges.get(zoneId).push(change); + }; + DashboardImpl.prototype.moveAndResizeDashboardObjectsAsync = function (dashboardObjectPositionAndSizeUpdateArray) { + var zoneService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("zone-service" /* Zone */); + return zoneService.moveAndResizeAsync(/*Dashboard Name*/ this.name, this.zoneMap, dashboardObjectPositionAndSizeUpdateArray); + }; + DashboardImpl.prototype.replayAnimationAsync = function (replaySpeed) { + var animationService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("animation-service" /* Animation */); + return animationService.replayAsync(replaySpeed); + }; + DashboardImpl.prototype.getFiltersAsync = function () { + this.verifyActiveSheetOrEmbeddedInActiveStoryPoint(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.getDashboardFiltersAsync(); + }; + DashboardImpl.prototype.applyFilterAsync = function (fieldName, values, updateType, options) { + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'FilterUpdateType'); + ErrorHelpers_1.ErrorHelpers.verifyStringParameter(fieldName, 'fieldName'); + if (!Array.isArray(values)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyDashboardFilterAsync must be an array'); + } + this.verifyActiveSheetOrEmbeddedInActiveStoryPoint(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.applyDashboardFilterAsync(fieldName, values, updateType, options); + }; + DashboardImpl.prototype.verifyActiveSheetOrEmbeddedInActiveStoryPoint = function () { + var isRootAndActiveDashboard = this.active; + var isWithinActiveStoryPoint = this.parentStoryPoint != null && this.parentStoryPoint.active; + if (!isRootAndActiveDashboard && !isWithinActiveStoryPoint) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.NotActiveSheet, 'Operation not allowed on non-active sheet'); + } + }; + return DashboardImpl; +}(SheetImpl_1.SheetImpl)); +exports.DashboardImpl = DashboardImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/DashboardObjectImpl.js": +/*!**********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/DashboardObjectImpl.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of the dashboard objects - the zones in a dashboard. + * This does not follow the Impl pattern as it is just a property bag. + */ +var DashboardObjectImpl = /** @class */ (function () { + function DashboardObjectImpl(_dashboardImpl, _type, _position, _size, _worksheetImpl, _name, _isFloating, _isVisible, _id) { + this._dashboardImpl = _dashboardImpl; + this._type = _type; + this._position = _position; + this._size = _size; + this._worksheetImpl = _worksheetImpl; + this._name = _name; + this._isFloating = _isFloating; + this._isVisible = _isVisible; + this._id = _id; + } + Object.defineProperty(DashboardObjectImpl.prototype, "dashboardImpl", { + get: function () { + return this._dashboardImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "type", { + get: function () { + return this._type; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "position", { + get: function () { + return this._position; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "size", { + get: function () { + return this._size; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "worksheetImpl", { + get: function () { + return this._worksheetImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "name", { + get: function () { + return this._name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "isFloating", { + get: function () { + return this._isFloating; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "isVisible", { + get: function () { + return this._isVisible; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DashboardObjectImpl.prototype, "id", { + get: function () { + return this._id; + }, + enumerable: true, + configurable: true + }); + return DashboardObjectImpl; +}()); +exports.DashboardObjectImpl = DashboardObjectImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var ConnectionSummary_1 = __webpack_require__(/*! ../ConnectionSummary */ "../api-shared-js/lib/src/ApiShared/ConnectionSummary.js"); +var Field_1 = __webpack_require__(/*! ../Field */ "../api-shared-js/lib/src/ApiShared/Field.js"); +var LogicalTable_1 = __webpack_require__(/*! ../LogicalTable */ "../api-shared-js/lib/src/ApiShared/LogicalTable.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var TableSummary_1 = __webpack_require__(/*! ../TableSummary */ "../api-shared-js/lib/src/ApiShared/TableSummary.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var FieldImpl_1 = __webpack_require__(/*! ./FieldImpl */ "../api-shared-js/lib/src/ApiShared/Impl/FieldImpl.js"); +var DataSourceImpl = /** @class */ (function () { + function DataSourceImpl(_dataSourceInfo, _registryId) { + var _this = this; + this._dataSourceInfo = _dataSourceInfo; + this._registryId = _registryId; + this._fields = _dataSourceInfo.fields.map(function (fieldModel) { + var fieldImpl = new FieldImpl_1.FieldImpl(fieldModel, _this); + return new Field_1.Field(fieldImpl); + }); + } + Object.defineProperty(DataSourceImpl.prototype, "name", { + get: function () { + return this._dataSourceInfo.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSourceImpl.prototype, "id", { + get: function () { + return this._dataSourceInfo.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSourceImpl.prototype, "extractUpdateTime", { + get: function () { + return this._dataSourceInfo.extractUpdateTime; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSourceImpl.prototype, "fields", { + get: function () { + return this._fields; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSourceImpl.prototype, "isExtract", { + get: function () { + return this._dataSourceInfo.isExtract; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataSourceImpl.prototype, "isPublished", { + get: function () { + return this._dataSourceInfo.isPublished; + }, + enumerable: true, + configurable: true + }); + DataSourceImpl.prototype.publishedUrl = function () { + return this._dataSourceInfo.publishedUrl; + }; + DataSourceImpl.prototype.getMaxPageRowLimit = function () { + return 10000; + }; + DataSourceImpl.prototype.refreshAsync = function () { + var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return dataSourceService.refreshAsync(this._dataSourceInfo.id); + }; + DataSourceImpl.prototype.getConnectionSummariesAsync = function () { + var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return dataSourceService.getConnectionSummariesAsync(this._dataSourceInfo.id).then(function (summaries) { + return summaries.map(function (summary) { return new ConnectionSummary_1.ConnectionSummary(summary); }); + }); + }; + DataSourceImpl.prototype.getActiveTablesAsync = function () { + var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return dataSourceService.getActiveTablesAsync(this._dataSourceInfo.id).then(function (tableInfos) { + return tableInfos.map(function (tableInfo) { return new TableSummary_1.TableSummary(tableInfo); }); + }); + }; + DataSourceImpl.prototype.getUnderlyingDataAsync = function (options) { + var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return getDataService.getDataSourceDataAsync(this.id, !!options.ignoreAliases, options.maxRows || 0, // 0 and [] are defaults + options.columnsToInclude || [], options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + DataSourceImpl.prototype.getLogicalTableDataAsync = function (logicalTableId, options) { + var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return getDataService.getLogicalTableDataAsync(this.id, logicalTableId, !!options.ignoreAliases, options.maxRows || 0, // 0 and [] are defaults + options.columnsToInclude || [], options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + DataSourceImpl.prototype.getLogicalTableDataReaderAsync = function (logicalTableId, pageRowCount, options) { + var getDataService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return getDataService.getLogicalTableDataReaderAsync(this.id, logicalTableId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + DataSourceImpl.prototype.initializeWithPublicInterfaces = function (dataSource) { + ErrorHelpers_1.ErrorHelpers.verifyInternalValue(dataSource, 'dataSource'); + this._fields = this._dataSourceInfo.fields.map(function (fieldModel) { + var fieldImpl = new FieldImpl_1.FieldImpl(fieldModel, dataSource); + return new Field_1.Field(fieldImpl); + }); + }; + DataSourceImpl.prototype.getLogicalTablesAsync = function () { + var dataSourceService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return dataSourceService.getLogicalTablesAsync(this.id).then(function (logicalTableInfos) { + return logicalTableInfos.map(function (logicalTableInfo) { return new LogicalTable_1.LogicalTable(logicalTableInfo); }); + }); + }; + return DataSourceImpl; +}()); +exports.DataSourceImpl = DataSourceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/FieldImpl.js": +/*!************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/FieldImpl.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var FieldImpl = /** @class */ (function () { + function FieldImpl(_fieldInfo, _parentDataSource) { + this._fieldInfo = _fieldInfo; + this._parentDataSource = _parentDataSource; + } + Object.defineProperty(FieldImpl.prototype, "name", { + get: function () { + return this._fieldInfo.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "id", { + get: function () { + return this._fieldInfo.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "description", { + get: function () { + return this._fieldInfo.description; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "aggregation", { + get: function () { + return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.fieldAggregationType.convert(this._fieldInfo.aggregation); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "dataSource", { + get: function () { + return this._parentDataSource; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "role", { + get: function () { + return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.fieldRoleType.convert(this._fieldInfo.role); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "isHidden", { + get: function () { + return this._fieldInfo.isHidden; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "isGenerated", { + get: function () { + return this._fieldInfo.isGenerated; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "isCalculatedField", { + get: function () { + return this._fieldInfo.isCalculatedField; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FieldImpl.prototype, "isCombinedField", { + get: function () { + return this._fieldInfo.isCombinedField; + }, + enumerable: true, + configurable: true + }); + return FieldImpl; +}()); +exports.FieldImpl = FieldImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/ParameterImpl.js": +/*!****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/ParameterImpl.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var DataValueFactory_1 = __webpack_require__(/*! ../Utils/DataValueFactory */ "../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Param_1 = __webpack_require__(/*! ../Utils/Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +var ParameterImpl = /** @class */ (function () { + function ParameterImpl(parameterInfo, _registryId) { + this._registryId = _registryId; + this.setParameterInfo(parameterInfo); + } + Object.defineProperty(ParameterImpl.prototype, "name", { + get: function () { + return this._parameterInfo.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ParameterImpl.prototype, "currentValue", { + get: function () { + return DataValueFactory_1.DataValueFactory.MakeParameterDataValue(this._parameterInfo.currentValue, this._parameterInfo.dataType); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ParameterImpl.prototype, "dataType", { + get: function () { + return InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dataType.convert(this._parameterInfo.dataType); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ParameterImpl.prototype, "id", { + get: function () { + return this._globalFieldName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ParameterImpl.prototype, "allowableValues", { + get: function () { + return this._allowableValues; + }, + enumerable: true, + configurable: true + }); + ParameterImpl.prototype.changeValueAsync = function (newValue) { + var _this = this; + ErrorHelpers_1.ErrorHelpers.verifyParameter(newValue, 'newValue'); + var coercedValue = Param_1.Param.serializeParameterValue(newValue); + var parametersService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("parameters-service" /* Parameters */); + return parametersService.changeParameterValueAsync(this._globalFieldName, coercedValue).then(function (parameterInfo) { + _this.setParameterInfo(parameterInfo); + return _this.currentValue; + }); + }; + ParameterImpl.prototype.setParameterInfo = function (parameterInfo) { + this._parameterInfo = parameterInfo; + this._globalFieldName = parameterInfo.fieldName; + var type = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.allowableValues.convert(parameterInfo.allowableValuesType); + var listValues; + var minValue; + var maxValue; + var stepSize; + var dateStepPeriod; + if (type === api_external_contract_js_1.ParameterValueType.List) { + var values = parameterInfo.allowableValues || []; + listValues = values.map(function (val) { return DataValueFactory_1.DataValueFactory.MakeParameterDataValue(val, parameterInfo.dataType); }); + } + else if (type === api_external_contract_js_1.ParameterValueType.Range) { + minValue = parameterInfo.minValue && DataValueFactory_1.DataValueFactory.MakeParameterDataValue(parameterInfo.minValue, parameterInfo.dataType); + maxValue = parameterInfo.maxValue && DataValueFactory_1.DataValueFactory.MakeParameterDataValue(parameterInfo.maxValue, parameterInfo.dataType); + stepSize = parameterInfo.stepSize; + dateStepPeriod = parameterInfo.dateStepPeriod && InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateStepPeriod.convert(parameterInfo.dateStepPeriod); + } + this._allowableValues = { + type: type, + allowableValues: listValues, + minValue: minValue, + maxValue: maxValue, + stepSize: stepSize, + dateStepPeriod: dateStepPeriod, + }; + }; + return ParameterImpl; +}()); +exports.ParameterImpl = ParameterImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js": +/*!************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Param_1 = __webpack_require__(/*! ../Utils/Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +var SheetUtils_1 = __webpack_require__(/*! ../Utils/SheetUtils */ "../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js"); +var SheetImpl = /** @class */ (function () { + function SheetImpl(_sheetInfoImpl, _registryId) { + this._sheetInfoImpl = _sheetInfoImpl; + this._registryId = _registryId; + } + Object.defineProperty(SheetImpl.prototype, "name", { + get: function () { + return this._sheetInfoImpl.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "sheetType", { + get: function () { + return this._sheetInfoImpl.sheetType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "sheetPath", { + get: function () { + return this._sheetInfoImpl.sheetPath; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "size", { + get: function () { + return this._sheetInfoImpl.sheetSize; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "hidden", { + get: function () { + if (this._sheetInfoImpl.isHidden !== undefined) { + return this._sheetInfoImpl.isHidden; + } + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, "isHidden not implemented"); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "active", { + get: function () { + if (this._sheetInfoImpl.isActive !== undefined) { + return this._sheetInfoImpl.isActive; + } + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, "active not implemented"); + }, + set: function (active) { + if (this._sheetInfoImpl.isActive !== undefined) { + this._sheetInfoImpl.active = active; + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "index", { + get: function () { + if (this._sheetInfoImpl.index !== undefined) { + return this._sheetInfoImpl.index; + } + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, "index not implemented"); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetImpl.prototype, "url", { + get: function () { + if (this._sheetInfoImpl.url !== undefined) { + return this._sheetInfoImpl.url; + } + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.ImplementationError, "url not implemented"); + }, + enumerable: true, + configurable: true + }); + SheetImpl.prototype.getSheetSize = function () { + if (!SheetUtils_1.SheetUtils.isValidSheetSize(this.size)) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InternalError, 'size is not of type SheetSize'); + } + return this.size; + }; + SheetImpl.prototype.findParameterAsync = function (parameterName) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(parameterName, 'parameterName'); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("parameters-service" /* Parameters */); + return service.findParameterByNameAsync(parameterName); + }; + SheetImpl.prototype.getParametersAsync = function () { + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("parameters-service" /* Parameters */); + return service.getParametersForSheetAsync(this.sheetPath); + }; + SheetImpl.prototype.changeSizeAsync = function (newSize) { + var _this = this; + var invalidSizeError = new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Invalid sheet size parameter'); + if (!newSize || !newSize.behavior) { + throw invalidSizeError; + } + var partialSheetSize = this.normalizeSheetSize(newSize); + var isAutomatic = partialSheetSize.behavior === Contract.SheetSizeBehavior.Automatic; + if (!isAutomatic && !partialSheetSize.minSize && !partialSheetSize.maxSize) { + throw invalidSizeError; + } + if (!isAutomatic && this.sheetType === Contract.SheetType.Worksheet) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSizeBehaviorOnWorksheet, 'Only SheetSizeBehavior.Automatic is allowed on Worksheets'); + } + if (isAutomatic && this.getSheetSize().behavior === partialSheetSize.behavior) { + return Promise.resolve(newSize); + } + var processedNewSize = this.processNewSize(partialSheetSize); + var sizeService = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("size-service" /* Size */); + return sizeService.changeSizeAsync(this.name, processedNewSize).then(function () { + var clientInfoService = ServiceRegistry_1.ApiServiceRegistry.get(_this._registryId).getService("client-info-service" /* ClientInfo */); + return clientInfoService.getClientInfoAsync().then(function (bootstrapInfo) { + var sheet = bootstrapInfo.publishedSheets.find(function (s) { return s.name === _this.name; }); + if (!sheet) { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InternalError, "Can't find sheet with name " + _this.name); + } + var sheetSize = SheetUtils_1.SheetUtils.getSheetSizeFromSizeConstraints(sheet.sizeConstraint); + _this._sheetInfoImpl.sheetSize = sheetSize; + return sheetSize; + }); + }); + }; + SheetImpl.prototype.normalizeSheetSize = function (newSize) { + var behavior = newSize.behavior; + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(behavior, Contract.SheetSizeBehavior, 'SheetSizeBehavior'); + var minSize = SheetImpl.parseDimensions(newSize.minSize); + var maxSize = SheetImpl.parseDimensions(newSize.maxSize); + return { behavior: behavior, minSize: minSize, maxSize: maxSize }; + }; + SheetImpl.prototype.processNewSize = function (newSize) { + var _a, _b, _c, _d; + var behavior = newSize.behavior, minSizeMaybe = newSize.minSize, maxSizeMaybe = newSize.maxSize; + var hasMinWidth = !Param_1.Param.isNullOrUndefined((_a = minSizeMaybe) === null || _a === void 0 ? void 0 : _a.width); + var hasMinHeight = !Param_1.Param.isNullOrUndefined((_b = minSizeMaybe) === null || _b === void 0 ? void 0 : _b.height); + var hasMaxWidth = !Param_1.Param.isNullOrUndefined((_c = maxSizeMaybe) === null || _c === void 0 ? void 0 : _c.width); + var hasMaxHeight = !Param_1.Param.isNullOrUndefined((_d = maxSizeMaybe) === null || _d === void 0 ? void 0 : _d.height); + var hasValidMinSize = hasMinWidth && hasMinHeight; + var hasValidMaxSize = hasMaxWidth && hasMaxHeight; + switch (behavior) { + case Contract.SheetSizeBehavior.Automatic: { + return { behavior: behavior }; + } + case Contract.SheetSizeBehavior.AtMost: { + if (!maxSizeMaybe || !hasValidMaxSize) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMaxSize, 'Missing maxSize for SheetSizeBehavior.AtMost'); + } + var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height }; + if (maxSize.width < 0 || maxSize.height < 0) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Size value cannot be less than zero'); + } + return { behavior: behavior, maxSize: maxSize }; + } + case Contract.SheetSizeBehavior.AtLeast: { + if (!minSizeMaybe || !hasValidMinSize) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMinSize, 'Missing minSize for SheetSizeBehavior.AtLeast'); + } + var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height }; + if (minSize.width < 0 || minSize.height < 0) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Size value cannot be less than zero'); + } + return { behavior: behavior, minSize: minSize }; + } + case Contract.SheetSizeBehavior.Range: { + if (!minSizeMaybe || !maxSizeMaybe || !hasValidMinSize || !hasValidMaxSize) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.MissingMinMaxSize, 'Missing minSize or maxSize for SheetSizeBehavior.Range'); + } + var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height }; + var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height }; + if (minSize.width < 0 || + minSize.height < 0 || + maxSize.width < 0 || + maxSize.height < 0 || + minSize.width > maxSize.width || + minSize.height > maxSize.height) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Missing minSize or maxSize for SheetSizeBehavior.Range'); + } + return { behavior: behavior, minSize: minSize, maxSize: maxSize }; + } + case Contract.SheetSizeBehavior.Exactly: { + if (minSizeMaybe && maxSizeMaybe) { + if (hasValidMinSize && hasValidMaxSize) { + var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height }; + var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height }; + if (minSize.width !== maxSize.width || minSize.height !== maxSize.height) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Conflicting size values for SheetSizeBehavior.Exactly'); + } + return { behavior: behavior, minSize: minSize, maxSize: maxSize }; + } + if (hasValidMinSize) { + var minSize = { width: minSizeMaybe.width, height: minSizeMaybe.height }; + return { behavior: behavior, minSize: minSize, maxSize: minSize }; + } + if (hasValidMaxSize) { + var maxSize = { width: maxSizeMaybe.width, height: maxSizeMaybe.height }; + return { behavior: behavior, minSize: maxSize, maxSize: maxSize }; + } + } + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.InvalidSize, 'Invalid sheet size parameter'); + } + default: { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InternalError, "Unsupported sheet size behavior: " + behavior); + } + } + }; + SheetImpl.parseDimensions = function (size) { + var empty = { width: undefined, height: undefined }; + if (!size) { + return empty; + } + var _a = Param_1.Param.tryParseNumber(size.width), widthParsed = _a.success, parsedWidth = _a.parsed; + var _b = Param_1.Param.tryParseNumber(size.height), heightParsed = _b.success, parsedHeight = _b.parsed; + if (widthParsed && heightParsed) { + return { width: parsedWidth, height: parsedHeight }; + } + if (widthParsed) { + return { width: parsedWidth }; + } + if (heightParsed) { + return { height: parsedHeight }; + } + return empty; + }; + return SheetImpl; +}()); +exports.SheetImpl = SheetImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js": +/*!****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var SheetInfoImpl = /** @class */ (function () { + function SheetInfoImpl(_name, _sheetType, _sheetSize, _index, _isActive, _isHidden, _url) { + this._name = _name; + this._sheetType = _sheetType; + this._sheetSize = _sheetSize; + this._index = _index; + this._isActive = _isActive; + this._isHidden = _isHidden; + this._url = _url; + } + Object.defineProperty(SheetInfoImpl.prototype, "name", { + get: function () { + return this._name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "sheetSize", { + get: function () { + return this._sheetSize; + }, + set: function (value) { + this._sheetSize = value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "sheetType", { + get: function () { + return this._sheetType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "sheetPath", { + get: function () { + return { + sheetName: this.name, + isDashboard: this.sheetType === api_external_contract_js_1.SheetType.Dashboard, + }; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "index", { + get: function () { + return this._index; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "isActive", { + get: function () { + return this._isActive; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "active", { + set: function (active) { + this._isActive = active; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "isHidden", { + get: function () { + return this._isHidden; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SheetInfoImpl.prototype, "url", { + get: function () { + return this._url; + }, + enumerable: true, + configurable: true + }); + return SheetInfoImpl; +}()); +exports.SheetInfoImpl = SheetInfoImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/SingleEventManagerImpl.js": +/*!*************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/SingleEventManagerImpl.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * This class implements the SingleEventManager interface for a single type of Tableau event + * + * @template TEventType The Tableau event type this class specializes + */ +var SingleEventManagerImpl = /** @class */ (function () { + function SingleEventManagerImpl(eventType) { + this._eventType = eventType; + this._handlers = []; + } + Object.defineProperty(SingleEventManagerImpl.prototype, "eventType", { + get: function () { + return this._eventType; + }, + enumerable: true, + configurable: true + }); + SingleEventManagerImpl.prototype.addEventListener = function (handler) { + var _this = this; + this._handlers.push(handler); + return function () { return _this.removeEventListener(handler); }; + }; + SingleEventManagerImpl.prototype.removeEventListener = function (handler) { + var beforeCount = this._handlers.length; + this._handlers = this._handlers.filter(function (h) { return h !== handler; }); + return beforeCount > this._handlers.length; + }; + SingleEventManagerImpl.prototype.triggerEvent = function (eventGenerator) { + for (var _i = 0, _a = this._handlers; _i < _a.length; _i++) { + var handler = _a[_i]; + try { + var eventModel = eventGenerator(); + handler(eventModel); + } + catch (e) { + // Since this handler could be outside our control, just catch anything it throws and continue on + continue; + } + } + }; + return SingleEventManagerImpl; +}()); +exports.SingleEventManagerImpl = SingleEventManagerImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/StoryImpl.js": +/*!************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/StoryImpl.js ***! + \************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var ShortLivedDeferred_1 = __webpack_require__(/*! ../Utils/ShortLivedDeferred */ "../api-shared-js/lib/src/ApiShared/Utils/ShortLivedDeferred.js"); +var SheetImpl_1 = __webpack_require__(/*! ./SheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js"); +var StoryPointImpl_1 = __webpack_require__(/*! ./StoryPointImpl */ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointImpl.js"); +var StoryPointInfoImpl_1 = __webpack_require__(/*! ./StoryPointInfoImpl */ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointInfoImpl.js"); +var StoryImpl = /** @class */ (function (_super) { + __extends(StoryImpl, _super); + function StoryImpl(_sheetInfoImpl, storyModel, _publishedSheetInfos, _registryId) { + var _this = _super.call(this, _sheetInfoImpl, _registryId) || this; + _this._sheetInfoImpl = _sheetInfoImpl; + _this._publishedSheetInfos = _publishedSheetInfos; + _this._registryId = _registryId; + _this._storyPointInfoImpls = []; + _this._deferred = new ShortLivedDeferred_1.ShortLivedDeferred(); + _this.initializeStory(storyModel); + return _this; + } + StoryImpl.prototype.initializeStory = function (storyModel) { + var _this = this; + storyModel.storyPoints.forEach(function (storyPointModel) { + var isActive = storyPointModel.index === storyModel.activeStoryPointIndex; + var storyPointInfoImpl = new StoryPointInfoImpl_1.StoryPointInfoImpl(storyPointModel.caption, storyPointModel.index, storyPointModel.storyPointId, isActive, storyPointModel.updated, _this); + _this._storyPointInfoImpls.push(storyPointInfoImpl); + if (isActive) { + _this._activeStoryPointImpl = new StoryPointImpl_1.StoryPointImpl(storyPointInfoImpl, _this._publishedSheetInfos, _this._registryId, storyPointModel.containedSheetInfo); + } + }); + }; + StoryImpl.prototype.updateStoryInfo = function (index, storyPointModel) { + if (!this._storyPointInfoImpls) { + return; + } + var storyInfoImpl = this._storyPointInfoImpls[index]; + if (storyInfoImpl.storyPointId !== storyPointModel.storyPointId) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.StoryPointIdMismatch, "We should not be updating a story point when the IDs don't match. Existing storyPointID=" + storyInfoImpl.storyPointId + ", newStoryPointID=" + storyPointModel.storyPointId); + } + storyInfoImpl.caption = storyPointModel.caption; + storyInfoImpl.updated = storyPointModel.updated; + if (this._activeStoryPointImpl.storyPointId === storyPointModel.storyPointId) { + this._activeStoryPointImpl.updated = storyInfoImpl.updated; + } + }; + StoryImpl.prototype.updateStory = function (storyPointModel) { + var _this = this; + if (!this._storyPointInfoImpls) { + return; + } + this._storyPointInfoImpls.forEach(function (storyPointInfoImpl) { + var isActive = storyPointInfoImpl.storyPointId === storyPointModel.storyPointId; + if (isActive) { + // update the state + storyPointInfoImpl.caption = storyPointModel.caption; + storyPointInfoImpl.index = storyPointModel.index; + storyPointInfoImpl.active = true; + storyPointInfoImpl.updated = storyPointModel.updated; + // re-initialize activeStoryPointImpl + _this._activeStoryPointImpl = new StoryPointImpl_1.StoryPointImpl(storyPointInfoImpl, _this._publishedSheetInfos, _this._registryId, storyPointModel.containedSheetInfo); + } + else { + // set old ones to false + storyPointInfoImpl.active = false; + } + }); + if (this.activeStoryPoint) { + this._deferred.resolve(this.activeStoryPoint); + } + }; + Object.defineProperty(StoryImpl.prototype, "activeStoryPoint", { + get: function () { + return this._activeStoryPointImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryImpl.prototype, "storyPointsInfo", { + get: function () { + return this._storyPointInfoImpls; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryImpl.prototype, "isActive", { + get: function () { + return this._sheetInfoImpl.active; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryImpl.prototype, "isHidden", { + get: function () { + return !!this._sheetInfoImpl.isHidden; + }, + enumerable: true, + configurable: true + }); + StoryImpl.prototype.activateNextStoryPointAsync = function () { + if (this._activeStoryPointImpl.index === this._storyPointInfoImpls.length - 1) { + return Promise.resolve(this._activeStoryPointImpl); + } + var promise = this._deferred.getNewPromiseOrThrowIfBusy(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("story-activation-service" /* StoryActivation */); + service.activateNextStoryPointAsync(); + return promise; + }; + StoryImpl.prototype.activatePreviousStoryPointAsync = function () { + if (this._activeStoryPointImpl.index === 0) { + return Promise.resolve(this._activeStoryPointImpl); + } + var promise = this._deferred.getNewPromiseOrThrowIfBusy(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("story-activation-service" /* StoryActivation */); + service.activatePreviousStoryPointAsync(); + return promise; + }; + StoryImpl.prototype.activateStoryPointAsync = function (index) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(index, 'index'); + ErrorHelpers_1.ErrorHelpers.verifyParameterType(index, 'number', 'index'); + if (index < 0 || index >= this._storyPointInfoImpls.length) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.IndexOutOfRange, 'The index passed to this command is out of range.'); + } + if (index === this._activeStoryPointImpl.index) { + return Promise.resolve(this._activeStoryPointImpl); + } + var promise = this._deferred.getNewPromiseOrThrowIfBusy(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("story-activation-service" /* StoryActivation */); + service.activateStoryPointAsync(index); + return promise; + }; + StoryImpl.prototype.revertStoryPointAsync = function (index) { + var _this = this; + ErrorHelpers_1.ErrorHelpers.verifyParameter(index, 'index'); + ErrorHelpers_1.ErrorHelpers.verifyParameterType(index, 'number', 'index'); + if (index < 0 || index >= this._storyPointInfoImpls.length) { + throw new TableauError_1.TableauError(Contract.EmbeddingErrorCodes.IndexOutOfRange, 'The index passed to this command is out of range.'); + } + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("story-activation-service" /* StoryActivation */); + return service.revertStoryPointAsync(index).then(function (response) { + _this.updateStoryInfo(response.index, response); + var storyPointInfoImpl = new StoryPointInfoImpl_1.StoryPointInfoImpl(response.caption, response.index, response.storyPointId, false, response.updated, _this); + return storyPointInfoImpl; + }); + }; + StoryImpl.prototype.clearPendingPromises = function () { + if (this._deferred) { + this._deferred.reject('All pending promises cleared'); + } + }; + return StoryImpl; +}(SheetImpl_1.SheetImpl)); +exports.StoryImpl = StoryImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointImpl.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/StoryPointImpl.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var SheetUtils_1 = __webpack_require__(/*! ../Utils/SheetUtils */ "../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js"); +var DashboardImpl_1 = __webpack_require__(/*! ./DashboardImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DashboardImpl.js"); +var SheetInfoImpl_1 = __webpack_require__(/*! ./SheetInfoImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetInfoImpl.js"); +var WorksheetImpl_1 = __webpack_require__(/*! ./WorksheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js"); +var StoryPointImpl = /** @class */ (function () { + function StoryPointImpl(_storyPointInfoImpl, sheetInfos, registryId, containedSheetInfo) { + this._storyPointInfoImpl = _storyPointInfoImpl; + if (containedSheetInfo) { + this._containedSheetImpl = this.createContainedSheet(containedSheetInfo, sheetInfos, registryId); + } + } + Object.defineProperty(StoryPointImpl.prototype, "index", { + get: function () { + return this._storyPointInfoImpl.index; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "caption", { + get: function () { + return this._storyPointInfoImpl.caption; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "active", { + get: function () { + return this._storyPointInfoImpl.active; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "updated", { + get: function () { + return this._storyPointInfoImpl.updated; + }, + set: function (updated) { + this._storyPointInfoImpl.updated = updated; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "parentStory", { + get: function () { + return this._storyPointInfoImpl.parentStory; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "containedSheet", { + get: function () { + return this._containedSheetImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointImpl.prototype, "storyPointId", { + get: function () { + return this._storyPointInfoImpl.storyPointId; + }, + enumerable: true, + configurable: true + }); + StoryPointImpl.prototype.createContainedSheet = function (containedSheetInfo, sheetInfos, registryId) { + var containedSheetIdx = -1; + var publishedSheetInfo = SheetUtils_1.SheetUtils.getPublishedSheetInfoByName(containedSheetInfo.name, sheetInfos); + var containedSheetSize = SheetUtils_1.SheetUtils.createAutomaticSize(); + var isContainedSheetHidden = publishedSheetInfo === undefined; + var containedSheetUrl = publishedSheetInfo ? publishedSheetInfo.url : ''; + // Contained sheets aren't active - the containing sheet is active. + var containedSheetActive = false; + var containedSheetInfoImpl = new SheetInfoImpl_1.SheetInfoImpl(containedSheetInfo.name, SheetUtils_1.SheetUtils.getSheetTypeEnum(containedSheetInfo.sheetType), containedSheetSize, containedSheetIdx, containedSheetActive, isContainedSheetHidden, containedSheetUrl); + var sheetImpl; + switch (containedSheetInfoImpl.sheetType) { + case Contract.SheetType.Worksheet: { + var vizId = { + worksheet: containedSheetInfoImpl.name, + }; + sheetImpl = new WorksheetImpl_1.WorksheetImpl(containedSheetInfoImpl, registryId, vizId, null, this); + break; + } + case Contract.SheetType.Dashboard: { + var sheetPath = { + sheetName: containedSheetInfoImpl.name, + isDashboard: true, + }; + sheetImpl = new DashboardImpl_1.DashboardImpl(containedSheetInfoImpl, containedSheetInfo.dashboardZones, sheetPath, registryId, this); + break; + } + default: { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ServerError, 'Invalid SheetType'); + } + } + return sheetImpl; + }; + return StoryPointImpl; +}()); +exports.StoryPointImpl = StoryPointImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/StoryPointInfoImpl.js": +/*!*********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/StoryPointInfoImpl.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var StoryPointInfoImpl = /** @class */ (function () { + function StoryPointInfoImpl(_caption, _index, _storyPointId, _active, _updated, _parentStoryImpl) { + this._caption = _caption; + this._index = _index; + this._storyPointId = _storyPointId; + this._active = _active; + this._updated = _updated; + this._parentStoryImpl = _parentStoryImpl; + } + Object.defineProperty(StoryPointInfoImpl.prototype, "caption", { + get: function () { + return this._caption; + }, + set: function (caption) { + this._caption = caption; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointInfoImpl.prototype, "index", { + get: function () { + return this._index; + }, + set: function (index) { + this._index = index; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointInfoImpl.prototype, "storyPointId", { + get: function () { + return this._storyPointId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointInfoImpl.prototype, "active", { + get: function () { + return this._active; + }, + set: function (isActive) { + this._active = isActive; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointInfoImpl.prototype, "updated", { + get: function () { + return this._updated; + }, + set: function (isUpdated) { + this._updated = isUpdated; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StoryPointInfoImpl.prototype, "parentStory", { + get: function () { + return this._parentStoryImpl; + }, + enumerable: true, + configurable: true + }); + return StoryPointInfoImpl; +}()); +exports.StoryPointInfoImpl = StoryPointInfoImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/WorkbookImpl.js": +/*!***************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/WorkbookImpl.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var WorkbookImpl = /** @class */ (function () { + function WorkbookImpl() { + } + return WorkbookImpl; +}()); +exports.WorkbookImpl = WorkbookImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js": +/*!****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Impl/WorksheetImpl.js ***! + \****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var DataSource_1 = __webpack_require__(/*! ../DataSource */ "../api-shared-js/lib/src/ApiShared/DataSource.js"); +var LogicalTable_1 = __webpack_require__(/*! ../LogicalTable */ "../api-shared-js/lib/src/ApiShared/LogicalTable.js"); +var GetDataService_1 = __webpack_require__(/*! ../Services/GetDataService */ "../api-shared-js/lib/src/ApiShared/Services/GetDataService.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var DataSourceImpl_1 = __webpack_require__(/*! ./DataSourceImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js"); +var SheetImpl_1 = __webpack_require__(/*! ./SheetImpl */ "../api-shared-js/lib/src/ApiShared/Impl/SheetImpl.js"); +var WorksheetImpl = /** @class */ (function (_super) { + __extends(WorksheetImpl, _super); + function WorksheetImpl(sheetInfoImpl, _registryId, _visualId, _parentDashboardImpl, _parentStoryPointImpl) { + var _this = _super.call(this, sheetInfoImpl, _registryId) || this; + _this._visualId = _visualId; + _this._parentDashboardImpl = _parentDashboardImpl; + _this._parentStoryPointImpl = _parentStoryPointImpl; + return _this; + } + Object.defineProperty(WorksheetImpl.prototype, "parentDashboard", { + get: function () { + return this._parentDashboardImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(WorksheetImpl.prototype, "parentStoryPoint", { + get: function () { + return this._parentStoryPointImpl; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(WorksheetImpl.prototype, "visualId", { + get: function () { + return this._visualId; + }, + enumerable: true, + configurable: true + }); + WorksheetImpl.prototype.getMaxPageRowLimit = function () { + return 10000; + }; + WorksheetImpl.prototype.applyFilterAsync = function (fieldName, values, updateType, options) { + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'Contract.FilterUpdateType'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.applyFilterAsync(this.visualId, fieldName, values, updateType, options); + }; + WorksheetImpl.prototype.applyRangeFilterAsync = function (fieldName, filterOptions) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName'); + ErrorHelpers_1.ErrorHelpers.verifyParameter(filterOptions, 'filterOptions'); + if (filterOptions.nullOption) { + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(filterOptions.nullOption, api_external_contract_js_1.FilterNullOption, 'FilterNullOption'); + } + else { + ErrorHelpers_1.ErrorHelpers.verifyRangeParamType(filterOptions.min, filterOptions.max); + } + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.applyRangeFilterAsync(this.visualId, fieldName, filterOptions); + }; + WorksheetImpl.prototype.applyHierarchicalFilterAsync = function (fieldName, values, updateType, options) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName'); + ErrorHelpers_1.ErrorHelpers.verifyParameter(values, 'values'); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(updateType, Contract.FilterUpdateType, 'Contract.FilterUpdateType'); + if (!Array.isArray(values) && !values.levels) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyHierarchicalFilterAsync must be an array or contain a levels key'); + } + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.applyHierarchicalFilterAsync(this.visualId, fieldName, values, updateType, options); + }; + WorksheetImpl.prototype.clearFilterAsync = function (fieldName) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(fieldName, 'fieldName'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.clearFilterAsync(this.visualId, fieldName); + }; + WorksheetImpl.prototype.applyRelativeDateFilterAsync = function (fieldName, options) { + ErrorHelpers_1.ErrorHelpers.verifyStringParameter(fieldName, 'fieldName'); + ErrorHelpers_1.ErrorHelpers.verifyParameter(options, 'options'); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(options.periodType, api_external_contract_js_1.PeriodType, 'PeriodType'); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(options.rangeType, api_external_contract_js_1.DateRangeType, 'DateRangeType'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.applyRelativeDateFilterAsync(this.visualId, fieldName, options); + }; + WorksheetImpl.prototype.getDataSourcesAsync = function () { + var _this = this; + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return service.getDataSourcesAsync(this.visualId).then(function (result) { + var dataSchema = result; + var worksheetDataSourceInfo = dataSchema.worksheetDataSchemaMap[_this.name]; + var dataSources = []; + // First, add the primary datasource. By convention, it comes first in the returned array. + var primaryId = worksheetDataSourceInfo.primaryDataSource; + dataSources.push(_this.createDataSourceFromInfo(dataSchema.dataSources[primaryId])); + // Then, loop through any secondary data sources and add them. + for (var _i = 0, _a = worksheetDataSourceInfo.referencedDataSourceList; _i < _a.length; _i++) { + var secondaryId = _a[_i]; + if (secondaryId !== primaryId) { + dataSources.push(_this.createDataSourceFromInfo(dataSchema.dataSources[secondaryId])); + } + } + return dataSources; + }); + }; + WorksheetImpl.prototype.getFiltersAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.getFiltersAsync(this.visualId); + }; + WorksheetImpl.prototype.getSelectedMarksAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + return service.getSelectedMarksAsync(this.visualId); + }; + WorksheetImpl.prototype.getHighlightedMarksAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + return service.getHighlightedMarksAsync(this.visualId); + }; + WorksheetImpl.prototype.getSummaryDataAsync = function (options) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return service.getUnderlyingDataAsync(this.visualId, GetDataService_1.GetDataType.Summary, !!options.ignoreAliases, !!options.ignoreSelection, true, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + WorksheetImpl.prototype.getSummaryDataReaderAsync = function (pageRowCount, options) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return service.getSummaryDataReaderAsync(this.visualId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, !!options.ignoreSelection, true, // includeAllColumns (can be overridden by columnsToIncludeById) + options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + WorksheetImpl.prototype.getSummaryColumnsInfoAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + return service.getSummaryColumnsInfoAsync(this.visualId); + }; + WorksheetImpl.prototype.getUnderlyingDataAsync = function (options) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return service.getUnderlyingDataAsync(this.visualId, GetDataService_1.GetDataType.Underlying, !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + WorksheetImpl.prototype.getUnderlyingTablesAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return service.getUnderlyingTablesAsync(this.visualId).then(function (logicalTableInfos) { + return logicalTableInfos.map(function (logicalTableInfo) { return new LogicalTable_1.LogicalTable(logicalTableInfo); }); + }); + }; + WorksheetImpl.prototype.getUnderlyingTableDataAsync = function (logicalTableId, options) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return service.getUnderlyingTableDataAsync(this.visualId, logicalTableId, !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.maxRows || 0, options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + WorksheetImpl.prototype.getUnderlyingTableDataReaderAsync = function (logicalTableId, pageRowCount, options) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + options = options || {}; + return service.getUnderlyingTableDataReaderAsync(this.visualId, logicalTableId, pageRowCount || this.getMaxPageRowLimit(), !!options.ignoreAliases, !!options.ignoreSelection, !!options.includeAllColumns, options.columnsToIncludeById || [], options.includeDataValuesOption || api_external_contract_js_1.IncludeDataValuesOption.AllValues); + }; + WorksheetImpl.prototype.clearSelectedMarksAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("selection-service" /* Selection */); + return service.clearSelectedMarksAsync(this.visualId); + }; + WorksheetImpl.prototype.selectMarksByValueAsync = function (selections, selectionUpdateType) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(selections, 'fieldName'); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(selectionUpdateType, api_external_contract_js_1.SelectionUpdateType, 'SelectionUpdateType'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("selection-service" /* Selection */); + return service.selectMarksByValueAsync(this.visualId, selections, selectionUpdateType); + }; + WorksheetImpl.prototype.selectMarksByIdAsync = function (selections, selectionUpdateType) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(selections, 'fieldName'); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(selectionUpdateType, api_external_contract_js_1.SelectionUpdateType, 'SelectionUpdateType'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("selection-service" /* Selection */); + return service.selectMarksByIdAsync(this.visualId, selections, selectionUpdateType); + }; + WorksheetImpl.prototype.annotateMarkAsync = function (mark, annotationText) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(mark, 'mark'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("annotation-service" /* Annotation */); + return service.annotateMarkAsync(this.visualId, mark, annotationText); + }; + WorksheetImpl.prototype.getAnnotationsAsync = function () { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("annotation-service" /* Annotation */); + return service.getAnnotationsAsync(this.visualId); + }; + WorksheetImpl.prototype.removeAnnotationAsync = function (annotation) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(annotation, 'annotation'); + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("annotation-service" /* Annotation */); + return service.removeAnnotationAsync(this.visualId, annotation); + }; + WorksheetImpl.prototype.appendContextMenuAsync = function (targetMenu, config) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("external-context-menu-service" /* ExternalContextMenu */); + return service.appendContextMenuAsync(this.visualId.worksheet, targetMenu, config); + }; + WorksheetImpl.prototype.removeContextMenuAsync = function (targetMenu, menuItemId) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("external-context-menu-service" /* ExternalContextMenu */); + return service.removeContextMenuAsync(this.visualId.worksheet, targetMenu, menuItemId); + }; + WorksheetImpl.prototype.executeContextMenuAsync = function (targetMenu, menuItemId) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("external-context-menu-service" /* ExternalContextMenu */); + return service.executeContextMenuAsync(this.visualId.worksheet, targetMenu, menuItemId); + }; + WorksheetImpl.prototype.renameContextMenuAsync = function (targetMenu, menuHeader, menuDescription) { + this.verifyActiveSheet(); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("external-context-menu-service" /* ExternalContextMenu */); + return service.renameContextMenuAsync(this.visualId.worksheet, targetMenu, menuHeader, menuDescription); + }; + WorksheetImpl.prototype.createDataSourceFromInfo = function (dataSourceInfo) { + var dataSourceImpl = new DataSourceImpl_1.DataSourceImpl(dataSourceInfo, this._registryId); + var dataSource = new DataSource_1.DataSource(dataSourceImpl); + dataSourceImpl.initializeWithPublicInterfaces(dataSource); + return dataSource; + }; + WorksheetImpl.prototype.verifyActiveSheet = function () { + var isRootAndActiveWorksheet = this.active; + var isInsideActiveDashboard = this.isInsideActiveDashboard(); + var isInsideActiveStoryPoint = this.isInsideActiveStoryPoint(); + if (!isRootAndActiveWorksheet && !isInsideActiveDashboard && !isInsideActiveStoryPoint) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.NotActiveSheet, 'Operation not allowed on non-active sheet'); + } + }; + WorksheetImpl.prototype.isInsideActiveStoryPoint = function () { + return this._parentStoryPointImpl && this._parentStoryPointImpl.active; + }; + WorksheetImpl.prototype.isInsideActiveDashboard = function () { + return this._parentDashboardImpl && this._parentDashboardImpl.active; + }; + return WorksheetImpl; +}(SheetImpl_1.SheetImpl)); +exports.WorksheetImpl = WorksheetImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/LogicalTable.js": +/*!**********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/LogicalTable.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of a logical table. + * This does not follow the Impl pattern as it is just a property bag. + */ +var LogicalTable = /** @class */ (function () { + function LogicalTable(_logicalTable) { + this._logicalTable = _logicalTable; + } + Object.defineProperty(LogicalTable.prototype, "id", { + get: function () { + return this._logicalTable.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LogicalTable.prototype, "caption", { + get: function () { + return this._logicalTable.caption; + }, + enumerable: true, + configurable: true + }); + return LogicalTable; +}()); +exports.LogicalTable = LogicalTable; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Models/FilterModels.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Models/FilterModels.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Filter = /** @class */ (function () { + function Filter(_worksheetName, _fieldName, _filterType, _fieldId, _registryId) { + this._worksheetName = _worksheetName; + this._fieldName = _fieldName; + this._filterType = _filterType; + this._fieldId = _fieldId; + this._registryId = _registryId; + } + Object.defineProperty(Filter.prototype, "worksheetName", { + get: function () { + return this._worksheetName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Filter.prototype, "fieldName", { + get: function () { + return this._fieldName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Filter.prototype, "fieldId", { + get: function () { + return this._fieldId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Filter.prototype, "filterType", { + get: function () { + return this._filterType; + }, + enumerable: true, + configurable: true + }); + Filter.prototype.getFieldAsync = function () { + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("data-source-service" /* DataSourceService */); + return service.getFieldAsync(this._fieldId); + }; + Filter.prototype.getAppliedWorksheetsAsync = function () { + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.getAppliedWorksheetsAsync(this._worksheetName, this._fieldId); + }; + Filter.prototype.setAppliedWorksheetsAsync = function (applyToWorksheets) { + ErrorHelpers_1.ErrorHelpers.verifyParameter(applyToWorksheets, 'applyToWorksheets'); + var uniqueWorksheets = new Set(applyToWorksheets); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.setAppliedWorksheetsAsync(this._worksheetName, this._fieldName, this._fieldId, Array.from(uniqueWorksheets)); + }; + return Filter; +}()); +exports.Filter = Filter; +var CategoricalFilter = /** @class */ (function (_super) { + __extends(CategoricalFilter, _super); + function CategoricalFilter(worksheetName, fieldName, fieldId, filterType, registryId, _appliedValues, _isExcludeMode, _isAllSelected) { + var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this; + _this._appliedValues = _appliedValues; + _this._isExcludeMode = _isExcludeMode; + _this._isAllSelected = _isAllSelected; + return _this; + } + Object.defineProperty(CategoricalFilter.prototype, "isAllSelected", { + get: function () { + return this._isAllSelected; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CategoricalFilter.prototype, "appliedValues", { + get: function () { + return this._appliedValues; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CategoricalFilter.prototype, "isExcludeMode", { + get: function () { + return this._isExcludeMode; + }, + enumerable: true, + configurable: true + }); + CategoricalFilter.prototype.getDomainAsync = function (domainType) { + if (!domainType) { + domainType = api_external_contract_js_1.FilterDomainType.Relevant; + } + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(domainType, api_external_contract_js_1.FilterDomainType, 'FilterDomainType'); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + return service.getCategoricalDomainAsync(this._worksheetName, this._fieldId, domainType); + }; + return CategoricalFilter; +}(Filter)); +exports.CategoricalFilter = CategoricalFilter; +var HierarchicalDataValue = /** @class */ (function () { + function HierarchicalDataValue(_value, _hierarchicalPath, _level) { + this._value = _value; + this._hierarchicalPath = _hierarchicalPath; + this._level = _level; + } + Object.defineProperty(HierarchicalDataValue.prototype, "value", { + get: function () { + return this._value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalDataValue.prototype, "hierarchicalPath", { + get: function () { + return this._hierarchicalPath; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalDataValue.prototype, "level", { + get: function () { + return this._level; + }, + enumerable: true, + configurable: true + }); + return HierarchicalDataValue; +}()); +exports.HierarchicalDataValue = HierarchicalDataValue; +var HierarchicalLevelDetail = /** @class */ (function () { + function HierarchicalLevelDetail(_name, _levelSelectionState) { + this._name = _name; + this._levelSelectionState = _levelSelectionState; + } + Object.defineProperty(HierarchicalLevelDetail.prototype, "name", { + get: function () { + return this._name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalLevelDetail.prototype, "levelSelectionState", { + get: function () { + return this._levelSelectionState; + }, + enumerable: true, + configurable: true + }); + return HierarchicalLevelDetail; +}()); +exports.HierarchicalLevelDetail = HierarchicalLevelDetail; +var HierarchicalFilter = /** @class */ (function (_super) { + __extends(HierarchicalFilter, _super); + function HierarchicalFilter(worksheetName, fieldName, fieldId, filterType, registryId, _dimensionName, _hierarchyCaption, _numberOfLevels, _levelDetails, _appliedValues, _isAllSelected) { + var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this; + _this._dimensionName = _dimensionName; + _this._hierarchyCaption = _hierarchyCaption; + _this._numberOfLevels = _numberOfLevels; + _this._levelDetails = _levelDetails; + _this._appliedValues = _appliedValues; + _this._isAllSelected = _isAllSelected; + return _this; + } + HierarchicalFilter.prototype.getDomainAsync = function (domainType) { + throw new Error('Method not implemented.'); + }; + Object.defineProperty(HierarchicalFilter.prototype, "dimensionName", { + get: function () { + return this._dimensionName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalFilter.prototype, "hierarchyCaption", { + get: function () { + return this._hierarchyCaption; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalFilter.prototype, "numberOfLevels", { + get: function () { + return this._numberOfLevels; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalFilter.prototype, "levelDetails", { + get: function () { + return this._levelDetails; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalFilter.prototype, "isAllSelected", { + get: function () { + return this._isAllSelected; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(HierarchicalFilter.prototype, "appliedValues", { + get: function () { + return this._appliedValues; + }, + enumerable: true, + configurable: true + }); + return HierarchicalFilter; +}(Filter)); +exports.HierarchicalFilter = HierarchicalFilter; +var RangeFilter = /** @class */ (function (_super) { + __extends(RangeFilter, _super); + function RangeFilter(worksheetName, fieldName, fieldId, filterType, registryId, _min, _max, _includeNullValues) { + var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this; + _this._min = _min; + _this._max = _max; + _this._includeNullValues = _includeNullValues; + return _this; + } + Object.defineProperty(RangeFilter.prototype, "minValue", { + get: function () { + return this._min; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RangeFilter.prototype, "maxValue", { + get: function () { + return this._max; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RangeFilter.prototype, "includeNullValues", { + get: function () { + return this._includeNullValues; + }, + enumerable: true, + configurable: true + }); + RangeFilter.prototype.getDomainAsync = function (domainType) { + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("filter-service" /* Filter */); + if (!domainType) { + domainType = api_external_contract_js_1.FilterDomainType.Relevant; + } + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(domainType, api_external_contract_js_1.FilterDomainType, 'FilterDomainType'); + return service.getRangeDomainAsync(this._worksheetName, this._fieldId, domainType); + }; + return RangeFilter; +}(Filter)); +exports.RangeFilter = RangeFilter; +var RelativeDateFilter = /** @class */ (function (_super) { + __extends(RelativeDateFilter, _super); + function RelativeDateFilter(worksheetName, fieldName, fieldId, filterType, registryId, _anchorDate, _periodType, _rangeType, _rangeN) { + var _this = _super.call(this, worksheetName, fieldName, filterType, fieldId, registryId) || this; + _this._anchorDate = _anchorDate; + _this._periodType = _periodType; + _this._rangeType = _rangeType; + _this._rangeN = _rangeN; + return _this; + } + Object.defineProperty(RelativeDateFilter.prototype, "anchorDate", { + get: function () { + return this._anchorDate; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RelativeDateFilter.prototype, "periodType", { + get: function () { + return this._periodType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RelativeDateFilter.prototype, "rangeType", { + get: function () { + return this._rangeType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RelativeDateFilter.prototype, "rangeN", { + get: function () { + return this._rangeN; + }, + enumerable: true, + configurable: true + }); + return RelativeDateFilter; +}(Filter)); +exports.RelativeDateFilter = RelativeDateFilter; +var CategoricalDomain = /** @class */ (function () { + function CategoricalDomain(_values, _domainType) { + this._values = _values; + this._domainType = _domainType; + } + Object.defineProperty(CategoricalDomain.prototype, "values", { + get: function () { + return this._values; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CategoricalDomain.prototype, "type", { + get: function () { + return this._domainType; + }, + enumerable: true, + configurable: true + }); + return CategoricalDomain; +}()); +exports.CategoricalDomain = CategoricalDomain; +var RangeDomain = /** @class */ (function () { + function RangeDomain(_min, _max, _domainType) { + this._min = _min; + this._max = _max; + this._domainType = _domainType; + } + Object.defineProperty(RangeDomain.prototype, "type", { + get: function () { + return this._domainType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RangeDomain.prototype, "min", { + get: function () { + return this._min; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(RangeDomain.prototype, "max", { + get: function () { + return this._max; + }, + enumerable: true, + configurable: true + }); + return RangeDomain; +}()); +exports.RangeDomain = RangeDomain; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Models/GetDataModels.js": +/*!******************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Models/GetDataModels.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DataTable = /** @class */ (function () { + function DataTable(_data, _columns, _totalRowCount, _isTotalRowCountLimited, _isSummaryData, _marksInfo) { + this._data = _data; + this._columns = _columns; + this._totalRowCount = _totalRowCount; + this._isTotalRowCountLimited = _isTotalRowCountLimited; + this._isSummaryData = _isSummaryData; + this._marksInfo = _marksInfo; + this._name = _isSummaryData ? 'Summary Data Table' : 'Underlying Data Table'; + } + Object.defineProperty(DataTable.prototype, "name", { + get: function () { + return this._name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "data", { + get: function () { + return this._data; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "columns", { + get: function () { + return this._columns; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "marksInfo", { + get: function () { + return this._marksInfo; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "totalRowCount", { + get: function () { + return this._totalRowCount; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "isTotalRowCountLimited", { + get: function () { + return this._isTotalRowCountLimited; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTable.prototype, "isSummaryData", { + get: function () { + return this._isSummaryData; + }, + enumerable: true, + configurable: true + }); + return DataTable; +}()); +exports.DataTable = DataTable; +var MarkInfo = /** @class */ (function () { + function MarkInfo(_type, _color, _tupleId) { + this._type = _type; + this._color = _color; + this._tupleId = _tupleId; + } + Object.defineProperty(MarkInfo.prototype, "type", { + get: function () { + return this._type; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MarkInfo.prototype, "color", { + get: function () { + return this._color; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MarkInfo.prototype, "tupleId", { + get: function () { + return this._tupleId; + }, + enumerable: true, + configurable: true + }); + return MarkInfo; +}()); +exports.MarkInfo = MarkInfo; +var Column = /** @class */ (function () { + function Column(_fieldName, _fieldId, _dataType, _isReferenced, _index) { + this._fieldName = _fieldName; + this._fieldId = _fieldId; + this._dataType = _dataType; + this._isReferenced = _isReferenced; + this._index = _index; + } + Object.defineProperty(Column.prototype, "fieldName", { + get: function () { + return this._fieldName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Column.prototype, "fieldId", { + get: function () { + return this._fieldId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Column.prototype, "dataType", { + get: function () { + return this._dataType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Column.prototype, "isReferenced", { + get: function () { + return this._isReferenced; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Column.prototype, "index", { + get: function () { + return this._index; + }, + enumerable: true, + configurable: true + }); + return Column; +}()); +exports.Column = Column; +var DataValue = /** @class */ (function () { + /* tslint:disable:no-any */ + function DataValue(_value, _nativeValue, _formattedValue) { + this._value = _value; + this._nativeValue = _nativeValue; + this._formattedValue = _formattedValue; + } + Object.defineProperty(DataValue.prototype, "value", { + get: function () { + return this._value; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataValue.prototype, "nativeValue", { + get: function () { + return this._nativeValue; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataValue.prototype, "formattedValue", { + get: function () { + return this._formattedValue; + }, + enumerable: true, + configurable: true + }); + return DataValue; +}()); +exports.DataValue = DataValue; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Models/GetDataTableReaderModels.js": +/*!*****************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Models/GetDataTableReaderModels.js ***! + \*****************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ServiceRegistry_1 = __webpack_require__(/*! ../Services/ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var DataTableReader = /** @class */ (function () { + function DataTableReader(_id, _totalRowCount, _pageRowCount, _registryId) { + this._id = _id; + this._totalRowCount = _totalRowCount; + this._pageRowCount = _pageRowCount; + this._registryId = _registryId; + this._pageCount = Math.ceil(_totalRowCount / _pageRowCount); + } + Object.defineProperty(DataTableReader.prototype, "totalRowCount", { + get: function () { + return this._totalRowCount; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DataTableReader.prototype, "pageCount", { + get: function () { + return this._pageCount; + }, + enumerable: true, + configurable: true + }); + DataTableReader.prototype.getPageAsync = function (pageNumber) { + ErrorHelpers_1.ErrorHelpers.verifyRange(pageNumber, 0, this._pageCount); + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + return service.getPageAsync(this._id, pageNumber, this._pageRowCount); + }; + DataTableReader.prototype.getAllPagesAsync = function (maxRows) { + return __awaiter(this, void 0, void 0, function () { + var firstPage, rowsRequested, pagesRequested, pagesToFetch, isDataLimited, remainingData, i, page, fullData; + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, this.getPageAsync(0)]; + case 1: + firstPage = _b.sent(); + maxRows = maxRows || this.totalRowCount; + rowsRequested = Math.min(maxRows, this.totalRowCount); + pagesRequested = Math.ceil(rowsRequested / this._pageRowCount); + pagesToFetch = Math.min(pagesRequested, 400); + isDataLimited = pagesToFetch < pagesRequested; + remainingData = []; + i = 1; + _b.label = 2; + case 2: + if (!(i < pagesToFetch)) return [3 /*break*/, 5]; + return [4 /*yield*/, this.getPageAsync(i)]; + case 3: + page = _b.sent(); + remainingData.push(page.data); + _b.label = 4; + case 4: + i++; + return [3 /*break*/, 2]; + case 5: + fullData = (_a = firstPage.data).concat.apply(_a, remainingData); + // This slices the array only if maxRows has been set and is less than totalRowCount + fullData.length = rowsRequested; + return [2 /*return*/, { + name: firstPage.name, + data: fullData, + columns: firstPage.columns, + totalRowCount: isDataLimited ? pagesToFetch * this._pageRowCount : rowsRequested, + isTotalRowCountLimited: isDataLimited, + isSummaryData: firstPage.isSummaryData, + }]; + } + }); + }); + }; + DataTableReader.prototype.releaseAsync = function () { + var service = ServiceRegistry_1.ApiServiceRegistry.get(this._registryId).getService("get-data-service" /* GetData */); + return service.releaseAsync(this._id); + }; + return DataTableReader; +}()); +exports.DataTableReader = DataTableReader; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Models/SelectionModels.js": +/*!********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Models/SelectionModels.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Selection Model. + */ +var SelectionModel = /** @class */ (function () { + function SelectionModel() { + } + return SelectionModel; +}()); +exports.SelectionModel = SelectionModel; +/** + * Value based selection model. Meant for hierarchical, range and categorical selections. + */ +var ValueSelectionModel = /** @class */ (function (_super) { + __extends(ValueSelectionModel, _super); + function ValueSelectionModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.selectValues = []; + return _this; + } + return ValueSelectionModel; +}(SelectionModel)); +exports.ValueSelectionModel = ValueSelectionModel; +/** + * Hierarchical value selection model + */ +var HierarchicalSelectionModel = /** @class */ (function (_super) { + __extends(HierarchicalSelectionModel, _super); + function HierarchicalSelectionModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + return HierarchicalSelectionModel; +}(ValueSelectionModel)); +exports.HierarchicalSelectionModel = HierarchicalSelectionModel; +/** + * Range based value selection model + */ +var RangeSelectionModel = /** @class */ (function (_super) { + __extends(RangeSelectionModel, _super); + function RangeSelectionModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + return RangeSelectionModel; +}(SelectionModel)); +exports.RangeSelectionModel = RangeSelectionModel; +/** + * Dimension value selection model + */ +var DimensionSelectionModel = /** @class */ (function (_super) { + __extends(DimensionSelectionModel, _super); + function DimensionSelectionModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + return DimensionSelectionModel; +}(ValueSelectionModel)); +exports.DimensionSelectionModel = DimensionSelectionModel; +/** + * Tuple based selection model + */ +var TupleSelectionModel = /** @class */ (function () { + function TupleSelectionModel() { + this.objectIds = []; + } + return TupleSelectionModel; +}()); +exports.TupleSelectionModel = TupleSelectionModel; +/** + * Container class to populate all the selection models when parsing input + */ +var SelectionModelsContainer = /** @class */ (function () { + function SelectionModelsContainer() { + this.hierModelArr = []; + this.dimModelArr = []; + this.quantModelArr = []; + } + return SelectionModelsContainer; +}()); +exports.SelectionModelsContainer = SelectionModelsContainer; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Point.js": +/*!***************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Point.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Point = /** @class */ (function () { + function Point(_x, _y) { + this._x = _x; + this._y = _y; + } + Object.defineProperty(Point.prototype, "x", { + get: function () { + return this._x; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Point.prototype, "y", { + get: function () { + return this._y; + }, + enumerable: true, + configurable: true + }); + return Point; +}()); +exports.Point = Point; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/GetDataService.js": +/*!*********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/GetDataService.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Defines which type of getData call to make. + */ +var GetDataType; +(function (GetDataType) { + GetDataType["Summary"] = "summary"; + GetDataType["Underlying"] = "underlying"; +})(GetDataType = exports.GetDataType || (exports.GetDataType = {})); + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/RegisterAllSharedServices.js": +/*!********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/RegisterAllSharedServices.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var AnimationServiceImpl_1 = __webpack_require__(/*! ./impl/AnimationServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/AnimationServiceImpl.js"); +var AnnotationServiceImpl_1 = __webpack_require__(/*! ./impl/AnnotationServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/AnnotationServiceImpl.js"); +var DataSourceServiceImpl_1 = __webpack_require__(/*! ./impl/DataSourceServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/DataSourceServiceImpl.js"); +var ExternalContextMenuServiceImpl_1 = __webpack_require__(/*! ./impl/ExternalContextMenuServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/ExternalContextMenuServiceImpl.js"); +var FilterServiceImpl_1 = __webpack_require__(/*! ./impl/FilterServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/FilterServiceImpl.js"); +var GetDataServiceImpl_1 = __webpack_require__(/*! ./impl/GetDataServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/GetDataServiceImpl.js"); +var NotificationServiceImpl_1 = __webpack_require__(/*! ./impl/NotificationServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImpl.js"); +var ParametersServiceImpl_1 = __webpack_require__(/*! ./impl/ParametersServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/ParametersServiceImpl.js"); +var SelectionServiceImpl_1 = __webpack_require__(/*! ./impl/SelectionServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/SelectionServiceImpl.js"); +var SizeServiceImpl_1 = __webpack_require__(/*! ./impl/SizeServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/SizeServiceImpl.js"); +var VizServiceImpl_1 = __webpack_require__(/*! ./impl/VizServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/VizServiceImpl.js"); +var ZoneServiceImpl_1 = __webpack_require__(/*! ./impl/ZoneServiceImpl */ "../api-shared-js/lib/src/ApiShared/Services/impl/ZoneServiceImpl.js"); +var ServiceRegistry_1 = __webpack_require__(/*! ./ServiceRegistry */ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js"); +function registerAllSharedServices(dispatcher, registryId, platformVersion) { + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new AnimationServiceImpl_1.AnimationServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new DataSourceServiceImpl_1.DataSourceServiceImpl(dispatcher, registryId, platformVersion)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new GetDataServiceImpl_1.GetDataServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new FilterServiceImpl_1.FilterServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new NotificationServiceImpl_1.NotificationServiceImpl(dispatcher)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ParametersServiceImpl_1.ParametersServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new SelectionServiceImpl_1.SelectionServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new AnnotationServiceImpl_1.AnnotationServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ZoneServiceImpl_1.ZoneServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new SizeServiceImpl_1.SizeServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new VizServiceImpl_1.VizServiceImpl(dispatcher, registryId)); + ServiceRegistry_1.ApiServiceRegistry.get(registryId).registerService(new ExternalContextMenuServiceImpl_1.ExternalContextMenuServiceImpl(dispatcher, registryId)); +} +exports.registerAllSharedServices = registerAllSharedServices; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js": +/*!**********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/ServiceRegistry.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +window.__tableauApiServiceRegistry = window.__tableauApiServiceRegistry || {}; +var ServiceRegistryImpl = /** @class */ (function () { + function ServiceRegistryImpl() { + this._services = {}; + } + ServiceRegistryImpl.prototype.registerService = function (service) { + this._services[service.serviceName] = service; + }; + ServiceRegistryImpl.prototype.getService = function (serviceName) { + if (!this._services.hasOwnProperty(serviceName)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "Service not registered: " + serviceName); + } + return this._services[serviceName]; + }; + return ServiceRegistryImpl; +}()); +/** + * Static class used for getting access to the single instance + * of the ApiServiceRegistry associated with the registryId. + * + * Extensions by design don't need to store/access multiple service registries. Their single instance of ServiceRegistry is + * stored/access with registryId = 0. + * + * Whereas Embedding needs to be aware of which ServiceRegistry to use when there are multiple vizzes embedded. + * An example of how window.__tableauApiServiceRegistry will look when there are two vizzes: { 0 : ServiceRegistry, 1 : ServiceRegistry} + * where registry ID of 0 & 1 refers to viz's internal identifier (which is generated by VizManager). + */ +var ApiServiceRegistry = /** @class */ (function () { + // Private to avoid anyone constructing this + function ApiServiceRegistry() { + } + /** + * Gets the singleton instance of the ServiceRegistry + */ + ApiServiceRegistry.get = function (registryId) { + if (!window.__tableauApiServiceRegistry || !window.__tableauApiServiceRegistry[registryId]) { + ApiServiceRegistry.setInstance(registryId, new ServiceRegistryImpl()); + } + if (!window.__tableauApiServiceRegistry[registryId]) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, 'Service registry failed'); + } + return window.__tableauApiServiceRegistry[registryId]; + }; + /** + * Helper method that sets the service registry instance for the corresponding registryId. Can be used by unit tests + * + * @param {ServiceRegistry} serviceRegistry The new registry + */ + ApiServiceRegistry.setInstance = function (registryId, serviceRegistry) { + if (!window.__tableauApiServiceRegistry) { + window.__tableauApiServiceRegistry = {}; + } + window.__tableauApiServiceRegistry[registryId] = serviceRegistry; + }; + /** + * Only used by unit tests + */ + ApiServiceRegistry.clearRegistry = function () { + window.__tableauApiServiceRegistry = {}; + }; + return ApiServiceRegistry; +}()); +exports.ApiServiceRegistry = ApiServiceRegistry; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/AnimationServiceImpl.js": +/*!********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/AnimationServiceImpl.js ***! + \********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ExternalToInternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/ExternalToInternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var AnimationServiceImpl = /** @class */ (function (_super) { + __extends(AnimationServiceImpl, _super); + function AnimationServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(AnimationServiceImpl.prototype, "serviceName", { + get: function () { + return "animation-service" /* Animation */; + }, + enumerable: true, + configurable: true + }); + AnimationServiceImpl.prototype.replayAsync = function (replaySpeed) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.ReplaySpeed] = 1.0, + _a); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(replaySpeed, api_external_contract_js_1.ReplaySpeedType, 'ReplaySpeedType'); + parameters[api_internal_contract_js_1.ParameterId.ReplaySpeed] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.setReplaySpeedType.convert(replaySpeed); + return this.execute(api_internal_contract_js_1.VerbId.ReplayAnimation, parameters).then(function (response) { + return; + }); + }; + return AnimationServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.AnimationServiceImpl = AnimationServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/AnnotationServiceImpl.js": +/*!*********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/AnnotationServiceImpl.js ***! + \*********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var SelectionModels_1 = __webpack_require__(/*! ../../Models/SelectionModels */ "../api-shared-js/lib/src/ApiShared/Models/SelectionModels.js"); +var TableauError_1 = __webpack_require__(/*! ../../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var AnnotationServiceImpl = /** @class */ (function (_super) { + __extends(AnnotationServiceImpl, _super); + function AnnotationServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(AnnotationServiceImpl.prototype, "serviceName", { + get: function () { + return "annotation-service" /* Annotation */; + }, + enumerable: true, + configurable: true + }); + /** + * Method to annotate a mark on the given worksheet. + * + * @param visualId + * @param mark + * @param annotationText + */ + AnnotationServiceImpl.prototype.annotateMarkAsync = function (visualId, mark, annotationText) { + var _a; + var selectionModelContainer = this.parseMarkSelectionIds([mark]); + var dummyTargetPoint = { x: 0, y: 0 }; + var formattedText = "" + annotationText + ""; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'annotateMarkAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.AnnotateEnum] = api_internal_contract_js_1.AnnotateEnum.Mark, + _a[api_internal_contract_js_1.ParameterId.TargetPoint] = dummyTargetPoint, + _a[api_internal_contract_js_1.ParameterId.SelectionList] = [selectionModelContainer.selection], + _a[api_internal_contract_js_1.ParameterId.FormattedText] = formattedText, + _a); + return this.execute(api_internal_contract_js_1.VerbId.CreateAnnotation, parameters).then(function (response) { + // Expecting an empty model and hence the void response. + return; + }); + }; + /** + * Method to retrieve annotations for the given worksheet. + * + * @param visualId + * @returns {Promise>} + */ + AnnotationServiceImpl.prototype.getAnnotationsAsync = function (visualId) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getAnnotationsAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetAnnotations, parameters).then(function (response) { + var annotationsList = response.result; + return _this.annotationFilterMap(annotationsList); + }); + }; + /** + * Method to remove an annotation from a given worksheet. + * + * @param visualId + * @param annotation + */ + AnnotationServiceImpl.prototype.removeAnnotationAsync = function (visualId, annotation) { + var _a; + var selectionModelContainer = this.parseAnnotationSelectionIds([annotation]); + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeAnnotationAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.SelectionList] = [selectionModelContainer.selection], + _a); + return this.execute(api_internal_contract_js_1.VerbId.RemoveAnnotation, parameters).then(function (response) { + // Expecting an empty model and hence the void response. + return; + }); + }; + /** + * Method to prepare the pres models for selection by MarksInfo + * @param marks + */ + AnnotationServiceImpl.prototype.parseMarkSelectionIds = function (marks) { + var ids = []; + var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer(); + marks.forEach(function (mark) { + var tupleId = mark.tupleId; + if (tupleId !== undefined && tupleId !== null && tupleId > 0) { + ids.push(tupleId.toString()); // collect the tuple ids + } + else { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'invalid tupleId'); + } + }); + if (ids.length !== 0) { + // tuple ids based selection + var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel(); + tupleSelectionModel.selectionType = 'tuples'; + tupleSelectionModel.objectIds = ids; + selectionModelContainer.selection = tupleSelectionModel; + } + return selectionModelContainer; + }; + /** + * Method to prepare the pres models for selection by MarkAnnotationInfo + * @param marks + */ + AnnotationServiceImpl.prototype.parseAnnotationSelectionIds = function (annotations) { + var ids = []; + var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer(); + annotations.forEach(function (annotation) { + var annotationId = annotation.annotationId; + if (annotationId !== undefined && annotationId !== null && annotationId >= 0) { + ids.push(annotationId.toString()); // collect the annotation ids + } + else { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'invalid annotationId'); + } + }); + if (ids.length !== 0) { + // annotation ids based selection + var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel(); + tupleSelectionModel.selectionType = 'annotations'; + tupleSelectionModel.objectIds = ids; + selectionModelContainer.selection = tupleSelectionModel; + } + return selectionModelContainer; + }; + /** + * Method to map Annotation to MarkAnnotationInfo + * @param annotation + * @returns {Annotation} + */ + AnnotationServiceImpl.prototype.mapAnnotation = function (annotation) { + return { + annotationHTML: annotation.annotationText, + annotationId: annotation.annotationId, + annotationText: annotation.annotationPlainText, + annotationType: InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.annotationType.convert(annotation.annotateEnum), + tupleId: annotation.tupleId, + }; + }; + /** + * Filter the Annotations to Mark Annotations, and map them to MarkAnnotationInfo + * @param annotations + * @returns {Array} + */ + AnnotationServiceImpl.prototype.annotationFilterMap = function (annotations) { + var _this = this; + var annotationInfos = annotations.map(function (annotation) { return _this.mapAnnotation(annotation); }); + return annotationInfos; + }; + return AnnotationServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.AnnotationServiceImpl = AnnotationServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/ClientInfoServiceImpl.js": +/*!*********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/ClientInfoServiceImpl.js ***! + \*********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var ClientInfoServiceImpl = /** @class */ (function (_super) { + __extends(ClientInfoServiceImpl, _super); + function ClientInfoServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ClientInfoServiceImpl.prototype, "serviceName", { + get: function () { + return "client-info-service" /* ClientInfo */; + }, + enumerable: true, + configurable: true + }); + ClientInfoServiceImpl.prototype.getClientInfoAsync = function () { + var _a; + var verb = api_internal_contract_js_1.VerbId.GetEmbeddingClientInfo; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getClientInfoAsync', + _a); + return this.execute(verb, parameters).then(function (response) { + var clientInfo = response.result; + return clientInfo; + }); + }; + return ClientInfoServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.ClientInfoServiceImpl = ClientInfoServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/DataSourceServiceImpl.js": +/*!*********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/DataSourceServiceImpl.js ***! + \*********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var InternalContract = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var DataSource_1 = __webpack_require__(/*! ../../DataSource */ "../api-shared-js/lib/src/ApiShared/DataSource.js"); +var Field_1 = __webpack_require__(/*! ../../Field */ "../api-shared-js/lib/src/ApiShared/Field.js"); +var DataSourceImpl_1 = __webpack_require__(/*! ../../Impl/DataSourceImpl */ "../api-shared-js/lib/src/ApiShared/Impl/DataSourceImpl.js"); +var FieldImpl_1 = __webpack_require__(/*! ../../Impl/FieldImpl */ "../api-shared-js/lib/src/ApiShared/Impl/FieldImpl.js"); +var TableauError_1 = __webpack_require__(/*! ../../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +exports.SENTINEL_LOGICAL_TABLE_INFO = { + id: InternalContract.ApiShowDataTableSentinel.SingleTableId, + caption: InternalContract.ApiShowDataTableSentinel.SingleTableCaption, +}; +// The minimum platform version when Object Model was supported +var platformVersionObjectModelSupport = { major: 1, minor: 20, fix: 1 }; +var DataSourceServiceImpl = /** @class */ (function (_super) { + __extends(DataSourceServiceImpl, _super); + // Since Object Model is supported since Tableau 2020.2, DataSourceServiceImpl can be initialized with the + // platform version when OM was supported. Once we drop support for Tableau versions <= 2020.1, all additional + // code in here for Object Model can be removed. + function DataSourceServiceImpl(dispatcher, registryId, _platformVersion) { + if (_platformVersion === void 0) { _platformVersion = platformVersionObjectModelSupport; } + var _this = _super.call(this, dispatcher, registryId) || this; + _this._platformVersion = _platformVersion; + return _this; + } + Object.defineProperty(DataSourceServiceImpl.prototype, "serviceName", { + get: function () { + return "data-source-service" /* DataSourceService */; + }, + enumerable: true, + configurable: true + }); + DataSourceServiceImpl.prototype.refreshAsync = function (dataSourceId) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'refreshAsync', + _a[api_internal_contract_js_1.ParameterId.DeltaTimeMs] = 0, + _a[api_internal_contract_js_1.ParameterId.ShouldRefreshDS] = true, + _a); + // On server: Not passing the datasource id will refresh all datasources. + if (dataSourceId) { + parameters[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId; + } + return this.execute(api_internal_contract_js_1.VerbId.RefreshDataSource, parameters).then(function (response) { + return; + }); + }; + DataSourceServiceImpl.prototype.getActiveTablesAsync = function (dataSourceId) { + var _a; + var joinParameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getActiveTablesAsync', + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId, + _a); + // Get the description of the tables used by this connection + return this.execute(api_internal_contract_js_1.VerbId.GetActiveTables, joinParameters).then(function (joinResponse) { + var tableInfos = joinResponse.result; + // getActiveTables is unsupported for cubes and GA. We do not have a connection type property + // available from the platform (intentionally, to reduce code churn as new connections are added). + // Instead,just check if any tables are returned. This array will be empty for any non-table based datasource. + if (tableInfos.tables.length === 0) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.UnsupportedMethodForDataSourceType, "getActiveTables is not supported for: " + dataSourceId); + } + return tableInfos.tables; + }); + }; + DataSourceServiceImpl.prototype.getDataSourcesAsync = function (visualId) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDataSourcesAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetDataSources, parameters).then(function (response) { + var dataSchema = response.result; + return dataSchema; + }); + }; + DataSourceServiceImpl.prototype.getAllDataSourcesAsync = function () { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getAllDataSourcesAsync', + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetAllDataSources, parameters).then(function (response) { + var dataSchema = response.result; + return dataSchema; + }); + }; + DataSourceServiceImpl.prototype.getConnectionSummariesAsync = function (dataSourceId) { + var _a; + var params = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getConnectionSummariesAsync', + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId, + _a); + // Get the description of the tables used by this connection + return this.execute(api_internal_contract_js_1.VerbId.GetConnectionDescriptionSummaries, params).then(function (response) { + var descriptionSummaries = response.result; + return descriptionSummaries; + }); + }; + DataSourceServiceImpl.prototype.getFieldAsync = function (globalfieldName) { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.GetFieldAndDataSource; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getFieldAsync', + _a[api_internal_contract_js_1.ParameterId.FieldId] = globalfieldName, + _a); + return this.execute(verb, parameters).then(function (response) { + var dataSource = response.result[api_internal_contract_js_1.ParameterId.DataSource]; + var field = response.result[api_internal_contract_js_1.ParameterId.Field]; + return _this.convertField(field, _this.convertDataSource(dataSource)); + }); + }; + DataSourceServiceImpl.prototype.getLogicalTablesAsync = function (dataSourceId) { + var _a; + if (!this.isObjectModelSupportedByPlatform()) { + /** + * This sentinel ID can be passed to datasource.getLogicalTableData. + * Once the desktop is upgraded to a version that supports object model, + * the sentinel ID will automatically fetch the upgraded table. + * */ + return new Promise(function (resolve) { return resolve([exports.SENTINEL_LOGICAL_TABLE_INFO]); }); + } + var params = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTablesAsync', + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTables, params).then(function (response) { + return response.result; + }); + }; + DataSourceServiceImpl.prototype.getUnderlyingTablesAsync = function (visualId) { + var _a; + if (!this.isObjectModelSupportedByPlatform()) { + /** + * This sentinel ID can be passed to worksheet.getUnderlyingTableData. + * Once the desktop is upgraded to a version that supports object model, + * the sentinel ID will automatically fetch the upgraded table. + * */ + return new Promise(function (resolve) { return resolve([exports.SENTINEL_LOGICAL_TABLE_INFO]); }); + } + var params = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTablesAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTables, params).then(function (response) { + return response.result; + }); + }; + DataSourceServiceImpl.prototype.convertField = function (field, dataSource) { + return new Field_1.Field(new FieldImpl_1.FieldImpl(field, dataSource)); + }; + DataSourceServiceImpl.prototype.convertDataSource = function (dataSource) { + return new DataSource_1.DataSource(new DataSourceImpl_1.DataSourceImpl(dataSource, this._registryId)); + }; + DataSourceServiceImpl.prototype.isObjectModelSupportedByPlatform = function () { + var platformVersionNoObjectModelSupport = { major: 1, minor: 13, fix: 0 }; + return InternalContract.VersionLessThan(platformVersionNoObjectModelSupport, this._platformVersion); + }; + return DataSourceServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.DataSourceServiceImpl = DataSourceServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/ExternalContextMenuServiceImpl.js": +/*!******************************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/ExternalContextMenuServiceImpl.js ***! + \******************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var ExternalContextMenuServiceImpl = /** @class */ (function (_super) { + __extends(ExternalContextMenuServiceImpl, _super); + function ExternalContextMenuServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ExternalContextMenuServiceImpl.prototype, "serviceName", { + get: function () { + return "external-context-menu-service" /* ExternalContextMenu */; + }, + enumerable: true, + configurable: true + }); + ExternalContextMenuServiceImpl.prototype.appendContextMenuAsync = function (sheetName, targetMenu, config) { + var _a; + var verb = api_internal_contract_js_1.VerbId.AppendExternalMenuItem; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'appendContextMenuAsync', + _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName, + _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemDisplayName] = config.displayName, + _a); + return this.execute(verb, parameters).then(function (response) { + var newMenuItemId = response.result; + return newMenuItemId; + }); + }; + ExternalContextMenuServiceImpl.prototype.removeContextMenuAsync = function (sheetName, targetMenu, menuItemId) { + var _a; + var verb = api_internal_contract_js_1.VerbId.RemoveExternalMenuItem; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeContextMenuAsync', + _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName, + _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemId] = menuItemId, + _a); + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + ExternalContextMenuServiceImpl.prototype.executeContextMenuAsync = function (sheetName, targetMenu, menuItemId) { + var _a; + var verb = api_internal_contract_js_1.VerbId.ExecuteExternalMenuItem; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'executeContextMenuAsync', + _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName, + _a[api_internal_contract_js_1.ParameterId.ExternalMenuItemId] = menuItemId, + _a); + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + ExternalContextMenuServiceImpl.prototype.renameContextMenuAsync = function (sheetName, targetMenu, menuHeader, menuDescription) { + var _a; + var verb = api_internal_contract_js_1.VerbId.RenameExternalMenu; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'renameContextMenuAsync', + _a[api_internal_contract_js_1.ParameterId.WorksheetName] = sheetName, + _a[api_internal_contract_js_1.ParameterId.ExternalMenuHeader] = menuHeader, + _a[api_internal_contract_js_1.ParameterId.ExternalMenuDescription] = menuDescription, + _a); + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + return ExternalContextMenuServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.ExternalContextMenuServiceImpl = ExternalContextMenuServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/FilterServiceImpl.js": +/*!*****************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/FilterServiceImpl.js ***! + \*****************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var InternalContract = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ApiShared_1 = __webpack_require__(/*! ../../../ApiShared */ "../api-shared-js/lib/src/ApiShared.js"); +var ExternalToInternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/ExternalToInternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js"); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var FilterModels_1 = __webpack_require__(/*! ../../Models/FilterModels */ "../api-shared-js/lib/src/ApiShared/Models/FilterModels.js"); +var DataValueFactory_1 = __webpack_require__(/*! ../../Utils/DataValueFactory */ "../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js"); +var Param_1 = __webpack_require__(/*! ../../Utils/Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var FilterServiceImpl = /** @class */ (function (_super) { + __extends(FilterServiceImpl, _super); + function FilterServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(FilterServiceImpl.prototype, "serviceName", { + get: function () { + return "filter-service" /* Filter */; + }, + enumerable: true, + configurable: true + }); + FilterServiceImpl.prototype.applyFilterAsync = function (visualId, fieldName, values, updateType, filterOptions) { + var _a; + var verb = api_internal_contract_js_1.VerbId.ApplyCategoricalFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyFilterAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + if (!Array.isArray(values)) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'values parameter for applyFilterAsync must be an array'); + } + parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values; + parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType); + parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] = + filterOptions === undefined || filterOptions.isExcludeMode === undefined ? false : filterOptions.isExcludeMode; + return this.execute(verb, parameters).then(function (response) { + return fieldName; + }); + }; + FilterServiceImpl.prototype.applyRangeFilterAsync = function (visualId, fieldName, filterOptions) { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.ApplyRangeFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyRangeFilterAsync', + _a); + if (filterOptions.min !== undefined && filterOptions.min !== null) { + var min = void 0; + if (filterOptions.min instanceof Date) { + min = Param_1.Param.serializeDateForPlatform(filterOptions.min); + } + else { + min = filterOptions.min; + } + parameters[api_internal_contract_js_1.ParameterId.FilterRangeMin] = min; + } + if (filterOptions.max !== undefined && filterOptions.max !== null) { + var max = void 0; + if (filterOptions.max instanceof Date) { + max = Param_1.Param.serializeDateForPlatform(filterOptions.max); + } + else { + max = filterOptions.max; + } + parameters[api_internal_contract_js_1.ParameterId.FilterRangeMax] = max; + } + // The null option is used with min+max for 'include-range' or 'include-range-or-null' + if (filterOptions.nullOption) { + parameters[api_internal_contract_js_1.ParameterId.FilterRangeNullOption] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.nullOptions.convert(filterOptions.nullOption); + } + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + return this.execute(verb, parameters).then(function (response) { + _this.apiFilterHandlerCheckForCommandError(response.result); + return fieldName; + }); + }; + FilterServiceImpl.prototype.applyHierarchicalFilterAsync = function (visualId, fieldName, values, updateType, filterOptions) { + var _a; + var verb = api_internal_contract_js_1.VerbId.HierarchicalFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyHierarchicalFilterAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + var hierarchicalLevels = values.levels; + if (Array.isArray(hierarchicalLevels) && hierarchicalLevels.length > 0) { + parameters[api_internal_contract_js_1.ParameterId.FilterLevels] = hierarchicalLevels; + } + else if (values.length > 0) { + parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values; + } + else { + // the server command expects empty list for clearing the filter + // it also expects eithers FilterLevels or FilterValues to be set + parameters[api_internal_contract_js_1.ParameterId.FilterLevels] = []; + } + parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType); + parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] = filterOptions && !!filterOptions.isExcludeMode; + return this.execute(verb, parameters).then(function (response) { + return fieldName; + }); + }; + FilterServiceImpl.prototype.clearFilterAsync = function (visualId, fieldName) { + var _a; + var verb = api_internal_contract_js_1.VerbId.ClearFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'clearFilterAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + return this.execute(verb, parameters).then(function (resposne) { + return fieldName; + }); + }; + FilterServiceImpl.prototype.applyRelativeDateFilterAsync = function (visualId, fieldName, options) { + var _a; + var verb = api_internal_contract_js_1.VerbId.ApplyRelativeDateFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyRelativeDateFilterAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + parameters[api_internal_contract_js_1.ParameterId.PeriodType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.periodType.convert(options.periodType); + parameters[api_internal_contract_js_1.ParameterId.DateRangeType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.dateRangeType.convert(options.rangeType); + if (options.rangeType === api_external_contract_js_1.DateRangeType.LastN || options.rangeType === api_external_contract_js_1.DateRangeType.NextN) { + if (options.rangeN === undefined || options.rangeN === null) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.EmbeddingErrorCodes.MissingRangeNForRelativeDateFilters, 'Missing rangeN field for a relative date filter of LASTN or NEXTN.'); + } + parameters[api_internal_contract_js_1.ParameterId.RangeN] = options.rangeN; + } + if (options.anchorDate !== undefined && options.anchorDate !== null) { + parameters[api_internal_contract_js_1.ParameterId.AnchorDate] = this.convertAnchorDate(options.anchorDate); + } + return this.execute(verb, parameters).then(function (response) { + return response.result; + }); + }; + FilterServiceImpl.prototype.getFiltersAsync = function (visualId) { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.GetFilters; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getFiltersAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + return this.execute(verb, parameters).then(function (response) { + var filters = response.result; + return _this.convertDomainFilters(filters); + }); + }; + FilterServiceImpl.prototype.getCategoricalDomainAsync = function (worksheetName, fieldId, domainType) { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.GetCategoricalDomain; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCategoricalDomainAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = { + worksheet: worksheetName, + }; + parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId; + parameters[api_internal_contract_js_1.ParameterId.DomainType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterDomainType.convert(domainType); + return this.execute(verb, parameters).then(function (response) { + var domain = response.result; + return _this.convertCategoricalDomain(domain, domainType); + }); + }; + FilterServiceImpl.prototype.getRangeDomainAsync = function (worksheetName, fieldId, domainType) { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.GetRangeDomain; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getRangeDomainAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = { + worksheet: worksheetName, + }; + parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId; + parameters[api_internal_contract_js_1.ParameterId.DomainType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterDomainType.convert(domainType); + return this.execute(verb, parameters).then(function (response) { + var domain = response.result; + return _this.convertRangeDomain(domain, domainType); + }); + }; + FilterServiceImpl.prototype.getDashboardFiltersAsync = function () { + var _a; + var _this = this; + var verb = api_internal_contract_js_1.VerbId.GetDashboardFilters; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDashboardFiltersAsync', + _a); + return this.execute(verb, parameters).then(function (response) { + var filters = response.result; + return _this.convertDomainFilters(filters); + }); + }; + FilterServiceImpl.prototype.applyDashboardFilterAsync = function (fieldName, values, updateType, filterOptions) { + var _a; + var verb = api_internal_contract_js_1.VerbId.DashboardCategoricalFilter; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'applyDashboardFilterAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.FieldName] = fieldName; + parameters[api_internal_contract_js_1.ParameterId.FilterValues] = values; + parameters[api_internal_contract_js_1.ParameterId.FilterUpdateType] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.filterUpdateType.convert(updateType); + parameters[api_internal_contract_js_1.ParameterId.IsExcludeMode] = filterOptions && !!filterOptions.isExcludeMode; + return this.execute(verb, parameters).then(function (response) { + return response.result; + }); + }; + FilterServiceImpl.prototype.getAppliedWorksheetsAsync = function (worksheetName, fieldId) { + var _a; + return __awaiter(this, void 0, void 0, function () { + var sharedFilterModel, worksheetNames; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, this.executeGetAppliedWorksheets(worksheetName, fieldId, 'getAppliedWorksheetsAsync')]; + case 1: + sharedFilterModel = _b.sent(); + worksheetNames = []; + (_a = sharedFilterModel.worksheets) === null || _a === void 0 ? void 0 : _a.map(function (worksheetInfo) { + if (worksheetInfo.isSelected) { + worksheetNames.push(worksheetInfo.worksheetName); + } + }); + return [2 /*return*/, worksheetNames]; + } + }); + }); + }; + FilterServiceImpl.prototype.setAppliedWorksheetsAsync = function (worksheetName, fieldName, fieldId, applyToWorksheets) { + return __awaiter(this, void 0, void 0, function () { + var sharedFilterModel, allowedWorksheets, activeWorksheet, verb, parameters; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.executeGetAppliedWorksheets(worksheetName, fieldId, 'getAppliedWorksheetsAsyncInternal')]; + case 1: + sharedFilterModel = _a.sent(); + if (!sharedFilterModel || !sharedFilterModel.worksheets) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'This filter does not apply to multiple worksheets'); + } + allowedWorksheets = []; + activeWorksheet = ''; + sharedFilterModel.worksheets.forEach(function (worksheet) { + // Get active worksheet + if (worksheet.isActive) { + activeWorksheet = worksheet.worksheetName; + } + // Populate allowed worksheets + if (worksheet.isSelected || worksheet.isEnabled) { + allowedWorksheets.push(worksheet.worksheetName); + } + }); + if (activeWorksheet === '') { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, 'No active worksheet'); + } + if (!applyToWorksheets.includes(activeWorksheet)) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, activeWorksheet + " must be included in the applied worksheets"); + } + applyToWorksheets.forEach(function (sheet) { + // check if it's present within compatible sheets + if (!allowedWorksheets.includes(sheet)) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, "The field " + fieldName + " isn't applicable to the worksheet " + sheet); + } + }); + verb = api_internal_contract_js_1.VerbId.ChangeSharedFilter; + parameters = {}; + parameters[api_internal_contract_js_1.ParameterId.FunctionName] = 'setAppliedWorksheetsAsync'; + parameters[api_internal_contract_js_1.ParameterId.VisualId] = { + worksheet: worksheetName, + }; + parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId; + parameters[api_internal_contract_js_1.ParameterId.SharedFilterSheets] = applyToWorksheets; + return [2 /*return*/, this.execute(verb, parameters).then(function (response) { + return applyToWorksheets; + })]; + } + }); + }); + }; + // Helper Methods + FilterServiceImpl.prototype.executeGetAppliedWorksheets = function (worksheetName, fieldId, telemetryFunctionName) { + var verb = api_internal_contract_js_1.VerbId.GetSharedFilter; + var parameters = {}; + parameters[api_internal_contract_js_1.ParameterId.FunctionName] = telemetryFunctionName; + parameters[api_internal_contract_js_1.ParameterId.VisualId] = { + worksheet: worksheetName, + }; + parameters[api_internal_contract_js_1.ParameterId.FieldId] = fieldId; + return this.execute(verb, parameters).then(function (response) { + var sharedFilterModel = response.result; + return sharedFilterModel; + }); + }; + FilterServiceImpl.prototype.convertDomainFilters = function (domainFilters) { + var _this = this; + var filters = []; + domainFilters.forEach(function (domainFilter) { + switch (domainFilter.filterType) { + case api_internal_contract_js_1.FilterType.Categorical: { + var filter = domainFilter; + if (filter) { + filters.push(_this.convertCategoricalFilter(filter)); + } + else { + throw new Error('Invalid Categorical Filter'); + } + break; + } + case api_internal_contract_js_1.FilterType.Hierarchical: { + var filter = domainFilter; + if (filter) { + filters.push(_this.convertHierarchicalFilter(filter)); + } + else { + throw new Error('Invalid Hierarchical Filter'); + } + break; + } + case api_internal_contract_js_1.FilterType.Range: { + var filter = domainFilter; + if (filter) { + filters.push(_this.convertRangeFilter(filter)); + } + else { + throw new Error('Invalid Range Filter'); + } + break; + } + case api_internal_contract_js_1.FilterType.RelativeDate: { + var filter = domainFilter; + if (filter) { + filters.push(_this.convertRelativeDateFilter(filter)); + } + else { + throw new Error('Invalid Relative Date Filter'); + } + break; + } + default: { + break; + } + } + }); + return filters; + }; + FilterServiceImpl.prototype.convertCategoricalFilter = function (domainFilter) { + var appliedValues = domainFilter.values.map(function (dv) { + return DataValueFactory_1.DataValueFactory.MakeFilterDataValue(dv); + }); + return new FilterModels_1.CategoricalFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Categorical, this._registryId, appliedValues, domainFilter.isExclude, domainFilter.isAllSelected); + }; + FilterServiceImpl.prototype.convertHierarchicalFilter = function (domainFilter) { + var appliedValues = domainFilter.values.map(function (hierarchicalDataValue) { + return new FilterModels_1.HierarchicalDataValue(DataValueFactory_1.DataValueFactory.MakeFilterDataValue(hierarchicalDataValue.value), hierarchicalDataValue.hierarchicalPath, hierarchicalDataValue.level); + }); + var levelDetails = domainFilter.levelInfo.map(function (aLevel) { + return new FilterModels_1.HierarchicalLevelDetail(aLevel.name, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.hierarchicalLevelSelectionState.convert(aLevel.levelSelectionState)); + }); + return new FilterModels_1.HierarchicalFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Hierarchical, this._registryId, domainFilter.dimensionName, domainFilter.hierarchyCaption, domainFilter.levels, levelDetails, appliedValues, domainFilter.isAllSelected); + }; + FilterServiceImpl.prototype.convertRangeFilter = function (domainFilter) { + var minValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.min); + var maxValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.max); + return new FilterModels_1.RangeFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_internal_contract_js_1.FilterType.Range, this._registryId, minValue, maxValue, domainFilter.includeNullValues); + }; + FilterServiceImpl.prototype.convertRelativeDateFilter = function (domainFilter) { + var anchorDateValue = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainFilter.anchorDate); + return new FilterModels_1.RelativeDateFilter(domainFilter.visualId.worksheet, domainFilter.fieldCaption, domainFilter.fieldName, api_external_contract_js_1.FilterType.RelativeDate, this._registryId, anchorDateValue, InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateStepPeriod.convert(domainFilter.periodType), InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.dateRangeType.convert(domainFilter.rangeType), domainFilter.rangeN); + }; + FilterServiceImpl.prototype.convertCategoricalDomain = function (domain, domainType) { + var values = domain.values.map(function (domainDv) { + return DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domainDv); + }); + return new FilterModels_1.CategoricalDomain(values, domainType); + }; + FilterServiceImpl.prototype.convertRangeDomain = function (domain, domainType) { + var min = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domain.min); + var max = DataValueFactory_1.DataValueFactory.MakeFilterDataValue(domain.max); + return new FilterModels_1.RangeDomain(min, max, domainType); + }; + FilterServiceImpl.prototype.convertAnchorDate = function (anchorDate) { + // Converts a Date object into a string format that the server expects for date/time values. + // If anchorDate doesn't represent a valid Date object, any of these would be NaN. + var year = anchorDate.getUTCFullYear(); + var month = anchorDate.getUTCMonth() + 1; + var day = anchorDate.getUTCDate(); + var hh = anchorDate.getUTCHours(); + var mm = anchorDate.getUTCMinutes(); + var sec = anchorDate.getUTCSeconds(); + if (isNaN(year) || isNaN(month) || isNaN(day) || isNaN(hh) || isNaN(mm) || isNaN(sec)) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.EmbeddingErrorCodes.InvalidDateParameter, 'Invalid date parameter: anchorDate'); + } + var result = year + "-" + month + "-" + day + " " + hh + ":" + mm + ":" + sec; + return result; + }; + FilterServiceImpl.prototype.apiFilterHandlerCheckForCommandError = function (serverPm) { + if (!serverPm[InternalContract.ParameterId.ParameterError]) { + return; + } + if (serverPm[InternalContract.ParameterId.InvalidFieldCaption]) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidFilterFieldName, serverPm[InternalContract.ParameterId.InvalidFieldCaption]); + } + if (serverPm[InternalContract.ParameterId.InvalidValues]) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidFilterFieldValue, serverPm[InternalContract.ParameterId.InvalidValues]); + } + if (serverPm[InternalContract.ParameterId.InvalidAggFieldName]) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidAggregationFieldName, serverPm[InternalContract.ParameterId.InvalidAggFieldName]); + } + throw new ApiShared_1.TableauError(api_external_contract_js_1.SharedErrorCodes.ServerError, 'Server Error'); + }; + return FilterServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.FilterServiceImpl = FilterServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/GetDataServiceImpl.js": +/*!******************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/GetDataServiceImpl.js ***! + \******************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var uuid_1 = __webpack_require__(/*! uuid */ "../../node_modules/uuid/index.js"); +var ApiShared_1 = __webpack_require__(/*! ../../../ApiShared */ "../api-shared-js/lib/src/ApiShared.js"); +var ExternalToInternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/ExternalToInternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js"); +var GetDataModels_1 = __webpack_require__(/*! ../../Models/GetDataModels */ "../api-shared-js/lib/src/ApiShared/Models/GetDataModels.js"); +var GetDataTableReaderModels_1 = __webpack_require__(/*! ../../Models/GetDataTableReaderModels */ "../api-shared-js/lib/src/ApiShared/Models/GetDataTableReaderModels.js"); +var DataValueFactory_1 = __webpack_require__(/*! ../../Utils/DataValueFactory */ "../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js"); +var GetDataService_1 = __webpack_require__(/*! ../GetDataService */ "../api-shared-js/lib/src/ApiShared/Services/GetDataService.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var GetDataServiceImpl = /** @class */ (function (_super) { + __extends(GetDataServiceImpl, _super); + function GetDataServiceImpl() { + var _this = _super !== null && _super.apply(this, arguments) || this; + // The extension/embedding instance uses the same cache for all DataTableReaders. + _this.viewDataTableCacheId = uuid_1.v4(); + return _this; + } + Object.defineProperty(GetDataServiceImpl.prototype, "serviceName", { + get: function () { + return "get-data-service" /* GetData */; + }, + enumerable: true, + configurable: true + }); + GetDataServiceImpl.prototype.getMaxRowLimit = function () { + return 10000; + }; + GetDataServiceImpl.prototype.getViewDataTableCacheId = function () { + return this.viewDataTableCacheId; + }; + GetDataServiceImpl.prototype.getLimitedMaxRows = function (requestedRows) { + var rowCountLimit = this.getMaxRowLimit() + 1; + return requestedRows > 0 && requestedRows < rowCountLimit ? requestedRows : rowCountLimit; + }; + GetDataServiceImpl.prototype.getUnderlyingDataAsync = function (visualId, getType, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, maxRows, includeDataValuesOption) { + var _a; + var _this = this; + // Create all of our parameters + var summaryData = getType === GetDataService_1.GetDataType.Summary; + var functionName = summaryData ? 'getSummaryDataAsync' : 'getUnderlyingDataAsync'; + var verb = summaryData ? api_internal_contract_js_1.VerbId.GetDataSummaryData : api_internal_contract_js_1.VerbId.GetUnderlyingData; + var requestMaxRows = verb === api_internal_contract_js_1.VerbId.GetUnderlyingData ? this.getLimitedMaxRows(maxRows) : maxRows; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = functionName, + _a); + parameters[api_internal_contract_js_1.ParameterId.VisualId] = visualId; + parameters[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases; + parameters[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection; + parameters[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns; + parameters[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById); + parameters[api_internal_contract_js_1.ParameterId.MaxRows] = requestMaxRows; + parameters[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption); + return this.execute(verb, parameters).then(function (response) { + var responseData = response.result; + return _this.processResultsTable(responseData.data, responseData.isSummary); + }); + }; + GetDataServiceImpl.prototype.getSummaryDataReaderAsync = function (visualId, pageRowCount, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSummaryDataReaderAsync', + _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(), + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection, + _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns, + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetDataSummaryDataReader, parameters).then(function (response) { + var responseData = response.result; + return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId); + }); + }; + GetDataServiceImpl.prototype.getSummaryColumnsInfoAsync = function (visualId) { + var _a; + // Create all the parameters for GetDataType of Summary with 1 row, and only native values + // Then return just the columns + var verb = api_internal_contract_js_1.VerbId.GetDataSummaryData; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSummaryColumnsInfoAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = true, + _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = true, + _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = true, + _a[api_internal_contract_js_1.ParameterId.MaxRows] = 1, + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = api_internal_contract_js_1.ApiShowDataTableFormat.NativeValuesOnly, + _a); + return this.execute(verb, parameters).then(function (response) { + var underlyingDataTable = response.result; + var dataTable = underlyingDataTable.data; + var columns = dataTable.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); }); + return columns; + }); + }; + GetDataServiceImpl.prototype.getSelectedMarksAsync = function (visualId) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getSelectedMarksAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetSelectedMarks, parameters).then(function (response) { + var responseData = response.result; + return { + data: responseData.data.map(function (table) { return _this.processResultsTable(table, true); }), + }; + }); + }; + GetDataServiceImpl.prototype.getHighlightedMarksAsync = function (visualId) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getHighlightedMarksAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetHighlightedMarks, parameters).then(function (response) { + var responseData = response.result; + return { + data: responseData.data.map(function (table) { return _this.processResultsTable(table, true); }), + }; + }); + }; + GetDataServiceImpl.prototype.getDataSourceDataAsync = function (dataSourceId, ignoreAliases, maxRows, columnsToInclude, columnsToIncludeById, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getDataSourceDataAsync', + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = dataSourceId, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows), + _a[api_internal_contract_js_1.ParameterId.ColumnsToInclude] = this.verifyIncludeColumnArray(columnsToInclude), + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetDataSourceData, parameters).then(function (response) { + var responseData = response.result; + return _this.processResultsTable(responseData.data, false); + }); + }; + GetDataServiceImpl.prototype.getLogicalTableDataAsync = function (datasourceId, logicalTableId, ignoreAliases, maxRows, columnsToInclude, columnsToIncludeById, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTableDataAsync', + _a[api_internal_contract_js_1.ParameterId.ColumnsToInclude] = columnsToInclude, + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = datasourceId, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId, + _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTableData, parameters).then(function (response) { + var responseData = response.result; + return _this.processResultsTable(responseData.data, false); + }); + }; + GetDataServiceImpl.prototype.getLogicalTableDataReaderAsync = function (datasourceId, logicalTableId, pageRowCount, ignoreAliases, columnsToIncludeById, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getLogicalTableDataReaderAsync', + _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(), + _a[api_internal_contract_js_1.ParameterId.DataSourceId] = datasourceId, + _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId, + _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetLogicalTableDataReader, parameters).then(function (response) { + var responseData = response.result; + return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId); + }); + }; + GetDataServiceImpl.prototype.getUnderlyingTableDataAsync = function (visualId, logicalTableId, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, maxRows, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTableDataAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection, + _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns, + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.MaxRows] = this.getLimitedMaxRows(maxRows), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTableData, parameters).then(function (response) { + var responseData = response.result; + return _this.processResultsTable(responseData.data, false); + }); + }; + GetDataServiceImpl.prototype.getUnderlyingTableDataReaderAsync = function (visualId, logicalTableId, pageRowCount, ignoreAliases, ignoreSelection, includeAllColumns, columnsToIncludeById, includeDataValuesOption) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getUnderlyingTableDataReaderAsync', + _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(), + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.LogicalTableId] = logicalTableId, + _a[api_internal_contract_js_1.ParameterId.IgnoreAliases] = ignoreAliases, + _a[api_internal_contract_js_1.ParameterId.IgnoreSelection] = ignoreSelection, + _a[api_internal_contract_js_1.ParameterId.IncludeAllColumns] = includeAllColumns, + _a[api_internal_contract_js_1.ParameterId.ColumnsToIncludeById] = this.verifyIncludeColumnArray(columnsToIncludeById), + _a[api_internal_contract_js_1.ParameterId.ShowDataTableFormat] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.showDataTableFormatType.convert(includeDataValuesOption), + _a[api_internal_contract_js_1.ParameterId.PageRowCount] = pageRowCount, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetUnderlyingTableDataReader, parameters).then(function (response) { + var responseData = response.result; + return new GetDataTableReaderModels_1.DataTableReader(responseData.id, responseData.totalRowCount, pageRowCount, _this._registryId); + }); + }; + GetDataServiceImpl.prototype.getPageAsync = function (tableId, pageNumber, pageSize) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getPageAsync', + _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(), + _a[api_internal_contract_js_1.ParameterId.ViewDataTableId] = tableId, + _a[api_internal_contract_js_1.ParameterId.DataRowIndex] = pageNumber * pageSize, + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetDataTableReaderPage, parameters).then(function (response) { + var responseData = response.result; + return _this.processResultsPage(responseData, tableId === GetDataServiceImpl.summaryTableId ? true : false); + }); + }; + GetDataServiceImpl.prototype.releaseAsync = function (tableId) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'release', + _a[api_internal_contract_js_1.ParameterId.ViewDataTableCacheId] = this.getViewDataTableCacheId(), + _a[api_internal_contract_js_1.ParameterId.ViewDataTableId] = tableId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.ReleaseDataTableReader, parameters).then(function (response) { + return; + }); + }; + GetDataServiceImpl.prototype.verifyIncludeColumnArray = function (columns) { + // columns must be a valid array + if (!Array.isArray(columns)) { + throw new ApiShared_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'columnsToInclude and columnsToIncludeById must be valid arrays'); + } + // Remove any duplicates from the input array + var columnsAsSet = new Set(columns); + return Array.from(columnsAsSet); + }; + GetDataServiceImpl.prototype.processResultsTable = function (responseData, isSummary) { + var headers = responseData.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); }); + // TODO This should be controlled by a flag indicating whether this api will respond marks info or not + var marks; + if (responseData.marks) { + marks = responseData.marks.map(function (h) { return new GetDataModels_1.MarkInfo(h.type, h.color, h.tupleId); }); + } + // Limit+1 is our sentinal that underlying data contains more rows than user is allowed to fetch. + // Remove the last element so we always return MaxRowLimit + var isTotalRowCountLimited = isSummary === false && responseData.dataTable.length === this.getMaxRowLimit() + 1; + if (isTotalRowCountLimited) { + responseData.dataTable.length -= 1; + } + var table = responseData.dataTable.map(function (row) { + return row.map(function (cell, index) { + return DataValueFactory_1.DataValueFactory.MakeTableDataValue(cell, headers[index].dataType); + }); + }); + if (marks) { + return new GetDataModels_1.DataTable(table, headers, table.length, isTotalRowCountLimited, isSummary, marks); + } + return new GetDataModels_1.DataTable(table, headers, table.length, isTotalRowCountLimited, isSummary); + }; + GetDataServiceImpl.prototype.processResultsPage = function (responseData, isSummary) { + var headers = responseData.headers.map(function (h) { return new GetDataModels_1.Column(h.fieldCaption, h.fieldName, h.dataType, h.isReferenced, h.index); }); + var marks; + if (responseData.marks) { + marks = responseData.marks.map(function (h) { return new GetDataModels_1.MarkInfo(h.type, h.color, h.tupleId); }); + } + var table = responseData.dataTable.map(function (row) { + return row.map(function (cell, index) { + return DataValueFactory_1.DataValueFactory.MakeTableDataValue(cell, headers[index].dataType); + }); + }); + if (marks) { + return new GetDataModels_1.DataTable(table, headers, table.length, false, isSummary, marks); + } + return new GetDataModels_1.DataTable(table, headers, table.length, false, isSummary); + }; + GetDataServiceImpl.summaryTableId = ''; + return GetDataServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.GetDataServiceImpl = GetDataServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImpl.js": +/*!***********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImpl.js ***! + \***********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var NotificationServiceImplBase_1 = __webpack_require__(/*! ./NotificationServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImplBase.js"); +var NotificationServiceImpl = /** @class */ (function (_super) { + __extends(NotificationServiceImpl, _super); + function NotificationServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(NotificationServiceImpl.prototype, "serviceName", { + get: function () { + return "notification-service" /* Notification */; + }, + enumerable: true, + configurable: true + }); + return NotificationServiceImpl; +}(NotificationServiceImplBase_1.NotificationServiceImplBase)); +exports.NotificationServiceImpl = NotificationServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImplBase.js": +/*!***************************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/NotificationServiceImplBase.js ***! + \***************************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Registration = /** @class */ (function () { + function Registration(_filterFn, _callbackFn) { + this._filterFn = _filterFn; + this._callbackFn = _callbackFn; + // Nothing Here + } + Registration.prototype.onNotification = function (notificationModel) { + if (this._filterFn(notificationModel)) { + this._callbackFn(notificationModel); + } + }; + return Registration; +}()); +exports.Registration = Registration; +var NotificationServiceImplBase = /** @class */ (function () { + function NotificationServiceImplBase(dispatcher) { + this.dispatcher = dispatcher; + this._handlers = {}; + this.dispatcher.registerNotificationHandler(this.onNotification.bind(this)); + } + NotificationServiceImplBase.prototype.registerHandler = function (id, filterFn, handler) { + var _this = this; + var handlers = this._handlers[id] || new Array(); + var registration = new Registration(filterFn, handler); + handlers.push(registration); + this._handlers[id] = handlers; + return function () { return _this.removeRegistration(id, registration); }; + }; + NotificationServiceImplBase.prototype.hasHandlersForNotificationType = function (id) { + // eslint-disable-next-line no-prototype-builtins + return this._handlers.hasOwnProperty(id); + }; + NotificationServiceImplBase.prototype.onNotification = function (notification) { + if (!this.hasHandlersForNotificationType(notification.notificationId)) { + return; + } + // Go through and check for all the handlers of this particular notification + this._handlers[notification.notificationId].forEach(function (h) { return h.onNotification(notification.data); }); + }; + NotificationServiceImplBase.prototype.removeRegistration = function (id, registration) { + if (!this.hasHandlersForNotificationType(id)) { + return; + } + this._handlers[id] = this._handlers[id].filter(function (reg) { return reg !== registration; }); + }; + return NotificationServiceImplBase; +}()); +exports.NotificationServiceImplBase = NotificationServiceImplBase; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/ParametersServiceImpl.js": +/*!*********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/ParametersServiceImpl.js ***! + \*********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ParameterImpl_1 = __webpack_require__(/*! ../../Impl/ParameterImpl */ "../api-shared-js/lib/src/ApiShared/Impl/ParameterImpl.js"); +var TableauError_1 = __webpack_require__(/*! ../../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var ParametersServiceImpl = /** @class */ (function (_super) { + __extends(ParametersServiceImpl, _super); + function ParametersServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ParametersServiceImpl.prototype, "serviceName", { + get: function () { + return "parameters-service" /* Parameters */; + }, + enumerable: true, + configurable: true + }); + ParametersServiceImpl.prototype.getParametersForSheetAsync = function (sheetPath) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getParametersForSheetAsync', + _a[api_internal_contract_js_1.ParameterId.SheetPath] = sheetPath, + _a); + return this.getParametersAsync(parameters); + }; + ParametersServiceImpl.prototype.getAllParametersAsync = function () { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getParametersForSheetAsync', + _a); + return this.getParametersAsync(parameters); + }; + ParametersServiceImpl.prototype.getParametersAsync = function (inputParameters) { + var _this = this; + return this.execute(api_internal_contract_js_1.VerbId.GetParametersForSheet, inputParameters).then(function (response) { + var result = response.result; + return result.map(function (parameterInfo) { + return new ParameterImpl_1.ParameterImpl(parameterInfo, _this._registryId); + }); + }); + }; + ParametersServiceImpl.prototype.changeParameterValueAsync = function (fieldName, newValue) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'changeParameterValueAsync', + _a[api_internal_contract_js_1.ParameterId.ParameterFieldName] = fieldName, + _a[api_internal_contract_js_1.ParameterId.ParameterValue] = newValue, + _a); + return this.execute(api_internal_contract_js_1.VerbId.ChangeParameterValue, parameters).then(function (response) { + var result = response.result; + return result; + }); + }; + ParametersServiceImpl.prototype.findParameterByNameAsync = function (name) { + return this.findParameterAsync(name, undefined); + }; + ParametersServiceImpl.prototype.findParameterByGlobalFieldNameAsync = function (fieldName) { + return this.findParameterAsync(undefined, fieldName); + }; + ParametersServiceImpl.prototype.findParameterAsync = function (name, fieldName) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'findParameterAsync', + _a); + if (name !== undefined) { + parameters[api_internal_contract_js_1.ParameterId.ParameterCaption] = name; + } + else if (fieldName !== undefined) { + parameters[api_internal_contract_js_1.ParameterId.ParameterFieldName] = fieldName; + } + else { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, 'name or fieldName must be provided to find parameter'); + } + return this.execute(api_internal_contract_js_1.VerbId.FindParameter, parameters).then(function (response) { + var instanceOfParameterInfo = function (object) { + return 'fieldName' in object; + }; + // We need to check to see if we got a valid response back again + if (instanceOfParameterInfo(response.result)) { + var result = response.result; + return new ParameterImpl_1.ParameterImpl(result, _this._registryId); + } + else { + return undefined; + } + }); + }; + return ParametersServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.ParametersServiceImpl = ParametersServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/SelectionServiceImpl.js": +/*!********************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/SelectionServiceImpl.js ***! + \********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var SelectionModels_1 = __webpack_require__(/*! ../../Models/SelectionModels */ "../api-shared-js/lib/src/ApiShared/Models/SelectionModels.js"); +var TableauError_1 = __webpack_require__(/*! ../../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var Param_1 = __webpack_require__(/*! ../../Utils/Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var SelectionServiceImpl = /** @class */ (function (_super) { + __extends(SelectionServiceImpl, _super); + function SelectionServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(SelectionServiceImpl.prototype, "serviceName", { + get: function () { + return "selection-service" /* Selection */; + }, + enumerable: true, + configurable: true + }); + /** + * Method to clear all the selected marks for the given worksheet. + * + * @param visualId + */ + SelectionServiceImpl.prototype.clearSelectedMarksAsync = function (visualId) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'clearSelectedMarksAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a); + return this.execute(api_internal_contract_js_1.VerbId.ClearSelectedMarks, parameters).then(function (response) { + return; // Expecting an empty model and hence the void response. + }); + }; + /** + * Method to select marks for the given worksheet. + * + * @param visualId + * @param selectionCriteria + * @param selectionUpdateType + */ + SelectionServiceImpl.prototype.selectMarksByValueAsync = function (visualId, selectionCriterias, selectionUpdateType) { + var _a; + var _this = this; + if (selectionCriterias.length === 0) { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InvalidParameter, 'Selection criteria missing for selecting marks by value'); + } + var selectionType = this.validateSelectionUpdateType(selectionUpdateType); + var selectionModelContainer = this.parseSelectionMarks(selectionCriterias); + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'selectMarksByValueAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.SelectionUpdateType] = selectionType, + _a); + if (selectionModelContainer.hierModelArr && selectionModelContainer.hierModelArr.length) { + parameters[api_internal_contract_js_1.ParameterId.HierValSelectionModels] = selectionModelContainer.hierModelArr; + } + if (selectionModelContainer.quantModelArr && selectionModelContainer.quantModelArr.length) { + parameters[api_internal_contract_js_1.ParameterId.QuantRangeSelectionModels] = selectionModelContainer.quantModelArr; + } + if (selectionModelContainer.dimModelArr && selectionModelContainer.dimModelArr.length) { + parameters[api_internal_contract_js_1.ParameterId.DimValSelectionModels] = selectionModelContainer.dimModelArr; + } + return this.execute(api_internal_contract_js_1.VerbId.SelectByValue, parameters).then(function (response) { + _this.apiFilterHandlerCheckForCommandError(response.result); + return; + }); + }; + SelectionServiceImpl.prototype.apiFilterHandlerCheckForCommandError = function (serverPm) { + if (!serverPm[api_internal_contract_js_1.ParameterId.ParameterError]) { + return; + } + if (serverPm[api_internal_contract_js_1.ParameterId.InvalidFields]) { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionFieldName, serverPm[api_internal_contract_js_1.ParameterId.InvalidFields]); + } + if (serverPm[api_internal_contract_js_1.ParameterId.InvalidValues]) { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionValue, serverPm[api_internal_contract_js_1.ParameterId.InvalidValues]); + } + if (serverPm[api_internal_contract_js_1.ParameterId.InvalidDates]) { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.InvalidSelectionDate, serverPm[api_internal_contract_js_1.ParameterId.InvalidDates]); + } + }; + /** + * Method to select marks for the given worksheet. + * + * @param visualId + * @param MarkInfo + * @param selectionUpdateType + */ + SelectionServiceImpl.prototype.selectMarksByIdAsync = function (visualId, marks, selectionUpdateType) { + var _a; + if (marks.length === 0) { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InvalidParameter, 'Marks info missing for selecting marks by Id'); + } + var selectionType = this.validateSelectionUpdateType(selectionUpdateType); + var selectionModelContainer = this.parseSelectionIds(marks); + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'selectMarksByIdAsync', + _a[api_internal_contract_js_1.ParameterId.VisualId] = visualId, + _a[api_internal_contract_js_1.ParameterId.SelectionUpdateType] = selectionType, + _a[api_internal_contract_js_1.ParameterId.Selection] = selectionModelContainer.selection, + _a); + return this.execute(api_internal_contract_js_1.VerbId.SelectByValue, parameters).then(function (response) { + // Expecting an empty model and hence the void response. + return; + // TODO Investigate the error response with multiple output params and throw error accordingly. + }); + }; + /** + * Method to prepare the pres models for selection by MarksInfo + * @param marks + */ + SelectionServiceImpl.prototype.parseSelectionIds = function (marks) { + var ids = []; + var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer(); + for (var i = 0; i < marks.length; i++) { + var tupleId = marks[i].tupleId; + if (tupleId !== undefined && tupleId !== null) { + // If tuple id is provided use that instead of pair + ids.push(tupleId.toString()); // collect the tuple ids + } + else { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'tupleId parsing error'); + } + } + if (ids.length !== 0) { + // tuple ids based selection + var tupleSelectionModel = new SelectionModels_1.TupleSelectionModel(); + tupleSelectionModel.selectionType = 'tuples'; + tupleSelectionModel.objectIds = ids; + selectionModelContainer.selection = tupleSelectionModel; + } + return selectionModelContainer; + }; + /** + * Method to prepare the pres models for selection by values. + * + * Supports 3 types for selection: + * 1) Hierarchical value based selection + * 2) Range value based selection + * 3) Dimension value based selection + * + * @param marks + */ + SelectionServiceImpl.prototype.parseSelectionMarks = function (selectionCriterias) { + var selectionModelContainer = new SelectionModels_1.SelectionModelsContainer(); + for (var i = 0; i < selectionCriterias.length; i++) { + var st = selectionCriterias[i]; + if (!(st.fieldName && st.value !== undefined && st.value !== null)) { + throw new TableauError_1.TableauError(Contract.ErrorCodes.InternalError, 'Selection Criteria parsing error'); + } + var catRegex = new RegExp('([[A-Za-z0-9]+]).*', 'g'); + var rangeOption = st.value; + if (catRegex.test(st.fieldName)) { + // Hierarchical value selection + var hierModel = this.addToParamsList(st.fieldName, st.value); + selectionModelContainer.hierModelArr.push(hierModel); + } + else if (rangeOption.min !== undefined && rangeOption.max !== undefined) { + // Range value selection + var quantModel = this.addToRangeParamsList(st.fieldName, rangeOption); + selectionModelContainer.quantModelArr.push(quantModel); + } + else { + // Dimension value selection + var dimModel = this.addToParamsList(st.fieldName, st.value); + selectionModelContainer.dimModelArr.push(dimModel); + } + } + return selectionModelContainer; + }; + /** + * Method to transform the key value pair into value based pres model object. + * + * @param valueSelectionModel + * @param fieldName + * @param value + */ + SelectionServiceImpl.prototype.addToParamsList = function (fieldName, value) { + var valueSelectionModel = new SelectionModels_1.ValueSelectionModel(); + var markValues = []; + if (value instanceof Array) { + var valueArr = value; + for (var i = 0; i < valueArr.length; i++) { + markValues.push(Param_1.Param.serializeParameterValue(valueArr[i])); + } + } + else { + markValues.push(Param_1.Param.serializeParameterValue(value)); + } + valueSelectionModel.qualifiedFieldCaption = fieldName; + valueSelectionModel.selectValues = markValues; + return valueSelectionModel; + }; + /** + * Method to transform the key value pair into range based selection pres model. + * + * TODO: Need to handle the parsing of date type values. + * + * @param valueSelectionModel + * @param fieldName + * @param value + */ + SelectionServiceImpl.prototype.addToRangeParamsList = function (fieldName, value) { + var rangeSelectionModel = new SelectionModels_1.RangeSelectionModel(); + rangeSelectionModel.qualifiedFieldCaption = fieldName; + if (value.max !== undefined && value.max !== null) { + rangeSelectionModel.maxValue = Param_1.Param.serializeParameterValue(value.max); + } + if (value.min !== undefined && value.min !== null) { + rangeSelectionModel.minValue = Param_1.Param.serializeParameterValue(value.min); + } + rangeSelectionModel.included = this.validateNullOptionType(value.nullOption); + return rangeSelectionModel; + }; + /** + * Method to validate the selection update type. + * + * @param selectionUpdateType + */ + SelectionServiceImpl.prototype.validateSelectionUpdateType = function (selectionUpdateType) { + if (selectionUpdateType === Contract.SelectionUpdateType.Replace) { + return api_internal_contract_js_1.SelectionUpdateType.Replace; + } + else if (selectionUpdateType === Contract.SelectionUpdateType.Add) { + return api_internal_contract_js_1.SelectionUpdateType.Add; + } + else if (selectionUpdateType === Contract.SelectionUpdateType.Remove) { + return api_internal_contract_js_1.SelectionUpdateType.Remove; + } + return api_internal_contract_js_1.SelectionUpdateType.Replace; + }; + /** + * Method to validate the include type for range selection. + * + * @param nullOption + */ + SelectionServiceImpl.prototype.validateNullOptionType = function (nullOption) { + if (nullOption) { + if (nullOption === Contract.FilterNullOption.NullValues) { + return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeNull; + } + else if (nullOption === Contract.FilterNullOption.NonNullValues) { + return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeNonNull; + } + else if (nullOption === Contract.FilterNullOption.AllValues) { + return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeAll; + } + } + return api_internal_contract_js_1.QuantitativeIncludedValues.IncludeAll; + }; + return SelectionServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.SelectionServiceImpl = SelectionServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js": +/*!***************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var InternalToExternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/InternalToExternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/InternalToExternalEnumMappings.js"); +var TableauError_1 = __webpack_require__(/*! ../../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var EnumConverter_1 = __webpack_require__(/*! ../../Utils/EnumConverter */ "../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js"); +/** + * Each ServceImpl should extend this base class for the sake of + * proper error handling. This base handles the conversion + * from internal errors to external errors that we throw to developers + */ +var ServiceImplBase = /** @class */ (function () { + function ServiceImplBase(_dispatcher, _registryId) { + this._dispatcher = _dispatcher; + this._registryId = _registryId; + } + ServiceImplBase.prototype.execute = function (verb, params) { + return this._dispatcher.execute(verb, params).catch(function (error) { + // Any internal error that comes from the dispatcher should be converted + // to an external error using the enum mapper for error codes. + var internalError = error; + var externalErrorCode = InternalToExternalEnumMappings_1.InternalToExternalEnumMappings.errorCode.convert(internalError.errorCode, EnumConverter_1.ShouldThrow.No); + throw new TableauError_1.TableauError(externalErrorCode, internalError.message); + }); + }; + return ServiceImplBase; +}()); +exports.ServiceImplBase = ServiceImplBase; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/SizeServiceImpl.js": +/*!***************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/SizeServiceImpl.js ***! + \***************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var SizeServiceImpl = /** @class */ (function (_super) { + __extends(SizeServiceImpl, _super); + function SizeServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(SizeServiceImpl.prototype, "serviceName", { + get: function () { + return "size-service" /* Size */; + }, + enumerable: true, + configurable: true + }); + SizeServiceImpl.prototype.changeSizeAsync = function (name, newSize) { + var _a; + var _b, _c, _d, _e; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'changeSizeAsync', + _a[api_internal_contract_js_1.ParameterId.SheetName] = name, + _a[api_internal_contract_js_1.ParameterId.MinHeight] = ((_b = newSize.minSize) === null || _b === void 0 ? void 0 : _b.height) || 0, + _a[api_internal_contract_js_1.ParameterId.MinWidth] = ((_c = newSize.minSize) === null || _c === void 0 ? void 0 : _c.width) || 0, + _a[api_internal_contract_js_1.ParameterId.MaxHeight] = ((_d = newSize.maxSize) === null || _d === void 0 ? void 0 : _d.height) || 0, + _a[api_internal_contract_js_1.ParameterId.MaxWidth] = ((_e = newSize.maxSize) === null || _e === void 0 ? void 0 : _e.width) || 0, + _a); + return this.execute(api_internal_contract_js_1.VerbId.SetSheetSize, parameters).then(function (_response) { + return; + }); + }; + return SizeServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.SizeServiceImpl = SizeServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/StoryActivationServiceImpl.js": +/*!**************************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/StoryActivationServiceImpl.js ***! + \**************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var StoryActivationServiceImpl = /** @class */ (function (_super) { + __extends(StoryActivationServiceImpl, _super); + function StoryActivationServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(StoryActivationServiceImpl.prototype, "serviceName", { + get: function () { + return "story-activation-service" /* StoryActivation */; + }, + enumerable: true, + configurable: true + }); + StoryActivationServiceImpl.prototype.activateNextStoryPointAsync = function () { + var _a; + var verb = api_internal_contract_js_1.VerbId.ActivateNextStoryPoint; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateNextStoryPointAsync', + _a); + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + StoryActivationServiceImpl.prototype.activatePreviousStoryPointAsync = function () { + var _a; + var verb = api_internal_contract_js_1.VerbId.ActivatePreviousStoryPoint; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activatePreviousStoryPointAsync', + _a); + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + StoryActivationServiceImpl.prototype.activateStoryPointAsync = function (index) { + var _a; + var verb = api_internal_contract_js_1.VerbId.ActivateStoryPoint; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateStoryPointAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.StoryPointIndex] = index; + return this.execute(verb, parameters).then(function (response) { + return; + }); + }; + StoryActivationServiceImpl.prototype.revertStoryPointAsync = function (index) { + var _a; + var verb = api_internal_contract_js_1.VerbId.RevertStoryPoint; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'revertStoryPointAsync', + _a); + parameters[api_internal_contract_js_1.ParameterId.StoryPointIndex] = index; + return this.execute(verb, parameters).then(function (response) { + return response.result; + }); + }; + return StoryActivationServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.StoryActivationServiceImpl = StoryActivationServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/VizServiceImpl.js": +/*!**************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/VizServiceImpl.js ***! + \**************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var CustomViewImpl_1 = __webpack_require__(/*! ../../Impl/CustomViewImpl */ "../api-shared-js/lib/src/ApiShared/Impl/CustomViewImpl.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var VizServiceImpl = /** @class */ (function (_super) { + __extends(VizServiceImpl, _super); + function VizServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(VizServiceImpl.prototype, "serviceName", { + get: function () { + return "viz-service" /* Viz */; + }, + enumerable: true, + configurable: true + }); + VizServiceImpl.prototype.createVizImageAsync = function (inputSpec) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'createVizImageAsync', + _a[api_internal_contract_js_1.ParameterId.VizAPIInputJson] = JSON.stringify(inputSpec), + _a); + return this.execute(api_internal_contract_js_1.VerbId.VizAPI, parameters).then(function (response) { + var result = response.result; + return result; + }); + }; + VizServiceImpl.prototype.activateSheetAsync = function (name) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'activateSheetAsync', + _a[api_internal_contract_js_1.ParameterId.SwitchToSheetName] = name, + _a); + return this.execute(api_internal_contract_js_1.VerbId.ActivateSheet, parameters).then(function () { + return; + }); + }; + VizServiceImpl.prototype.getCustomViewsAsync = function () { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCustomViewsAsync', + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetCustomViews, parameters).then(function (response) { + var customViews = response.result; + return customViews.map(function (customView) { + return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId); + }); + }); + }; + VizServiceImpl.prototype.showCustomViewAsync = function (customViewName) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'showCustomViewAsync', + _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName, + _a); + return this.execute(api_internal_contract_js_1.VerbId.ShowCustomView, parameters).then(function (response) { + var customView = response.result; + return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId); + }); + }; + VizServiceImpl.prototype.removeCustomViewAsync = function (customViewName) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'removeCustomViewAsync', + _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName, + _a); + return this.execute(api_internal_contract_js_1.VerbId.RemoveCustomView, parameters).then(function (response) { + var customView = response.result; + return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId); + }); + }; + VizServiceImpl.prototype.saveCustomViewAsync = function (customViewName) { + var _a; + var _this = this; + // CustomViewIsDefault is a required parameter, but our API has not been updated to allow it to be specified yet. + // We should add a 'default' parameter to the interface. + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveCustomViewAsync', + _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customViewName, + _a[api_internal_contract_js_1.ParameterId.CustomViewIsDefault] = false, + _a); + return this.execute(api_internal_contract_js_1.VerbId.SaveWorkbookAsCustomView, parameters).then(function (response) { + var customView = response.result; + return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId); + }); + }; + VizServiceImpl.prototype.setActiveCustomViewAsDefaultAsync = function () { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'setActiveCustomViewAsDefaultAsync', + _a); + return this.execute(api_internal_contract_js_1.VerbId.SetActiveCustomViewAsDefault, parameters).then(function () { + return; + }); + }; + VizServiceImpl.prototype.saveAsync = function (customView) { + var _a; + var _this = this; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'saveAsync', + _a[api_internal_contract_js_1.ParameterId.CustomViewLuid] = customView.luid, + _a[api_internal_contract_js_1.ParameterId.CustomViewName] = customView.name, + _a[api_internal_contract_js_1.ParameterId.CustomViewIsDefault] = customView.isDefault, + _a[api_internal_contract_js_1.ParameterId.CustomViewIsPublic] = customView.shared, + _a); + return this.execute(api_internal_contract_js_1.VerbId.UpdateCustomView, parameters).then(function (response) { + var customView = response.result; + return new CustomViewImpl_1.CustomViewImpl(customView, _this._registryId); + }); + }; + VizServiceImpl.prototype.getCurrentSrcAsync = function () { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'getCurrentSrcAsync', + _a); + return this.execute(api_internal_contract_js_1.VerbId.GetCurrentSrc, parameters).then(function (response) { return response.result; }); + }; + return VizServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.VizServiceImpl = VizServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Services/impl/ZoneServiceImpl.js": +/*!***************************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Services/impl/ZoneServiceImpl.js ***! + \***************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var ExternalToInternalEnumMappings_1 = __webpack_require__(/*! ../../EnumMappings/ExternalToInternalEnumMappings */ "../api-shared-js/lib/src/ApiShared/EnumMappings/ExternalToInternalEnumMappings.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ../../Utils/ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Param_1 = __webpack_require__(/*! ../../Utils/Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +var ServiceImplBase_1 = __webpack_require__(/*! ./ServiceImplBase */ "../api-shared-js/lib/src/ApiShared/Services/impl/ServiceImplBase.js"); +var ZoneServiceImpl = /** @class */ (function (_super) { + __extends(ZoneServiceImpl, _super); + function ZoneServiceImpl() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ZoneServiceImpl.prototype, "serviceName", { + get: function () { + return "zone-service" /* Zone */; + }, + enumerable: true, + configurable: true + }); + ZoneServiceImpl.prototype.setVisibilityAsync = function (dashboard, dashboardZoneMap, zoneVisibilityMap) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.FunctionName] = 'setVisibilityAsync', + _a[api_internal_contract_js_1.ParameterId.Dashboard] = dashboard, + _a[api_internal_contract_js_1.ParameterId.ZoneIdsVisibilityMap] = {}, + _a); + // zoneVisibilityMap can be either an object or a Map - convert it to a Map + var parameterAsMap = Param_1.Param.convertParameterToMap(zoneVisibilityMap, 'zoneVisibilityMap'); + parameterAsMap.forEach(function (value, key) { + ErrorHelpers_1.ErrorHelpers.verifyZoneIsValid(dashboardZoneMap, Number.parseInt(key, 10)); + ErrorHelpers_1.ErrorHelpers.verifyEnumValue(value, api_external_contract_js_1.DashboardObjectVisibilityType, 'DashboardObjectVisibilityType'); + parameters[api_internal_contract_js_1.ParameterId.ZoneIdsVisibilityMap][key] = ExternalToInternalEnumMappings_1.ExternalToInternalEnumMappings.setVisibilityType.convert(value); + }); + return this.execute(api_internal_contract_js_1.VerbId.SetZoneVisibility, parameters).then(function (response) { + return; + }); + }; + ZoneServiceImpl.prototype.moveAndResizeAsync = function (dashboard, dashboardZoneMap, dashboardObjectPositionAndSizeUpdateArray) { + var _a; + var parameters = (_a = {}, + _a[api_internal_contract_js_1.ParameterId.Dashboard] = dashboard, + _a[api_internal_contract_js_1.ParameterId.DashboardObjectPositionAndSizeUpdateList] = dashboardObjectPositionAndSizeUpdateArray, + _a); + dashboardObjectPositionAndSizeUpdateArray.forEach(function (dashboardObject) { + ErrorHelpers_1.ErrorHelpers.verifyZoneIsValidAndFloating(dashboardZoneMap, dashboardObject.dashboardObjectID); + ErrorHelpers_1.ErrorHelpers.verifyWidthAndHeightOfDashboardObjectPositionAndSizeUpdate(dashboardObject); + }); + return this.execute(api_internal_contract_js_1.VerbId.MoveAndResizeZones, parameters).then(function (response) { + return; + }); + }; + return ZoneServiceImpl; +}(ServiceImplBase_1.ServiceImplBase)); +exports.ZoneServiceImpl = ZoneServiceImpl; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/TableSummary.js": +/*!**********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/TableSummary.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Implementation of a table summary. + * This does not follow the Impl pattern as it is just a property bag. + */ +var TableSummary = /** @class */ (function () { + function TableSummary(_tableInfo) { + this._tableInfo = _tableInfo; + } + Object.defineProperty(TableSummary.prototype, "name", { + get: function () { + return this._tableInfo.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TableSummary.prototype, "id", { + get: function () { + return this._tableInfo.id; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TableSummary.prototype, "connectionId", { + get: function () { + return this._tableInfo.connectionId; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TableSummary.prototype, "customSQL", { + get: function () { + return this._tableInfo.customSQL; + }, + enumerable: true, + configurable: true + }); + return TableSummary; +}()); +exports.TableSummary = TableSummary; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/TableauError.js": +/*!**********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/TableauError.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Custom error class that extends the default JavaScript Error object. + * This allows us to provide a field with a specific error code + * so that developers can more easily programmatically respond + * to error scenarios. + */ +var TableauError = /** @class */ (function (_super) { + __extends(TableauError, _super); + function TableauError(_errorCode, message) { + var _this = _super.call(this, _errorCode + ": " + message) || this; + _this._errorCode = _errorCode; + /*tslint:disable-next-line */ + // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work + // Error inheritance does not work propertly when compiling to ES5, this is a workaround to force + // the proto chain to be built correctly. See the github link above for details. + Object.setPrototypeOf(_this, TableauError.prototype); + return _this; + } + Object.defineProperty(TableauError.prototype, "errorCode", { + get: function () { + return this._errorCode; + }, + enumerable: true, + configurable: true + }); + return TableauError; +}(Error)); +exports.TableauError = TableauError; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js": +/*!********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/DataValueFactory.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var InternalContract = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var GetDataModels_1 = __webpack_require__(/*! ../Models/GetDataModels */ "../api-shared-js/lib/src/ApiShared/Models/GetDataModels.js"); +/** + * In version 2 of the interface, we should collapse value into nativeValue, and do all this work over + * in the platform. + */ +var DataValueFactory = /** @class */ (function () { + function DataValueFactory() { + } + DataValueFactory.MakeParameterDataValue = function (internalDataValue, dataType) { + // Parameter values are all strings, convert from string to value + return new GetDataModels_1.DataValue(internalDataValue.value, InternalContract.DataTypeConverter.convertStringValueToNativeValue(internalDataValue.value, dataType), internalDataValue.formattedValue); + }; + DataValueFactory.MakeFilterDataValue = function (internalDataValue) { + // Filters already have native type in value, just use that for nativeValue also + return new GetDataModels_1.DataValue(internalDataValue.value, internalDataValue.value, internalDataValue.formattedValue); + }; + DataValueFactory.MakeTableDataValue = function (internalDataValue, dataType) { + // DataTables contain boolean | number | string | date as string | '%null% + // convertValueToNativeValue converts dates as string to dates, and any special to null + // (boolean, numbers, strings are passed through) + // Because of IncludeDataValuesOption - we can have undefined values, which are different than any special + return new GetDataModels_1.DataValue(internalDataValue.value, internalDataValue.value !== undefined + ? InternalContract.DataTypeConverter.convertValueToNativeValue(internalDataValue.value, dataType) + : undefined, internalDataValue.formattedValue); + }; + return DataValueFactory; +}()); +exports.DataValueFactory = DataValueFactory; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/Deferred.js": +/*!************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/Deferred.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * A Promise wrapper class allowing for resolving/rejecting the Promise outside the context of its constructor. + * + * @export + * @class Deferred + * @template TResolve The type used to resolve the promise. + * @template TReject The type used to reject the promise. Defaults to any. + * @link https://stackoverflow.com/a/34637436 + */ +var Deferred = /** @class */ (function () { + /** + * Creates an instance of Deferred. + */ + function Deferred() { + var _this = this; + this._promise = new Promise(function (resolve, reject) { + _this._resolve = resolve; + _this._reject = reject; + }); + } + Object.defineProperty(Deferred.prototype, "promise", { + /** + * Gets the Promise. + * + * @readonly + * @type {Promise} + */ + get: function () { + return this._promise; + }, + enumerable: true, + configurable: true + }); + /** + * Resolves the wrapped Promise. + * + * @param {(TResolve | PromiseLike)} response The argument to be resolved by the Promise. + * @returns {*} {void} + */ + Deferred.prototype.resolve = function (response) { + if (!this._resolve) { + return; + } + this._resolve(response); + }; + /** + * + * + * @param {TReject} [reason] The reason why the Promise rejected. + * @returns {*} {void} + */ + Deferred.prototype.reject = function (reason) { + if (!this._reject) { + return; + } + this._reject(reason); + }; + return Deferred; +}()); +exports.Deferred = Deferred; +exports.UnregisterTimeoutInMilliseconds = 30000; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js": +/*!*****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/EnumConverter.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +/** + * This class converts from a source enum value to destination enum + * value given a mapping from source to destination when constructed. + * + * Note: This exact same class is defined in api-core. Given its small + * nature, it is not worth having in a separate project to share this between + * api-core and api-shared. If more utility functionality is added that is used by api-core + * and api-shared but has no other dependecies, a utiltity project might be merited, + * and this class could be moved. + */ +var EnumConverter = /** @class */ (function () { + function EnumConverter(_mappings, _defaultVal) { + this._mappings = _mappings; + this._defaultVal = _defaultVal; + } + EnumConverter.prototype.convert = function (enumVal, throwIfMissing) { + if (throwIfMissing === void 0) { throwIfMissing = ShouldThrow.Yes; } + if (this._mappings.hasOwnProperty(enumVal)) { + return this._mappings[enumVal]; + } + if (this._defaultVal !== undefined && throwIfMissing !== ShouldThrow.Yes) { + return this._defaultVal; + } + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "Enum Mapping not found for: " + enumVal); + }; + return EnumConverter; +}()); +exports.EnumConverter = EnumConverter; +var ShouldThrow; +(function (ShouldThrow) { + ShouldThrow["Yes"] = "yes"; + ShouldThrow["No"] = "no"; +})(ShouldThrow = exports.ShouldThrow || (exports.ShouldThrow = {})); + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js": +/*!****************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var Param_1 = __webpack_require__(/*! ./Param */ "../api-shared-js/lib/src/ApiShared/Utils/Param.js"); +/** + * This class is used to construct common errors throughout the external + * projects (api-shared, extensions-api, etc.). It has some duplication with + * the ErrorHelpers class in api-core, but is separate due to the need to throw + * an external TableauError vs. an InternalTableauError. + */ +var ErrorHelpers = /** @class */ (function () { + function ErrorHelpers() { + } + /** + * Throws with code InternalError. + * + * @param apiName name of api that was called. + */ + ErrorHelpers.apiNotImplemented = function (apiName) { + return new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, apiName + " API not yet implemented."); + }; + /** + * Throws an internal error if argument is null or undefined. + * + * @param argumentValue value to verify + * @param argumentName name of argument to verify + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyInternalValue = function (argumentValue, argumentName) { + if (argumentValue === null || argumentValue === undefined) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InternalError, argumentValue + " is invalid value for: " + argumentName); + } + }; + /** + * Throws an InvalidParameter error if argument is null or undefined. + * + * @param argumentValue value to verify + * @param argumentName name of argument to verify + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyParameter = function (argumentValue, argumentName) { + if (argumentValue === null || argumentValue === undefined) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + " is invalid value for parameter: " + argumentName); + } + }; + /** + * Throws an InvalidParameter error if argument is not the specified type. + * For objects, it just tests that it is an object + * + * @param argumentValue value to verify + * @param expectedType expected result of typeof + * @param argumentName name of argument to verify + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyParameterType = function (argumentValue, expectedType, argumentName) { + if (typeof argumentValue !== expectedType) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + " has invalid type for parameter: " + argumentName + "."); + } + }; + /** + * Throws an InvalidParameter error if argument is empty string, null or undefined. + * + * @param argumentValue value to verify + * @param argumentName name of argument to verify + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyStringParameter = function (argumentValue, argumentName) { + if (argumentValue === null || argumentValue === undefined || argumentValue === '') { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, argumentValue + " is invalid value for paramter: " + argumentName); + } + }; + /** + * Verifies passed value is a valid value for that enum. + * Throws an InvalidParameter error if the enum value is not valid. + * + * String enums are {string : string} dictionaries which are not reverse mappable + * This is an ugly workaround + * + * @param enumValue value to verify + * @param enumType enum to verify against + * @param enumName enum name for clear error message + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyEnumValue = function (enumValue, enumType, enumName) { + var isValid = false; + Object.keys(enumType).forEach(function (enumKey) { + if (enumType[enumKey] === enumValue.toString()) { + isValid = true; + } + }); + if (!isValid) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, enumValue + " is invalid value for enum: " + enumName + "."); + } + }; + /** + * Verifies passed value is between [min, max) ... min <= value < max + * Throws an InvalidParameter error if the value is not valid. + * + * + * @param value value to verify + * @param min value must be >= min + * @param max value must be < max + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyRange = function (value, min, max) { + var isValid = min <= value && value < max; + if (!isValid) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, value + " is invalid value for range: [" + min + ".." + max + ")"); + } + }; + /** + * Verifies the params min and max for applying range filter. + * Throws with error code InvalidParameter if range is invalid. + * + * @param min range min + * @param max range max + */ + /*tslint:disable-next-line */ + ErrorHelpers.verifyRangeParamType = function (min, max) { + if (!min && !max) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, at least one of min or max is required.'); + } + if (min && !Param_1.Param.isTypeNumber(min) && !Param_1.Param.isTypeDate(min)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, only Date and number are allowed for parameter min.'); + } + if (max && !Param_1.Param.isTypeNumber(max) && !Param_1.Param.isTypeDate(max)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, only Date and number are allowed for parameter max.'); + } + if (min && max && typeof min !== typeof max) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, 'Unexpected invalid param value, parameters min and max should be of the same type.'); + } + }; + /** + * Verifies that the zoneId is present in the current dashboard. + * Throws with error code InvalidParameter if either condition is false. + * + * @param dashboardZoneMap A map of zoneId's to the corresponding dashboard object. + * @param zoneID ZoneId to be validated + */ + ErrorHelpers.verifyZoneIsValid = function (dashboardZoneMap, zoneID) { + if (dashboardZoneMap.has(zoneID)) { + return; + } + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, "Unexpected invalid param value, Dashboard Object Id: " + zoneID + " is not present in dashboard."); + }; + /** + * Verifies that the zone is present and floating in the current dashboard. + * Throws with error code InvalidParameter if either condition is false. + * + * @param dashboardZoneMap A map of zoneId's to the corresponding dashboard object. + * @param zoneID ZoneId to be validated + */ + ErrorHelpers.verifyZoneIsValidAndFloating = function (dashboardZoneMap, zoneID) { + if (dashboardZoneMap.has(zoneID) && dashboardZoneMap.get(zoneID).isFloating) { + return; + } + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, "Unexpected invalid param value, Dashboard Object Id: " + zoneID + " is not present or is a fixed zone in the dashboard."); + }; + /** + * Verifies that width and height are > 0 for each DashboardObjectPositionAndSizeUpdate object. + * Throws with error code InvalidParameter if either condition is false. + * + * @param dashboardObjectPositionAndSizeUpdate DashboardObjectPositionAndSizeUpdate object for which width and height will be validated + */ + ErrorHelpers.verifyWidthAndHeightOfDashboardObjectPositionAndSizeUpdate = function (dashboardObjectPositionAndSizeUpdate) { + if (dashboardObjectPositionAndSizeUpdate.width < 0 || dashboardObjectPositionAndSizeUpdate.height < 0) { + throw new TableauError_1.TableauError(api_external_contract_js_1.SharedErrorCodes.InvalidParameter, "Unexpected invalid param value for dashboard object ID " + dashboardObjectPositionAndSizeUpdate.dashboardObjectID + ":" + + " negative widths and heights are not allowed."); + } + }; + return ErrorHelpers; +}()); +exports.ErrorHelpers = ErrorHelpers; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/Param.js": +/*!*********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/Param.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var ErrorHelpers_1 = __webpack_require__(/*! ./ErrorHelpers */ "../api-shared-js/lib/src/ApiShared/Utils/ErrorHelpers.js"); +var Param = /** @class */ (function () { + function Param() { + } + /** + * serializes the date into the format that the server expects. + * @param date the date to serialize + */ + Param.serializeDateForPlatform = function (date) { + var year = date.getUTCFullYear(); + var month = date.getUTCMonth() + 1; + var day = date.getUTCDate(); + var hh = date.getUTCHours(); + var mm = date.getUTCMinutes(); + var sec = date.getUTCSeconds(); + return year + "-" + month + "-" + day + " " + hh + ":" + mm + ":" + sec; + }; + Param.serializeBooleanForPlatform = function (bool) { + return bool ? 'true' : 'false'; + }; + Param.serializeNumberForPlatform = function (num) { + return num.toString(10); + }; + /** + * Verifies the input is a number + */ + /* tslint:disable-next-line:no-any */ + Param.isTypeNumber = function (input) { + return typeof input === 'number' || input instanceof Number; + }; + /** + * Verifies the input is a Date + */ + /* tslint:disable-next-line:no-any */ + Param.isTypeDate = function (input) { + return input instanceof Date; + }; + /* tslint:disable-next-line:no-any */ + Param.isTypeString = function (input) { + return typeof input === 'string' || input instanceof String; + }; + /* tslint:disable-next-line:no-any */ + Param.isTypeBool = function (input) { + return typeof input === 'boolean' || input instanceof Boolean; + }; + /** + * Determines if the input is null or undefined + */ + /* tslint:disable-next-line:no-any */ + Param.isNullOrUndefined = function (input) { + return input === null || input === undefined; + }; + /* tslint:disable-next-line:no-any */ + Param.serializeParameterValue = function (value) { + if (Param.isTypeNumber(value)) { + return Param.serializeNumberForPlatform(value); + } + else if (Param.isTypeDate(value)) { + return Param.serializeDateForPlatform(value); + } + else if (Param.isTypeBool(value)) { + return Param.serializeBooleanForPlatform(value); + } + else if (Param.isTypeString(value)) { + return value; + } + else { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "Unexpected invalid value for: " + value); + } + }; + /** + * Verifies that the parameter is already a Map, or converts an object to a Map. + * If the parameter is an object, we convert it to a Map using Object.entries. + * @throws if the parameter is not an object or Map + */ + // tslint:disable-next-line:no-any + Param.convertParameterToMap = function (param, paramName) { + ErrorHelpers_1.ErrorHelpers.verifyParameterType(param, 'object', paramName); + if (Array.isArray(param)) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InvalidParameter, "Expecting object or Map for: " + paramName + "."); + } + return param instanceof Map ? param : new Map(Object.entries(param)); + }; + /* tslint:disable-next-line:no-any */ + Param.tryParseNumber = function (value) { + if (Param.isNullOrUndefined(value)) { + return { success: false }; + } + if (Param.isTypeNumber(value)) { + return { parsed: value, success: true }; + } + var valueString = value.toString(); + if (valueString === 'NaN') { + // 'NaN' parses as NaN which is indistinguishable from a failed parse. + return { parsed: NaN, success: true }; + } + var parsed = parseFloat(valueString); + if (isNaN(parsed)) { + return { success: false }; + } + return { parsed: parsed, success: true }; + }; + return Param; +}()); +exports.Param = Param; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js": +/*!**************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/SheetUtils.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var SheetUtils = /** @class */ (function () { + function SheetUtils() { + } + // This is a direct port from SheetSize.cs - SheetSizeFactory + SheetUtils.getSheetSizeFromSizeConstraints = function (sizeConstraint) { + var minWidth = sizeConstraint.minWidth, minHeight = sizeConstraint.minHeight, maxWidth = sizeConstraint.maxWidth, maxHeight = sizeConstraint.maxHeight; + if (minHeight === 0 && minWidth === 0) { + if (maxHeight === 0 && maxWidth === 0) { + return { + behavior: Contract.SheetSizeBehavior.Automatic, + }; + } + return { + behavior: Contract.SheetSizeBehavior.AtMost, + maxSize: { width: maxWidth, height: maxHeight }, + }; + } + if (maxHeight === 0 && maxWidth === 0) { + return { + behavior: Contract.SheetSizeBehavior.AtLeast, + minSize: { width: minWidth, height: minHeight }, + }; + } + if (maxHeight === minHeight && maxWidth === minWidth && minWidth > 0) { + return { + behavior: Contract.SheetSizeBehavior.Exactly, + minSize: { width: minWidth, height: minHeight }, + maxSize: { width: minWidth, height: minHeight }, + }; + } + // 'Fit Width' for a DSD layout + var isDsdLayout = minWidth === 0 && maxWidth === 0; + return { + behavior: Contract.SheetSizeBehavior.Range, + minSize: { width: minWidth, height: minHeight }, + maxSize: { width: isDsdLayout ? 2147483647 : maxWidth, height: maxHeight }, + }; + }; + SheetUtils.createAutomaticSize = function () { + var behavior = Contract.SheetSizeBehavior.Automatic; + var minSize = { width: 0, height: 0 }; + var maxSize = { width: 0, height: 0 }; + return { behavior: behavior, minSize: minSize, maxSize: maxSize }; + }; + SheetUtils.getPublishedSheetInfoByName = function (name, sheetInfos) { + var sheetInfo = sheetInfos.find(function (sheet) { return sheet.name === name; }); + return sheetInfo; + }; + SheetUtils.getSheetTypeEnum = function (internalSheetType) { + var sheetType; + switch (internalSheetType) { + case api_internal_contract_js_1.SheetType.Worksheet: { + sheetType = Contract.SheetType.Worksheet; + break; + } + case api_internal_contract_js_1.SheetType.Dashboard: { + sheetType = Contract.SheetType.Dashboard; + break; + } + case api_internal_contract_js_1.SheetType.Story: { + sheetType = Contract.SheetType.Story; + break; + } + default: { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ServerError, 'Invalid SheetType'); + } + } + return sheetType; + }; + SheetUtils.isValidSheetSize = function (sizeObject) { + return sizeObject.behavior !== undefined; + }; + return SheetUtils; +}()); +exports.SheetUtils = SheetUtils; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/Utils/ShortLivedDeferred.js": +/*!**********************************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/Utils/ShortLivedDeferred.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Contract = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ../TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +var Deferred_1 = __webpack_require__(/*! ./Deferred */ "../api-shared-js/lib/src/ApiShared/Utils/Deferred.js"); +/** + * A Deferred wrapper class adding functionality to reject unresponsive promises after timeout + * + * this class handles two things: + + * 1. Adds timeout logic for deferred + * 2. It blocks multiple calls from executing at the same time. + * + * @export + * @class ShortLivedDeferred + * @template TResolve The type used to resolve the promise. + * @template TReject The type used to reject the promise. Defaults to any. + * + */ +var ShortLivedDeferred = /** @class */ (function () { + function ShortLivedDeferred(_timeoutInMilliseconds) { + if (_timeoutInMilliseconds === void 0) { _timeoutInMilliseconds = Deferred_1.UnregisterTimeoutInMilliseconds; } + this._timeoutInMilliseconds = _timeoutInMilliseconds; + } + ShortLivedDeferred.prototype.getNewPromiseOrThrowIfBusy = function () { + var _this = this; + if (this._deferred) { + throw new TableauError_1.TableauError(Contract.SharedErrorCodes.ApiExecutionError, 'This api cannot be executed till previous call is resolved.'); + } + this._deferred = new Deferred_1.Deferred(); + this._timeoutId = setTimeout(function () { + var error = new TableauError_1.TableauError(Contract.SharedErrorCodes.Timeout, "Api failed to complete in " + _this._timeoutInMilliseconds / 1000 + " seconds"); + _this.reject(error); + }, this._timeoutInMilliseconds); + return this._deferred.promise; + }; + ShortLivedDeferred.prototype.resolve = function (response) { + if (this._deferred) { + clearTimeout(this._timeoutId); + this._deferred.resolve(response); + this._deferred = undefined; + } + }; + ShortLivedDeferred.prototype.reject = function (error) { + if (this._deferred) { + clearTimeout(this._timeoutId); + this._deferred.reject(error); + this._deferred = undefined; + } + }; + return ShortLivedDeferred; +}()); +exports.ShortLivedDeferred = ShortLivedDeferred; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/ApiShared/VersionNumber.js": +/*!***********************************************************!*\ + !*** ../api-shared-js/lib/src/ApiShared/VersionNumber.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +var TableauError_1 = __webpack_require__(/*! ./TableauError */ "../api-shared-js/lib/src/ApiShared/TableauError.js"); +/** + * Represents the current version of the extensions, embedding + * and extensions-api-types library + */ +var VersionNumber = /** @class */ (function () { + // private constructor so everyone uses the singleton instance + // build numbers have this form: M.m.f-pre.N + function VersionNumber(versionString, isAlpha) { + var partStr = versionString.split('-'); + this.build = this.getBuildNumber(partStr[1]); + versionString = partStr[0]; + var parts = versionString.split('.').map(function (p) { return parseInt(p, 10); }); + if (parts.length !== 3) { + throw new TableauError_1.TableauError(api_external_contract_js_1.ErrorCodes.InternalError, "Invalid version number: " + versionString); + } + this.major = parts[0]; + this.minor = parts[1]; + this.fix = parts[2]; + this.isAlpha = isAlpha; + } + VersionNumber.prototype.getBuildNumber = function (preReleaseString) { + var noBuildNumber = -1; + if (!preReleaseString) { + return noBuildNumber; + } + // The preRelease string has this form: pre.N, but we don't depend on the actual string being 'pre' + var partStr = preReleaseString.split('.'); + return partStr[1] ? parseInt(partStr[1], 10) : noBuildNumber; + }; + Object.defineProperty(VersionNumber.prototype, "formattedValue", { + get: function () { + return this.major + "." + this.minor + "." + this.fix; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(VersionNumber.prototype, "fullFormattedValue", { + get: function () { + return this.major + "." + this.minor + "." + this.fix + "-pre." + this.build; + }, + enumerable: true, + configurable: true + }); + return VersionNumber; +}()); +exports.VersionNumber = VersionNumber; + + +/***/ }), + +/***/ "../api-shared-js/lib/src/VersionedExternalApiDispatcher.js": +/*!******************************************************************!*\ + !*** ../api-shared-js/lib/src/VersionedExternalApiDispatcher.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var api_internal_contract_js_1 = __webpack_require__(/*! @tableau/api-internal-contract-js */ "../api-internal-contract-js/lib/src/JsApiInternalContract.js"); +/** + * Implementation of the InternalApiDispatcher which supports upgrading and downgrading the input + * internal contract to the version that this module is built against + * + * @class VersionedExternalApiDispatcher + * @implements {InternalApiDispatcher} + */ +var VersionedExternalApiDispatcher = /** @class */ (function () { + /** + * Creates a new instance of the VersionedExternalApiDispatcher + * We have multiple version converting dispatchers that work together. + * If needed, the VersionedExternalApiDispatcher wraps either the InternalApiDispatcher (desktop) + * or the CrossFrameDispatcher (server). + * The Internal/CrossFrame dispatchers handle an updated platform with an older external library. + * (The CrossFrameDispatcher sends messages across the frame, and it is handled by the PresLayerHandler.) + * Meanwhile, the VersionedExternalApiDispatcher handles an updated external library with an older platform. + + * @param _apiDelegateDispatcher The delegate that does the actual work. + * @param platformVersionNumber The version of the internal contract which the platform module is using. + * This number will be used to figure out how to downgrade incoming commands and upgrade the results + */ + function VersionedExternalApiDispatcher(_apiDelegateDispatcher, platformVersionNumber) { + var _this = this; + this._apiDelegateDispatcher = _apiDelegateDispatcher; + this._versionConverter = api_internal_contract_js_1.CreateExternalCompatibleVersionConverter(api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION, platformVersionNumber); + this._notificationHandlers = []; + _apiDelegateDispatcher.registerNotificationHandler(function (notification) { + if (_this._notificationHandlers.length === 0) { + return; + } + var upgradedNotification = _this._versionConverter.upgradeNotification(notification); + _this._notificationHandlers.forEach(function (handler) { + handler(upgradedNotification); + }); + }); + } + VersionedExternalApiDispatcher.needsVersionConverter = function (platformVersion) { + // If our platform is less than external library version, then we need a converter + return api_internal_contract_js_1.VersionLessThan(platformVersion, api_internal_contract_js_1.INTERNAL_CONTRACT_VERSION); + }; + VersionedExternalApiDispatcher.prototype.execute = function (verb, parameters) { + var _this = this; + try { + var downgradeParameters = this._versionConverter.downgradeExecuteCall(verb, parameters); + return this._apiDelegateDispatcher.execute(downgradeParameters.verb, downgradeParameters.parameters).then(function (response) { + var upgradeResponse = _this._versionConverter.upgradeExecuteReturn(response, verb, parameters); + return upgradeResponse; + }); + } + catch (e) { + return Promise.reject(e); + } + }; + VersionedExternalApiDispatcher.prototype.registerNotificationHandler = function (handler) { + this._notificationHandlers.push(handler); + }; + VersionedExternalApiDispatcher.prototype.unregisterNotificationHandler = function (handler) { + this._notificationHandlers = this._notificationHandlers.filter(function (h) { return h !== handler; }); + }; + return VersionedExternalApiDispatcher; +}()); +exports.VersionedExternalApiDispatcher = VersionedExternalApiDispatcher; + + +/***/ }), + +/***/ "../api-internal-contract-js/lib/internal-contract-version.json": +/*!**********************************************************************!*\ + !*** ../api-internal-contract-js/lib/internal-contract-version.json ***! + \**********************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = JSON.parse('{"major":1,"minor":126,"fix":0}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/global */ +/******/ (() => { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +var exports = __webpack_exports__; +/*!**********************************!*\ + !*** ./lib/src/ExtensionsApi.js ***! + \**********************************/ + +/** + * This is your main. This is where you re-export everything you want to be publicly available. + * + * The build enforces that the file has the same name as the global variable that is exported. + */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +// The following polyfills are needed for IE11 +var api_shared_js_1 = __webpack_require__(/*! @tableau/api-shared-js */ "../api-shared-js/lib/src/ApiShared.js"); +__webpack_require__(/*! core-js/es/array/find */ "../../node_modules/core-js/es/array/find.js"); +__webpack_require__(/*! core-js/es/array/from */ "../../node_modules/core-js/es/array/from.js"); +__webpack_require__(/*! core-js/es/map */ "../../node_modules/core-js/es/map/index.js"); +__webpack_require__(/*! core-js/es/number/is-integer */ "../../node_modules/core-js/es/number/is-integer.js"); +__webpack_require__(/*! core-js/es/number/is-nan */ "../../node_modules/core-js/es/number/is-nan.js"); +__webpack_require__(/*! core-js/es/number/parse-float */ "../../node_modules/core-js/es/number/parse-float.js"); +__webpack_require__(/*! core-js/es/number/parse-int */ "../../node_modules/core-js/es/number/parse-int.js"); +__webpack_require__(/*! core-js/es/object/assign */ "../../node_modules/core-js/es/object/assign.js"); +__webpack_require__(/*! core-js/es/object/entries */ "../../node_modules/core-js/es/object/entries.js"); +__webpack_require__(/*! core-js/es/object/set-prototype-of */ "../../node_modules/core-js/es/object/set-prototype-of.js"); +__webpack_require__(/*! core-js/es/promise */ "../../node_modules/core-js/es/promise/index.js"); +// Due to the way we configured webpack, we should be exporting things which will be under +// a global variable called "tableau". Export everything we want to be visible under tableau +// from this file. +var ExtensionsImpl_1 = __webpack_require__(/*! ./ExtensionsApi/Impl/ExtensionsImpl */ "./lib/src/ExtensionsApi/Impl/ExtensionsImpl.js"); +var Extensions_1 = __webpack_require__(/*! ./ExtensionsApi/Namespaces/Extensions */ "./lib/src/ExtensionsApi/Namespaces/Extensions.js"); +var isAlpha = typeof VERSION_IS_ALPHA !== 'undefined' ? VERSION_IS_ALPHA : false; +api_shared_js_1.ApiVersion.SetVersionNumber( true ? "1.10.0-pre.29" : 0, isAlpha); +var extensionImpl = new ExtensionsImpl_1.ExtensionsImpl(); +exports.extensions = new Extensions_1.Extensions(extensionImpl); +// Export Enums +// These show up under the tableau object. I.e. tableau.ExtensionContext.Server +var api_external_contract_js_1 = __webpack_require__(/*! @tableau/api-external-contract-js */ "../api-external-contract-js/lib/src/ExternalContract.js"); +exports.AnalyticsObjectType = api_external_contract_js_1.AnalyticsObjectType; +exports.AnnotationType = api_external_contract_js_1.AnnotationType; +exports.ClassNameKey = api_external_contract_js_1.ClassNameKey; +exports.ColumnType = api_external_contract_js_1.ColumnType; +exports.DashboardLayoutChange = api_external_contract_js_1.DashboardLayoutChange; +exports.DashboardObjectType = api_external_contract_js_1.DashboardObjectType; +exports.DashboardObjectVisibilityType = api_external_contract_js_1.DashboardObjectVisibilityType; +exports.DataType = api_external_contract_js_1.DataType; +exports.DateRangeType = api_external_contract_js_1.DateRangeType; +exports.DialogStyle = api_external_contract_js_1.DialogStyle; +exports.EncodingType = api_external_contract_js_1.EncodingType; +exports.ErrorCodes = api_external_contract_js_1.ErrorCodes; +exports.ExtensionContext = api_external_contract_js_1.ExtensionContext; +exports.ExtensionMode = api_external_contract_js_1.ExtensionMode; +exports.FieldAggregationType = api_external_contract_js_1.FieldAggregationType; +exports.FieldRoleType = api_external_contract_js_1.FieldRoleType; +exports.FilterDomainType = api_external_contract_js_1.FilterDomainType; +exports.FilterNullOption = api_external_contract_js_1.FilterNullOption; +exports.FilterType = api_external_contract_js_1.FilterType; +exports.FilterUpdateType = api_external_contract_js_1.FilterUpdateType; +exports.HierarchicalLevelSelectionState = api_external_contract_js_1.HierarchicalLevelSelectionState; +exports.IncludeDataValuesOption = api_external_contract_js_1.IncludeDataValuesOption; +exports.MarkType = api_external_contract_js_1.MarkType; +exports.ParameterValueType = api_external_contract_js_1.ParameterValueType; +exports.PeriodType = api_external_contract_js_1.PeriodType; +exports.QuickTableCalcType = api_external_contract_js_1.QuickTableCalcType; +exports.ReplaySpeedType = api_external_contract_js_1.ReplaySpeedType; +exports.SelectionUpdateType = api_external_contract_js_1.SelectionUpdateType; +exports.SheetType = api_external_contract_js_1.SheetType; +exports.SortDirection = api_external_contract_js_1.SortDirection; +exports.TableauEventType = api_external_contract_js_1.TableauEventType; +exports.TrendLineModelType = api_external_contract_js_1.TrendLineModelType; +exports.VizImageEncodingType = api_external_contract_js_1.VizImageEncodingType; +exports.VizImagePaletteType = api_external_contract_js_1.VizImagePaletteType; +exports.VizImageSizeSettingAlignmentType = api_external_contract_js_1.VizImageSizeSettingAlignmentType; +exports.VizImageSizeSettingType = api_external_contract_js_1.VizImageSizeSettingType; +exports.VizImageSortDirectionType = api_external_contract_js_1.VizImageSortDirectionType; +exports.ZoneVisibilityType = api_external_contract_js_1.ZoneVisibilityType; + +})(); + +window.tableau = __webpack_exports__; +/******/ })() +; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGVhdS5leHRlbnNpb25zLjEuMTAuMC1wcmUuMjkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsMEZBQThCOztBQUV4RDs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNKQSxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNOQSxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLHdHQUFxQztBQUM3QyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLGtIQUEwQztBQUNsRCxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7Ozs7Ozs7Ozs7QUNIQSxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFB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bkIsZ0dBQTZCO0FBQzdCLHNEQUFRO0FBQ1IsZ0VBQWE7QUFDYiw0REFBVztBQUNYLDhEQUFZO0FBQ1osMERBQVU7QUFDVixzRUFBZ0I7QUFDaEIsZ0VBQWE7QUFDYiw4RUFBb0I7QUFDcEIsZ0VBQWE7QUFDYixzRUFBZ0I7QUFDaEIsc0VBQWdCO0FBQ2hCLDBEQUFVO0FBQ1Ysc0VBQWdCO0FBQ2hCLG9HQUErQjtBQUMvQixvRkFBdUI7QUFDdkIsc0RBQVE7QUFDUiwwRUFBa0I7QUFDbEIsMERBQVU7QUFDViwwRUFBa0I7QUFFbEIsb0VBQWU7QUFDZiw0RUFBbUI7QUFDbkIsd0RBQVM7QUFDVCxnRUFBYTtBQUNiLHNFQUFnQjtBQUNoQiwwRUFBa0I7QUFDbEIsOEVBQW9CO0FBQ3BCLDRFQUFtQjtBQUNuQixzR0FBZ0M7QUFDaEMsb0ZBQXVCO0FBQ3ZCLHdGQUF5QjtBQUN6QiwwRUFBa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2VzL2FycmF5L2ZpbmQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9lcy9hcnJheS9mcm9tLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXMvbWFwL2luZGV4LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXMvbnVtYmVyL2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9lcy9udW1iZXIvaXMtbmFuLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXMvbnVtYmVyL3BhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXMvbnVtYmVyL3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2VzL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9lcy9vYmplY3QvZW50cmllcy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2VzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXMvcHJvbWlzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsZWFyLWVycm9yLXN0YWNrLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudHJ5LXVuYmluZC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mcmVlemluZy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1pbnRlZ3JhbC1udW1iZXIuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtc3ltYm9sLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL251bWJlci1wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC10by1hcnJheS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wYXRoLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BlcmZvcm0uanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWdsb2JhbC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Rhc2suanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWFwLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuaXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmlzLW5hbi5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIucGFyc2UtaW50LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZW50cmllcy5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuYW55LmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy9ndWlkL2d1aWQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi8uLi9ub2RlX21vZHVsZXMvdXVpZC9pbmRleC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ybmctYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uLy4uL25vZGVfbW9kdWxlcy91dWlkL3YxLmpzIiwid2VicGFjazovL3RhYmxlYXUvLi4vLi4vbm9kZV9tb2R1bGVzL3V1aWQvdjQuanMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0V2ZW50cy9EYXNoYm9hcmRMYXlvdXRDaGFuZ2VkRXZlbnQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0V2ZW50cy9GaWx0ZXJDaGFuZ2VkRXZlbnQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0V2ZW50cy9NYXJrc1NlbGVjdGVkRXZlbnQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0V2ZW50cy9QYXJhbWV0ZXJDaGFuZ2VkRXZlbnQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0V2ZW50cy9UYWJsZWF1RXZlbnQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0V2ZW50cy9UYWJsZWF1U2hlZXRFdmVudC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvRXZlbnRzL1RhYmxlYXVXb3Jrc2hlZXRFdmVudC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvRXZlbnRzL1dvcmtib29rRm9ybWF0dGluZ0NoYW5nZWRFdmVudC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvSW1wbC9CZW50b25TYW5zRm9udE5hbWVDb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0ltcGwvQ29ubmVjdGVkU2VydmVyLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9JbXBsL0V4dGVuc2lvbldvcmtib29rSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvSW1wbC9FeHRlbnNpb25zSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvSW1wbC9MZWdhY3lJbnRlcm5hbEFwaURpc3BhdGNoZXJIb2xkZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0ltcGwvU2V0dGluZ3NJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9JbXBsL1RhYmxlYXVCb29rRm9udE5hbWVDb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL0ltcGwvVUlJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9Nb2RlbHMvRGFzaGJvYXJkLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9Nb2RlbHMvRGFzaGJvYXJkT2JqZWN0LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9Nb2RlbHMvUGFyYW1ldGVyLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9Nb2RlbHMvU2hlZXQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL01vZGVscy9Xb3JrYm9vay50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvTW9kZWxzL1dvcmtzaGVldC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvTmFtZXNwYWNlcy9EYXNoYm9hcmRDb250ZW50LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9OYW1lc3BhY2VzL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9OYW1lc3BhY2VzL0V4dGVuc2lvbnMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL05hbWVzcGFjZXMvU2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL05hbWVzcGFjZXMvVUkudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL05hbWVzcGFjZXMvV29ya2Jvb2tGb3JtYXR0aW5nRW52VXRpbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvU2VydmljZXMvSW1wbC9Jbml0aWFsaXphdGlvblNlcnZpY2VJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi9zcmMvRXh0ZW5zaW9uc0FwaS9TZXJ2aWNlcy9JbXBsL1NldHRpbmdzU2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL1NlcnZpY2VzL0ltcGwvVUlTZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4vc3JjL0V4dGVuc2lvbnNBcGkvU2VydmljZXMvUmVnaXN0ZXJBbGxFeHRlbnNpb25zU2VydmljZXMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeVV0aWwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMvc3JjL0VtYmVkZGluZ0FwaUV4dGVybmFsQ29udHJhY3QudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMvc3JjL0V4dGVuc2lvbnNBcGlFeHRlcm5hbENvbnRyYWN0LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzL3NyYy9FeHRlcm5hbENvbnRyYWN0LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzL3NyYy9FeHRlcm5hbENvbnRyYWN0L0VtYmVkZGluZy9Bc2tEYXRhSW50ZXJmYWNlcy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1leHRlcm5hbC1jb250cmFjdC1qcy9zcmMvRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvRW51bXMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMvc3JjL0V4dGVybmFsQ29udHJhY3QvRW1iZWRkaW5nL1ZpekludGVyZmFjZXMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMvc3JjL0V4dGVybmFsQ29udHJhY3QvRW1iZWRkaW5nL1dlYkNvbXBvbmVudEludGVyZmFjZXMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMvc3JjL0V4dGVybmFsQ29udHJhY3QvRXh0ZW5zaW9ucy9OYW1lc3BhY2VzL1RhYmxlYXUudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMvc3JjL0V4dGVybmFsQ29udHJhY3QvU2hhcmVkL0VudW1zLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzL3NyYy9FeHRlcm5hbENvbnRyYWN0L1NoYXJlZC9OYW1lc3BhY2VzL1RhYmxlYXUudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMvc3JjL1NoYXJlZEFwaUV4dGVybmFsQ29udHJhY3QudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL0pzQXBpSW50ZXJuYWxDb250cmFjdC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvY29udHJhY3QvRGF0YVR5cGVDb252ZXJ0ZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL2NvbnRyYWN0L0VudW1zLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy9jb250cmFjdC9Ob3RpZmljYXRpb25zLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy9jb250cmFjdC9QYXJhbWV0ZXJzLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy9jb250cmFjdC9WZXJicy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvaW50ZXJmYWNlL0Fza0RhdGFJbnRlcmZhY2UudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL2ludGVyZmFjZS9WcWxJbnRlcmZhY2UudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL21lc3NhZ2luZy9Dcm9zc0ZyYW1lTWVzc2VuZ2VyLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy9tZXNzYWdpbmcvQ3Jvc3NGcmFtZVByZXBhcmVkTWVzc2FnZS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvbWVzc2FnaW5nL01lc3NhZ2VUeXBlQ2hlY2tzLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy9tZXNzYWdpbmcvaW50ZXJmYWNlL01lc3NhZ2VUeXBlcy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvdmVyc2lvbmluZy9JZGVudGl0eVZlcnNpb25Db252ZXJ0ZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL3ZlcnNpb25pbmcvU3RhY2tpbmdWZXJzaW9uQ29udmVydGVyLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy92ZXJzaW9uaW5nL1ZlcnNpb25Db252ZXJ0ZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLWludGVybmFsLWNvbnRyYWN0LWpzL3NyYy92ZXJzaW9uaW5nL1ZlcnNpb25UcmFuc2xhdGlvbnMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL3ZlcnNpb25pbmcvZXh0ZXJuYWwvRXh0ZXJuYWxJZGVudGl0eVZlcnNpb25Db252ZXJ0ZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL3ZlcnNpb25pbmcvZXh0ZXJuYWwvRXh0ZXJuYWxTdGFja2luZ1ZlcnNpb25Db252ZXJ0ZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvc3JjL3ZlcnNpb25pbmcvZXh0ZXJuYWwvRXh0ZXJuYWxWZXJzaW9uQ29udmVydGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcy9zcmMvdmVyc2lvbmluZy9leHRlcm5hbC9FeHRlcm5hbFZlcnNpb25UcmFuc2xhdGlvbnMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvQXBpVmVyc2lvbi50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9Db25uZWN0aW9uU3VtbWFyeS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9Dcm9zc0ZyYW1lL0Nyb3NzRnJhbWVCb290c3RyYXAudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvQ3Jvc3NGcmFtZS9Dcm9zc0ZyYW1lRGlzcGF0Y2hlci50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9EYXRhU291cmNlLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0VudW1NYXBwaW5ncy9FeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3MudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvRW51bU1hcHBpbmdzL0ludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9FdmVudExpc3RlbmVyTWFuYWdlci50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9GaWVsZC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9JbXBsL0N1c3RvbVZpZXdJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0ltcGwvRGFzaGJvYXJkSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9JbXBsL0Rhc2hib2FyZE9iamVjdEltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvSW1wbC9EYXRhU291cmNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9JbXBsL0ZpZWxkSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9JbXBsL1BhcmFtZXRlckltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvSW1wbC9TaGVldEltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvSW1wbC9TaGVldEluZm9JbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0ltcGwvU2luZ2xlRXZlbnRNYW5hZ2VySW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9JbXBsL1N0b3J5SW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9JbXBsL1N0b3J5UG9pbnRJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0ltcGwvU3RvcnlQb2ludEluZm9JbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0ltcGwvV29ya2Jvb2tJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL0ltcGwvV29ya3NoZWV0SW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9Mb2dpY2FsVGFibGUudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvTW9kZWxzL0ZpbHRlck1vZGVscy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9Nb2RlbHMvR2V0RGF0YU1vZGVscy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9Nb2RlbHMvR2V0RGF0YVRhYmxlUmVhZGVyTW9kZWxzLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL01vZGVscy9TZWxlY3Rpb25Nb2RlbHMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvUG9pbnQudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvR2V0RGF0YVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvUmVnaXN0ZXJBbGxTaGFyZWRTZXJ2aWNlcy50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnkudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9BbmltYXRpb25TZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL0Fubm90YXRpb25TZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL0NsaWVudEluZm9TZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL0RhdGFTb3VyY2VTZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL0V4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL0ZpbHRlclNlcnZpY2VJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1NlcnZpY2VzL2ltcGwvR2V0RGF0YVNlcnZpY2VJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1NlcnZpY2VzL2ltcGwvTm90aWZpY2F0aW9uU2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9Ob3RpZmljYXRpb25TZXJ2aWNlSW1wbEJhc2UudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9QYXJhbWV0ZXJzU2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9TZWxlY3Rpb25TZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL1NlcnZpY2VJbXBsQmFzZS50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL1NpemVTZXJ2aWNlSW1wbC50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL1N0b3J5QWN0aXZhdGlvblNlcnZpY2VJbXBsLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1NlcnZpY2VzL2ltcGwvVml6U2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9ab25lU2VydmljZUltcGwudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvVGFibGVTdW1tYXJ5LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1RhYmxlYXVFcnJvci50cyIsIndlYnBhY2s6Ly90YWJsZWF1Ly4uL2FwaS1zaGFyZWQtanMvc3JjL0FwaVNoYXJlZC9VdGlscy9EYXRhVmFsdWVGYWN0b3J5LnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1V0aWxzL0RlZmVycmVkLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1V0aWxzL0VudW1Db252ZXJ0ZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvVXRpbHMvRXJyb3JIZWxwZXJzLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1V0aWxzL1BhcmFtLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1V0aWxzL1NoZWV0VXRpbHMudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9BcGlTaGFyZWQvVXRpbHMvU2hvcnRMaXZlZERlZmVycmVkLnRzIiwid2VicGFjazovL3RhYmxlYXUvLi4vYXBpLXNoYXJlZC1qcy9zcmMvQXBpU2hhcmVkL1ZlcnNpb25OdW1iZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uLi9hcGktc2hhcmVkLWpzL3NyYy9WZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXIudHMiLCJ3ZWJwYWNrOi8vdGFibGVhdS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly90YWJsZWF1L3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vdGFibGVhdS8uL3NyYy9FeHRlbnNpb25zQXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmluZCcpO1xudmFyIGVudHJ5VW5iaW5kID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXVuYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VW5iaW5kKCdBcnJheScsICdmaW5kJyk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mcm9tJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5mcm9tO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXAnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk1hcDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubnVtYmVyLmlzLWludGVnZXInKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk51bWJlci5pc0ludGVnZXI7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk51bWJlci5pc05hTjtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubnVtYmVyLnBhcnNlLWZsb2F0Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5OdW1iZXIucGFyc2VGbG9hdDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubnVtYmVyLnBhcnNlLWludCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTnVtYmVyLnBhcnNlSW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuYXNzaWduO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZW50cmllcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmVudHJpZXM7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFueScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBhcmd1bWVudCA9PSAnb2JqZWN0JyB8fCBpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxudmFyIFVOU0NPUEFCTEVTID0gd2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmlmIChBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoQXJyYXlQcm90b3R5cGUsIFVOU0NPUEFCTEVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBjcmVhdGUobnVsbClcbiAgfSk7XG59XG5cbi8vIGFkZCBhIGtleSB0byBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciBBcnJheSA9IGdsb2JhbC5BcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09IEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwidmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKFtdLnNsaWNlKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBBcnJheSA9IGdsb2JhbC5BcnJheTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsInZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICB9XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsInZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgVEVTVCA9IChmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBTdHJpbmcoRXJyb3IoYXJnKS5zdGFjayk7IH0pKCd6eGNhc2QnKTtcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xudmFyIElTX0ZJUkVGT1hfT1JfU0FGQVJJX1NUQUNLID0gL0BbXlxcbl0qXFxuLy50ZXN0KFRFU1QpICYmICEvenhjYXNkLy50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKHR5cGVvZiBzdGFjayAhPSAnc3RyaW5nJykgcmV0dXJuIHN0YWNrO1xuICBpZiAoSVNfVjhfT1JfQ0hBS1JBX1NUQUNLKSB7XG4gICAgd2hpbGUgKGRyb3BFbnRyaWVzLS0pIHN0YWNrID0gcmVwbGFjZShzdGFjaywgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZLCAnJyk7XG4gIH0gZWxzZSBpZiAoSVNfRklSRUZPWF9PUl9TQUZBUklfU1RBQ0spIHtcbiAgICByZXR1cm4gam9pbihhcnJheVNsaWNlKHNwbGl0KHN0YWNrLCAnXFxuJyksIGRyb3BFbnRyaWVzKSwgJ1xcbicpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3InKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZmFzdEtleTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpbmRleDogY3JlYXRlKG51bGwpLFxuICAgICAgICBmaXJzdDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWQsXG4gICAgICAgIHNpemU6IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCFERVNDUklQVE9SUykgdGhhdC5zaXplID0gMDtcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgdmFyIHByZXZpb3VzLCBpbmRleDtcbiAgICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0ID0gZW50cnkgPSB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogcHJldmlvdXMgPSBzdGF0ZS5sYXN0LFxuICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlZGVmaW5lQWxsKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuY2xlYXIoKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmNsZWFyXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZGF0YSA9IHN0YXRlLmluZGV4O1xuICAgICAgICB2YXIgZW50cnkgPSBzdGF0ZS5maXJzdDtcbiAgICAgICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnByZXZpb3VzKSBlbnRyeS5wcmV2aW91cyA9IGVudHJ5LnByZXZpb3VzLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5maXJzdCA9IHN0YXRlLmxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT0gZW50cnkpIHN0YXRlLmZpcnN0ID0gbmV4dDtcbiAgICAgICAgICBpZiAoc3RhdGUubGFzdCA9PSBlbnRyeSkgc3RhdGUubGFzdCA9IHByZXY7XG4gICAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplLS07XG4gICAgICAgICAgZWxzZSB0aGF0LnNpemUtLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5maXJzdCkge1xuICAgICAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlZGVmaW5lQWxsKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52YWx1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICAgICAgdmFyIGVudHJ5ID0gc3RhdGUubGFzdDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCFzdGF0ZS50YXJnZXQgfHwgIShzdGF0ZS5sYXN0ID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5zdGF0ZS5maXJzdCkpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBlbnRyeS5rZXksIGRvbmU6IGZhbHNlIH07XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHsgdmFsdWU6IGVudHJ5LnZhbHVlLCBkb25lOiBmYWxzZSB9O1xuICAgICAgcmV0dXJuIHsgdmFsdWU6IFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZG9uZTogZmFsc2UgfTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIENvbnN0cnVjdG9yID0gTmF0aXZlQ29uc3RydWN0b3I7XG4gIHZhciBleHBvcnRlZCA9IHt9O1xuXG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIHVuY3VycmllZE5hdGl2ZU1ldGhvZCA9IHVuY3VycnlUaGlzKE5hdGl2ZVByb3RvdHlwZVtLRVldKTtcbiAgICByZWRlZmluZShOYXRpdmVQcm90b3R5cGUsIEtFWSxcbiAgICAgIEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywgdmFsdWUgPT09IDAgPyAwIDogdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gOiBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IHVuZGVmaW5lZCA6IHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICB2YXIgUkVQTEFDRSA9IGlzRm9yY2VkKFxuICAgIENPTlNUUlVDVE9SX05BTUUsXG4gICAgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCkuZW50cmllcygpLm5leHQoKTtcbiAgICB9KSlcbiAgKTtcblxuICBpZiAoUkVQTEFDRSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQ29uc3RydWN0b3IgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgfSBlbHNlIGlmIChpc0ZvcmNlZChDT05TVFJVQ1RPUl9OQU1FLCB0cnVlKSkge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihpdGVyYWJsZSk7IH0pO1xuICAgIC8vIGZvciBlYXJseSBpbXBsZW1lbnRhdGlvbnMgLTAgYW5kICswIG5vdCB0aGUgc2FtZVxuICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVjggfiBDaHJvbWl1bSA0Mi0gZmFpbHMgb25seSB3aXRoIDUrIGVsZW1lbnRzXG4gICAgICB2YXIgJGluc3RhbmNlID0gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAoZHVtbXksIGl0ZXJhYmxlKSB7XG4gICAgICAgIGFuSW5zdGFuY2UoZHVtbXksIE5hdGl2ZVByb3RvdHlwZSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCksIGR1bW15LCBDb25zdHJ1Y3Rvcik7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE5hdGl2ZVByb3RvdHlwZTtcbiAgICAgIE5hdGl2ZVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgIH1cblxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cblxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuXG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBOYXRpdmVQcm90b3R5cGUuY2xlYXIpIGRlbGV0ZSBOYXRpdmVQcm90b3R5cGUuY2xlYXI7XG4gIH1cblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IENvbnN0cnVjdG9yICE9IE5hdGl2ZUNvbnN0cnVjdG9yIH0sIGV4cG9ydGVkKTtcblxuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn07XG4iLCJ2YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSkgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICB9XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHByb3BlcnR5S2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgcmVkZWZpbmUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIHJlZGVmaW5lKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIHJlZGVmaW5lKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9IDc7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnO1xuIiwidmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QodXNlckFnZW50KSAmJiBnbG9iYWwuUGViYmxlICE9PSB1bmRlZmluZWQ7XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09ICdwcm9jZXNzJztcbiIsInZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCduYXZpZ2F0b3InLCAndXNlckFnZW50JykgfHwgJyc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SLCBNRVRIT0QpIHtcbiAgcmV0dXJuIHVuY3VycnlUaGlzKGdsb2JhbFtDT05TVFJVQ1RPUl0ucHJvdG90eXBlW01FVEhPRF0pO1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gRXJyb3IoJ2EnKTtcbiAgaWYgKCEoJ3N0YWNrJyBpbiBlcnJvcikpIHJldHVybiB0cnVlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgNykpO1xuICByZXR1cm4gZXJyb3Iuc3RhY2sgIT09IDc7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5ub1RhcmdldEdldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSB8fCBzZXRHbG9iYWwoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5ub1RhcmdldEdldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCJ2YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBiaW5kID0gRnVuY3Rpb25Qcm90b3R5cGUuYmluZDtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChiaW5kID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsInZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG52YXIgYmluZCA9IHVuY3VycnlUaGlzKHVuY3VycnlUaGlzLmJpbmQpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0KSB7XG4gIGFDYWxsYWJsZShmbik7XG4gIHJldHVybiB0aGF0ID09PSB1bmRlZmluZWQgPyBmbiA6IGJpbmQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwidmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBjYWxsLmJpbmQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCJ2YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYmluZCA9IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQ7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgY2FsbEJpbmQgPSBiaW5kICYmIGJpbmQuYmluZChjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiaW5kID8gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiAmJiBjYWxsQmluZChjYWxsLCBmbik7XG59IDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiAmJiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pIDogZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCB1c2luZ0l0ZXJhdG9yKSB7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0SXRlcmF0b3JNZXRob2QoYXJndW1lbnQpIDogdXNpbmdJdGVyYXRvcjtcbiAgaWYgKGFDYWxsYWJsZShpdGVyYXRvck1ldGhvZCkpIHJldHVybiBhbk9iamVjdChjYWxsKGl0ZXJhdG9yTWV0aG9kLCBhcmd1bWVudCkpO1xuICB0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCJ2YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBmdW5jID09IG51bGwgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwidmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsInZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gdW5jdXJyeVRoaXMoe30uaGFzT3duUHJvcGVydHkpO1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdmFyIGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZTtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgIGFyZ3VtZW50cy5sZW5ndGggPT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aWVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9IDc7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogT2JqZWN0KGl0KTtcbn0gOiBPYmplY3Q7XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcblxudmFyIFJFUVVJUkVEID0gZmFsc2U7XG52YXIgTUVUQURBVEEgPSB1aWQoJ21ldGEnKTtcbnZhciBpZCA9IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgdmFyIHdtZ2V0ID0gdW5jdXJyeVRoaXMoc3RvcmUuZ2V0KTtcbiAgdmFyIHdtaGFzID0gdW5jdXJyeVRoaXMoc3RvcmUuaGFzKTtcbiAgdmFyIHdtc2V0ID0gdW5jdXJyeVRoaXMoc3RvcmUuc2V0KTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmICh3bWhhcyhzdG9yZSwgaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICB3bXNldChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldChzdG9yZSwgaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21oYXMoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09ICdBcnJheSc7XG59O1xuIiwiLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBlbXB0eSA9IFtdO1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgZW1wdHksIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgfSByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbn07XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYElzSW50ZWdyYWxOdW1iZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2ludGVncmFsbnVtYmVyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbnVtYmVyLWlzaW50ZWdlciAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE51bWJlci5pc0ludGVnZXIgfHwgZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xufTtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsIE9iamVjdChpdCkpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsInZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSBJdGVyYXRvclByb3RvdHlwZSA9PSB1bmRlZmluZWQgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICByZWRlZmluZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgcXVldWVNaWNyb3Rhc2sgPSBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgJiYgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yLnZhbHVlO1xuXG52YXIgZmx1c2gsIGhlYWQsIGxhc3QsIG5vdGlmeSwgdG9nZ2xlLCBub2RlLCBwcm9taXNlLCB0aGVuO1xuXG4vLyBtb2Rlcm4gZW5naW5lcyBoYXZlIHF1ZXVlTWljcm90YXNrIG1ldGhvZFxuaWYgKCFxdWV1ZU1pY3JvdGFzaykge1xuICBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICAvLyBhbHNvIGV4Y2VwdCBXZWJPUyBXZWJraXQgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg5OFxuICBpZiAoIUlTX0lPUyAmJiAhSVNfTk9ERSAmJiAhSVNfV0VCT1NfV0VCS0lUICYmIE11dGF0aW9uT2JzZXJ2ZXIgJiYgZG9jdW1lbnQpIHtcbiAgICB0b2dnbGUgPSB0cnVlO1xuICAgIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmICghSVNfSU9TX1BFQkJMRSAmJiBQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIC8vIHdvcmthcm91bmQgb2YgV2ViS2l0IH4gaU9TIFNhZmFyaSAxMC4xIGJ1Z1xuICAgIHByb21pc2UuY29uc3RydWN0b3IgPSBQcm9taXNlO1xuICAgIHRoZW4gPSBiaW5kKHByb21pc2UudGhlbiwgcHJvbWlzZSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gTm9kZS5qcyB3aXRob3V0IHByb21pc2VzXG4gIH0gZWxzZSBpZiAoSVNfTk9ERSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuYmluZChnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVldWVNaWNyb3Rhc2sgfHwgZnVuY3Rpb24gKGZuKSB7XG4gIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgaWYgKCFoZWFkKSB7XG4gICAgaGVhZCA9IHRhc2s7XG4gICAgbm90aWZ5KCk7XG4gIH0gbGFzdCA9IHRhc2s7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIHJldHVybiAhU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KGluc3BlY3RTb3VyY2UoV2Vha01hcCkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhQ2FsbGFibGUocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUNhbGxhYmxlKHJlamVjdCk7XG59O1xuXG4vLyBgTmV3UHJvbWlzZUNhcGFiaWxpdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uZXdwcm9taXNlY2FwYWJpbGl0eVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwidmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgJGRlZmF1bHQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID09PSB1bmRlZmluZWQgPyBhcmd1bWVudHMubGVuZ3RoIDwgMiA/ICcnIDogJGRlZmF1bHQgOiB0b1N0cmluZyhhcmd1bWVudCk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIG4kUGFyc2VGbG9hdCA9IGdsb2JhbC5wYXJzZUZsb2F0O1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgSVRFUkFUT1IgPSBTeW1ib2wgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZPUkNFRCA9IDEgLyBuJFBhcnNlRmxvYXQod2hpdGVzcGFjZXMgKyAnLTAnKSAhPT0gLUluZmluaXR5XG4gIC8vIE1TIEVkZ2UgMTgtIGJyb2tlbiB3aXRoIGJveGVkIHN5bWJvbHNcbiAgfHwgKElURVJBVE9SICYmICFmYWlscyhmdW5jdGlvbiAoKSB7IG4kUGFyc2VGbG9hdChPYmplY3QoSVRFUkFUT1IpKTsgfSkpO1xuXG4vLyBgcGFyc2VGbG9hdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlZmxvYXQtc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyaW5nKSB7XG4gIHZhciB0cmltbWVkU3RyaW5nID0gdHJpbSh0b1N0cmluZyhzdHJpbmcpKTtcbiAgdmFyIHJlc3VsdCA9IG4kUGFyc2VGbG9hdCh0cmltbWVkU3RyaW5nKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gMCAmJiBjaGFyQXQodHJpbW1lZFN0cmluZywgMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogbiRQYXJzZUZsb2F0O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciAkcGFyc2VJbnQgPSBnbG9iYWwucGFyc2VJbnQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgaGV4ID0gL15bKy1dPzB4L2k7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGhleC5leGVjKTtcbnZhciBGT1JDRUQgPSAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMDgnKSAhPT0gOCB8fCAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMHgxNicpICE9PSAyMlxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VJbnQoT2JqZWN0KElURVJBVE9SKSk7IH0pKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgpIHtcbiAgdmFyIFMgPSB0cmltKHRvU3RyaW5nKHN0cmluZykpO1xuICByZXR1cm4gJHBhcnNlSW50KFMsIChyYWRpeCA+Pj4gMCkgfHwgKGV4ZWMoaGV4LCBTKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSBzYWZlXG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQob2JqZWN0S2V5cyhTKSwgZ2V0T3duUHJvcGVydHlTeW1ib2xzKFMpKSA6IG9iamVjdEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwocHJvcGVydHlJc0VudW1lcmFibGUsIFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyIE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgc2V0dGVyID0gdW5jdXJyeVRoaXMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0KTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJykuZjtcblxudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gdW5jdXJyeVRoaXMoJHByb3BlcnR5SXNFbnVtZXJhYmxlKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBPYmplY3QueyBlbnRyaWVzLCB2YWx1ZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUT19FTlRSSUVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBvYmplY3RLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgcHJvcGVydHlJc0VudW1lcmFibGUoTywga2V5KSkge1xuICAgICAgICBwdXNoKHJlc3VsdCwgVE9fRU5UUklFUyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBPYmplY3QuZW50cmllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmVudHJpZXNcbiAgZW50cmllczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgT2JqZWN0LnZhbHVlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnZhbHVlc1xuICB2YWx1ZXM6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBvcHRpb25zKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG5cbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciB1bnNhZmUgPSBvcHRpb25zID8gISFvcHRpb25zLnVuc2FmZSA6IGZhbHNlO1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5lbnVtZXJhYmxlIDogZmFsc2U7XG4gIHZhciBub1RhcmdldEdldCA9IG9wdGlvbnMgPyAhIW9wdGlvbnMubm9UYXJnZXRHZXQgOiBmYWxzZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zICYmIG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICB2YXIgc3RhdGU7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkge1xuICAgIGlmIChTdHJpbmcobmFtZSkuc2xpY2UoMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgICAgbmFtZSA9ICdbJyArIFN0cmluZyhuYW1lKS5yZXBsYWNlKC9eU3ltYm9sXFwoKFteKV0qKVxcKS8sICckMScpICsgJ10nO1xuICAgIH1cbiAgICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCBuYW1lKTtcbiAgICB9XG4gICAgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gICAgaWYgKCFzdGF0ZS5zb3VyY2UpIHtcbiAgICAgIHN0YXRlLnNvdXJjZSA9IFRFTVBMQVRFLmpvaW4odHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICAgIH1cbiAgfVxuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBzZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCF1bnNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICB9IGVsc2UgaWYgKCFub1RhcmdldEdldCAmJiBPW2tleV0pIHtcbiAgICBzaW1wbGUgPSB0cnVlO1xuICB9XG4gIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCBrZXksIHZhbHVlKTtcbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQykge1xuICBpZiAoaXQgJiYgIWhhc093bihpdCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KGl0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgfVxufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgc2V0R2xvYmFsKFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwidmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMTkuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29uc3RydWN0b3IgOiBhQ29uc3RydWN0b3IoUyk7XG59O1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciB3aGl0ZXNwYWNlID0gJ1snICsgd2hpdGVzcGFjZXMgKyAnXSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgd2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyokJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbSwgdHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltTGVmdCwgdHJpbVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzKSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIHJ0cmltLCAnJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBzZXQgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG50cnkge1xuICAvLyBEZW5vIHRocm93cyBhIFJlZmVyZW5jZUVycm9yIG9uIGBsb2NhdGlvbmAgYWNjZXNzIHdpdGhvdXQgYC0tbG9jYXRpb25gIGZsYWdcbiAgbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbnZhciBydW4gPSBmdW5jdGlvbiAoaWQpIHtcbiAgaWYgKGhhc093bihxdWV1ZSwgaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcblxudmFyIHJ1bm5lciA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJ1bihpZCk7XG4gIH07XG59O1xuXG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIHBvc3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbC5wb3N0TWVzc2FnZShTdHJpbmcoaWQpLCBsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyBsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoaXNDYWxsYWJsZShmbikgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChJU19OT0RFKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIUlTX0lPUykge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0KTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoXG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICBpc0NhbGxhYmxlKGdsb2JhbC5wb3N0TWVzc2FnZSkgJiZcbiAgICAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiZcbiAgICBsb2NhdGlvbiAmJiBsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhwb3N0KVxuICApIHtcbiAgICBkZWZlciA9IHBvc3Q7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bihpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQocnVubmVyKGlkKSwgMCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGNsZWFyOiBjbGVhclxufTtcbiIsInZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCJ2YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBUb0ludGVnZXJPckluZmluaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbnRlZ2Vyb3JpbmZpbml0eVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIG51bWJlciA9ICthcmd1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBzYWZlXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogKG51bWJlciA+IDAgPyBmbG9vciA6IGNlaWwpKG51bWJlcik7XG59O1xuIiwidmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBPYmplY3QgPSBnbG9iYWwuT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCJ2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIHN5bWJvbEZvciA9IFN5bWJvbCAmJiBTeW1ib2xbJ2ZvciddO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpIHx8ICEoTkFUSVZFX1NZTUJPTCB8fCB0eXBlb2YgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID09ICdzdHJpbmcnKSkge1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICdTeW1ib2wuJyArIG5hbWU7XG4gICAgaWYgKE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSkpIHtcbiAgICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IFN5bWJvbFtuYW1lXTtcbiAgICB9IGVsc2UgaWYgKFVTRV9TWU1CT0xfQVNfVUlEICYmIHN5bWJvbEZvcikge1xuICAgICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gc3ltYm9sRm9yKGRlc2NyaXB0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gY3JlYXRlV2VsbEtub3duU3ltYm9sKGRlc2NyaXB0aW9uKTtcbiAgICB9XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCIvLyBhIHN0cmluZyBvZiBhbGwgdmFsaWQgdW5pY29kZSB3aGl0ZXNwYWNlc1xubW9kdWxlLmV4cG9ydHMgPSAnXFx1MDAwOVxcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUyMDAwXFx1MjAwMVxcdTIwMDInICtcbiAgJ1xcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xlYXItZXJyb3Itc3RhY2snKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xudmFyIEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlJyk7XG5cbnZhciBFcnJvciA9IGdsb2JhbC5FcnJvcjtcbnZhciBwdXNoID0gW10ucHVzaDtcblxudmFyICRBZ2dyZWdhdGVFcnJvciA9IGZ1bmN0aW9uIEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgbWVzc2FnZSAvKiAsIG9wdGlvbnMgKi8pIHtcbiAgdmFyIHRoYXQgPSBpc1Byb3RvdHlwZU9mKEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlLCB0aGlzKSA/IHRoaXMgOiBjcmVhdGUoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICB0aGF0ID0gc2V0UHJvdG90eXBlT2YobmV3IEVycm9yKHVuZGVmaW5lZCksIGdldFByb3RvdHlwZU9mKHRoYXQpKTtcbiAgfVxuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ21lc3NhZ2UnLCBub3JtYWxpemVTdHJpbmdBcmd1bWVudChtZXNzYWdlLCAnJykpO1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2sodGhhdC5zdGFjaywgMSkpO1xuICBpbnN0YWxsRXJyb3JDYXVzZSh0aGF0LCBvcHRpb25zKTtcbiAgdmFyIGVycm9yc0FycmF5ID0gW107XG4gIGl0ZXJhdGUoZXJyb3JzLCBwdXNoLCB7IHRoYXQ6IGVycm9yc0FycmF5IH0pO1xuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ2Vycm9ycycsIGVycm9yc0FycmF5KTtcbiAgcmV0dXJuIHRoYXQ7XG59O1xuXG5pZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKCRBZ2dyZWdhdGVFcnJvciwgRXJyb3IpO1xuZWxzZSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKCRBZ2dyZWdhdGVFcnJvciwgRXJyb3IpO1xuXG52YXIgQWdncmVnYXRlRXJyb3JQcm90b3R5cGUgPSAkQWdncmVnYXRlRXJyb3IucHJvdG90eXBlID0gY3JlYXRlKEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnQWdncmVnYXRlRXJyb3InKVxufSk7XG5cbi8vIGBBZ2dyZWdhdGVFcnJvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWdncmVnYXRlLWVycm9yLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlIH0sIHtcbiAgQWdncmVnYXRlRXJyb3I6ICRBZ2dyZWdhdGVFcnJvclxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maW5kO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbnZhciBGSU5EID0gJ2ZpbmQnO1xudmFyIFNLSVBTX0hPTEVTID0gdHJ1ZTtcblxuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChGSU5EIGluIFtdKSBBcnJheSgxKVtGSU5EXShmdW5jdGlvbiAoKSB7IFNLSVBTX0hPTEVTID0gZmFsc2U7IH0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU0tJUFNfSE9MRVMgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoRklORCk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzSW50ZWdyYWxOdW1iZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtaW50ZWdyYWwtbnVtYmVyJyk7XG5cbi8vIGBOdW1iZXIuaXNJbnRlZ2VyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmlzaW50ZWdlclxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwge1xuICBpc0ludGVnZXI6IGlzSW50ZWdyYWxOdW1iZXJcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBOdW1iZXIuaXNOYU5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNuYW5cbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQnKTtcblxuLy8gYE51bWJlci5wYXJzZUZsb2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLnBhcnNlRmxvYXRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1udW1iZXItcGFyc2VmbG9hdCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUsIGZvcmNlZDogTnVtYmVyLnBhcnNlRmxvYXQgIT0gcGFyc2VGbG9hdCB9LCB7XG4gIHBhcnNlRmxvYXQ6IHBhcnNlRmxvYXRcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgcGFyc2VJbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWludCcpO1xuXG4vLyBgTnVtYmVyLnBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLnBhcnNlaW50XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbnVtYmVyLXBhcnNlaW50IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBOdW1iZXIucGFyc2VJbnQgIT0gcGFyc2VJbnQgfSwge1xuICBwYXJzZUludDogcGFyc2VJbnRcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmFzc2lnbiAhPT0gYXNzaWduIH0sIHtcbiAgYXNzaWduOiBhc3NpZ25cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGVudHJpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLWFycmF5JykuZW50cmllcztcblxuLy8gYE9iamVjdC5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmVudHJpZXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhPKSB7XG4gICAgcmV0dXJuICRlbnRyaWVzKE8pO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2ZcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgc2V0UHJvdG90eXBlT2Y6IHNldFByb3RvdHlwZU9mXG59KTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgcmVkZWZpbmUoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgdG9TdHJpbmcsIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBOYXRpdmVQcm9taXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgTmF0aXZlUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXS5jYWxsKHsgdGhlbjogZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9IH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmZpbmFsbHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5maW5hbGx5XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IE5PTl9HRU5FUklDIH0sIHtcbiAgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgZ2V0QnVpbHRJbignUHJvbWlzZScpKTtcbiAgICB2YXIgaXNGdW5jdGlvbiA9IGlzQ2FsbGFibGUob25GaW5hbGx5KTtcbiAgICByZXR1cm4gdGhpcy50aGVuKFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHksXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5XG4gICAgKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2ZpbmFsbHlgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZSkpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gIT09IG1ldGhvZCkge1xuICAgIHJlZGVmaW5lKE5hdGl2ZVByb21pc2UucHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIE5hdGl2ZVByb21pc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXByb21pc2UtY29uc3RydWN0b3InKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lLWFsbCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19CUk9XU0VSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFBST01JU0UpO1xudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlICYmIE5hdGl2ZVByb21pc2UucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2U7XG52YXIgUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGU7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xuXG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWwuZGlzcGF0Y2hFdmVudCk7XG52YXIgTkFUSVZFX1JFSkVDVElPTl9FVkVOVCA9IGlzQ2FsbGFibGUoZ2xvYmFsLlByb21pc2VSZWplY3Rpb25FdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG52YXIgU1VCQ0xBU1NJTkcgPSBmYWxzZTtcblxudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbnZhciBGT1JDRUQgPSBpc0ZvcmNlZChQUk9NSVNFLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKFByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSNmaW5hbGx5IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKFY4X1ZFUlNJT04gPj0gNTEgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBEZXRlY3QgY29ycmVjdG5lc3Mgb2Ygc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSgxKTsgfSk7XG4gIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIH07XG4gIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgU1VCQ0xBU1NJTkcgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICByZXR1cm4gIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgSVNfQlJPV1NFUiAmJiAhTkFUSVZFX1JFSkVDVElPTl9FVkVOVDtcbn0pO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9IEZPUkNFRCB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKVsnY2F0Y2gnXShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gc3RhdGUucmVhY3Rpb25zO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBvayA9IHN0YXRlLnN0YXRlID09IEZVTEZJTExFRDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBjaGFpbltpbmRleCsrXTtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGNhbGwodGhlbiwgcmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdGF0ZS5yZWFjdGlvbnMgPSBbXTtcbiAgICBzdGF0ZS5ub3RpZmllZCA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhc3RhdGUucmVqZWN0aW9uKSBvblVuaGFuZGxlZChzdGF0ZSk7XG4gIH0pO1xufTtcblxudmFyIGRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAobmFtZSwgcHJvbWlzZSwgcmVhc29uKSB7XG4gIHZhciBldmVudCwgaGFuZGxlcjtcbiAgaWYgKERJU1BBVENIX0VWRU5UKSB7XG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldmVudC5wcm9taXNlID0gcHJvbWlzZTtcbiAgICBldmVudC5yZWFzb24gPSByZWFzb247XG4gICAgZXZlbnQuaW5pdEV2ZW50KG5hbWUsIGZhbHNlLCB0cnVlKTtcbiAgICBnbG9iYWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZWxzZSBldmVudCA9IHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiByZWFzb24gfTtcbiAgaWYgKCFOQVRJVkVfUkVKRUNUSU9OX0VWRU5UICYmIChoYW5kbGVyID0gZ2xvYmFsWydvbicgKyBuYW1lXSkpIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIElTX1VOSEFORExFRCA9IGlzVW5oYW5kbGVkKHN0YXRlKTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChJU19VTkhBTkRMRUQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChVTkhBTkRMRURfUkVKRUNUSU9OLCBwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBzdGF0ZS5yZWplY3Rpb24gPSBJU19OT0RFIHx8IGlzVW5oYW5kbGVkKHN0YXRlKSA/IFVOSEFORExFRCA6IEhBTkRMRUQ7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyByZXN1bHQudmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucmVqZWN0aW9uICE9PSBIQU5ETEVEICYmICFzdGF0ZS5wYXJlbnQ7XG59O1xuXG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4oc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChzdGF0ZS5mYWNhZGUgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICB2YXIgdGhlbiA9IGlzVGhlbmFibGUodmFsdWUpO1xuICAgIGlmICh0aGVuKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsKHRoZW4sIHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3Qod3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdCh7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIGFDYWxsYWJsZShleGVjdXRvcik7XG4gICAgY2FsbChJbnRlcm5hbCwgdGhpcyk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKSwgYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaW50ZXJuYWxSZWplY3Qoc3RhdGUsIGVycm9yKTtcbiAgICB9XG4gIH07XG4gIFByb21pc2VQcm90b3R5cGUgPSBQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IFtdLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZWRlZmluZUFsbChQcm9taXNlUHJvdG90eXBlLCB7XG4gICAgLy8gYFByb21pc2UucHJvdG90eXBlLnRoZW5gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgICAgdmFyIHJlYWN0aW9ucyA9IHN0YXRlLnJlYWN0aW9ucztcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gaXNDYWxsYWJsZShvbkZ1bGZpbGxlZCkgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gSVNfTk9ERSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgc3RhdGUucGFyZW50ID0gdHJ1ZTtcbiAgICAgIHJlYWN0aW9uc1tyZWFjdGlvbnMubGVuZ3RoXSA9IHJlYWN0aW9uO1xuICAgICAgaWYgKHN0YXRlLnN0YXRlICE9IFBFTkRJTkcpIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2UpICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZS50aGVuO1xuXG4gICAgaWYgKCFTVUJDTEFTU0lORykge1xuICAgICAgLy8gbWFrZSBgUHJvbWlzZSN0aGVuYCByZXR1cm4gYSBwb2x5ZmlsbGVkIGBQcm9taXNlYCBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGNhbGwobmF0aXZlVGhlbiwgdGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcblxuICAgICAgLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuICAgICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBgLmNvbnN0cnVjdG9yID09PSBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICAgIC8vIG1ha2UgYGluc3RhbmNlb2YgUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgc2V0UHJvdG90eXBlT2YoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuXG5Qcm9taXNlV3JhcHBlciA9IGdldEJ1aWx0SW4oUFJPTUlTRSk7XG5cbi8vIHN0YXRpY3NcbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlamVjdFxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICBjYWxsKGNhcGFiaWxpdHkucmVqZWN0LCB1bmRlZmluZWQsIHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZXNvbHZlXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShJU19QVVJFICYmIHRoaXMgPT09IFByb21pc2VXcmFwcGVyID8gUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICAvLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gYFByb21pc2UucmFjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZhbGlkYXRvciA9IG5ldyBSZWdFeHAoXCJeW2EtejAtOV17OH0tW2EtejAtOV17NH0tW2EtejAtOV17NH0tW2EtejAtOV17NH0tW2EtejAtOV17MTJ9JFwiLCBcImlcIik7XG5cbiAgZnVuY3Rpb24gZ2VuKGNvdW50KSB7XG4gICAgdmFyIG91dCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaT0wOyBpPGNvdW50OyBpKyspIHtcbiAgICAgIG91dCArPSAoKCgxK01hdGgucmFuZG9tKCkpKjB4MTAwMDApfDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBHdWlkKGd1aWQpIHtcbiAgICBpZiAoIWd1aWQpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50OyBgdmFsdWVgIGhhcyBubyB2YWx1ZS5cIik7XG4gICAgICBcbiAgICB0aGlzLnZhbHVlID0gR3VpZC5FTVBUWTtcbiAgICBcbiAgICBpZiAoZ3VpZCAmJiBndWlkIGluc3RhbmNlb2YgR3VpZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IGd1aWQudG9TdHJpbmcoKTtcblxuICAgIH0gZWxzZSBpZiAoZ3VpZCAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZ3VpZCkgPT09IFwiW29iamVjdCBTdHJpbmddXCIgJiYgR3VpZC5pc0d1aWQoZ3VpZCkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBndWlkO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgICAvLyBDb21wYXJpbmcgc3RyaW5nIGB2YWx1ZWAgYWdhaW5zdCBwcm92aWRlZCBgZ3VpZGAgd2lsbCBhdXRvLWNhbGxcbiAgICAgIC8vIHRvU3RyaW5nIG9uIGBndWlkYCBmb3IgY29tcGFyaXNvblxuICAgICAgcmV0dXJuIEd1aWQuaXNHdWlkKG90aGVyKSAmJiB0aGlzLnZhbHVlID09IG90aGVyO1xuICAgIH07XG5cbiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBHdWlkLkVNUFRZO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfTtcbiAgfTtcblxuICBHdWlkLkVNUFRZID0gXCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIjtcblxuICBHdWlkLmlzR3VpZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmICh2YWx1ZSBpbnN0YW5jZW9mIEd1aWQgfHwgdmFsaWRhdG9yLnRlc3QodmFsdWUudG9TdHJpbmcoKSkpO1xuICB9O1xuXG4gIEd1aWQuY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBHdWlkKFtnZW4oMiksIGdlbigxKSwgZ2VuKDEpLCBnZW4oMSksIGdlbigzKV0uam9pbihcIi1cIikpO1xuICB9O1xuXG4gIEd1aWQucmF3ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtnZW4oMiksIGdlbigxKSwgZ2VuKDEpLCBnZW4oMSksIGdlbigzKV0uam9pbihcIi1cIik7XG4gIH07XG5cbiAgaWYodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gR3VpZDtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnKSB7XG4gICAgd2luZG93Lkd1aWQgPSBHdWlkO1xuICB9XG59KSgpO1xuIiwidmFyIHYxID0gcmVxdWlyZSgnLi92MScpO1xudmFyIHY0ID0gcmVxdWlyZSgnLi92NCcpO1xuXG52YXIgdXVpZCA9IHY0O1xudXVpZC52MSA9IHYxO1xudXVpZC52NCA9IHY0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHV1aWQ7XG4iLCIvKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbnZhciBieXRlVG9IZXggPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4W2ldID0gKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1V1aWQoYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBvZmZzZXQgfHwgMDtcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcbiAgLy8gam9pbiB1c2VkIHRvIGZpeCBtZW1vcnkgaXNzdWUgY2F1c2VkIGJ5IGNvbmNhdGVuYXRpb246IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMxNzUjYzRcbiAgcmV0dXJuIChbXG4gICAgYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcbiAgICBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG4gICAgYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuICAgIGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcbiAgICBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG4gICAgYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcbiAgICBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLFxuICAgIGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV1cbiAgXSkuam9pbignJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnl0ZXNUb1V1aWQ7XG4iLCIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiAgSW4gdGhlXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXG4vLyBhbmQgaW5jb25zaXN0ZW50IHN1cHBvcnQgZm9yIHRoZSBgY3J5cHRvYCBBUEkuICBXZSBkbyB0aGUgYmVzdCB3ZSBjYW4gdmlhXG4vLyBmZWF0dXJlLWRldGVjdGlvblxuXG4vLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG9cbi8vIGltcGxlbWVudGF0aW9uLiBBbHNvLCBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gb24gSUUxMS5cbnZhciBnZXRSYW5kb21WYWx1ZXMgPSAodHlwZW9mKGNyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSk7XG5cbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcbiAgLy8gV0hBVFdHIGNyeXB0byBSTkcgLSBodHRwOi8vd2lraS53aGF0d2cub3JnL3dpa2kvQ3J5cHRvXG4gIHZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd2hhdHdnUk5HKCkge1xuICAgIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG4gICAgcmV0dXJuIHJuZHM4O1xuICB9O1xufSBlbHNlIHtcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxuICAvL1xuICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdXNlIE1hdGgucmFuZG9tKCkuICBJdCdzIGZhc3QsIGJ1dCBpcyBvZiB1bnNwZWNpZmllZFxuICAvLyBxdWFsaXR5LlxuICB2YXIgcm5kcyA9IG5ldyBBcnJheSgxNik7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCByOyBpIDwgMTY7IGkrKykge1xuICAgICAgaWYgKChpICYgMHgwMykgPT09IDApIHIgPSBNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwMDA7XG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xuICAgIH1cblxuICAgIHJldHVybiBybmRzO1xuICB9O1xufVxuIiwidmFyIHJuZyA9IHJlcXVpcmUoJy4vbGliL3JuZycpO1xudmFyIGJ5dGVzVG9VdWlkID0gcmVxdWlyZSgnLi9saWIvYnl0ZXNUb1V1aWQnKTtcblxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxuLy9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9MaW9zSy9VVUlELmpzXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxuXG52YXIgX25vZGVJZDtcbnZhciBfY2xvY2tzZXE7XG5cbi8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxudmFyIF9sYXN0TVNlY3MgPSAwO1xudmFyIF9sYXN0TlNlY3MgPSAwO1xuXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkIGZvciBBUEkgZGV0YWlsc1xuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIHZhciBiID0gYnVmIHx8IFtdO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgbm9kZSA9IG9wdGlvbnMubm9kZSB8fCBfbm9kZUlkO1xuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxO1xuXG4gIC8vIG5vZGUgYW5kIGNsb2Nrc2VxIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gcmFuZG9tIHZhbHVlcyBpZiB0aGV5J3JlIG5vdFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcbiAgLy8gc3lzdGVtIGVudHJvcHkuICBTZWUgIzE4OVxuICBpZiAobm9kZSA9PSBudWxsIHx8IGNsb2Nrc2VxID09IG51bGwpIHtcbiAgICB2YXIgc2VlZEJ5dGVzID0gcm5nKCk7XG4gICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuNSwgY3JlYXRlIGFuZCA0OC1iaXQgbm9kZSBpZCwgKDQ3IHJhbmRvbSBiaXRzICsgbXVsdGljYXN0IGJpdCA9IDEpXG4gICAgICBub2RlID0gX25vZGVJZCA9IFtcbiAgICAgICAgc2VlZEJ5dGVzWzBdIHwgMHgwMSxcbiAgICAgICAgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1cbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVVSUQgdGltZXN0YW1wcyBhcmUgMTAwIG5hbm8tc2Vjb25kIHVuaXRzIHNpbmNlIHRoZSBHcmVnb3JpYW4gZXBvY2gsXG4gIC8vICgxNTgyLTEwLTE1IDAwOjAwKS4gIEpTTnVtYmVycyBhcmVuJ3QgcHJlY2lzZSBlbm91Z2ggZm9yIHRoaXMsIHNvXG4gIC8vIHRpbWUgaXMgaGFuZGxlZCBpbnRlcm5hbGx5IGFzICdtc2VjcycgKGludGVnZXIgbWlsbGlzZWNvbmRzKSBhbmQgJ25zZWNzJ1xuICAvLyAoMTAwLW5hbm9zZWNvbmRzIG9mZnNldCBmcm9tIG1zZWNzKSBzaW5jZSB1bml4IGVwb2NoLCAxOTcwLTAxLTAxIDAwOjAwLlxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cbiAgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuICB2YXIgbnNlY3MgPSBvcHRpb25zLm5zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5zZWNzIDogX2xhc3ROU2VjcyArIDE7XG5cbiAgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuICB2YXIgZHQgPSAobXNlY3MgLSBfbGFzdE1TZWNzKSArIChuc2VjcyAtIF9sYXN0TlNlY3MpLzEwMDAwO1xuXG4gIC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cbiAgaWYgKGR0IDwgMCAmJiBvcHRpb25zLmNsb2Nrc2VxID09PSB1bmRlZmluZWQpIHtcbiAgICBjbG9ja3NlcSA9IGNsb2Nrc2VxICsgMSAmIDB4M2ZmZjtcbiAgfVxuXG4gIC8vIFJlc2V0IG5zZWNzIGlmIGNsb2NrIHJlZ3Jlc3NlcyAobmV3IGNsb2Nrc2VxKSBvciB3ZSd2ZSBtb3ZlZCBvbnRvIGEgbmV3XG4gIC8vIHRpbWUgaW50ZXJ2YWxcbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH1cblxuICAvLyBQZXIgNC4yLjEuMiBUaHJvdyBlcnJvciBpZiB0b28gbWFueSB1dWlkcyBhcmUgcmVxdWVzdGVkXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXVpZC52MSgpOiBDYW5cXCd0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYycpO1xuICB9XG5cbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xuICBfbGFzdE5TZWNzID0gbnNlY3M7XG4gIF9jbG9ja3NlcSA9IGNsb2Nrc2VxO1xuXG4gIC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDtcblxuICAvLyBgdGltZV9sb3dgXG4gIHZhciB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7XG5cbiAgLy8gYHRpbWVfbWlkYFxuICB2YXIgdG1oID0gKG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCkgJiAweGZmZmZmZmY7XG4gIGJbaSsrXSA9IHRtaCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7XG5cbiAgLy8gYHRpbWVfaGlnaF9hbmRfdmVyc2lvbmBcbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjtcblxuICAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwO1xuXG4gIC8vIGBjbG9ja19zZXFfbG93YFxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7XG5cbiAgLy8gYG5vZGVgXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiA/IGJ1ZiA6IGJ5dGVzVG9VdWlkKGIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHYxO1xuIiwidmFyIHJuZyA9IHJlcXVpcmUoJy4vbGliL3JuZycpO1xudmFyIGJ5dGVzVG9VdWlkID0gcmVxdWlyZSgnLi9saWIvYnl0ZXNUb1V1aWQnKTtcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG5cbiAgaWYgKHR5cGVvZihvcHRpb25zKSA9PSAnc3RyaW5nJykge1xuICAgIGJ1ZiA9IG9wdGlvbnMgPT09ICdiaW5hcnknID8gbmV3IEFycmF5KDE2KSA6IG51bGw7XG4gICAgb3B0aW9ucyA9IG51bGw7XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgcm5nKSgpO1xuXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcbiAgcm5kc1s2XSA9IChybmRzWzZdICYgMHgwZikgfCAweDQwO1xuICBybmRzWzhdID0gKHJuZHNbOF0gJiAweDNmKSB8IDB4ODA7XG5cbiAgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG4gIGlmIChidWYpIHtcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcbiAgICAgIGJ1ZltpICsgaWldID0gcm5kc1tpaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBieXRlc1RvVXVpZChybmRzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2NDtcbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXZlbnQgfSBmcm9tICcuL1RhYmxlYXVFdmVudCc7XG5cbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRMYXlvdXRDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBUYWJsZWF1RXZlbnQgaW1wbGVtZW50cyBDb250cmFjdC5EYXNoYm9hcmRMYXlvdXRDaGFuZ2VkRXZlbnQge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIF9kYXNoYm9hcmRMYXlvdXRDaGFuZ2VEZXRhaWxzOiBDb250cmFjdC5EYXNoYm9hcmRMYXlvdXRDaGFuZ2VEZXRhaWxzKSB7XG4gICAgc3VwZXIoQ29udHJhY3QuVGFibGVhdUV2ZW50VHlwZS5EYXNoYm9hcmRMYXlvdXRDaGFuZ2VkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGFzaGJvYXJkTGF5b3V0Q2hhbmdlRGV0YWlscygpOiBDb250cmFjdC5EYXNoYm9hcmRMYXlvdXRDaGFuZ2VEZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkTGF5b3V0Q2hhbmdlRGV0YWlscztcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEVycm9yQ29kZXMsIFRhYmxlYXVFdmVudFR5cGUgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1V29ya3NoZWV0RXZlbnQgfSBmcm9tICcuL1RhYmxlYXVXb3Jrc2hlZXRFdmVudCc7XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBUYWJsZWF1V29ya3NoZWV0RXZlbnQgaW1wbGVtZW50cyBDb250cmFjdC5GaWx0ZXJDaGFuZ2VkRXZlbnQge1xuICBwdWJsaWMgY29uc3RydWN0b3Iod29ya3NoZWV0OiBDb250cmFjdC5FeHRlbnNpb25Xb3Jrc2hlZXQsIHByaXZhdGUgX2ZpZWxkTmFtZTogc3RyaW5nLCBwcml2YXRlIF9maWVsZElkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoVGFibGVhdUV2ZW50VHlwZS5GaWx0ZXJDaGFuZ2VkLCB3b3Jrc2hlZXQpO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWVsZE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGROYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWVsZElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmlsdGVyQXN5bmMoKTogUHJvbWlzZTxDb250cmFjdC5GaWx0ZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0LmdldEZpbHRlcnNBc3luYygpLnRoZW48Q29udHJhY3QuRmlsdGVyPigoZmlsdGVycykgPT4ge1xuICAgICAgLy8gVE9ETzogRmlsdGVyaW5nIG9mIHRoZSBmaWx0ZXJzIHNob3VsZCBldmVudHVhbGx5IGJlIGRvbmUgcGxhdGZvcm0gc2lkZS5cbiAgICAgIGNvbnN0IGV2ZW50ZWRGaWx0ZXIgPSB0aGlzLmZpZWxkSWRcbiAgICAgICAgPyBmaWx0ZXJzLmZpbmQoKGZpbHRlcikgPT4gZmlsdGVyLmZpZWxkSWQgPT09IHRoaXMuZmllbGRJZCwgdGhpcylcbiAgICAgICAgOiBmaWx0ZXJzLmZpbmQoKGZpbHRlcikgPT4gZmlsdGVyLmZpZWxkTmFtZSA9PT0gdGhpcy5maWVsZE5hbWUsIHRoaXMpO1xuXG4gICAgICBpZiAoIWV2ZW50ZWRGaWx0ZXIpIHtcbiAgICAgICAgLy8gV2Ugc2hvdWxkbid0IGhpdCB0aGlzIHVubGVzcyB0aGUgZmlsdGVyIHdhcyByZW1vdmVkIGZyb20gdGhlIHdvcmtzaGVldFxuICAgICAgICAvLyBhZnRlciB0aGUgZXZlbnQgd2FzIHJhaXNlZC5cbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLk1pc3NpbmdGaWx0ZXIsIGBjYW5ub3QgZmluZCBmaWx0ZXI6ICR7dGhpcy5fZmllbGROYW1lfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbnRlZEZpbHRlcjtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFdmVudFR5cGUgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdVdvcmtzaGVldEV2ZW50IH0gZnJvbSAnLi9UYWJsZWF1V29ya3NoZWV0RXZlbnQnO1xuXG5leHBvcnQgY2xhc3MgTWFya3NTZWxlY3RlZEV2ZW50IGV4dGVuZHMgVGFibGVhdVdvcmtzaGVldEV2ZW50IGltcGxlbWVudHMgQ29udHJhY3QuTWFya3NTZWxlY3RlZEV2ZW50IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHdvcmtzaGVldDogQ29udHJhY3QuRXh0ZW5zaW9uV29ya3NoZWV0KSB7XG4gICAgc3VwZXIoVGFibGVhdUV2ZW50VHlwZS5NYXJrU2VsZWN0aW9uQ2hhbmdlZCwgd29ya3NoZWV0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXJrc0FzeW5jKCk6IFByb21pc2U8Q29udHJhY3QuTWFya3NDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMud29ya3NoZWV0LmdldFNlbGVjdGVkTWFya3NBc3luYygpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlcywgVGFibGVhdUV2ZW50VHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlUmVnaXN0cnksIFBhcmFtZXRlcnNTZXJ2aWNlLCBTZXJ2aWNlTmFtZXMsIFRhYmxlYXVFcnJvciB9IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgUGFyYW1ldGVyIH0gZnJvbSAnLi4vTW9kZWxzL1BhcmFtZXRlcic7XG5pbXBvcnQgeyBFeHRlbnNpb25zUmVnaXN0cnlJZCB9IGZyb20gJy4uL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeVV0aWwnO1xuaW1wb3J0IHsgVGFibGVhdVNoZWV0RXZlbnQgfSBmcm9tICcuL1RhYmxlYXVTaGVldEV2ZW50JztcblxuZXhwb3J0IGNsYXNzIFBhcmFtZXRlckNoYW5nZWRFdmVudCBleHRlbmRzIFRhYmxlYXVTaGVldEV2ZW50IGltcGxlbWVudHMgQ29udHJhY3QuUGFyYW1ldGVyQ2hhbmdlZEV2ZW50IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2dsb2JhbEZpZWxkTmFtZTogc3RyaW5nLCBzaGVldDogQ29udHJhY3QuRXh0ZW5zaW9uU2hlZXQpIHtcbiAgICBzdXBlcihUYWJsZWF1RXZlbnRUeXBlLlBhcmFtZXRlckNoYW5nZWQsIHNoZWV0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJhbWV0ZXJBc3luYygpOiBQcm9taXNlPENvbnRyYWN0LlBhcmFtZXRlcj4ge1xuICAgIC8vIENhbGwgZG93biB0byBvdXIgc2VydmljZSB0byBnZXQgdGhlIHBhcmFtZXRlciBiYWNrIHZpYSBpdHMgZmllbGQgbmFtZVxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFBhcmFtZXRlcnNTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuUGFyYW1ldGVycyk7XG4gICAgcmV0dXJuIHNlcnZpY2UuZmluZFBhcmFtZXRlckJ5R2xvYmFsRmllbGROYW1lQXN5bmModGhpcy5fZ2xvYmFsRmllbGROYW1lKS50aGVuKChwYXJhbWV0ZXJJbXBsKSA9PiB7XG4gICAgICBpZiAocGFyYW1ldGVySW1wbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5NaXNzaW5nUGFyYW1ldGVyLCBgQ2Fubm90IGZpbmQgcGFyYW1ldGVyOiAke3RoaXMuX2dsb2JhbEZpZWxkTmFtZX1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXIocGFyYW1ldGVySW1wbCwgdGhpcy5zaGVldCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXZlbnRUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcblxuZXhwb3J0IGNsYXNzIFRhYmxlYXVFdmVudCBpbXBsZW1lbnRzIENvbnRyYWN0LlRhYmxlYXVFdmVudCB7XG4gIHByaXZhdGUgX3R5cGU6IFRhYmxlYXVFdmVudFR5cGU7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHR5cGU6IFRhYmxlYXVFdmVudFR5cGUpIHtcbiAgICB0aGlzLl90eXBlID0gdHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBUYWJsZWF1RXZlbnRUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFdmVudFR5cGUgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUV2ZW50IH0gZnJvbSAnLi9UYWJsZWF1RXZlbnQnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVhdVNoZWV0RXZlbnQgZXh0ZW5kcyBUYWJsZWF1RXZlbnQgaW1wbGVtZW50cyBDb250cmFjdC5UYWJsZWF1U2hlZXRFdmVudCB7XG4gIHByaXZhdGUgX3NoZWV0OiBDb250cmFjdC5FeHRlbnNpb25TaGVldDtcblxuICBwdWJsaWMgZ2V0IHNoZWV0KCk6IENvbnRyYWN0LkV4dGVuc2lvblNoZWV0IHtcbiAgICByZXR1cm4gdGhpcy5fc2hlZXQ7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IodHlwZTogVGFibGVhdUV2ZW50VHlwZSwgc2hlZXQ6IENvbnRyYWN0LkV4dGVuc2lvblNoZWV0KSB7XG4gICAgc3VwZXIodHlwZSk7XG5cbiAgICB0aGlzLl9zaGVldCA9IHNoZWV0O1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUV2ZW50VHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1U2hlZXRFdmVudCB9IGZyb20gJy4vVGFibGVhdVNoZWV0RXZlbnQnO1xuXG5leHBvcnQgY2xhc3MgVGFibGVhdVdvcmtzaGVldEV2ZW50IGV4dGVuZHMgVGFibGVhdVNoZWV0RXZlbnQgaW1wbGVtZW50cyBDb250cmFjdC5UYWJsZWF1V29ya3NoZWV0RXZlbnQge1xuICBwdWJsaWMgZ2V0IHdvcmtzaGVldCgpOiBDb250cmFjdC5FeHRlbnNpb25Xb3Jrc2hlZXQge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXQ7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IodHlwZTogVGFibGVhdUV2ZW50VHlwZSwgcHJvdGVjdGVkIF93b3Jrc2hlZXQ6IENvbnRyYWN0LkV4dGVuc2lvbldvcmtzaGVldCkge1xuICAgIHN1cGVyKHR5cGUsIF93b3Jrc2hlZXQpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUV2ZW50IH0gZnJvbSAnLi9UYWJsZWF1RXZlbnQnO1xuXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZEV2ZW50IGV4dGVuZHMgVGFibGVhdUV2ZW50IGltcGxlbWVudHMgQ29udHJhY3QuV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZEV2ZW50IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Zvcm1hdHRpbmc6IENvbnRyYWN0Lldvcmtib29rRm9ybWF0dGluZykge1xuICAgIHN1cGVyKENvbnRyYWN0LlRhYmxlYXVFdmVudFR5cGUuV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvcm1hdHRpbmcoKTogQ29udHJhY3QuV29ya2Jvb2tGb3JtYXR0aW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGluZztcbiAgfVxufVxuIiwiaW1wb3J0IHsgTW9kZWwgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuXG5leHBvcnQgY29uc3QgQmVudG9uU2Fuc0ZvbnRGYW1pbHlOYW1lID0gJ0JlbnRvbiBTYW5zJztcbmV4cG9ydCBjb25zdCBCZW50b25TYW5zTG93RFBJRm9udEZhbWlseU5hbWUgPSAnQmVudG9uIFNhbnMgTG93LURQSSc7XG5cbmV4cG9ydCBjb25zdCBCZW50b25TYW5zQm9va0ZvbnRGYWNlTmFtZSA9ICdCZW50b24gU2FucyBCb29rJztcbmV4cG9ydCBjb25zdCBCZW50b25TYW5zQm9va0l0YWxpY0ZvbnRGYWNlTmFtZSA9ICdCZW50b24gU2FucyBCb29rIEl0YWxpYyc7XG5leHBvcnQgY29uc3QgQmVudG9uU2Fuc1NlbWlEZW1pRm9udEZhY2VOYW1lID0gJ0JlbnRvbiBTYW5zIFNlbWlEZW1pJztcbmV4cG9ydCBjb25zdCBCZW50b25TYW5zU2VtaURlbWlJdGFsaWNGb250RmFjZU5hbWUgPSAnQmVudG9uIFNhbnMgU2VtaURlbWkgSXRhbGljJztcbmV4cG9ydCBjb25zdCBCZW50b25TYW5zTGlnaHRGb250RmFjZU5hbWUgPSAnQmVudG9uIFNhbnMgTGlnaHQnO1xuZXhwb3J0IGNvbnN0IEJlbnRvblNhbnNNZWRpdW1Gb250RmFjZU5hbWUgPSAnQmVudG9uIFNhbnMgTWVkaXVtJztcblxuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZEJlbnRvblNhbnNGb250RmFjZXM6IE1vZGVsW10gPSBbXG4gIEJlbnRvblNhbnNCb29rRm9udEZhY2VOYW1lLFxuICBCZW50b25TYW5zQm9va0l0YWxpY0ZvbnRGYWNlTmFtZSxcbiAgQmVudG9uU2Fuc1NlbWlEZW1pRm9udEZhY2VOYW1lLFxuICBCZW50b25TYW5zU2VtaURlbWlJdGFsaWNGb250RmFjZU5hbWUsXG4gIEJlbnRvblNhbnNMaWdodEZvbnRGYWNlTmFtZSxcbiAgQmVudG9uU2Fuc01lZGl1bUZvbnRGYWNlTmFtZSxcbl07XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuXG5leHBvcnQgY2xhc3MgQ29ubmVjdGVkU2VydmVyIGltcGxlbWVudHMgQ29udHJhY3QuQ29ubmVjdGVkU2VydmVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfdXNlcklkPzogc3RyaW5nLCBwcm90ZWN0ZWQgX3NpdGVJZD86IHN0cmluZywgcHJvdGVjdGVkIF93b3JrYm9va0lkPzogc3RyaW5nKSB7fVxuXG4gIHB1YmxpYyBnZXQgdXNlcklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXJJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2l0ZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NpdGVJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgd29ya2Jvb2tJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl93b3JrYm9va0lkO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGF0YVNjaGVtYSwgRGF0YVNvdXJjZSBhcyBEYXRhU291cmNlSW5mbyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlUmVnaXN0cnksIERhdGFTb3VyY2UsIERhdGFTb3VyY2VJbXBsLCBEYXRhU291cmNlU2VydmljZSwgU2VydmljZU5hbWVzLCBXb3JrYm9va0ltcGwgfSBmcm9tICdAdGFibGVhdS9hcGktc2hhcmVkLWpzJztcbmltcG9ydCB7IEV4dGVuc2lvbnNSZWdpc3RyeUlkIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5VXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBFeHRlbnNpb25Xb3JrYm9va0ltcGwgZXh0ZW5kcyBXb3JrYm9va0ltcGwge1xuICBwdWJsaWMgZ2V0QWxsRGF0YVNvdXJjZXNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkRhdGFTb3VyY2U+PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RGF0YVNvdXJjZVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5EYXRhU291cmNlU2VydmljZSk7XG5cbiAgICByZXR1cm4gc2VydmljZS5nZXRBbGxEYXRhU291cmNlc0FzeW5jKCkudGhlbjxBcnJheTxDb250cmFjdC5EYXRhU291cmNlPj4oKHJlc3VsdCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVNjaGVtYTogRGF0YVNjaGVtYSA9IHJlc3VsdDtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VzOiBBcnJheTxDb250cmFjdC5EYXRhU291cmNlPiA9IFtdO1xuXG4gICAgICAvLyBMb29wIHRocm91Z2ggYWxsIGRhdGEgc291cmNlcyBhbmQgYWRkIHRoZW0uXG4gICAgICBPYmplY3QudmFsdWVzKGRhdGFTY2hlbWEuZGF0YVNvdXJjZXMpLmZvckVhY2goKGRzKSA9PiB7XG4gICAgICAgIGRhdGFTb3VyY2VzLnB1c2godGhpcy5jcmVhdGVEYXRhU291cmNlRnJvbUluZm8oZHMpKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YVNvdXJjZXM7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhdGFTb3VyY2VGcm9tSW5mbyhkYXRhU291cmNlSW5mbzogRGF0YVNvdXJjZUluZm8pOiBEYXRhU291cmNlIHtcbiAgICBjb25zdCBkYXRhU291cmNlSW1wbCA9IG5ldyBEYXRhU291cmNlSW1wbChkYXRhU291cmNlSW5mbywgRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpO1xuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgRGF0YVNvdXJjZShkYXRhU291cmNlSW1wbCk7XG4gICAgZGF0YVNvdXJjZUltcGwuaW5pdGlhbGl6ZVdpdGhQdWJsaWNJbnRlcmZhY2VzKGRhdGFTb3VyY2UpO1xuICAgIHJldHVybiBkYXRhU291cmNlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFcnJvckNvZGVzLCBTaGVldFR5cGUgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQ29udGV4dE1lbnVFdmVudCxcbiAgRXhlY3V0ZVBhcmFtZXRlcnMsXG4gIEV4dGVuc2lvbkRhc2hib2FyZEluZm8sXG4gIEV4dGVuc2lvblNldHRpbmdzSW5mbyxcbiAgRm9udE5hbWVBbmRJbmZvLFxuICBGb3JtYXR0aW5nU2hlZXQsXG4gIEluaXRpYWxpemF0aW9uT3B0aW9ucyxcbiAgSW50ZXJuYWxBcGlEaXNwYXRjaGVyLFxuICBJbnRlcm5hbEFwaURpc3BhdGNoZXJGYWN0b3J5LFxuICBJTlRFUk5BTF9DT05UUkFDVF9WRVJTSU9OLFxuICBNb2RlbCxcbiAgTm90aWZpY2F0aW9uSWQsXG4gIFBhcmFtZXRlcklkLFxuICBTaGVldFBhdGgsXG4gIFZlcmJJZCxcbiAgV29ya2Jvb2tGb3JtYXR0aW5nLFxufSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LFxuICBBcGlWZXJzaW9uLFxuICBEYXNoYm9hcmRJbXBsLFxuICBkb0Nyb3NzRnJhbWVCb290c3RyYXAsXG4gIE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gIHJlZ2lzdGVyQWxsU2hhcmVkU2VydmljZXMsXG4gIFNlcnZpY2VOYW1lcyxcbiAgU2hlZXRJbmZvSW1wbCxcbiAgVGFibGVhdUVycm9yLFxuICBWZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXIsXG4gIFZpelNlcnZpY2UsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkIH0gZnJvbSAnLi4vTW9kZWxzL0Rhc2hib2FyZCc7XG5pbXBvcnQgeyBXb3JrYm9vayB9IGZyb20gJy4uL01vZGVscy9Xb3JrYm9vayc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDb250ZW50IH0gZnJvbSAnLi4vTmFtZXNwYWNlcy9EYXNoYm9hcmRDb250ZW50JztcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vTmFtZXNwYWNlcy9FbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBTZXR0aW5ncyB9IGZyb20gJy4uL05hbWVzcGFjZXMvU2V0dGluZ3MnO1xuaW1wb3J0IHsgVUkgfSBmcm9tICcuLi9OYW1lc3BhY2VzL1VJJztcbmltcG9ydCB7IEV4dGVuc2lvbnNTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlcy9FeHRlbnNpb25zU2VydmljZU5hbWVzJztcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0luaXRpYWxpemF0aW9uU2VydmljZSc7XG5pbXBvcnQgeyByZWdpc3RlckFsbEV4dGVuc2lvbnNTZXJ2aWNlcywgcmVnaXN0ZXJJbml0aWFsaXphdGlvbkV4dGVuc2lvbnNTZXJ2aWNlcyB9IGZyb20gJy4uL1NlcnZpY2VzL1JlZ2lzdGVyQWxsRXh0ZW5zaW9uc1NlcnZpY2VzJztcbmltcG9ydCB7IEV4dGVuc2lvbnNSZWdpc3RyeUlkIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5VXRpbCc7XG5pbXBvcnQgeyBVSVNlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9VSVNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmVudG9uU2Fuc0Jvb2tGb250RmFjZU5hbWUsXG4gIEJlbnRvblNhbnNCb29rSXRhbGljRm9udEZhY2VOYW1lLFxuICBCZW50b25TYW5zRm9udEZhbWlseU5hbWUsXG4gIEJlbnRvblNhbnNMaWdodEZvbnRGYWNlTmFtZSxcbiAgQmVudG9uU2Fuc0xvd0RQSUZvbnRGYW1pbHlOYW1lLFxuICBCZW50b25TYW5zTWVkaXVtRm9udEZhY2VOYW1lLFxuICBCZW50b25TYW5zU2VtaURlbWlGb250RmFjZU5hbWUsXG4gIEJlbnRvblNhbnNTZW1pRGVtaUl0YWxpY0ZvbnRGYWNlTmFtZSxcbiAgU3VwcG9ydGVkQmVudG9uU2Fuc0ZvbnRGYWNlcyxcbn0gZnJvbSAnLi9CZW50b25TYW5zRm9udE5hbWVDb25zdGFudHMnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uV29ya2Jvb2tJbXBsIH0gZnJvbSAnLi9FeHRlbnNpb25Xb3JrYm9va0ltcGwnO1xuaW1wb3J0IHsgTGVnYWN5SW50ZXJuYWxBcGlEaXNwYXRjaGVySG9sZGVyIH0gZnJvbSAnLi9MZWdhY3lJbnRlcm5hbEFwaURpc3BhdGNoZXJIb2xkZXInO1xuaW1wb3J0IHsgU2V0dGluZ3NJbXBsIH0gZnJvbSAnLi9TZXR0aW5nc0ltcGwnO1xuaW1wb3J0IHtcbiAgU3VwcG9ydGVkVGFibGVhdUZvbnRGYWNlcyxcbiAgVGFibGVhdUJvbGRGb250RmFjZU5hbWUsXG4gIFRhYmxlYXVCb2xkRm9udEZhbWlseU5hbWUsXG4gIFRhYmxlYXVCb29rRm9udEZhY2VOYW1lLFxuICBUYWJsZWF1Qm9va0ZvbnRGYW1pbHlOYW1lLFxuICBUYWJsZWF1TGlnaHRGb250RmFjZU5hbWUsXG4gIFRhYmxlYXVMaWdodEZvbnRGYW1pbHlOYW1lLFxuICBUYWJsZWF1TWVkaXVtRm9udEZhY2VOYW1lLFxuICBUYWJsZWF1TWVkaXVtRm9udEZhbWlseU5hbWUsXG4gIFRhYmxlYXVSZWd1bGFyRm9udEZhY2VOYW1lLFxuICBUYWJsZWF1UmVndWxhckZvbnRGYW1pbHlOYW1lLFxuICBUYWJsZWF1U2VtaUJvbGRGb250RmFjZU5hbWUsXG4gIFRhYmxlYXVTZW1pYm9sZEZvbnRGYW1pbHlOYW1lLFxufSBmcm9tICcuL1RhYmxlYXVCb29rRm9udE5hbWVDb25zdGFudHMnO1xuaW1wb3J0IHsgVUlJbXBsIH0gZnJvbSAnLi9VSUltcGwnO1xuXG5leHBvcnQgdHlwZSBDYWxsYmFja01hcCA9IHsgW2tleTogc3RyaW5nXTogKCkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcblxuZXhwb3J0IGNsYXNzIEV4dGVuc2lvbnNJbXBsIHtcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6YXRpb25Qcm9taXNlOiBQcm9taXNlPHN0cmluZz47XG4gIHByaXZhdGUgX3N0eWxlRWxlbWVudDogSFRNTFN0eWxlRWxlbWVudDtcbiAgcHVibGljIGRhc2hib2FyZENvbnRlbnQ6IERhc2hib2FyZENvbnRlbnQ7XG4gIHB1YmxpYyBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQ7XG4gIHB1YmxpYyBzZXR0aW5nczogU2V0dGluZ3M7XG4gIHB1YmxpYyB1aTogVUk7XG4gIHB1YmxpYyB3b3JrYm9vazogV29ya2Jvb2s7XG4gIHB1YmxpYyBleHRlbnNpb25ab25lSWQ6IG51bWJlcjtcblxuICBwdWJsaWMgaW5pdGlhbGl6ZUFzeW5jKGlzRXh0ZW5zaW9uRGlhbG9nOiBib29sZWFuLCBjb250ZXh0TWVudUNhbGxiYWNrcz86IENhbGxiYWNrTWFwKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemF0aW9uUHJvbWlzZSkge1xuICAgICAgdGhpcy5faW5pdGlhbGl6YXRpb25Qcm9taXNlID0gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGluaXRPcHRpb25zOiBJbml0aWFsaXphdGlvbk9wdGlvbnMgPSB7IGlzQWxwaGE6IEFwaVZlcnNpb24uSW5zdGFuY2UuaXNBbHBoYSB9O1xuICAgICAgICAvLyBGaXJzdCB0aGluZyB3ZSB3YW50IHRvIGRvIGlzIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGRlc2t0b3AgZGlzcGF0Y2hlciBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIHVzXG4gICAgICAgIGlmIChMZWdhY3lJbnRlcm5hbEFwaURpc3BhdGNoZXJIb2xkZXIuaGFzRGVza3RvcEFwaURpc3BhdGNoZXJQcm9taXNlKGluaXRPcHRpb25zKSkge1xuICAgICAgICAgIC8vIFJ1bm5pbmcgaW4gYSBwcmUtMjAxOS4zIGRlc2t0b3AsIHVzZSBvdXIgbGVnYWN5IGRpc3BhdGNoZXIgcHJvbWlzZVxuICAgICAgICAgIGNvbnN0IGRlc2t0b3BEaXNwYXRjaGVyUHJvbWlzZSA9IExlZ2FjeUludGVybmFsQXBpRGlzcGF0Y2hlckhvbGRlci5nZXREZXNrdG9wRGlzcGF0Y2hlclByb21pc2UoaW5pdE9wdGlvbnMpO1xuICAgICAgICAgIGRlc2t0b3BEaXNwYXRjaGVyUHJvbWlzZVxuICAgICAgICAgICAgPy50aGVuKChkaXNwYXRjaGVyRmFjdG9yeSkgPT4gdGhpcy5vbkRpc3BhdGNoZXJSZWNlaXZlZChkaXNwYXRjaGVyRmFjdG9yeSwgaXNFeHRlbnNpb25EaWFsb2csIGNvbnRleHRNZW51Q2FsbGJhY2tzKSlcbiAgICAgICAgICAgIC50aGVuKChvcGVuUGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKG9wZW5QYXlsb2FkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXZSBtdXN0IGJlIHJ1bm5pbmcgaW4gc2VydmVyLCBzbyB3ZSBzaG91bGQgdHJ5IHRvIGtpY2sgb2YgdGhlIHNlcnZlciBkaXNwYXRjaGVyIGJvb3RzdHJhcHBpbmdcbiAgICAgICAgICBjb25zdCBvbkRpc3BhdGNoZXJSZWNlaXZlZENhbGxiYWNrID0gdGhpcy5vbkRpc3BhdGNoZXJSZWNlaXZlZC5iaW5kKHRoaXMpO1xuICAgICAgICAgIGRvQ3Jvc3NGcmFtZUJvb3RzdHJhcCh3aW5kb3csIElOVEVSTkFMX0NPTlRSQUNUX1ZFUlNJT04sIGluaXRPcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oKGZhY3Rvcnk6IEludGVybmFsQXBpRGlzcGF0Y2hlckZhY3RvcnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9uRGlzcGF0Y2hlclJlY2VpdmVkQ2FsbGJhY2soZmFjdG9yeSwgaXNFeHRlbnNpb25EaWFsb2csIGNvbnRleHRNZW51Q2FsbGJhY2tzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigob3BlblBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShvcGVuUGF5bG9hZCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pbml0aWFsaXphdGlvblByb21pc2U7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlVml6SW1hZ2VBc3luYyhpbnB1dFNwZWM6IG9iamVjdCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgdml6U2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8Vml6U2VydmljZT4oU2VydmljZU5hbWVzLlZpeik7XG5cbiAgICByZXR1cm4gdml6U2VydmljZS5jcmVhdGVWaXpJbWFnZUFzeW5jKGlucHV0U3BlYyk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2xpY2tUaHJvdWdoQXN5bmMoY2xpY2tUaHJvdWdoRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVpU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8VUlTZXJ2aWNlPihFeHRlbnNpb25zU2VydmljZU5hbWVzLlVJU2VydmljZSk7XG5cbiAgICByZXR1cm4gdWlTZXJ2aWNlLnNldENsaWNrVGhyb3VnaEFzeW5jKGNsaWNrVGhyb3VnaEVuYWJsZWQsIHRoaXMuZXh0ZW5zaW9uWm9uZUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgb25EaXNwYXRjaGVyUmVjZWl2ZWQoXG4gICAgZGlzcGF0Y2hlckZhY3Rvcnk6IEludGVybmFsQXBpRGlzcGF0Y2hlckZhY3RvcnksXG4gICAgaXNFeHRlbnNpb25EaWFsb2c6IGJvb2xlYW4sXG4gICAgY29udGV4dE1lbnVGdW5jdGlvbnM/OiBDYWxsYmFja01hcCxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgZGlzcGF0Y2hlcjogSW50ZXJuYWxBcGlEaXNwYXRjaGVyID0gZGlzcGF0Y2hlckZhY3RvcnkoSU5URVJOQUxfQ09OVFJBQ1RfVkVSU0lPTik7XG5cbiAgICAvLyBDYWxsIHRvIHJlZ2lzdGVyIGFsbCB0aGUgc2VydmljZXMgd2hpY2ggd2lsbCB1c2UgdGhlIG5ld2x5IGluaXRpYWxpemVkIGRpc3BhdGNoZXJcbiAgICByZWdpc3RlckluaXRpYWxpemF0aW9uRXh0ZW5zaW9uc1NlcnZpY2VzKGRpc3BhdGNoZXIpO1xuXG4gICAgLy8gR2V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXJ2aWNlIGFuZCBpbml0aWFsaXplIHRoaXMgZXh0ZW5zaW9uXG4gICAgY29uc3QgaW5pdGlhbGl6YXRpb25TZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldChFeHRlbnNpb25zUmVnaXN0cnlJZCkuZ2V0U2VydmljZTxJbml0aWFsaXphdGlvblNlcnZpY2U+KFxuICAgICAgRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcy5Jbml0aWFsaXphdGlvblNlcnZpY2UsXG4gICAgKTtcblxuICAgIGNvbnN0IGNhbGxiYWNrTWFwS2V5cyA9IGNvbnRleHRNZW51RnVuY3Rpb25zID8gT2JqZWN0LmtleXMoY29udGV4dE1lbnVGdW5jdGlvbnMpIDogW107XG4gICAgcmV0dXJuIGluaXRpYWxpemF0aW9uU2VydmljZS5pbml0aWFsaXplRGFzaGJvYXJkRXh0ZW5zaW9uc0FzeW5jKGlzRXh0ZW5zaW9uRGlhbG9nLCBjYWxsYmFja01hcEtleXMpLnRoZW48c3RyaW5nPigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAoIXJlc3VsdC5leHRlbnNpb25JbnN0YW5jZS5sb2NhdG9yLmRhc2hib2FyZFBhdGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLkludGVybmFsRXJyb3IsICdVbmV4cGVjdGVkIGVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4nKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgcmVjZWl2ZSBhbiBpbnZhbGlkIHBsYWZvcm0gdmVyc2lvbiwgdGhpcyBtZWFucyB0aGF0IHBsYXRmb3JtIGlzIHJ1bm5uaW5nIDEuNCBvciAyLjEgYW5kXG4gICAgICAvLyBkb2Vzbid0IHBhc3MgdGhlIHBsYXRmb3JtIHZlcnNpb24gdG8gZXh0ZXJuYWwuIEluIHRoaXMgY2FzZSB3ZSBhc3N1bWUgdGhlIHBsYXRmb3JtIHZlcnNpb24gdG8gYmUgMS45XG4gICAgICBjb25zdCBwbGF0Zm9ybVZlcnNpb24gPSByZXN1bHQuZXh0ZW5zaW9uRW52aXJvbm1lbnQucGxhdGZvcm1WZXJzaW9uXG4gICAgICAgID8gcmVzdWx0LmV4dGVuc2lvbkVudmlyb25tZW50LnBsYXRmb3JtVmVyc2lvblxuICAgICAgICA6IHsgbWFqb3I6IDEsIG1pbm9yOiA5LCBmaXg6IDAgfTtcblxuICAgICAgLy8gV3JhcCBvdXIgZXhpc3RpbmcgZGlzcGF0Y2hlciBpbiBhIGRpc3BhdGNoZXIgdGhhdCBjYW4gZG93bmdyYWRlL3VwZ3JhZGUgZm9yIGFuIG9sZGVyIHBsYXRmb3JtLlxuICAgICAgaWYgKFZlcnNpb25lZEV4dGVybmFsQXBpRGlzcGF0Y2hlci5uZWVkc1ZlcnNpb25Db252ZXJ0ZXIocGxhdGZvcm1WZXJzaW9uKSkge1xuICAgICAgICBkaXNwYXRjaGVyID0gbmV3IFZlcnNpb25lZEV4dGVybmFsQXBpRGlzcGF0Y2hlcihkaXNwYXRjaGVyLCBwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgfVxuICAgICAgLy8gUmVnaXN0cmF0aW9uIG9mIHNlcnZpY2VzIG11c3QgaGFwcGVuIGJlZm9yZSBpbml0aWFsaXppbmcgY29udGVudCBhbmQgZW52aXJvbm1lbnRcbiAgICAgIC8vIEV4dGVuc2lvbnMgZG9lc24ndCBuZWVkIHRvIHBhc3MgaW4gYSByZWdpc3RyeUlkLiBCeSBkZWZhdWx0LCB0aGUgc2VydmljZSByZWdpc3RyeSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGggcmVnaXN0cnlJZD0wLlxuICAgICAgcmVnaXN0ZXJBbGxTaGFyZWRTZXJ2aWNlcyhkaXNwYXRjaGVyLCBFeHRlbnNpb25zUmVnaXN0cnlJZCwgcGxhdGZvcm1WZXJzaW9uKTtcbiAgICAgIHJlZ2lzdGVyQWxsRXh0ZW5zaW9uc1NlcnZpY2VzKGRpc3BhdGNoZXIpO1xuXG4gICAgICB0aGlzLmRhc2hib2FyZENvbnRlbnQgPSB0aGlzLmluaXRpYWxpemVEYXNoYm9hcmRDb250ZW50KFxuICAgICAgICByZXN1bHQuZXh0ZW5zaW9uRGFzaGJvYXJkSW5mbyxcbiAgICAgICAgcmVzdWx0LmV4dGVuc2lvbkluc3RhbmNlLmxvY2F0b3IuZGFzaGJvYXJkUGF0aCxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBuZXcgRW52aXJvbm1lbnQocmVzdWx0LmV4dGVuc2lvbkVudmlyb25tZW50KTtcbiAgICAgIHRoaXMuc2V0dGluZ3MgPSB0aGlzLmluaXRpYWxpemVTZXR0aW5ncyhyZXN1bHQuZXh0ZW5zaW9uU2V0dGluZ3NJbmZvKTtcbiAgICAgIHRoaXMudWkgPSBuZXcgVUkobmV3IFVJSW1wbCgpKTtcbiAgICAgIHRoaXMud29ya2Jvb2sgPSBuZXcgV29ya2Jvb2sobmV3IEV4dGVuc2lvbldvcmtib29rSW1wbCgpKTtcbiAgICAgIHRoaXMuZXh0ZW5zaW9uWm9uZUlkID0gcmVzdWx0LmV4dGVuc2lvbkRhc2hib2FyZEluZm8uZXh0ZW5zaW9uWm9uZUlkO1xuXG4gICAgICBpZiAocmVzdWx0LmV4dGVuc2lvbkVudmlyb25tZW50Lndvcmtib29rRm9ybWF0dGluZykge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVUYWJsZWF1Rm9udHMoZGlzcGF0Y2hlciwgcmVzdWx0LmV4dGVuc2lvbkVudmlyb25tZW50Lndvcmtib29rRm9ybWF0dGluZyk7XG4gICAgICAgIHRoaXMuYXBwbHlBbGxGb3JtYXR0aW5nKHJlc3VsdC5leHRlbnNpb25FbnZpcm9ubWVudC53b3JrYm9va0Zvcm1hdHRpbmcpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZnRlciBpbml0aWFsaXphdGlvbiBoYXMgY29tcGxldGVkLCBzZXR1cCBsaXN0ZW5lcnMgZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdFxuICAgICAgLy8gYXJlIG1lYW50IHRvIGJlIHRyaWdnZXJlZCB3aGVuZXZlciBhIGNvbnRleHQgbWVudSBpdGVtIGlzIGNsaWNrZWQuXG4gICAgICB0aGlzLmluaXRpYWxpemVDb250ZXh0TWVudUNhbGxiYWNrcyhjb250ZXh0TWVudUZ1bmN0aW9ucyk7XG5cbiAgICAgIC8vIEFsc28gc2V0IHVwIGxpc3RlbmVycyBmb3IgRXh0ZW5zaW9uU3R5bGVzQ2hhbmdlZEV2ZW50XG4gICAgICB0aGlzLmluaXRpYWxpemVXb3JrYm9va0Zvcm1hdHRpbmdDaGFuZ2VkRXZlbnRDYWxsYmFjayhkaXNwYXRjaGVyKTtcblxuICAgICAgLy8gSW4gdGhlIG5vcm1hbCBpbml0aWFsaXphdGlvbiBjYXNlLCB0aGlzIHdpbGwgYmUgYW4gZW1wdHkgc3RyaW5nLiAgV2hlbiByZXR1cm5pbmcgZnJvbSBpbml0aWFsaXplQXN5bmMgdG8gdGhlXG4gICAgICAvLyBkZXZlbG9wZXIsIHdlIGp1c3QgaW5nb3JlIHRoYXQgc3RyaW5nLiAgSW4gdGhlIGNhc2Ugb2YgaW5pdGlhbGl6aW5nIGZyb20gYW4gZXh0ZW5zaW9uIGRpYWxvZywgdGhpcyBzdHJpbmdcbiAgICAgIC8vIGlzIGFuIG9wdGlvbmFsIHBheWxvYWQgc2VudCBmcm9tIHRoZSBwYXJlbnQgZXh0ZW5zaW9uLlxuICAgICAgcmV0dXJuIHJlc3VsdC5leHRlbnNpb25EaWFsb2dQYXlsb2FkO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFwcGx5QWxsRm9ybWF0dGluZyhmb3JtYXR0aW5nTW9kZWw6IFdvcmtib29rRm9ybWF0dGluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fc3R5bGVFbGVtZW50KSB7XG4gICAgICB0aGlzLl9zdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgdGhpcy5fc3R5bGVFbGVtZW50LmlkID0gJ1RhYmxlYXUtRXh0ZW5zaW9uLUZvcm1hdHRpbmcnO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9zdHlsZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc3R5bGVFbGVtZW50LnNoZWV0IHx8ICFmb3JtYXR0aW5nTW9kZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZXNoZWV0OiBDU1NTdHlsZVNoZWV0ID0gdGhpcy5fc3R5bGVFbGVtZW50LnNoZWV0IGFzIENTU1N0eWxlU2hlZXQ7XG4gICAgd2hpbGUgKHN0eWxlc2hlZXQuY3NzUnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgc3R5bGVzaGVldC5kZWxldGVSdWxlKHN0eWxlc2hlZXQuY3NzUnVsZXMubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIGZvcm1hdHRpbmdNb2RlbC5mb3JtYXR0aW5nU2hlZXRzLm1hcCgoY3VycmVudEZvcm1hdHRpbmdTaGVldCkgPT4ge1xuICAgICAgdGhpcy5hcHBseUZvcm1hdHRpbmdTaGVldFRvU3R5bGVTaGVldChjdXJyZW50Rm9ybWF0dGluZ1NoZWV0LCBzdHlsZXNoZWV0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGb3JtYXR0aW5nU2hlZXRUb1N0eWxlU2hlZXQoY3VycmVudEZvcm1hdHRpbmdTaGVldDogRm9ybWF0dGluZ1NoZWV0LCBzdHlsZXNoZWV0OiBDU1NTdHlsZVNoZWV0KTogdm9pZCB7XG4gICAgbGV0IHN0eWxlSW5mbyA9ICcnO1xuXG4gICAgY29uc3QgY3NzUHJvcGVydGllcyA9IGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQuY3NzUHJvcGVydGllcztcbiAgICBpZiAoY3NzUHJvcGVydGllcy5mb250RmFtaWx5KSB7XG4gICAgICBzdHlsZUluZm8gKz0gJ2ZvbnQtZmFtaWx5OiAnICsgY3NzUHJvcGVydGllcy5mb250RmFtaWx5LnRvU3RyaW5nKCkgKyAnOyAnO1xuICAgIH1cblxuICAgIGlmIChjc3NQcm9wZXJ0aWVzLmZvbnRTaXplKSB7XG4gICAgICBzdHlsZUluZm8gKz0gJ2ZvbnQtc2l6ZTogJyArIGNzc1Byb3BlcnRpZXMuZm9udFNpemUudG9TdHJpbmcoKSArICc7ICc7XG4gICAgfVxuXG4gICAgaWYgKGNzc1Byb3BlcnRpZXMuZm9udFdlaWdodCkge1xuICAgICAgc3R5bGVJbmZvICs9ICdmb250LXdlaWdodDogJyArIGNzc1Byb3BlcnRpZXMuZm9udFdlaWdodC50b1N0cmluZygpICsgJzsgJztcbiAgICB9XG5cbiAgICBpZiAoY3NzUHJvcGVydGllcy5mb250U3R5bGUpIHtcbiAgICAgIHN0eWxlSW5mbyArPSAnZm9udC1zdHlsZTogJyArIGNzc1Byb3BlcnRpZXMuZm9udFN0eWxlLnRvU3RyaW5nKCkgKyAnOyAnO1xuICAgIH1cblxuICAgIGlmIChjc3NQcm9wZXJ0aWVzLnRleHREZWNvcmF0aW9uKSB7XG4gICAgICBzdHlsZUluZm8gKz0gJ3RleHQtZGVjb3JhdGlvbjogJyArIGNzc1Byb3BlcnRpZXMudGV4dERlY29yYXRpb24udG9TdHJpbmcoKSArICc7ICc7XG4gICAgfVxuXG4gICAgaWYgKGNzc1Byb3BlcnRpZXMuY29sb3IpIHtcbiAgICAgIHN0eWxlSW5mbyArPSAnY29sb3I6ICcgKyBjc3NQcm9wZXJ0aWVzLmNvbG9yICsgJzsgJztcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3Rvcjogc3RyaW5nID0gJy4nICsgY3VycmVudEZvcm1hdHRpbmdTaGVldC5jbGFzc05hbWVLZXk7XG4gICAgY29uc3QgcnVsZTogc3RyaW5nID0gc2VsZWN0b3IgKyAnIHsgJyArIHN0eWxlSW5mbyArICcgfSc7XG4gICAgc3R5bGVzaGVldC5pbnNlcnRSdWxlKHJ1bGUsIHN0eWxlc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVdvcmtib29rRm9ybWF0dGluZ0NoYW5nZWRFdmVudENhbGxiYWNrKGRpc3BhdGNoZXI6IEludGVybmFsQXBpRGlzcGF0Y2hlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPE5vdGlmaWNhdGlvblNlcnZpY2U+KFxuICAgICAgU2VydmljZU5hbWVzLk5vdGlmaWNhdGlvbixcbiAgICApO1xuICAgIC8vIFVucmVnaXN0ZXIgZnVuY3Rpb24gbm90IHVzZWQgc2luY2UgdGhlc2Ugbm90aWZpY2F0aW9ucyBzaG91bGQgYmVcbiAgICAvLyBvYnNlcnZlZCBmb3IgdGhlIGZ1bGwgbGlmZXRpbWUgb2YgdGhlIGV4dGVuc2lvbi5cbiAgICBub3RpZmljYXRpb25TZXJ2aWNlLnJlZ2lzdGVySGFuZGxlcihcbiAgICAgIE5vdGlmaWNhdGlvbklkLldvcmtib29rRm9ybWF0dGluZ0NoYW5nZWQsXG4gICAgICAoKSA9PiB0cnVlLFxuICAgICAgKGV2ZW50Rm9ybWF0dGluZzogV29ya2Jvb2tGb3JtYXR0aW5nKSA9PiB7XG4gICAgICAgIGlmIChldmVudEZvcm1hdHRpbmcpIHtcbiAgICAgICAgICB0aGlzLmluaXRpYWxpemVUYWJsZWF1Rm9udHMoZGlzcGF0Y2hlciwgZXZlbnRGb3JtYXR0aW5nKTtcbiAgICAgICAgICB0aGlzLmFwcGx5QWxsRm9ybWF0dGluZyhldmVudEZvcm1hdHRpbmcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUYWJsZWF1Rm9udHMoZGlzcGF0Y2hlcjogSW50ZXJuYWxBcGlEaXNwYXRjaGVyLCB3b3JrYm9va0Zvcm1hdHRpbmc6IFdvcmtib29rRm9ybWF0dGluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZvbnROYW1lczogTW9kZWxbXSA9IFsuLi5TdXBwb3J0ZWRCZW50b25TYW5zRm9udEZhY2VzLCAuLi5TdXBwb3J0ZWRUYWJsZWF1Rm9udEZhY2VzXTtcbiAgICB3b3JrYm9va0Zvcm1hdHRpbmcuZm9ybWF0dGluZ1NoZWV0cy5mb3JFYWNoKChmb3JtYXR0aW5nU2hlZXQpID0+IHtcbiAgICAgIGlmIChmb3JtYXR0aW5nU2hlZXQuY3NzUHJvcGVydGllcy5mb250RmFtaWx5KSB7XG4gICAgICAgIGZvbnROYW1lcy5wdXNoKGZvcm1hdHRpbmdTaGVldC5jc3NQcm9wZXJ0aWVzLmZvbnRGYW1pbHkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGZvbnROYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHsgW1BhcmFtZXRlcklkLkZvbnROYW1lTGlzdEl0ZW1zXTogZm9udE5hbWVzIH07XG4gICAgICBkaXNwYXRjaGVyXG4gICAgICAgIC5leGVjdXRlKFZlcmJJZC5HZXRGb250cywgcGFyYW1ldGVycylcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkRm9udHMocmVzcG9uc2UucmVzdWx0IGFzIEFycmF5PEZvbnROYW1lQW5kSW5mbz4pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRGb250cyhmb250czogQXJyYXk8Rm9udE5hbWVBbmRJbmZvPik6IHZvaWQge1xuICAgIGZvbnRzLmZvckVhY2goKGZvbnROYW1lQW5kSW5mbykgPT4ge1xuICAgICAgaWYgKFN1cHBvcnRlZFRhYmxlYXVGb250RmFjZXMuaW5jbHVkZXMoZm9udE5hbWVBbmRJbmZvLmZvbnROYW1lKSkge1xuICAgICAgICB0aGlzLmxvYWRUYWJsZWF1Rm9udHMoZm9udE5hbWVBbmRJbmZvKTtcbiAgICAgIH0gZWxzZSBpZiAoU3VwcG9ydGVkQmVudG9uU2Fuc0ZvbnRGYWNlcy5pbmNsdWRlcyhmb250TmFtZUFuZEluZm8uZm9udE5hbWUpKSB7XG4gICAgICAgIHRoaXMubG9hZEJlbnRvblNhbnNGb250cyhmb250TmFtZUFuZEluZm8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKG5ldyBGb250RmFjZShmb250TmFtZUFuZEluZm8uZm9udE5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRGFzaGJvYXJkQ29udGVudChpbmZvOiBFeHRlbnNpb25EYXNoYm9hcmRJbmZvLCBzaGVldFBhdGg6IFNoZWV0UGF0aCk6IERhc2hib2FyZENvbnRlbnQge1xuICAgIC8vIHNoZWV0cyBhcmUgYWx3YXlzIGFjdGl2ZSBmb3IgRXh0ZW5zaW9uc1xuICAgIGNvbnN0IHNoZWV0SW5mb0ltcGwgPSBuZXcgU2hlZXRJbmZvSW1wbChpbmZvLm5hbWUsIFNoZWV0VHlwZS5EYXNoYm9hcmQsIHsgd2lkdGg6IGluZm8uc2l6ZS53LCBoZWlnaHQ6IGluZm8uc2l6ZS5oIH0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgY29uc3QgZGFzaGJvYXJkSW1wbCA9IG5ldyBEYXNoYm9hcmRJbXBsKHNoZWV0SW5mb0ltcGwsIGluZm8uem9uZXMsIHNoZWV0UGF0aCwgRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQsIG51bGwpO1xuICAgIGNvbnN0IGRhc2hib2FyZCA9IG5ldyBEYXNoYm9hcmQoZGFzaGJvYXJkSW1wbCk7XG4gICAgcmV0dXJuIG5ldyBEYXNoYm9hcmRDb250ZW50KGRhc2hib2FyZCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVTZXR0aW5ncyhzZXR0aW5nc0luZm86IEV4dGVuc2lvblNldHRpbmdzSW5mbyk6IFNldHRpbmdzIHtcbiAgICBjb25zdCBzZXR0aW5nc0ltcGwgPSBuZXcgU2V0dGluZ3NJbXBsKHNldHRpbmdzSW5mbyk7XG4gICAgcmV0dXJuIG5ldyBTZXR0aW5ncyhzZXR0aW5nc0ltcGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29udGV4dE1lbnVDYWxsYmFja3MoY29udGV4dE1lbnVGdW5jdGlvbnM/OiBDYWxsYmFja01hcCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPE5vdGlmaWNhdGlvblNlcnZpY2U+KFxuICAgICAgU2VydmljZU5hbWVzLk5vdGlmaWNhdGlvbixcbiAgICApO1xuXG4gICAgLy8gVW5yZWdpc3RlciBmdW5jdGlvbiBub3QgdXNlZCBzaW5jZSB0aGVzZSBub3RpZmljYXRpb25zIHNob3VsZCBiZVxuICAgIC8vIG9ic2VydmVkIGZvciB0aGUgZnVsbCBsaWZldGltZSBvZiB0aGUgZXh0ZW5zaW9uLlxuICAgIG5vdGlmaWNhdGlvblNlcnZpY2UucmVnaXN0ZXJIYW5kbGVyKFxuICAgICAgTm90aWZpY2F0aW9uSWQuQ29udGV4dE1lbnVDbGljayxcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gTGV0IHRocm91Z2ggYW55IGNvbnRleHQgbWVudSBldmVudCwgdGhlc2UgYXJlIGFscmVhZHkgZmlsdGVyZWQgb24gYXBpLWNvcmVcbiAgICAgICAgLy8gYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBsb2NhdG9yLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICAoZXZlbnQ6IENvbnRleHRNZW51RXZlbnQpID0+IHtcbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dCBtZW51IElEXG4gICAgICAgIGlmIChjb250ZXh0TWVudUZ1bmN0aW9ucykge1xuICAgICAgICAgIGlmICghY29udGV4dE1lbnVGdW5jdGlvbnNbZXZlbnQuaWRdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgYFJlY2VpdmVkIHVuZXhwZWN0ZWQgY29udGV4dCBtZW51IElkIGZyb20gZXZlbnQ6ICR7ZXZlbnQuaWR9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dE1lbnVGdW5jdGlvbnNbZXZlbnQuaWRdKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFRhYmxlYXVGb250cyhmb250TmFtZUFuZEluZm86IEZvbnROYW1lQW5kSW5mbyk6IHZvaWQge1xuICAgIHN3aXRjaCAoZm9udE5hbWVBbmRJbmZvLmZvbnROYW1lKSB7XG4gICAgICBjYXNlIFRhYmxlYXVCb29rRm9udEZhY2VOYW1lOlxuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQobmV3IEZvbnRGYWNlKFRhYmxlYXVCb29rRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICdub3JtYWwnLCBzdHlsZTogJ25vcm1hbCcgfSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUYWJsZWF1TGlnaHRGb250RmFjZU5hbWU6XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChuZXcgRm9udEZhY2UoVGFibGVhdUxpZ2h0Rm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICdub3JtYWwnLCBzdHlsZTogJ25vcm1hbCcgfSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUYWJsZWF1UmVndWxhckZvbnRGYWNlTmFtZTpcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKFxuICAgICAgICAgIG5ldyBGb250RmFjZShUYWJsZWF1UmVndWxhckZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnbm9ybWFsJywgc3R5bGU6ICdub3JtYWwnIH0pLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUYWJsZWF1U2VtaUJvbGRGb250RmFjZU5hbWU6XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChcbiAgICAgICAgICBuZXcgRm9udEZhY2UoVGFibGVhdVNlbWlib2xkRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICdub3JtYWwnLCBzdHlsZTogJ25vcm1hbCcgfSksXG4gICAgICAgICk7XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChuZXcgRm9udEZhY2UoVGFibGVhdVJlZ3VsYXJGb250RmFtaWx5TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvLCB7IHdlaWdodDogJ2JvbGQnLCBzdHlsZTogJ25vcm1hbCcgfSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUYWJsZWF1Qm9sZEZvbnRGYWNlTmFtZTpcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKG5ldyBGb250RmFjZShUYWJsZWF1Qm9sZEZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnbm9ybWFsJywgc3R5bGU6ICdub3JtYWwnIH0pKTtcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKG5ldyBGb250RmFjZShUYWJsZWF1Qm9sZEZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnYm9sZCcsIHN0eWxlOiAnbm9ybWFsJyB9KSk7XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChuZXcgRm9udEZhY2UoVGFibGVhdU1lZGl1bUZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnYm9sZCcsIHN0eWxlOiAnbm9ybWFsJyB9KSk7XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChcbiAgICAgICAgICBuZXcgRm9udEZhY2UoVGFibGVhdVNlbWlib2xkRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICdib2xkJywgc3R5bGU6ICdub3JtYWwnIH0pLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBUYWJsZWF1TWVkaXVtRm9udEZhY2VOYW1lOlxuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQoXG4gICAgICAgICAgbmV3IEZvbnRGYWNlKFRhYmxlYXVNZWRpdW1Gb250RmFtaWx5TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvLCB7IHdlaWdodDogJ25vcm1hbCcsIHN0eWxlOiAnbm9ybWFsJyB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKG5ldyBGb250RmFjZShUYWJsZWF1TGlnaHRGb250RmFtaWx5TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvLCB7IHdlaWdodDogJ2JvbGQnLCBzdHlsZTogJ25vcm1hbCcgfSkpO1xuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQobmV3IEZvbnRGYWNlKFRhYmxlYXVCb29rRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICdib2xkJywgc3R5bGU6ICdub3JtYWwnIH0pKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCBgJ2F0dGVtcHRlZCB0byBsb2FkIHVuc3VwcG9ydGVkIGZvbnQ6ICR7Zm9udE5hbWVBbmRJbmZvLmZvbnROYW1lfS4nYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQmVudG9uU2Fuc0ZvbnRzKGZvbnROYW1lQW5kSW5mbzogRm9udE5hbWVBbmRJbmZvKTogdm9pZCB7XG4gICAgc3dpdGNoIChmb250TmFtZUFuZEluZm8uZm9udE5hbWUpIHtcbiAgICAgIGNhc2UgQmVudG9uU2Fuc0Jvb2tGb250RmFjZU5hbWU6XG4gICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChuZXcgRm9udEZhY2UoQmVudG9uU2Fuc0ZvbnRGYW1pbHlOYW1lLCBmb250TmFtZUFuZEluZm8uZm9udEJpbmFyeUluZm8sIHsgd2VpZ2h0OiAnbm9ybWFsJywgc3R5bGU6ICdub3JtYWwnIH0pKTtcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKFxuICAgICAgICAgIG5ldyBGb250RmFjZShCZW50b25TYW5zTG93RFBJRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICcxMDAnLCBzdHlsZTogJ25vcm1hbCcgfSksXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEJlbnRvblNhbnNMaWdodEZvbnRGYWNlTmFtZTpcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKG5ldyBGb250RmFjZShCZW50b25TYW5zRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICcxMDAnLCBzdHlsZTogJ25vcm1hbCcgfSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBCZW50b25TYW5zTWVkaXVtRm9udEZhY2VOYW1lOlxuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQobmV3IEZvbnRGYWNlKEJlbnRvblNhbnNGb250RmFtaWx5TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvLCB7IHdlaWdodDogJ2JvbGQnLCBzdHlsZTogJ25vcm1hbCcgfSkpO1xuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQoXG4gICAgICAgICAgbmV3IEZvbnRGYWNlKEJlbnRvblNhbnNMb3dEUElGb250RmFtaWx5TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvLCB7IHdlaWdodDogJ2JvbGQnLCBzdHlsZTogJ25vcm1hbCcgfSksXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEJlbnRvblNhbnNTZW1pRGVtaUZvbnRGYWNlTmFtZTpcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKFxuICAgICAgICAgIG5ldyBGb250RmFjZShCZW50b25TYW5zTG93RFBJRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyB3ZWlnaHQ6ICdub3JtYWwnLCBzdHlsZTogJ25vcm1hbCcgfSksXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEJlbnRvblNhbnNCb29rSXRhbGljRm9udEZhY2VOYW1lOlxuICAgICAgICBkb2N1bWVudC5mb250cy5hZGQobmV3IEZvbnRGYWNlKEJlbnRvblNhbnNGb250RmFtaWx5TmFtZSwgZm9udE5hbWVBbmRJbmZvLmZvbnRCaW5hcnlJbmZvLCB7IHN0eWxlOiAnaXRhbGljJyB9KSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEJlbnRvblNhbnNTZW1pRGVtaUl0YWxpY0ZvbnRGYWNlTmFtZTpcbiAgICAgICAgZG9jdW1lbnQuZm9udHMuYWRkKG5ldyBGb250RmFjZShCZW50b25TYW5zTG93RFBJRm9udEZhbWlseU5hbWUsIGZvbnROYW1lQW5kSW5mby5mb250QmluYXJ5SW5mbywgeyBzdHlsZTogJ2l0YWxpYycgfSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLkludGVybmFsRXJyb3IsIGAnYXR0ZW1wdGVkIHRvIGxvYWQgdW5zdXBwb3J0ZWQgZm9udDogJHtmb250TmFtZUFuZEluZm8uZm9udE5hbWV9LidgKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEluaXRpYWxpemF0aW9uT3B0aW9ucywgSW50ZXJuYWxBcGlEaXNwYXRjaGVyRmFjdG9yeSwgSU5URVJOQUxfQ09OVFJBQ1RfVkVSU0lPTiwgVmVyYklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcblxuLyoqXG4gKiBMZWdhY3lJbnRlcm5hbEFwaURpc3BhdGNoZXJIb2xkZXIgaGFzIGJlZW4gbW92ZWQgKGFuZCByZW5hbWVkKSBmcm9tIGFwaS1pbnRlcm5hbC1jb250cmFjdC5cbiAqIEl0IHN1cHBvcnRzIHJ1bm5pbmcgYSBuZXdlciBleHRlcm5hbCBsaWJyYXJ5IGFnYWluc3QgYSBwcmUgMjAxOS4zIGRlc2t0b3AuXG4gKiBTdGFydGluZyBpbiAyMDE5LjMsIHdlIGhhdmUgYSBtZXJnZWQgYm9vdHN0cmFwIHN0eWxlIGZvciBib3RoIGRlc2t0b3AgYW5kIHNlcnZlci5cbiAqIEluIGFkZGl0aW9uLCB0aGUgYWxwaGEgY2hlY2tpbmcgdGhhdCBpcyBoYXBwZW5pbmcgaGVyZSBpcyBub3QgbmVjZXNzYXJ5IGluIGV4dGVybmFsLWFwaS1qc1xuICogIGFmdGVyIDIwMTkuMyBiZWNhdXNlIHRoYXQgY2hlY2tpbmcgaGFwcGVucyBpbiBhcGktcGxhdGZvcm0tanMgKEFwaURpc3BhdGNoZXJUZXN0LnRzKVxuICogVEZTSUQ6IDEwOTE1NjEgdHJhY2tzIGFuIGltcHJvdmVtZW50IHRvIHRoaXMgc3lzdGVtIHRvIG1ha2UgaXQgbGVzcyBjb21wbGV4IGFuZCB0aWUgaXQgZGlyZWN0bHkgdG9cbiAqICB0YWJsZWF1IGJldGEgcmVsZWFzZSB2ZXJzaW9ucy5cbiAqIEBkZXByZWNhdGVkXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG5leHBvcnQgbmFtZXNwYWNlIExlZ2FjeUludGVybmFsQXBpRGlzcGF0Y2hlckhvbGRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldERlc2t0b3BEaXNwYXRjaGVyUHJvbWlzZShvcHRpb25zPzogSW5pdGlhbGl6YXRpb25PcHRpb25zKTogUHJvbWlzZTxJbnRlcm5hbEFwaURpc3BhdGNoZXJGYWN0b3J5PiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCghb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucy5pc0FscGhhID09PSAndW5kZWZpbmVkJykgJiYgIXdpbmRvdy5fX3dhcm5pbmdJc3N1ZWQpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oJ1RoaXMgaXMgYSBiZXRhIHZlcnNpb24gb2YgdGhlIEV4dGVuc2lvbnMgQVBJLiBQbGVhc2UgdXBncmFkZSB0byBhbiBvZmZpY2lhbCByZWxlYXNlLicpO1xuICAgICAgd2luZG93Ll9fd2FybmluZ0lzc3VlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zPy5pc0FscGhhICYmIHdpbmRvdy5fX3BsYXRmb3JtSXNPZmZpY2lhbFJlbGVhc2UpIHtcbiAgICAgIHdpbmRvdy5fX3RhYmxlYXVEZXNrdG9wRGlzcGF0Y2hlclxuICAgICAgICAudGhlbigoZGlzcGF0Y2hlckZhY3RvcnkpID0+IHtcbiAgICAgICAgICBjb25zdCBkaXNwYXRjaGVyID0gZGlzcGF0Y2hlckZhY3RvcnkoSU5URVJOQUxfQ09OVFJBQ1RfVkVSU0lPTik7XG4gICAgICAgICAgZGlzcGF0Y2hlci5leGVjdXRlKFZlcmJJZC5CbG9ja0V4dGVuc2lvbiwge30pLmNhdGNoKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgd2lsbCBiZSB1bmRlZmluZWQgaWYgcHJvbWlzZSBpcyByZWplY3RlZCBvciB0aHJvd3NcbiAgICByZXR1cm4gd2luZG93Ll9fdGFibGVhdURlc2t0b3BEaXNwYXRjaGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gaGFzRGVza3RvcEFwaURpc3BhdGNoZXJQcm9taXNlKG9wdGlvbnM/OiBJbml0aWFsaXphdGlvbk9wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFnZXREZXNrdG9wRGlzcGF0Y2hlclByb21pc2Uob3B0aW9ucyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3RhYmxlYXVEZXNrdG9wRGlzcGF0Y2hlcjogUHJvbWlzZTxJbnRlcm5hbEFwaURpc3BhdGNoZXJGYWN0b3J5PjtcbiAgICBfX3BsYXRmb3JtSXNPZmZpY2lhbFJlbGVhc2U6IGJvb2xlYW47XG4gICAgX193YXJuaW5nSXNzdWVkOiBib29sZWFuO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uU2V0dGluZ3NJbmZvLCBOb3RpZmljYXRpb25JZCwgU2V0dGluZ3NFdmVudCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQge1xuICBBcGlTZXJ2aWNlUmVnaXN0cnksXG4gIEVycm9ySGVscGVycyxcbiAgTm90aWZpY2F0aW9uU2VydmljZSxcbiAgU2VydmljZU5hbWVzLFxuICBTaW5nbGVFdmVudE1hbmFnZXIsXG4gIFNpbmdsZUV2ZW50TWFuYWdlckltcGwsXG4gIFRhYmxlYXVFcnJvcixcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXZlbnQgfSBmcm9tICcuLi9FdmVudHMvVGFibGVhdUV2ZW50JztcbmltcG9ydCB7IEV4dGVuc2lvbnNTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlcy9FeHRlbnNpb25zU2VydmljZU5hbWVzJztcbmltcG9ydCB7IEV4dGVuc2lvbnNSZWdpc3RyeUlkIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5VXRpbCc7XG5pbXBvcnQgeyBTZXR0aW5nc0NvbGxlY3Rpb24sIFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL1NldHRpbmdzU2VydmljZSc7XG5cbmNsYXNzIFNldHRpbmdzQ2hhbmdlZEV2ZW50IGV4dGVuZHMgVGFibGVhdUV2ZW50IGltcGxlbWVudHMgQ29udHJhY3QuU2V0dGluZ3NDaGFuZ2VkRXZlbnQge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfbmV3U2V0dGluZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICBzdXBlcihDb250cmFjdC5UYWJsZWF1RXZlbnRUeXBlLlNldHRpbmdzQ2hhbmdlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5ld1NldHRpbmdzKCk6IFNldHRpbmdzQ29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX25ld1NldHRpbmdzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nc0ltcGwge1xuICBwcml2YXRlIHN0YXRpYyBBU1lOQ19TQVZFX0lOX1BST0dSRVNTID0gJ0FzeW5jIFNhdmUgaXMgaW4gcHJvZ3Jlc3MsIHVwZGF0aW5nIHNldHRpbmdzIGlzIG5vdCBhbGxvd2VkLic7XG4gIHByaXZhdGUgX2lzTW9kaWZpZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2N1cnJlbnRTZXR0aW5nczogU2V0dGluZ3NDb2xsZWN0aW9uO1xuXG4gIC8vIFNpbmNlIHByb21pc2VzIGNhbid0IGJlIGludHJvc3BlY3RlZCBmb3Igc3RhdGUsIGtlZXAgYSB2YXJpYWJsZSB0aGF0XG4gIC8vIGluZGljYXRlcyBhIHNhdmUgaXMgaW4gcHJvZ3Jlc3MsIHNvIHRoYXQgc2V0L2VyYXNlIGNhbid0IGJlIGNhbGxlZCBkdXJpbmcgYSBzYXZlLlxuICBwcml2YXRlIF9zYXZlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzZXR0aW5nc0luZm86IEV4dGVuc2lvblNldHRpbmdzSW5mbykge1xuICAgIHRoaXMuaW5pdGlhbGl6ZVNldHRpbmdzKHNldHRpbmdzSW5mbyk7XG4gIH1cblxuICBwdWJsaWMgZXJhc2Uoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKGtleSwgJ2tleScpO1xuXG4gICAgLy8gT25seSBtYWtlIGEgbW9kaWZpY2F0aW9uIGlmIHdlIGhhdmUgdGhlIGtleSBhbHJlYWR5XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTZXR0aW5nc1trZXldKSB7XG4gICAgICB0aGlzLnZlcmlmeVNldHRpbmdzQXJlVW5sb2NrZWQoKTtcblxuICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRTZXR0aW5nc1trZXldO1xuICAgICAgdGhpcy5faXNNb2RpZmllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihrZXksICdrZXknKTtcblxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U2V0dGluZ3Nba2V5XTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbGwoKTogU2V0dGluZ3NDb2xsZWN0aW9uIHtcbiAgICAvLyBSZXR1cm5zIGEgbXV0YWJsZSBjb3B5IG9mIHRoZSBzZXR0aW5nc1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9jdXJyZW50U2V0dGluZ3MpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc01vZGlmaWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc01vZGlmaWVkO1xuICB9XG5cbiAgcHVibGljIHNhdmVBc3luYygpOiBQcm9taXNlPFNldHRpbmdzQ29sbGVjdGlvbj4ge1xuICAgIHRoaXMudmVyaWZ5U2V0dGluZ3NBcmVVbmxvY2tlZCgpO1xuXG4gICAgLy8gSnVzdCByZXNvbHZlIGltbWVkaWF0ZWx5IGlmIHNldHRpbmdzIGFyZSB1bmNoYW5nZWRcbiAgICBpZiAoIXRoaXMuX2lzTW9kaWZpZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmU8U2V0dGluZ3NDb2xsZWN0aW9uPih0aGlzLl9jdXJyZW50U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIHRoaXMuX3NhdmVJblByb2dyZXNzID0gdHJ1ZTtcblxuICAgIC8vIFVzZSB0aGUgc2V0dGluZ3Mgc2VydmljZSB0byBzYXZlIHNldHRpbmdzIHRvIHR3YlxuICAgIGNvbnN0IHNldHRpbmdzU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8U2V0dGluZ3NTZXJ2aWNlPihcbiAgICAgIEV4dGVuc2lvbnNTZXJ2aWNlTmFtZXMuU2V0dGluZ3NTZXJ2aWNlLFxuICAgICk7XG5cbiAgICByZXR1cm4gc2V0dGluZ3NTZXJ2aWNlLnNhdmVTZXR0aW5nc0FzeW5jKHRoaXMuX2N1cnJlbnRTZXR0aW5ncykudGhlbjxTZXR0aW5nc0NvbGxlY3Rpb24+KFxuICAgICAgKG5ld1NldHRpbmdzKSA9PiB7XG4gICAgICAgIHRoaXMuX3NhdmVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzTW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTZXR0aW5ncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFNldHRpbmdzID0gbmV3U2V0dGluZ3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jdXJyZW50U2V0dGluZ3MsIG5ld1NldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3U2V0dGluZ3M7XG4gICAgICB9LFxuICAgICAgKHJlYXNvbikgPT4ge1xuICAgICAgICB0aGlzLl9zYXZlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5U3RyaW5nUGFyYW1ldGVyKGtleSwgJ2tleScpOyAvLyBLZXkgc2hvdWxkbid0IGJlIGFuIGVtcHR5IHN0cmluZy5cbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKHZhbHVlLCAndmFsdWUnKTsgLy8gRW1wdHkgc3RyaW5nIHZhbHVlIGlzIGFsbG93ZWQuXG4gICAgdGhpcy52ZXJpZnlTZXR0aW5nc0FyZVVubG9ja2VkKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50U2V0dGluZ3Nba2V5XSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzTW9kaWZpZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGFsbCBldmVudHMgcmVsZXZhbnQgdG8gc2V0dGluZ3Mgb2JqZWN0LiAgVGhpcyBpcyBvbmx5IGEgc2V0dGluZ3NVcGRhdGUgZXZlbnQgY3VycmVudGx5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXk8U2luZ2xlRXZlbnRNYW5hZ2VyPn0gQ29sbGVjdGlvbiBvZiBldmVudCBtYW5hZ2VycyB0byBwYXNzIHRvIGFuIEV2ZW50TGlzdGVuZXJNYW5hZ2VyLlxuICAgKi9cbiAgcHVibGljIGluaXRpYWxpemVFdmVudHMoKTogQXJyYXk8U2luZ2xlRXZlbnRNYW5hZ2VyPiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IG5ldyBBcnJheTxTaW5nbGVFdmVudE1hbmFnZXI+KCk7XG4gICAgbGV0IG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2U7XG5cbiAgICB0cnkge1xuICAgICAgbm90aWZpY2F0aW9uU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8Tm90aWZpY2F0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLk5vdGlmaWNhdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0aGlzIHNlcnZpY2UgcmVnaXN0ZXJlZCwganVzdCByZXR1cm5cbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGNvbnN0IHNldHRpbmdzQ2hhbmdlZEV2ZW50ID0gbmV3IFNpbmdsZUV2ZW50TWFuYWdlckltcGw8U2V0dGluZ3NDaGFuZ2VkRXZlbnQ+KENvbnRyYWN0LlRhYmxlYXVFdmVudFR5cGUuU2V0dGluZ3NDaGFuZ2VkKTtcbiAgICBub3RpZmljYXRpb25TZXJ2aWNlLnJlZ2lzdGVySGFuZGxlcihcbiAgICAgIE5vdGlmaWNhdGlvbklkLlNldHRpbmdzQ2hhbmdlZCxcbiAgICAgICgpID0+IHRydWUsXG4gICAgICAoZXZlbnQ6IFNldHRpbmdzRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5fY3VycmVudFNldHRpbmdzID0gZXZlbnQubmV3U2V0dGluZ3M7XG4gICAgICAgIHNldHRpbmdzQ2hhbmdlZEV2ZW50LnRyaWdnZXJFdmVudCgoKSA9PiBuZXcgU2V0dGluZ3NDaGFuZ2VkRXZlbnQoZXZlbnQubmV3U2V0dGluZ3MpKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJlc3VsdHMucHVzaChzZXR0aW5nc0NoYW5nZWRFdmVudCk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVNldHRpbmdzKHNldHRpbmdzSW5mbzogRXh0ZW5zaW9uU2V0dGluZ3NJbmZvKTogdm9pZCB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihzZXR0aW5nc0luZm8sICdzZXR0aW5nc0luZm8nKTtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKHNldHRpbmdzSW5mby5zZXR0aW5nc1ZhbHVlcywgJ3NldHRpbmdzSW5mby5TZXR0aW5nc1ZhbHVlcycpO1xuXG4gICAgdGhpcy5fY3VycmVudFNldHRpbmdzID0gc2V0dGluZ3NJbmZvLnNldHRpbmdzVmFsdWVzO1xuXG4gICAgLy8gUmVzZXQgdGhlIGlzTW9kaWZpZWQgZmxhZ1xuICAgIHRoaXMuX2lzTW9kaWZpZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGhlbHBlciBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgbG9jYWwgdXBkYXRlIHRvIHRoaXMuY3VycmVudFNldHRpbmdzLlxuICAgKiBDaGVja3MgaWYgYSBjdXJyZW50IHNhdmUgY2FsbCBpcyBzdGlsbCBpbiBwcm9ncmVzcyBhbmQgdGhyb3dzIGFuIGVycm9yIGlmIHNvLlxuICAgKi9cbiAgcHJpdmF0ZSB2ZXJpZnlTZXR0aW5nc0FyZVVubG9ja2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zYXZlSW5Qcm9ncmVzcykge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FcnJvckNvZGVzLlNldHRpbmdTYXZlSW5Qcm9ncmVzcywgU2V0dGluZ3NJbXBsLkFTWU5DX1NBVkVfSU5fUFJPR1JFU1MpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgTW9kZWwgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuXG5leHBvcnQgY29uc3QgVGFibGVhdUJvb2tGb250RmFtaWx5TmFtZSA9ICdUYWJsZWF1IEJvb2snO1xuZXhwb3J0IGNvbnN0IFRhYmxlYXVMaWdodEZvbnRGYW1pbHlOYW1lID0gJ1RhYmxlYXUgTGlnaHQnO1xuZXhwb3J0IGNvbnN0IFRhYmxlYXVSZWd1bGFyRm9udEZhbWlseU5hbWUgPSAnVGFibGVhdSBSZWd1bGFyJztcbmV4cG9ydCBjb25zdCBUYWJsZWF1TWVkaXVtRm9udEZhbWlseU5hbWUgPSAnVGFibGVhdSBNZWRpdW0nO1xuZXhwb3J0IGNvbnN0IFRhYmxlYXVTZW1pYm9sZEZvbnRGYW1pbHlOYW1lID0gJ1RhYmxlYXUgU2VtaWJvbGQnO1xuZXhwb3J0IGNvbnN0IFRhYmxlYXVCb2xkRm9udEZhbWlseU5hbWUgPSAnVGFibGVhdSBCb2xkJztcblxuZXhwb3J0IGNvbnN0IFRhYmxlYXVCb29rRm9udEZhY2VOYW1lID0gJ1RhYmxlYXUgQm9vayc7XG5leHBvcnQgY29uc3QgVGFibGVhdUJvbGRGb250RmFjZU5hbWUgPSAnVGFibGVhdSBCb2xkJztcbmV4cG9ydCBjb25zdCBUYWJsZWF1TGlnaHRGb250RmFjZU5hbWUgPSAnVGFibGVhdSBMaWdodCc7XG5leHBvcnQgY29uc3QgVGFibGVhdU1lZGl1bUZvbnRGYWNlTmFtZSA9ICdUYWJsZWF1IE1lZGl1bSc7XG5leHBvcnQgY29uc3QgVGFibGVhdVJlZ3VsYXJGb250RmFjZU5hbWUgPSAnVGFibGVhdSBSZWd1bGFyJztcbmV4cG9ydCBjb25zdCBUYWJsZWF1U2VtaUJvbGRGb250RmFjZU5hbWUgPSAnVGFibGVhdSBTZW1pIEJvbGQnO1xuXG5leHBvcnQgY29uc3QgU3VwcG9ydGVkVGFibGVhdUZvbnRGYWNlczogTW9kZWxbXSA9IFtcbiAgVGFibGVhdUJvb2tGb250RmFjZU5hbWUsXG4gIFRhYmxlYXVCb2xkRm9udEZhY2VOYW1lLFxuICBUYWJsZWF1TGlnaHRGb250RmFjZU5hbWUsXG4gIFRhYmxlYXVNZWRpdW1Gb250RmFjZU5hbWUsXG4gIFRhYmxlYXVSZWd1bGFyRm9udEZhY2VOYW1lLFxuICBUYWJsZWF1U2VtaUJvbGRGb250RmFjZU5hbWUsXG5dO1xuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEVycm9yQ29kZXMgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGlhbG9nVXBkYXRlRXZlbnQsIE5vdGlmaWNhdGlvbklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEFwaVNlcnZpY2VSZWdpc3RyeSwgTm90aWZpY2F0aW9uU2VydmljZSwgU2VydmljZU5hbWVzLCBUYWJsZWF1RXJyb3IgfSBmcm9tICdAdGFibGVhdS9hcGktc2hhcmVkLWpzJztcbmltcG9ydCB7IEV4dGVuc2lvbnNTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlcy9FeHRlbnNpb25zU2VydmljZU5hbWVzJztcbmltcG9ydCB7IEV4dGVuc2lvbnNSZWdpc3RyeUlkIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5VXRpbCc7XG5pbXBvcnQgeyBVSVNlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9VSVNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgVUlJbXBsIHtcbiAgcHVibGljIGRpc3BsYXlEaWFsb2dBc3luYyh1cmw6IHN0cmluZywgcGF5bG9hZD86IHN0cmluZywgb3B0aW9ucz86IENvbnRyYWN0LkRpYWxvZ09wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHVpU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8VUlTZXJ2aWNlPihFeHRlbnNpb25zU2VydmljZU5hbWVzLlVJU2VydmljZSk7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8Tm90aWZpY2F0aW9uU2VydmljZT4oXG4gICAgICBTZXJ2aWNlTmFtZXMuTm90aWZpY2F0aW9uLFxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdWlTZXJ2aWNlXG4gICAgICAgIC5kaXNwbGF5RGlhbG9nQXN5bmModXJsLCBwYXlsb2FkIHx8ICcnLCBvcHRpb25zKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdW5yZWdpc3RlckZuID0gbm90aWZpY2F0aW9uU2VydmljZS5yZWdpc3RlckhhbmRsZXIoXG4gICAgICAgICAgICBOb3RpZmljYXRpb25JZC5FeHRlbnNpb25EaWFsb2dVcGRhdGUsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIExldCB0aHJvdWdoIGFueSBkaWFsb2cgdXBkYXRlIGV2ZW50XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChldmVudDogRGlhbG9nVXBkYXRlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50LmlzQ2xvc2VFdmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5jbG9zZVBheWxvYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FcnJvckNvZGVzLkludGVybmFsRXJyb3IsICdjbG9zZVBheWxvYWQgaXMgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUoZXZlbnQuY2xvc2VQYXlsb2FkKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLkRpYWxvZ0Nsb3NlZEJ5VXNlciwgJ0V4dGVuc2lvbiBkaWFsb2cgY2xvc2VkIGJ5IHVzZXIuJykpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdW5yZWdpc3RlckZuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZURpYWxvZyhwYXlsb2FkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdWlTZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldChFeHRlbnNpb25zUmVnaXN0cnlJZCkuZ2V0U2VydmljZTxVSVNlcnZpY2U+KEV4dGVuc2lvbnNTZXJ2aWNlTmFtZXMuVUlTZXJ2aWNlKTtcblxuICAgIHVpU2VydmljZS5jbG9zZURpYWxvZyhwYXlsb2FkKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IERhc2hib2FyZExheW91dENoYW5nZURldGFpbHMsIFRhYmxlYXVFdmVudFR5cGUsIFdvcmtib29rRm9ybWF0dGluZyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRMYXlvdXRFdmVudCwgTm90aWZpY2F0aW9uSWQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LFxuICBEYXNoYm9hcmRJbXBsLFxuICBEYXNoYm9hcmRPYmplY3RJbXBsLFxuICBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICBTZXJ2aWNlTmFtZXMsXG4gIFNpbmdsZUV2ZW50TWFuYWdlcixcbiAgU2luZ2xlRXZlbnRNYW5hZ2VySW1wbCxcbiAgV29ya3NoZWV0SW1wbCxcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRMYXlvdXRDaGFuZ2VkRXZlbnQgfSBmcm9tICcuLi9FdmVudHMvRGFzaGJvYXJkTGF5b3V0Q2hhbmdlZEV2ZW50JztcbmltcG9ydCB7IFdvcmtib29rRm9ybWF0dGluZ0NoYW5nZWRFdmVudCB9IGZyb20gJy4uL0V2ZW50cy9Xb3JrYm9va0Zvcm1hdHRpbmdDaGFuZ2VkRXZlbnQnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQgfSBmcm9tICcuLi9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnlVdGlsJztcbmltcG9ydCB7IERhc2hib2FyZE9iamVjdCB9IGZyb20gJy4vRGFzaGJvYXJkT2JqZWN0JztcbmltcG9ydCB7IFNoZWV0IH0gZnJvbSAnLi9TaGVldCc7XG5pbXBvcnQgeyBXb3Jrc2hlZXQgfSBmcm9tICcuL1dvcmtzaGVldCc7XG5cbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmQgZXh0ZW5kcyBTaGVldCBpbXBsZW1lbnRzIENvbnRyYWN0LkV4dGVuc2lvbkRhc2hib2FyZCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kYXNoYm9hcmRJbXBsOiBEYXNoYm9hcmRJbXBsKSB7XG4gICAgc3VwZXIoX2Rhc2hib2FyZEltcGwpO1xuICAgIF9kYXNoYm9hcmRJbXBsLmluaXRpYWxpemVXaXRoUHVibGljSW50ZXJmYWNlcygpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUV2ZW50cygpLmZvckVhY2goKGUpID0+IHRoaXMuYWRkTmV3RXZlbnRUeXBlKGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgd29ya3NoZWV0cygpOiBBcnJheTxDb250cmFjdC5FeHRlbnNpb25Xb3Jrc2hlZXQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkSW1wbC53b3Jrc2hlZXRzSW1wbC5tYXAoKHdvcmtzaGVldEltcGw6IFdvcmtzaGVldEltcGwpID0+IHtcbiAgICAgIHJldHVybiBuZXcgV29ya3NoZWV0KHdvcmtzaGVldEltcGwpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBvYmplY3RzKCk6IEFycmF5PENvbnRyYWN0LkV4dGVuc2lvbkRhc2hib2FyZE9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXNoYm9hcmRJbXBsLm9iamVjdHMubWFwKChkYXNoYm9hcmRPYmplY3RJbXBsOiBEYXNoYm9hcmRPYmplY3RJbXBsKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IERhc2hib2FyZE9iamVjdChkYXNoYm9hcmRPYmplY3RJbXBsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRab25lVmlzaWJpbGl0eUFzeW5jKHpvbmVWaXNpYmlsaXR5TWFwOiBDb250cmFjdC5ab25lVmlzaWJpbGl0eU1hcCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXNoYm9hcmRJbXBsLnNldERhc2hib2FyZE9iamVjdFZpc2liaWxpdHlBc3luYyh6b25lVmlzaWJpbGl0eU1hcCk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eUFzeW5jKGRhc2hib2FyZE9iamVjdFZpc2liaWxpdHlNYXA6IENvbnRyYWN0LkRhc2hib2FyZE9iamVjdFZpc2liaWxpdHlNYXApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkSW1wbC5zZXREYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5QXN5bmMoZGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eU1hcCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGFzaGJvYXJkT2JqZWN0QnlJZChkYXNoYm9hcmRPYmplY3RJZDogbnVtYmVyKTogRGFzaGJvYXJkT2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB6b25lID0gdGhpcy5fZGFzaGJvYXJkSW1wbC5nZXREYXNoYm9hcmRPYmplY3RCeUlkKGRhc2hib2FyZE9iamVjdElkKTtcbiAgICByZXR1cm4gem9uZSAmJiBuZXcgRGFzaGJvYXJkT2JqZWN0KHpvbmUpO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemVFdmVudHMoKTogQXJyYXk8U2luZ2xlRXZlbnRNYW5hZ2VyPiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IG5ldyBBcnJheTxTaW5nbGVFdmVudE1hbmFnZXI+KCk7XG5cbiAgICAvLyBJbml0aWFsaXppbmcgZXZlbnRzIGFuZCByZWdpc3RlcmluZyBub3RpZmljYXRpb24gc2VydmljZVxuICAgIGxldCBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIG5vdGlmaWNhdGlvblNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPE5vdGlmaWNhdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5Ob3RpZmljYXRpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdGhpcyBzZXJ2aWNlIHJlZ2lzdGVyZWQsIGp1c3QgcmV0dXJuIChhbGxvd3MgdW5pdCB0ZXN0aW5nIHdpdGhvdXQgTm90aWZpY2F0aW9uU2VydmljZSBtb2NrKVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgY29uc3QgZGFzaGJvYXJkTGF5b3V0Q2hhbmdlZEV2ZW50ID0gbmV3IFNpbmdsZUV2ZW50TWFuYWdlckltcGw8RGFzaGJvYXJkTGF5b3V0Q2hhbmdlZEV2ZW50PihUYWJsZWF1RXZlbnRUeXBlLkRhc2hib2FyZExheW91dENoYW5nZWQpO1xuICAgIG5vdGlmaWNhdGlvblNlcnZpY2UucmVnaXN0ZXJIYW5kbGVyKFxuICAgICAgTm90aWZpY2F0aW9uSWQuRGFzaGJvYXJkTGF5b3V0Q2hhbmdlZCxcbiAgICAgICgpID0+IHRydWUsXG4gICAgICAoZXZlbnQ6IERhc2hib2FyZExheW91dEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGRhc2hib2FyZE9iamVjdENoYW5nZXM6IERhc2hib2FyZExheW91dENoYW5nZURldGFpbHMgPSB0aGlzLl9kYXNoYm9hcmRJbXBsLnVwZGF0ZVpvbmVzKGV2ZW50LnpvbmVzKTtcbiAgICAgICAgZGFzaGJvYXJkTGF5b3V0Q2hhbmdlZEV2ZW50LnRyaWdnZXJFdmVudCgoKSA9PiBuZXcgRGFzaGJvYXJkTGF5b3V0Q2hhbmdlZEV2ZW50KGRhc2hib2FyZE9iamVjdENoYW5nZXMpKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJlc3VsdHMucHVzaChkYXNoYm9hcmRMYXlvdXRDaGFuZ2VkRXZlbnQpO1xuXG4gICAgY29uc3Qgd29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZEV2ZW50ID0gbmV3IFNpbmdsZUV2ZW50TWFuYWdlckltcGw8V29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZEV2ZW50PihcbiAgICAgIFRhYmxlYXVFdmVudFR5cGUuV29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZCxcbiAgICApO1xuXG4gICAgbm90aWZpY2F0aW9uU2VydmljZS5yZWdpc3RlckhhbmRsZXIoXG4gICAgICBOb3RpZmljYXRpb25JZC5Xb3JrYm9va0Zvcm1hdHRpbmdDaGFuZ2VkLFxuICAgICAgKCkgPT4gdHJ1ZSxcbiAgICAgIChldmVudEZvcm1hdHRpbmc6IFdvcmtib29rRm9ybWF0dGluZykgPT4ge1xuICAgICAgICB3b3JrYm9va0Zvcm1hdHRpbmdDaGFuZ2VkRXZlbnQudHJpZ2dlckV2ZW50KCgpID0+IG5ldyBXb3JrYm9va0Zvcm1hdHRpbmdDaGFuZ2VkRXZlbnQoZXZlbnRGb3JtYXR0aW5nKSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXN1bHRzLnB1c2god29ya2Jvb2tGb3JtYXR0aW5nQ2hhbmdlZEV2ZW50KTtcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgcHVibGljIG1vdmVBbmRSZXNpemVEYXNoYm9hcmRPYmplY3RzQXN5bmMoXG4gICAgZGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlQXJyYXk6IENvbnRyYWN0LkRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZUFycmF5LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkSW1wbC5tb3ZlQW5kUmVzaXplRGFzaGJvYXJkT2JqZWN0c0FzeW5jKGRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZUFycmF5KTtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYXlBbmltYXRpb25Bc3luYyhyZXBsYXlTcGVlZDogQ29udHJhY3QuUmVwbGF5U3BlZWRUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZEltcGwucmVwbGF5QW5pbWF0aW9uQXN5bmMocmVwbGF5U3BlZWQpO1xuICB9XG5cbiAgcHVibGljIGdldEZpbHRlcnNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkZpbHRlcj4+IHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkSW1wbC5nZXRGaWx0ZXJzQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUZpbHRlckFzeW5jKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogQXJyYXk8c3RyaW5nPixcbiAgICB1cGRhdGVUeXBlOiBDb250cmFjdC5GaWx0ZXJVcGRhdGVUeXBlLFxuICAgIG9wdGlvbnM6IENvbnRyYWN0LkZpbHRlck9wdGlvbnMsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZEltcGwuYXBwbHlGaWx0ZXJBc3luYyhmaWVsZE5hbWUsIHZhbHVlcywgdXBkYXRlVHlwZSwgb3B0aW9ucyk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRPYmplY3RJbXBsIH0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmQgfSBmcm9tICcuL0Rhc2hib2FyZCc7XG5pbXBvcnQgeyBXb3Jrc2hlZXQgfSBmcm9tICcuL1dvcmtzaGVldCc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRhc2hib2FyZCBvYmplY3RzIC0gdGhlIHpvbmVzIGluIGEgZGFzaGJvYXJkLlxuICovXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkT2JqZWN0IGltcGxlbWVudHMgQ29udHJhY3QuRXh0ZW5zaW9uRGFzaGJvYXJkT2JqZWN0IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Rhc2hib2FyZE9iamVjdEltcGw6IERhc2hib2FyZE9iamVjdEltcGwpIHt9XG5cbiAgcHVibGljIGdldCBkYXNoYm9hcmQoKTogQ29udHJhY3QuRXh0ZW5zaW9uRGFzaGJvYXJkIHtcbiAgICByZXR1cm4gbmV3IERhc2hib2FyZCh0aGlzLl9kYXNoYm9hcmRPYmplY3RJbXBsLmRhc2hib2FyZEltcGwpO1xuICB9XG5cbiAgcHVibGljIGdldCB0eXBlKCk6IENvbnRyYWN0LkRhc2hib2FyZE9iamVjdFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9kYXNoYm9hcmRPYmplY3RJbXBsLnR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBvc2l0aW9uKCk6IENvbnRyYWN0LlBvaW50IHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkT2JqZWN0SW1wbC5wb3NpdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2l6ZSgpOiBDb250cmFjdC5TaXplIHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkT2JqZWN0SW1wbC5zaXplO1xuICB9XG5cbiAgcHVibGljIGdldCB3b3Jrc2hlZXQoKTogQ29udHJhY3QuRXh0ZW5zaW9uV29ya3NoZWV0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5fZGFzaGJvYXJkT2JqZWN0SW1wbC53b3Jrc2hlZXRJbXBsKSB7XG4gICAgICByZXR1cm4gbmV3IFdvcmtzaGVldCh0aGlzLl9kYXNoYm9hcmRPYmplY3RJbXBsLndvcmtzaGVldEltcGwpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZE9iamVjdEltcGwubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNGbG9hdGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkT2JqZWN0SW1wbC5pc0Zsb2F0aW5nO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rhc2hib2FyZE9iamVjdEltcGwuaXNWaXNpYmxlO1xuICB9XG5cbiAgcHVibGljIGdldCBpZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kYXNoYm9hcmRPYmplY3RJbXBsLmlkO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uSWQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LFxuICBFcnJvckhlbHBlcnMsXG4gIEV2ZW50TGlzdGVuZXJNYW5hZ2VyLFxuICBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICBQYXJhbWV0ZXJJbXBsLFxuICBTZXJ2aWNlTmFtZXMsXG4gIFNpbmdsZUV2ZW50TWFuYWdlcixcbiAgU2luZ2xlRXZlbnRNYW5hZ2VySW1wbCxcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJDaGFuZ2VkRXZlbnQgfSBmcm9tICcuLi9FdmVudHMvUGFyYW1ldGVyQ2hhbmdlZEV2ZW50JztcbmltcG9ydCB7IEV4dGVuc2lvbnNSZWdpc3RyeUlkIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5VXRpbCc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFBhcmFtZXRlciBjb250cmFjdC4gQ2FsbHMgZG93biB0byB0aGUgaW1wbFxuICogY2xhc3MgZm9yIGFsbW9zdCBhbGwgb2YgdGhlIHdvcmsgaXQgZG9lcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcmFtZXRlciBleHRlbmRzIEV2ZW50TGlzdGVuZXJNYW5hZ2VyIGltcGxlbWVudHMgQ29udHJhY3QuUGFyYW1ldGVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyYW1ldGVySW1wbDogUGFyYW1ldGVySW1wbCwgc2hlZXQ6IENvbnRyYWN0LkV4dGVuc2lvblNoZWV0KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIEluaXRpYWxpemUgb3VyIGV2ZW50IGhhbmRsaW5nIGZvciB0aGlzIGNsYXNzXG4gICAgdGhpcy5pbml0aWFsaXplRXZlbnRzKHNoZWV0KS5mb3JFYWNoKChlKSA9PiB0aGlzLmFkZE5ld0V2ZW50VHlwZShlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJJbXBsLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBDb250cmFjdC5EYXRhVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnBhcmFtZXRlckltcGwuY3VycmVudFZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXRhVHlwZSgpOiBDb250cmFjdC5EYXRhVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVySW1wbC5kYXRhVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWxsb3dhYmxlVmFsdWVzKCk6IENvbnRyYWN0LlBhcmFtZXRlckRvbWFpblJlc3RyaWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJJbXBsLmFsbG93YWJsZVZhbHVlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJJbXBsLmlkO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVZhbHVlQXN5bmMobmV3VmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVmFsdWU+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJJbXBsLmNoYW5nZVZhbHVlQXN5bmMobmV3VmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2Qgd2hpY2ggZ29lcyB0aHJvdWdoIGFuZCByZWdpc3RlcnMgZWFjaCBldmVudCB0eXBlIHRoaXMgaW1wbCBrbm93cyBhYm91dFxuICAgKiB3aXRoIHRoZSBOb3RpZmljYXRpb25TZXJ2aWNlLiBJdCByZXR1cm5zIGFuIGFycmF5IG9mIFNpbmdsZUV2ZW50TWFuYWdlciBvYmplY3RzIHdoaWNoXG4gICAqIGNhbiB0aGVuIGJlIHBhc3NlZCB0byBhbiBFdmVudExpc3RlbmVyTWFuYWdlciB0byBoYW5kbGUgdXNlciByZWdpc3RyYXRpb24gLyB1bnJlZ2lzdHJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNoZWV0IFRoZSBzaGVldCBvYmplY3Qgd2hpY2ggd2lsbCBiZSBpbmNsdWRlZCB3aXRoIHRoZSBldmVudCBub3RpZmljYXRpb25zXG4gICAqIEByZXR1cm5zIHtBcnJheTxTaW5nbGVFdmVudE1hbmFnZXI+fSBDb2xsZWN0aW9uIG9mIGV2ZW50IG1hbmFnZXJzIHRvIHBhc3MgdG8gYW4gRXZlbnRMaXN0ZW5lck1hbmFnZXJcbiAgICovXG4gIHB1YmxpYyBpbml0aWFsaXplRXZlbnRzKHNoZWV0OiBDb250cmFjdC5FeHRlbnNpb25TaGVldCk6IEFycmF5PFNpbmdsZUV2ZW50TWFuYWdlcj4ge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlJbnRlcm5hbFZhbHVlKHNoZWV0LCAnc2hlZXQnKTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgQXJyYXk8U2luZ2xlRXZlbnRNYW5hZ2VyPigpO1xuICAgIGxldCBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIG5vdGlmaWNhdGlvblNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPE5vdGlmaWNhdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5Ob3RpZmljYXRpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdGhpcyBzZXJ2aWNlIHJlZ2lzdGVyZWQsIGp1c3QgcmV0dXJuXG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIGFsbCBvZiB0aGUgZXZlbnQgbWFuYWdlcnMgd2UnbGwgbmVlZCAob25lIGZvciBlYWNoIGV2ZW50IHR5cGUpXG4gICAgY29uc3QgcGFyYW1ldGVyRXZlbnQgPSBuZXcgU2luZ2xlRXZlbnRNYW5hZ2VySW1wbDxQYXJhbWV0ZXJDaGFuZ2VkRXZlbnQ+KENvbnRyYWN0LlRhYmxlYXVFdmVudFR5cGUuUGFyYW1ldGVyQ2hhbmdlZCk7XG4gICAgbm90aWZpY2F0aW9uU2VydmljZS5yZWdpc3RlckhhbmRsZXIoXG4gICAgICBOb3RpZmljYXRpb25JZC5QYXJhbWV0ZXJDaGFuZ2VkLFxuICAgICAgKG1vZGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IG1vZGVsIGFzIHN0cmluZztcbiAgICAgICAgcmV0dXJuIGZpZWxkTmFtZSA9PT0gdGhpcy5wYXJhbWV0ZXJJbXBsLmlkO1xuICAgICAgfSxcbiAgICAgIChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICBwYXJhbWV0ZXJFdmVudC50cmlnZ2VyRXZlbnQoKCkgPT4gbmV3IFBhcmFtZXRlckNoYW5nZWRFdmVudChmaWVsZE5hbWUsIHNoZWV0KSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXN1bHRzLnB1c2gocGFyYW1ldGVyRXZlbnQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFdmVudExpc3RlbmVyTWFuYWdlciwgU2hlZXRJbXBsLCBUYWJsZWF1RXJyb3IgfSBmcm9tICdAdGFibGVhdS9hcGktc2hhcmVkLWpzJztcbmltcG9ydCB7IFBhcmFtZXRlciB9IGZyb20gJy4vUGFyYW1ldGVyJztcblxuZXhwb3J0IGNsYXNzIFNoZWV0IGV4dGVuZHMgRXZlbnRMaXN0ZW5lck1hbmFnZXIgaW1wbGVtZW50cyBDb250cmFjdC5FeHRlbnNpb25TaGVldCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zaGVldEltcGw6IFNoZWV0SW1wbCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2hlZXRJbXBsLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNoZWV0VHlwZSgpOiBDb250cmFjdC5TaGVldFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zaGVldEltcGwuc2hlZXRUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCBzaXplKCk6IENvbnRyYWN0LlNpemUge1xuICAgIGlmICh0aGlzLmlzVmFsaWRTaXplKHRoaXMuX3NoZWV0SW1wbC5zaXplKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NoZWV0SW1wbC5zaXplO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbXBsZW1lbnRhdGlvbkVycm9yLCAnU2l6ZSBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZFNpemUoc2l6ZTogYW55KTogc2l6ZSBpcyBDb250cmFjdC5TaXplIHtcbiAgICBjb25zdCB0ZXN0U2l6ZSA9IHNpemUgYXMgQ29udHJhY3QuU2l6ZTtcbiAgICBpZiAodGVzdFNpemUud2lkdGggIT09IHVuZGVmaW5lZCAmJiB0ZXN0U2l6ZS5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGZpbmRQYXJhbWV0ZXJBc3luYyhwYXJhbWV0ZXJOYW1lOiBzdHJpbmcpOiBQcm9taXNlPENvbnRyYWN0LlBhcmFtZXRlciB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9zaGVldEltcGwuZmluZFBhcmFtZXRlckFzeW5jKHBhcmFtZXRlck5hbWUpLnRoZW4oKHBhcmFtZXRlckltcGwpID0+IHtcbiAgICAgIGlmIChwYXJhbWV0ZXJJbXBsKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxDb250cmFjdC5QYXJhbWV0ZXI+KChyZXNvbHZlKSA9PiByZXNvbHZlKG5ldyBQYXJhbWV0ZXIocGFyYW1ldGVySW1wbCwgdGhpcykpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx1bmRlZmluZWQ+KChyZXNvbHZlKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFBhcmFtZXRlcnNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LlBhcmFtZXRlcj4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2hlZXRJbXBsLmdldFBhcmFtZXRlcnNBc3luYygpLnRoZW4oKHBhcmFtZXRlcnNJbXBsKSA9PiB7XG4gICAgICByZXR1cm4gcGFyYW1ldGVyc0ltcGwubWFwKChwYXJhbWV0ZXJJbXBsKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUGFyYW1ldGVyKHBhcmFtZXRlckltcGwsIHRoaXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFeHRlbnNpb25Xb3JrYm9va0ltcGwgfSBmcm9tICcuLi9JbXBsL0V4dGVuc2lvbldvcmtib29rSW1wbCc7XG5cbmV4cG9ydCBjbGFzcyBXb3JrYm9vayBpbXBsZW1lbnRzIENvbnRyYWN0LkV4dGVuc2lvbldvcmtib29rIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX3dvcmtib29rSW1wbDogRXh0ZW5zaW9uV29ya2Jvb2tJbXBsKSB7fVxuXG4gIHB1YmxpYyBnZXRBbGxEYXRhU291cmNlc0FzeW5jKCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuRGF0YVNvdXJjZT4+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya2Jvb2tJbXBsLmdldEFsbERhdGFTb3VyY2VzQXN5bmMoKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IENvbHVtbiwgRmlsdGVyVXBkYXRlVHlwZSwgU2VsZWN0aW9uVXBkYXRlVHlwZSwgVGFibGVhdUV2ZW50VHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBGaWx0ZXJFdmVudCwgTm90aWZpY2F0aW9uSWQsIFZpc3VhbElkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeSxcbiAgTm90aWZpY2F0aW9uU2VydmljZSxcbiAgU2VydmljZU5hbWVzLFxuICBTaW5nbGVFdmVudE1hbmFnZXIsXG4gIFNpbmdsZUV2ZW50TWFuYWdlckltcGwsXG4gIFRhYmxlYXVFcnJvcixcbiAgV29ya3NoZWV0SW1wbCxcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBGaWx0ZXJDaGFuZ2VkRXZlbnQgfSBmcm9tICcuLi9FdmVudHMvRmlsdGVyQ2hhbmdlZEV2ZW50JztcbmltcG9ydCB7IE1hcmtzU2VsZWN0ZWRFdmVudCB9IGZyb20gJy4uL0V2ZW50cy9NYXJrc1NlbGVjdGVkRXZlbnQnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQgfSBmcm9tICcuLi9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnlVdGlsJztcbmltcG9ydCB7IERhc2hib2FyZCB9IGZyb20gJy4vRGFzaGJvYXJkJztcbmltcG9ydCB7IFNoZWV0IH0gZnJvbSAnLi9TaGVldCc7XG5cbmV4cG9ydCBjbGFzcyBXb3Jrc2hlZXQgZXh0ZW5kcyBTaGVldCBpbXBsZW1lbnRzIENvbnRyYWN0LkV4dGVuc2lvbldvcmtzaGVldCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3dvcmtzaGVldEltcGw6IFdvcmtzaGVldEltcGwpIHtcbiAgICBzdXBlcihfd29ya3NoZWV0SW1wbCk7XG5cbiAgICAvLyBDYWxsIHRvIGluaXRpYWxpemUgZXZlbnRzIGFuZCB0aGVuIGNhbGwgZG93biB0byB0aGUgZXZlbnQgbGlzdGVuZXIgbWFuYWdlciB0byBoYW5kbGUgdGhpbmdzXG4gICAgdGhpcy5pbml0aWFsaXplRXZlbnRzKCkuZm9yRWFjaCgoZSkgPT4gdGhpcy5hZGROZXdFdmVudFR5cGUoZSkpO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnREYXNoYm9hcmQoKTogQ29udHJhY3QuRXh0ZW5zaW9uRGFzaGJvYXJkIHtcbiAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gZm9yIEV4dGVuc2lvbnMgaWYgdGhlIERhc2hib2FyZEltcGxzIGFyZSBjcmVhdGVkIGNvcnJlY3RseVxuICAgIGlmICh0aGlzLl93b3Jrc2hlZXRJbXBsLnBhcmVudERhc2hib2FyZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LlNoYXJlZEVycm9yQ29kZXMuSW1wbGVtZW50YXRpb25FcnJvciwgYFBhcmVudCBkYXNoYm9hcmQgbm90IGltcGxlbWVudGVkYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEYXNoYm9hcmQodGhpcy5fd29ya3NoZWV0SW1wbC5wYXJlbnREYXNoYm9hcmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2Qgd2hpY2ggZ29lcyB0aHJvdWdoIGFuZCByZWdpc3RlcnMgZWFjaCBldmVudCB0eXBlIHRoaXMgaW1wbCBrbm93cyBhYm91dFxuICAgKiB3aXRoIHRoZSBOb3RpZmljYXRpb25TZXJ2aWNlLiBJdCByZXR1cm5zIGFuIGFycmF5IG9mIFNpbmdsZUV2ZW50TWFuYWdlciBvYmplY3RzIHdoaWNoXG4gICAqIGNhbiB0aGVuIGJlIHBhc3NlZCB0byBhbiBFdmVudExpc3RlbmVyTWFuYWdlciB0byBoYW5kbGUgdXNlciByZWdpc3RyYXRpb24gLyB1bnJlZ2lzdHJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtXb3Jrc2hlZXR9IHdvcmtzaGVldCBUaGUgd29ya3NoZWV0IG9iamVjdCB3aGljaCB3aWxsIGJlIGluY2x1ZGVkIHdpdGggdGhlIGV2ZW50IG5vdGlmaWNhdGlvbnNcbiAgICogQHJldHVybnMge0FycmF5PFNpbmdsZUV2ZW50TWFuYWdlcj59IENvbGxlY3Rpb24gb2YgZXZlbnQgbWFuYWdlcnMgdG8gcGFzcyB0byBhbiBFdmVudExpc3RlbmVyTWFuYWdlclxuICAgKi9cbiAgcHVibGljIGluaXRpYWxpemVFdmVudHMoKTogQXJyYXk8U2luZ2xlRXZlbnRNYW5hZ2VyPiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IG5ldyBBcnJheTxTaW5nbGVFdmVudE1hbmFnZXI+KCk7XG4gICAgbGV0IG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2U7XG5cbiAgICB0cnkge1xuICAgICAgbm90aWZpY2F0aW9uU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8Tm90aWZpY2F0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLk5vdGlmaWNhdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0aGlzIHNlcnZpY2UgcmVnaXN0ZXJlZCwganVzdCByZXR1cm5cbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgYWxsIG9mIHRoZSBldmVudCBtYW5hZ2VycyB3ZSdsbCBuZWVkIChvbmUgZm9yIGVhY2ggZXZlbnQgdHlwZSlcbiAgICBjb25zdCBtYXJrc0V2ZW50ID0gbmV3IFNpbmdsZUV2ZW50TWFuYWdlckltcGw8TWFya3NTZWxlY3RlZEV2ZW50PihUYWJsZWF1RXZlbnRUeXBlLk1hcmtTZWxlY3Rpb25DaGFuZ2VkKTtcbiAgICBub3RpZmljYXRpb25TZXJ2aWNlLnJlZ2lzdGVySGFuZGxlcihcbiAgICAgIE5vdGlmaWNhdGlvbklkLlNlbGVjdGVkTWFya3NDaGFuZ2VkLFxuICAgICAgKG1vZGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHZpc3VhbElkID0gbW9kZWwgYXMgVmlzdWFsSWQ7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc3VhbElkc0FyZUVxdWFsKHZpc3VhbElkLCB0aGlzLl93b3Jrc2hlZXRJbXBsLnZpc3VhbElkKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiBtYXJrc0V2ZW50LnRyaWdnZXJFdmVudCgoKSA9PiBuZXcgTWFya3NTZWxlY3RlZEV2ZW50KHRoaXMpKSxcbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyRXZlbnQgPSBuZXcgU2luZ2xlRXZlbnRNYW5hZ2VySW1wbDxGaWx0ZXJDaGFuZ2VkRXZlbnQ+KFRhYmxlYXVFdmVudFR5cGUuRmlsdGVyQ2hhbmdlZCk7XG4gICAgbm90aWZpY2F0aW9uU2VydmljZS5yZWdpc3RlckhhbmRsZXIoXG4gICAgICBOb3RpZmljYXRpb25JZC5GaWx0ZXJDaGFuZ2VkLFxuICAgICAgKG1vZGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlckV2ZW50UmVzcG9uc2UgPSBtb2RlbCBhcyBGaWx0ZXJFdmVudDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwudmlzdWFsSWQud29ya3NoZWV0ID09PSBmaWx0ZXJFdmVudFJlc3BvbnNlLnZpc3VhbElkLndvcmtzaGVldDtcbiAgICAgIH0sXG4gICAgICAoZXZlbnQ6IEZpbHRlckV2ZW50KSA9PiB7XG4gICAgICAgIGZpbHRlckV2ZW50LnRyaWdnZXJFdmVudCgoKSA9PiBuZXcgRmlsdGVyQ2hhbmdlZEV2ZW50KHRoaXMsIGV2ZW50LmZpZWxkTmFtZSwgZXZlbnQuZmllbGRJZCkpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmVzdWx0cy5wdXNoKG1hcmtzRXZlbnQpO1xuICAgIHJlc3VsdHMucHVzaChmaWx0ZXJFdmVudCk7XG5cbiAgICAvLyBUT0RPIC0gb3RoZXIgZXZlbnQgdHlwZXNcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgcHVibGljIGFwcGx5RmlsdGVyQXN5bmMoXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgdmFsdWVzOiBBcnJheTxzdHJpbmc+LFxuICAgIHVwZGF0ZVR5cGU6IEZpbHRlclVwZGF0ZVR5cGUsXG4gICAgb3B0aW9uczogQ29udHJhY3QuRmlsdGVyT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC5hcHBseUZpbHRlckFzeW5jKGZpZWxkTmFtZSwgdmFsdWVzLCB1cGRhdGVUeXBlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseVJhbmdlRmlsdGVyQXN5bmMoZmllbGROYW1lOiBzdHJpbmcsIGZpbHRlck9wdGlvbnM6IENvbnRyYWN0LlJhbmdlRmlsdGVyT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuYXBwbHlSYW5nZUZpbHRlckFzeW5jKGZpZWxkTmFtZSwgZmlsdGVyT3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlIaWVyYXJjaGljYWxGaWx0ZXJBc3luYyhcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IEFycmF5PHN0cmluZz4sXG4gICAgdXBkYXRlVHlwZTogQ29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZSxcbiAgICBvcHRpb25zOiBDb250cmFjdC5GaWx0ZXJPcHRpb25zLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmFwcGx5SGllcmFyY2hpY2FsRmlsdGVyQXN5bmMoZmllbGROYW1lLCB2YWx1ZXMsIHVwZGF0ZVR5cGUsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFwcGx5UmVsYXRpdmVEYXRlRmlsdGVyQXN5bmMoZmllbGROYW1lOiBzdHJpbmcsIG9wdGlvbnM6IENvbnRyYWN0LlJlbGF0aXZlRGF0ZUZpbHRlck9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmFwcGx5UmVsYXRpdmVEYXRlRmlsdGVyQXN5bmMoZmllbGROYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckZpbHRlckFzeW5jKGZpZWxkTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC5jbGVhckZpbHRlckFzeW5jKGZpZWxkTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YVNvdXJjZXNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkRhdGFTb3VyY2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0RGF0YVNvdXJjZXNBc3luYygpO1xuICB9XG5cbiAgcHVibGljIGdldEZpbHRlcnNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkZpbHRlcj4+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC5nZXRGaWx0ZXJzQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZE1hcmtzQXN5bmMoKTogUHJvbWlzZTxDb250cmFjdC5NYXJrc0NvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC5nZXRTZWxlY3RlZE1hcmtzQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRIaWdobGlnaHRlZE1hcmtzQXN5bmMoKTogUHJvbWlzZTxDb250cmFjdC5NYXJrc0NvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC5nZXRIaWdobGlnaHRlZE1hcmtzQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdW1tYXJ5RGF0YUFzeW5jKG9wdGlvbnM6IENvbnRyYWN0LkdldFN1bW1hcnlEYXRhT3B0aW9ucyk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0U3VtbWFyeURhdGFBc3luYyhvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdW1tYXJ5RGF0YVJlYWRlckFzeW5jKHBhZ2VSb3dDb3VudDogbnVtYmVyLCBvcHRpb25zOiBDb250cmFjdC5HZXRTdW1tYXJ5RGF0YU9wdGlvbnMpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZVJlYWRlcj4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmdldFN1bW1hcnlEYXRhUmVhZGVyQXN5bmMocGFnZVJvd0NvdW50LCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdW1tYXJ5Q29sdW1uc0luZm9Bc3luYygpOiBQcm9taXNlPEFycmF5PENvbHVtbj4+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC5nZXRTdW1tYXJ5Q29sdW1uc0luZm9Bc3luYygpO1xuICB9XG5cbiAgcHVibGljIGdldFVuZGVybHlpbmdEYXRhQXN5bmMob3B0aW9uczogQ29udHJhY3QuR2V0VW5kZXJseWluZ0RhdGFPcHRpb25zKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnV29ya3NoZWV0LmdldFVuZGVybHlpbmdEYXRhQXN5bmMgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnICtcbiAgICAgICAgJ1dvcmtzaGVldC5nZXRVbmRlcmx5aW5nVGFibGVzQXN5bmMgYW5kIFdvcmtzaGVldC5nZXRVbmRlcmx5aW5nVGFibGVEYXRhQXN5bmMnLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0VW5kZXJseWluZ0RhdGFBc3luYyhvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVbmRlcmx5aW5nVGFibGVzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5Mb2dpY2FsVGFibGU+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0VW5kZXJseWluZ1RhYmxlc0FzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5kZXJseWluZ1RhYmxlRGF0YUFzeW5jKGxvZ2ljYWxUYWJsZUlkOiBzdHJpbmcsIG9wdGlvbnM6IENvbnRyYWN0LkdldFVuZGVybHlpbmdEYXRhT3B0aW9ucyk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0VW5kZXJseWluZ1RhYmxlRGF0YUFzeW5jKGxvZ2ljYWxUYWJsZUlkLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVbmRlcmx5aW5nVGFibGVEYXRhUmVhZGVyQXN5bmMoXG4gICAgbG9naWNhbFRhYmxlSWQ6IHN0cmluZyxcbiAgICBwYWdlUm93Q291bnQ6IG51bWJlcixcbiAgICBvcHRpb25zOiBDb250cmFjdC5HZXRVbmRlcmx5aW5nRGF0YU9wdGlvbnMsXG4gICk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlUmVhZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuZ2V0VW5kZXJseWluZ1RhYmxlRGF0YVJlYWRlckFzeW5jKGxvZ2ljYWxUYWJsZUlkLCBwYWdlUm93Q291bnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyU2VsZWN0ZWRNYXJrc0FzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmNsZWFyU2VsZWN0ZWRNYXJrc0FzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0TWFya3NCeUlEQXN5bmMobWFya3NJbmZvOiBBcnJheTxDb250cmFjdC5NYXJrSW5mbz4sIHVwZGF0ZVR5cGU6IFNlbGVjdGlvblVwZGF0ZVR5cGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbC5zZWxlY3RNYXJrc0J5SWRBc3luYyhtYXJrc0luZm8sIHVwZGF0ZVR5cGUpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdE1hcmtzQnlWYWx1ZUFzeW5jKHNlbGVjdGlvbnM6IEFycmF5PENvbnRyYWN0LlNlbGVjdGlvbkNyaXRlcmlhPiwgc2VsZWN0aW9uVXBkYXRlVHlwZTogU2VsZWN0aW9uVXBkYXRlVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLnNlbGVjdE1hcmtzQnlWYWx1ZUFzeW5jKHNlbGVjdGlvbnMsIHNlbGVjdGlvblVwZGF0ZVR5cGUpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdE1hcmtzQnlJZEFzeW5jKHNlbGVjdGlvbnM6IEFycmF5PENvbnRyYWN0Lk1hcmtJbmZvPiwgc2VsZWN0aW9uVXBkYXRlVHlwZTogU2VsZWN0aW9uVXBkYXRlVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLnNlbGVjdE1hcmtzQnlJZEFzeW5jKHNlbGVjdGlvbnMsIHNlbGVjdGlvblVwZGF0ZVR5cGUpO1xuICB9XG5cbiAgcHVibGljIGFubm90YXRlTWFya0FzeW5jKG1hcms6IENvbnRyYWN0Lk1hcmtJbmZvLCBhbm5vdGF0aW9uVGV4dDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtzaGVldEltcGwuYW5ub3RhdGVNYXJrQXN5bmMobWFyaywgYW5ub3RhdGlvblRleHQpO1xuICB9XG5cbiAgcHVibGljIGdldEFubm90YXRpb25zQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5Bbm5vdGF0aW9uPj4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLmdldEFubm90YXRpb25zQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVBbm5vdGF0aW9uQXN5bmMoYW5ub3RhdGlvbjogQ29udHJhY3QuQW5ub3RhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRJbXBsLnJlbW92ZUFubm90YXRpb25Bc3luYyhhbm5vdGF0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgdmlzdWFsSWRzQXJlRXF1YWwoYTogVmlzdWFsSWQsIGI6IFZpc3VhbElkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGEgJiZcbiAgICAgIGIgJiZcbiAgICAgIGEud29ya3NoZWV0ID09PSBiLndvcmtzaGVldCAmJlxuICAgICAgYS5kYXNoYm9hcmQgPT09IGIuZGFzaGJvYXJkICYmXG4gICAgICBhLnN0b3J5Ym9hcmQgPT09IGIuc3Rvcnlib2FyZCAmJlxuICAgICAgYS5zdG9yeVBvaW50SUQgPT09IGIuc3RvcnlQb2ludElEXG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgRGFzaGJvYXJkQ29udGVudCBuYW1lc3BhY2UuXG4gKiBUaGlzIGRvZXMgbm90IGZvbGxvdyB0aGUgSW1wbCBwYXR0ZXJuIGFzIERhc2hib2FyZENvbnRlbnQgaXNcbiAqIGN1cnJlbnRseSBqdXN0IGEgKHNpbmdsZSkgcHJvcGVydHkgYmFnLlxuICovXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQ29udGVudCBpbXBsZW1lbnRzIENvbnRyYWN0LkRhc2hib2FyZENvbnRlbnQge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfZGFzaGJvYXJkOiBDb250cmFjdC5FeHRlbnNpb25EYXNoYm9hcmQpIHt9XG5cbiAgcHVibGljIGdldCBkYXNoYm9hcmQoKTogQ29udHJhY3QuRXh0ZW5zaW9uRGFzaGJvYXJkIHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uRW52aXJvbm1lbnQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgQXBpVmVyc2lvbiwgSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzIGFzIEVudW1NYXBwaW5ncyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgQ29ubmVjdGVkU2VydmVyIH0gZnJvbSAnLi4vSW1wbC9Db25uZWN0ZWRTZXJ2ZXInO1xuaW1wb3J0IHsgV29ya2Jvb2tGb3JtYXR0aW5nRW52VXRpbCB9IGZyb20gJy4vV29ya2Jvb2tGb3JtYXR0aW5nRW52VXRpbCc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGV4dGVybmFsIGVudmlyb25tZW50IG5hbWVzcGFjZS5cbiAqIEVudmlyb25tZW50IGRvZXMgbm90IGZvbGxvdyB0aGUgSW1wbCBwYXR0ZXJuIGFzIGl0IGlzXG4gKiBqdXN0IGEgcHJvcGVydHkgYmFnLlxuICogRmlyc3QgY2xhc3MgZXh0ZW5zaW9ucyBjYW4gZ2V0IHRvIENvbm5lY3RlZFNlcnZlciB3aXRoOiBlbnZpcm9ubWVudFsnY29ubmVjdGVkU2VydmVyJ11cbiAqL1xuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50IGltcGxlbWVudHMgQ29udHJhY3QuRW52aXJvbm1lbnQge1xuICAvKipUaGUgZm9sbG93aW5nIGlzIGFuIGluZGV4IHNpZ25hdHVyZS4gSXQgYWxsb3dzIHByb3BlcnRpZXMgdG8gYmUgYWNjZXNzZWQgYnkgbmFtZS5cbiAgICogVGhpcyBhbGxvd3MgdXMgdG8gYWRkIHByb3BlcnRpZXMgZHluYW1pY2FsbHkgKHNlZSB1c2FnZSBvZiB0aGlzLmNvbm5lY3RlZFNlcnZlciBiZWxvdykgd2l0aG91dCBUeXBlc2NyaXB0IGVycm9ycy5cbiAgICogVGhlIHJlYXNvbiB3ZSBkbyB0aGlzIGlzIHNvIHRoYXQgM3JkLXBhcnR5IGV4dGVuc2lvbiBkZXZlbG9wZXJzIGRvIG5vdCBzZWUgdGhlIGNvbm5lY3RlZFNlcnZlciBwcm9wZXJ0eVxuICAgKiB0aGF0IGlzIG9ubHkgYXZhaWxhYmxlIHRvIGZpcnN0IGNsYXNzIGV4dGVuc2lvbiBkZXZlbG9wZXJzLlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgaW5kZXggc2lnYXR1cmUgbmVlZHMgdG8gYmUgYSB1bmlvbiBvZiBhbGwgcHJvcGVydGllcyBpbiB0aGUgb2JqZWN0LCBzaW5jZSB3ZSBjb3VsZFxuICAgKiBhY2Nlc3MgYW55IHByb3BlcnR5IHVzaW5nIHRoZSBwcm9wZXJ0eSBpbmRleCBtZXRob2QuXG4gICAqL1xuICBbeDogc3RyaW5nXTogQ29ubmVjdGVkU2VydmVyIHwgc3RyaW5nIHwgQ29udHJhY3QuV29ya2Jvb2tGb3JtYXR0aW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9hcGlWZXJzaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NvbnRleHQ6IENvbnRyYWN0LkV4dGVuc2lvbkNvbnRleHQ7XG4gIHByaXZhdGUgX2Zvcm1hdHRpbmc/OiBDb250cmFjdC5Xb3JrYm9va0Zvcm1hdHRpbmc7XG4gIHByaXZhdGUgX2xhbmd1YWdlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NvdW50cnk/OiBzdHJpbmc7XG4gIHByaXZhdGUgX2xvY2FsZTogc3RyaW5nO1xuICBwcml2YXRlIF9tb2RlOiBDb250cmFjdC5FeHRlbnNpb25Nb2RlO1xuICBwcml2YXRlIF9vcGVyYXRpbmdTeXN0ZW06IHN0cmluZztcbiAgcHJpdmF0ZSBfdGFibGVhdVZlcnNpb246IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IoZXh0ZW5zaW9uRW52aXJvbm1lbnQ6IEV4dGVuc2lvbkVudmlyb25tZW50KSB7XG4gICAgdGhpcy5fYXBpVmVyc2lvbiA9IEFwaVZlcnNpb24uSW5zdGFuY2UgJiYgQXBpVmVyc2lvbi5JbnN0YW5jZS5mb3JtYXR0ZWRWYWx1ZTsgLy8gbWFqLm1pbi5maXggKG5vIGJ1aWxkKVxuICAgIHRoaXMuX2NvbnRleHQgPSBFbnVtTWFwcGluZ3MuZXh0ZW5zaW9uQ29udGV4dC5jb252ZXJ0KGV4dGVuc2lvbkVudmlyb25tZW50LmV4dGVuc2lvbkNvbnRleHQpO1xuICAgIHRoaXMuX2Zvcm1hdHRpbmcgPSBXb3JrYm9va0Zvcm1hdHRpbmdFbnZVdGlsLmNvbnZlcnRUb1dvcmtib29rRm9ybWF0dGluZyhleHRlbnNpb25FbnZpcm9ubWVudC53b3JrYm9va0Zvcm1hdHRpbmcpO1xuICAgIHRoaXMuX2xhbmd1YWdlID0gZXh0ZW5zaW9uRW52aXJvbm1lbnQuZXh0ZW5zaW9uTGFuZ3VhZ2U7XG4gICAgdGhpcy5fY291bnRyeSA9IGV4dGVuc2lvbkVudmlyb25tZW50LmV4dGVuc2lvbkNvdW50cnk7XG4gICAgdGhpcy5fbG9jYWxlID0gZXh0ZW5zaW9uRW52aXJvbm1lbnQuZXh0ZW5zaW9uTG9jYWxlO1xuICAgIHRoaXMuX21vZGUgPSBFbnVtTWFwcGluZ3MuZXh0ZW5zaW9uTW9kZS5jb252ZXJ0KGV4dGVuc2lvbkVudmlyb25tZW50LmV4dGVuc2lvbk1vZGUpO1xuICAgIHRoaXMuX29wZXJhdGluZ1N5c3RlbSA9IGV4dGVuc2lvbkVudmlyb25tZW50Lm9wZXJhdGluZ1N5c3RlbTtcbiAgICB0aGlzLl90YWJsZWF1VmVyc2lvbiA9IGV4dGVuc2lvbkVudmlyb25tZW50LnRhYmxlYXVWZXJzaW9uO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBhIHVzZXJJZCwgdGhlbiB3ZSBhcmUgYSBmaXJzdCBjbGFzcyBleHRlbnNpb25cbiAgICAvLyBBZGQgb3VyIGhpZGRlbiBtZW1iZXIgJ2Nvbm5lY3RlZFNlcnZlcidcbiAgICBpZiAoZXh0ZW5zaW9uRW52aXJvbm1lbnQudXNlcklkKSB7XG4gICAgICB0aGlzLmNvbm5lY3RlZFNlcnZlciA9IG5ldyBDb25uZWN0ZWRTZXJ2ZXIoZXh0ZW5zaW9uRW52aXJvbm1lbnQudXNlcklkLCBleHRlbnNpb25FbnZpcm9ubWVudC5zaXRlSWQsIGV4dGVuc2lvbkVudmlyb25tZW50Lndvcmtib29rSWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXBpVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcGlWZXJzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBjb250ZXh0KCk6IENvbnRyYWN0LkV4dGVuc2lvbkNvbnRleHQge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuICB9XG5cbiAgcHVibGljIGdldCB3b3JrYm9va0Zvcm1hdHRpbmcoKTogQ29udHJhY3QuV29ya2Jvb2tGb3JtYXR0aW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvdW50cnkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fY291bnRyeTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbW9kZSgpOiBDb250cmFjdC5FeHRlbnNpb25Nb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3BlcmF0aW5nU3lzdGVtKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX29wZXJhdGluZ1N5c3RlbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGFibGVhdVZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVhdVZlcnNpb247XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBDYWxsYmFja01hcCwgRXh0ZW5zaW9uc0ltcGwgfSBmcm9tICcuLi9JbXBsL0V4dGVuc2lvbnNJbXBsJztcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgRXh0ZW5zaW9ucyBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHRlbnNpb25zIGltcGxlbWVudHMgQ29udHJhY3QuRXh0ZW5zaW9ucyB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGV4dGVuc2lvbkltcGw6IEV4dGVuc2lvbnNJbXBsKSB7XG4gICAgdGhpcy5leHRlbnNpb25JbXBsID0gZXh0ZW5zaW9uSW1wbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGFzaGJvYXJkQ29udGVudCgpOiBDb250cmFjdC5EYXNoYm9hcmRDb250ZW50IHtcbiAgICByZXR1cm4gdGhpcy5leHRlbnNpb25JbXBsLmRhc2hib2FyZENvbnRlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVudmlyb25tZW50KCk6IENvbnRyYWN0LkVudmlyb25tZW50IHtcbiAgICByZXR1cm4gdGhpcy5leHRlbnNpb25JbXBsLmVudmlyb25tZW50O1xuICB9XG5cbiAgcHVibGljIGdldCBzZXR0aW5ncygpOiBDb250cmFjdC5TZXR0aW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uSW1wbC5zZXR0aW5ncztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdWkoKTogQ29udHJhY3QuVUkge1xuICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbkltcGwudWk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHdvcmtib29rKCk6IENvbnRyYWN0LkV4dGVuc2lvbldvcmtib29rIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbnNpb25JbXBsLndvcmtib29rO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXNoYm9hcmRPYmplY3RJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbkltcGwuZXh0ZW5zaW9uWm9uZUlkO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemVBc3luYyhjb250ZXh0TWVudUNhbGxiYWNrcz86IENhbGxiYWNrTWFwKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uSW1wbC5pbml0aWFsaXplQXN5bmMoZmFsc2UsIGNvbnRleHRNZW51Q2FsbGJhY2tzKS50aGVuPHZvaWQ+KCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZURpYWxvZ0FzeW5jKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uSW1wbC5pbml0aWFsaXplQXN5bmModHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlVml6SW1hZ2VBc3luYyhpbnB1dFNwZWM6IG9iamVjdCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uSW1wbC5jcmVhdGVWaXpJbWFnZUFzeW5jKGlucHV0U3BlYyk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2xpY2tUaHJvdWdoQXN5bmMoY2xpY2tUaHJvdWdoRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbkltcGwuc2V0Q2xpY2tUaHJvdWdoQXN5bmMoY2xpY2tUaHJvdWdoRW5hYmxlZCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFNldHRpbmdzIGFzIFNldHRpbmdzQ29udHJhY3QgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXZlbnRMaXN0ZW5lck1hbmFnZXIgfSBmcm9tICdAdGFibGVhdS9hcGktc2hhcmVkLWpzJztcbmltcG9ydCB7IFNldHRpbmdzSW1wbCB9IGZyb20gJy4uL0ltcGwvU2V0dGluZ3NJbXBsJztcbmltcG9ydCB7IFNldHRpbmdzQ29sbGVjdGlvbiB9IGZyb20gJy4uL1NlcnZpY2VzL1NldHRpbmdzU2VydmljZSc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGV4dGVybmFsIHNldHRpbmdzIG5hbWVzcGFjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldHRpbmdzIGV4dGVuZHMgRXZlbnRMaXN0ZW5lck1hbmFnZXIgaW1wbGVtZW50cyBTZXR0aW5nc0NvbnRyYWN0IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX3NldHRpbmdzSW1wbDogU2V0dGluZ3NJbXBsKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIEluaXRpYWxpemUgb3VyIGV2ZW50IGhhbmRsaW5nIGZvciB0aGlzIGNsYXNzXG4gICAgdGhpcy5fc2V0dGluZ3NJbXBsLmluaXRpYWxpemVFdmVudHMoKS5mb3JFYWNoKChlKSA9PiB0aGlzLmFkZE5ld0V2ZW50VHlwZShlKSk7XG4gIH1cblxuICBwdWJsaWMgZXJhc2Uoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXR0aW5nc0ltcGwuZXJhc2Uoa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zZXR0aW5nc0ltcGwuZ2V0KGtleSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWxsKCk6IFNldHRpbmdzQ29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzSW1wbC5nZXRBbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNNb2RpZmllZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3NJbXBsLmlzTW9kaWZpZWQ7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUFzeW5jKCk6IFByb21pc2U8U2V0dGluZ3NDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzSW1wbC5zYXZlQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXR0aW5nc0ltcGwuc2V0KGtleSwgdmFsdWUpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVUlJbXBsIH0gZnJvbSAnLi4vSW1wbC9VSUltcGwnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBleHRlcm5hbCBVSSBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBVSSBpbXBsZW1lbnRzIENvbnRyYWN0LlVJIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ltcGw6IFVJSW1wbCkge31cblxuICBwdWJsaWMgZGlzcGxheURpYWxvZ0FzeW5jKHVybDogc3RyaW5nLCBwYXlsb2FkPzogc3RyaW5nLCBvcHRpb25zPzogQ29udHJhY3QuRGlhbG9nT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGwuZGlzcGxheURpYWxvZ0FzeW5jKHVybCwgcGF5bG9hZCwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VEaWFsb2cocGF5bG9hZD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2ltcGwuY2xvc2VEaWFsb2cocGF5bG9hZCk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBJbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MgYXMgRW51bU1hcHBpbmdzIH0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBXb3JrYm9va0Zvcm1hdHRpbmcgfSBmcm9tICcuLi8uLi8uLi8uLi9hcGktaW50ZXJuYWwtY29udHJhY3QtanMvbGliL3NyYy9Kc0FwaUludGVybmFsQ29udHJhY3QnO1xuXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tGb3JtYXR0aW5nRW52VXRpbCB7XG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFRvV29ya2Jvb2tGb3JtYXR0aW5nKHdvcmtib29rRm9ybWF0dGluZ01vZGVsPzogV29ya2Jvb2tGb3JtYXR0aW5nKTogQ29udHJhY3QuV29ya2Jvb2tGb3JtYXR0aW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXdvcmtib29rRm9ybWF0dGluZ01vZGVsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmb3JtYXR0aW5nTWFwOiBBcnJheTxDb250cmFjdC5Gb3JtYXR0aW5nU2hlZXQ+ID0gd29ya2Jvb2tGb3JtYXR0aW5nTW9kZWwuZm9ybWF0dGluZ1NoZWV0cy5tYXAoKGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGluZ1NoZWV0OiBDb250cmFjdC5Gb3JtYXR0aW5nU2hlZXQgPSB7XG4gICAgICAgICAgY2xhc3NOYW1lS2V5OiBFbnVtTWFwcGluZ3MuY2xhc3NOYW1lS2V5LmNvbnZlcnQoY3VycmVudEZvcm1hdHRpbmdTaGVldC5jbGFzc05hbWVLZXkpLFxuICAgICAgICAgIGNzc1Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQuY3NzUHJvcGVydGllcy5mb250RmFtaWx5LFxuICAgICAgICAgICAgZm9udFNpemU6IGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQuY3NzUHJvcGVydGllcy5mb250U2l6ZSxcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQuY3NzUHJvcGVydGllcy5mb250V2VpZ2h0LFxuICAgICAgICAgICAgZm9udFN0eWxlOiBjdXJyZW50Rm9ybWF0dGluZ1NoZWV0LmNzc1Byb3BlcnRpZXMuZm9udFN0eWxlLFxuICAgICAgICAgICAgdGV4dERlY29yYXRpb246IGN1cnJlbnRGb3JtYXR0aW5nU2hlZXQuY3NzUHJvcGVydGllcy50ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgIGNvbG9yOiBjdXJyZW50Rm9ybWF0dGluZ1NoZWV0LmNzc1Byb3BlcnRpZXMuY29sb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRpbmdTaGVldDtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzdWx0OiBDb250cmFjdC5Xb3JrYm9va0Zvcm1hdHRpbmcgPSB7XG4gICAgICAgIGZvcm1hdHRpbmdTaGVldHM6IGZvcm1hdHRpbmdNYXAsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEV4ZWN1dGVQYXJhbWV0ZXJzLCBFeHRlbnNpb25Cb290c3RyYXBJbmZvLCBQYXJhbWV0ZXJJZCwgVmVyYklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFNlcnZpY2VJbXBsQmFzZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcyB9IGZyb20gJy4uL0V4dGVuc2lvbnNTZXJ2aWNlTmFtZXMnO1xuaW1wb3J0IHsgSW5pdGlhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vSW5pdGlhbGl6YXRpb25TZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIEluaXRpYWxpemF0aW9uU2VydmljZUltcGwgZXh0ZW5kcyBTZXJ2aWNlSW1wbEJhc2UgaW1wbGVtZW50cyBJbml0aWFsaXphdGlvblNlcnZpY2Uge1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEV4dGVuc2lvbnNTZXJ2aWNlTmFtZXMuSW5pdGlhbGl6YXRpb25TZXJ2aWNlO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemVEYXNoYm9hcmRFeHRlbnNpb25zQXN5bmMoaXNFeHRlbnNpb25EaWFsb2c6IGJvb2xlYW4sIGNvbnRleHRNZW51SWRzOiBzdHJpbmdbXSk6IFByb21pc2U8RXh0ZW5zaW9uQm9vdHN0cmFwSW5mbz4ge1xuICAgIGNvbnN0IHBhcmFtczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2luaXRpYWxpemVEYXNoYm9hcmRFeHRlbnNpb25zQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkV4dGVuc2lvbkNvbnRleHRNZW51SWRzXTogY29udGV4dE1lbnVJZHMsXG4gICAgICBbUGFyYW1ldGVySWQuSXNFeHRlbnNpb25EaWFsb2ddOiBpc0V4dGVuc2lvbkRpYWxvZyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuSW5pdGlhbGl6ZUV4dGVuc2lvbiwgcGFyYW1zKS50aGVuPEV4dGVuc2lvbkJvb3RzdHJhcEluZm8+KChyZXNwb25zZSkgPT4ge1xuICAgICAgLy8gVE9ETyAtIFZhbGlkYXRlIHJldHVybiB2YWx1ZVxuXG4gICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgYXMgRXh0ZW5zaW9uQm9vdHN0cmFwSW5mbztcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEVycm9yQ29kZXMgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXhlY3V0ZVBhcmFtZXRlcnMsIEV4dGVuc2lvblNldHRpbmdzSW5mbywgUGFyYW1ldGVySWQsIFZlcmJJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UsIFRhYmxlYXVFcnJvciB9IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcyB9IGZyb20gJy4uL0V4dGVuc2lvbnNTZXJ2aWNlTmFtZXMnO1xuaW1wb3J0IHsgU2V0dGluZ3NDb2xsZWN0aW9uLCBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi9TZXR0aW5nc1NlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgU2V0dGluZ3NTZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIFNldHRpbmdzU2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcy5TZXR0aW5nc1NlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVNldHRpbmdzQXN5bmMoc2V0dGluZ3M6IFNldHRpbmdzQ29sbGVjdGlvbik6IFByb21pc2U8U2V0dGluZ3NDb2xsZWN0aW9uPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ3NhdmVTZXR0aW5nc0FzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TZXR0aW5nc1ZhbHVlc106IHNldHRpbmdzLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5TYXZlRXh0ZW5zaW9uU2V0dGluZ3MsIHBhcmFtZXRlcnMpLnRoZW48U2V0dGluZ3NDb2xsZWN0aW9uPigodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlLnJlc3VsdCBhcyBFeHRlbnNpb25TZXR0aW5nc0luZm87XG5cbiAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuc2V0dGluZ3NWYWx1ZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLkludGVybmFsRXJyb3IsICdVbmV4cGVjdGVkIGVycm9yIHNhdmluZ3Mgc2V0dGluZ3MuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQuc2V0dGluZ3NWYWx1ZXM7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IERpYWxvZ09wdGlvbnMsIERpYWxvZ1N0eWxlLCBFcnJvckNvZGVzIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEV4ZWN1dGVQYXJhbWV0ZXJzLCBFeHRlbnNpb25EaWFsb2dSZXN1bHQsIFBhcmFtZXRlcklkLCBWZXJiSWQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzLCBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3MsIFNlcnZpY2VJbXBsQmFzZSwgVGFibGVhdUVycm9yIH0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgeyBFeHRlbnNpb25zU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcyc7XG5pbXBvcnQgeyBVSVNlcnZpY2UgfSBmcm9tICcuLi9VSVNlcnZpY2UnO1xuXG5jb25zdCBERUZBVUxUX0RJQUxPR19IRUlHSFQgPSA0MDA7IC8vIGluIHBpeGVsc1xuY29uc3QgREVGQVVMVF9ESUFMT0dfV0lEVEggPSA2MDA7IC8vIGluIHBpeGVsc1xuY29uc3QgREVGQVVMVF9ESUFMT0dfU1RZTEU6IERpYWxvZ1N0eWxlID0gRGlhbG9nU3R5bGUuV2luZG93O1xuXG5leHBvcnQgY2xhc3MgVUlTZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIFVJU2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRXh0ZW5zaW9uc1NlcnZpY2VOYW1lcy5VSVNlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgZGlzcGxheURpYWxvZ0FzeW5jKHVybDogc3RyaW5nLCBwYXlsb2FkOiBzdHJpbmcsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2Rpc3BsYXlEaWFsb2dBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuRXh0ZW5zaW9uRGlhbG9nVXJsXTogdXJsLFxuICAgICAgW1BhcmFtZXRlcklkLkV4dGVuc2lvbkRpYWxvZ1BheWxvYWRdOiBwYXlsb2FkLFxuICAgIH07XG5cbiAgICBjb25zdCBoOiBudW1iZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuaGVpZ2h0ID8gb3B0aW9ucy5oZWlnaHQgOiBERUZBVUxUX0RJQUxPR19IRUlHSFQ7XG4gICAgY29uc3QgdzogbnVtYmVyID0gb3B0aW9ucyAmJiBvcHRpb25zLndpZHRoID8gb3B0aW9ucy53aWR0aCA6IERFRkFVTFRfRElBTE9HX1dJRFRIO1xuICAgIGNvbnN0IGRpYWxvZ1N0eWxlOiBEaWFsb2dTdHlsZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kaWFsb2dTdHlsZSA/IG9wdGlvbnMuZGlhbG9nU3R5bGUgOiBERUZBVUxUX0RJQUxPR19TVFlMRTtcblxuICAgIC8vIE9uIHRoZSBwbGF0Zm9ybSBzaWRlLCB3ZSBkbyBzb21ldGhpbmcgcmVhc29uYWJsZSByZWdhcmRlc3Mgb2Ygd2hldGhlciB0aGUgcGFzc2VkXG4gICAgLy8gaGVpZ2h0IGFuZCB3aWR0aCBhcmUgdG9vIGxhcmdlIG9yIHRvbyBzbWFsbC4gIEJ1dCB0aGlzIGxpa2VseSBpbmRpY2F0ZXMgYSBkZXZlbG9wZXIgZXJyb3IsXG4gICAgLy8gc28gd2UgdGhyb3cgYW4gZXJyb3IgaGVyZSB0byBoZWxwIHdpdGggZGVidWdnaW5nLlxuICAgIGlmIChoIDw9IDAgfHwgdyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgJ1NpemUgcGFyYW1ldGVycyBmb3IgZGlzcGxheURpYWxvZ0FzeW5jIG11c3QgYmUgcG9zaXRpdmUnKTtcbiAgICB9XG5cbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkV4dGVuc2lvbkRpYWxvZ0hdID0gaDtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkV4dGVuc2lvbkRpYWxvZ1ddID0gdztcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5RW51bVZhbHVlPERpYWxvZ1N0eWxlPihkaWFsb2dTdHlsZSwgRGlhbG9nU3R5bGUsICdEaWFsb2dTdHlsZScpO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRXh0ZW5zaW9uRGlhbG9nU3R5bGVdID0gRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzLmRpYWxvZ1N0eWxlcy5jb252ZXJ0KGRpYWxvZ1N0eWxlKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkRpc3BsYXlEaWFsb2csIHBhcmFtZXRlcnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBkaWFsb2dSZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgYXMgRXh0ZW5zaW9uRGlhbG9nUmVzdWx0O1xuICAgICAgc3dpdGNoIChkaWFsb2dSZXN1bHQpIHtcbiAgICAgICAgY2FzZSBFeHRlbnNpb25EaWFsb2dSZXN1bHQuRGlhbG9nQWxyZWFkeU9wZW46XG4gICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLkRpYWxvZ0FscmVhZHlPcGVuLCAnVGhlcmUgYWxyZWFkeSBleGlzdHMgYW4gb3BlbiBkaWFsb2cgZm9yIHRoaXMgZXh0ZW5zaW9uLicpO1xuICAgICAgICBjYXNlIEV4dGVuc2lvbkRpYWxvZ1Jlc3VsdC5JbnZhbGlkRG9tYWluOlxuICAgICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoXG4gICAgICAgICAgICBFcnJvckNvZGVzLkludmFsaWREb21haW5EaWFsb2csXG4gICAgICAgICAgICAnVGhlIHVybCBvZiBhbiBleHRlbnNpb24gZGlhbG9nIG11c3QgbWF0Y2ggdGhlIGRvbWFpbiBvZiB0aGUgcGFyZW50IGV4dGVuc2lvbi4nLFxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gU3VjY2VzcyBjYXNlXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNsb3NlRGlhbG9nKHBheWxvYWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnY2xvc2VEaWFsb2cnLFxuICAgIH07XG5cbiAgICBpZiAocGF5bG9hZCkge1xuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5FeHRlbnNpb25EaWFsb2dQYXlsb2FkXSA9IHBheWxvYWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuQ2xvc2VEaWFsb2csIHBhcmFtZXRlcnMpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldENsaWNrVGhyb3VnaEFzeW5jKGNsaWNrVGhyb3VnaEVuYWJsZWQ6IGJvb2xlYW4sIGV4dGVuc2lvblpvbmVJZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlclR5cGUoY2xpY2tUaHJvdWdoRW5hYmxlZCwgJ2Jvb2xlYW4nLCAnY2xpY2tUaHJvdWdoRW5hYmxlZCcpO1xuXG4gICAgaWYgKGV4dGVuc2lvblpvbmVJZCA9PT0gdW5kZWZpbmVkIHx8IGV4dGVuc2lvblpvbmVJZCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ0V4dGVuc2lvbiBJZCBpcyBpbnZhbGlkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkV4dGVuc2lvblpvbmVJZF06IGV4dGVuc2lvblpvbmVJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5DbGlja1Rocm91Z2hFbmFibGVkXTogY2xpY2tUaHJvdWdoRW5hYmxlZCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuU2V0Q2xpY2tUaHJvdWdoLCBwYXJhbWV0ZXJzKS50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW50ZXJuYWxBcGlEaXNwYXRjaGVyIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEFwaVNlcnZpY2VSZWdpc3RyeSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1zaGFyZWQtanMnO1xuaW1wb3J0IHsgSW5pdGlhbGl6YXRpb25TZXJ2aWNlSW1wbCB9IGZyb20gJy4vSW1wbC9Jbml0aWFsaXphdGlvblNlcnZpY2VJbXBsJztcbmltcG9ydCB7IFNldHRpbmdzU2VydmljZUltcGwgfSBmcm9tICcuL0ltcGwvU2V0dGluZ3NTZXJ2aWNlSW1wbCc7XG5pbXBvcnQgeyBVSVNlcnZpY2VJbXBsIH0gZnJvbSAnLi9JbXBsL1VJU2VydmljZUltcGwnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQgfSBmcm9tICcuL1NlcnZpY2VSZWdpc3RyeVV0aWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBbGxFeHRlbnNpb25zU2VydmljZXMoZGlzcGF0Y2hlcjogSW50ZXJuYWxBcGlEaXNwYXRjaGVyKTogdm9pZCB7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgU2V0dGluZ3NTZXJ2aWNlSW1wbChkaXNwYXRjaGVyLCBFeHRlbnNpb25zUmVnaXN0cnlJZCkpO1xuICBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KEV4dGVuc2lvbnNSZWdpc3RyeUlkKS5yZWdpc3RlclNlcnZpY2UobmV3IFVJU2VydmljZUltcGwoZGlzcGF0Y2hlciwgRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVySW5pdGlhbGl6YXRpb25FeHRlbnNpb25zU2VydmljZXMoZGlzcGF0Y2hlcjogSW50ZXJuYWxBcGlEaXNwYXRjaGVyKTogdm9pZCB7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQoRXh0ZW5zaW9uc1JlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgSW5pdGlhbGl6YXRpb25TZXJ2aWNlSW1wbChkaXNwYXRjaGVyLCBFeHRlbnNpb25zUmVnaXN0cnlJZCkpO1xufVxuIiwiZXhwb3J0IGNvbnN0IEV4dGVuc2lvbnNSZWdpc3RyeUlkID0gMDtcbiIsIi8vIFRoaXMgZmlsZSByZS1leHBvcnRzIGV2ZXJ5dGhpbmcgd2hpY2ggaXMgcGFydCBvZiB0aGUgZXh0ZW5zaW9ucyBhcGkgcHVibGljIGludGVyZmFjZVxuXG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRW1iZWRkaW5nL0Fza0RhdGFJbnRlcmZhY2VzJztcbmV4cG9ydCB7XG4gIEFwaU1lbnVUeXBlLFxuICBEZXZpY2VUeXBlLFxuICBFbWJlZGRpbmdFcnJvckNvZGVzLFxuICBTaGVldFNpemVCZWhhdmlvcixcbiAgVGFibGVhdURpYWxvZ1R5cGUsXG4gIFRhYmxlYXVFdmVudFR5cGUgYXMgRW1iZWRkaW5nVGFibGVhdUV2ZW50VHlwZSxcbiAgVG9vbGJhcixcbn0gZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L0VtYmVkZGluZy9FbnVtcyc7XG5leHBvcnQge1xuICBDdXN0b21NYXJrQ29udGV4dE1lbnVFdmVudCBhcyBFbWJlZGRpbmdDdXN0b21NYXJrQ29udGV4dE1lbnVFdmVudCxcbiAgQ3VzdG9tVmlld0V2ZW50LFxuICBGaWx0ZXJDaGFuZ2VkRXZlbnQgYXMgRW1iZWRkaW5nRmlsdGVyQ2hhbmdlZEV2ZW50LFxuICBGaXJzdFZpelNpemVLbm93bkV2ZW50LFxuICBNYXJrc1NlbGVjdGVkRXZlbnQgYXMgRW1iZWRkaW5nTWFya1NlbGVjdGVkRXZlbnQsXG4gIFBhcmFtZXRlckNoYW5nZWRFdmVudCBhcyBFbWJlZGRpbmdQYXJhbWV0ZXJDaGFuZ2VkRXZlbnQsXG4gIFN0b3J5UG9pbnRTd2l0Y2hlZEV2ZW50LFxuICBUYWJsZWF1U2hlZXRFdmVudCBhcyBFbWJlZGRpbmdUYWJsZWF1U2hlZXRFdmVudCxcbiAgVGFibGVhdVdvcmtzaGVldEV2ZW50IGFzIEVtYmVkZGluZ1RhYmxlYXVXb3Jrc2hlZXRFdmVudCxcbiAgVGFiU3dpdGNoZWRFdmVudCxcbiAgVG9vbGJhclN0YXRlQ2hhbmdlZEV2ZW50IGFzIEVtYmVkZGluZ1Rvb2xiYXJTdGF0ZUNoYW5nZWRFdmVudCxcbiAgVXJsQWN0aW9uRXZlbnQsXG4gIFdvcmtib29rUHVibGlzaGVkQXNFdmVudCxcbn0gZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L0VtYmVkZGluZy9FdmVudEludGVyZmFjZXMnO1xuZXhwb3J0IHsgUGFyYW1ldGVyIGFzIEVtYmVkZGluZ1BhcmFtZXRlciB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FbWJlZGRpbmcvUGFyYW1ldGVySW50ZXJmYWNlcyc7XG5leHBvcnQge1xuICBDb250ZXh0TWVudU9wdGlvbnMsXG4gIERhc2hib2FyZCBhcyBFbWJlZGRpbmdEYXNoYm9hcmQsXG4gIERhc2hib2FyZE9iamVjdCBhcyBFbWJlZGRpbmdEYXNoYm9hcmRPYmplY3QsXG4gIEhpZXJhcmNoaWNhbExldmVscyxcbiAgU2hlZXQgYXMgRW1iZWRkaW5nU2hlZXQsXG4gIFNoZWV0SW5mbyxcbiAgU2hlZXRTaXplLFxuICBXb3Jrc2hlZXQgYXMgRW1iZWRkaW5nV29ya3NoZWV0LFxufSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRW1iZWRkaW5nL1NoZWV0SW50ZXJmYWNlcyc7XG5leHBvcnQgeyBTdG9yeSwgU3RvcnlQb2ludCwgU3RvcnlQb2ludEluZm8gfSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRW1iZWRkaW5nL1N0b3J5SW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRW1iZWRkaW5nL1RhYmxlYXVFcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRW1iZWRkaW5nL1ZpekludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L0VtYmVkZGluZy9XZWJDb21wb25lbnRJbnRlcmZhY2VzJztcbmV4cG9ydCB7IEN1c3RvbVZpZXcsIFdvcmtib29rIGFzIEVtYmVkZGluZ1dvcmtib29rIH0gZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L0VtYmVkZGluZy9Xb3JrYm9va0ludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL1NoYXJlZEFwaUV4dGVybmFsQ29udHJhY3QnO1xuIiwiLy8gVGhpcyBmaWxlIHJlLWV4cG9ydHMgZXZlcnl0aGluZyB3aGljaCBpcyBwYXJ0IG9mIHRoZSBleHRlbnNpb25zIGFwaSBwdWJsaWMgaW50ZXJmYWNlXG5cbmV4cG9ydCAqIGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL0V2ZW50SW50ZXJmYWNlJztcbmV4cG9ydCB7IERhc2hib2FyZENvbnRlbnQgfSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRXh0ZW5zaW9ucy9OYW1lc3BhY2VzL0Rhc2hib2FyZENvbnRlbnQnO1xuZXhwb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRXh0ZW5zaW9ucy9OYW1lc3BhY2VzL0Vudmlyb25tZW50JztcbmV4cG9ydCB7IEV4dGVuc2lvbnMgfSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRXh0ZW5zaW9ucy9OYW1lc3BhY2VzL0V4dGVuc2lvbnMnO1xuZXhwb3J0IHsgU2V0dGluZ3MgfSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRXh0ZW5zaW9ucy9OYW1lc3BhY2VzL1NldHRpbmdzJztcbmV4cG9ydCB7XG4gIEVycm9yQ29kZXMsXG4gIEV4dGVuc2lvbkNvbnRleHQsXG4gIEV4dGVuc2lvbk1vZGUsXG4gIFRhYmxlYXVFdmVudFR5cGUsXG4gIFZpekltYWdlRW5jb2RpbmdUeXBlLFxuICBWaXpJbWFnZVBhbGV0dGVUeXBlLFxuICBWaXpJbWFnZVNpemVTZXR0aW5nQWxpZ25tZW50VHlwZSxcbiAgVml6SW1hZ2VTaXplU2V0dGluZ1R5cGUsXG4gIFZpekltYWdlU29ydERpcmVjdGlvblR5cGUsXG59IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL05hbWVzcGFjZXMvVGFibGVhdSc7XG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvRXh0ZW5zaW9ucy9OYW1lc3BhY2VzL1VJJztcbmV4cG9ydCAqIGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL1BhcmFtZXRlckludGVyZmFjZXMnO1xuZXhwb3J0IHtcbiAgRGFzaGJvYXJkIGFzIEV4dGVuc2lvbkRhc2hib2FyZCxcbiAgRGFzaGJvYXJkT2JqZWN0IGFzIEV4dGVuc2lvbkRhc2hib2FyZE9iamVjdCxcbiAgRGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlLFxuICBEYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGVBcnJheSxcbiAgRGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eU1hcCxcbiAgUG9pbnQsXG4gIFNoZWV0IGFzIEV4dGVuc2lvblNoZWV0LFxuICBXb3Jrc2hlZXQgYXMgRXh0ZW5zaW9uV29ya3NoZWV0LFxuICBab25lVmlzaWJpbGl0eU1hcCxcbn0gZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L0V4dGVuc2lvbnMvU2hlZXRJbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL1RhYmxlYXVFcnJvcic7XG5leHBvcnQgeyBXb3JrYm9vayBhcyBFeHRlbnNpb25Xb3JrYm9vayB9IGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9FeHRlbnNpb25zL1dvcmtib29rSW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL1NoYXJlZEFwaUV4dGVybmFsQ29udHJhY3QnO1xuIiwiLyoqXG4gKiBUaGlzIGlzIHlvdXIgbWFpbi4gVGhpcyBpcyB3aGVyZSB5b3UgcmUtZXhwb3J0IGV2ZXJ5dGhpbmcgeW91IHdhbnQgdG8gYmUgcHVibGljbHkgYXZhaWxhYmxlLlxuICpcbiAqIFRoZSBidWlsZCBlbmZvcmNlcyB0aGF0IHRoZSBmaWxlIGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBnbG9iYWwgdmFyaWFibGUgdGhhdCBpcyBleHBvcnRlZC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL0VtYmVkZGluZ0FwaUV4dGVybmFsQ29udHJhY3QnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlbnNpb25zQXBpRXh0ZXJuYWxDb250cmFjdCc7XG4iLCJpbXBvcnQgeyBXZWJDb21wb25lbnRMb2NhbFNldHRpbmdzLCBXZWJDb21wb25lbnRTZXR0aW5nc1NoYXJlZCB9IGZyb20gJy4vV2ViQ29tcG9uZW50SW50ZXJmYWNlcyc7XG5cbi8qKlxuICogVGhlIG5hbWVzIG9mIHRoZSBzdHJpbmcgY29uc3RhbnRzIHlvdSBjYW4gdXNlIGFzIEhUTUwgYXR0cmlidXRlcyBmb3IgdGhlIDx0YWJsZWF1LWFzay1kYXRhPiB3ZWIgY29tcG9uZW50LlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZW51bSBBc2tEYXRhQXR0cmlidXRlcyB7XG4gIE9yaWdpbiA9ICdvcmlnaW4nLFxuICBTaG93RW1iZWQgPSAnc2hvd0VtYmVkJyxcbiAgU2hvd1BpbiA9ICdzaG93UGluJyxcbiAgU2hvd1NhdmUgPSAnc2hvd1NhdmUnLFxuICBTaG93U2hhcmUgPSAnc2hvd1NoYXJlJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBc2tEYXRhU2V0dGluZ3MgZXh0ZW5kcyBXZWJDb21wb25lbnRTZXR0aW5nc1NoYXJlZCwgV2ViQ29tcG9uZW50TG9jYWxTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZW1iZWQgYnV0dG9uIGlzIGhpZGRlbiBvciB2aXNpYmxlLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtYXNrLWRhdGEgaWQ9XCJ0YWJsZWF1QXNrRGF0YVwiIHNob3dFbWJlZD5cbiAgICogYGBgXG4gICAqL1xuICBzaG93RW1iZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGluIGJ1dHRvbiBpcyBoaWRkZW4gb3IgdmlzaWJsZS5cbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LWFzay1kYXRhIGlkPVwidGFibGVhdUFza0RhdGFcIiBzaG93UGluPlxuICAgKiBgYGBcbiAgICovXG4gIHNob3dQaW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc2F2ZSBidXR0b24gaXMgaGlkZGVuIG9yIHZpc2libGUuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS1hc2stZGF0YSBpZD1cInRhYmxlYXVBc2tEYXRhXCIgc2hvd1NhdmU+XG4gICAqIGBgYFxuICAgKi9cbiAgc2hvd1NhdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc2hhcmUgYnV0dG9uIGlzIGhpZGRlbiBvciB2aXNpYmxlLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtYXNrLWRhdGEgaWQ9XCJ0YWJsZWF1QXNrRGF0YVwiIHNob3dTaGFyZT5cbiAgICogYGBgXG4gICAqL1xuICBzaG93U2hhcmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiAgVXNlZCBmb3IgdGVsZW1ldHJ5XG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS1hc2stZGF0YSBpZD1cInRhYmxlYXVBc2tEYXRhXCIgb3JpZ2luPVwiZW1iZWRkaW5nU2l0ZVwiPlxuICAgKiBgYGBcbiAgICovXG4gIG9yaWdpbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgdG9wIGxldmVsIEFza0RhdGEgb2JqZWN0LlxuICoqL1xuZXhwb3J0IGludGVyZmFjZSBBc2tEYXRhIGV4dGVuZHMgQXNrRGF0YVNldHRpbmdzIHt9XG4iLCIvLyBBbGwgZW51bSB2YWx1ZXMgbWFkZSBhdmFpbGFibGUgdG8gRW1iZWRkaW5nIGRldmVsb3BlcnMuXG4vLyBFbnVtcyBzaG91bGQgYmUga2VwdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuXG4vLyBNb3N0IG9mIHRoZW0gc2hvdWxkIG1hdGNoIGFuIGVudW0gb24gdGhlIHNlcnZlciBkZWZpbmVkIGF0XG4vLyB3b3JrZ3JvdXAvdnFsd2ViL3NjcmlwdHNoYXJwL3NyYy9BcGlTaGFyZWQvUHVibGljRW51bXMuY3MjTDM5ODoxN1xuXG4vKipcbiAqIERldmljZSB0eXBlcyBhdmFpbGFibGUgdG8gdXNlIHdpdGgge0BsaW5rIFZpei5kZXZpY2V9XG4gKi9cbmV4cG9ydCBlbnVtIERldmljZVR5cGUge1xuICBEZWZhdWx0ID0gJ2RlZmF1bHQnLFxuICBEZXNrdG9wID0gJ2Rlc2t0b3AnLFxuICBUYWJsZXQgPSAndGFibGV0JyxcbiAgUGhvbmUgPSAncGhvbmUnLFxufVxuXG4vKipcbiAqIEFsbCBlcnJvciBjb2RlcyB1c2VkIGJ5IHRoZSBFbWJlZGRpbmcgQVBJLlxuICovXG5leHBvcnQgZW51bSBFbWJlZGRpbmdFcnJvckNvZGVzIHtcbiAgLyoqXG4gICAqIFRoZSBicm93c2VyIGlzIG5vdCBjYXBhYmxlIG9mIHN1cHBvcnRpbmcgdGhlIFRhYmxlYXUgRW1iZWRkaW5nIEFQSVxuICAgKi9cbiAgQnJvd3Nlck5vdENhcGFibGUgPSAnYnJvd3Nlci1ub3QtY2FwYWJsZScsXG4gIC8qKlxuICAgKiBUaGUgcGVybWlzc2lvbnMgb24gYSB3b3JrYm9vayBvciBhIHZpZXcgZG8gbm90IGFsbG93IGRvd25sb2FkaW5nIHRoZSB3b3JrYm9vay5cbiAgICovXG4gIERvd25sb2FkV29ya2Jvb2tOb3RBbGxvd2VkID0gJ2Rvd25sb2FkLXdvcmtib29rLW5vdC1hbGxvd2VkJyxcbiAgLyoqXG4gICAqIFRocm93biB3aGVuIGFuIGVycm9yIG9jY3VycyB3aGlsZSBhdHRlbXB0aW5nIHRvIHBlcmZvcm0gYSBmaWx0ZXIgb3BlcmF0aW9uLlxuICAgKi9cbiAgRmlsdGVyQ2Fubm90QmVQZXJmb3JtZWQgPSAnZmlsdGVyLWNhbm5vdC1iZS1wZXJmb3JtZWQnLFxuICAvKipcbiAgICogVGhyb3duIHdoZW4gYXR0ZW1wdGluZyB0byBzd2l0Y2ggdG8gYSBzaGVldCBieSBpbmRleCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIHRoZSB3b3JrYm9vay5cbiAgICovXG4gIEluZGV4T3V0T2ZSYW5nZSA9ICdpbmRleC1vdXQtb2YtcmFuZ2UnLFxuICAvKipcbiAgICogVGhyb3duIHdoZW4gYW4gZXJyb3Igb2NjdXJzIHdpdGhpbiB0aGUgVGFibGVhdSBFbWJlZGRpbmcgQVBJLiBDb250YWN0IFRhYmxlYXUgU3VwcG9ydC5cbiAgICovXG4gIEludGVybmFsRXJyb3IgPSAnaW50ZXJuYWwtZXJyb3InLFxuICAvKipcbiAgICogQW4gb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgb24gYSBjdXN0b20gdmlldyB0aGF0IGRvZXMgbm90IGV4aXN0LlxuICAgKi9cbiAgSW52YWxpZEN1c3RvbVZpZXdOYW1lID0gJ2ludmFsaWQtY3VzdG9tLXZpZXctbmFtZScsXG4gIC8qKlxuICAgKiBBbiBpbnZhbGlkIGRhdGUgd2FzIHNwZWNpZmllZCBpbiBhIG1ldGhvZCB0aGF0IHJlcXVpcmVkIGEgZGF0ZSBwYXJhbWV0ZXIuXG4gICAqL1xuICBJbnZhbGlkRGF0ZVBhcmFtZXRlciA9ICdpbnZhbGlkLWRhdGUtcGFyYW1ldGVyJyxcbiAgLyoqXG4gICAqIEVpdGhlciBhIGZpbHRlciBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBvbiBhIGZpZWxkIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGEgc291cmNlLCBvciB0aGUgdmFsdWUgc3VwcGxpZWRcbiAgICogaW4gdGhlIGZpbHRlciBvcGVyYXRpb24gaXMgdGhlIHdyb25nIGRhdGEgdHlwZSBvciBmb3JtYXQuXG4gICAqL1xuICBpbnZhbGlkRmlsdGVyRmllbGROYW1lT3JWYWx1ZSA9ICdpbnZhbGlkLWZpbHRlci1maWVsZC1uYW1lJyxcbiAgLyoqXG4gICAqIEEgcGFyYW1ldGVyIGlzIG5vdCB0aGUgY29ycmVjdCBkYXRhIHR5cGUgb3IgZm9ybWF0LiBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBpbiB0aGUgRXJyb3IubWVzc2FnZVxuICAgKiBmaWVsZC5cbiAgICovXG4gIEludmFsaWRQYXJhbWV0ZXIgPSAnaW52YWxpZC1wYXJhbWV0ZXInLFxuICAvKipcbiAgICogQSBuZWdhdGl2ZSBzaXplIHdhcyBzcGVjaWZpZWQgb3IgdGhlIG1heFNpemUgdmFsdWUgaXMgbGVzcyB0aGFuIG1pblNpemUgaW4gU2hlZXQuY2hhbmdlU2l6ZUFzeW5jKCkuXG4gICAqL1xuICBJbnZhbGlkU2l6ZSA9ICdpbnZhbGlkLXNpemUnLFxuICAvKipcbiAgICogQSBiZWhhdmlvciB2YWx1ZSB3YXMgZm91bmQgdGhhdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIFNoZWV0U2l6ZUJlaGF2aW9yIGVudW0uXG4gICAqL1xuICBJbnZhbGlkU2l6ZUJlaGF2aW9yID0gJ2ludmFsaWQtc2l6ZS1iZWhhdmlvcicsXG4gIC8qKlxuICAgKiBBIGJlaGF2aW9yIG90aGVyIHRoYW4gU2hlZXRTaXplQmVoYXZpb3IuQXV0b21hdGljIHdhcyBzcGVjaWZpZWQgaW4gU2hlZXQuY2hhbmdlU2l6ZUFzeW5jKCkgd2hlbiB0aGUgc2hlZXQgaXMgYVxuICAgKiBXb3Jrc2hlZXQgaW5zdGFuY2UuXG4gICAqL1xuICBJbnZhbGlkU2l6ZUJlaGF2aW9yT25Xb3Jrc2hlZXQgPSAnaW52YWxpZC1zaXplLWJlaGF2aW9yLW9uLXdvcmtzaGVldCcsXG4gIC8qKlxuICAgKiBUaGUgVVJMIHNwZWNpZmllZCBpbiB0aGUgVml6IGNsYXNzIGNvbnN0cnVjdG9yIGlzIG5vdCB2YWxpZC5cbiAgICovXG4gIEludmFsaWRVcmwgPSAnaW52YWxpZC11cmwnLFxuICAvKipcbiAgICogVGhlIG1heFNpemUgZmllbGQgaXMgbWlzc2luZyBpbiBTaGVldC5jaGFuZ2VTaXplQXN5bmMoKSB3aGVuIHNwZWNpZnlpbmcgU2hlZXRTaXplQmVoYXZpb3IuQXRNb3N0LlxuICAgKi9cbiAgTWlzc2luZ01heFNpemUgPSAnbWlzc2luZy1tYXgtc2l6ZScsXG4gIC8qKlxuICAgKiBUaGUgbWluU2l6ZSBmaWVsZCBpcyBtaXNzaW5nIGluIFNoZWV0LmNoYW5nZVNpemVBc3luYygpIHdoZW4gc3BlY2lmeWluZyBTaGVldFNpemVCZWhhdmlvci5BdExlYXN0LlxuICAgKi9cbiAgTWlzc2luZ01pblNpemUgPSAnbWlzc2luZy1taW4tc2l6ZScsXG4gIC8qKlxuICAgKiBUaGUgbWluU2l6ZSBvciBtYXhTaXplIGZpZWxkIGlzIG1pc3NpbmcgaW4gU2hlZXQuY2hhbmdlU2l6ZUFzeW5jKCkgd2hlbiBzcGVjaWZ5aW5nIFNoZWV0U2l6ZUJlaGF2aW9yLlJhbmdlLlxuICAgKi9cbiAgTWlzc2luZ01pbk1heFNpemUgPSAnbWlzc2luZy1taW4tbWF4LXNpemUnLFxuICAvKipcbiAgICogQ2FuIG9jY3VyIGlmIHRoZSBlbWJlZGRpbmcgYXBwIGludGVyYWN0cyB3aXRoIGEgcGFyYW1ldGVyIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSB3b3Jrc2hlZXQuXG4gICAqL1xuICBNaXNzaW5nUGFyYW1ldGVyID0gJ21pc3NpbmctcGFyYW1ldGVyJyxcbiAgLyoqXG4gICAqIFRoZSByYW5nZU4gZmllbGQgaXMgbWlzc2luZyBmb3IgYSByZWxhdGl2ZSBkYXRlIGZpbHRlciBvZiB0eXBlIExBU1ROIG9yIE5FWFROLlxuICAgKi9cbiAgTWlzc2luZ1JhbmdlTkZvclJlbGF0aXZlRGF0ZUZpbHRlcnMgPSAnbWlzc2luZy1yYW5nZS1uLWZvci1yZWxhdGl2ZS1kYXRlLWZpbHRlcnMnLFxuICAvKipcbiAgICogQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBhY2Nlc3MgU2hlZXQuZ2V0VXJsKCkgb24gYSBoaWRkZW4gc2hlZXQuIEhpZGRlbiBzaGVldHMgZG8gbm90IGhhdmUgVVJMcy5cbiAgICovXG4gIE5vVXJsRm9ySGlkZGVuV29ya3NoZWV0ID0gJ25vLXVybC1mb3ItaGlkZGVuLXdvcmtzaGVldCcsXG4gIC8qKlxuICAgKiBPbmUgb3IgYm90aCBvZiB0aGUgcGFyZW50RWxlbWVudCBvciB0aGUgVVJMIHBhcmFtZXRlcnMgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgVml6IGNvbnN0cnVjdG9yLlxuICAgKi9cbiAgTm9VcmxPclBhcmVudEVsZW1lbnROb3RGb3VuZCA9ICduby11cmwtb3ItcGFyZW50LWVsZW1lbnQtbm90LWZvdW5kJyxcbiAgLyoqXG4gICAqIEFuIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIG9uIGEgc2hlZXQgdGhhdCBpcyBub3QgYWN0aXZlIG9yIGVtYmVkZGVkIHdpdGhpbiB0aGUgYWN0aXZlIGRhc2hib2FyZC5cbiAgICovXG4gIE5vdEFjdGl2ZVNoZWV0ID0gJ25vdC1hY3RpdmUtc2hlZXQnLFxuICAvKipcbiAgICogQSByZXF1aXJlZCBwYXJhbWV0ZXIgd2FzIG5vdCBzcGVjaWZpZWQsIG51bGwsIG9yIGFuIGVtcHR5IHN0cmluZy9hcnJheS5cbiAgICovXG4gIE51bGxPckVtcHR5UGFyYW1ldGVyID0gJ251bGwtb3ItZW1wdHktcGFyYW1ldGVyJyxcbiAgLyoqXG4gICAqIEFuIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIG9uIGEgc2hlZXQgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgd29ya2Jvb2suXG4gICAqL1xuICBTaGVldE5vdEluV29ya2Jvb2sgPSAnc2hlZXQtbm90LWluLXdvcmtib29rJyxcbiAgLyoqXG4gICAqIEFuIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgb24gYSBDdXN0b21WaWV3IG9iamVjdCB0aGF0IGlzIG5vIGxvbmdlciB2YWxpZCAoaXQgaGFzIGJlZW4gcmVtb3ZlZCkuXG4gICAqL1xuICBTdGFsZURhdGFSZWZlcmVuY2UgPSAnc3RhbGUtZGF0YS1yZWZlcmVuY2UnLFxuICAvKipcbiAgICogQW4gdW5rbm93biBldmVudCBuYW1lIHdhcyBzcGVjaWZpZWQgaW4gdGhlIGNhbGwgdG8gVml6LmFkZEV2ZW50TGlzdGVuZXIgb3IgVml6LnJlbW92ZUV2ZW50TGlzdGVuZXIuXG4gICAqL1xuICBVbnN1cHBvcnRlZEV2ZW50TmFtZSA9ICd1bnN1cHBvcnRlZC1ldmVudC1uYW1lJyxcbiAgLyoqXG4gICAqIEEgVml6IG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYXMgYSBjaGlsZCBvZiB0aGUgcGFyZW50RWxlbWVudCBzcGVjaWZpZWQgaW4gdGhlIFZpeiBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIFZpekFscmVhZHlJbk1hbmFnZXIgPSAndml6LWFscmVhZHktaW4tbWFuYWdlcicsXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBlbWJlZGRpbmcgYXBpLlxuICAgKi9cbiAgSW1wbGVtZW50YXRpb25FcnJvciA9ICd3cm9uZy1pbXBsZW1lbnRhdGlvbicsXG4gIC8qKlxuICAgKiBATm90SW1wbGVtZW50ZWRcbiAgICovXG4gIE5vdEltcGxlbWVudGVkID0gJ25vdC1pbXBsZW1lbnRlZCcsXG4gIC8qKlxuICAgKiBVbmtub3duIGVycm9yIGR1cmluZyBldmVudCBpbml0aWFsaXphdGlvblxuICAgKi9cbiAgRXZlbnRJbml0aWFsaXphdGlvbkVycm9yID0gJ2V2ZW50LWluaXRpYWxpemF0aW9uLWVycm9yJyxcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIGVtYmVkZGluZyBhcGkgbm90IHN1cHBvcnRlZCBieSB0aGUgdmVyc2lvbiBvZiB0YWJsZWF1XG4gICAqL1xuICBJbmNvbXBhdGlibGVWZXJzaW9uRXJyb3IgPSAnaW5jb21wYXRpYmxlLXZlcnNpb24tZXJyb3InLFxuXG4gIC8qKlxuICAgKiBVbmtub3duIHtAbGluayBUYWJsZWF1RGlhbG9nVHlwZX0gcGFzc2VkIGluIHRvIFZpei5kaXNwbGF5RGlhbG9nQXN5bmMuXG4gICAqL1xuICBVbmtub3duRGlhbG9nVHlwZSA9ICd1bmtub3duLWRpYWxvZy10eXBlJyxcblxuICAvKipcbiAgICogQ2FuIG9jY3VyIGlmIHRoZSBBUEkgaW50ZXJhY3RzIHdpdGggYSBmaWx0ZXIgdGhhdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHdvcmtzaGVldC5cbiAgICogQ2FuIGFsc28gb2NjdXJzIGlmIGEge0BsaW5rIEZpbHRlclR5cGV9IGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZC5cbiAgICovXG4gIEZpbHRlck1pc3NpbmdPck5vdEltcGxlbWVudGVkID0gJ2ZpbHRlci1taXNzaW5nLW5vdC1pbXBsZW1lbnRlZCcsXG5cbiAgLyoqXG4gICAqIENhbiBvY2N1ciBpZiBzdG9yeSBwb2ludCBpZHMgbm8gbG9uZ2VyIG1hdGNoLlxuICAgKi9cbiAgU3RvcnlQb2ludElkTWlzbWF0Y2ggPSAnc3Rvcnlwb2ludC1pZC1taXNtYXRjaCcsXG59XG5cbi8qKlxuICogRm9ybWF0cyBhdmFpbGFibGUgdG8gdXNlIHdpdGggZGlzcGxheVN0YXRpY0ltYWdlIGluIEBWaXpJbnRlcmZhY2VzXG4gKi9cbmV4cG9ydCBlbnVtIEZpbGVGb3JtYXRzIHtcbiAgUERGID0gJ3BkZicsXG4gIFBORyA9ICdwbmcnLFxufVxuXG5leHBvcnQgZW51bSBSZXZlcnRWaXpTZWxlY3Rpb24ge1xuICBBbGwgPSAnYWxsJyxcbiAgQXhlcyA9ICdheGVzJyxcbiAgRmlsdGVycyA9ICdmaWx0ZXJzJyxcbiAgU29ydHMgPSAnc29ydHMnLFxuICBTaGVsdmVzID0gJ3NoZWx2ZXMnLFxufVxuXG5leHBvcnQgZW51bSBUb29sYmFyQnV0dG9ucyB7XG4gIEFsZXJ0cyA9ICdhbGVydHMnLFxuICBBc2tEYXRhID0gJ2Fza0RhdGEnLFxuICBDdXN0b21WaWV3cyA9ICdjdXN0b21WaWV3cycsXG4gIERhdGFEZXRhaWxzID0gJ2RhdGFEZXRhaWxzJyxcbiAgU2hhcmUgPSAnc2hhcmUnLFxuICBTdWJzY3JpYmUgPSAnc3Vic2NyaWJlJyxcbn1cblxuZXhwb3J0IGVudW0gVG9vbGJhciB7XG4gIFRvcCA9ICd0b3AnLFxuICBCb3R0b20gPSAnYm90dG9tJyxcbiAgSGlkZGVuID0gJ2hpZGRlbicsXG59XG5cbmV4cG9ydCBlbnVtIFNoZWV0U2l6ZUJlaGF2aW9yIHtcbiAgQXV0b21hdGljID0gJ2F1dG9tYXRpYycsXG4gIEV4YWN0bHkgPSAnZXhhY3RseScsXG4gIFJhbmdlID0gJ3JhbmdlJyxcbiAgQXRMZWFzdCA9ICdhdGxlYXN0JyxcbiAgQXRNb3N0ID0gJ2F0bW9zdCcsXG59XG5cbi8qKlxuICogQmUgY2FyZWZ1bCB3aGVuIGFkZGluZyBuZXcgZXZlbnQgdHlwZXMuIEV4dGVuc2lvbnMgYW5kIGVtYmVkZGluZyBmb2xsb3cgdHdvIGRpZmZlcmVudCBwYXR0ZXJucyBvbiBob3cgZXZlbnRzIGFyZSBuYW1lZC5cbiAqIEV2ZW50cyBzaG91bGQgYmUgYWxsIGxvd2VyIGNhc2UgYW5kIHdpdGhvdXQgaHlwaGVucyBvciB1bmRlcnNjb3Jlcy5cbiAqL1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHR5cGUgb2YgdGFibGVhdSBlbWJlZGRpbmcgZXZlbnQgdGhhdCBjYW4gYmUgbGlzdGVuZWQgZm9yLlxuICovXG5leHBvcnQgZW51bSBUYWJsZWF1RXZlbnRUeXBlIHtcbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgY3VzdG9tIHZpZXcgaGFzIGZpbmlzaGVkIGxvYWRpbmcuIFRoaXMgZXZlbnQgaXMgcmFpc2VkIGFmdGVyIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Ige0BsaW5rIEZpcnN0SW50ZXJhY3RpdmV9IChpZiBhbnkpIGhhcyBiZWVuIGNhbGxlZC5cbiAgICpcbiAgICogQGNhdGVnb3J5IFZpZXdpbmdcbiAgICovXG4gIEN1c3RvbVZpZXdMb2FkZWQgPSAnY3VzdG9tdmlld2xvYWRlZCcsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgY3VzdG9tIHZpZXcgaGFzIGJlZW4gcmVtb3ZlZC5cbiAgICpcbiAgICogQGNhdGVnb3J5IFZpZXdpbmdcbiAgICovXG4gIEN1c3RvbVZpZXdSZW1vdmVkID0gJ2N1c3RvbXZpZXdyZW1vdmVkJyxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBjdXN0b20gdmlldyBoYXMgYmVlbiBzYXZlZCAobmV3bHkgY3JlYXRlZCBvciB1cGRhdGVkKS5cbiAgICpcbiAgICogQGNhdGVnb3J5IFZpZXdpbmdcbiAgICovXG4gIEN1c3RvbVZpZXdTYXZlZCA9ICdjdXN0b212aWV3c2F2ZWQnLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIGN1c3RvbSB2aWV3IGhhcyBiZWVuIHNldCBhcyB0aGUgZGVmYXVsdCB2aWV3IGZvciBhIHdvcmtib29rLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgQ3VzdG9tVmlld1NldERlZmF1bHQgPSAnY3VzdG9tdmlld3NldGRlZmF1bHQnLFxuXG4gIC8qKiBSYWlzZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIEVkaXQgQnV0dG9uLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgRWRpdEJ1dHRvbkNsaWNrZWQgPSAnZWRpdGJ1dHRvbmNsaWNrZWQnLFxuXG4gIC8qKiBSYWlzZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIEVkaXQgSW4gRGVza3RvcCBCdXR0b24uXG4gICAqXG4gICAqIEBjYXRlZ29yeSBBdXRob3JpbmcsIFZpZXdpbmdcbiAgICovXG4gIEVkaXRJbkRlc2t0b3BCdXR0b25DbGlja2VkID0gJ2VkaXRpbmRlc2t0b3BidXR0b25jbGlja2VkJyxcblxuICAvKiogUmFpc2VkIHdoZW4gYW55IGZpbHRlciBoYXMgY2hhbmdlZCBzdGF0ZS4gWW91IGNhbiB1c2UgdGhpcyBldmVudCB0eXBlIHdpdGggVGFibGVhdVZpeiBvYmplY3RzLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgRmlsdGVyQ2hhbmdlZCA9ICdmaWx0ZXJjaGFuZ2VkJyxcblxuICAvKiogRmlyZWQgd2hlbiB2aXogc2l6ZSBpcyBrbm93blxuICAgKlxuICAgKiBAY2F0ZWdvcnkgQXV0aG9yaW5nLCBWaWV3aW5nXG4gICAqL1xuICBGaXJzdFZpelNpemVLbm93biA9ICdmaXJzdHZpenNpemVrbm93bicsXG5cbiAgLyoqIEZpcmVkIHdoZW4gYSB2aXogZmlyc3QgYmVjb21lcyBpbnRlcmFjdGl2ZVxuICAgKlxuICAgKiBAY2F0ZWdvcnkgQXV0aG9yaW5nLCBWaWV3aW5nXG4gICAqL1xuICBGaXJzdEludGVyYWN0aXZlID0gJ2ZpcnN0aW50ZXJhY3RpdmUnLFxuXG4gIC8qKiBSYWlzZWQgd2hlbiBhIGN1c3RvbSBtYXJrIGNvbnRleHQgbWVudSBpcyBjbGlja2VkLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgQ3VzdG9tTWFya0NvbnRleHRNZW51RXZlbnQgPSAnY3VzdG9tbWFya2NvbnRleHRtZW51JyxcblxuICAvKiogVGhlIHNlbGVjdGVkIG1hcmtzIG9uIGEgdmlzdWFsaXphdGlvbiBoYXZlIGNoYW5nZWQuIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdHlwZSB3aXRoIFRhYmxlYXVWaXogb2JqZWN0cy5cbiAgICpcbiAgICogQGNhdGVnb3J5IFZpZXdpbmdcbiAgICovXG4gIE1hcmtTZWxlY3Rpb25DaGFuZ2VkID0gJ21hcmtzZWxlY3Rpb25jaGFuZ2VkJyxcblxuICAvKiogQSBwYXJhbWV0ZXIgaGFzIGhhZCBpdHMgdmFsdWUgbW9kaWZpZWQuIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdHlwZSB3aXRoIFtbUGFyYW1ldGVyXV0gb2JqZWN0cy5cbiAgICpcbiAgICogQGNhdGVnb3J5IFZpZXdpbmdcbiAgICovXG4gIFBhcmFtZXRlckNoYW5nZWQgPSAncGFyYW1ldGVyY2hhbmdlZCcsXG5cbiAgLyoqIFJhaXNlZCB3aGVuIGEgdG9vbGJhciBidXR0b24gb3IgY29udHJvbCBiZWNvbWVzIGF2YWlsYWJsZSBvciBiZWNvbWVzIHVuYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgVG9vbGJhclN0YXRlQ2hhbmdlZCA9ICd0b29sYmFyc3RhdGVjaGFuZ2VkJyxcblxuICAvKiogUmFpc2VkIHdoZW4gdGhlIHdvcmtib29rIGlzIHJlYWR5IHRvIGNsb3NlLiBUaGlzIG5vdGlmaWNhdGlvbiBpcyBzZW50IHdoZW4gdXNpbmcgZW1iZWRkZWQgd2ViIGF1dGhvcmluZyBmdW5jdGlvbmFsaXR5LlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgQXV0aG9yaW5nXG4gICAqL1xuICBXb3JrYm9va1JlYWR5VG9DbG9zZSA9ICd3b3JrYm9va3JlYWR5dG9jbG9zZScsXG5cbiAgLyoqIFJhaXNlZCB3aGVuIHRoZSB3b3JrYm9vayBoYXMgYmVlbiBwdWJsaXNoZWQuIFRoaXMgbm90aWZpY2F0aW9uIGlzIHNlbnQgd2hlbiB1c2luZyBlbWJlZGRlZCB3ZWIgYXV0aG9yaW5nIGZ1bmN0aW9uYWxpdHkuXG4gICAqXG4gICAqIEBjYXRlZ29yeSBBdXRob3JpbmdcbiAgICovXG4gIFdvcmtib29rUHVibGlzaGVkID0gJ3dvcmtib29rcHVibGlzaGVkJyxcblxuICAvKiogUmFpc2VkIHdoZW4gXCJwdWJsaXNoIGFzXCIgaXMgc3VjY2Vzc2Z1bC4gVGhpcyBub3RpZmljYXRpb24gaXMgc2VudCB3aGVuIHVzaW5nIGVtYmVkZGVkIHdlYiBhdXRob3JpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICpcbiAgICogQGNhdGVnb3J5IEF1dGhvcmluZ1xuICAgKi9cbiAgV29ya2Jvb2tQdWJsaXNoZWRBcyA9ICd3b3JrYm9va3B1Ymxpc2hlZGFzJyxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBVUkwgYWN0aW9uIG9jY3Vycy4gU2VlIHRoZSB7QGxpbmsgVXJsQWN0aW9uRXZlbnR9IGNsYXNzLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgVmlld2luZ1xuICAgKi9cbiAgVXJsQWN0aW9uID0gJ3VybGFjdGlvbicsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCBhZnRlciBhIHRhYiBzd2l0Y2ggb2NjdXJzICh0aGUgYWN0aXZlIHNoZWV0IGhhcyBjaGFuZ2VkKS4gR3VhcmFudGVlcyB0aGUgdml6IG9iamVjdCB3aWxsIGJlIGludGVyYWN0aXZlIGFmdGVyIHRoaXMuXG4gICAqXG4gICAqIEBjYXRlZ29yeSBWaWV3aW5nXG4gICAqL1xuICBUYWJTd2l0Y2hlZCA9ICd0YWJzd2l0Y2hlZCcsXG4gIC8qKlxuICAgKlxuICAgKiBSYWlzZWQgYWZ0ZXIgYSBuZXcgc3RvcnkgcG9pbnQgYmVjb21lcyBhY3RpdmUuXG4gICAqXG4gICAqIEBjYXRlZ29yeSBWaWV3aW5nXG4gICAqL1xuICBTdG9yeVBvaW50U3dpdGNoZWQgPSAnc3Rvcnlwb2ludHN3aXRjaGVkJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBsb2NhdGlvbiBvZiBhIGNvbnRleHQgbWVudSB3aGVyZSB1c2VycyBjYW4gYWRkIGV4dGVybmFsIG1lbnUgaXRlbXMuXG4gKi9cbmV4cG9ydCBlbnVtIEFwaU1lbnVUeXBlIHtcbiAgLyoqIEV4dGVybmFsIG1lbnUgaXRlbSB3aWxsIGJlIGluamVjdGVkIGluIHViZXJ0aXAgZGlhbG9nICovXG4gIFViZXJ0aXAgPSAndWJlcnRpcCcsXG59XG5cbi8qKiBZb3UgY2FuIHVzZSB0aGlzIHR5cGUgd2l0aCBhIHtAbGluayBWaXp9IG9iamVjdC4gKi9cbmV4cG9ydCBlbnVtIFRhYmxlYXVEaWFsb2dUeXBlIHtcbiAgLyoqXG4gICAqIFVzZWQgdG8gZGlzcGxheSB0aGUgZG93bmxvYWQgUERGIGRpYWxvZy5cbiAgICovXG4gIEV4cG9ydFBERiA9ICdleHBvcnQtcGRmJyxcbiAgLyoqXG4gICAqIFVzZWQgdG8gZGlzcGxheSB0aGUgZG93bmxvYWQgUG93ZXJQb2ludCBkaWFsb2cuXG4gICAqL1xuICBFeHBvcnRQb3dlclBvaW50ID0gJ2V4cG9ydC1wb3dlcnBvaW50JyxcbiAgLyoqXG4gICAqIFVzZWQgdG8gZGlzcGxheSB0aGUgZG93bmxvYWQgRGF0YSBkaWFsb2cuXG4gICAqL1xuICBFeHBvcnREYXRhID0gJ2V4cG9ydC1kYXRhJyxcbiAgLyoqXG4gICAqIFVzZWQgdG8gZGlzcGxheSB0aGUgZG93bmxvYWQgQ3Jvc3NUYWIgZGlhbG9nLlxuICAgKi9cbiAgRXhwb3J0Q3Jvc3NUYWIgPSAnZXhwb3J0LWNyb3NzLXRhYicsXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRpc3BsYXkgdGhlIGRvd25sb2FkIFdvcmtib29rIGRpYWxvZy5cbiAgICovXG4gIEV4cG9ydFdvcmtib29rID0gJ2V4cG9ydC13b3JrYm9vaycsXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRpc3BsYXkgdGhlIFNoYXJlIGRpYWxvZy5cbiAgICovXG4gIFNoYXJlID0gJ3NoYXJlJyxcbn1cbiIsImltcG9ydCB7IERldmljZVR5cGUsIFRhYmxlYXVEaWFsb2dUeXBlLCBUYWJsZWF1RXZlbnRUeXBlLCBUb29sYmFyIH0gZnJvbSAnLi9FbnVtcyc7XG5pbXBvcnQgeyBTaGVldFNpemUgfSBmcm9tICcuL1NoZWV0SW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBXZWJDb21wb25lbnRMb2NhbFNldHRpbmdzLCBXZWJDb21wb25lbnRTZXR0aW5nc1NoYXJlZCB9IGZyb20gJy4vV2ViQ29tcG9uZW50SW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBXb3JrYm9vayB9IGZyb20gJy4vV29ya2Jvb2tJbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgc3RyaW5nIGNvbnN0YW50cyB5b3UgY2FuIHVzZSBhcyBIVE1MIGF0dHJpYnV0ZXMgZm9yIHRoZSA8dGFibGVhdS12aXo+IGFuZCA8dGFibGVhdS1hdXRob3Jpbmctdml6PiB3ZWIgY29tcG9uZW50LlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZW51bSBWaXpTaGFyZWRBdHRyaWJ1dGVzIHtcbiAgVG91Y2hPcHRpbWl6ZSA9ICd0b3VjaC1vcHRpbWl6ZScsXG4gIEhpZGVFZGl0SW5EZXNrdG9wQnV0dG9uID0gJ2hpZGUtZWRpdC1pbi1kZXNrdG9wLWJ1dHRvbicsXG4gIFN1cHByZXNzRGVmYXVsdEVkaXRCZWhhdmlvciA9ICdzdXBwcmVzcy1kZWZhdWx0LWVkaXQtYmVoYXZpb3InLFxuICBEaXNhYmxlVmVyc2lvbkNoZWNrID0gJ2Rpc2FibGUtdmVyc2lvbi1jaGVjaycsXG4gIE9uRWRpdEluRGVza3RvcEJ1dHRvbkNsaWNrZWQgPSAnb25FZGl0SW5EZXNrdG9wQnV0dG9uQ2xpY2tlZCcsXG4gIE9uRmlyc3RWaXpTaXplS25vd24gPSAnb25GaXJzdFZpelNpemVLbm93bicsXG4gIE9uRmlyc3RJbnRlcmFjdGl2ZSA9ICdvbkZpcnN0SW50ZXJhY3RpdmUnLFxufVxuXG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgc3RyaW5nIGNvbnN0YW50cyB5b3UgY2FuIHVzZSBhcyBIVE1MIGF0dHJpYnV0ZXMgZm9yIHRoZSA8dGFibGVhdS12aXo+IHdlYiBjb21wb25lbnQuXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBlbnVtIFZpekF0dHJpYnV0ZXMge1xuICBEaXNhYmxlVXJsQWN0aW9uc1BvcHVwcyA9ICdkaXNhYmxlLXVybC1hY3Rpb25zJyxcbiAgSGlkZVRhYnMgPSAnaGlkZS10YWJzJyxcbiAgVG9vbGJhciA9ICd0b29sYmFyJyxcbiAgSW5zdGFuY2VJZFRvQ2xvbmUgPSAnaW5zdGFuY2UtaWQtdG8tY2xvbmUnLFxuICBEZXZpY2UgPSAnZGV2aWNlJyxcbiAgSGlkZUVkaXRCdXR0b24gPSAnaGlkZS1lZGl0LWJ1dHRvbicsXG4gIE9uRWRpdEJ1dHRvbkNsaWNrZWQgPSAnb25FZGl0QnV0dG9uQ2xpY2tlZCcsXG4gIE9uRmlsdGVyQ2hhbmdlZCA9ICdvbkZpbHRlckNoYW5nZWQnLFxuICBPbkN1c3RvbU1hcmtDb250ZXh0TWVudUV2ZW50ID0gJ29uQ3VzdG9tTWFya0NvbnRleHRNZW51RXZlbnQnLFxuICBPbk1hcmtTZWxlY3Rpb25DaGFuZ2VkID0gJ29uTWFya1NlbGVjdGlvbkNoYW5nZWQnLFxuICBPblBhcmFtZXRlckNoYW5nZWQgPSAnb25QYXJhbWV0ZXJDaGFuZ2VkJyxcbiAgT25Ub29sYmFyU3RhdGVDaGFuZ2VkID0gJ29uVG9vbGJhclN0YXRlQ2hhbmdlZCcsXG4gIE9uVXJsQWN0aW9uID0gJ29uVXJsQWN0aW9uJyxcbiAgT25UYWJTd2l0Y2hlZCA9ICdvblRhYlN3aXRjaGVkJyxcbiAgT25DdXN0b21WaWV3TG9hZGVkID0gJ29uQ3VzdG9tVmlld0xvYWRlZCcsXG4gIE9uQ3VzdG9tVmlld1JlbW92ZWQgPSAnb25DdXN0b21WaWV3UmVtb3ZlZCcsXG4gIE9uQ3VzdG9tVmlld1NhdmVkID0gJ29uQ3VzdG9tVmlld1NhdmVkJyxcbiAgT25DdXN0b21WaWV3U2V0RGVmYXVsdCA9ICdvbkN1c3RvbVZpZXdTZXREZWZhdWx0JyxcbiAgT25TdG9yeVBvaW50U3dpdGNoZWQgPSAnb25TdG9yeVBvaW50U3dpdGNoZWQnLFxufVxuXG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgc3RyaW5nIGNvbnN0YW50cyB5b3UgY2FuIHVzZSBhcyBIVE1MIGF0dHJpYnV0ZXMgZm9yIHRoZSA8dGFibGVhdS1hdXRob3Jpbmctdml6PiB3ZWIgY29tcG9uZW50LlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZW51bSBWaXpBdXRob3JpbmdBdHRyaWJ1dGVzIHtcbiAgT25Xb3JrYm9va1B1Ymxpc2hlZCA9ICdvbldvcmtib29rUHVibGlzaGVkJyxcbiAgT25Xb3JrYm9va1B1Ymxpc2hlZEFzID0gJ29uV29ya2Jvb2tQdWJsaXNoZWRBcycsXG4gIE9uV29ya2Jvb2tSZWFkeVRvQ2xvc2UgPSAnb25Xb3JrYm9va1JlYWR5VG9DbG9zZScsXG4gIEhpZGVDbG9zZUJ1dHRvbiA9ICdoaWRlLWNsb3NlLWJ1dHRvbicsXG59XG5cbi8qKlxuICogVGhlIG5hbWVzIG9mIHRoZSBzdHJpbmcgY29uc3RhbnRzIHlvdSBjYW4gdXNlIGFzIGNoaWxkIHRhZ3MgZm9yIFRhYmxlYXVWaXogYW5kIFRhYmxlYXVBdXRob3JpbmdWaXogY3VzdG9tIGVsZW1lbnRzLlxuICovXG5leHBvcnQgZW51bSBWaXpDaGlsZEVsZW1lbnRzIHtcbiAgLyoqXG4gICAqIENvbnRhaW5zIGEgbGlzdCBvZiBmaWx0ZXIgcGFyYW1ldGVycy4gQXZhaWxhYmxlIG9ubHkgaW4gdmlld2luZyBtb2RlLlxuICAgKi9cbiAgVml6RmlsdGVyID0gJ3Zpei1maWx0ZXInLFxuXG4gIC8qKlxuICAgKiBDb250YWlucyBhIG5hbWUgYW5kIHZhbHVlIGZvciBhIHBhcmFtZXRlci4gQXZhaWxhYmxlIG9ubHkgaW4gdmlld2luZyBtb2RlLlxuICAgKi9cbiAgVml6UGFyYW1ldGVyID0gJ3Zpei1wYXJhbWV0ZXInLFxuXG4gIC8qKlxuICAgKiBDb250YWlucyBhIGxpc3Qgb2YgY3VzdG9tIHBhcmFtZXRlcnMuICBBdmFpbGFibGUgaW4gYm90aCB2aWV3aW5nIGFuZCBhdXRob3JpbmcgbW9kZXMuXG4gICAqL1xuICBDdXN0b21QYXJhbWV0ZXIgPSAnY3VzdG9tLXBhcmFtZXRlcicsXG59XG5cbmV4cG9ydCBlbnVtIFZpekNoaWxkRWxlbWVudEF0dHJpYnV0ZXMge1xuICBGaWVsZCA9ICdmaWVsZCcsXG4gIFZhbHVlID0gJ3ZhbHVlJyxcbiAgTmFtZSA9ICduYW1lJyxcbn1cblxuLyoqXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgdG9wIGxldmVsIFZpeiBvYmplY3QuXG4gKiovXG5leHBvcnQgaW50ZXJmYWNlIFZpeiBleHRlbmRzIFZpelNldHRpbmdzLCBXZWJDb21wb25lbnRMb2NhbFNldHRpbmdzLCBWaXpBY3Rpb25zIHtcbiAgLyoqXG4gICAqIE9uZSBXb3JrYm9vayBpcyBzdXBwb3J0ZWQgcGVyIHZpc3VhbGl6YXRpb24uXG4gICAqL1xuICByZWFkb25seSB3b3JrYm9vaz86IFdvcmtib29rO1xufVxuXG4vKipcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSB0b3AgbGV2ZWwgQXV0aG9yaW5nIFZpeiBvYmplY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yaW5nVml6IGV4dGVuZHMgVml6QXV0aG9yaW5nU2V0dGluZ3MsIFdlYkNvbXBvbmVudExvY2FsU2V0dGluZ3Mge1xuICAvKipcbiAgICogR2V0cyB0aGUgdmlzdWFsaXphdGlvbidzIGN1cnJlbnQgVVJMLlxuICAgKi9cbiAgZ2V0Q3VycmVudFNyY0FzeW5jKCk6IFByb21pc2U8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBQYXJ0aWFsbHkgaW1wbGVtZW50ZWQgLSBBY3Rpb25zIHJlbGF0ZWQgdG8gZXZlbnRzIGFuZCBzdGF0ZSBvZiB0aGUgdml6XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVml6QWN0aW9ucyB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhdXRvbWF0aWMgdXBkYXRlcyBhcmUgY3VycmVudGx5IHBhdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dG9tYXRpY1VwZGF0ZXNBcmVQYXVzZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdXNlIGxheW91dCB1cGRhdGVzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIHJlc2l6aW5nIHRoZSB2aXN1YWxpemF0aW9uIG9yIHBlcmZvcm1pbmcgbXVsdGlwbGUgY2FsbHMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIGxheW91dC5cbiAgICovXG4gIHBhdXNlQXV0b21hdGljVXBkYXRlc0FzeW5jKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBsYXlvdXQgdXBkYXRlcy5cbiAgICovXG4gIHJlc3VtZUF1dG9tYXRpY1VwZGF0ZXNBc3luYygpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgbGF5b3V0IHVwZGF0ZXMuXG4gICAqL1xuICB0b2dnbGVBdXRvbWF0aWNVcGRhdGVzQXN5bmMoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogRXF1aXZhbGVudCB0byBjbGlja2luZyBvbiB0aGUgUmV2ZXJ0IEFsbCB0b29sYmFyIGJ1dHRvbiwgd2hpY2ggcmVzdG9yZXMgdGhlIHdvcmtib29rIHRvIGl0cyBzdGFydGluZyBzdGF0ZS5cbiAgICovXG4gIHJldmVydEFsbEFzeW5jKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEVxdWl2YWxlbnQgdG8gY2xpY2tpbmcgb24gdGhlIFJlZnJlc2ggRGF0YSB0b29sYmFyIGJ1dHRvbi5cbiAgICovXG4gIHJlZnJlc2hEYXRhQXN5bmMoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogRXF1aXZhbGVudCB0byBjbGlja2luZyBvbiBEb3dubG9hZCA+IEltYWdlIGZyb20gdGhlIHRvb2xiYXIsIHdoaWNoIGNyZWF0ZXMgYSBQTkcgZmlsZSBvZiB0aGUgY3VycmVudCB2aXN1YWxpemF0aW9uLlxuICAgKi9cbiAgZXhwb3J0SW1hZ2VBc3luYygpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5IG9uZSBvZiB0aGUgZXhwb3J0IGRpYWxvZ3MgYmFzZWQgb24gdGhlIGRpYWxvZ1R5cGUgcGFyYW1ldGVyXG4gICAqXG4gICAqIFRocm93cyBhbiBlcnJvciBpZiBkaWFsb2dUeXBlIGlzIGludmFsaWRcbiAgICovXG4gIGRpc3BsYXlEaWFsb2dBc3luYyhkaWFsb2dUeXBlOiBUYWJsZWF1RGlhbG9nVHlwZSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZpc3VhbGl6YXRpb24ncyBjdXJyZW50IFVSTC5cbiAgICovXG4gIGdldEN1cnJlbnRTcmNBc3luYygpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFJlZG9lcyB0aGUgbGFzdCBhY3Rpb24gcGVyZm9ybWVkIG9uIGEgc2hlZXQuXG4gICAqL1xuICByZWRvQXN5bmMoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVW5kb2VzIHRoZSBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgb24gYSBzaGVldC5cbiAgICovXG4gIHVuZG9Bc3luYygpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gICAqXG4gICAqIGBgYFxuICAgKiBhc3luYyBmdW5jdGlvbiBnZXRTZWxlY3RlZE1hcmtzKGV2ZW50KSB7XG4gICAqICAgICBjb25zdCBtYXJrc1NlbGVjdGVkID0gYXdhaXQgZXZlbnQuZGV0YWlsLmdldE1hcmtzQXN5bmMoKTtcbiAgICogICAgIGNvbnN0IG51bU1hcmtzID0gbWFya3NTZWxlY3RlZC5kYXRhWzBdLmRhdGEubGVuZ3RoO1xuICAgKiAgICAgY29uc29sZS5sb2coYCR7bnVtTWFya3N9IG1hcmtzIFNlbGVjdGVkYCk7XG4gICAqIH1cbiAgICpcbiAgICogbGV0IHZpeiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZWF1Vml6Jyk7XG4gICAqIHZpei5hZGRFdmVudExpc3RlbmVyKFwibWFya3NlbGVjdGlvbmNoYW5nZWRcIiwgZ2V0U2VsZWN0ZWRNYXJrcyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBUYWJsZWF1RXZlbnRUeXBlLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgZnJvbSB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICAgKlxuICAgKiBgYGBcbiAgICogbGV0IHZpeiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZWF1Vml6Jyk7XG4gICAqIHZpei5yZW1vdmVFdmVudExpc3RlbmVyKFwibWFya3NlbGVjdGlvbmNoYW5nZWRcIiwgZ2V0U2VsZWN0ZWRNYXJrcyk7XG4gICAqIGBgYFxuICAgKi9cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBUYWJsZWF1RXZlbnRUeXBlLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBmaWx0ZXIgdGhlIHZpeiBiZWZvcmUgaW5pdGlhbGl6YXRpb24uIElmIHVzZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24sIGl0IHdpbGwgcmUtcmVuZGVyIHRoZSB2aXouXG4gICAqIEZvciBmaWx0ZXJpbmcgYWZ0ZXIgaW5pdGlhbGl6YXRpb24sIHVzZSB0aGUgb3RoZXIgZmlsdGVyaW5nIG1ldGhvZHMsIHN1Y2ggYXMgYGFwcGx5RmlsdGVyQXN5bmNgLlxuICAgKlxuICAgKiBJZiB5b3UgYWRkIHRoZSBzYW1lIGZpbHRlciBmaWVsZHMgdXNpbmcgdGhlIGBhZGRGaWx0ZXIoKWAgbWV0aG9kIGFuZCBieSB1c2luZyB0aGUgYDx2aXotZmlsdGVyPmAgZWxlbWVudCBpbiB0aGUgYDx0YWJsZWF1LXZpej5gIHdlYiBjb21wb25lbnQsXG4gICAqIHlvdSBtaWdodCBleHBlcmllbmNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIGZpbHRlciBvbi5cbiAgICogQHBhcmFtIHZhbHVlIFNpbmdsZSB2YWx1ZSBvciBhIGxpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHZhbHVlcyB0byBmaWx0ZXIgb24uXG4gICAqXG4gICAqIGBgYFxuICAgKiB2aXouYWRkRmlsdGVyKCdSZWdpb24nLCAnQ2VudHJhbCxXZXN0Jyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRmlsdGVyKGZpZWxkTmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXpTaXplIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIHNoZWV0U2l6ZSByZWNvcmQgZm9yIHRoZSBjdXJyZW50IHNoZWV0XG4gICAqL1xuICByZWFkb25seSBzaGVldFNpemU6IFNoZWV0U2l6ZTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBUYWJsZWF1IFVJIGVsZW1lbnRzICh0aGUgY2hyb21lKSBzdXJyb3VuZGluZyB0aGUgdmlldy5cbiAgICovXG4gIHJlYWRvbmx5IGNocm9tZUhlaWdodDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHJlcHJlc2VudHMgYWxsIG9mIHRoZSBvcHRpb25zIGZvciBjb25maWd1cmluZyBhIHZpeiB0aGF0IGFyZSBjb21tb24gYmV0d2VlblxuICogdmlld2luZyBhbmQgYXV0aG9yaW5nIG1vZGUuXG4gKi9cbmludGVyZmFjZSBWaXpTZXR0aW5nc1NoYXJlZCBleHRlbmRzIFdlYkNvbXBvbmVudFNldHRpbmdzU2hhcmVkIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHRvdWNoIG9wdGltaXplIHZpeiBjb250cm9scy5cbiAgICpcbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiB0b3VjaC1vcHRpbWl6ZSAvPlxuICAgKiA8dGFibGVhdS1hdXRob3Jpbmctdml6IGlkPVwidGFibGVhdVZpelwiIHRvdWNoLW9wdGltaXplIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgdG91Y2hPcHRpbWl6ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBFZGl0IGluIERlc2t0b3AgYnV0dG9uIGlzIGhpZGRlbiBvciB2aXNpYmxlLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byBmYWxzZSwgbWVhbmluZyB0aGF0IHRoZSBFZGl0IGluIERlc2t0b3AgYnV0dG9uIGlzIHZpc2libGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgaGlkZS1lZGl0LWluLWRlc2t0b3AtYnV0dG9uPlxuICAgKiA8dGFibGVhdS1hdXRob3Jpbmctdml6IGlkPVwidGFibGVhdVZpelwiIGhpZGUtZWRpdC1pbi1kZXNrdG9wLWJ1dHRvbj5cbiAgICogYGBgXG4gICAqL1xuICBoaWRlRWRpdEluRGVza3RvcEJ1dHRvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkZWZhdWx0IGVkaXQgYmVoYXZpb3IgaXMgc3VwcHJlc3NlZC5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gZmFsc2UsIG1lYW5pbmcgdGhhdCB0aGUgZGVmYXVsdCBlZGl0IGJlaGF2aW9yIGlzIG5vdCBzdXBwcmVzc2VkLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIHN1cHByZXNzLWRlZmF1bHQtZWRpdC1iZWhhdmlvcj5cbiAgICogPHRhYmxlYXUtYXV0aG9yaW5nLXZpeiBpZD1cInRhYmxlYXVWaXpcIiBzdXBwcmVzcy1kZWZhdWx0LWVkaXQtYmVoYXZpb3I+XG4gICAqIGBgYFxuICAgKi9cbiAgc3VwcHJlc3NEZWZhdWx0RWRpdEJlaGF2aW9yPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBFZGl0IEluIERlc2t0b3AgQnV0dG9uLiBZb3UgY2FuIHVzZSB0aGlzIGV2ZW50IHR5cGUgd2l0aCBUYWJsZWF1Vml6IG9iamVjdHMuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25FZGl0SW5EZXNrdG9wQnV0dG9uQ2xpY2tlZD1cIm9uRWRpdEluRGVza3RvcEJ1dHRvbkNsaWNrZWRIYW5kbGVyXCIgLz5cbiAgICogPHRhYmxlYXUtYXV0aG9yaW5nLXZpeiBpZD1cInRhYmxlYXVWaXpcIiBvbkVkaXRJbkRlc2t0b3BCdXR0b25DbGlja2VkPVwib25FZGl0SW5EZXNrdG9wQnV0dG9uQ2xpY2tlZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uRWRpdEluRGVza3RvcEJ1dHRvbkNsaWNrZWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHJhaXNlZCB3aGVuIHRoZSBzaXplIG9mIHRoZSB2aXogaXMga25vd24uIFlvdSBjYW4gdXNlIHRoaXMgZXZlbnQgdG8gcGVyZm9ybSB0YXNrcyBzdWNoIGFzIHJlc2l6aW5nXG4gICAqIHRoZSBlbGVtZW50cyBzdXJyb3VuZGluZyB0aGUgVml6IG9iamVjdCBvbmNlIHRoZSBvYmplY3QncyBzaXplIGhhcyBiZWVuIGVzdGFibGlzaGVkLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIFwib25GaXJzdFZpelNpemVLbm93blwiPVwib25GaXJzdFZpelNpemVLbm93bkhhbmRsZXJcIiAvPlxuICAgKiA8dGFibGVhdS1hdXRob3Jpbmctdml6IGlkPVwidGFibGVhdVZpelwiIG9uRmlyc3RWaXpTaXplS25vd249XCJvbkZpcnN0Vml6U2l6ZUtub3duSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25GaXJzdFZpelNpemVLbm93bj86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gdGhlIFZpeiBvYmplY3QgZmlyc3QgYmVjb21lcyBpbnRlcmFjdGl2ZS4gVGhpcyBpcyBvbmx5IHJhaXNlZCBvbmNlLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIFwib25GaXJzdEludGVyYWN0aXZlXCI9XCJvbkZpcnN0SW50ZXJhY3RpdmVIYW5kbGVyXCIgLz5cbiAgICogPHRhYmxlYXUtYXV0aG9yaW5nLXZpeiBpZD1cInRhYmxlYXVWaXpcIiBvbkZpcnN0SW50ZXJhY3RpdmU9XCJvbkZpcnN0SW50ZXJhY3RpdmVIYW5kbGVyXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBvbkZpcnN0SW50ZXJhY3RpdmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgdml6IGluIHZpZXcgbW9kZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXpTZXR0aW5ncyBleHRlbmRzIFZpelNldHRpbmdzU2hhcmVkIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHN1cHByZXNzIHRoZSBleGVjdXRpb24gb2YgVVJMIGFjdGlvbnMuIFRoaXMgb3B0aW9uIGRvZXMgbm90IHByZXZlbnQgdGhlIFVSTCBhY3Rpb25cbiAgICogZXZlbnQgZnJvbSBiZWluZyByYWlzZWQuIFlvdSBjYW4gdXNlIHRoaXMgb3B0aW9uIHRvIGNoYW5nZSB3aGF0IGhhcHBlbnMgd2hlbiBhIFVSTCBhY3Rpb24gb2NjdXJzLiBJZiBzZXRcbiAgICogdG8gdHJ1ZSBhbmQgeW91IGNyZWF0ZSBhbiBldmVudCBsaXN0ZW5lciBmb3IgdGhlIFVSTF9BQ1RJT04gZXZlbnQsIHlvdSBjYW4gdXNlIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAqIGhhbmRsZXIgdG8gY3VzdG9taXplIHRoZSBhY3Rpb25zLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIGRpc2FibGUtdXJsLWFjdGlvbnMgLz5cbiAgICogYGBgXG4gICAqL1xuICBkaXNhYmxlVXJsQWN0aW9uc1BvcHVwcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYnMgYXJlIGhpZGRlbiBvciBzaG93bi5cbiAgICpcbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiAgaGlkZS10YWJzIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgaGlkZVRhYnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b29sYmFyLCBpZiBpdCBpcyBzaG93bi4gVGhlIHZhbHVlcyBjYW4gYmUgVG9vbGJhci5Ub3AsXG4gICAqIFRvb2xiYXIuQm90dG9tIG9yIFRvb2xiYXIuSGlkZGVuLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byBUb29sYmFyLkJvdHRvbS5cbiAgICpcbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiAgdG9vbGJhcj1cImhpZGRlblwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgdG9vbGJhcj86IFRvb2xiYXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIGRldmljZSBsYXlvdXQgZm9yIGEgZGFzaGJvYXJkLCBpZiBpdCBleGlzdHMuXG4gICAqIFZhbHVlcyBjYW4gYmUgZGVmYXVsdCwgZGVza3RvcCwgdGFibGV0LCBvciBwaG9uZS5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gbG9hZGluZyBhIGxheW91dCBiYXNlZCBvbiB0aGVcbiAgICogc21hbGxlc3QgZGltZW5zaW9uIG9mIHRoZSBob3N0aW5nIGlmcmFtZSBlbGVtZW50LlxuICAgKlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiICBkZXZpY2U9XCJkZXNrdG9wXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBkZXZpY2U/OiBEZXZpY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIElEIG9mIGFuIGV4aXN0aW5nIGluc3RhbmNlIHRvIG1ha2UgYSBjb3B5IChjbG9uZSkgb2YuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGNvbnRpbnVlIGFuYWx5c2lzIG9mIGFuIGV4aXN0aW5nIHZpc3VhbGl6YXRpb25cbiAgICogd2l0aG91dCBsb3NpbmcgdGhlIHN0YXRlIG9mIHRoZSBvcmlnaW5hbC4gSWYgdGhlIElEIGRvZXMgbm90IHJlZmVyIHRvIGFuIGV4aXN0aW5nIHZpc3VhbGl6YXRpb24sXG4gICAqIHRoZSBjbG9uZWQgdmVyc2lvbiBpcyBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsIHZpc3VhbGl6YXRpb24uXG4gICAqXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgIGluc3RhbmNlLWlkLXRvLWNsb25lPVwiaWQxXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBpbnN0YW5jZUlkVG9DbG9uZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIEVkaXQgYnV0dG9uIGlzIGhpZGRlbiBvciB2aXNpYmxlLlxuICAgKiBJZiBub3Qgc2V0LCBkZWZhdWx0cyB0byBmYWxzZSwgbWVhbmluZyB0aGF0IHRoZSBFZGl0IGJ1dHRvbiBpcyB2aXNpYmxlLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIGhpZGUtZWRpdC1idXR0b24+XG4gICAqIGBgYFxuICAgKi9cbiAgaGlkZUVkaXRCdXR0b24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIEVkaXQgQnV0dG9uLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uRWRpdEJ1dHRvbkNsaWNrZWQ9XCJvbkVkaXRCdXR0b25DbGlja2VkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25FZGl0QnV0dG9uQ2xpY2tlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYW55IGZpbHRlciBoYXMgY2hhbmdlZCBzdGF0ZS4gWW91IGNhbiB1c2UgdGhpcyBldmVudCB0eXBlIHdpdGggVGFibGVhdVZpeiBvYmplY3RzLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uRmlsdGVyQ2hhbmdlZD1cIm9uRmlsdGVyQ2hhbmdlZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uRmlsdGVyQ2hhbmdlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYSBjdXN0b20gbWFyayBjb250ZXh0IG1lbnUgaXMgY2xpY2tlZC5cbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiBvbkN1c3RvbU1hcmtDb250ZXh0TWVudUV2ZW50PVwib25DdXN0b21NYXJrQ29udGV4dE1lbnVFdmVudEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uQ3VzdG9tTWFya0NvbnRleHRNZW51RXZlbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHJhaXNlZCB3aGVuIHRoZSBzZWxlY3RlZCBtYXJrcyBvbiBhIHZpc3VhbGl6YXRpb24gaGF2ZSBjaGFuZ2VkLiBZb3UgY2FuIHVzZSB0aGlzIGV2ZW50IHR5cGUgd2l0aCBUYWJsZWF1Vml6IG9iamVjdHMuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25NYXJrU2VsZWN0aW9uQ2hhbmdlZD1cIm9uTWFya1NlbGVjdGlvbkNoYW5nZWRIYW5kbGVyXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBvbk1hcmtTZWxlY3Rpb25DaGFuZ2VkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgd2hlbiBhIHBhcmFtZXRlciBoYXMgaGFkIGl0cyB2YWx1ZSBtb2RpZmllZC4gWW91IGNhbiB1c2UgdGhpcyBldmVudCB0eXBlIHdpdGggW1tQYXJhbWV0ZXJdXSBvYmplY3RzLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uUGFyYW1ldGVyQ2hhbmdlZD1cIm9uUGFyYW1ldGVyQ2hhbmdlZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uUGFyYW1ldGVyQ2hhbmdlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYSB0b29sYmFyIGJ1dHRvbiBvciBjb250cm9sIGJlY29tZXMgYXZhaWxhYmxlIG9yIGJlY29tZXMgdW5hdmFpbGFibGUuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25Ub29sYmFyU3RhdGVDaGFuZ2VkPVwib25Ub29sYmFyU3RhdGVDaGFuZ2VkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25Ub29sYmFyU3RhdGVDaGFuZ2VkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgd2hlbiBhIFVSTCBhY3Rpb24gb2NjdXJzLiBTZWUgdGhlIHtAbGluayBVcmxBY3Rpb25FdmVudH0gY2xhc3MuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25VcmxBY3Rpb249XCJvblVybEFjdGlvbkhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uVXJsQWN0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgYWZ0ZXIgYSB0YWIgc3dpdGNoIG9jY3VycyAodGhlIGFjdGl2ZSBzaGVldCBoYXMgY2hhbmdlZCkuIEd1YXJhbnRlZXMgdGhlIHZpeiBvYmplY3Qgd2lsbCBiZSBpbnRlcmFjdGl2ZSBhZnRlciB0aGlzLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uVGFiU3dpdGNoZWQ9XCJvblRhYlN3aXRjaGVkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25UYWJTd2l0Y2hlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYSBjdXN0b20gdmlldyBoYXMgZmluaXNoZWQgbG9hZGluZy4gVGhpcyBldmVudCBpcyByYWlzZWQgYWZ0ZXIgdGhlIGNhbGxiYWNrXG4gICAqIGZ1bmN0aW9uIGZvciB7QGxpbmsgRmlyc3RJbnRlcmFjdGl2ZX0gKGlmIGFueSkgaGFzIGJlZW4gY2FsbGVkLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uQ3VzdG9tVmlld0xvYWRlZD1cIm9uQ3VzdG9tVmlld0xvYWRlZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uQ3VzdG9tVmlld0xvYWRlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYSBjdXN0b20gdmlldyBoYXMgYmVlbiByZW1vdmVkLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtdml6IGlkPVwidGFibGVhdVZpelwiIG9uQ3VzdG9tVmlld1JlbW92ZWQ9XCJvbkN1c3RvbVZpZXdSZW1vdmVkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25DdXN0b21WaWV3UmVtb3ZlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gYSBjdXN0b20gdmlldyBoYXMgYmVlbiBzYXZlZCAobmV3bHkgY3JlYXRlZCBvciB1cGRhdGVkKS5cbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiBvbkN1c3RvbVZpZXdTYXZlZD1cIm9uQ3VzdG9tVmlld1NhdmVkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25DdXN0b21WaWV3U2F2ZWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHJhaXNlZCB3aGVuIGEgY3VzdG9tIHZpZXcgaGFzIGJlZW4gc2V0IGFzIHRoZSBkZWZhdWx0IHZpZXcgZm9yIGEgd29ya2Jvb2suXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25DdXN0b21WaWV3U2V0RGVmYXVsdD1cIm9uQ3VzdG9tVmlld1NldERlZmF1bHRIYW5kbGVyXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBvbkN1c3RvbVZpZXdTZXREZWZhdWx0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgYWZ0ZXIgYSBuZXcgc3RvcnkgcG9pbnQgYmVjb21lcyBhY3RpdmUuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25TdG9yeVBvaW50U3dpdGNoZWQ9XCJvblN0b3J5UG9pbnRTd2l0Y2hlZEhhbmRsZXJcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIG9uU3RvcnlQb2ludFN3aXRjaGVkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIChCZXRhKSBSZXByZXNlbnRzIHRoZSBvcHRpb25zIGZvciBjb25maWd1cmluZyBhIHZpeiBpbiBhdXRob3JpbmcgbW9kZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXpBdXRob3JpbmdTZXR0aW5ncyBleHRlbmRzIFZpelNldHRpbmdzU2hhcmVkIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBDbG9zZSBidXR0b24gaXMgaGlkZGVuIG9yIHZpc2libGUuXG4gICAqIElmIG5vdCBzZXQsIGRlZmF1bHRzIHRvIGZhbHNlLCBtZWFuaW5nIHRoYXQgdGhlIENsb3NlIGJ1dHRvbiBpcyB2aXNpYmxlLlxuICAgKiBgYGBcbiAgICogPHRhYmxlYXUtYXV0aG9yaW5nLXZpeiBpZD1cInRhYmxlYXVWaXpcIiBoaWRlLWNsb3NlLWJ1dHRvbiAvPlxuICAgKiBgYGBcbiAgICovXG4gIGhpZGVDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IHJhaXNlZCB3aGVuIHRoZSB3b3JrYm9vayBoYXMgYmVlbiBwdWJsaXNoZWQuIFRoaXMgbm90aWZpY2F0aW9uIGlzIHNlbnQgd2hlbiB1c2luZyBlbWJlZGRlZCB3ZWIgYXV0aG9yaW5nIGZ1bmN0aW9uYWxpdHkuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS1hdXRob3Jpbmctdml6IGlkPVwidGFibGVhdVZpelwiIG9uV29ya2Jvb2tQdWJsaXNoZWQ9XCJvbldvcmtib29rUHVibGlzaGVkSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25Xb3JrYm9va1B1Ymxpc2hlZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXZlbnQgcmFpc2VkIHdoZW4gXCJwdWJsaXNoIGFzXCIgaXMgc3VjY2Vzc2Z1bC4gVGhpcyBub3RpZmljYXRpb24gaXMgc2VudCB3aGVuIHVzaW5nIGVtYmVkZGVkIHdlYiBhdXRob3JpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LWF1dGhvcmluZy12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgb25Xb3JrYm9va1B1Ymxpc2hlZEFzPVwib25Xb3JrYm9va1B1Ymxpc2hlZEFzSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25Xb3JrYm9va1B1Ymxpc2hlZEFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCByYWlzZWQgd2hlbiB0aGUgd29ya2Jvb2sgaXMgcmVhZHkgdG8gY2xvc2UuIFRoaXMgbm90aWZpY2F0aW9uIGlzIHNlbnQgd2hlbiB1c2luZyBlbWJlZGRlZCB3ZWIgYXV0aG9yaW5nIGZ1bmN0aW9uYWxpdHkuXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS1hdXRob3Jpbmctdml6IGlkPVwidGFibGVhdVZpelwiIG9uV29ya2Jvb2tSZWFkeVRvQ2xvc2U9XCJvbldvcmtib29rUmVhZHlUb0Nsb3NlSGFuZGxlclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgb25Xb3JrYm9va1JlYWR5VG9DbG9zZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJQYXJhbWV0ZXJzIHtcbiAgZmllbGQ6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBWaXpQYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIHNldCBQYXJhbWV0ZXIgdmFsdWVzIG9uIHRoZSB2aXouXG4gKlxuICogKiBgYGBcbiAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIj5cbiAqICA8dml6LXBhcmFtZXRlciBuYW1lPVwicGFyYW1ldGVyLW5hbWVcIiB2YWx1ZT1cInBhcmFtZXRlci12YWx1ZVwiPjwvdml6LXBhcmFtZXRlcj5cbiAqIDwvdGFibGVhdS12aXo+XG4gKiBgYGBcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVml6UGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBhcmFtZXRlciB0byBiZSBzZXQuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbGlkIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyIGJlaW5nIHNldC5cbiAgICovXG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3VzdG9tUGFyYW1ldGVycyBhcmUgdXNlZCB0byBwYXNzIGFsb25nIHNldHRpbmdzLCBpbmZvcm1hdGlvbiwgZXRjLiwgdGhhdCBhcmVuJ3QgZXhwb3NlZCBvbiB0aGVcbiAqIHRhYmxlYXUtdml6IGVsZW1lbnQuIEN1c3RvbVBhcmFtZXRlcnMgd2lsbCBvdmVycmlkZSBhdHRyaWJ1dGVzLCBvciBmaWx0ZXJzLCBzZXQgb24gdGhlIHRhYmxlYXUtdml6IGVsZW1lbnQuXG4gKlxuICogKiBgYGBcbiAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIj5cbiAqICA8Y3VzdG9tLXBhcmFtZXRlciBuYW1lPVwicGFyYW1ldGVyLW5hbWVcIiB2YWx1ZT1cInBhcmFtZXRlci12YWx1ZVwiPjwvY3VzdG9tLXBhcmFtZXRlcj5cbiAqIDwvdGFibGVhdS12aXo+XG4gKiBgYGBcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBhcmFtZXRlciB0byBiZSBzZXQuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbGlkIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyIGJlaW5nIHNldC5cbiAgICovXG4gIHZhbHVlOiBzdHJpbmc7XG59XG4iLCIvKipcbiAqIFVzZXIgc3VwcGxpZWQgb3B0aW9ucyB0aGF0IGRvIG5vdCBnZXQgcGFzc2VkIGFzIHJlcXVlc3QgcGFyYW1ldGVycyB0byBsb2FkIGEgVGFibGVhdSB2aXosIFRhYmxlYXUgYXNrZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkNvbXBvbmVudExvY2FsU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIHZpeiBzcmNcbiAgICovXG4gIHNyYz86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgd2lkdGggaW4gcGl4ZWxzXG4gICAqIENhbiBiZSBhbnkgdmFsaWQgQ1NTIHNpemUgc3BlY2lmaWVyLiBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byB0aGUgcHVibGlzaGVkIHdpZHRoIG9mIHRoZSB2aWV3LlxuICAgKi9cbiAgd2lkdGg/OiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgaGVpZ2h0IGluIHBpeGVsc1xuICAgKiBDYW4gYmUgYW55IHZhbGlkIENTUyBzaXplIHNwZWNpZmllci4gSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gdGhlIHB1Ymxpc2hlZCBoZWlnaHQgb2YgdGhlIHZpZXcuXG4gICAqL1xuICBoZWlnaHQ/OiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyBhbGwgb2YgdGhlIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgd2ViY29tcG9uZW50IHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuXG4gKiB2aXogYW5kIGFza2RhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQ29tcG9uZW50U2V0dGluZ3NTaGFyZWQge1xuICAvKipcbiAgICogVGhlIHRva2VuIHVzZWQgZm9yIGF1dGhvcml6YXRpb25cbiAgICpcbiAgICogYGBgXG4gICAqIDx0YWJsZWF1LXZpeiBpZD1cInRhYmxlYXVWaXpcIiB0b2tlbj1cInNvbWUtdG9rZW4tY29udGFpbmluZy1jbGllbnRJZFwiIC8+XG4gICAqIDx0YWJsZWF1LWF1dGhvcmluZy12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgdG9rZW49XCJzb21lLXRva2VuLWNvbnRhaW5pbmctY2xpZW50SWRcIiAvPlxuICAgKiA8dGFibGVhdS1hc2stZGF0YSBpZD1cInRhYmxlYXVBc2tEYXRhXCIgdG9rZW49XCJzb21lLXRva2VuLWNvbnRhaW5pbmctY2xpZW50SWRcIiAvPlxuICAgKiBgYGBcbiAgICovXG4gIHRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbm9uLW1pbmlmaWVkIHZlcnNpb24gb2YgSmF2YVNjcmlwdCBpcyBsb2FkZWQuIElmIHNwZWNpZmllZCAob3Igc2V0IHRvIHRydWUpLCB0aGVcbiAgICogbm9uLW1pbmlmaWVkIHZlcnNpb24gaXMgdXNlZCBmb3IgYm90aCB0aGUgbG9jYWwgY29tcG9uZW50IGFuZCB0aGUgVGFibGVhdSBTZXJ2ZXIgdmlzdWFsaXphdGlvbiAoaWYgZW5hYmxlZCkuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQgKG9yIHNldCB0byBmYWxzZSksIHRoZSBtaW5pZmllZCB2ZXJzaW9uIG9mIHRoZSBKYXZhU2NyaXB0IGZpbGVzIGFyZSBsb2FkZWQuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8dGFibGVhdS12aXogaWQ9XCJ0YWJsZWF1Vml6XCIgZGVidWcgLz5cbiAgICogPHRhYmxlYXUtYXV0aG9yaW5nLXZpeiBpZD1cInRhYmxlYXVWaXpcIiBkZWJ1ZyAvPlxuICAgKiA8dGFibGVhdS1hc2stZGF0YSBpZD1cInRhYmxlYXVBc2tEYXRhXCIgZGVidWcgLz5cbiAgICogYGBgXG4gICAqL1xuICBkZWJ1Zz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIG5hbWVzIG9mIHRoZSBjb21tb24gc3RyaW5nIGNvbnN0YW50cyB5b3UgY2FuIHVzZSBhcyBIVE1MIGF0dHJpYnV0ZXMgZm9yIHRoZSB0YWJsZWF1IHdlYiBjb21wb25lbnQuXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBlbnVtIFdlYkNvbXBvbmVudEF0dHJpYnV0ZXMge1xuICBTcmMgPSAnc3JjJyxcbiAgV2lkdGggPSAnd2lkdGgnLFxuICBIZWlnaHQgPSAnaGVpZ2h0JyxcbiAgVG9rZW4gPSAndG9rZW4nLFxuICBEZWJ1ZyA9ICdkZWJ1ZycsXG59XG5cbi8qKlxuICogVGhlIG5hbWVzIG9mIHRoZSBzdHJpbmcgY29uc3RhbnRzIHlvdSBjYW4gdXNlIGFzIGNoaWxkIHRhZ3MgZm9yIFRhYmxlYXVWaXosIFRhYmxlYXVBdXRob3JpbmdWaXogYW5kIFRhYmxlYXVBc2tEYXRhIGN1c3RvbSBlbGVtZW50cy5cbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGVudW0gV2ViQ29tcG9uZW50Q2hpbGRFbGVtZW50cyB7XG4gIC8qKlxuICAgKiBDb250YWlucyBhIGxpc3Qgb2YgY3VzdG9tIHBhcmFtZXRlcnMuICBBdmFpbGFibGUgaW4gdml6IHZpZXdpbmcsIHZpeiBhdXRob3JpbmcgYW5kIGFza2RhdGEuXG4gICAqL1xuICBDdXN0b21QYXJhbWV0ZXIgPSAnY3VzdG9tLXBhcmFtZXRlcicsXG59XG5cbmV4cG9ydCBlbnVtIFdlYkNvbXBvbmVudENoaWxkRWxlbWVudEF0dHJpYnV0ZXMge1xuICBGaWVsZCA9ICdmaWVsZCcsXG4gIFZhbHVlID0gJ3ZhbHVlJyxcbiAgTmFtZSA9ICduYW1lJyxcbn1cbiIsIi8vIEFsbCBlbnVtIHZhbHVlcyBtYWRlIGF2YWlsYWJsZSB0byBFeHRlbnNpb25zIGRldmVsb3BlcnMuXG4vLyBFbnVtcyBzaG91bGQgYmUga2VwdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuXG5cbmltcG9ydCB7IEV4dGVuc2lvbnMgfSBmcm9tICcuL0V4dGVuc2lvbnMnO1xuXG5uYW1lc3BhY2UgVGFibGVhdSB7XG4gIGV4cG9ydCBsZXQgZXh0ZW5zaW9uczogRXh0ZW5zaW9ucztcbiAgLyoqXG4gICAqIEFsbCBlcnJvciBjb2RlcyB1c2VkIGJ5IHRoZSBFeHRlbnNpb25zIEFQSS5cbiAgICovXG4gIGV4cG9ydCBlbnVtIEVycm9yQ29kZXMge1xuICAgIC8qKlxuICAgICAqIFRocm93biB3aGVuIGNhbGxlciBhdHRlbXB0cyB0byBleGVjdXRlIGNvbW1hbmQgYmVmb3JlIGluaXRpYWxpemF0aW9uIGhhcyBjb21wbGV0ZWQuXG4gICAgICovXG4gICAgQVBJTm90SW5pdGlhbGl6ZWQgPSAnYXBpLW5vdC1pbml0aWFsaXplZCcsXG4gICAgLyoqXG4gICAgICogVGhyb3duIHdoZW4gY2FsbGVyIGF0dGVtcHRzIHRvIGV4ZWN1dGUgY29tbWFuZCB3aGlsZSBleHRlbnNpb24gaXMgbm90IHZpc2libGUuXG4gICAgICovXG4gICAgVmlzaWJpbGl0eUVycm9yID0gJ3Zpc2liaWxpdHktZXJyb3InLFxuICAgIC8qKlxuICAgICAqIE9ubHkgb25lIGRpYWxvZyBjYW4gYmUgb3BlbmVkIGF0IHRpbWUgd2l0aCB0aGUgVUkgbmFtZXNwYWNlIGZ1bmN0aW9uYWxpdHkuXG4gICAgICovXG4gICAgRGlhbG9nQWxyZWFkeU9wZW4gPSAnZGlhbG9nLWFscmVhZHktb3BlbicsXG4gICAgLyoqXG4gICAgICogVGhlIG9wZW4gZGlhbG9nIHdhcyBjbG9zZWQgYnkgdGhlIHVzZXIuXG4gICAgICovXG4gICAgRGlhbG9nQ2xvc2VkQnlVc2VyID0gJ2RpYWxvZy1jbG9zZWQtYnktdXNlcicsXG4gICAgLyoqXG4gICAgICogQW4gZXJyb3Igb2NjdXJyZWQgd2l0aGluIHRoZSBUYWJsZWF1IEV4dGVuc2lvbnMgQVBJLiBDb250YWN0IFRhYmxlYXUgU3VwcG9ydC5cbiAgICAgKi9cbiAgICBJbnRlcm5hbEVycm9yID0gJ2ludGVybmFsLWVycm9yJyxcbiAgICAvKipcbiAgICAgKiBBIGRpYWxvZyBtdXN0IHN0YXJ0IG9uIHRoZSBzYW1lIGRvbWFpbiBhcyB0aGUgcGFyZW50IGV4dGVuaW9uLlxuICAgICAqL1xuICAgIEludmFsaWREb21haW5EaWFsb2cgPSAnaW52YWxpZC1kaWFsb2ctZG9tYWluJyxcbiAgICAvKipcbiAgICAgKiBBIHBhcmFtZXRlciBpcyBub3QgdGhlIGNvcnJlY3QgZGF0YSB0eXBlIG9yIGZvcm1hdC4gVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgaW4gdGhlIEVycm9yLm1lc3NhZ2UgZmllbGQuXG4gICAgICovXG4gICAgSW52YWxpZFBhcmFtZXRlciA9ICdpbnZhbGlkLXBhcmFtZXRlcicsXG4gICAgLyoqXG4gICAgICogQ2FuIG9jY3VyIGlmIHRoZSBleHRlbnNpb24gaW50ZXJhY3RzIHdpdGggYSBmaWx0ZXIgdGhhdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHdvcmtzaGVldC5cbiAgICAgKi9cbiAgICBNaXNzaW5nRmlsdGVyID0gJ21pc3NpbmctZmlsdGVyJyxcbiAgICAvKipcbiAgICAgKiBDYW4gb2NjdXIgaWYgdGhlIGV4dGVuc2lvbiBpbnRlcmFjdHMgd2l0aCBhIHBhcmFtZXRlciB0aGF0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgd29ya3NoZWV0LlxuICAgICAqL1xuICAgIE1pc3NpbmdQYXJhbWV0ZXIgPSAnbWlzc2luZy1wYXJhbWV0ZXInLFxuICAgIC8qKlxuICAgICAqIEludGVybmFsIFNlcnZlciBFcnJvclxuICAgICAqL1xuICAgIFNlcnZlckVycm9yID0gJ3NlcnZlci1lcnJvcicsXG4gICAgLyoqXG4gICAgICogRGV2ZWxvcGVyIGNhbm5vdCBzYXZlIHNldHRpbmdzIHdoaWxlIGFub3RoZXIgc2F2ZSBpcyBzdGlsbCBpbiBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBTZXR0aW5nU2F2ZUluUHJvZ3Jlc3MgPSAnc2V0dGluZy1zYXZlLWluLXByb2dyZXNzJyxcbiAgICAvKipcbiAgICAgKiBBbiB1bmtub3duIGV2ZW50IG5hbWUgd2FzIHNwZWNpZmllZCBpbiB0aGUgY2FsbCB0byBgYWRkRXZlbnRMaXN0ZW5lcmAgb3IgYHJlbW92ZUV2ZW50TGlzdGVuZXJgLlxuICAgICAqL1xuICAgIFVuc3VwcG9ydGVkRXZlbnROYW1lID0gJ3Vuc3VwcG9ydGVkLWV2ZW50LW5hbWUnLFxuICAgIC8qKlxuICAgICAqIEEgbWV0aG9kIHdhcyB1c2VkIGZvciBhIHR5cGUgb2YgZGF0YSBzb3VyY2UgdGhhdCBkb2Vzbid0IHN1cHBvcnQgdGhhdCBtZXRob2QgKHNlZSBnZXRBY3RpdmVUYWJsZXNBc3luYyBmb3IgYW4gZXhhbXBsZSlcbiAgICAgKi9cbiAgICBVbnN1cHBvcnRlZE1ldGhvZEZvckRhdGFTb3VyY2VUeXBlID0gJ3Vuc3VwcG9ydGVkLW1ldGhvZC1mb3ItZGF0YS1zb3VyY2UtdHlwZScsXG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIEV4dGVuc2lvbnMgaXMgY3VycmVudGx5IHJ1bm5pbmcuXG4gICAqL1xuICBleHBvcnQgZW51bSBFeHRlbnNpb25Db250ZXh0IHtcbiAgICBEZXNrdG9wID0gJ2Rlc2t0b3AnLFxuICAgIFNlcnZlciA9ICdzZXJ2ZXInLFxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RlIGluIHdoaWNoIHRoZSBFeHRlbnNpb25zIGlzIGN1cnJlbnRseSBydW5uaW5nLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gRXh0ZW5zaW9uTW9kZSB7XG4gICAgQXV0aG9yaW5nID0gJ2F1dGhvcmluZycsXG4gICAgVmlld2luZyA9ICd2aWV3aW5nJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSB0eXBlIG9mIGV2ZW50IHRoYXQgY2FuIGJlIGxpc3RlbmVkIGZvci5cbiAgICovXG4gIGV4cG9ydCBlbnVtIFRhYmxlYXVFdmVudFR5cGUge1xuICAgIC8qKiBSYWlzZWQgd2hlbiBhbnkgZmlsdGVyIGhhcyBjaGFuZ2VkIHN0YXRlLiBZb3UgY2FuIHVzZSB0aGlzIGV2ZW50IHR5cGUgd2l0aCBbV29ya3NoZWV0XSguLi9pbnRlcmZhY2VzL3dvcmtzaGVldC5odG1sKSBvYmplY3RzLiovXG4gICAgRmlsdGVyQ2hhbmdlZCA9ICdmaWx0ZXItY2hhbmdlZCcsXG5cbiAgICAvKiogVGhlIHNlbGVjdGVkIG1hcmtzIG9uIGEgdmlzdWFsaXphdGlvbiBoYXMgY2hhbmdlZC5cbiAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIGV2ZW50IHR5cGUgd2l0aCBbV29ya3NoZWV0XSguLi9pbnRlcmZhY2VzL3dvcmtzaGVldC5odG1sKSBvYmplY3RzLiAqL1xuICAgIE1hcmtTZWxlY3Rpb25DaGFuZ2VkID0gJ21hcmstc2VsZWN0aW9uLWNoYW5nZWQnLFxuXG4gICAgLyoqIEEgcGFyYW1ldGVyIGhhcyBoYWQgaXRzIHZhbHVlIG1vZGlmaWVkLiBZb3UgY2FuIHVzZSB0aGlzIGV2ZW50IHR5cGUgd2l0aCBbW1BhcmFtZXRlcl1dIG9iamVjdHMuICovXG4gICAgUGFyYW1ldGVyQ2hhbmdlZCA9ICdwYXJhbWV0ZXItY2hhbmdlZCcsXG5cbiAgICAvKiogU2V0dGluZ3MgaGF2ZSBiZWVuIGNoYW5nZWQgZm9yIHRoaXMgZXh0ZW5zaW9uLiBZb3UgY2FuIHVzZSB0aGlzIGV2ZW50IHR5cGUgd2l0aCBbW1NldHRpbmdzXV0gb2JqZWN0cy4gKi9cbiAgICBTZXR0aW5nc0NoYW5nZWQgPSAnc2V0dGluZ3MtY2hhbmdlZCcsXG5cbiAgICAvKiogVGhlIGRhc2hib2FyZCBsYXlvdXQgaGFzIGNoYW5nZWQgKi9cbiAgICBEYXNoYm9hcmRMYXlvdXRDaGFuZ2VkID0gJ2Rhc2hib2FyZC1sYXlvdXQtY2hhbmdlZCcsXG5cbiAgICAvKiogVGhlIHdvcmtib29rIGZvcm1hdHRpbmcgaGFzIGNoYW5nZWQgKi9cbiAgICBXb3JrYm9va0Zvcm1hdHRpbmdDaGFuZ2VkID0gJ3dvcmtib29rLWZvcm1hdHRpbmctY2hhbmdlZCcsXG4gIH1cblxuICAvKipcbiAgICogRW51bSB0aGF0IHJlcHJlc2VudHMgdGhlIGRhdGEgdHlwZSBvZiBlbmNvZGluZ3MgZm9yIGNyZWF0ZVZpekltYWdlQXN5bmMuXG4gICAqIEBzaW5jZSAxLjYuMFxuICAgKi9cbiAgZXhwb3J0IGVudW0gVml6SW1hZ2VFbmNvZGluZ1R5cGUge1xuICAgIERpc2NyZXRlID0gJ2Rpc2NyZXRlJyxcbiAgICBDb250aW51b3VzID0gJ2NvbnRpbnVvdXMnLFxuICB9XG5cbiAgLyoqXG4gICAqIEVudW0gdGhhdCByZXByZXNlbnRzIHRoZSBzb3J0IGRpcmVjdGlvbiBmb3IgY3JlYXRlVml6SW1hZ2VBc3luYy5cbiAgICogQHNpbmNlIDEuOC4wIGFuZCBUYWJsZWF1IDIwMjEuNFxuICAgKi9cbiAgZXhwb3J0IGVudW0gVml6SW1hZ2VTb3J0RGlyZWN0aW9uVHlwZSB7XG4gICAgQXNjZW5kaW5nID0gJ2FzY2VuZGluZycsXG4gICAgRGVzY2VuZGluZyA9ICdkZXNjZW5kaW5nJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnVtIHRoYXQgcmVwcmVzZW50cyB0aGUgcGFsZXR0ZSB0eXBlIGZvciBjcmVhdGVWaXpJbWFnZUFzeW5jLlxuICAgKiBAc2luY2UgMS44LjAgYW5kIFRhYmxlYXUgMjAyMS40XG4gICAqL1xuICBleHBvcnQgZW51bSBWaXpJbWFnZVBhbGV0dGVUeXBlIHtcbiAgICBDdXN0b21EaXZlcmdpbmcgPSAnY3VzdG9tLWRpdmVyZ2luZycsXG4gICAgQ3VzdG9tU2VxdWVudGlhbCA9ICdjdXN0b20tc2VxdWVudGlhbCcsXG4gIH1cblxuICAvKipcbiAgICogRW51bSB0aGF0IHJlcHJlc2VudHMgdGhlIFNpemUgU2V0dGluZyB0eXBlIGZvciBjcmVhdGVWaXpJbWFnZUFzeW5jLlxuICAgKiBAc2luY2UgMS44LjAgYW5kIFRhYmxlYXUgMjAyMS40XG4gICAqL1xuICBleHBvcnQgZW51bSBWaXpJbWFnZVNpemVTZXR0aW5nVHlwZSB7XG4gICAgRml4ZWQgPSAnZml4ZWQnLFxuICAgIE1hbnVhbCA9ICdtYW51YWwnLFxuICB9XG5cbiAgLyoqXG4gICAqIEVudW0gdGhhdCByZXByZXNlbnRzIHRoZSBTaXplIFNldHRpbmcgYWxpZ25tZW50IHR5cGUgZm9yIGNyZWF0ZVZpekltYWdlQXN5bmMuXG4gICAqIEBzaW5jZSAxLjguMCBhbmQgVGFibGVhdSAyMDIxLjRcbiAgICovXG4gIGV4cG9ydCBlbnVtIFZpekltYWdlU2l6ZVNldHRpbmdBbGlnbm1lbnRUeXBlIHtcbiAgICBSaWdodCA9ICdyaWdodCcsXG4gICAgTGVmdCA9ICdsZWZ0JyxcbiAgICBDZW50ZXIgPSAnY2VudGVyJyxcbiAgfVxufVxuZXhwb3J0ID0gVGFibGVhdTtcbiIsImV4cG9ydCBlbnVtIFNoYXJlZEVycm9yQ29kZXMge1xuICAvKipcbiAgICogQW4gaW52YWxpZCBhZ2dyZWdhdGlvbiB3YXMgc3BlY2lmaWVkIGZvciB0aGUgZmlsdGVyLCBzdWNoIGFzIHNldHRpbmcgYSByYW5nZSBmaWx0ZXIgdG8gXCJTVU0oU2FsZXMpXCIgaW5zdGVhZCBvZlxuICAgKiBcIlNhbGVzXCIuXG4gICAqL1xuICBJbnZhbGlkQWdncmVnYXRpb25GaWVsZE5hbWUgPSAnaW52YWxpZC1hZ2dyZWdhdGlvbi1maWVsZC1uYW1lJyxcbiAgLyoqXG4gICAqIEEgZmlsdGVyIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIG9uIGEgZmllbGQgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YSBzb3VyY2UuXG4gICAqL1xuICBJbnZhbGlkRmlsdGVyRmllbGROYW1lID0gJ2ludmFsaWQtZmlsdGVyLW5hbWUnLFxuICAvKipcbiAgICogQSBmaWx0ZXIgb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgdXNpbmcgYSB2YWx1ZSB0aGF0IGlzIHRoZSB3cm9uZyBkYXRhIHR5cGUgb3IgZm9ybWF0LlxuICAgKi9cbiAgSW52YWxpZEZpbHRlckZpZWxkVmFsdWUgPSAnaW52YWxpZC1maWx0ZXItZmllbGRWYWx1ZScsXG4gIC8qKlxuICAgKiBBbiBpbnZhbGlkIGRhdGUgdmFsdWUgd2FzIHNwZWNpZmllZCBpbiBhIFNoZWV0LnNlbGVjdE1hcmtzQXN5bmMoKSBjYWxsIGZvciBhIGRhdGUgZmllbGQuXG4gICAqL1xuICBJbnZhbGlkU2VsZWN0aW9uRGF0ZSA9ICdpbnZhbGlkLXNlbGVjdGlvbi1kYXRlJyxcbiAgLyoqXG4gICAqIEEgZmllbGQgd2FzIHNwZWNpZmllZCBpbiBhIFNoZWV0LnNlbGVjdE1hcmtzQXN5bmMoKSBjYWxsIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGEgc291cmNlLlxuICAgKi9cbiAgSW52YWxpZFNlbGVjdGlvbkZpZWxkTmFtZSA9ICdpbnZhbGlkLXNlbGVjdGlvbi1maWVsZE5hbWUnLFxuICAvKipcbiAgICogQW4gaW52YWxpZCB2YWx1ZSB3YXMgc3BlY2lmaWVkIGluIGEgU2hlZXQuc2VsZWN0TWFya3NBc3luYygpIGNhbGwuXG4gICAqL1xuICBJbnZhbGlkU2VsZWN0aW9uVmFsdWUgPSAnaW52YWxpZC1zZWxlY3Rpb24tdmFsdWUnLFxuICAvKipcbiAgICogQW4gZXJyb3Igb2NjdXJyZWQgd2l0aGluIHRoZSBUYWJsZWF1IEFQSS4gQ29udGFjdCBUYWJsZWF1IFN1cHBvcnQuXG4gICAqL1xuICBJbnRlcm5hbEVycm9yID0gJ2ludGVybmFsLWVycm9yJyxcbiAgLyoqXG4gICAqIEEgcGFyYW1ldGVyIGlzIG5vdCB0aGUgY29ycmVjdCBkYXRhIHR5cGUgb3IgZm9ybWF0LiBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBpbiB0aGUgRXJyb3IubWVzc2FnZSBmaWVsZC5cbiAgICovXG4gIEludmFsaWRQYXJhbWV0ZXIgPSAnaW52YWxpZC1wYXJhbWV0ZXInLFxuICAvKipcbiAgICogQW4gb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgb24gYSBzaGVldCB0aGF0IGlzIG5vdCBhY3RpdmUgb3IgZW1iZWRkZWQgd2l0aGluIHRoZSBhY3RpdmUgZGFzaGJvYXJkLlxuICAgKi9cbiAgTm90QWN0aXZlU2hlZXQgPSAnbm90LWFjdGl2ZS1zaGVldCcsXG5cbiAgLyoqXG4gICAqIFByb3BlcnR5IG9yIEZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aGluIHRoZSBUYWJsZWF1IEFQSS5cbiAgICovXG4gIEltcGxlbWVudGF0aW9uRXJyb3IgPSAnd3JvbmctaW1wbGVtZW50YXRpb24nLFxuXG4gIC8qKlxuICAgKiBDYW4gb2NjdXIgd2hlbiB0d28gaW5jb21wYXRpYmxlIGNhbGxzIGFyZSB0cmlnZ2VyZWQgdG9nZXRoZXIuXG4gICAqL1xuICBBcGlFeGVjdXRpb25FcnJvciA9ICdhcGktZXhlY3V0aW9uLWVycm9yJyxcbiAgLyoqXG4gICAqIEEgZ2VuZXJhbC1wdXJwb3NlIHNlcnZlciBlcnJvciBvY2N1cnJlZC4gRGV0YWlscyBhcmUgY29udGFpbmVkIGluIHRoZSBFcnJvciBvYmplY3QuXG4gICAqL1xuICBTZXJ2ZXJFcnJvciA9ICdzZXJ2ZXItZXJyb3InLFxuICAvKipcbiAgICogQ2FuIG9jY3VyIHdoZW4gYW4gYXBpIGNhbGwgdGltZXMgb3V0LlxuICAgKi9cbiAgVGltZW91dCA9ICd0aW1lb3V0Jyxcbn1cbiIsIi8qKlxuICogVGhlIHRhYmxlYXUgbmFtZXNwYWNlIGV4aXN0cyBmb3Igb3JnYW5pemF0aW9uIGFuZCB0byBhdm9pZCBwb2xsdXRpbmdcbiAqIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiBJdCBjb250YWlucyBubyBjb25zdHJ1Y3RzIG90aGVyIHRoYW4gc3ViLW5hbWVzcGFjZXMgYW5kIHRoZSBUYWJsZWF1IGVudW1lcmF0aW9ucy5cbiAqL1xubmFtZXNwYWNlIFRhYmxlYXUge1xuICBleHBvcnQgZW51bSBBbmFseXRpY3NPYmplY3RUeXBlIHtcbiAgICBDbHVzdGVyID0gJ2NsdXN0ZXInLFxuICAgIEZvcmVjYXN0ID0gJ2ZvcmVjYXN0JyxcbiAgICBUcmVuZExpbmUgPSAndHJlbmQtbGluZScsXG4gIH1cblxuICBleHBvcnQgZW51bSBBbm5vdGF0aW9uVHlwZSB7XG4gICAgTWFyayA9ICdtYXJrJyxcbiAgICBQb2ludCA9ICdwb2ludCcsXG4gICAgQXJlYSA9ICdhcmVhJyxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENvbHVtblR5cGUge1xuICAgIERpc2NyZXRlID0gJ2Rpc2NyZXRlJyxcbiAgICBDb250aW51b3VzID0gJ2NvbnRpbnVvdXMnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2xhc3NOYW1lS2V5IHtcbiAgICBXb3Jrc2hlZXRUaXRsZSA9ICd0YWJsZWF1LXdvcmtzaGVldC10aXRsZScsXG4gICAgV29ya3NoZWV0ID0gJ3RhYmxlYXUtd29ya3NoZWV0JyxcbiAgICBUb29sdGlwID0gJ3RhYmxlYXUtdG9vbHRpcCcsXG4gICAgU3RvcnlUaXRsZSA9ICd0YWJsZWF1LXN0b3J5LXRpdGxlJyxcbiAgICBEYXNoYm9hcmRUaXRsZSA9ICd0YWJsZWF1LWRhc2hib2FyZC10aXRsZScsXG4gIH1cblxuICAvKipcbiAgICogV2hhdCB0aGUgb2JqZWN0IHJlcHJlc2VudHMgaW4gYSBkYXNoYm9hcmQuXG4gICAqL1xuICBleHBvcnQgZW51bSBEYXNoYm9hcmRPYmplY3RUeXBlIHtcbiAgICBCbGFuayA9ICdibGFuaycsXG4gICAgV29ya3NoZWV0ID0gJ3dvcmtzaGVldCcsXG4gICAgUXVpY2tGaWx0ZXIgPSAncXVpY2stZmlsdGVyJyxcbiAgICBQYXJhbWV0ZXJDb250cm9sID0gJ3BhcmFtZXRlci1jb250cm9sJyxcbiAgICBQYWdlRmlsdGVyID0gJ3BhZ2UtZmlsdGVyJyxcbiAgICBMZWdlbmQgPSAnbGVnZW5kJyxcbiAgICBUaXRsZSA9ICd0aXRsZScsXG4gICAgVGV4dCA9ICd0ZXh0JyxcbiAgICBJbWFnZSA9ICdpbWFnZScsXG4gICAgV2ViUGFnZSA9ICd3ZWItcGFnZScsXG4gICAgRXh0ZW5zaW9uID0gJ2V4dGVuc2lvbicsXG4gIH1cblxuICAvKipcbiAgICogRW51bSB0aGF0IHJlcHJlc2VudHMgdGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgYSBkYXNoYm9hcmQgb2JqZWN0LlxuICAgKiBAc2luY2UgMS43LjBcbiAgICovXG4gIGV4cG9ydCBlbnVtIERhc2hib2FyZE9iamVjdFZpc2liaWxpdHlUeXBlIHtcbiAgICAvKiogVXNlZCBmb3IgdHVybmluZyBvbiB0aGUgdmlzaWJpbGl0eSBvZiBhIGRhc2hib2FyZCBvYmplY3QuKi9cbiAgICBTaG93ID0gJ3Nob3cnLFxuXG4gICAgLyoqIFVzZWQgZm9yIHR1cm5pbmcgb2ZmIHRoZSB2aXNpYmlsaXR5IG9mIGEgZGFzaGJvYXJkIG9iamVjdC4qL1xuICAgIEhpZGUgPSAnaGlkZScsXG4gIH1cblxuICAvKipcbiAgICogVGhlIGRpZmZlcmVudCB0eXBlcyBvZiBkYXRhIGEgdmFsdWUgY2FuIGhhdmVcbiAgICovXG4gIGV4cG9ydCBlbnVtIERhdGFUeXBlIHtcbiAgICBTdHJpbmcgPSAnc3RyaW5nJyxcbiAgICBJbnQgPSAnaW50JyxcbiAgICBGbG9hdCA9ICdmbG9hdCcsXG4gICAgQm9vbCA9ICdib29sJyxcbiAgICBEYXRlID0gJ2RhdGUnLFxuICAgIERhdGVUaW1lID0gJ2RhdGUtdGltZScsXG4gICAgU3BhdGlhbCA9ICdzcGF0aWFsJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnVtIHRoYXQgcmVwcmVzZW50cyB0aGUgY2hhbmdlcyB0aGF0IG9jY3VyIHRvIGEgZGFzaGJvYXJkIG9iamVjdC5cbiAgICovXG4gIGV4cG9ydCBlbnVtIERhc2hib2FyZExheW91dENoYW5nZSB7XG4gICAgLyoqIEEgZGFzaGJvYXJkIG9iamVjdCB3YXMgYWRkZWQgKi9cbiAgICBBZGRlZCA9ICdhZGRlZCcsXG5cbiAgICAvKiogQSBkYXNoYm9hcmQgb2JqZWN0IHdhcyByZW1vdmVkICovXG4gICAgUmVtb3ZlZCA9ICdyZW1vdmVkJyxcblxuICAgIC8qKiBBIGRhc2hib2FyZCBvYmplY3QncyBmbG9hdGluZyBzdGF0ZSBjaGFuZ2VkICovXG4gICAgSXNGbG9hdGluZ0NoYW5nZWQgPSAnaXMtZmxvYXRpbmctY2hhbmdlZCcsXG5cbiAgICAvKiogQSBkYXNoYm9hcmQgb2JqZWN0J3MgdmlzaWJpbGl0eSBjaGFuZ2VkICovXG4gICAgSXNWaXNpYmxlQ2hhbmdlZCA9ICdpcy12aXNpYmxlLWNoYW5nZWQnLFxuXG4gICAgLyoqIEEgZGFzaGJvYXJkIG9iamVjdCdzIHBvc2l0aW9uIGNoYW5nZWQgKi9cbiAgICBQb3NpdGlvbkNoYW5nZWQgPSAncG9zaXRpb24tY2hhbmdlZCcsXG5cbiAgICAvKiogQSBkYXNoYm9hcmQgb2JqZWN0J3Mgc2l6ZSBjaGFuZ2VkICovXG4gICAgU2l6ZUNoYW5nZWQgPSAnc2l6ZS1jaGFuZ2VkJyxcblxuICAgIC8qKiBBIGRhc2hib2FyZCBvYmplY3Qgd2FzIHJlbmFtZWQgKi9cbiAgICBOYW1lQ2hhbmdlZCA9ICduYW1lLWNoYW5nZWQnLFxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkIGRhdGUgcmFuZ2VzIGZvciBhIHJlbGF0aXZlIGRhdGUgZmlsdGVyLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gRGF0ZVJhbmdlVHlwZSB7XG4gICAgTGFzdCA9ICdsYXN0JyxcbiAgICBMYXN0TiA9ICdsYXN0LW4nLFxuICAgIE5leHQgPSAnbmV4dCcsXG4gICAgTmV4dE4gPSAnbmV4dC1uJyxcbiAgICBDdXJyZW50ID0gJ2N1cnJlbnQnLFxuICAgIFRvRGF0ZSA9ICd0by1kYXRlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnVtIHRoYXQgcmVwcmVzZW50cyB0aGUgdHlwZXMgb2YgZGlhbG9nIHBvcHVwIHN0eWxlcy5cbiAgICovXG4gIGV4cG9ydCBlbnVtIERpYWxvZ1N0eWxlIHtcbiAgICBXaW5kb3cgPSAnd2luZG93JyxcbiAgICBNb2RhbCA9ICdtb2RhbCcsXG4gICAgTW9kZWxlc3MgPSAnbW9kZWxlc3MnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gRW5jb2RpbmdUeXBlIHtcbiAgICBDb2x1bW4gPSAnY29sdW1uJyxcbiAgICBSb3cgPSAncm93JyxcbiAgICBQYWdlID0gJ3BhZ2UnLFxuICAgIEZpbHRlciA9ICdmaWx0ZXInLFxuICAgIE1hcmtzVHlwZSA9ICdtYXJrcy10eXBlJyxcbiAgICBNZWFzdXJlVmFsdWVzID0gJ21lYXN1cmUtdmFsdWVzJyxcbiAgICBDb2xvciA9ICdjb2xvcicsXG4gICAgU2l6ZSA9ICdzaXplJyxcbiAgICBMYWJlbCA9ICdsYWJlbCcsXG4gICAgRGV0YWlsID0gJ2RldGFpbCcsXG4gICAgVG9vbHRpcCA9ICd0b29sdGlwJyxcbiAgICBTaGFwZSA9ICdzaGFwZScsXG4gICAgUGF0aCA9ICdwYXRoJyxcbiAgICBBbmdsZSA9ICdhbmdsZScsXG4gIH1cblxuICAvKipcbiAgICogIFR5cGUgb2YgYWdncmVnYXRpb24gb24gYSBmaWVsZC5cbiAgICovXG4gIGV4cG9ydCBlbnVtIEZpZWxkQWdncmVnYXRpb25UeXBlIHtcbiAgICBTdW0gPSAnc3VtJyxcbiAgICBBdmcgPSAnYXZnJyxcbiAgICBNaW4gPSAnbWluJyxcbiAgICBNYXggPSAnbWF4JyxcbiAgICBTdGRldiA9ICdzdGRldicsXG4gICAgU3RkZXZwID0gJ3N0ZGV2cCcsXG4gICAgVmFyID0gJ3ZhcicsXG4gICAgVmFycCA9ICd2YXJwJyxcbiAgICBDb3VudCA9ICdjb3VudCcsXG4gICAgQ291bnRkID0gJ2NvdW50ZCcsXG4gICAgTWVkaWFuID0gJ21lZGlhbicsXG4gICAgQXR0ciA9ICdhdHRyJyxcbiAgICBOb25lID0gJ25vbmUnLFxuICAgIFllYXIgPSAneWVhcicsXG4gICAgUXRyID0gJ3F0cicsXG4gICAgTW9udGggPSAnbW9udGgnLFxuICAgIERheSA9ICdkYXknLFxuICAgIEhvdXIgPSAnaG91cicsXG4gICAgTWludXRlID0gJ21pbnV0ZScsXG4gICAgU2Vjb25kID0gJ3NlY29uZCcsXG4gICAgV2VlayA9ICd3ZWVrJyxcbiAgICBXZWVrZGF5ID0gJ3dlZWtkYXknLFxuICAgIE1vbnRoWWVhciA9ICdtb250aC15ZWFyJyxcbiAgICBNZHkgPSAnbWR5JyxcbiAgICBFbmQgPSAnZW5kJyxcbiAgICBUcnVuY1llYXIgPSAndHJ1bmMteWVhcicsXG4gICAgVHJ1bmNRdHIgPSAndHJ1bmMtcXRyJyxcbiAgICBUcnVuY01vbnRoID0gJ3RydW5jLW1vbnRoJyxcbiAgICBUcnVuY1dlZWsgPSAndHJ1bmMtd2VlaycsXG4gICAgVHJ1bmNEYXkgPSAndHJ1bmMtZGF5JyxcbiAgICBUcnVuY0hvdXIgPSAndHJ1bmMtaG91cicsXG4gICAgVHJ1bmNNaW51dGUgPSAndHJ1bmMtbWludXRlJyxcbiAgICBUcnVuY1NlY29uZCA9ICd0cnVuYy1zZWNvbmQnLFxuICAgIFF1YXJ0MSA9ICdxdWFydDEnLFxuICAgIFF1YXJ0MyA9ICdxdWFydDMnLFxuICAgIFNrZXduZXNzID0gJ3NrZXduZXNzJyxcbiAgICBLdXJ0b3NpcyA9ICdrdXJ0b3NpcycsXG4gICAgSW5PdXQgPSAnaW4tb3V0JyxcbiAgICBVc2VyID0gJ3VzZXInLFxuICB9XG5cbiAgLyoqXG4gICAqIFJvbGUgb2YgYSBmaWVsZC5cbiAgICovXG4gIGV4cG9ydCBlbnVtIEZpZWxkUm9sZVR5cGUge1xuICAgIERpbWVuc2lvbiA9ICdkaW1lbnNpb24nLFxuICAgIE1lYXN1cmUgPSAnbWVhc3VyZScsXG4gICAgVW5rbm93biA9ICd1bmtub3duJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBlbnVtZXJhdGlvbiBvZiB0aGUgdmFsaWQgdHlwZXMgb2YgZmlsdGVycyB0aGF0IGNhbiBiZSBhcHBsaWVkLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gRmlsdGVyVHlwZSB7XG4gICAgQ2F0ZWdvcmljYWwgPSAnY2F0ZWdvcmljYWwnLFxuICAgIFJhbmdlID0gJ3JhbmdlJyxcbiAgICBIaWVyYXJjaGljYWwgPSAnaGllcmFyY2hpY2FsJyxcbiAgICBSZWxhdGl2ZURhdGUgPSAncmVsYXRpdmUtZGF0ZScsXG4gIH1cblxuICAvKipcbiAgICogVGhlIGRpZmZlcmVudCB1cGRhdGUgdHlwZXMgZm9yIGFwcGx5aW5nIGZpbHRlclxuICAgKi9cbiAgZXhwb3J0IGVudW0gRmlsdGVyVXBkYXRlVHlwZSB7XG4gICAgQWRkID0gJ2FkZCcsXG4gICAgQWxsID0gJ2FsbCcsXG4gICAgUmVwbGFjZSA9ICdyZXBsYWNlJyxcbiAgICBSZW1vdmUgPSAncmVtb3ZlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIHR5cGUgZm9yIGEgZmlsdGVyXG4gICAqL1xuICBleHBvcnQgZW51bSBGaWx0ZXJEb21haW5UeXBlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZG9tYWluIHZhbHVlcyB0aGF0IGFyZSByZWxldmFudCB0byB0aGUgc3BlY2lmaWVkIGZpbHRlclxuICAgICAqIGkuZS4gdGhlIGRvbWFpbiBpcyByZXN0cmljdGVkIGJ5IGEgcHJldmlvdXMgZmlsdGVyXG4gICAgICovXG4gICAgUmVsZXZhbnQgPSAncmVsZXZhbnQnLFxuICAgIC8qKlxuICAgICAqIGxpc3Qgb2YgYWxsIHBvc3NpYmxlIGRvbWFpbiB2YWx1ZXMgZnJvbSBkYXRhYmFzZVxuICAgICAqL1xuICAgIERhdGFiYXNlID0gJ2RhdGFiYXNlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGZvciBzcGVjaWZ5aW5nIHdoaWNoIHZhbHVlcyB0byBpbmNsdWRlIGZvciBmaWx0ZXJpbmdcbiAgICogSW5kaWNhdGVzIHdoYXQgdG8gZG8gd2l0aCBudWxsIHZhbHVlcyBmb3IgYSBnaXZlbiBmaWx0ZXIgb3IgbWFyayBzZWxlY3Rpb24gY2FsbC5cbiAgICovXG4gIGV4cG9ydCBlbnVtIEZpbHRlck51bGxPcHRpb24ge1xuICAgIE51bGxWYWx1ZXMgPSAnbnVsbC12YWx1ZXMnLFxuICAgIE5vbk51bGxWYWx1ZXMgPSAnbm9uLW51bGwtdmFsdWVzJyxcbiAgICBBbGxWYWx1ZXMgPSAnYWxsLXZhbHVlcycsXG4gIH1cblxuICAvKipcbiAgICogRW51bSB0aGF0IHNlcnZlcyBhcyBhIGZpbHRlciBvbiB0aGUgRGF0YVZhbHVlcyByZXR1cm5lZCBmcm9tIGBnZXRTdW1tYXJ5RGF0YVJlYWRlckFzeW5jYCxcbiAgICogYGdldFVuZGVybHlpbmdUYWJsZURhdGFSZWFkZXJBc3luY2AgYW5kIGBnZXRMb2dpY2FsVGFibGVEYXRhUmVhZGVyQXN5bmNgLlxuICAgKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBvZiByZXR1cm5lZCBkYXRhIHZhbHVlcyBvbmx5LiBUYWJsZWF1IHZlcnNpb25zIHByaW9yIHRvIDIwMjEuMlxuICAgKiB3aWxsIHBhc3MgdGhlIGRhdGEgYWNyb3NzIGFuZCBwb3B1bGF0ZSB0aGUgRGF0YVZhbHVlIHByb3BlcnRpZXMuXG4gICAqIFBsZWFzZSBub3RlIHRoYXQgYWxsIHByb3BlcnRpZXMgbm90IHJlcXVlc3RlZCB3aWxsIGJlIGB1bmRlZmluZWRgIGluIHRoZSBEYXRhVmFsdWUgcmVzdWx0cy5cbiAgICogQHNpbmNlIDEuNS4wXG4gICAqL1xuICBleHBvcnQgZW51bSBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB7XG4gICAgLyoqIERhdGFWYWx1ZXMgd2lsbCBpbmNsdWRlIGFsbCBwcm9wZXJ0aWVzLiovXG4gICAgQWxsVmFsdWVzID0gJ2FsbC12YWx1ZXMnLFxuXG4gICAgLyoqIERhdGFWYWx1ZXMgd2lsbCBvbmx5IGluY2x1ZGUgdmFsdWUgYW5kIG5hdGl2ZVZhbHVlIHByb3BlcnRpZXMuKi9cbiAgICBPbmx5TmF0aXZlVmFsdWVzID0gJ29ubHktbmF0aXZlLXZhbHVlcycsXG5cbiAgICAvKiogRGF0YVZhbHVlcyB3aWxsIG9ubHkgaW5jbHVkZSBmb3JtYXR0ZWRWYWx1ZSBwcm9wZXJ0aWVzLiAqL1xuICAgIE9ubHlGb3JtYXR0ZWRWYWx1ZXMgPSAnb25seS1mb3JtYXR0ZWQtdmFsdWVzJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlIG9mIG1hcmsgZm9yIGEgZ2l2ZW4gbWFya3MgY2FyZCBpbiBhIHZpei5cbiAgICovXG4gIGV4cG9ydCBlbnVtIE1hcmtUeXBlIHtcbiAgICBCYXIgPSAnYmFyJyxcbiAgICBMaW5lID0gJ2xpbmUnLFxuICAgIEFyZWEgPSAnYXJlYScsXG4gICAgU3F1YXJlID0gJ3NxdWFyZScsXG4gICAgQ2lyY2xlID0gJ2NpcmNsZScsXG4gICAgU2hhcGUgPSAnc2hhcGUnLFxuICAgIFRleHQgPSAndGV4dCcsXG4gICAgTWFwID0gJ21hcCcsXG4gICAgUGllID0gJ3BpZScsXG4gICAgR2FudHRCYXIgPSAnZ2FudHQtYmFyJyxcbiAgICBQb2x5Z29uID0gJ3BvbHlnb24nLFxuICB9XG5cbiAgLyoqXG4gICAqIEFuIGVudW1lcmF0aW9uIGRlc2NyaWJpbmcgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBhbGxvd2FibGUgdmFsdWVzLlxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIHJlc3RyaWN0aW5nIHRoZSBkb21haW4gb2YgYSBwYXJhbWV0ZXJcbiAgICovXG4gIGV4cG9ydCBlbnVtIFBhcmFtZXRlclZhbHVlVHlwZSB7XG4gICAgQWxsID0gJ2FsbCcsXG4gICAgTGlzdCA9ICdsaXN0JyxcbiAgICBSYW5nZSA9ICdyYW5nZScsXG4gIH1cblxuICAvKipcbiAgICogRGF0ZSBwZXJpb2QgdXNlZCBpbiBmaWx0ZXJzIGFuZCBpbiBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gUGVyaW9kVHlwZSB7XG4gICAgWWVhcnMgPSAneWVhcnMnLFxuICAgIFF1YXJ0ZXJzID0gJ3F1YXJ0ZXJzJyxcbiAgICBNb250aHMgPSAnbW9udGhzJyxcbiAgICBXZWVrcyA9ICd3ZWVrcycsXG4gICAgRGF5cyA9ICdkYXlzJyxcbiAgICBIb3VycyA9ICdob3VycycsXG4gICAgTWludXRlcyA9ICdtaW51dGVzJyxcbiAgICBTZWNvbmRzID0gJ3NlY29uZHMnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gUXVpY2tUYWJsZUNhbGNUeXBlIHtcbiAgICBSdW5uaW5nVG90YWwgPSAncnVubmluZy10b3RhbCcsXG4gICAgRGlmZmVyZW5jZSA9ICdkaWZmZXJlbmNlJyxcbiAgICBQZXJjZW50RGlmZmVyZW5jZSA9ICdwZXJjZW50LWRpZmZlcmVuY2UnLFxuICAgIFBlcmNlbnRPZlRvdGFsID0gJ3BlcmNlbnQtb2YtdG90YWwnLFxuICAgIFJhbmsgPSAncmFuaycsXG4gICAgUGVyY2VudGlsZSA9ICdwZXJjZW50aWxlJyxcbiAgICBNb3ZpbmdBdmVyYWdlID0gJ21vdmluZy1hdmVyYWdlJyxcbiAgICBZVERUb3RhbCA9ICd5dGQtdG90YWwnLFxuICAgIENvbXBvdW5kR3Jvd3RoUmF0ZSA9ICdjb21wb3VuZC1ncm93dGgtcmF0ZScsXG4gICAgWWVhck92ZXJZZWFyR3Jvd3RoID0gJ3llYXItb3Zlci15ZWFyLWdyb3d0aCcsXG4gICAgWVRER3Jvd3RoID0gJ3l0ZC1ncm93dGgnLFxuICAgIFVuZGVmaW5lZCA9ICd1bmRlZmluZWQnLFxuICB9XG5cbiAgLyoqXG4gICAqIEVudW0gZm9yIHNwZWNpZnlpbmcgdGhlIHNlbGVjdGlvbiB0eXBlIGZvciBzZWxlY3QgbWFya3MgYXBpLlxuICAgKi9cbiAgZXhwb3J0IGVudW0gU2VsZWN0aW9uVXBkYXRlVHlwZSB7XG4gICAgUmVwbGFjZSA9ICdzZWxlY3QtcmVwbGFjZScsXG4gICAgQWRkID0gJ3NlbGVjdC1hZGQnLFxuICAgIFJlbW92ZSA9ICdzZWxlY3QtcmVtb3ZlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBzaGVldCBhIFtbU2hlZXRdXSBvYmplY3QgcmVwcmVzZW50c1xuICAgKi9cbiAgZXhwb3J0IGVudW0gU2hlZXRUeXBlIHtcbiAgICBEYXNoYm9hcmQgPSAnZGFzaGJvYXJkJyxcbiAgICBTdG9yeSA9ICdzdG9yeScsXG4gICAgV29ya3NoZWV0ID0gJ3dvcmtzaGVldCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBTb3J0RGlyZWN0aW9uIHtcbiAgICBJbmNyZWFzaW5nID0gJ2luY3JlYXNpbmcnLFxuICAgIERlY3JlYXNpbmcgPSAnZGVjcmVhc2luZycsXG4gIH1cblxuICBleHBvcnQgZW51bSBUcmVuZExpbmVNb2RlbFR5cGUge1xuICAgIExpbmVhciA9ICdsaW5lYXInLFxuICAgIExvZ2FyaXRobWljID0gJ2xvZ2FyaXRobWljJyxcbiAgICBFeHBvbmVudGlhbCA9ICdleHBvbmVudGlhbCcsXG4gICAgUG9seW5vbWlhbCA9ICdwb2x5bm9taWFsJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnVtIHRoYXQgcmVwcmVzZW50cyB0aGUgcmVwbGF5IHNwZWVkIG9mIGFuIGFuaW1hdGlvbi5cbiAgICogQHNpbmNlIDEuNy4wXG4gICAqL1xuICBleHBvcnQgZW51bSBSZXBsYXlTcGVlZFR5cGUge1xuICAgIC8qKiBVc2VkIGZvciBzZXR0aW5nIHRoZSByZXBsYXkgc3BlZWQgb2YgYW4gYW5pbWF0aW9uIHRvIDAuNXguKi9cbiAgICBTbG93ID0gJ3Nsb3cnLFxuXG4gICAgLyoqIFVzZWQgZm9yIHNldHRpbmcgdGhlIHJlcGxheSBzcGVlZCBvZiBhbiBhbmltYXRpb24gdG8gMS4weC4qL1xuICAgIE5vcm1hbCA9ICdub3JtYWwnLFxuXG4gICAgLyoqIFVzZWQgZm9yIHNldHRpbmcgdGhlIHJlcGxheSBzcGVlZCBvZiBhbiBhbmltYXRpb24gdG8gMi4weC4qL1xuICAgIEZhc3QgPSAnZmFzdCcsXG4gIH1cblxuICAvKipcbiAgICogRW51bSB0aGF0IHJlcHJlc2VudHMgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiBhIGxldmVsIGluIGEgaGllcmFyY2hpY2FsIGZpbHRlclxuICAgKiBAc2luY2UgRXh0ZW5zaW9ucyAxLjEwLjBcbiAgICovXG4gIGV4cG9ydCBlbnVtIEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUge1xuICAgIEFsbFNlbGVjdGVkID0gJ2FsbC1zZWxlY3RlZCcsXG4gICAgTm9uZVNlbGVjdGVkID0gJ25vbmUtc2VsZWN0ZWQnLFxuICAgIFNvbWVTZWxlY3RlZCA9ICdzb21lLXNlbGVjdGVkJyxcbiAgICBVbmtub3duU2VsZWN0ZWQgPSAndW5rbm93bi1zZWxlY3RlZCcsXG4gIH1cblxuICAvKipcbiAgICogWm9uZVZpc2liaWxpdHlUeXBlXG4gICAqIEBkZXByZWNhdGVkIHVzZSBEYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5VHlwZVxuICAgKi9cbiAgZXhwb3J0IGRlY2xhcmUgdHlwZSBab25lVmlzaWJpbGl0eVR5cGUgPSBEYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5VHlwZTtcbiAgZXhwb3J0IGNvbnN0IFpvbmVWaXNpYmlsaXR5VHlwZSA9IHsgLi4uRGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eVR5cGUgfTtcbn1cbmV4cG9ydCA9IFRhYmxlYXU7XG4iLCIvLyBUaGlzIGZpbGUgcmUtZXhwb3J0cyBldmVyeXRoaW5nIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHNoYXJlZCBhcGkgcHVibGljIGludGVyZmFjZVxuXG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvU2hhcmVkL0Fubm90YXRpb25JbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9TaGFyZWQvRGF0YVNvdXJjZUludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L1NoYXJlZC9EYXRhVGFibGVJbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vRXh0ZXJuYWxDb250cmFjdC9TaGFyZWQvRW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L1NoYXJlZC9FbnZpcm9ubWVudEludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L1NoYXJlZC9GaWx0ZXJJbnRlcmZhY2VzJztcbmV4cG9ydCB7XG4gIEFuYWx5dGljc09iamVjdFR5cGUsXG4gIEFubm90YXRpb25UeXBlLFxuICBDbGFzc05hbWVLZXksXG4gIENvbHVtblR5cGUsXG4gIERhc2hib2FyZExheW91dENoYW5nZSxcbiAgRGFzaGJvYXJkT2JqZWN0VHlwZSxcbiAgRGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eVR5cGUsXG4gIERhdGFUeXBlLFxuICBEYXRlUmFuZ2VUeXBlLFxuICBEaWFsb2dTdHlsZSxcbiAgRW5jb2RpbmdUeXBlLFxuICBGaWVsZEFnZ3JlZ2F0aW9uVHlwZSxcbiAgRmllbGRSb2xlVHlwZSxcbiAgRmlsdGVyRG9tYWluVHlwZSxcbiAgRmlsdGVyTnVsbE9wdGlvbixcbiAgRmlsdGVyVHlwZSxcbiAgRmlsdGVyVXBkYXRlVHlwZSxcbiAgSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZSxcbiAgSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gIE1hcmtUeXBlLFxuICBQYXJhbWV0ZXJWYWx1ZVR5cGUsXG4gIFBlcmlvZFR5cGUsXG4gIFF1aWNrVGFibGVDYWxjVHlwZSxcbiAgUmVwbGF5U3BlZWRUeXBlLFxuICBTZWxlY3Rpb25VcGRhdGVUeXBlLFxuICBTaGVldFR5cGUsXG4gIFNvcnREaXJlY3Rpb24sXG4gIFRyZW5kTGluZU1vZGVsVHlwZSxcbiAgWm9uZVZpc2liaWxpdHlUeXBlLFxufSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvU2hhcmVkL05hbWVzcGFjZXMvVGFibGVhdSc7XG5leHBvcnQgKiBmcm9tICcuL0V4dGVybmFsQ29udHJhY3QvU2hhcmVkL1NlbGVjdGlvbkludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L1NoYXJlZC9TaGVldEludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9FeHRlcm5hbENvbnRyYWN0L1NoYXJlZC9Xb3JrYm9va0Zvcm1hdHRpbmdJbnRlcmZhY2VzJztcbiIsIi8qKlxuICogVGhpcyBpcyB5b3VyIG1haW4uIFRoaXMgaXMgd2hlcmUgeW91IHJlLWV4cG9ydCBldmVyeXRoaW5nIHlvdSB3YW50IHRvIGJlIHB1YmxpY2x5IGF2YWlsYWJsZS5cbiAqXG4gKiBUaGUgYnVpbGQgZW5mb3JjZXMgdGhhdCB0aGUgZmlsZSBoYXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgaXMgZXhwb3J0ZWQuXG4gKi9cblxuLy8gVGhlIGZvbGxvd2luZyBwb2x5ZmlsbHMgYXJlIG5lZWRlZCBmb3IgSUUxMVxuaW1wb3J0ICdjb3JlLWpzL2VzL251bWJlci9pcy1pbnRlZ2VyJztcbmltcG9ydCAnY29yZS1qcy9lcy9udW1iZXIvaXMtbmFuJztcbmltcG9ydCAnY29yZS1qcy9lcy9vYmplY3QvYXNzaWduJztcbi8vIEV4cG9ydCB0aGUgdmVyc2lvbiBvZiB0aGUgaW50ZXJuYWwgY29udHJhY3QgdG8gYmUgYXZhaWxhYmxlIGF0IHJ1bnRpbWVcbi8vICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IHlhcm4gcHVibGlzaDpidW1wIHZpYSBzY3JpcHRzL3B1Ymxpc2gtY2hlY2sudHNcbi8vICB1cGRhdGVJbnRlcm5hbENvbnRyYWN0UnVudGltZVZlcnNpb24gaW4gdGhlIG1vbm9yZXBvIHJvb3QuXG5pbXBvcnQgKiBhcyBpbnRlcm5hbENvbnRyYWN0VmVyc2lvbiBmcm9tICcuLi9pbnRlcm5hbC1jb250cmFjdC12ZXJzaW9uLmpzb24nO1xuZXhwb3J0IGNvbnN0IElOVEVSTkFMX0NPTlRSQUNUX1ZFUlNJT04gPSBpbnRlcm5hbENvbnRyYWN0VmVyc2lvbjtcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmFjdC9EYXRhVHlwZUNvbnZlcnRlcic7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRyYWN0L0VudW1zJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhY3QvTW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhY3QvTm90aWZpY2F0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRyYWN0L1BhcmFtZXRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmFjdC9WZXJicyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZS9Bc2tEYXRhSW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlL0luaXRpYWxpemF0aW9uT3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZS9JbnRlcm5hbEFwaURpc3BhdGNoZXInO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2UvVmVyc2lvbk51bWJlcic7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZS9WcWxJbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdpbmcvQ3Jvc3NGcmFtZU1lc3Nlbmdlcic7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2luZy9pbnRlcmZhY2UvTWVzc2FnZURpc3BhdGNoZXInO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdpbmcvaW50ZXJmYWNlL01lc3NhZ2VMaXN0ZW5lcic7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2luZy9pbnRlcmZhY2UvTWVzc2FnZVR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnaW5nL2ludGVyZmFjZS9NZXNzZW5nZXInO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdpbmcvaW50ZXJmYWNlL1ByZXBhcmVkTWVzc2FnZSc7XG5leHBvcnQgKiBmcm9tICcuL3ZlcnNpb25pbmcvZXh0ZXJuYWwvRXh0ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi92ZXJzaW9uaW5nL2V4dGVybmFsL0V4dGVybmFsSWRlbnRpdHlWZXJzaW9uQ29udmVydGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdmVyc2lvbmluZy9leHRlcm5hbC9FeHRlcm5hbFZlcnNpb25Db252ZXJ0ZXJGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vdmVyc2lvbmluZy9JbnRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlcic7XG5leHBvcnQgKiBmcm9tICcuL3ZlcnNpb25pbmcvVmVyc2lvbkNvbnZlcnRlckZhY3RvcnknO1xuXG4vLyBFeHBvcnQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIG1lc3NhZ2luZyBmb3IgY29uc3VtZXJzIHRvIHVzZS5cbi8vIEJlIHZlcnkgY2FyZWZ1bCBtYWtpbmcgYW55IHVwZGF0ZXMgdG8gdGhpcyBjb250cmFjdCB3aGljaCBicmVhayB2ZXJzaW9uIGNvbXBhdGliaWxpdHkuXG5leHBvcnQgY29uc3QgTUVTU0FHSU5HX1ZFUlNJT04gPSB7XG4gIG1ham9yOiAxLFxuICBtaW5vcjogMCxcbiAgZml4OiAwLFxufTtcbiIsImltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnLi9FbnVtcyc7XG5cbmV4cG9ydCBjbGFzcyBEYXRhVHlwZUNvbnZlcnRlciB7XG4gIHByaXZhdGUgc3RhdGljIGlzU3BlY2lhbCh2YWx1ZUFzU3RyaW5nOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBQcmlvciB0byBTaG93RGF0YVRhYmxlUHJlc01vZGVsLCBzcGVjaWFsIHZhbHVlcyBjb21lIHRvIHVzIGFzXG4gICAgLy8gJyVudWxsJScsICclYWxsJScsICcld2lsZGNhcmQlJywgJyVtaXNzaW5nJScuLi5cbiAgICAvLyBXaGlsZSB0aGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgcmV0dXJuIHRydWUgZm9yIFNob3dEYXRhVGFibGVQcmVzTW9kZWwgY29udmVyc2lvbixcbiAgICAvLyBpdCBpcyBhcyBjaGVhcCBhcyBwYXNzaW5nIGFyb3VuZCBhIHZlcnNpb24gYW5kIGNoZWNraW5nIHRoYXQuXG4gICAgLy8gKFNlZSBEYXRhVmFsdWVGb3JtYXR0ZXIuY3BwKVxuXG4gICAgaWYgKHZhbHVlQXNTdHJpbmcubGVuZ3RoID4gMiAmJiB2YWx1ZUFzU3RyaW5nWzBdID09PSAnJScgJiYgdmFsdWVBc1N0cmluZ1t2YWx1ZUFzU3RyaW5nLmxlbmd0aCAtIDFdID09PSAnJScpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzcGVjaWFsVmFsdWVJbmRpY2F0b3IgPSAnJW51bGwlJztcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQm9vbGVhbihib29sZWFuU3RyaW5nOiBzdHJpbmcpOiBib29sZWFuIHwgc3RyaW5nIHtcbiAgICAvLyBib29sZWFuIHZhbHVlcyBjb21lIHRvIHVzIGFzICd0cnVlJ3wnZmFsc2UnXG4gICAgY29uc3Qgbm9ybWFsaXplZEJvb2xlYW46IHN0cmluZyA9IGJvb2xlYW5TdHJpbmcudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZEJvb2xlYW4gIT09ICd0cnVlJyAmJiBub3JtYWxpemVkQm9vbGVhbiAhPT0gJ2ZhbHNlJyA/IHRoaXMuc3BlY2lhbFZhbHVlSW5kaWNhdG9yIDogbm9ybWFsaXplZEJvb2xlYW4gPT09ICd0cnVlJztcbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VOdW1iZXIodmFsdWVBc1N0cmluZzogc3RyaW5nKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IE51bWJlcih2YWx1ZUFzU3RyaW5nKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpID8gdGhpcy5zcGVjaWFsVmFsdWVJbmRpY2F0b3IgOiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlRGF0ZShkYXRlQXNTdHJpbmc6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICAvLyBOb3RlIHRoYXQgd2l0aG91dCBhIHRpbWUsIHRoZSBkYXRlIGlzIGFzc3VtZWQgdG8gYmUgVVRDXG4gICAgLy8gSW5wdXQgb2YgMjAyMC0wMy0yNSBpcyBwcmludGVkIGFzOiBNYXIgMjQgMjAyMCAxNzowMDowMCBHTVQtMDcwMFxuICAgIC8vIFRoaXMgbWF0Y2hlcyBzdHlsZSB1c2VkIGluIGV4aXN0aW5nIGNvbnZlcnRGaWx0ZXJWYWx1ZVByZXNNb2RlbFxuICAgIGNvbnN0IHZhbHVlID0gbmV3IERhdGUoZGF0ZUFzU3RyaW5nKTtcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHZhbHVlLmdldFRpbWUoKSkgPyBudWxsIDogdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZURhdGVUaW1lKGRhdGVBc1N0cmluZzogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIFdpdGggYSB0aW1lLCB0aGUgZGF0ZSBpcyBhc3N1bWVkIHRvIGJlIFVUQy5cbiAgICAvLyBPdXIgZGF0ZSBmb3JtYXQgaXMgYWx3YXlzOiB5eXl5LW1tLWRkIGhoOm1tOnNzXG4gICAgLy8gVW5mb3J0dW5hdGVseSwgSUUxMSBjYW4ndCBwYXJzZSB0aGF0IGZvcm1hdCBzbyB3ZSBhZGQgYSBUIGJldHdlZW4gdGhlIGRheSBhbmQgdGltZS5cbiAgICAvLyBXZSBhbHNvIGFkZCBhIFogc28gdGhhdCBpdCBpcyBVVEMuIChXaXRob3V0IHRoZSBaLCBzb21lIGJyb3dzZXJzIGFzc3VtZSBsb2NhbCwgYW5kIG90aGVycyBVVEMpXG4gICAgY29uc3QgZm9ybWF0dGVkRGF0ZVN0cmluZzogc3RyaW5nID0gZGF0ZUFzU3RyaW5nLnJlcGxhY2UoJyAnLCAnVCcpLmNvbmNhdCgnWicpO1xuICAgIGNvbnN0IHZhbHVlID0gbmV3IERhdGUoZm9ybWF0dGVkRGF0ZVN0cmluZyk7XG4gICAgcmV0dXJuIE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpID8gbnVsbCA6IHZhbHVlO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICBwdWJsaWMgc3RhdGljIGNvbnZlcnRWYWx1ZUFzU3RyaW5nVG9WYWx1ZSh2YWx1ZUFzU3RyaW5nOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlKTogYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gVGhpcyBpcyBib3RoIERhdGFEaWN0aW9uYXJ5IGFuZCBTaG93RGF0YVRhYmxlUHJlc01vZGVsIGNvbXBhdGlibGUuXG4gICAgLy8gSW4gdGhlIERhdGFEaWN0aW9uYXJ5LCB2YWx1ZUFzU3RyaW5nIGNhbiBiZSAnJW51bGwlJyBvciAnJW1pc3NpbmclJywgd2hpbGUgaW5cbiAgICAvLyBTaG93RGF0YVRhYmxlUHJlc01vZGVsLCB3ZSBjYW4gZ2V0ICdudWxsJyBvciAnbWlzc2luZycsIG9yICclbnVsbCUnIGZvciBzdHJpbmcgc3BlY2lhbCB2YWx1ZXMuXG4gICAgLy8gRm9yIGVpdGhlciBvZiB0aGVzZSBjYXNlcywgd2UgcmV0dXJuIHNwZWNpYWxWYWx1ZUluZGljYXRvciAob3IgdGhlIG9yaWdpbmFsIHNwZWNpYWwgc3RyaW5nKS5cbiAgICAvLyBUbyBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbHR5LCB0aGlzIGNvbnZlcnRlcjpcbiAgICAvLyAxLiByZXR1cm5zIGEgc3RyaW5nIGZvciBhbnkgc3BlY2lhbCB2YWx1ZXNcbiAgICAvLyAyLiByZXR1cm5zIGEgc3RyaW5nIGZvciBhbnkgZGF0ZVxuXG4gICAgLy8gUGFyYW1ldGVyIG1pbi9tYXggdmFsdWVzIGNhbiBiZSB1bmRlZmluZWQsIHNvIHJlc3VsdCBpcyBhbHNvIHVuZGVmaW5lZFxuICAgIGlmICh2YWx1ZUFzU3RyaW5nID09PSB1bmRlZmluZWQgfHwgdmFsdWVBc1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NwZWNpYWwodmFsdWVBc1N0cmluZykpIHtcbiAgICAgIHJldHVybiB2YWx1ZUFzU3RyaW5nO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBEYXRhVHlwZS5Cb29sOlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUJvb2xlYW4odmFsdWVBc1N0cmluZyk7XG5cbiAgICAgIGNhc2UgRGF0YVR5cGUuSW50OlxuICAgICAgY2FzZSBEYXRhVHlwZS5GbG9hdDpcbiAgICAgICAgLy8gUmV0dXJuIHNwZWNpYWwgdmFsdWUgJyVudWxsJScgZm9yIGFueSBmYWlsdXJlIGluIHBhcnNpbmcuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhhdCBiZWNhdXNlIFNob3dEYXRhVGFibGVQcmVzTW9kZWwgd2lsbCBnaXZlIHVzIHN0cmluZ3MgbGlrZSAnbnVsbCdcbiAgICAgICAgLy8gZm9yIHNwZWNpYWwgdmFsdWVzLlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU51bWJlcih2YWx1ZUFzU3RyaW5nKTtcblxuICAgICAgY2FzZSBEYXRhVHlwZS5EYXRlOlxuICAgICAgICAvLyBGb3IgU2hvd0RhdGFUYWJsZVByZXNNb2RlbCwgc3BlY2lhbCB2YWx1ZXMgd2lsbCBiZSBcIm51bGxcIiB3aGljaCB3aWxsIGZhaWwgdG8gcGFyc2UuXG4gICAgICAgIC8vIEluIHRoYXQgY2FzZSwgd2UgcmV0dXJuICclbnVsbCUnLlxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZURhdGUodmFsdWVBc1N0cmluZykgPT09IG51bGwgPyB0aGlzLnNwZWNpYWxWYWx1ZUluZGljYXRvciA6IHZhbHVlQXNTdHJpbmc7XG5cbiAgICAgIGNhc2UgRGF0YVR5cGUuRGF0ZVRpbWU6XG4gICAgICAgIC8vIEZvciBTaG93RGF0YVRhYmxlUHJlc01vZGVsLCBzcGVjaWFsIHZhbHVlcyB3aWxsIGJlIFwibnVsbFwiIHdoaWNoIHdpbGwgZmFpbCB0byBwYXJzZS5cbiAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCB3ZSByZXR1cm4gJyVudWxsJSdcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VEYXRlVGltZSh2YWx1ZUFzU3RyaW5nKSA9PT0gbnVsbCA/IHRoaXMuc3BlY2lhbFZhbHVlSW5kaWNhdG9yIDogdmFsdWVBc1N0cmluZztcblxuICAgICAgY2FzZSBEYXRhVHlwZS5TcGF0aWFsOlxuICAgICAgY2FzZSBEYXRhVHlwZS5TdHJpbmc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdmFsdWVBc1N0cmluZztcbiAgICB9XG4gIH1cblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFZhbHVlVG9OYXRpdmVWYWx1ZSh2YWx1ZTogYW55LCB0eXBlOiBEYXRhVHlwZSk6IGJvb2xlYW4gfCBudW1iZXIgfCBEYXRlIHwgc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gVGhpcyBjb252ZXJ0cyBmcm9tIG91ciAxLjIgQVBJIHRoYXQgcmV0dXJucyBzdHJpbmdzIGZvciBzcGVjaWFscywgYW5kIGRhdGVzIGFzIHN0cmluZ3MuXG4gICAgLy8gSXQgdGFrZXMgdGhlIHNwZWNpYWwgY2FzZSBvZiAnJW51bGwlJyBhbmQgcmV0dXJucyBhIG51bGwuXG4gICAgLy8gRm9yIGRhdGVzLCBpdCByZXR1cm5zIGEgRGF0ZSBvYmplY3QgcmF0aGVyIHRoYW4gYSBzdHJpbmcuXG4gICAgLy8gY29udmVydFZhbHVlVG9OYXRpdmVWYWx1ZSBzaG91bGQgYmUgdXNlZCB0byBidWlsZCBhIERhdGFWYWx1ZS5uYXRpdmVWYWx1ZSBmaWVsZC5cblxuICAgIC8vIFBhcmFtZXRlciBtaW4vbWF4IGNhbiBiZSB1bmRlZmluZWQuIElmIHRoYXQgaXMgdGhlIGNhc2UsIG5hdGl2ZVZhbHVlIGlzIHRyZWF0ZWQgbGlrZSBhIHNwZWNpYWxcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIERhdGFUeXBlLkJvb2w6XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbnVsbCA6IHZhbHVlO1xuXG4gICAgICBjYXNlIERhdGFUeXBlLkludDpcbiAgICAgIGNhc2UgRGF0YVR5cGUuRmxvYXQ6XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbnVsbCA6IHZhbHVlO1xuXG4gICAgICBjYXNlIERhdGFUeXBlLkRhdGU6XG4gICAgICAgIC8vIENvbnZlcnQgdGhlIHN0cmluZyB0byBEYXRlIG9iamVjdCAob3IgbnVsbCBpZiBwYXJzaW5nIGZhaWxzIC4uLiB3ZSBhc3N1bWUgc3BlY2lhbClcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VEYXRlKHZhbHVlKTtcblxuICAgICAgY2FzZSBEYXRhVHlwZS5EYXRlVGltZTpcbiAgICAgICAgLy8gQ29udmVydCB0aGUgc3RyaW5nIHRvIERhdGUgb2JqZWN0IChvciBudWxsIGlmIHBhcnNpbmcgZmFpbHMgLi4uIHdlIGFzc3VtZSBzcGVjaWFsKVxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZURhdGVUaW1lKHZhbHVlKTtcblxuICAgICAgY2FzZSBEYXRhVHlwZS5TdHJpbmc6XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3BlY2lhbCh2YWx1ZSkgPyBudWxsIDogdmFsdWU7XG5cbiAgICAgIGNhc2UgRGF0YVR5cGUuU3BhdGlhbDpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFN0cmluZ1ZhbHVlVG9OYXRpdmVWYWx1ZSh2YWx1ZTogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSk6IGJvb2xlYW4gfCBudW1iZXIgfCBEYXRlIHwgc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjb252ZXJzaW9uIGZyb20gc3RyaW5nIGRpcmVjdGx5IHRvIG5hdGl2ZSB2YWx1ZSBmb3IgYWxsIHR5cGVzXG4gICAgcmV0dXJuIHRoaXMuY29udmVydFZhbHVlVG9OYXRpdmVWYWx1ZSh0aGlzLmNvbnZlcnRWYWx1ZUFzU3RyaW5nVG9WYWx1ZSh2YWx1ZSwgdHlwZSksIHR5cGUpO1xuICB9XG59XG4iLCJleHBvcnQgZW51bSBFeHRlbnNpb25Db250ZXh0IHtcbiAgRGVza3RvcCA9ICdkZXNrdG9wJyxcbiAgU2VydmVyID0gJ3NlcnZlcicsXG4gIFVua25vd24gPSAndW5rbm93bicsXG59XG5cbmV4cG9ydCBlbnVtIEV4dGVuc2lvbk1vZGUge1xuICBBdXRob3JpbmcgPSAnYXV0aG9yaW5nJyxcbiAgVmlld2luZyA9ICd2aWV3aW5nJyxcbiAgVW5rbm93biA9ICd1bmtub3duJyxcbn1cblxuZXhwb3J0IGVudW0gQW5ub3RhdGVFbnVtIHtcbiAgTWFyayA9ICdtYXJrJyxcbiAgUG9pbnQgPSAncG9pbnQnLFxuICBBcmVhID0gJ2FyZWEnLFxufVxuXG5leHBvcnQgZW51bSBDb2x1bW5UeXBlIHtcbiAgRGlzY3JldGUgPSAnZGlzY3JldGUnLFxuICBDb250aW51b3VzID0gJ2NvbnRpbnVvdXMnLFxufVxuXG5leHBvcnQgZW51bSBEYXNoYm9hcmRPYmplY3RUeXBlIHtcbiAgQmxhbmsgPSAnYmxhbmsnLFxuICBXb3Jrc2hlZXQgPSAnd29ya3NoZWV0JyxcbiAgUXVpY2tGaWx0ZXIgPSAncXVpY2stZmlsdGVyJyxcbiAgUGFyYW1ldGVyQ29udHJvbCA9ICdwYXJhbWV0ZXItY29udHJvbCcsXG4gIFBhZ2VGaWx0ZXIgPSAncGFnZS1maWx0ZXInLFxuICBMZWdlbmQgPSAnbGVnZW5kJyxcbiAgVGl0bGUgPSAndGl0bGUnLFxuICBUZXh0ID0gJ3RleHQnLFxuICBJbWFnZSA9ICdpbWFnZScsXG4gIFdlYlBhZ2UgPSAnd2ViLXBhZ2UnLFxuICBFeHRlbnNpb24gPSAnZXh0ZW5zaW9uJyxcbn1cblxuZXhwb3J0IGVudW0gRGF0YVR5cGUge1xuICBTdHJpbmcgPSAnc3RyaW5nJyxcbiAgSW50ID0gJ2ludCcsXG4gIEZsb2F0ID0gJ2Zsb2F0JyxcbiAgQm9vbCA9ICdib29sJyxcbiAgRGF0ZSA9ICdkYXRlJyxcbiAgRGF0ZVRpbWUgPSAnZGF0ZS10aW1lJyxcbiAgU3BhdGlhbCA9ICdzcGF0aWFsJyxcbn1cblxuZXhwb3J0IGVudW0gRGlhbG9nU3R5bGUge1xuICBXaW5kb3cgPSAnd2luZG93JyxcbiAgTW9kYWwgPSAnbW9kYWwnLFxuICBNb2RlbGVzcyA9ICdtb2RlbGVzcycsXG59XG5cbmV4cG9ydCBlbnVtIEVuY29kZWREYXRhVHlwZSB7XG4gIE51bWJlciA9ICdudW1iZXInLFxuICBTdHJpbmcgPSAnc3RyaW5nJyxcbiAgRGF0ZSA9ICdkYXRlJyxcbiAgQm9vbGVhbiA9ICdib29sZWFuJyxcbn1cblxuZXhwb3J0IGVudW0gRXJyb3JDb2RlcyB7XG4gIElOSVRJQUxJWkFUSU9OX0VSUk9SID0gJ2luaXRpYWxpemF0aW9uLWVycm9yJyxcbiAgSU5URVJOQUxfRVJST1IgPSAnaW50ZXJuYWwtZXJyb3InLFxuICBNSVNTSU5HX0VOVU1fTUFQUElORyA9ICdtaXNzaW5nLWVudW0tbWFwcGluZycsXG4gIE1JU1NJTkdfUEFSQU1FVEVSID0gJ21pc3NpbmctcGFyYW1ldGVyJyxcbiAgUEVSTUlTU0lPTl9ERU5JRUQgPSAncGVybWlzc2lvbi1kZW5pZWQnLFxuICBQUkVTX01PREVMX1BBUlNJTkdfRVJST1IgPSAncHJlcy1tb2RlbC1wYXJzaW5nLWVycm9yJyxcbiAgVkVSU0lPTl9OT1RfQ09ORklHVVJFRCA9ICd2ZXJzaW9uLW5vdC1jb25maWd1cmVkJyxcbiAgVklTSUJJTElUWV9FUlJPUiA9ICd2aXNpYmlsaXR5LWVycm9yJyxcbiAgVU5LTk9XTl9WRVJCX0lEID0gJ3Vua25vd24tdmVyYi1pZCcsXG59XG5cbmV4cG9ydCBlbnVtIEZpZWxkQWdncmVnYXRpb25UeXBlIHtcbiAgU3VtID0gJ3N1bScsXG4gIEF2ZyA9ICdhdmcnLFxuICBNaW4gPSAnbWluJyxcbiAgTWF4ID0gJ21heCcsXG4gIFN0ZGV2ID0gJ3N0ZGV2JyxcbiAgU3RkZXZwID0gJ3N0ZGV2cCcsXG4gIFZhciA9ICd2YXInLFxuICBWYXJwID0gJ3ZhcnAnLFxuICBDb3VudCA9ICdjb3VudCcsXG4gIENvdW50ZCA9ICdjb3VudGQnLFxuICBNZWRpYW4gPSAnbWVkaWFuJyxcbiAgQXR0ciA9ICdhdHRyJyxcbiAgTm9uZSA9ICdub25lJyxcbiAgWWVhciA9ICd5ZWFyJyxcbiAgUXRyID0gJ3F0cicsXG4gIE1vbnRoID0gJ21vbnRoJyxcbiAgRGF5ID0gJ2RheScsXG4gIEhvdXIgPSAnaG91cicsXG4gIE1pbnV0ZSA9ICdtaW51dGUnLFxuICBTZWNvbmQgPSAnc2Vjb25kJyxcbiAgV2VlayA9ICd3ZWVrJyxcbiAgV2Vla2RheSA9ICd3ZWVrZGF5JyxcbiAgTW9udGhZZWFyID0gJ21vbnRoLXllYXInLFxuICBNZHkgPSAnbWR5JyxcbiAgRW5kID0gJ2VuZCcsXG4gIFRydW5jWWVhciA9ICd0cnVuYy15ZWFyJyxcbiAgVHJ1bmNRdHIgPSAndHJ1bmMtcXRyJyxcbiAgVHJ1bmNNb250aCA9ICd0cnVuYy1tb250aCcsXG4gIFRydW5jV2VlayA9ICd0cnVuYy13ZWVrJyxcbiAgVHJ1bmNEYXkgPSAndHJ1bmMtZGF5JyxcbiAgVHJ1bmNIb3VyID0gJ3RydW5jLWhvdXInLFxuICBUcnVuY01pbnV0ZSA9ICd0cnVuYy1taW51dGUnLFxuICBUcnVuY1NlY29uZCA9ICd0cnVuYy1zZWNvbmQnLFxuICBRdWFydDEgPSAncXVhcnQxJyxcbiAgUXVhcnQzID0gJ3F1YXJ0MycsXG4gIFNrZXduZXNzID0gJ3NrZXduZXNzJyxcbiAgS3VydG9zaXMgPSAna3VydG9zaXMnLFxuICBJbk91dCA9ICdpbi1vdXQnLFxuICBVc2VyID0gJ3VzZXInLFxufVxuXG5leHBvcnQgZW51bSBGaWVsZFJvbGVUeXBlIHtcbiAgRGltZW5zaW9uID0gJ2RpbWVuc2lvbicsXG4gIE1lYXN1cmUgPSAnbWVhc3VyZScsXG4gIFVua25vd24gPSAndW5rbm93bicsXG59XG5cbi8qKlxuICogIFRoZSBkaWZmZXJlbnQgdXBkYXRlIHR5cGVzIGZvciBhcHBseWluZyBmaWx0ZXIuXG4gKi9cbmV4cG9ydCBlbnVtIEZpbHRlclVwZGF0ZVR5cGUge1xuICBBZGQgPSAnYWRkJyxcbiAgQWxsID0gJ2FsbCcsXG4gIFJlcGxhY2UgPSAncmVwbGFjZScsXG4gIFJlbW92ZSA9ICdyZW1vdmUnLFxufVxuXG5leHBvcnQgZW51bSBTaGVldFR5cGUge1xuICBEYXNoYm9hcmQgPSAnZGFzaGJvYXJkJyxcbiAgU3RvcnkgPSAnc3RvcnknLFxuICBXb3Jrc2hlZXQgPSAnd29ya3NoZWV0Jyxcbn1cblxuZXhwb3J0IGVudW0gRG9tYWluUmVzdHJpY3Rpb25UeXBlIHtcbiAgQWxsID0gJ2FsbCcsXG4gIExpc3QgPSAnbGlzdCcsXG4gIFJhbmdlID0gJ3JhbmdlJyxcbn1cblxuZXhwb3J0IGVudW0gRGF0ZVN0ZXBQZXJpb2Qge1xuICBZZWFycyA9ICd5ZWFycycsXG4gIFF1YXJ0ZXJzID0gJ3F1YXJ0ZXJzJyxcbiAgTW9udGhzID0gJ21vbnRocycsXG4gIFdlZWtzID0gJ3dlZWtzJyxcbiAgRGF5cyA9ICdkYXlzJyxcbiAgSG91cnMgPSAnaG91cnMnLFxuICBNaW51dGVzID0gJ21pbnV0ZXMnLFxuICBTZWNvbmRzID0gJ3NlY29uZHMnLFxufVxuXG4vKipcbiAqIFRoZSBvcHRpb24gZm9yIHNwZWNpZnlpbmcgd2hpY2ggdmFsdWVzIHRvIGluY2x1ZGUgZm9yIGZpbHRlcmluZy5cbiAqL1xuZXhwb3J0IGVudW0gRmlsdGVyTnVsbE9wdGlvbiB7XG4gIE51bGxWYWx1ZXMgPSAnbnVsbHZhbHVlcycsXG4gIE5vbk51bGxWYWx1ZXMgPSAnbm9ubnVsbHZhbHVlcycsXG4gIEFsbFZhbHVlcyA9ICdhbGx2YWx1ZXMnLFxufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIGZpbHRlciBkb21haW5cbiAqL1xuZXhwb3J0IGVudW0gRmlsdGVyRG9tYWluVHlwZSB7XG4gIFJlbGV2YW50ID0gJ3JlbGV2YW50JyxcbiAgRGF0YWJhc2UgPSAnZGF0YWJhc2UnLFxufVxuXG4vKipcbiAqIEludGVybmFsIGVudW0gZm9yIHNwZWNpZnlpbmcgdGhlIHNlbGVjdGlvbiB0eXBlIGZvciBzZWxlY3QgbWFya3MgYXBpLlxuICovXG5leHBvcnQgZW51bSBTZWxlY3Rpb25VcGRhdGVUeXBlIHtcbiAgUmVwbGFjZSA9ICdzZWxlY3QtcmVwbGFjZScsXG4gIEFkZCA9ICdzZWxlY3QtYWRkJyxcbiAgUmVtb3ZlID0gJ3NlbGVjdC1yZW1vdmUnLFxufVxuXG4vKipcbiAqIEludGVybmFsIGVudW0gZm9yIHNwZWNpZnlpbmcgdGhlIGluY2x1ZGVkIHZhbHVlcyB0eXBlIGZvciByYW5nZSBzZWxlY3Rpb24uXG4gKi9cbmV4cG9ydCBlbnVtIFF1YW50aXRhdGl2ZUluY2x1ZGVkVmFsdWVzIHtcbiAgSW5jbHVkZU51bGwgPSAnaW5jbHVkZS1udWxsJyxcbiAgSW5jbHVkZU5vbk51bGwgPSAnaW5jbHVkZS1ub24tbnVsbCcsXG4gIEluY2x1ZGVBbGwgPSAnaW5jbHVkZS1hbGwnLFxufVxuXG4vKipcbiAqIEludGVybmFsIGVudW0gZm9yIHNwZWNpZnlpbmcgYSBoaWVyYXJjaGljYWwgbGV2ZWwgc2VsZWN0aW9uIHN0YXRlLlxuICovXG5leHBvcnQgZW51bSBIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlIHtcbiAgQWxsU2VsZWN0ZWQgPSAnYWxsLXNlbGVjdGVkJyxcbiAgTm9uZVNlbGVjdGVkID0gJ25vbmUtc2VsZWN0ZWQnLFxuICBTb21lU2VsZWN0ZWQgPSAnc29tZS1zZWxlY3RlZCcsXG4gIFVua25vd25TZWxlY3RlZCA9ICd1bmtub3duLXNlbGVjdGVkJyxcbn1cblxuLyoqXG4gKiBUeXBlIG9mIG1hcmsgZm9yIGEgZ2l2ZW4gbWFya3MgY2FyZCBpbiBhIHZpei5cbiAqL1xuZXhwb3J0IGVudW0gTWFya1R5cGUge1xuICBCYXIgPSAnYmFyJyxcbiAgTGluZSA9ICdsaW5lJyxcbiAgQXJlYSA9ICdhcmVhJyxcbiAgU3F1YXJlID0gJ3NxdWFyZScsXG4gIENpcmNsZSA9ICdjaXJjbGUnLFxuICBTaGFwZSA9ICdzaGFwZScsXG4gIFRleHQgPSAndGV4dCcsXG4gIE1hcCA9ICdtYXAnLFxuICBQaWUgPSAncGllJyxcbiAgR2FudHRCYXIgPSAnZ2FudHQtYmFyJyxcbiAgUG9seWdvbiA9ICdwb2x5Z29uJyxcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBlbnVtIGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIG9mIGZpbHRlclxuICovXG5leHBvcnQgZW51bSBGaWx0ZXJUeXBlIHtcbiAgQ2F0ZWdvcmljYWwgPSAnY2F0ZWdvcmljYWwnLFxuICBSYW5nZSA9ICdyYW5nZScsXG4gIFJlbGF0aXZlRGF0ZSA9ICdyZWxhdGl2ZURhdGUnLFxuICBIaWVyYXJjaGljYWwgPSAnaGllcmFyY2hpY2FsJyxcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBlbnVtIGZvciBzcGVjaWZ5aW5nIHRoZSBEYXRlUmFuZ2VUeXBlIG9mIGEgcmVsYXRpdmUgZGF0ZSBmaWx0ZXJcbiAqL1xuZXhwb3J0IGVudW0gRGF0ZVJhbmdlVHlwZSB7XG4gIC8qKlxuICAgKiBSZWZlcnMgdG8gdGhlIGxhc3QgZGF5LCB3ZWVrLCBtb250aCwgZXRjLiBvZiB0aGUgZGF0ZSBwZXJpb2QuXG4gICAqL1xuICBMYXN0ID0gJ2xhc3QnLFxuICAvKipcbiAgICogUmVmZXJzIHRvIHRoZSBsYXN0IE4gZGF5cywgd2Vla3MsIG1vbnRocywgZXRjLiBvZiB0aGUgZGF0ZSBwZXJpb2QuXG4gICAqL1xuICBMYXN0TiA9ICdsYXN0TicsXG4gIC8qKlxuICAgKiBSZWZlcnMgdG8gdGhlIG5leHQgZGF5LCB3ZWVrLCBtb250aCwgZXRjLiBvZiB0aGUgZGF0ZSBwZXJpb2QuXG4gICAqL1xuICBOZXh0ID0gJ25leHQnLFxuICAvKipcbiAgICogUmVmZXJzIHRvIHRoZSBuZXh0IE4gZGF5cywgd2Vla3MsIG1vbnRocywgZXRjLiBvZiB0aGUgZGF0ZSBwZXJpb2QuXG4gICAqL1xuICBOZXh0TiA9ICduZXh0TicsXG4gIC8qKlxuICAgKiBSZWZlcnMgdG8gdGhlIGN1cnJlbnQgZGF5LCB3ZWVrLCBtb250aCwgZXRjLiBvZiB0aGUgZGF0ZSBwZXJpb2QuXG4gICAqL1xuICBDdXJyZW50ID0gJ2N1cnJlbnQnLFxuICAvKipcbiAgICogUmVmZXJzIHRvIGV2ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgY3VycmVudCBkYXksIHdlZWssIG1vbnRoLCBldGMuIG9mIHRoZSBkYXRlIHBlcmlvZC5cbiAgICovXG4gIFRvRGF0ZSA9ICd0b0RhdGUnLFxufVxuXG4vKipcbiAqIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBsYXVuY2hpbmcgb2YgYW4gZXh0ZW5zaW9uIGRpYWxvZyBzdWNjZWVkZWQgb3IgZmFpbGVkLlxuICovXG5leHBvcnQgZW51bSBFeHRlbnNpb25EaWFsb2dSZXN1bHQge1xuICBEaWFsb2dBbHJlYWR5T3BlbiA9ICdkaWFsb2ctYWxyZWFkeS1vcGVuJyxcbiAgSW52YWxpZERvbWFpbiA9ICdpbnZhbGlkLWRvbWFpbicsXG4gIFN1Y2Nlc3MgPSAnc3VjY2VzcycsXG59XG5cbi8vIEVudW1lcmF0aW9uIGZvciBBcGlTaG93RGF0YSB0YWJsZSBpZCBzZW50aW5lbHMuXG5leHBvcnQgZW51bSBBcGlTaG93RGF0YVRhYmxlU2VudGluZWwge1xuICAvLyBmaW5kIHRoZSBvbmUgbG9naWNhbCB0YWJsZSAtIHVzZWQgaW4gdmVyc2lvbiBjb21wYXRpYmlsaXR5IGNoZWNrIGZvciBnZXRVbmRlcmx5aW5nRGF0YVRhYmxlIGFuZCBnZXRMb2dpY2FsRGF0YVRhYmxlIGNvbW1hbmRzXG4gIFNpbmdsZVRhYmxlSWQgPSAnc2luZ2xlLXRhYmxlLWlkLXNlbnRpbmVsJyxcbiAgU2luZ2xlVGFibGVDYXB0aW9uID0gJ1NpbmdsZSB0YWJsZSBpZCBzZW50aW5lbCcsXG59XG5cbi8qKlxuICogVXNlZCB0byBvcHRpbWl6ZSB0aGUgZ2V0U3VtbWFyeURhdGEvZ2V0VW5kZXJseWluZ1RhYmxlRGF0YSByZXN1bHRzXG4gKiBNYXBwZWQgZnJvbSBleHRlcm5hbCBJbmNsdWRlRGF0YVZhbHVlc09wdGlvblxuICovXG5leHBvcnQgZW51bSBBcGlTaG93RGF0YVRhYmxlRm9ybWF0IHtcbiAgTmF0aXZlVmFsdWVzT25seSA9ICduYXRpdmUtdmFsdWVzLW9ubHknLFxuICBGb3JtYXR0ZWRWYWx1ZXNPbmx5ID0gJ2Zvcm1hdHRlZC12YWx1ZXMtb25seScsXG4gIE5hdGl2ZUFuZEZvcm1hdHRlZFZhbHVlcyA9ICduYXRpdmUtYW5kLWZvcm1hdHRlZC12YWx1ZXMnLFxufVxuXG4vKipcbiAqIFVzZWQgdG8gZGVub3RlIHRoZSBzZWN0aW9ucyBvZiBmb3JtYXR0aW5nIHdpdGhpbiB0YWJsZWF1XG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIENsYXNzTmFtZUtleSB7XG4gIFdvcmtzaGVldFRpdGxlID0gJ3RhYmxlYXUtd29ya3NoZWV0LXRpdGxlJyxcbiAgV29ya3NoZWV0ID0gJ3RhYmxlYXUtd29ya3NoZWV0JyxcbiAgVG9vbHRpcCA9ICd0YWJsZWF1LXRvb2x0aXAnLFxuICBTdG9yeVRpdGxlID0gJ3RhYmxlYXUtc3RvcnktdGl0bGUnLFxuICBEYXNoYm9hcmRUaXRsZSA9ICd0YWJsZWF1LWRhc2hib2FyZC10aXRsZScsXG59XG4iLCJleHBvcnQgZW51bSBOb3RpZmljYXRpb25JZCB7XG4gIEN1c3RvbU1hcmtDb250ZXh0TWVudUNsaWNrZWQgPSAnY3VzdG9tLW1hcmstY29udGV4dC1tZW51LWNsaWNrZWQnLFxuICBDb250ZXh0TWVudUNsaWNrID0gJ2NvbnRleHQtbWVudS1jbGljaycsXG4gIEN1c3RvbVZpZXdSZW1vdmVkID0gJ2N1c3RvbS12aWV3LXJlbW92ZWQnLFxuICBDdXN0b21WaWV3U2F2ZWQgPSAnY3VzdG9tLXZpZXctc2F2ZWQnLFxuICBDdXN0b21WaWV3U2V0RGVmYXVsdCA9ICdjdXN0b20tdmlldy1zZXQtZGVmYXVsdCcsXG4gIEN1c3RvbVZpZXdzTG9hZGVkID0gJ2N1c3RvbS12aWV3cy1sb2FkZWQnLFxuICBEYXNoYm9hcmRMYXlvdXRDaGFuZ2VkID0gJ2Rhc2hib2FyZC1sYXlvdXQtY2hhbmdlZCcsXG4gIEVkaXRCdXR0b25DbGlja2VkID0gJ2VkaXQtYnV0dG9uLWNsaWNrZWQnLFxuICBFZGl0SW5EZXNrdG9wQnV0dG9uQ2xpY2tlZCA9ICdlZGl0LWluLWRlc2t0b3AtYnV0dG9uLWNsaWNrZWQnLFxuICBFeHRlbnNpb25EaWFsb2dVcGRhdGUgPSAnZXh0ZW5zaW9uLWRpYWxvZy11cGRhdGUnLFxuICBGaWx0ZXJDaGFuZ2VkID0gJ2ZpbHRlci1jaGFuZ2VkJyxcbiAgRmlyc3RWaXpTaXplS25vd24gPSAnZmlyc3Qtdml6LXNpemUta25vd24nLFxuICBQYXJhbWV0ZXJDaGFuZ2VkID0gJ3BhcmFtZXRlci1jaGFuZ2VkJyxcbiAgU2VsZWN0ZWRNYXJrc0NoYW5nZWQgPSAnc2VsZWN0ZWQtbWFya3MtY2hhbmdlZCcsXG4gIFNldHRpbmdzQ2hhbmdlZCA9ICdzZXR0aW5ncy1jaGFuZ2VkJyxcbiAgVGVzdENvbnZlcnNpb25Ob3RpZmljYXRpb24gPSAndGVzdC1jb252ZXJzaW9uLW5vdGlmaWNhdGlvbicsXG4gIFRvb2xiYXJTdGF0ZUNoYW5nZWQgPSAndG9vbGJhci1zdGF0ZS1jaGFuZ2VkJyxcbiAgVml6SW50ZXJhY3RpdmUgPSAndml6LWludGVyYWN0aXZlJyxcbiAgQXNrRGF0YUludGVyYWN0aXZlID0gJ2Fzay1kYXRhLWludGVyYWN0aXZlJyxcbiAgV29ya2Jvb2tSZWFkeVRvQ2xvc2UgPSAnd29ya2Jvb2stcmVhZHktdG8tY2xvc2UnLFxuICBXb3JrYm9va0Zvcm1hdHRpbmdDaGFuZ2VkID0gJ3dvcmtib29rLWZvcm1hdHRpbmctY2hhbmdlZCcsXG4gIFdvcmtib29rUHVibGlzaGVkID0gJ3dvcmtib29rLXB1Ymxpc2hlZCcsXG4gIFdvcmtib29rUHVibGlzaGVkQXMgPSAnd29ya2Jvb2stcHVibGlzaGVkLWFzJyxcbiAgVXJsQWN0aW9uID0gJ3VybC1hY3Rpb24nLFxuICBUYWJTd2l0Y2hlZCA9ICd0YWItc3dpdGNoZWQnLFxuICBTdG9yeVBvaW50U3dpdGNoZWQgPSAnc3RvcnktcG9pbnQtc3dpdGNoZWQnLFxufVxuIiwiLy8gUExFQVNFIEtFRVAgSU4gQUxQSEFCRVRJQ0FMIE9SREVSLiBUaGlzIGhlbHBzIHdpdGggdmlzdWFsbHkgZmluZGluZyBlbnRyaWVzLCBrbm93aW5nIHdoZXJlIHRvIHB1dFxuLy8gbmV3IG9uZXMsIGFuZCBtZXJnZSBjb25mbGljdHMuXG5leHBvcnQgZW51bSBQYXJhbWV0ZXJJZCB7XG4gIEFjdGl2ZVRhYmxlc0luZm8gPSAnYWN0aXZlLXRhYmxlcy1pbmZvJyxcbiAgQW5jaG9yRGF0ZSA9ICdhbmNob3ItZGF0ZScsXG4gIEFubm90YXRlRW51bSA9ICdhbm5vdGF0ZS1lbnVtJyxcbiAgQW5ub3RhdGlvbkxpc3QgPSAnYW5ub3RhdGlvbi1saXN0JyxcblxuICBDYXRlZ29yaWNhbERvbWFpbiA9ICdjYXRlZ29yaWNhbC1kb21haW4nLFxuICBDbGlja1Rocm91Z2hFbmFibGVkID0gJ2NsaWNrLXRocm91Z2gtZW5hYmxlZCcsXG4gIENvbHVtbnNUb0luY2x1ZGUgPSAnY29sdW1ucy10by1pbmNsdWRlJyxcbiAgQ29sdW1uc1RvSW5jbHVkZUJ5SWQgPSAnY29sdW1ucy10by1pbmNsdWRlLWJ5LWlkJyxcbiAgQ29ubmVjdGlvbkRlc2NyaXB0aW9uU3VtbWFyaWVzID0gJ2Nvbm5lY3Rpb24tZGVzY3JpcHRpb24tc3VtbWFyaWVzJyxcbiAgQ3VzdG9tVmlldyA9ICdjdXN0b20tdmlldycsXG4gIEN1c3RvbVZpZXdJc0RlZmF1bHQgPSAnY3VzdG9tLXZpZXctaXMtZGVmYXVsdCcsXG4gIEN1c3RvbVZpZXdJc1B1YmxpYyA9ICdjdXN0b20tdmlldy1pcy1wdWJsaWMnLFxuICBDdXN0b21WaWV3THVpZCA9ICdjdXN0b20tdmlldy1sdWlkJyxcbiAgQ3VzdG9tVmlld05hbWUgPSAnY3VzdG9tLXZpZXctbmFtZScsXG4gIEN1c3RvbVZpZXdzID0gJ2N1c3RvbS12aWV3cycsXG5cbiAgRGFzaGJvYXJkID0gJ2Rhc2hib2FyZCcsXG4gIERhc2hib2FyZEZpbHRlcnMgPSAnZGFzaGJvYXJkLWZpbHRlcnMnLFxuICBEYXNoYm9hcmROYW1lID0gJ2Rhc2hib2FyZCcsXG4gIERhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZSA9ICdkYXNoYm9hcmQtb2JqZWN0LXBvc2l0aW9uLWFuZC1zaXplLXVwZGF0ZScsXG4gIERhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZUxpc3QgPSAnZGFzaGJvYXJkLW9iamVjdC1wb3NpdGlvbi1hbmQtc2l6ZS11cGRhdGUtbGlzdCcsXG4gIERhdGFSb3dJbmRleCA9ICdkYXRhLXJvdy1pbmRleCcsXG4gIERhdGFTY2hlbWEgPSAnZGF0YS1zY2hlbWEnLFxuICBEYXRhU291cmNlID0gJ2RhdGEtc291cmNlJyxcbiAgRGF0YVNvdXJjZURhdGFUYWJsZSA9ICdkYXRhLXNvdXJjZS1kYXRhLXRhYmxlJyxcbiAgRGF0YVNvdXJjZUlkID0gJ2RhdGEtc291cmNlLWlkJyxcbiAgRGF0YVNvdXJjZU5hbWUgPSAnZGF0YS1zb3VyY2UtbmFtZScsXG4gIERhdGFUYWJsZSA9ICdkYXRhLXRhYmxlJyxcbiAgRGF0YVRhYmxlUmVhZGVyID0gJ2RhdGEtdGFibGUtcmVhZGVyJyxcbiAgRGF0ZVJhbmdlVHlwZSA9ICdkYXRlLXJhbmdlLXR5cGUnLFxuICBEZWx0YVRpbWVNcyA9ICdkZWx0YS10aW1lLW1zJyxcbiAgRGltVmFsU2VsZWN0aW9uTW9kZWxzID0gJ2RpbWVuc2lvblZhbHVlU2VsZWN0aW9uTW9kZWxzJyxcbiAgRG9tYWluVHlwZSA9ICdkb21haW4tdHlwZScsXG5cbiAgRW1iZWRkaW5nQm9vdHN0cmFwSW5mbyA9ICdlbWJlZGRpbmctYm9vdHN0cmFwLWluZm8nLFxuICBFeHRlbnNpb25Cb290c3RyYXBJbmZvID0gJ2V4dGVuc2lvbi1ib290c3RyYXAtaW5mbycsXG4gIEV4dGVuc2lvbkNvbnRleHRNZW51SWRzID0gJ2V4dGVuc2lvbi1jb250ZXh0LW1lbnUtaWRzJyxcbiAgRXh0ZW5zaW9uRGlhbG9nSCA9ICdleHRlbnNpb24tZGlhbG9nLWhlaWdodCcsXG4gIEV4dGVuc2lvbkRpYWxvZ1BheWxvYWQgPSAnZXh0ZW5zaW9uLWRpYWxvZy1wYXlsb2FkJyxcbiAgRXh0ZW5zaW9uRGlhbG9nUmVzdWx0ID0gJ2V4dGVuc2lvbi1kaWFsb2ctcmVzdWx0JyxcbiAgRXh0ZW5zaW9uRGlhbG9nU3R5bGUgPSAnZXh0ZW5zaW9uLWRpYWxvZy1zdHlsZScsXG4gIEV4dGVuc2lvbkRpYWxvZ1VybCA9ICdleHRlbnNpb24tZGlhbG9nLXVybCcsXG4gIEV4dGVuc2lvbkRpYWxvZ1cgPSAnZXh0ZW5zaW9uLWRpYWxvZy13aWR0aCcsXG4gIEV4dGVuc2lvbkxvY2F0b3IgPSAnZXh0ZW5zaW9uLWxvY2F0b3InLFxuICBFeHRlbnNpb25TZXR0aW5nc0luZm8gPSAnZXh0ZW5zaW9uLXNldHRpbmdzLWluZm8nLFxuICBFeHRlbnNpb25ab25lSWQgPSAnZXh0ZW5zaW9uLXpvbmUtaWQnLFxuICBFeHRlcm5hbE1lbnVEZXNjcmlwdGlvbiA9ICdleHRlcm5hbC1tZW51LWRlc2NyaXB0aW9uJyxcbiAgRXh0ZXJuYWxNZW51SGVhZGVyID0gJ2V4dGVybmFsLW1lbnUtaGVhZGVyJyxcbiAgRXh0ZXJuYWxNZW51SXRlbURpc3BsYXlOYW1lID0gJ2V4dGVybmFsLW1lbnUtaXRlbS1kaXNwbGF5LW5hbWUnLFxuICBFeHRlcm5hbE1lbnVJdGVtSWQgPSAnZXh0ZXJuYWwtbWVudS1pdGVtLWlkJyxcblxuICBGaWVsZCA9ICdmaWVsZCcsXG4gIEZpZWxkSWQgPSAnZmllbGQtaWQnLFxuICBGaWVsZE5hbWUgPSAnZmllbGQtbmFtZScsXG4gIEZpbHRlckxldmVscyA9ICdmaWx0ZXItbGV2ZWxzJyxcbiAgRmlsdGVyUmFuZ2VNYXggPSAnZmlsdGVyLXJhbmdlLW1heCcsXG4gIEZpbHRlclJhbmdlTWluID0gJ2ZpbHRlci1yYW5nZS1taW4nLFxuICBGaWx0ZXJSYW5nZU51bGxPcHRpb24gPSAnZmlsdGVyLXJhbmdlLW51bGwtb3B0aW9uJyxcbiAgRmlsdGVyVXBkYXRlVHlwZSA9ICdmaWx0ZXItdXBkYXRlLXR5cGUnLFxuICBGaWx0ZXJWYWx1ZXMgPSAnZmlsdGVyLXZhbHVlcycsXG4gIEZvbnROYW1lTGlzdEl0ZW1zID0gJ2ZvbnQtbmFtZS1saXN0LWl0ZW1zJyxcbiAgRm9ybWF0dGVkVGV4dCA9ICdmb3JtYXR0ZWQtdGV4dCcsXG4gIEZ1bmN0aW9uTmFtZSA9ICdmdW5jdGlvbi1uYW1lJyxcblxuICBIaWVyVmFsU2VsZWN0aW9uTW9kZWxzID0gJ2hpZXJhcmNoaWNhbFZhbHVlU2VsZWN0aW9uTW9kZWxzJyxcbiAgSGlnaGxpZ2h0ZWREYXRhID0gJ2hpZ2hsaWdodGVkLWRhdGEnLFxuXG4gIElnbm9yZUFsaWFzZXMgPSAnaWdub3JlLWFsaWFzZXMnLFxuICBJZ25vcmVTZWxlY3Rpb24gPSAnaWdub3JlLXNlbGVjdGlvbicsXG4gIEluY2x1ZGVBbGxDb2x1bW5zID0gJ2luY2x1ZGUtYWxsLWNvbHVtbnMnLFxuICBJbnZhbGlkQWdnRmllbGROYW1lID0gJ2ludmFsaWQtYWdnLWZpZWxkLW5hbWUnLFxuICBJbnZhbGlkRGF0ZXMgPSAnaW52YWxpZC1kYXRlcycsXG4gIEludmFsaWRGaWVsZENhcHRpb24gPSAnaW52YWxpZC1maWVsZC1jYXB0aW9uJyxcbiAgSW52YWxpZEZpZWxkcyA9ICdpbnZhbGlkLWZpZWxkcycsXG4gIEludmFsaWRWYWx1ZXMgPSAnaW52YWxpZC12YWx1ZXMnLFxuICBJc0V4Y2x1ZGVNb2RlID0gJ2lzLWV4Y2x1ZGUnLFxuICBJc0V4dGVuc2lvbkRpYWxvZyA9ICdpcy1leHRlbnNpb24tZGlhbG9nJyxcblxuICBKb2luRGVzY3JpcHRpb24gPSAnam9pbi1kZXNjcmlwdGlvbicsXG5cbiAgTG9naWNhbFRhYmxlSWQgPSAnbG9naWNhbC10YWJsZS1pZCcsXG4gIExvZ2ljYWxUYWJsZUluZm9MaXN0ID0gJ2xvZ2ljYWwtdGFibGUtaW5mby1saXN0JyxcblxuICBNYXhIZWlnaHQgPSAnbWF4LWhlaWdodCcsXG4gIE1heFJvd3MgPSAnbWF4LXJvd3MnLFxuICBNYXhXaWR0aCA9ICdtYXgtd2lkdGgnLFxuICBNaW5IZWlnaHQgPSAnbWluLWhlaWdodCcsXG4gIE1pbldpZHRoID0gJ21pbi13aWR0aCcsXG5cbiAgUGFnZVJvd0NvdW50ID0gJ3BhZ2Utcm93LWNvdW50JyxcbiAgUGFyYW1ldGVyQ2FwdGlvbiA9ICdwYXJlbWV0ZXItY2FwdGlvbicsXG4gIFBhcmFtZXRlckVycm9yID0gJ3BhcmFtZXRlci1lcnJvcicsXG4gIFBhcmFtZXRlckZpZWxkTmFtZSA9ICdwYXJhbWV0ZXItZmllbGQtbmFtZScsXG4gIFBhcmFtZXRlckluZm8gPSAncGFyYW1ldGVyLWluZm8nLFxuICBQYXJhbWV0ZXJJbmZvcyA9ICdwYXJhbWV0ZXItaW5mb3MnLFxuICBQYXJhbWV0ZXJWYWx1ZSA9ICdwYXJhbWV0ZXItdmFsdWUnLFxuICBQZXJpb2RUeXBlID0gJ3BlcmlvZC10eXBlJyxcblxuICBRdWFudGl0YXRpdmVEb21haW4gPSAncXVhbnRpdGF0aXZlLWRtYWluJyxcbiAgUXVhbnRSYW5nZVNlbGVjdGlvbk1vZGVscyA9ICdxdWFudGF0aXZlUmFuZ2VTZWxlY3Rpb25Nb2RlbHMnLFxuXG4gIFJhbmdlTiA9ICdyYW5nZS1uJyxcbiAgUmVwbGF5U3BlZWQgPSAncmVwbGF5LXNwZWVkJyxcblxuICBTZWxlY3RlZERhdGEgPSAnc2VsZWN0ZWQtZGF0YScsXG4gIFNlbGVjdGlvbiA9ICdzZWxlY3Rpb24nLFxuICBTZWxlY3Rpb25MaXN0ID0gJ3NlbGVjdGlvbi1saXN0JyxcbiAgU2VsZWN0aW9uVXBkYXRlVHlwZSA9ICdzZWxlY3Rpb25VcGRhdGVUeXBlJyxcbiAgU2V0dGluZ3NWYWx1ZXMgPSAnc2V0dGluZ3MtdmFsdWVzJyxcbiAgU2hhcmVkRmlsdGVyU2hlZXRzID0gJ3NoYXJlZC1maWx0ZXItc2hlZXRzJyxcbiAgU2hhcmVkRmlsdGVyc0luZm8gPSAnc2hhcmVkLWZpbHRlcnMtaW5mbycsXG4gIFNoZWV0TmFtZSA9ICdzaGVldC1uYW1lJyxcbiAgU2hlZXRQYXRoID0gJ3NoZWV0LXBhdGgnLFxuICBTaG91bGRSZWZyZXNoRFMgPSAnc2hvdWxkLXJlZnJlc2gtZHMnLFxuICBTaG93RGF0YVRhYmxlRm9ybWF0ID0gJ3Nob3ctZGF0YS10YWJsZS1mb3JtYXQnLFxuICBTdGF0ZSA9ICdzdGF0ZScsXG4gIFN0b3J5UG9pbnRJbmRleCA9ICdzdG9yeS1wb2ludC1pbmRleCcsXG4gIFN0b3J5UG9pbnRJbmZvID0gJ3N0b3J5LXBvaW50LWluZm8nLFxuICBTd2l0Y2hUb1NoZWV0TmFtZSA9ICdzd2l0Y2gtdG8tc2hlZXQtbmFtZScsXG5cbiAgVGFyZ2V0UG9pbnQgPSAndGFyZ2V0LXBvaW50JyxcbiAgVGVzdENvbnZlcnNpb25QYXJhbWV0ZXIgPSAndGVzdC1jb252ZXJzaW9uLXBhcmFtZXRlcicsXG4gIFRleHQgPSAnZm9ybWF0dGVkLXRleHQnLFxuXG4gIFVuZGVybHlpbmdEYXRhVGFibGUgPSAndW5kZXJseWluZy1kYXRhLXRhYmxlJyxcbiAgVW5kZXJseWluZ1N1bW1hcnlEYXRhVGFibGUgPSAndW5kZXJseWluZy1zdW1tYXJ5LWRhdGEtdGFibGUnLFxuICBVcmwgPSAndXJsJyxcblxuICBWaWV3RGF0YVRhYmxlQ2FjaGVJZCA9ICd2aWV3LWRhdGEtdGFibGUtY2FjaGUtaWQnLFxuICBWaWV3RGF0YVRhYmxlSWQgPSAndmlldy1kYXRhLXRhYmxlLWlkJyxcbiAgVmlzdWFsSWQgPSAndmlzdWFsLWlkJyxcbiAgVml6QVBJSW5wdXRKc29uID0gJ3ZpemFwaS1pbnB1dC1qc29uJyxcbiAgVml6QVBJU1ZHID0gJ3ZpemFwaS1zdmcnLFxuXG4gIFdvcmtzaGVldE5hbWUgPSAnd29ya3NoZWV0LW5hbWUnLFxuICBXb3Jrc2hlZXRGaWx0ZXJzID0gJ3dvcmtzaGVldC1maWx0ZXJzJyxcblxuICBab25lSWRzVmlzaWJpbGl0eU1hcCA9ICd6b25lLWlkcy12aXNpYmlsaXR5LW1hcCcsXG59XG4iLCIvLyBEZWNsYXJlIHRoaXMga2V5IHR5cGUgYW5kIGV4cG9ydCB0aGUgTm90aWZpY2F0aW9uSWQgdG8gbWFrZSB0aGlzIGJlaGF2ZSBsaWtlIGEgc3RyaW5nIGVudW0uXG4vL1xuLy8gUExFQVNFIEtFRVAgSU4gQUxQSEFCRVRJQ0FMIE9SREVSLiBUaGlzIGhlbHBzIHdpdGggdmlzdWFsbHkgZmluZGluZyBlbnRyaWVzLCBrbm93aW5nIHdoZXJlIHRvIHB1dFxuLy8gbmV3IG9uZXMsIGFuZCBtZXJnZSBjb25mbGljdHMuXG5leHBvcnQgZW51bSBWZXJiSWQge1xuICBBY3RpdmF0ZU5leHRTdG9yeVBvaW50ID0gJ2FjdGl2YXRlLW5leHQtc3RvcnktcG9pbnQnLFxuICBBY3RpdmF0ZVByZXZpb3VzU3RvcnlQb2ludCA9ICdhY3RpdmF0ZS1wcmV2aW91cy1zdG9yeS1wb2ludCcsXG4gIEFjdGl2YXRlU2hlZXQgPSAnYWN0aXZhdGVTaGVldCcsXG4gIEFjdGl2YXRlU3RvcnlQb2ludCA9ICdhY3RpdmF0ZS1zdG9yeS1wb2ludCcsXG4gIEFwcGVuZEV4dGVybmFsTWVudUl0ZW0gPSAnYXBwZW5kLWV4dGVybmFsLW1lbnUtaXRlbScsXG4gIEFwcGx5Q2F0ZWdvcmljYWxGaWx0ZXIgPSAnY2F0ZWdvcmljYWwtZmlsdGVyJyxcbiAgQXBwbHlSYW5nZUZpbHRlciA9ICdyYW5nZS1maWx0ZXInLFxuICBBcHBseVJlbGF0aXZlRGF0ZUZpbHRlciA9ICdhcHBseS1yZWxhdGl2ZS1kYXRlLUZpbHRlcicsXG5cbiAgQmxvY2tFeHRlbnNpb24gPSAnYmxvY2stZXh0ZW5zaW9uJyxcblxuICBDaGFuZ2VQYXJhbWV0ZXJWYWx1ZSA9ICdjaGFuZ2UtcGFyYW1ldGVyLXZhbHVlJyxcbiAgQ2hhbmdlU2hhcmVkRmlsdGVyID0gJ2NoYW5nZS1zaGFyZWQtZmlsdGVyJyxcbiAgQ2xlYXJGaWx0ZXIgPSAnY2xlYXItZmlsdGVyJyxcbiAgQ2xlYXJTZWxlY3RlZE1hcmtzID0gJ2NsZWFyLXNlbGVjdGVkLW1hcmtzJyxcbiAgQ2xvc2VEaWFsb2cgPSAnY2xvc2UtZGlhbG9nJyxcbiAgQ3JlYXRlQW5ub3RhdGlvbiA9ICdjcmVhdGUtYW5ub3RhdGlvbicsXG5cbiAgRGFzaGJvYXJkQ2F0ZWdvcmljYWxGaWx0ZXIgPSAnZGFzaGJvYXJkLWNhdGVnb3JpY2FsLWZpbHRlcicsXG4gIERpc3BsYXlEaWFsb2cgPSAnZGlzcGxheS1kaWFsb2cnLFxuICBEb3dubG9hZFdvcmtib29rID0gJ2Rvd25sb2FkLXdvcmtib29rJyxcblxuICBFeGVjdXRlRXh0ZXJuYWxNZW51SXRlbSA9ICdleGVjdXRlLWV4dGVybmFsLW1lbnUtaXRlbScsXG4gIEV4cG9ydENyb3NzdGFiID0gJ2V4cG9ydC1jcm9zc3RhYicsXG4gIEV4cG9ydERhdGEgPSAnZXhwb3J0LWRhdGEnLFxuICBFeHBvcnRJbWFnZSA9ICdleHBvcnQtaW1hZ2UnLFxuICBFeHBvcnRQZGYgPSAnZXhwb3J0LXBkZicsXG4gIEV4cG9ydFBvd2VycG9pbnQgPSAnZXhwb3J0LXBvd2VycG9pbnQnLFxuXG4gIEZpbmRQYXJhbWV0ZXIgPSAnZmluZC1wYXJhbWV0ZXInLFxuXG4gIEdldEFjdGl2ZVRhYmxlcyA9ICdnZXQtYWN0aXZlLXRhYmxlcycsXG4gIEdldEFsbERhdGFTb3VyY2VzID0gJ2dldC1hbGwtZGF0YS1zb3VyY2VzJyxcbiAgR2V0QW5ub3RhdGlvbnMgPSAnZ2V0LWFubm90YXRpb25zJyxcbiAgR2V0Q2F0ZWdvcmljYWxEb21haW4gPSAnZ2V0LWNhdGVnb3JpY2FsLWRvbWFpbicsXG4gIEdldENvbm5lY3Rpb25EZXNjcmlwdGlvblN1bW1hcmllcyA9ICdnZXQtY29ubmVjdGlvbi1kZXNjcmlwdGlvbi1zdW1tYXJpZXMnLFxuICBHZXRDdXJyZW50U3JjID0gJ2dldC1jdXJyZW50LXNyYycsXG4gIEdldEN1c3RvbVZpZXdzID0gJ2dldC1jdXN0b20tdmlld3MnLFxuICBHZXREYXNoYm9hcmRGaWx0ZXJzID0gJ2dldC1kYXNoYm9hcmQtZmlsdGVycycsXG4gIEdldERhdGFTb3VyY2UgPSAnZ2V0LWRhdGFzb3VyY2UnLFxuICBHZXREYXRhU291cmNlRGF0YSA9ICdnZXQtZGF0YXNvdXJjZS1kYXRhJyxcbiAgR2V0RGF0YVNvdXJjZXMgPSAnZ2V0LWRhdGEtc291cmNlcycsXG4gIEdldERhdGFTdW1tYXJ5RGF0YSA9ICdnZXQtc3VtbWFyeS1kYXRhJyxcbiAgR2V0RGF0YVN1bW1hcnlEYXRhUmVhZGVyID0gJ2dldC1zdW1tYXJ5LWRhdGEtcmVhZGVyJyxcbiAgR2V0RGF0YVRhYmxlUmVhZGVyUGFnZSA9ICdnZXQtZGF0YS10YWJsZS1yZWFkZXItcGFnZScsXG4gIEdldEVtYmVkZGluZ0NsaWVudEluZm8gPSAnZ2V0LWVtYmVkZGluZy1jbGllbnQtaW5mbycsXG4gIEdldEZpZWxkID0gJ2dldC1maWVsZCcsXG4gIEdldEZpZWxkQW5kRGF0YVNvdXJjZSA9ICdnZXQtZmllbGQtYW5kLWRhdGFzb3VyY2UnLFxuICBHZXRGaWx0ZXJzID0gJ2dldC1maWx0ZXJzJyxcbiAgR2V0Rm9udHMgPSAnZ2V0LWZvbnRzJyxcbiAgR2V0SGlnaGxpZ2h0ZWRNYXJrcyA9ICdnZXQtaGlnaGxpZ2h0ZWQtbWFya3MnLFxuICBHZXRKb2luRGVzY3JpcHRpb24gPSAnZ2V0LWpvaW4tZGVzY3JpcHRpb24nLFxuICBHZXRMb2dpY2FsVGFibGVEYXRhID0gJ2dldC1sb2dpY2FsLXRhYmxlLWRhdGEnLFxuICBHZXRMb2dpY2FsVGFibGVEYXRhUmVhZGVyID0gJ2dldC1sb2dpY2FsLXRhYmxlLWRhdGEtcmVhZGVyJyxcbiAgR2V0TG9naWNhbFRhYmxlcyA9ICdnZXQtbG9naWNhbC10YWJsZXMnLFxuICBHZXRQYXJhbWV0ZXJzRm9yU2hlZXQgPSAnZ2V0LXBhcmFtZXRlcnMtZm9yLXNoZWV0JyxcbiAgR2V0UmFuZ2VEb21haW4gPSAnZ2V0LXJhbmdlLWRvbWFpbicsXG4gIEdldFNlbGVjdGVkTWFya3MgPSAnZ2V0LXNlbGVjdGVkLW1hcmtzJyxcbiAgR2V0U2hhcmVkRmlsdGVyID0gJ2dldC1zaGFyZWQtZmlsdGVyJyxcbiAgR2V0VW5kZXJseWluZ0RhdGEgPSAnZ2V0LXVuZGVybHlpbmctZGF0YScsXG4gIEdldFVuZGVybHlpbmdUYWJsZURhdGEgPSAnZ2V0LXVuZGVybHlpbmctdGFibGUtZGF0YScsXG4gIEdldFVuZGVybHlpbmdUYWJsZURhdGFSZWFkZXIgPSAnZ2V0LXVuZGVybHlpbmctdGFibGUtZGF0YS1yZWFkZXInLFxuICBHZXRVbmRlcmx5aW5nVGFibGVzID0gJ2dldC11bmRlcmx5aW5nLXRhYmxlcycsXG5cbiAgSGllcmFyY2hpY2FsRmlsdGVyID0gJ2hpZXJhY2hpY2FsLWZpbHRlcicsXG5cbiAgSW5pdGlhbGl6ZUV4dGVuc2lvbiA9ICdpbml0aWFsaXplLWV4dGVuc2lvbicsXG5cbiAgTW92ZUFuZFJlc2l6ZVpvbmVzID0gJ21vdmUtYW5kLXJlc2l6ZS16b25lcycsXG5cbiAgUmVkbyA9ICdyZWRvJyxcbiAgUmVmcmVzaERhdGFTb3VyY2UgPSAncmVmcmVzaC1kYXRhLXNvdXJjZScsXG4gIFJlbGVhc2VEYXRhVGFibGVSZWFkZXIgPSAncmVsZWFzZS1kYXRhLXRhYmxlLXJlYWRlcicsXG4gIFJlbW92ZUFubm90YXRpb24gPSAncmVtb3ZlLWFubm90YXRpb24nLFxuICBSZW1vdmVDdXN0b21WaWV3ID0gJ3JlbW92ZS1jdXN0b20tdmlldycsXG4gIFJlbW92ZUV4dGVybmFsTWVudUl0ZW0gPSAncmVtb3ZlLWV4dGVybmFsLW1lbnUtaXRlbScsXG4gIFJlbmFtZUV4dGVybmFsTWVudSA9ICdyZW5hbWUtZXh0ZXJuYWwtbWVudScsXG4gIFJlcGxheUFuaW1hdGlvbiA9ICdyZXBsYXktYW5pbWF0aW9uJyxcbiAgUmV2ZXJ0U3RvcnlQb2ludCA9ICdyZXZlcnQtc3RvcnktcG9pbnQnLFxuICBSZXZlcnRXb3JrYm9vayA9ICdyZXZlcnQtd29ya2Jvb2snLFxuXG4gIFNhdmVFeHRlbnNpb25TZXR0aW5ncyA9ICdzYXZlLWV4dGVuc2lvbi1zZXR0aW5ncycsXG4gIFNhdmVXb3JrYm9va0FzQ3VzdG9tVmlldyA9ICdzYXZlLXdvcmtib29rLWFzLWN1c3RvbS12aWV3JyxcbiAgU2VsZWN0QnlWYWx1ZSA9ICdzZWxlY3QtYnktdmFsdWUnLFxuICBTZXRBY3RpdmVDdXN0b21WaWV3QXNEZWZhdWx0ID0gJ3NldC1hY3RpdmUtY3VzdG9tLXZpZXctYXMtZGVmYXVsdCcsXG4gIFNldEF1dG9VcGRhdGUgPSAnc2V0LWF1dG8tdXBkYXRlJyxcbiAgU2V0Q2xpY2tUaHJvdWdoID0gJ3NldC1jbGljay10aHJvdWdoJyxcbiAgU2V0U2hlZXRTaXplID0gJ3NldC1zaGVldC1zaXplJyxcbiAgU2V0Wm9uZVZpc2liaWxpdHkgPSAnc2V0LXpvbmUtdmlzaWJpbGl0eScsXG4gIFNoYXJlID0gJ3NoYXJlJyxcbiAgU2hvd0N1c3RvbVZpZXcgPSAnc2hvdy1jdXN0b20tdmlldycsXG5cbiAgVGVzdENvbnZlcnNpb25WZXJiID0gJ3Rlc3QtY29udmVyc2lvbi12ZXJiJyxcblxuICBVbmRvID0gJ3VuZG8nLFxuICBVcGRhdGVDdXN0b21WaWV3ID0gJ3VwZGF0ZS1jdXN0b20tdmlldycsXG5cbiAgVml6QVBJID0gJ3Zpei1hcGknLFxufVxuIiwiZXhwb3J0IGVudW0gQXNrRGF0YU9wdGlvbk5hbWVzIHtcbiAgdG9rZW4gPSAndG9rZW4nLFxuICBvcmlnaW4gPSAnb3JpZ2luJyxcbiAgc2hvd0VtYmVkID0gJ3Nob3dFbWJlZCcsXG4gIHNob3dQaW4gPSAnc2hvd1BpbicsXG4gIHNob3dTYXZlID0gJ3Nob3dTYXZlJyxcbiAgc2hvd1NoYXJlID0gJ3Nob3dTaGFyZScsXG4gIGRlYnVnID0gJzpqc2RlYnVnJyxcbiAgQXBpSUQgPSAnOmFwaUlEJyxcbiAgQXBpRXh0ZXJuYWxWZXJzaW9uID0gJzphcGlFeHRlcm5hbFZlcnNpb24nLFxuICBBcGlJbnRlcm5hbFZlcnNpb24gPSAnOmFwaUludGVybmFsVmVyc2lvbicsXG4gIEFza0RhdGFXZWJDb21wb25lbnQgPSAnOmFza0RhdGFXZWJDb21wb25lbnQnLFxufVxuIiwiLyoqXG4gKiBUaGVzZSBzdHJpbmdzIHdlcmUgKm1hbnVhbGx5IGNvcGllZCogZnJvbSB0aGUgc2VydmVyLFxuICogd29ya2dyb3VwL3NyYy9zaWxvcy90YWJsZWF1LXNlcnZlci9saWJyYXJpZXMvdGFiLWNvbnRyb2xsZXItdml6cWwvc3JjL2NvbS90YWJsZWF1c29mdHdhcmUvXG4gKiBjb250cm9sbGVyL3ZpenFsL2NvbnN0YW50cy9QYXJhbWV0ZXJLZXlzLmphdmEjTDlcbiAqIHNob3VsZCBiZSBleHBvcnRlZCBpbnN0ZWFkXG4gKiBwYXJhbWV0ZXJzIHRoYXQgdml6cWwgd2lsbCBhY2NlcHQgaW4gYW4gZW1iZWRkaW5nIFVSTFxuICoqL1xuZW51bSBWcWxQYXJhbWV0ZXJOYW1lcyB7XG4gIE9ORSA9ICcxJyxcbiAgQUxFUlRTID0gJzphbGVydHMnLFxuICBBTElBUyA9ICdhbGlhcycsXG4gIEFMTE9XX0RFRkVSUkVEX0JPT1RTVFJBUCA9ICc6YWxsb3dEZWZlcnJlZEJvb3RzdHJhcCcsXG4gIEFMTE9XX0FVVE9HRU5fV09SS1NIRUVUX1BIT05FX0xBWU9VVFMgPSAnYWxsb3dBdXRvZ2VuV29ya3NoZWV0UGhvbmVMYXlvdXRzJyxcbiAgQVBJX0lEID0gJzphcGlJRCcsXG4gIEFQUCA9ICc6YXBwJyxcbiAgQVRUQUNITUVOVCA9ICdhdHRhY2htZW50JyxcbiAgSVNfSVBBRF9BUFAgPSAnYXBwJyxcbiAgQU5JTUFURV9UUkFOU0lUSU9OID0gJzphbmltYXRlX3RyYW5zaXRpb24nLFxuICBBU0NFTkRJTkcgPSAnYXNjZW5kaW5nJyxcbiAgQVVUSEVOVElDQVRJT04gPSAnYXV0aGVudGljYXRpb24nLFxuICBBVFRSSUJVVEVTID0gJ2F0dHJpYnV0ZXMnLFxuICBBVVRIT1JJTkdfU0hFRVQgPSAnOmF1dGhTaGVldCcsXG4gIEFYSVMgPSAnYXhpcycsXG4gIEJPT1RTVFJBUF9XSEVOX05PVElGSUVEID0gJzpib290c3RyYXBXaGVuTm90aWZpZWQnLFxuICBCUk9XU0VSX0JBQ0tfQlVUVE9OX1VORE8gPSAnOmJyb3dzZXJCYWNrQnV0dG9uVW5kbycsXG4gIEJST1dTRVJfUkVOREVSSU5HX09OID0gJ2lzQnJvd3NlclJlbmRlcmluZycsXG4gIEJST1dTRVJfUkVOREVSSU5HX1RIUkVTSE9MRCA9ICdicm93c2VyUmVuZGVyaW5nVGhyZXNob2xkJyxcbiAgQ0hBUlNFVCA9ICdjaGFyc2V0JyxcbiAgQ0xJRU5UX0RJTUVOU0lPTiA9ICdjbGllbnREaW1lbnNpb24nLFxuICBDTElFTlRfSVAgPSAnY2xpZW50X2lwJyxcbiAgQ0xJRU5UX05VTSA9ICdjbGllbnROdW0nLFxuICBDT0xPTl9FTUJFRERFRCA9ICc6ZW1iZWRkZWQnLFxuICBDT0xPTl9NT0JJTEUgPSAnOm1vYmlsZScsXG4gIENPTE9OX0RFRVBfTElOS0lOR19ESVNBQkxFRCA9ICc6ZGVlcExpbmtpbmdEaXNhYmxlZCcsXG4gIENPTE9OX1dBVEVSTUFSSyA9ICc6d2F0ZXJtYXJrJyxcbiAgQ09NTUVOVFMgPSAnOmNvbW1lbnRzJyxcbiAgQ09NTUVOVElOR19FTkFCTEVEID0gJzpjb21tZW50aW5nRW5hYmxlZCcsXG4gIENPTU1FTlRJTkdfTUVOVElPTlNfRU5BQkxFRCA9ICc6Y29tbWVudGluZ01lbnRpb25zJyxcbiAgQ09OTkVDVElPTiA9ICdjb25uZWN0aW9uJyxcbiAgQ1JFQVRFRF9CWV9GRUFUVVJFID0gJ2NyZWF0ZWRCeUZlYXR1cmUnLFxuICBDUllQVEVEX1BBU1NXT1JEID0gJ2NyeXB0ZWQnLFxuICBDU1NERUJVRyA9ICc6Y3NzZGVidWcnLFxuICBDU1YgPSAnY3N2JyxcbiAgQ1VTVE9NX1ZJRVdTID0gJzpjdXN0b21WaWV3cycsXG4gIENWID0gJzpjdicsXG4gIENWX0lEID0gJ2N2SWQnLFxuICBEQVNIQk9BUkRfUE9SVF9TSVpFID0gJ2Rhc2hib2FyZFBvcnRTaXplJyxcbiAgREFUQV9ERVRBSUxTID0gJzpkYXRhRGV0YWlscycsXG4gIERBVEFTT1VSQ0UgPSAnZGF0YXNvdXJjZScsXG4gIERFQlVHID0gJzpkZWJ1ZycsXG4gIERFTEFZID0gJzpkZWxheScsXG4gIERFUFRIID0gJ2RlcHRoJyxcbiAgREVWSUNFX1RZUEUgPSAnOmRldmljZScsXG4gIERFVklDRV9QSVhFTF9SQVRJTyA9ICdkZXZpY2VQaXhlbFJhdGlvJyxcbiAgREVWSUNFX1BSRVZJRVdfTU9ERSA9ICc6ZGV2aWNlcHJldmlld21vZGUnLFxuICBESU1FTlNJT05TID0gJzpkaW1lbnNpb25zJyxcbiAgRElTQUJMRV9TSEFSRURfU0VTU0lPTlMgPSAnOmRpc2FibGVfc2hhcmVkX3Nlc3Npb25zJyxcbiAgRElTQUJMRV9VUkxfQUNUSU9OU19QT1BVUFMgPSAnOmRpc2FibGVVcmxBY3Rpb25zUG9wdXBzJyxcbiAgRElSRUNUSU9OID0gJ2RpcmVjdGlvbicsXG4gIERJU1BMQVlfT1ZFUkxBWSA9ICc6ZGlzcGxheV9vdmVybGF5JyxcbiAgRElTUExBWV9TSEFSRSA9ICc6ZGlzcGxheV9zaGFyZScsXG4gIERJU1BMQVlfU1BJTk5FUiA9ICc6ZGlzcGxheV9zcGlubmVyJyxcbiAgRElTUExBWV9TVEFUSUNfSU1BR0UgPSAnOmRpc3BsYXlfc3RhdGljX2ltYWdlJyxcbiAgRElTUExBWV9UQUJTID0gJ2Rpc3BsYXlfdGFicycsXG4gIERJU1BMQVlfVklFV19DT1VOVCA9ICc6ZGlzcGxheV9jb3VudCcsXG4gIElHTk9SRV9TVElDS1lfU0VTU0lPTiA9ICc6aWdub3JlX3N0aWNreV9zZXNzaW9uJyxcbiAgSU5DUkVNRU5UX1ZJRVdfQ09VTlQgPSAnOmluY3JlbWVudF92aWV3X2NvdW50JyxcbiAgRE9DTU9ERSA9ICdkb2Ntb2RlJyxcbiAgRE9NQUlOID0gJ2RvbWFpbicsXG4gIERPX1dPUksgPSAnZG9fd29yaycsXG4gIERYID0gJ2R4JyxcbiAgRFkgPSAnZHknLFxuICBFRElUX0RBVEFfQUxFUlQgPSAnOmVkaXREYXRhQWxlcnQnLFxuICBFTUJFRCA9ICc6ZW1iZWQnLFxuICBFTUJFRERFRCA9ICdlbWJlZGRlZCcsXG4gIEVOQ1JZUFRFRCA9ICdlbmNyeXB0ZWQnLFxuICBBUElfRVhURVJOQUxfVkVSU0lPTiA9ICc6YXBpRXh0ZXJuYWxWZXJzaW9uJyxcbiAgQVBJX0lOVEVSTkFMX1ZFUlNJT04gPSAnOmFwaUludGVybmFsVmVyc2lvbicsXG4gIEVYQ0xVREUgPSAnZXhjbHVkZScsXG4gIEVYUE9SVF9GT1JNQVQgPSAnOmV4cG9ydF9mb3JtYXQnLFxuICBGSUVMRE5BTUUgPSAnZmllbGRuYW1lJyxcbiAgRklFTERfTkFNRSA9ICdmaWVsZF9uYW1lJyxcbiAgRklFTERfU0VQID0gJ2ZpZWxkX3NlcCcsXG4gIEZJTEUgPSAnZmlsZScsXG4gIEZJTFRFUl9USUxFX1NJWkUgPSAnZmlsdGVyVGlsZVNpemUnLFxuICBGTiA9ICdmbicsXG4gIEZPQ1VTID0gJ2ZvY3VzJyxcbiAgRk9SQ0VfQ0FDSEUgPSAnZm9yY2VfY2FjaGUnLFxuICBGT1JNQVQgPSAnZm9ybWF0JyxcbiAgRk9STUFUX0RBVEFfVkFMVUVfTE9DQUxMWSA9ICdmb3JtYXREYXRhVmFsdWVMb2NhbGx5JyxcbiAgRlJPTV9XRyA9ICc6ZnJvbV93ZycsXG4gIEdSQVBIUUxfREFUQUJBU0VfSUQgPSAnOmdyYXBoUUxEYXRhYmFzZUlkJyxcbiAgR1JBUEhRTF9UQUJMRV9JRCA9ICc6Z3JhcGhRTFRhYmxlSWQnLFxuICBHVUlEID0gJzpndWlkJyxcbiAgSCA9ICdoJyxcbiAgSElEREVOID0gJ2hpZGRlbicsXG4gIEhJREVfQ0xPU0VfQlVUVE9OID0gJzpoaWRlQ2xvc2VCdXR0b24nLFxuICBISURFX0VESVRfQlVUVE9OID0gJzpoaWRlRWRpdEJ1dHRvbicsXG4gIEhJREVfRURJVF9JTl9ERVNLVE9QX0JVVFRPTiA9ICc6aGlkZUVkaXRJbkRlc2t0b3BCdXR0b24nLFxuICBISUdIX0RQSSA9ICc6aGlnaGRwaScsXG4gIElNQUdFX1NJWkVfTElNSVQgPSAnaW1hZ2VTaXplTGltaXQnLFxuICBUUkFOU1BBUkVOVF9MSU5FX01BUktTX0xJTUlUID0gJ3RyYW5zcGFyZW50TGluZU1hcmtMaW1pdCcsXG4gIENMSUVOVF9SRU5ERVJfUElYRUxfTElNSVQgPSAnY2xpZW50UmVuZGVyUGl4ZWxMaW1pdCcsXG4gIElOID0gJ2luJyxcbiAgSU5TVEFOQ0VfSUQgPSAnOmlpZCcsXG4gIElTX0dVRVNUX1JFRElSRUNUX0ZST01fVklaUE9SVEFMID0gJzppc0d1ZXN0UmVkaXJlY3RGcm9tVml6cG9ydGFsJyxcbiAgSVNfTUFSS19BTklNQVRJT05fRU5BQkxFRCA9ICdpc01hcmtBbmltYXRpb25FbmFibGVkJyxcbiAgSVNfVklaUE9SVEFMID0gJzppc1ZpelBvcnRhbCcsXG4gIElOUFVUXyA9ICdpbnB1dF9zdHJpbmcnLFxuICBKU0RFQlVHID0gJzpqc2RlYnVnJyxcbiAgSlNPTiA9ICdqc29uJyxcbiAgSlNPTl9PTkxZID0gJzpqc29uT25seScsXG4gIEtFRVBGSUxFID0gJ2tlZXBmaWxlJyxcbiAgS0VZID0gJ2tleScsXG4gIExBTkdVQUdFID0gJ2xhbmd1YWdlJyxcbiAgTEFOR1VBR0VfUkVRVUVTVEVEID0gJzpsYW5ndWFnZScsXG4gIExJTktUQVJHRVQgPSAnOmxpbmt0YXJnZXQnLFxuICBMT0FEX09SREVSX0lEID0gJzpsb2FkT3JkZXJJRCcsIC8vIHVzZWQgZm9yIFB1YmxpY1xuICBMT0FEX05FV0VTVF9SRVZJU0lPTiA9ICc6bG9hZE5ld2VzdFJldmlzaW9uJyxcbiAgTE9DQUxfUEFUSFMgPSAnOmxvY2FsUGF0aHMnLFxuICBMT0NBTEUgPSAnbG9jYWxlJyxcbiAgTE9DQVRJT05fSUQgPSAnbG9jYXRpb25pZCcsXG4gIExPQ0FUSU9OX1RZUEUgPSAnbG9jYXRpb250eXBlJyxcbiAgV09SS0JPT0tfTE9DQUxFID0gJ3dvcmtib29rTG9jYWxlJyxcbiAgTUFYUk9XUyA9ICdtYXhyb3dzJyxcbiAgTUFYX0FHRSA9ICdtYXhBZ2UnLFxuICBNQVhfUk9XUyA9ICdtYXhSb3dzJyxcbiAgTUVUSE9EID0gJ21ldGhvZCcsXG4gIE1PQklMRSA9ICdtb2JpbGUnLFxuICBNT0RJRklFUiA9ICdtb2RpZmllcicsXG4gIE5BTUUgPSAnbmFtZScsXG4gIE5BVl9UWVBFID0gJ25hdlR5cGUnLFxuICBOQVZfU1JDID0gJ25hdlNyYycsXG4gIE5PQVRUQUNITUVOVCA9ICduby1hdHRhY2htZW50JyxcbiAgTk9fT1ZFUldSSVRFID0gJ25vX292ZXJ3cml0ZScsXG4gIE9QRU5fQVVUSE9SSU5HX0lOX1RPUF9XSU5ET1cgPSAnOm9wZW5BdXRob3JpbmdJblRvcFdpbmRvdycsXG4gIE9QRU5JRF9IRCA9ICc6b3BlbmlkX2hkJyxcbiAgT1BFTklEX0xPR0lOX0hJTlQgPSAnOm9wZW5pZF9sb2dpbl9oaW50JyxcbiAgT0FVVEhSRVFVRVNUID0gJ29hdXRocmVxdWVzdCcsXG4gIE9BVVRIX0NSRURFTlRJQUxfSURTID0gJ29hdXRoX2NyZWRlbnRpYWxfaWRzJyxcbiAgT0ZGTElORV9NT0RFID0gJzpvZmZsaW5lbW9kZScsXG4gIE9SSUdJTiA9ICc6b3JpZ2luJyxcbiAgT1ZFUkxBWSA9ICc6b3ZlcmxheScsXG4gIFAgPSAncCcsXG4gIFBBVEggPSAncGF0aCcsXG4gIFBBTkVfUkVTT0xWRVJfWCA9ICdwYW5lUmVzb2x2ZXJYJyxcbiAgUEFORV9SRVNPTFZFUl9ZID0gJ3BhbmVSZXNvbHZlclknLFxuICBQQVJBTSA9ICdwYXJhbScsXG4gIFBBUkVOVF9JRCA9ICdwYXJlbnRfaWQnLFxuICBQQVNTV09SRCA9ICdwYXNzd29yZCcsXG4gIFBBVFRFUk4gPSAncGF0dGVybicsXG4gIFBJWEVMX1JBVElPID0gJzpwaXhlbHJhdGlvJyxcbiAgUFJFRklYID0gJzpwcmVmaXgnLFxuICBQUkVWSUVXID0gJzpwcmV2aWV3JyxcbiAgUFJJTUFSWV9DT05URU5UX1VSTCA9ICdwcmltYXJ5X2NvbnRlbnRfdXJsJyxcbiAgUFJPSkVDVCA9ICdwcm9qZWN0JyxcbiAgUFJPVE9DT0wgPSAncHJvdG9jb2wnLFxuICBQU0VVRE8gPSAnOnBzZXVkbycsXG4gIFFVRVJZID0gJ3F1ZXJ5JyxcbiAgUiA9ICdyJyxcbiAgUkFOR0VfVFlQRSA9ICdyYW5nZV90eXBlJyxcbiAgUkVDT1JEX1NFUCA9ICdyZWNvcmRfc2VwJyxcbiAgUkVDT1JEX0NMSUVOVF9QRVJGT1JNQU5DRSA9ICc6cmVjb3JkX2NsaWVudF9wZXJmb3JtYW5jZScsXG4gIFJFQ09SRF9QRVJGT1JNQU5DRSA9ICc6cmVjb3JkX3BlcmZvcm1hbmNlJyxcbiAgUkVDT1ZFUl9PTERfU0VTU0lPTl9JRCA9ICc6cmVjb3Zlcl9vbGRfc2Vzc2lvbl9pZCcsXG4gIFJFQ09WRVJfU0VTU0lPTl9TVEFURV9USUNLRVRTID0gJzpyZWNvdmVyX3Nlc3Npb25fc3RhdGVfdGlja2V0cycsXG4gIFJFRlJFU0ggPSAnOnJlZnJlc2gnLFxuICBSRUZSRVNIVU5NT0RJRklFRCA9ICc6cmVmcmVzaHVubW9kaWZpZWQnLFxuICBSRUdJT04gPSAncmVnaW9uJyxcbiAgUkVMT0FEX09OX0NVU1RPTV9WSUVXX1NBVkUgPSAnOnJlbG9hZE9uQ3VzdG9tVmlld1NhdmUnLFxuICBSRU5ERVIgPSAnOnJlbmRlcicsXG4gIFJFTkRFUl9NQVBTX0NMSUVOVF9TSURFID0gJ3JlbmRlck1hcHNDbGllbnRTaWRlJyxcbiAgUkVUUlkgPSAnOnJldHJ5JyxcbiAgUkVVU0UgPSAncmV1c2UnLFxuICBSRVVTRV9GT1JFVkVSID0gJ3JldXNlX2ZvcmV2ZXInLFxuICBSRVZFUlQgPSAnOnJldmVydCcsXG4gIFNBVkVfREJfUEFTU1dPUkRTID0gJ3NhdmVfZGJfcGFzc3dvcmRzJyxcbiAgU0VMRUNUX1ggPSAnc2VsZWN0X3gnLFxuICBTRUxFQ1RfWSA9ICdzZWxlY3RfeScsXG4gIFNFU1NJT05fRkVBVFVSRV9QUkVGSVggPSAnOmZmXycsXG4gIFNFU1NJT05fRkxBR1MgPSAnOnNlc3Npb25fZmVhdHVyZV9mbGFncycsXG4gIFNIQVJFX0JVVFRPTiA9ICdzaGFyZV9idXR0b24nLFxuICBTSEVFVF9JRCA9ICdzaGVldF9pZCcsXG4gIFNIQVJFRCA9ICdzaGFyZWQnLFxuICBTSE9XQUxMID0gJ3Nob3dhbGwnLFxuICBTSE9XX0FQUF9CQU5ORVIgPSAnOnNob3dBcHBCYW5uZXInLFxuICBTSE9XX0FTS19EQVRBID0gJzpzaG93QXNrRGF0YScsXG4gIFNIT1dfUEFSQU1TID0gJ3Nob3dQYXJhbXMnLFxuICBTSE9XX1NIQVJFX09QVElPTlMgPSAnOnNob3dTaGFyZU9wdGlvbnMnLFxuICBTSVpFID0gJzpzaXplJyxcbiAgU09VUkNFID0gJ3NvdXJjZScsXG4gIFNUQVRFID0gJ3N0YXRlJyxcbiAgU1RJQ0tZX1NFU1NJT05fS0VZID0gJ3N0aWNreVNlc3Npb25LZXknLFxuICBTVUJTQ1JJUFRJT05TID0gJzpzdWJzY3JpcHRpb25zJyxcbiAgU1VNTUFSWSA9ICdzdW1tYXJ5JyxcbiAgU1VQUFJFU1NfREVGQVVMVF9FRElUX0JFSEFWSU9SID0gJzpzdXBwcmVzc0RlZmF1bHRFZGl0QmVoYXZpb3InLFxuICBTWU5DX1NFU1NJT04gPSAnOnN5bmNfc2Vzc2lvbicsXG4gIFNZTkNfU0VTU0lPTl9TVEFURSA9ICdzeW5jX3Nlc3Npb25fc3RhdGUnLFxuICBUQUJTID0gJzp0YWJzJyxcbiAgVEFSR0VUID0gJ3RhcmdldCcsXG4gIFRBUkdFVF9TSVRFID0gJ3RhcmdldF9zaXRlJyxcbiAgVE9PTEJBUiA9ICc6dG9vbGJhcicsXG4gIFRPT0xUSVAgPSAnOnRvb2x0aXAnLFxuICBUUyA9ICd0cycsXG4gIFVOREVSTFlJTkdfVEFCTEVfSUQgPSAndW5kZXJseWluZ190YWJsZV9pZCcsXG4gIFVOREVSTFlJTkdfVEFCTEVfQ0FQVElPTiA9ICd1bmRlcmx5aW5nX3RhYmxlX2NhcHRpb24nLFxuICBVUERBVEVfVFlQRSA9ICd1cGRhdGVfdHlwZScsXG4gIFVTRV9HVUVTVCA9ICc6dXNlR3Vlc3QnLFxuICBVU0VfSU5MSU5FX0lNQUdFUyA9ICd1c2VfaW5saW5lX2ltYWdlcycsXG4gIFVTRVJBR0VOVCA9ICd1c2VyYWdlbnQnLFxuICBVU0VSTkFNRSA9ICd1c2VybmFtZScsXG4gIFZBTFVFID0gJ3ZhbHVlJyxcbiAgVkVSQk9TRV9NT0RFID0gJ3ZlcmJvc2VNb2RlJyxcbiAgVklFV19JRCA9ICd2aWV3c19pZCcsXG4gIFZJWl9TTkFQU0hPVF9JRCA9ICd2aXpfc25hcHNob3RfaWQnLFxuICBWVyA9ICc6dncnLFxuICBXID0gJ3cnLFxuICBXT1JLU0hFRVRfUE9SVF9TSVpFID0gJ3dvcmtzaGVldFBvcnRTaXplJyxcbiAgV0FURVJNQVJLID0gJ3dhdGVybWFyaycsXG4gIFdBVEVSTUFSS19NQVJHSU4gPSAnOndhdGVybWFya19tYXJnaW4nLFxuICBXQiA9ICc6d2InLFxuICBXSElDSCA9ICd3aGljaCcsXG4gIFggPSAneCcsXG4gIFkgPSAneScsXG4gIFpJRCA9ICd6aWQnLFxuICBaT05FX0lEID0gJ3pvbmVfaWQnLFxuICBLRVlDSEFJTl9WRVJTSU9OID0gJ2tleWNoYWluX3ZlcnNpb24nLFxuICBEQVRBU09VUkNFX0lEID0gJ2RhdGFzb3VyY2VfaWQnLFxuICBEQVRBU09VUkNFX05BTUUgPSAnZGF0YXNvdXJjZV9uYW1lJyxcbiAgTEVOU19JRCA9ICdsZW5zX2lkJyxcbiAgV0lEVEggPSAnd2lkdGgnLFxuICBIRUlHSFQgPSAnaGVpZ2h0JyxcblxuICAvLyBEZWZhdWx0IExheW91dCBwYXJhbXNcbiAgTEFZT1VUX1ZJRVdTID0gJ3ZpZXdzJyxcbiAgTEFZT1VUX01FTlVTID0gJ21lbnVzJyxcbiAgTEFZT1VUX0dFT01FVFJZID0gJ2dlb21ldHJ5JyxcbiAgTEFZT1VUX1BBR0VTID0gJ3BhZ2VzJyxcbiAgTEFZT1VUX0NBQ0hFVVJMID0gJ2NhY2hldXJsJyxcbiAgTEFZT1VUX1NIRUVUID0gJ3NoZWV0JyxcbiAgTEFZT1VUX0RFUFRIID0gJ2RlcHRoJyxcbn1cblxuLyoqXG4gKiBwYXJhbWV0ZXJzIHRoYXQgYXJlIG9ubHkgcmVsZXZhbnQgd2hlbiB3b3JraW5nIHdpdGggVGFibGVhdSBQdWJsaWNcbiAqIG1heWJlIG5vdCByZWFsbHkgbmVjZXNzcnkgdG8gc3BsaXQgdGhlbSBvdXRcbiAqL1xuZW51bSBQdWJsaWNQYXJhbWV0ZXJOYW1lcyB7XG4gIFNIT1dfVklaX0hPTUUgPSAnOnNob3dWaXpIb21lJyxcbiAgLy8gZGlzcGxheSB2aWV3IGNvdW50XG59XG5cbi8qKlxuICogTWFwIHRoZSBwYXJhbWV0ZXIgbmFtZXMgYXMgdXNlZCBpbiB0aGUgdXJsIHRvIHdoYXQgd2UgY2FsbCB0aGVtIHB1YmxpY2x5IGluIHRoZSBlbWJlZGRpbmcgbGlicmFyeS5cbiAqIFRoZSBvbmx5IHBhcmFtZXRlcnMgbGlzdGVkIGhlcmUgc2hvdWxkIGJlIHRoZSBvbmVzIHRoYXQgZ2V0IHNlbnQgdG8gdml6cWxcbiAqICAtIHRoaXMgc2hvdWxkIG1hdGNoIHRoZSBpbnRlcmZhY2UgYXQgZXh0ZXJuYWwtY29udHJhY3Q6Vml6SW50ZXJmYWNlczpWaXpTZXR0aW5nc1xuICovXG5leHBvcnQgZW51bSBWaXpPcHRpb25OYW1lcyB7XG4gIC8vIHB1YmxpY05hbWUgPSBpbnRlcm5hbFN0cmluZ1ZhbHVlXG4gIFNpemUgPSBWcWxQYXJhbWV0ZXJOYW1lcy5TSVpFLFxuICBFbWJlZCA9IFZxbFBhcmFtZXRlck5hbWVzLkVNQkVELFxuICBBcGlJbnRlcm5hbFZlcnNpb24gPSBWcWxQYXJhbWV0ZXJOYW1lcy5BUElfSU5URVJOQUxfVkVSU0lPTixcbiAgQXBpRXh0ZXJuYWxWZXJzaW9uID0gVnFsUGFyYW1ldGVyTmFtZXMuQVBJX0VYVEVSTkFMX1ZFUlNJT04sXG4gIFNob3dWaXpIb21lID0gUHVibGljUGFyYW1ldGVyTmFtZXMuU0hPV19WSVpfSE9NRSxcbiAgSnNkZWJ1ZyA9IFZxbFBhcmFtZXRlck5hbWVzLkpTREVCVUcsXG4gIEJvb3RzdHJhcFdoZW5Ob3RpZmllZCA9IFZxbFBhcmFtZXRlck5hbWVzLkJPT1RTVFJBUF9XSEVOX05PVElGSUVELFxuICBOYXZUeXBlID0gVnFsUGFyYW1ldGVyTmFtZXMuTkFWX1RZUEUsXG4gIE5hdlNyYyA9IFZxbFBhcmFtZXRlck5hbWVzLk5BVl9TUkMsXG4gIGRlYnVnID0gVnFsUGFyYW1ldGVyTmFtZXMuSlNERUJVRyxcbiAgQXBpSUQgPSBWcWxQYXJhbWV0ZXJOYW1lcy5BUElfSUQsXG5cbiAgZGlzYWJsZVVybEFjdGlvbnNQb3B1cHMgPSBWcWxQYXJhbWV0ZXJOYW1lcy5ESVNBQkxFX1VSTF9BQ1RJT05TX1BPUFVQUyxcbiAgaGlkZVRhYnMgPSBWcWxQYXJhbWV0ZXJOYW1lcy5UQUJTLFxuICB0b29sYmFyID0gVnFsUGFyYW1ldGVyTmFtZXMuVE9PTEJBUixcbiAgZGV2aWNlID0gVnFsUGFyYW1ldGVyTmFtZXMuREVWSUNFX1RZUEUsXG4gIGluc3RhbmNlSWRUb0Nsb25lID0gVnFsUGFyYW1ldGVyTmFtZXMuSU5TVEFOQ0VfSUQsXG4gIHRvdWNoT3B0aW1pemUgPSBWcWxQYXJhbWV0ZXJOYW1lcy5NT0JJTEUsXG4gIGhpZGVFZGl0QnV0dG9uID0gVnFsUGFyYW1ldGVyTmFtZXMuSElERV9FRElUX0JVVFRPTixcbiAgaGlkZUVkaXRJbkRlc2t0b3BCdXR0b24gPSBWcWxQYXJhbWV0ZXJOYW1lcy5ISURFX0VESVRfSU5fREVTS1RPUF9CVVRUT04sXG4gIHN1cHByZXNzRGVmYXVsdEVkaXRCZWhhdmlvciA9IFZxbFBhcmFtZXRlck5hbWVzLlNVUFBSRVNTX0RFRkFVTFRfRURJVF9CRUhBVklPUixcbiAgaGlkZUNsb3NlQnV0dG9uID0gVnFsUGFyYW1ldGVyTmFtZXMuSElERV9DTE9TRV9CVVRUT04sXG59XG4iLCJpbXBvcnQgKiBhcyBndWlkIGZyb20gJ2d1aWQnO1xuaW1wb3J0IHsgRXhlY3V0ZVBhcmFtZXRlcnMsIElOVEVSTkFMX0NPTlRSQUNUX1ZFUlNJT04sIE1vZGVsLCBOb3RpZmljYXRpb25JZCwgVmVyYklkLCBWZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi4vSnNBcGlJbnRlcm5hbENvbnRyYWN0JztcbmltcG9ydCB7IEluaXRpYWxpemF0aW9uT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZS9Jbml0aWFsaXphdGlvbk9wdGlvbnMnO1xuaW1wb3J0IHsgQ3Jvc3NGcmFtZVByZXBhcmVkTWVzc2FnZSB9IGZyb20gJy4vQ3Jvc3NGcmFtZVByZXBhcmVkTWVzc2FnZSc7XG5pbXBvcnQge1xuICBpc0NvbW1hbmRNZXNzYWdlLFxuICBpc0NvbW1hbmRSZXNwb25zZU1lc3NhZ2UsXG4gIGlzSGFuZHNoYWtlTWVzc2FnZSxcbiAgaXNJbml0TWVzc2FnZSxcbiAgaXNNZXNzYWdlLFxuICBpc05vdGlmaWNhdGlvbk1lc3NhZ2UsXG59IGZyb20gJy4vTWVzc2FnZVR5cGVDaGVja3MnO1xuaW1wb3J0IHtcbiAgQ29tbWFuZE1lc3NhZ2VIYW5kbGVyLFxuICBDb21tYW5kUmVzcG9uc2VNZXNzYWdlSGFuZGxlcixcbiAgSGFuZHNoYWtlTWVzc2FnZUhhbmRsZXIsXG4gIEluaXRpYWxpemVNZXNzYWdlSGFuZGxlcixcbiAgTm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIsXG59IGZyb20gJy4vaW50ZXJmYWNlL01lc3NhZ2VMaXN0ZW5lcic7XG5pbXBvcnQge1xuICBDb21tYW5kTWVzc2FnZSxcbiAgQ29tbWFuZFJlc3BvbnNlTWVzc2FnZSxcbiAgSGFuZHNoYWtlTWVzc2FnZSxcbiAgSW5pdGlhbGl6ZU1lc3NhZ2UsXG4gIE1lc3NhZ2UsXG4gIE1lc3NhZ2VUeXBlLFxuICBOb3RpZmljYXRpb25NZXNzYWdlLFxufSBmcm9tICcuL2ludGVyZmFjZS9NZXNzYWdlVHlwZXMnO1xuaW1wb3J0IHsgTWVzc2VuZ2VyIH0gZnJvbSAnLi9pbnRlcmZhY2UvTWVzc2VuZ2VyJztcbmltcG9ydCB7IFByZXBhcmVkTWVzc2FnZSB9IGZyb20gJy4vaW50ZXJmYWNlL1ByZXBhcmVkTWVzc2FnZSc7XG5cbi8qKlxuICogVGhlIENyb3NzRnJhbWVNZXNzZW5nZXIgaXMgdGhlIHByaW1hcnkgZXhwb3J0IGZyb20gdGhlIGFwaS1tZXNzYWdpbmcgbW9kdWxlLiBBbiBpbnN0YW5jZSBvZlxuICogdGhpcyBjbGFzcyBjYW4gYmUgaW5zdGFudGlhdGVkIG9uIGJvdGggc2lkZXMgb2YgYSBmcmFtZSBib3VuZGFyeSB0byBmYWNpbGl0YXRlIGNvbW11bmljYXRpb25cbiAqIGluIGJvdGggZGlyZWN0aW9ucyBiZXR3ZWVuIHRoZSBmcmFtZXMuIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBib3RoIHRoZSBkaXNwYXRjaGVyIGFuZCB0aGUgbGlzdGVuZXJcbiAqIHBvcnRpb25zLCBidXQgZG9lc24ndCByZXF1aXJlIGNhbGxlcnMgdG8gY2FyZSBhYm91dCBib3RoLlxuICovXG5leHBvcnQgY2xhc3MgQ3Jvc3NGcmFtZU1lc3NlbmdlciBpbXBsZW1lbnRzIE1lc3NlbmdlciB7XG4gIHByaXZhdGUgdW5yZWdpc3RlckZ1bmN0aW9uPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBpbml0aWFsaXplTWVzc2FnZUhhbmRsZXI/OiBJbml0aWFsaXplTWVzc2FnZUhhbmRsZXI7XG4gIHByaXZhdGUgY29tbWFuZFJlc3BvbnNlTWVzc2FnZUhhbmRsZXI/OiBDb21tYW5kUmVzcG9uc2VNZXNzYWdlSGFuZGxlcjtcbiAgcHJpdmF0ZSBjb21tYW5kTWVzc2FnZUhhbmRsZXI/OiBDb21tYW5kTWVzc2FnZUhhbmRsZXI7XG4gIHByaXZhdGUgbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXI/OiBOb3RpZmljYXRpb25NZXNzYWdlSGFuZGxlcjtcbiAgcHJpdmF0ZSBoYW5kc2hha2VNZXNzYWdlSGFuZGxlcj86IEhhbmRzaGFrZU1lc3NhZ2VIYW5kbGVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIENyb3NzRnJhbWVNZXNzZW5nZXIuIElmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGUgQ3Jvc3NGcmFtZU1lc3NlbmdlciBhcyBhIE1lc3NhZ2VMaXN0ZW5lcixcbiAgICogYmUgc3VyZSB0byBjYWxsIFN0YXJ0TGlzdGVuaW5nIGFuZCByZWdpc3RlciBtZXNzYWdlIGhhbmRsZXJzLlxuICAgKiBAcGFyYW0gdGhpc1dpbmRvdyBUaGUgd2luZG93IG9iamVjdCB3aGljaCB0aGUgQ3Jvc3NGcmFtZU1lc3NlbmdlciBsaXZlcy4gQW4gb25NZXNzYWdlIGxpc3RlbmVyIHdpbGwgYmUgYWRkZWQgaGVyZS5cbiAgICogQHBhcmFtIFtvdGhlcldpbmRvd10gT3B0aW9uYWwgb3RoZXJXaW5kb3cgd2hpY2ggbWVzc2FnZXMgd2lsbCBiZSBwb3N0ZWQgdG8uXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIGRlZmluZWQsIGluY29taW5nIG1lc3NhZ2VzIG11c3Qgb3JpZ2luYXRlIGZyb20gb3RoZXJXaW5kb3cgdG8gYmUgcGFzc2VkIG9uXG4gICAqIEBwYXJhbSBbb3RoZXJXaW5kb3dPcmlnaW5dIFRoZSB0YXJnZXQgb3JpZ2luIHdoaWNoIG90aGVyV2luZG93IG11c3QgaGF2ZSBpbiBvcmRlciB0byByZWNlaXZlIGRpc3BhdGNoZWQgbWVzc2FnZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFsdWUgd2lsbCBiZSBzZW50IGFzIHRoZSB0YXJnZXRPcmlnaW4gb2YgYSBwb3N0TWVzc2FnZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9wb3N0TWVzc2FnZSlcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHRoaXNXaW5kb3c6IFdpbmRvdywgcHJpdmF0ZSBvdGhlcldpbmRvdz86IFdpbmRvdywgcHJpdmF0ZSBvdGhlcldpbmRvd09yaWdpbj86IHN0cmluZykge1xuICAgIC8vIE1ha2Ugc3VyZSB0byBjYWxsIFN0YXJ0TGlzdGVuaW5nXG4gIH1cblxuICAvLy8vLyBNZXNzYWdlTGlzdGVuZXIgSW1wbGVtZW50YXRpb25cblxuICBwdWJsaWMgc3RhcnRMaXN0ZW5pbmcoKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgYWxyZWFkeSBhcmUgbGlzdGVuaW5nLCBpZiBub3QsIGhvb2sgdXAgYSBtZXNzYWdlIGxpc3RlbmVyXG4gICAgaWYgKCF0aGlzLnVucmVnaXN0ZXJGdW5jdGlvbikge1xuICAgICAgY29uc3QgYm91bmRIYW5kbGVyID0gdGhpcy5vbk1lc3NhZ2VSZWNlaXZlZC5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy50aGlzV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBib3VuZEhhbmRsZXIsIHRydWUpO1xuICAgICAgdGhpcy51bnJlZ2lzdGVyRnVuY3Rpb24gPSAoKSA9PiB0aGlzLnRoaXNXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGJvdW5kSGFuZGxlciwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0b3BMaXN0ZW5pbmcoKTogdm9pZCB7XG4gICAgLy8gU3RvcCBsaXN0ZW5pbmcgaWYgd2UgaGF2ZSBzdGFydGVkIGxpc3RlbmluZ1xuICAgIGlmICh0aGlzLnVucmVnaXN0ZXJGdW5jdGlvbikge1xuICAgICAgdGhpcy51bnJlZ2lzdGVyRnVuY3Rpb24oKTtcbiAgICAgIHRoaXMudW5yZWdpc3RlckZ1bmN0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRJbml0aWFsaXplTWVzc2FnZUhhbmRsZXIoaGFuZGxlcj86IEluaXRpYWxpemVNZXNzYWdlSGFuZGxlcik6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZU1lc3NhZ2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kUmVzcG9uc2VNZXNzYWdlSGFuZGxlcihoYW5kbGVyPzogQ29tbWFuZFJlc3BvbnNlTWVzc2FnZUhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1hbmRSZXNwb25zZU1lc3NhZ2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kTWVzc2FnZUhhbmRsZXIoaGFuZGxlcj86IENvbW1hbmRNZXNzYWdlSGFuZGxlcik6IHZvaWQge1xuICAgIHRoaXMuY29tbWFuZE1lc3NhZ2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXROb3RpZmljYXRpb25NZXNzYWdlSGFuZGxlcihoYW5kbGVyPzogTm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIYW5kc2hha2VNZXNzYWdlSGFuZGxlcihoYW5kbGVyPzogSGFuZHNoYWtlTWVzc2FnZUhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRzaGFrZU1lc3NhZ2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIC8vLy8vIE1lc3NhZ2VEaXNwYXRjaGVyIEltcGxlbWVudGF0aW9uXG5cbiAgLyoqXG4gICAqIEBwYXJhbSBhcGlWZXJzaW9uIGFwaS1pbnRlcm5hbC1jb250cmFjdC1qcyB2ZXJzaW9uIChleHBvcnRlZCBpbiBKc0FwaUludGVybmFsQ29ubnRyYWN0KVxuICAgKiBAcGFyYW0gY3Jvc3NGcmFtZVZlcnNpb24gY3Jvc3NmcmFtZSBtZXNzYWdpbmcgdmVyc2lvbiAoZXhwb3J0ZWQgaW4gSnNBcGlJbnRlcm5hbENvbm50cmFjdClcbiAgICogQHBhcmFtIG9wdGlvbnMgYWRkaXRpb25hbCBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCBhdCBpbml0aWFsaXphdGlvbiAoaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZlcnNpb24gb2ZcbiAgICogICAgICAgICAgICAgICAgZXh0ZXJuYWwgYmVpbmcgdXNlZCBmb3IgZXhhbXBsZSlcbiAgICovXG4gIHB1YmxpYyBwcmVwYXJlSW5pdGlhbGl6YXRpb25NZXNzYWdlKFxuICAgIGFwaVZlcnNpb246IFZlcnNpb25OdW1iZXIsXG4gICAgY3Jvc3NGcmFtZVZlcnNpb246IFZlcnNpb25OdW1iZXIsXG4gICAgb3B0aW9ucz86IEluaXRpYWxpemF0aW9uT3B0aW9ucyxcbiAgKTogUHJlcGFyZWRNZXNzYWdlIHtcbiAgICBjb25zdCBtZXNzYWdlOiBJbml0aWFsaXplTWVzc2FnZSA9IHtcbiAgICAgIG1zZ0d1aWQ6IGd1aWQucmF3KCksXG4gICAgICBtc2dUeXBlOiBNZXNzYWdlVHlwZS5Jbml0aWFsaXplLFxuICAgICAgY3Jvc3NGcmFtZVZlcnNpb246IGNyb3NzRnJhbWVWZXJzaW9uLFxuICAgICAgYXBpVmVyc2lvbjogYXBpVmVyc2lvbixcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnByZXBhcmVNZXNzYWdlKG1lc3NhZ2UpO1xuICB9XG5cbiAgcHVibGljIHByZXBhcmVDb21tYW5kTWVzc2FnZSh2ZXJiSWQ6IFZlcmJJZCwgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMpOiBQcmVwYXJlZE1lc3NhZ2Uge1xuICAgIGNvbnN0IG1lc3NhZ2U6IENvbW1hbmRNZXNzYWdlID0ge1xuICAgICAgbXNnR3VpZDogZ3VpZC5yYXcoKSxcbiAgICAgIG1zZ1R5cGU6IE1lc3NhZ2VUeXBlLkNvbW1hbmQsXG4gICAgICB2ZXJiSWQ6IHZlcmJJZCxcbiAgICAgIHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnByZXBhcmVNZXNzYWdlKG1lc3NhZ2UpO1xuICB9XG5cbiAgcHVibGljIHByZXBhcmVDb21tYW5kUmVzcG9uc2VNZXNzYWdlKGNvbW1hbmRHdWlkOiBzdHJpbmcsIGRhdGE6IE1vZGVsIHwgdW5kZWZpbmVkLCBlcnJvcjogTW9kZWwgfCB1bmRlZmluZWQpOiBQcmVwYXJlZE1lc3NhZ2Uge1xuICAgIGNvbnN0IG1lc3NhZ2U6IENvbW1hbmRSZXNwb25zZU1lc3NhZ2UgPSB7XG4gICAgICBtc2dHdWlkOiBndWlkLnJhdygpLFxuICAgICAgbXNnVHlwZTogTWVzc2FnZVR5cGUuQ29tbWFuZFJlc3BvbnNlLFxuICAgICAgY29tbWFuZEd1aWQ6IGNvbW1hbmRHdWlkLFxuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9O1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAvLyBzdHJpbmdpZnkgZXJyb3Igb2JqZWN0IHRvIHJlbW92ZSB1bnNlcmlhbGl6YWJsZSBmaWVsZHMgbGlrZSBmdW5jdGlvbnMgYW5kIHByZXZlbnQgc2VyaWFsaXphdGlvbiBlcnJvcnNcbiAgICAgIG1lc3NhZ2UuZXJyb3IgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVycm9yKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZU1lc3NhZ2UobWVzc2FnZSk7XG4gIH1cblxuICBwdWJsaWMgcHJlcGFyZU5vdGlmaWNhdGlvbk1lc3NhZ2Uobm90aWZpY2F0aW9uSWQ6IE5vdGlmaWNhdGlvbklkLCBkYXRhOiBNb2RlbCk6IFByZXBhcmVkTWVzc2FnZSB7XG4gICAgY29uc3QgbWVzc2FnZTogTm90aWZpY2F0aW9uTWVzc2FnZSA9IHtcbiAgICAgIG1zZ0d1aWQ6IGd1aWQucmF3KCksXG4gICAgICBtc2dUeXBlOiBNZXNzYWdlVHlwZS5Ob3RpZmljYXRpb24sXG4gICAgICBub3RpZmljYXRpb25JZDogbm90aWZpY2F0aW9uSWQsXG4gICAgICBkYXRhOiBkYXRhLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmVwYXJlQWNrTWVzc2FnZSgpOiBQcmVwYXJlZE1lc3NhZ2Uge1xuICAgIGNvbnN0IG1lc3NhZ2U6IEhhbmRzaGFrZU1lc3NhZ2UgPSB7XG4gICAgICBtc2dHdWlkOiBndWlkLnJhdygpLFxuICAgICAgbXNnVHlwZTogTWVzc2FnZVR5cGUuQWNrLFxuICAgICAgcGxhdGZvcm1WZXJzaW9uOiBJTlRFUk5BTF9DT05UUkFDVF9WRVJTSU9OLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhIHBlbmRpbmcgbWVzc2FnZSBmb3Igc2VuZGluZyBhbmQgcmV0dXJucyB0aGUgcHJlcGFyZWQgbWVzc2FnZVxuICAgKlxuICAgKiBAcGFyYW0gbXNnIFRoZSBtZXNzYWdlIHRvIGJlIHNlbnQgdG8gdGhpcy5vdGhlcldpbmRvd1xuICAgKiBAcmV0dXJucyBUaGUgcHJlcGFyZWQgbWVzc2FnZVxuICAgKi9cbiAgcHJpdmF0ZSBwcmVwYXJlTWVzc2FnZShtc2c6IE1lc3NhZ2UpOiBQcmVwYXJlZE1lc3NhZ2Uge1xuICAgIGlmICghdGhpcy5vdGhlcldpbmRvdyB8fCAhdGhpcy5vdGhlcldpbmRvd09yaWdpbikge1xuICAgICAgdGhyb3cgJ090aGVyIHdpbmRvdyBub3QgaW5pdGlhbGl6ZWQsIGNhbm5vdCBkaXNwYXRjaCBtZXNzYWdlcyc7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlcGFyZWRNZXNzYWdlID0gbmV3IENyb3NzRnJhbWVQcmVwYXJlZE1lc3NhZ2UobXNnLCB0aGlzLm90aGVyV2luZG93LCB0aGlzLm90aGVyV2luZG93T3JpZ2luKTtcbiAgICByZXR1cm4gcHJlcGFyZWRNZXNzYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZC4gRG9lcyBzb21lIHZhbGlkYXRpb24gb2YgdGhlIG1lc3NhZ2UsIGFuZCB0aGVuXG4gICAqIGNhbGxzIGFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UgaGFuZGxlciBpZiBvbmUgaXMgZGVmaW5lZFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGluY29taW5nIE1lc3NhZ2VFdmVudFxuICAgKi9cbiAgcHJpdmF0ZSBvbk1lc3NhZ2VSZWNlaXZlZChldmVudDogTWVzc2FnZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhbiBvdGhlcldpbmRvdyBkZWZpbmVkLCBtYWtlIHN1cmUgdGhlIG1lc3NhZ2UgaXMgY29taW5nIGZyb20gdGhlcmVcbiAgICBpZiAodGhpcy5vdGhlcldpbmRvdyAmJiBldmVudC5zb3VyY2UgIT09IHRoaXMub3RoZXJXaW5kb3cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEbyBzb21lIHZhbGlkYXRpb24gb24gZXZlbnQuZGF0YSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIHJlY2VpdmVkIGEgcmVhbCBtZXNzYWdlXG4gICAgaWYgKCFldmVudC5kYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGV2ZW50LmRhdGE7XG4gICAgaWYgKCFpc01lc3NhZ2UobWVzc2FnZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayB0aGUgZGVjbGFyZWQgbWVzc2FnZSB0eXBlLCB2YWxpZGF0ZSB0aGUgbWVzc2FnZSwgYW5kIGNhbGwgYW4gYXBwcm9wcmlhdGUgaGFuZGVyIGlmIG9uZSBleGlzdHNcbiAgICBzd2l0Y2ggKG1lc3NhZ2UubXNnVHlwZSkge1xuICAgICAgY2FzZSBNZXNzYWdlVHlwZS5Jbml0aWFsaXplOiB7XG4gICAgICAgIGlmICghaXNJbml0TWVzc2FnZShtZXNzYWdlKSB8fCAhdGhpcy5pbml0aWFsaXplTWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluaXRpYWxpemVNZXNzYWdlSGFuZGxlcihtZXNzYWdlLCBldmVudC5zb3VyY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgTWVzc2FnZVR5cGUuQ29tbWFuZFJlc3BvbnNlOiB7XG4gICAgICAgIGlmICghaXNDb21tYW5kUmVzcG9uc2VNZXNzYWdlKG1lc3NhZ2UpIHx8ICF0aGlzLmNvbW1hbmRSZXNwb25zZU1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21tYW5kUmVzcG9uc2VNZXNzYWdlSGFuZGxlcihtZXNzYWdlLCBldmVudC5zb3VyY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgTWVzc2FnZVR5cGUuQ29tbWFuZDoge1xuICAgICAgICBpZiAoIWlzQ29tbWFuZE1lc3NhZ2UobWVzc2FnZSkgfHwgIXRoaXMuY29tbWFuZE1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21tYW5kTWVzc2FnZUhhbmRsZXIobWVzc2FnZSwgZXZlbnQuc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIE1lc3NhZ2VUeXBlLk5vdGlmaWNhdGlvbjoge1xuICAgICAgICBpZiAoIWlzTm90aWZpY2F0aW9uTWVzc2FnZShtZXNzYWdlKSB8fCAhdGhpcy5ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIobWVzc2FnZSwgZXZlbnQuc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIE1lc3NhZ2VUeXBlLkhhbmRzaGFrZToge1xuICAgICAgICBpZiAoIWlzSGFuZHNoYWtlTWVzc2FnZShtZXNzYWdlKSB8fCAhdGhpcy5oYW5kc2hha2VNZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZHNoYWtlTWVzc2FnZUhhbmRsZXIobWVzc2FnZSwgZXZlbnQuc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gSnVzdCBpZ25vcmUgdGhpcyBzaW5jZSB3ZSBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhlIG1lc3NhZ2UgdHlwZVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRPdGhlcldpbmRvdyhvdGhlcldpbmRvdzogV2luZG93KTogdm9pZCB7XG4gICAgdGhpcy5vdGhlcldpbmRvdyA9IG90aGVyV2luZG93O1xuICB9XG5cbiAgcHVibGljIHNldE90aGVyV2luZG93T3JpZ2luKG9yaWdpbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5vdGhlcldpbmRvd09yaWdpbiA9IG9yaWdpbjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vaW50ZXJmYWNlL01lc3NhZ2VUeXBlcyc7XG5pbXBvcnQgeyBQcmVwYXJlZE1lc3NhZ2UgfSBmcm9tICcuL2ludGVyZmFjZS9QcmVwYXJlZE1lc3NhZ2UnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBQcmVwYXJlZE1lc3NhZ2UgaW50ZXJmYWNlIHVzZWQgdG8gcG9zdCBtZXNzYWdlcyBiZXR3ZWVuXG4gKiB0d28gZnJhbWVzIHVzaW5nIHdpbmRvdy5wb3N0TWVzc2FnZVxuICovXG5leHBvcnQgY2xhc3MgQ3Jvc3NGcmFtZVByZXBhcmVkTWVzc2FnZSBpbXBsZW1lbnRzIFByZXBhcmVkTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIENyb3NzRnJhbWVQcmVwYXJlZE1lc3NhZ2UuXG4gICAqIEBwYXJhbSBfbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBiZSBzZW50XG4gICAqIEBwYXJhbSBfdGFyZ2V0IFRoZSB0YXJnZXQgd2luZG93IHdoZXJlIHRoZSBtZXNzYWdlIHdpbGwgYmUgc2VudFxuICAgKiBAcGFyYW0gX29yaWdpbiBUaGUgdGFyZ2V0T3JpZ2luIHdoZXJlIHRoaXMgbWVzc2FnZSBjYW4gYmUgcmVjZWl2ZWRcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9tZXNzYWdlOiBNZXNzYWdlLCBwcml2YXRlIF90YXJnZXQ6IFdpbmRvdywgcHJpdmF0ZSBfb3JpZ2luOiBzdHJpbmcpIHt9XG5cbiAgcHVibGljIGdldCBtZXNzYWdlR3VpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlLm1zZ0d1aWQ7XG4gIH1cblxuICBwdWJsaWMgc2VuZCgpOiBQcmVwYXJlZE1lc3NhZ2Uge1xuICAgIHRoaXMuX3RhcmdldC5wb3N0TWVzc2FnZSh0aGlzLl9tZXNzYWdlLCB0aGlzLl9vcmlnaW4pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBndWlkIGZyb20gJ2d1aWQnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uSWQgfSBmcm9tICcuLi9jb250cmFjdC9Ob3RpZmljYXRpb25zJztcbmltcG9ydCB7IFZlcnNpb25OdW1iZXIgfSBmcm9tICcuLi9pbnRlcmZhY2UvVmVyc2lvbk51bWJlcic7XG5pbXBvcnQge1xuICBDb21tYW5kTWVzc2FnZSxcbiAgQ29tbWFuZFJlc3BvbnNlTWVzc2FnZSxcbiAgSGFuZHNoYWtlTWVzc2FnZSxcbiAgSW5pdGlhbGl6ZU1lc3NhZ2UsXG4gIE1lc3NhZ2UsXG4gIE1lc3NhZ2VUeXBlLFxuICBOb3RpZmljYXRpb25NZXNzYWdlLFxufSBmcm9tICcuL2ludGVyZmFjZS9NZXNzYWdlVHlwZXMnO1xuXG5jb25zdCBleHBlY3RlZEVtcHR5Tm90aWZpY2F0aW9ucyA9IG5ldyBTZXQoW1xuICBOb3RpZmljYXRpb25JZC5FZGl0QnV0dG9uQ2xpY2tlZCxcbiAgTm90aWZpY2F0aW9uSWQuRWRpdEluRGVza3RvcEJ1dHRvbkNsaWNrZWQsXG4gIE5vdGlmaWNhdGlvbklkLldvcmtib29rUHVibGlzaGVkLFxuICBOb3RpZmljYXRpb25JZC5Xb3JrYm9va1JlYWR5VG9DbG9zZSxcbl0pO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZSBuby1hbnkgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01lc3NhZ2UoZGF0YTogTWVzc2FnZSB8IGFueSk6IGRhdGEgaXMgTWVzc2FnZSB7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2UgPSBkYXRhIGFzIE1lc3NhZ2U7XG4gIGlmICghbWVzc2FnZSB8fCAhbWVzc2FnZS5tc2dHdWlkIHx8ICFtZXNzYWdlLm1zZ1R5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWd1aWQuaXNHdWlkKG1lc3NhZ2UubXNnR3VpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIG1lc3NhZ2UubXNnVHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBtZXNzYWdlVHlwZXM6IEFycmF5PHN0cmluZz4gPSBbXG4gICAgTWVzc2FnZVR5cGUuQ29tbWFuZCxcbiAgICBNZXNzYWdlVHlwZS5Db21tYW5kUmVzcG9uc2UsXG4gICAgTWVzc2FnZVR5cGUuSW5pdGlhbGl6ZSxcbiAgICBNZXNzYWdlVHlwZS5Ob3RpZmljYXRpb24sXG4gICAgTWVzc2FnZVR5cGUuSGFuZHNoYWtlLFxuICBdO1xuXG4gIGlmIChtZXNzYWdlVHlwZXMuaW5kZXhPZihtZXNzYWdlLm1zZ1R5cGUpIDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWZXJzaW9uKHZlcnNpb25OdW1iZXI6IFZlcnNpb25OdW1iZXIgfCBhbnkpOiB2ZXJzaW9uTnVtYmVyIGlzIFZlcnNpb25OdW1iZXIge1xuICBpZiAoIXZlcnNpb25OdW1iZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB2ID0gdmVyc2lvbk51bWJlciBhcyBWZXJzaW9uTnVtYmVyO1xuXG4gIGlmICh0eXBlb2YgdiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHYuZml4ICE9PSAnbnVtYmVyJyB8fCB0eXBlb2Ygdi5taW5vciAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHYubWFqb3IgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0luaXRNZXNzYWdlKG1lc3NhZ2U6IEluaXRpYWxpemVNZXNzYWdlIHwgYW55KTogbWVzc2FnZSBpcyBJbml0aWFsaXplTWVzc2FnZSB7XG4gIGlmICghaXNNZXNzYWdlKG1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaW5pdE1lc3NhZ2UgPSBtZXNzYWdlIGFzIEluaXRpYWxpemVNZXNzYWdlO1xuICBpZiAoaW5pdE1lc3NhZ2UubXNnVHlwZSAhPT0gTWVzc2FnZVR5cGUuSW5pdGlhbGl6ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaW5pdE1lc3NhZ2UuYXBpVmVyc2lvbiB8fCAhaXNWZXJzaW9uKGluaXRNZXNzYWdlLmFwaVZlcnNpb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFpbml0TWVzc2FnZS5jcm9zc0ZyYW1lVmVyc2lvbiB8fCAhaXNWZXJzaW9uKGluaXRNZXNzYWdlLmNyb3NzRnJhbWVWZXJzaW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21tYW5kUmVzcG9uc2VNZXNzYWdlKG1lc3NhZ2U6IENvbW1hbmRSZXNwb25zZU1lc3NhZ2UgfCBhbnkpOiBtZXNzYWdlIGlzIENvbW1hbmRSZXNwb25zZU1lc3NhZ2Uge1xuICBpZiAoIWlzTWVzc2FnZShtZXNzYWdlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNyTWVzc2FnZSA9IG1lc3NhZ2UgYXMgQ29tbWFuZFJlc3BvbnNlTWVzc2FnZTtcbiAgaWYgKGNyTWVzc2FnZS5tc2dUeXBlICE9PSBNZXNzYWdlVHlwZS5Db21tYW5kUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWd1aWQuaXNHdWlkKGNyTWVzc2FnZS5jb21tYW5kR3VpZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWNyTWVzc2FnZS5kYXRhICYmICFjck1lc3NhZ2UuZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tbWFuZE1lc3NhZ2UobWVzc2FnZTogQ29tbWFuZE1lc3NhZ2UgfCBhbnkpOiBtZXNzYWdlIGlzIENvbW1hbmRNZXNzYWdlIHtcbiAgaWYgKCFpc01lc3NhZ2UobWVzc2FnZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjb21tYW5kTWVzc2FnZSA9IG1lc3NhZ2UgYXMgQ29tbWFuZE1lc3NhZ2U7XG4gIGlmIChjb21tYW5kTWVzc2FnZS5tc2dUeXBlICE9PSBNZXNzYWdlVHlwZS5Db21tYW5kKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFjb21tYW5kTWVzc2FnZS5wYXJhbWV0ZXJzIHx8IHR5cGVvZiBjb21tYW5kTWVzc2FnZS5wYXJhbWV0ZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghY29tbWFuZE1lc3NhZ2UudmVyYklkIHx8IHR5cGVvZiBjb21tYW5kTWVzc2FnZS52ZXJiSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdGlmaWNhdGlvbk1lc3NhZ2UobWVzc2FnZTogTm90aWZpY2F0aW9uTWVzc2FnZSB8IGFueSk6IG1lc3NhZ2UgaXMgTm90aWZpY2F0aW9uTWVzc2FnZSB7XG4gIGlmICghaXNNZXNzYWdlKG1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgbm90aWZpY2F0aW9uTWVzc2FnZSA9IG1lc3NhZ2UgYXMgTm90aWZpY2F0aW9uTWVzc2FnZTtcbiAgaWYgKG5vdGlmaWNhdGlvbk1lc3NhZ2UubXNnVHlwZSAhPT0gTWVzc2FnZVR5cGUuTm90aWZpY2F0aW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFub3RpZmljYXRpb25NZXNzYWdlLmRhdGEgJiYgIWV4cGVjdGVkRW1wdHlOb3RpZmljYXRpb25zLmhhcyhub3RpZmljYXRpb25NZXNzYWdlLm5vdGlmaWNhdGlvbklkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghbm90aWZpY2F0aW9uTWVzc2FnZS5ub3RpZmljYXRpb25JZCB8fCB0eXBlb2Ygbm90aWZpY2F0aW9uTWVzc2FnZS5ub3RpZmljYXRpb25JZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSGFuZHNoYWtlTWVzc2FnZShtZXNzYWdlOiBIYW5kc2hha2VNZXNzYWdlIHwgYW55KTogbWVzc2FnZSBpcyBIYW5kc2hha2VNZXNzYWdlIHtcbiAgaWYgKCFpc01lc3NhZ2UobWVzc2FnZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBoYW5kc2hha2VNZXNzYWdlID0gbWVzc2FnZSBhcyBIYW5kc2hha2VNZXNzYWdlO1xuICBpZiAoaGFuZHNoYWtlTWVzc2FnZS5tc2dUeXBlICE9PSBNZXNzYWdlVHlwZS5IYW5kc2hha2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiIsImltcG9ydCB7IEV4ZWN1dGVQYXJhbWV0ZXJzLCBNb2RlbCwgTm90aWZpY2F0aW9uSWQsIFZlcmJJZCwgVmVyc2lvbk51bWJlciB9IGZyb20gJy4uLy4uL0pzQXBpSW50ZXJuYWxDb250cmFjdCc7XG5pbXBvcnQgeyBJbml0aWFsaXphdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvSW5pdGlhbGl6YXRpb25PcHRpb25zJztcblxuLyoqXG4gKiBFbnVtIGRlZmluaW5nIHRoZSA0IGRpZmZlcmVudCB0eXBlcyBvZiBtZXNzYWdlcyB3ZSBoYXZlIGRlZmluZWRcbiAqL1xuZXhwb3J0IGVudW0gTWVzc2FnZVR5cGUge1xuICBJbml0aWFsaXplID0gJ2luaXRpYWxpemUnLFxuICBOb3RpZmljYXRpb24gPSAnbm90aWZpY2F0aW9uJyxcbiAgQ29tbWFuZCA9ICdjb21tYW5kJyxcbiAgQ29tbWFuZFJlc3BvbnNlID0gJ2NvbW1hbmQtcmVzcG9uc2UnLFxuICBIYW5kc2hha2UgPSAndi1oYW5kc2hha2UnLFxuICBBY2sgPSAndi1hY2snLFxufVxuXG4vKipcbiAqIFRoZSBNZXNzYWdlIGludGVyZmFjZSBpcyB0aGUgYmFzZSBpbnRlcmZhY2UgZm9yIGFsbCB0aGUgb3RoZXJcbiAqIG1lc3NhZ2UgdHlwZSBpbnRlcmZhY2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2Uge1xuICAvKipcbiAgICogQSB1bmlxdWUgaWQgZm9yIHRoaXMgbWVzc2FnZVxuICAgKi9cbiAgbXNnR3VpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGlzIG1lc3NhZ2VcbiAgICovXG4gIG1zZ1R5cGU6IE1lc3NhZ2VUeXBlO1xufVxuXG4vKipcbiAqIFRoZSBpbml0aWFsaXplIG1lc3NhZ2UgaXMgdGhlIGZpcnN0IG1lc3NhZ2Ugd2hpY2ggd2lsbCBiZSBzZW50XG4gKiBmcm9tIHRoZSBqYXZhc2NyaXB0IHRvIHNldCB1cCBjb21tdW5pY2F0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEluaXRpYWxpemVNZXNzYWdlIGV4dGVuZHMgTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgYXBpIHdoaWNoIHRoZSBzZW5kZXIgd2FudHMgdG8gdXNlXG4gICAqL1xuICBhcGlWZXJzaW9uOiBWZXJzaW9uTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGlzIG1lc3NhZ2luZyBjb250cmFjdCB0byBiZSB1c2VkLiBGb3Igbm93LCB0aGVyZVxuICAgKiBzaG91bGQgb25seSBiZSBhIHNpbmdsZSB2ZXJzaW9uIGJ1dCBzZW5kaW5nIHRoaXMgYWxvbmcgc2hvdWxkIGhlbHBcbiAgICogaWYgd2UgbmVlZCB0byBhZGQgYSBuZXcgdmVyc2lvbiBpbiBhIGZ1dHVyZSByZWxlYXNlXG4gICAqL1xuICBjcm9zc0ZyYW1lVmVyc2lvbjogVmVyc2lvbk51bWJlcjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCBhdCB0aGUgdGltZSBvZiBpbml0aWFsaXphdGlvblxuICAgKi9cbiAgb3B0aW9ucz86IEluaXRpYWxpemF0aW9uT3B0aW9ucztcbn1cblxuLyoqXG4gKiBUaGlzIG1lc3NhZ2UgaXMgc2VudCB3aGVuIGEgbm90aWZpY2F0aW9uIG9jY3VycyBmcm9tIHRoZSBwcmVzbGF5ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25NZXNzYWdlIGV4dGVuZHMgTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBUaGUgaWQgZm9yIHRoaXMgdHlwZSBvZiBub3RpZmljYXRpb25cbiAgICovXG4gIG5vdGlmaWNhdGlvbklkOiBOb3RpZmljYXRpb25JZDtcblxuICAvKipcbiAgICogVGhlIGRhdGEgd2hpY2ggY2FtZSBhbG9uZyB3aXRoIHRoZSBub3RpZmljYXRpb25cbiAgICovXG4gIGRhdGE6IE1vZGVsO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgY2FsbGluZyBhbiBpbnRlcm5hbCBjb250cmFjdCBjb21tYW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY29tbWFuZCB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWRcbiAgICovXG4gIHZlcmJJZDogVmVyYklkO1xuXG4gIC8qKlxuICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGNvbW1hbmRcbiAgICovXG4gIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzO1xufVxuXG4vKipcbiAqIFRoaXMgbWVzc2FnZSBpcyBzZW50IGluIHJlc3BvbnNlIHRvIGEgQ29tbWFuZE1lc3NhZ2Ugd2l0aCB0aGVcbiAqIHJlc3VsdCBvZiB0aGF0IGNvbW1hbmRzIGludm9jYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kUmVzcG9uc2VNZXNzYWdlIGV4dGVuZHMgTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBHdWlkIG9mIHRoZSBDb21tYW5kTWVzc2FnZSB3aGljaCB0aGlzIGlzIGluIHJlc3BvbnNlIHRvXG4gICAqL1xuICBjb21tYW5kR3VpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgcmV0dXJuZWQgZnJvbSB0aGUgY29tbWFuZCwgdGhpcyB3aWxsIGJlIGRlZmluZWRcbiAgICogYW5kIGNvbnRhaW4gdGhlIGVycm9yXG4gICAqL1xuICBlcnJvcj86IE1vZGVsO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgY29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHksIHRoaXMgd2lsbCBjb250YWluIHRoZSBjb21tYW5kIHJlc3VsdFxuICAgKi9cbiAgZGF0YT86IE1vZGVsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRzaGFrZU1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlIHtcbiAgLyoqXG4gICAqIEludGVybmFsIEFQSSBjb250cmFjdCB2ZXJzaW9uXG4gICAqL1xuICBwbGF0Zm9ybVZlcnNpb246IFZlcnNpb25OdW1iZXI7XG59XG4iLCJpbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgRXhlY3V0ZVJlc3BvbnNlLCBOb3RpZmljYXRpb24sIFZlcmJJZCB9IGZyb20gJy4uL0pzQXBpSW50ZXJuYWxDb250cmFjdCc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB9IGZyb20gJy4vSW50ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXInO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1hbnlcblxuLyoqXG4gKiBUaGlzIHZlcnNpb24gY29udmVydGVyIGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgYnV0IGlzIHVzZWZ1bCBmb3IgdGVzdGluZyBvciB3aGVuIHdlIGhhdmVcbiAqIGEgbWF0Y2hpbmcgcGxhdGZvcm0gYW5kIGludGVybmFsIHZlcnNpb24gbnVtYmVyXG4gKi9cbmV4cG9ydCBjbGFzcyBJZGVudGl0eVZlcnNpb25Db252ZXJ0ZXIgaW1wbGVtZW50cyBJbnRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB7XG4gIHB1YmxpYyB1cGdyYWRlRXhlY3V0ZUNhbGwodmVyYjogYW55LCBwYXJhbWV0ZXJzOiBhbnkpOiB7IHZlcmI6IFZlcmJJZDsgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcmI6IHZlcmIgYXMgVmVyYklkLFxuICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVycyBhcyBFeGVjdXRlUGFyYW1ldGVycyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGRvd25ncmFkZUV4ZWN1dGVSZXR1cm4oZXhlY3V0ZVJlc3BvbnNlOiBFeGVjdXRlUmVzcG9uc2UpOiBFeGVjdXRlUmVzcG9uc2Uge1xuICAgIHJldHVybiBleGVjdXRlUmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgZG93bmdyYWRlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogTm90aWZpY2F0aW9uIHtcbiAgICByZXR1cm4gbm90aWZpY2F0aW9uO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgRXhlY3V0ZVJlc3BvbnNlLCBOb3RpZmljYXRpb24sIFZlcmJJZCwgVmVyc2lvbk51bWJlciB9IGZyb20gJy4uL0pzQXBpSW50ZXJuYWxDb250cmFjdCc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB9IGZyb20gJy4vSW50ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXInO1xuaW1wb3J0ICogYXMgVHJhbnNsYXRpb25zIGZyb20gJy4vVmVyc2lvblRyYW5zbGF0aW9ucyc7XG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLWFueVxuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIGNvbnZlcnRlciBpcyBkZXNpZ25lZCB0byBhbGxvdyB0aGUgcGxhdGZvcm0gYW5kIGV4dGVybmFsIG1vZHVsZXNcbiAqIHRvIHNlZW1sZXNzbHkgY29tbXVuaWNhdGUgb3ZlciB0d28gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBpbnRlcm5hbCBBUEkuIFRoZSBvbmx5XG4gKiBtb2RlIGl0IHN1cHBvcnRzIGlzIGV4dGVybmFsJ3MgdmVyc2lvbiA8PSBwbGF0Zm9ybSdzIHZlcnNpb24uIFdoZW4gZXhlY3V0aW5nXG4gKiBjb21tYW5kcywgaXQgaXMgdXNlZCB0byB1cGdyYWRlIHRoZSBleHRlcm5hbCByZXByZXNlbnRhdGlvbiB0byB3aGF0IHBsYXRmb3JtIGtub3dzIG9uIHRoZSB3YXkgaW5cbiAqIGFuZCBkb3duZ3JhZGUgdGhlIHJlcHJlc2VudGF0aW9ucyBvbiB0aGUgd2F5IG91dC4gU2ltaWxhcmx5IGZvciBub3RpZmljYXRpb25zLCBpdCBjYW5cbiAqIGRvd25ncmFkZSB0aG9zZSBvbiB0aGUgd2F5IGZyb20gcGxhdGZvcm0gdG8gZXh0ZXJuYWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFja2luZ1ZlcnNpb25Db252ZXJ0ZXIgaW1wbGVtZW50cyBJbnRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBTdGFja2luZ1ZlcnNpb25Db252ZXJ0ZXJcbiAgICpcbiAgICogQHBhcmFtIF9leHRlcm5hbFZlcnNpb24gVGhlIHZlcnNpb24gb2YgdGhlIGludGVybmFsIGNvbnRyYWN0IGFwaS1leHRlcm5hbC1qcyBpcyB1c2luZ1xuICAgKiBAcGFyYW0gX3BsYXRmb3JtVmVyc2lvbiBUaGUgdmVyc2lvbiBvZiB0aGUgaW50ZXJuYWwgY29udHJhY3QgdGhlIGFwaS1wbGF0Zm9ybS1qcyBpcyB1c2luZ1xuICAgKiBAcGFyYW0gX3VwZ3JhZGVFeGVjdXRlVHJhbnNsYXRpb25zIE9yZGVyZWQgbGlzdCBvZiB0aGUgdHJhbnNsYXRpb25zIHRvIHBlcmZvcm0gd2hlbiB1cGdyYWRpbmcgY21kIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIF9kb3duZ3JhZGVFeGVjdXRlVHJhbnNsYXRpb25zIE9yZGVyZWQgbGlzdCBvZiBkb3duZ3JhZGUgdHJhbnNsYXRpb25zIHRvIHBlcmZvcm0gYWZ0ZXIgYSBjbWRcbiAgICogQHBhcmFtIF9kb3duZ3JhZGVOb3RpZmljYXRpb25UcmFuc2xhdGlvbnMgT3JkZXJlZCBsaXN0IG9mIGRvd25ncmFkZSB0cmFuc2xhdGlvbnMgdG8gcGVyZm9ybSBvbiBhIG5vdGlmaWNhdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRGF0YShcbiAgICBleHRlcm5hbFZlcnNpb246IFZlcnNpb25OdW1iZXIsXG4gICAgcGxhdGZvcm1WZXJzaW9uOiBWZXJzaW9uTnVtYmVyLFxuICAgIHVwZ3JhZGVFeGVjdXRlVHJhbnNsYXRpb25zOiBBcnJheTxUcmFuc2xhdGlvbnMuVXBncmFkZUV4ZWN1dGVDYWxsPixcbiAgICBkb3duZ3JhZGVFeGVjdXRlVHJhbnNsYXRpb25zOiBBcnJheTxUcmFuc2xhdGlvbnMuRG93bmdyYWRlRXhlY3V0ZVJldHVybj4sXG4gICAgZG93bmdyYWRlTm90aWZpY2F0aW9uVHJhbnNsYXRpb25zOiBBcnJheTxUcmFuc2xhdGlvbnMuRG93bmdyYWRlTm90aWZpY2F0aW9uPixcbiAgKTogU3RhY2tpbmdWZXJzaW9uQ29udmVydGVyIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoXG4gICAgICBleHRlcm5hbFZlcnNpb24ubWFqb3IsXG4gICAgICBwbGF0Zm9ybVZlcnNpb24ubWFqb3IsXG4gICAgICB1cGdyYWRlRXhlY3V0ZVRyYW5zbGF0aW9ucyxcbiAgICAgIGRvd25ncmFkZUV4ZWN1dGVUcmFuc2xhdGlvbnMsXG4gICAgICBkb3duZ3JhZGVOb3RpZmljYXRpb25UcmFuc2xhdGlvbnMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBTdGFja2luZ1ZlcnNpb25Db252ZXJ0ZXJcbiAgICpcbiAgICogQHBhcmFtIF9leHRlcm5hbE1ham9yVmVyc2lvbiBUaGUgbWFqb3IgdmVyc2lvbiBvZiB0aGUgaW50ZXJuYWwgY29udHJhY3QgYXBpLWV4dGVybmFsLWpzIGlzIHVzaW5nXG4gICAqIEBwYXJhbSBfcGxhdGZvcm1NYWpvclZlcnNpb24gVGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIGludGVybmFsIGNvbnRyYWN0IHRoZSBhcGktcGxhdGZvcm0tanMgaXMgdXNpbmdcbiAgICogQHBhcmFtIF91cGdyYWRlRXhlY3V0ZVRyYW5zbGF0aW9ucyBPcmRlcmVkIGxpc3Qgb2YgdGhlIHRyYW5zbGF0aW9ucyB0byBwZXJmb3JtIHdoZW4gdXBncmFkaW5nIGNtZCBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBfZG93bmdyYWRlRXhlY3V0ZVRyYW5zbGF0aW9ucyBPcmRlcmVkIGxpc3Qgb2YgZG93bmdyYWRlIHRyYW5zbGF0aW9ucyB0byBwZXJmb3JtIGFmdGVyIGEgY21kXG4gICAqIEBwYXJhbSBfZG93bmdyYWRlTm90aWZpY2F0aW9uVHJhbnNsYXRpb25zIE9yZGVyZWQgbGlzdCBvZiBkb3duZ3JhZGUgdHJhbnNsYXRpb25zIHRvIHBlcmZvcm0gb24gYSBub3RpZmljYXRpb25cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9leHRlcm5hbE1ham9yVmVyc2lvbjogbnVtYmVyLFxuICAgIHByaXZhdGUgX3BsYXRmb3JtTWFqb3JWZXJzaW9uOiBudW1iZXIsXG4gICAgcHJpdmF0ZSBfdXBncmFkZUV4ZWN1dGVUcmFuc2xhdGlvbnM6IEFycmF5PFRyYW5zbGF0aW9ucy5VcGdyYWRlRXhlY3V0ZUNhbGw+LFxuICAgIHByaXZhdGUgX2Rvd25ncmFkZUV4ZWN1dGVUcmFuc2xhdGlvbnM6IEFycmF5PFRyYW5zbGF0aW9ucy5Eb3duZ3JhZGVFeGVjdXRlUmV0dXJuPixcbiAgICBwcml2YXRlIF9kb3duZ3JhZGVOb3RpZmljYXRpb25UcmFuc2xhdGlvbnM6IEFycmF5PFRyYW5zbGF0aW9ucy5Eb3duZ3JhZGVOb3RpZmljYXRpb24+LFxuICApIHtcbiAgICBpZiAodGhpcy5fZXh0ZXJuYWxNYWpvclZlcnNpb24gPiB0aGlzLl9wbGF0Zm9ybU1ham9yVmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCBiZXR3ZWVuIGV4dGVybmFsIHZlcnNpb24gJHt0aGlzLl9leHRlcm5hbE1ham9yVmVyc2lvbn0gYW5kICR7dGhpcy5fcGxhdGZvcm1NYWpvclZlcnNpb259YCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZ3JhZGVFeGVjdXRlQ2FsbCh2ZXJiOiBhbnksIHBhcmFtZXRlcnM6IGFueSk6IHsgdmVyYjogVmVyYklkOyBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyB9IHtcbiAgICAvLyBQZXJmb3JtIHRoZSB1cGdyYWRlIG9mIHRoZSB2ZXJiIGFuZCBwYXJhbWV0ZXJzIHRvIHRoZSBsZXZlbCB0aGF0IHBsYXRmb3JtIGlzIHVzaW5nXG4gICAgbGV0IHVwZ3JhZGVkID0geyB2ZXJiOiB2ZXJiLCBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzIH07XG4gICAgZm9yIChjb25zdCB1cGdyYWRlVHJhbnNsYXRpb24gb2YgdGhpcy5fdXBncmFkZUV4ZWN1dGVUcmFuc2xhdGlvbnMpIHtcbiAgICAgIHVwZ3JhZGVkID0gdXBncmFkZVRyYW5zbGF0aW9uKHVwZ3JhZGVkLnZlcmIsIHVwZ3JhZGVkLnBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiB1cGdyYWRlZDtcbiAgfVxuXG4gIHB1YmxpYyBkb3duZ3JhZGVFeGVjdXRlUmV0dXJuKGV4ZWN1dGVSZXNwb25zZTogRXhlY3V0ZVJlc3BvbnNlKTogRXhlY3V0ZVJlc3BvbnNlIHtcbiAgICAvLyBEb3duZ3JhZGUgdGhlIHJlc3BvbnNlIHRvIHdoYXQgdGhlIGV4dGVybmFsIG1vZHVsZSBpcyBleHBlY3RpbmdcbiAgICBsZXQgZG93bmdyYWRlZCA9IGV4ZWN1dGVSZXNwb25zZTtcbiAgICBmb3IgKGNvbnN0IGRvd25ncmFkZVRyYW5zbGF0aW9uIG9mIHRoaXMuX2Rvd25ncmFkZUV4ZWN1dGVUcmFuc2xhdGlvbnMpIHtcbiAgICAgIGRvd25ncmFkZWQgPSBkb3duZ3JhZGVUcmFuc2xhdGlvbihkb3duZ3JhZGVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZG93bmdyYWRlZDtcbiAgfVxuXG4gIHB1YmxpYyBkb3duZ3JhZGVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pOiBOb3RpZmljYXRpb24ge1xuICAgIC8vIERvd25ncmFkZSB0aGUgbm90aWZpY2F0aW9uIHRvIHdoYXQgdGhlIGV4dGVybmFsIG1vZHVsZSBpcyBleHBlY3RpbmdcbiAgICBsZXQgZG93bmdyYWRlZCA9IG5vdGlmaWNhdGlvbjtcbiAgICBmb3IgKGNvbnN0IGRvd25ncmFkZVRyYW5zbGF0aW9uIG9mIHRoaXMuX2Rvd25ncmFkZU5vdGlmaWNhdGlvblRyYW5zbGF0aW9ucykge1xuICAgICAgZG93bmdyYWRlZCA9IGRvd25ncmFkZVRyYW5zbGF0aW9uKGRvd25ncmFkZWQpO1xuICAgIH1cblxuICAgIHJldHVybiBkb3duZ3JhZGVkO1xuICB9XG59XG4iLCJpbXBvcnQgeyBWZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi4vSnNBcGlJbnRlcm5hbENvbnRyYWN0JztcbmltcG9ydCB7IElkZW50aXR5VmVyc2lvbkNvbnZlcnRlciB9IGZyb20gJy4vSWRlbnRpdHlWZXJzaW9uQ29udmVydGVyJztcbmltcG9ydCB7IEludGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyIH0gZnJvbSAnLi9JbnRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlcic7XG5pbXBvcnQgeyBTdGFja2luZ1ZlcnNpb25Db252ZXJ0ZXIgfSBmcm9tICcuL1N0YWNraW5nVmVyc2lvbkNvbnZlcnRlcic7XG5pbXBvcnQgKiBhcyBUcmFuc2xhdGlvbnMgZnJvbSAnLi9WZXJzaW9uVHJhbnNsYXRpb25zJztcbmltcG9ydCB7IERvd25ncmFkZUZsaXBib2FyZFpvbmVJRCwgRG93bmdyYWRlV29ya3NoZWV0TmFtZXMgfSBmcm9tICcuL1ZlcnNpb25UcmFuc2xhdGlvbnMnO1xuXG4vKipcbiAqIEByZXR1cm5zIHRydWUgaWYgbGhzIDwgcmhzIChpZ25vcmluZyBmaXggbnVtYmVyKVxuICogQHBhcmFtIGxoc1xuICogQHBhcmFtIHJoc1xuICovXG5leHBvcnQgZnVuY3Rpb24gVmVyc2lvbkxlc3NUaGFuKGxoczogVmVyc2lvbk51bWJlciwgcmhzOiBWZXJzaW9uTnVtYmVyKTogYm9vbGVhbiB7XG4gIGlmIChsaHMubWFqb3IgPiByaHMubWFqb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGxocy5tYWpvciA8IHJocy5tYWpvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBsaHMubWlub3IgPCByaHMubWlub3I7XG59XG5cbi8qKlxuICogQHJldHVybnMgdHJ1ZSBpZiBsaHMgPT0gcmhzIChpZ25vcmluZyBmaXggbnVtYmVyKVxuICogQHBhcmFtIGxoc1xuICogQHBhcmFtIHJoc1xuICovXG5leHBvcnQgZnVuY3Rpb24gVmVyc2lvbkVxdWFsVG8obGhzOiBWZXJzaW9uTnVtYmVyLCByaHM6IFZlcnNpb25OdW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGxocy5tYWpvciA9PT0gcmhzLm1ham9yICYmIGxocy5taW5vciA9PT0gcmhzLm1pbm9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ham9yTWlub3JUcmFuc2xhdG9yczxUPiB7XG4gIFttYWpvcjogbnVtYmVyXTogeyBbbWlub3I6IG51bWJlcl06IEFycmF5PFQ+IH07XG59XG5cbi8vIEEgbWFwcGluZyBmcm9tIGFuIG9sZGVyIGNsaWVudCB2ZXJzaW9uIG9mIGludGVybmFsLWNvbnRyYWN0IHRvIHRoZSBjdXJyZW50IHBsYXRmb3JtIHZlcnNpb24gb2YgdGhpcyBjb250cmFjdC5cbi8vIEVhY2ggdmVyc2lvbiBidW1wIGNhbiBoYXZlIGFuIGFycmF5IG9mIHRyYW5zbGF0aW9ucyB0byBwZXJmb3JtIGluIG9yZGVyLiBOb3RpY2UgdGhhdCB0aGlzIGlzXG4vLyBkaWZmZXJlbnQgdGhhbiB0aGUgbWFqb3IgdXBncmFkZXMvZG93bmdyYWRlcyBhYm92ZSBiZWNhdXNlIGl0IGhhbmRsZXMgYm90aCBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBjaGFuZ2VzLlxuLy8gQWxzbyBwbGVhc2Ugbm90ZTogZG93bmdyYWRlRXhlY3V0ZUNhbGwgaXMgaGFuZGxlZCBvbiB0aGUgY2xpZW50L2V4dGVybmFsIHNpZGUgcmF0aGVyIHRoYW4gcGxhdGZvcm0gc2lkZS5cbi8vIFdoZW4gdXBkYXRpbmcgdGhlIG1ham9yIG9yIG1pbm9yIHZlcnNpb24gb2Ygb3VyIGludGVybmFsLWNvbnRyYWN0LCB5b3Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSB0aGVzZSBkYXRhIHN0cnVjdHVyZXMuXG4vLyAqIElmIHRoZXJlIGFyZSB0cmFuc2xhdGlvbnMgdG8gYWRkLCBhZGQgdGhlbSB0byB0aGUgdmVyc2lvbiB0byBcInVwZ3JhZGUgZnJvbVwiIG9yIFwiZG93bmdyYWRlIHRvXCIuXG5leHBvcnQgY29uc3QgRXhlY3V0ZU1pbm9yVXBncmFkZXM6IE1ham9yTWlub3JUcmFuc2xhdG9yczxUcmFuc2xhdGlvbnMuVXBncmFkZUV4ZWN1dGVDYWxsPiA9IHtcbiAgMToge1xuICAgIDk6IFtdLCAvLyBOb3RlIHRoYXQgd2UgcHV0IHVwZ3JhZGVzIGZyb20gMS45IHRvIDEuMTAgaW4gdGhlIFsxXVs5XSBidWNrZXRcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBFeGVjdXRlTWlub3JEb3duZ3JhZGVzOiBNYWpvck1pbm9yVHJhbnNsYXRvcnM8VHJhbnNsYXRpb25zLkRvd25ncmFkZUV4ZWN1dGVSZXR1cm4+ID0ge1xuICAxOiB7XG4gICAgNTogW0Rvd25ncmFkZVdvcmtzaGVldE5hbWVzXSxcbiAgICA5OiBbXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBOb3RpZmljYXRpb25NaW5vckRvd25ncmFkZXM6IE1ham9yTWlub3JUcmFuc2xhdG9yczxUcmFuc2xhdGlvbnMuRG93bmdyYWRlTm90aWZpY2F0aW9uPiA9IHtcbiAgMToge1xuICAgIDk6IFtdLFxuICAgIDEwOiBbRG93bmdyYWRlRmxpcGJvYXJkWm9uZUlEXSxcbiAgfSxcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBJbnRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB3aGljaCBoYXMgdGhlIGFiaWxpdHkgdG8gdXBncmFkZSBhbmQgZG93bmdyYWRlIHRoZSBjb250cmFjdFxuICogYmV0d2VlbiB0aGUgdHdvIHZlcnNpb25zLCB3aGljaCBhcmUgc3BlY2lmaWVkLiBJZiBleHRlcm5hbE1ham9yVmVyc2lvbiBpcyBncmVhdGVyIHRoYW4gcGxhdGZvcm1NYWpvclZlcnNpb24sXG4gKiBhbiBlcnJvciB3aWxsIGJlIHRocm93biBiZWNhdXNlIHdlIHdvbid0IGtub3cgaG93IHRvIGRvIHRob3NlIGNvbnZlcnNpb25zLlxuICogVGhpcyBjb252ZXJ0ZXIgY2FuIGhhbmRsZSBib3RoIG1ham9yIGFuZCBtaW5vciB1cGRhdGVzIHdoZW4gdGhlIHBsYXRmb3JtIHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuIGV4dGVybmFsIHZlcnNpb24uXG4gKlxuICogQHBhcmFtIGV4dGVybmFsVmVyc2lvbiBWZXJzaW9uTnVtYmVyIG9mIHRoZSBpbnRlcm5hbCBhcGkgd2hpY2ggdGhlIGV4dGVybmFsIG1vZHVsZSBpcyB1c2luZ1xuICogQHBhcmFtIHBsYXRmb3JtVmVyc2lvbiBWZXJzaW9uTnVtYmVyIG9mIHRoZSBpbnRlcm5hbCBhcGkgd2hpY2ggdGhlIHBsYXRmb3JtIGlzIHVzaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDcmVhdGVWZXJzaW9uQ29udmVydGVyKGV4dGVybmFsVmVyc2lvbjogVmVyc2lvbk51bWJlciwgcGxhdGZvcm1WZXJzaW9uOiBWZXJzaW9uTnVtYmVyKTogSW50ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXIge1xuICByZXR1cm4gQ3JlYXRlVmVyc2lvbkNvbnZlcnRlcldpdGhUcmFuc2xhdG9ycyhcbiAgICBleHRlcm5hbFZlcnNpb24sXG4gICAgcGxhdGZvcm1WZXJzaW9uLFxuICAgIEV4ZWN1dGVNaW5vclVwZ3JhZGVzLFxuICAgIEV4ZWN1dGVNaW5vckRvd25ncmFkZXMsXG4gICAgTm90aWZpY2F0aW9uTWlub3JEb3duZ3JhZGVzLFxuICApO1xufVxuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIENyZWF0ZVZlcnNpb25Db252ZXJ0ZXIuIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIHVwZ3JhZGUsIGRvd25ncmFkZSwgYW5kXG4gKiBub3RpZmljYXRpb24gYXJyYXlzIHNvIHRoYXQgYWxsIHRoZSBsb2dpYyBjYW4gYmUgdGVzdGVkLlxuICpcbiAqIEBwYXJhbSBleHRlcm5hbFZlcnNpb24gVmVyc2lvbk51bWJlciBvZiB0aGUgaW50ZXJuYWwgYXBpIHdoaWNoIHRoZSBleHRlcm5hbCBtb2R1bGUgaXMgdXNpbmdcbiAqIEBwYXJhbSBwbGF0Zm9ybVZlcnNpb24gVmVyc2lvbk51bWJlciBvZiB0aGUgaW50ZXJuYWwgYXBpIHdoaWNoIHRoZSBwbGF0Zm9ybSBpcyB1c2luZ1xuICogQHBhcmFtIHVwZ3JhZGVzIE1ham9yTWlub3JUcmFuc2xhdG9ycyBmb3IgdXBncmFkZXNcbiAqIEBwYXJhbSBkb3duZ3JhZGVzIE1ham9yTWlub3JUcmFuc2xhdG9ycyBmb3IgZG93bmdyYWRlc1xuICogQHBhcmFtIG5vdGlmaWNhdGlvbkRvd25ncmFkZXMgTWFqb3JNaW5vclRyYW5zbGF0b3JzIGZvciBub3RpZmljYXRpb24gZG93bmdyYWRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlVmVyc2lvbkNvbnZlcnRlcldpdGhUcmFuc2xhdG9ycyhcbiAgZXh0ZXJuYWxWZXJzaW9uOiBWZXJzaW9uTnVtYmVyLFxuICBwbGF0Zm9ybVZlcnNpb246IFZlcnNpb25OdW1iZXIsXG4gIHVwZ3JhZGVzOiBNYWpvck1pbm9yVHJhbnNsYXRvcnM8VHJhbnNsYXRpb25zLlVwZ3JhZGVFeGVjdXRlQ2FsbD4sXG4gIGRvd25ncmFkZXM6IE1ham9yTWlub3JUcmFuc2xhdG9yczxUcmFuc2xhdGlvbnMuRG93bmdyYWRlRXhlY3V0ZVJldHVybj4sXG4gIG5vdGlmaWNhdGlvbkRvd25ncmFkZXM6IE1ham9yTWlub3JUcmFuc2xhdG9yczxUcmFuc2xhdGlvbnMuRG93bmdyYWRlTm90aWZpY2F0aW9uPixcbik6IEludGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyIHtcbiAgY29uc3QgZXh0ZXJuYWxNYWpvclZlcnNpb246IG51bWJlciA9IGV4dGVybmFsVmVyc2lvbi5tYWpvcjtcbiAgY29uc3QgZXh0ZXJuYWxNaW5vclZlcnNpb246IG51bWJlciA9IGV4dGVybmFsVmVyc2lvbi5taW5vcjtcbiAgY29uc3QgcGxhdGZvcm1NYWpvclZlcnNpb246IG51bWJlciA9IHBsYXRmb3JtVmVyc2lvbi5tYWpvcjtcblxuICBpZiAoZXh0ZXJuYWxNYWpvclZlcnNpb24gPiBwbGF0Zm9ybU1ham9yVmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXh0ZXJuYWwgdmVyc2lvbiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBwbGF0Zm9ybSB2ZXJzaW9uLlxuICAgIGV4dGVybmFsTWFqb3JWZXJzaW9uPSR7ZXh0ZXJuYWxNYWpvclZlcnNpb259IHBsYXRmb3JtTWFqb3JWZXJzaW9uPSR7cGxhdGZvcm1NYWpvclZlcnNpb259YCk7XG4gIH1cblxuICAvLyBJZiB3ZSBhcmUgdXNpbmcgdGhlIGV4YWN0IHNhbWUgdmVyc2lvbnMgKG1ham9yLm1pbm9yKSwganVzdCB1c2UgdGhlIGlkZW50aXR5IGNvbnZlcnRlclxuICBpZiAoVmVyc2lvbkVxdWFsVG8oZXh0ZXJuYWxWZXJzaW9uLCBwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgcmV0dXJuIG5ldyBJZGVudGl0eVZlcnNpb25Db252ZXJ0ZXIoKTtcbiAgfVxuXG4gIC8vIFdhbGsgdGhlIHNwYW4gYmV0d2VlbiB0aGUgdmVyc2lvbnMgd2UgaGF2ZSBoZXJlIGFuZCBjb2xsZWN0IHRoZSB1cGdyYWRlIGFuZCBkb3duZ3JhZGVzIG5lY2Vzc2FyeVxuICBjb25zdCBuZWVkZWRFeGVjdXRlVXBncmFkZXM6IEFycmF5PFRyYW5zbGF0aW9ucy5VcGdyYWRlRXhlY3V0ZUNhbGw+ID0gR2V0TmVlZGVkVHJhbnNsYXRpb25zKFxuICAgIGV4dGVybmFsTWFqb3JWZXJzaW9uLFxuICAgIHBsYXRmb3JtTWFqb3JWZXJzaW9uLFxuICAgIGV4dGVybmFsTWlub3JWZXJzaW9uLFxuICAgIHVwZ3JhZGVzLFxuICApO1xuXG4gIGNvbnN0IG5lZWRlZEV4ZWN1dGVEb3duZ3JhZGVzOiBBcnJheTxUcmFuc2xhdGlvbnMuRG93bmdyYWRlRXhlY3V0ZVJldHVybj4gPSBHZXROZWVkZWRUcmFuc2xhdGlvbnMoXG4gICAgZXh0ZXJuYWxNYWpvclZlcnNpb24sXG4gICAgcGxhdGZvcm1NYWpvclZlcnNpb24sXG4gICAgZXh0ZXJuYWxNaW5vclZlcnNpb24sXG4gICAgZG93bmdyYWRlcyxcbiAgKTtcblxuICBjb25zdCBuZWVkZWROb3RpZmljYXRpb25Eb3duZ3JhZGVzOiBBcnJheTxUcmFuc2xhdGlvbnMuRG93bmdyYWRlTm90aWZpY2F0aW9uPiA9IEdldE5lZWRlZFRyYW5zbGF0aW9ucyhcbiAgICBleHRlcm5hbE1ham9yVmVyc2lvbixcbiAgICBwbGF0Zm9ybU1ham9yVmVyc2lvbixcbiAgICBleHRlcm5hbE1pbm9yVmVyc2lvbixcbiAgICBub3RpZmljYXRpb25Eb3duZ3JhZGVzLFxuICApO1xuXG4gIC8vIFdlIHdhbnQgdG8gYXBwbHkgdGhlIGRvd25ncmFkZXMgaW4gcmV2ZXJzZSBvcmRlciBpbiBjYXNlIG9mIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZW1cbiAgbmVlZGVkRXhlY3V0ZURvd25ncmFkZXMucmV2ZXJzZSgpO1xuICBuZWVkZWROb3RpZmljYXRpb25Eb3duZ3JhZGVzLnJldmVyc2UoKTtcblxuICByZXR1cm4gU3RhY2tpbmdWZXJzaW9uQ29udmVydGVyLmZyb21EYXRhKFxuICAgIGV4dGVybmFsVmVyc2lvbixcbiAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgbmVlZGVkRXhlY3V0ZVVwZ3JhZGVzLFxuICAgIG5lZWRlZEV4ZWN1dGVEb3duZ3JhZGVzLFxuICAgIG5lZWRlZE5vdGlmaWNhdGlvbkRvd25ncmFkZXMsXG4gICk7XG59XG5cbmZ1bmN0aW9uIEdldE5lZWRlZFRyYW5zbGF0aW9uczxUPihcbiAgZXh0ZXJuYWxNYWpvclZlcnNpb246IG51bWJlcixcbiAgcGxhdGZvcm1NYWpvclZlcnNpb246IG51bWJlcixcbiAgZXh0ZXJuYWxNaW5vclZlcnNpb246IG51bWJlcixcbiAgbWFqb3JNaW5vclRyYW5zbGF0b3JzOiBNYWpvck1pbm9yVHJhbnNsYXRvcnM8VD4sXG4pOiBBcnJheTxUPiB7XG4gIGNvbnN0IG5lZWRlZFRyYW5zbGF0aW9uczogQXJyYXk8VD4gPSBbXTtcblxuICBmb3IgKGxldCBtYWpvciA9IGV4dGVybmFsTWFqb3JWZXJzaW9uOyBtYWpvciA8PSBwbGF0Zm9ybU1ham9yVmVyc2lvbjsgbWFqb3IrKykge1xuICAgIGlmIChtYWpvciBpbiBtYWpvck1pbm9yVHJhbnNsYXRvcnMpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gbWFqb3IgPT09IGV4dGVybmFsTWFqb3JWZXJzaW9uID8gZXh0ZXJuYWxNaW5vclZlcnNpb24gOiAwO1xuICAgICAgY29uc3QgbWF4aW11bU1pbm9yVmVyc2lvbiA9IEdldE1heGltdW1NaW5vckluZGV4KE9iamVjdC5rZXlzKG1ham9yTWlub3JUcmFuc2xhdG9yc1ttYWpvcl0pKTtcbiAgICAgIGZvciAobGV0IG1pbm9yID0gc3RhcnQ7IG1pbm9yIDw9IG1heGltdW1NaW5vclZlcnNpb247IG1pbm9yKyspIHtcbiAgICAgICAgaWYgKG1pbm9yIGluIG1ham9yTWlub3JUcmFuc2xhdG9yc1ttYWpvcl0pIHtcbiAgICAgICAgICBuZWVkZWRUcmFuc2xhdGlvbnMucHVzaCguLi5tYWpvck1pbm9yVHJhbnNsYXRvcnNbbWFqb3JdW21pbm9yXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmVlZGVkVHJhbnNsYXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR2V0TWF4aW11bU1pbm9ySW5kZXgobWlub3JWZXJzaW9uczogQXJyYXk8c3RyaW5nPik6IG51bWJlciB7XG4gIHJldHVybiBtaW5vclZlcnNpb25zLm1hcCgoYSkgPT4gTnVtYmVyKGEpKS5yZWR1Y2UoKGEsIGIpID0+IChhID4gYiA/IGEgOiBiKSk7XG59XG4iLCJpbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgRXhlY3V0ZVJlc3BvbnNlLCBFeHRlbnNpb25Cb290c3RyYXBJbmZvLCBOb3RpZmljYXRpb24sIFZlcmJJZCB9IGZyb20gJy4uL0pzQXBpSW50ZXJuYWxDb250cmFjdCc7XG5pbXBvcnQgeyBWaXN1YWxJZCB9IGZyb20gJy4uL2NvbnRyYWN0L01vZGVscyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25JZCB9IGZyb20gJy4uL2NvbnRyYWN0L05vdGlmaWNhdGlvbnMnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1hbnlcblxuLyoqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gd2UgcmVjZWl2ZSBvbGQgdmVycyBhbmQgcGFyYW1ldGVycyBmcm9tIHRoZSBleHRlcm5hbCBiZWZvcmUgd2Ugc2VuZCBpdCB0byBwbGF0Zm9ybSAqL1xuZXhwb3J0IHR5cGUgVXBncmFkZUV4ZWN1dGVDYWxsID0gKHZlcmI6IFZlcmJJZCwgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMpID0+IHsgdmVyYjogVmVyYklkOyBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyB9O1xuXG4vKiogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB3ZSByZWNlaXZlZCBhIHJlc3BvbnNlIGJhY2sgZnJvbSBwbGF0Zm9ybSBhbmQgd2UgbmVlZCB0byBkb3duZ3JhZGUgaXQgdG8gZXh0ZXJuYWwncyB2ZXJzaW9uICovXG5leHBvcnQgdHlwZSBEb3duZ3JhZGVFeGVjdXRlUmV0dXJuID0gKGV4ZWN1dGVSZXNwb25zZTogRXhlY3V0ZVJlc3BvbnNlKSA9PiBFeGVjdXRlUmVzcG9uc2U7XG5cbi8qKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHdlIHJlY2VpdmUgYSBub3RpZmljYXRpb24gZnJvbSBwbGF0Zm9ybSBhbmQgd2UgbmVlZCB0byBkb3duZ3JhZGUgaXQgdG8gZXh0ZXJuYWwncyB2ZXJzaW9uICovXG5leHBvcnQgdHlwZSBEb3duZ3JhZGVOb3RpZmljYXRpb24gPSAobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pID0+IE5vdGlmaWNhdGlvbjtcblxuLy8gVGhpcyBpcyB3aGVyZSB3ZSB3aWxsIHN0YXJ0IHRvIGRlZmluZSBzb21lIG9mIHRoZXNlIHRyYW5zbGF0aW9ucy5cbi8vIFdoZW4gbW9kaWZ5aW5nIGV4aXN0aW5nIG1vZGVscywgYWRkIHRoZSByZXF1aXNpdGUgY29udmVyc2lvbiBmdW5jdGlvbnMgaGVyZSwgdGhlbiB1c2UgdGhlbVxuLy8gaW4gdGhlIFZlcnNpb25Db252ZXJ0ZXJGYWN0b3J5IGltcGxlbWVudGF0aW9uLiBJbXBvcnQgb2xkIHZlcnNpb25zIGFzIHlvdSB3b3VsZCBhbnkgb3RoZXIgbW9kdWxlXG5cbi8vIDAgPC0+IFRyYW5zbGF0aW9uc1xuLy8gVW5jb21tZW50IHRoaXMgbGluZSB0byBpbXBvcnQgZnJvbSB0aGUgVjAgZGVmaW5pdGlvbiBvZiB0aGUgQVBJXG4vLyBpbXBvcnQgKiBhcyBWMCBmcm9tICdAdGFibGVhdS1hcGktaW50ZXJuYWwtY29udHJhY3QtanNfdjAnO1xuXG4vLyAxIDwtPiAyIFRyYW5zbGF0aW9uc1xuLy8gVW5jb21tZW50IHRoaXMgbGluZSB0byBpbXBvcnQgZnJvbSB0aGUgVjEgZGVmaW5pdGlvbiBvZiB0aGUgQVBJXG4vLyBpbXBvcnQgKiBhcyBWMSBmcm9tICdAdGFibGVhdS1hcGktaW50ZXJuYWwtY29udHJhY3QtanNfdjEnO1xuXG5leHBvcnQgZnVuY3Rpb24gRG93bmdyYWRlV29ya3NoZWV0TmFtZXMoZXhlY3V0ZVJlc3BvbnNlOiBFeGVjdXRlUmVzcG9uc2UpOiBFeGVjdXRlUmVzcG9uc2Uge1xuICAvLyBGaXggdGhlIGRhc2hib2FyZCBmcmllbmRseSBuYW1lIGlzc3VlLiBUaGUgc3RydWN0dXJlcyBhcmUgY29tcGF0aWJsZSxcbiAgLy8gc28gd2Ugc3RpbGwgcmV0dXJuIHRoZSBvcmlnaW5hbCByZXBseSwgYnV0IHdlIGNvcHkgdGhlIFNoZWV0SW5mby5uYW1lXG4gIC8vIGludG8gdGhlIERhc2hib2FyZFpvbmUubmFtZSwgd2hlcmUgdjEgd2FudHMgdG8gZmluZCBpdC5cblxuICBjb25zdCBib290c3RyYXBJbmZvID0gZXhlY3V0ZVJlc3BvbnNlLnJlc3VsdCBhcyBFeHRlbnNpb25Cb290c3RyYXBJbmZvO1xuICBpZiAoYm9vdHN0cmFwSW5mby5leHRlbnNpb25EYXNoYm9hcmRJbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICBib290c3RyYXBJbmZvLmV4dGVuc2lvbkRhc2hib2FyZEluZm8uem9uZXMuZm9yRWFjaCgoem9uZSkgPT4ge1xuICAgICAgaWYgKHpvbmUuc2hlZXRJbmZvKSB7XG4gICAgICAgIHpvbmUubmFtZSA9IHpvbmUuc2hlZXRJbmZvLm5hbWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZXhlY3V0ZVJlc3BvbnNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRG93bmdyYWRlRmxpcGJvYXJkWm9uZUlEKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogTm90aWZpY2F0aW9uIHtcbiAgLy8gRml4IHRoZSBGbGlwYm9hcmRab25lSWQgaXNzdWUuIE9sZGVyIGV4dGVybmFsIHZlcnNpb25zIHN0aWxsIGNoZWNrIGZvciBmbGlwYm9hcmRab25lSURzLlxuICAvLyBXaGVuIHJ1bm5pbmcgYWdhaW5zdCBhIG5ld2VyIHNlcnZlciwgaWYgZmxpcGJvYXJkWm9uZUlkIGlzIGFic2VudCwgc2V0IGl0IHRvIGRlZmF1bHQoMCkuXG5cbiAgaWYgKG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25JZCA9PT0gTm90aWZpY2F0aW9uSWQuU2VsZWN0ZWRNYXJrc0NoYW5nZWQpIHtcbiAgICBjb25zdCB2aXN1YWxNb2RlbCA9IG5vdGlmaWNhdGlvbi5kYXRhIGFzIFZpc3VhbElkO1xuICAgIGlmICh2aXN1YWxNb2RlbC5mbGlwYm9hcmRab25lSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmlzdWFsTW9kZWwuZmxpcGJvYXJkWm9uZUlEID0gMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm90aWZpY2F0aW9uO1xufVxuIiwiaW1wb3J0IHsgRXhlY3V0ZVBhcmFtZXRlcnMsIEV4ZWN1dGVSZXNwb25zZSwgTm90aWZpY2F0aW9uLCBWZXJiSWQgfSBmcm9tICcuLi8uLi9Kc0FwaUludGVybmFsQ29udHJhY3QnO1xuaW1wb3J0IHsgRXh0ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXIgfSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyJztcblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYW55XG5cbi8qKlxuICogVGhpcyB2ZXJzaW9uIGNvbnZlcnRlciBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGJ1dCBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgb3Igd2hlbiB3ZSBoYXZlXG4gKiBhIG1hdGNoaW5nIHBsYXRmb3JtIGFuZCBleHRlcm5hbCB2ZXJzaW9uIG51bWJlclxuICovXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxJZGVudGl0eVZlcnNpb25Db252ZXJ0ZXIgaW1wbGVtZW50cyBFeHRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlciB7XG4gIHB1YmxpYyBkb3duZ3JhZGVFeGVjdXRlQ2FsbCh2ZXJiOiBhbnksIHBhcmFtZXRlcnM6IGFueSk6IHsgdmVyYjogVmVyYklkOyBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyYjogdmVyYiBhcyBWZXJiSWQsXG4gICAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzIGFzIEV4ZWN1dGVQYXJhbWV0ZXJzLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgdXBncmFkZUV4ZWN1dGVSZXR1cm4oZXhlY3V0ZVJlc3BvbnNlOiBFeGVjdXRlUmVzcG9uc2UsIHZlcmI6IFZlcmJJZCwgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMpOiBFeGVjdXRlUmVzcG9uc2Uge1xuICAgIHJldHVybiBleGVjdXRlUmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgdXBncmFkZU5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbik6IE5vdGlmaWNhdGlvbiB7XG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRXhlY3V0ZVBhcmFtZXRlcnMsIEV4ZWN1dGVSZXNwb25zZSwgTm90aWZpY2F0aW9uLCBWZXJiSWQsIFZlcnNpb25OdW1iZXIgfSBmcm9tICcuLi8uLi9Kc0FwaUludGVybmFsQ29udHJhY3QnO1xuaW1wb3J0IHsgRXh0ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXIgfSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyJztcbmltcG9ydCAqIGFzIFRyYW5zbGF0aW9ucyBmcm9tICcuL0V4dGVybmFsVmVyc2lvblRyYW5zbGF0aW9ucyc7XG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLWFueVxuLyoqXG4gKiBUaGUgdmVyc2lvbiBjb252ZXJ0ZXIgaXMgZGVzaWduZWQgdG8gYWxsb3cgdGhlIHBsYXRmb3JtIGFuZCBleHRlcm5hbCBtb2R1bGVzXG4gKiB0byBzZWVtbGVzc2x5IGNvbW11bmljYXRlIG92ZXIgdHdvIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJuYWwgQVBJLiBUaGlzIGNvbnZlcnRlclxuICogc3VwcG9ydHMgZXh0ZXJuYWwncyB2ZXJzaW9uKG1pbm9yKSA+PSBwbGF0Zm9ybSdzIHZlcnNpb24obWlub3IpLiBXaGVuIGV4ZWN1dGluZ1xuICogY29tbWFuZHMsIGl0IGlzIHVzZWQgdG8gZG93bmdyYWRlIHRoZSBleHRlcm5hbCByZXByZXNlbnRhdGlvbiB0byB3aGF0IHBsYXRmb3JtIGtub3dzIG9uIHRoZSB3YXkgaW5cbiAqIGFuZCB1cGdyYWRlIHRoZSByZXByZXNlbnRhdGlvbnMgb24gdGhlIHdheSBvdXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHRlcm5hbFN0YWNraW5nVmVyc2lvbkNvbnZlcnRlciBpbXBsZW1lbnRzIEV4dGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFN0YWNraW5nVmVyc2lvbkNvbnZlcnRlclxuICAgKlxuICAgKiBAcGFyYW0gX2V4dGVybmFsVmVyc2lvbiBUaGUgdmVyc2lvbiBvZiB0aGUgaW50ZXJuYWwgY29udHJhY3QgYXBpLWV4dGVybmFsLWpzIGlzIHVzaW5nXG4gICAqIEBwYXJhbSBfcGxhdGZvcm1WZXJzaW9uIFRoZSB2ZXJzaW9uIG9mIHRoZSBpbnRlcm5hbCBjb250cmFjdCB0aGUgYXBpLXBsYXRmb3JtLWpzIGlzIHVzaW5nXG4gICAqIEBwYXJhbSBfZG93bmdyYWRlRXhlY3V0ZUNhbGxUcmFuc2xhdGlvbnMgT3JkZXJlZCBsaXN0IG9mIHRoZSB0cmFuc2xhdGlvbnMgdG8gcGVyZm9ybSB3aGVuIGRvd25ncmFkaW5nIGNtZCBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBfdXBncmFkZUV4ZWN1dGVSZXR1cm5UcmFuc2xhdGlvbnMgT3JkZXJlZCBsaXN0IG9mIHVwZ3JhZGUgdHJhbnNsYXRpb25zIHRvIHBlcmZvcm0gYWZ0ZXIgYSBjbWQgaXMgZXhlY3V0ZWRcbiAgICogQHBhcmFtIF91cGdyYWRlTm90aWZpY2F0aW9uVHJhbnNsYXRpb25zIE9yZGVyZWQgbGlzdCBvZiB1cGdyYWRlIG5vdGZpY2F0aW9ucyB0byBwZXJmb3JtIG9uIGV2ZW50c1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2V4dGVybmFsVmVyc2lvbjogVmVyc2lvbk51bWJlcixcbiAgICBwcml2YXRlIF9wbGF0Zm9ybVZlcnNpb246IFZlcnNpb25OdW1iZXIsXG4gICAgcHJpdmF0ZSBfZG93bmdyYWRlRXhlY3V0ZUNhbGxUcmFuc2xhdGlvbnM6IEFycmF5PFRyYW5zbGF0aW9ucy5Eb3duZ3JhZGVFeGVjdXRlQ2FsbD4sXG4gICAgcHJpdmF0ZSBfdXBncmFkZUV4ZWN1dGVSZXR1cm5UcmFuc2xhdGlvbnM6IEFycmF5PFRyYW5zbGF0aW9ucy5VcGdyYWRlRXhlY3V0ZVJldHVybj4sXG4gICAgcHJpdmF0ZSBfdXBncmFkZU5vdGlmaWNhdGlvblRyYW5zbGF0aW9uczogQXJyYXk8VHJhbnNsYXRpb25zLlVwZ3JhZGVOb3RpZmljYXRpb24+LFxuICApIHtcbiAgICBpZiAodGhpcy5fZXh0ZXJuYWxWZXJzaW9uLm1ham9yID4gdGhpcy5fcGxhdGZvcm1WZXJzaW9uLm1ham9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0IGJldHdlZW4gZXh0ZXJuYWwgdmVyc2lvbiAke3RoaXMuX2V4dGVybmFsVmVyc2lvbi5tYWpvcn1cbiAgICAgIGFuZCAke3RoaXMuX3BsYXRmb3JtVmVyc2lvbi5tYWpvcn1gKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZG93bmdyYWRlRXhlY3V0ZUNhbGwodmVyYjogYW55LCBwYXJhbWV0ZXJzOiBhbnkpOiB7IHZlcmI6IFZlcmJJZDsgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgfSB7XG4gICAgLy8gUGVyZm9ybSB0aGUgZG93bmdyYWRlIG9mIHRoZSB2ZXJiIGFuZCBwYXJhbWV0ZXJzIHRvIHRoZSBsZXZlbCB0aGF0IHBsYXRmb3JtIGlzIHVzaW5nXG4gICAgbGV0IGRvd25ncmFkZWQgPSB7IHZlcmI6IHZlcmIsIHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMgfTtcbiAgICBmb3IgKGNvbnN0IGRvd25ncmFkZVRyYW5zbGF0aW9uIG9mIHRoaXMuX2Rvd25ncmFkZUV4ZWN1dGVDYWxsVHJhbnNsYXRpb25zKSB7XG4gICAgICBkb3duZ3JhZGVkID0gZG93bmdyYWRlVHJhbnNsYXRpb24oZG93bmdyYWRlZC52ZXJiLCBkb3duZ3JhZGVkLnBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBkb3duZ3JhZGVkO1xuICB9XG5cbiAgcHVibGljIHVwZ3JhZGVFeGVjdXRlUmV0dXJuKGV4ZWN1dGVSZXNwb25zZTogRXhlY3V0ZVJlc3BvbnNlLCB2ZXJiOiBWZXJiSWQsIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzKTogRXhlY3V0ZVJlc3BvbnNlIHtcbiAgICAvLyBQZXJmb3JtIHRoZSB1cGdyYWRlIG9mIHRoZSByZXNwb25zZSB0byB3aGF0IHRoZSBleHRlcm5hbCBtb2R1bGUgaXMgZXhwZWN0aW5nXG4gICAgbGV0IHVwZ3JhZGVkID0gZXhlY3V0ZVJlc3BvbnNlO1xuICAgIGZvciAoY29uc3QgdXBncmFkZVRyYW5zbGF0aW9uIG9mIHRoaXMuX3VwZ3JhZGVFeGVjdXRlUmV0dXJuVHJhbnNsYXRpb25zKSB7XG4gICAgICB1cGdyYWRlZCA9IHVwZ3JhZGVUcmFuc2xhdGlvbih1cGdyYWRlZCwgdmVyYiwgcGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZ3JhZGVkO1xuICB9XG5cbiAgcHVibGljIHVwZ3JhZGVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pOiBOb3RpZmljYXRpb24ge1xuICAgIC8vIFBlcmZvcm0gdGhlIHVwZ3JhZGUgb2Ygbm90aWZpY2F0aW9uIHRvIHdoYXQgdGhlIGV4dGVybmFsIG1vZHVsZSBpcyBleHBlY3RpbmdcbiAgICBsZXQgdXBncmFkZWQgPSBub3RpZmljYXRpb247XG4gICAgZm9yIChjb25zdCB1cGdyYWRlTm90aWZpY2F0aW9uIG9mIHRoaXMuX3VwZ3JhZGVOb3RpZmljYXRpb25UcmFuc2xhdGlvbnMpIHtcbiAgICAgIHVwZ3JhZGVkID0gdXBncmFkZU5vdGlmaWNhdGlvbih1cGdyYWRlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZ3JhZGVkO1xuICB9XG59XG4iLCJpbXBvcnQgeyBWZXJzaW9uTnVtYmVyIH0gZnJvbSAnLi4vLi4vSnNBcGlJbnRlcm5hbENvbnRyYWN0JztcbmltcG9ydCB7IEdldE1heGltdW1NaW5vckluZGV4LCBNYWpvck1pbm9yVHJhbnNsYXRvcnMsIFZlcnNpb25FcXVhbFRvIH0gZnJvbSAnLi4vVmVyc2lvbkNvbnZlcnRlckZhY3RvcnknO1xuaW1wb3J0IHsgRXh0ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXIgfSBmcm9tICcuL0V4dGVybmFsQ29udHJhY3RWZXJzaW9uQ29udmVydGVyJztcbmltcG9ydCB7IEV4dGVybmFsSWRlbnRpdHlWZXJzaW9uQ29udmVydGVyIH0gZnJvbSAnLi9FeHRlcm5hbElkZW50aXR5VmVyc2lvbkNvbnZlcnRlcic7XG5pbXBvcnQgeyBFeHRlcm5hbFN0YWNraW5nVmVyc2lvbkNvbnZlcnRlciB9IGZyb20gJy4vRXh0ZXJuYWxTdGFja2luZ1ZlcnNpb25Db252ZXJ0ZXInO1xuaW1wb3J0ICogYXMgVHJhbnNsYXRpb25zRXh0ZXJuYWwgZnJvbSAnLi9FeHRlcm5hbFZlcnNpb25UcmFuc2xhdGlvbnMnO1xuaW1wb3J0IHtcbiAgRG93bmdyYWRlTG9naWNhbFRhYmxlRGF0YUFzeW5jLFxuICBEb3duZ3JhZGVVbmRlcmx5aW5nVGFibGVEYXRhQXN5bmMsXG4gIFVwZ3JhZGVEYXRhVGFibGVSb3dzQW5kQ29sdW1ucyxcbiAgVXBncmFkZURhdGFUYWJsZVR5cGVzLFxufSBmcm9tICcuL0V4dGVybmFsVmVyc2lvblRyYW5zbGF0aW9ucyc7XG5cbi8vIEEgbWFwcGluZyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudCB2ZXJzaW9uIG9mIGludGVybmFsLWNvbnRyYWN0IHRvIGFuIG9sZGVyIHBsYXRmb3JtIHZlcnNpb24gb2YgdGhlIGNvbnRyYWN0LlxuLy8gRWFjaCB2ZXJzaW9uIGJ1bXAgY2FuIGhhdmUgYW4gYXJyYXkgb2YgdHJhbnNsYXRpb25zIHRvIHBlcmZvcm0gaW4gb3JkZXIuXG4vLyBUaGVzZSB0cmFuc2xhdGlvbnMgaGFuZGxlIGRvd25ncmFkZUV4ZWN1dGVDYWxsIGFuZCB1cGdyYWRlRXhlY3V0ZVJldHVybiBhbmQgYXJlIG1lYW50IHRvIGJlIGNhbGxlZCBvbiB0aGVcbi8vIGNsaWVudC9leHRlcm5hbCBzaWRlLlxuLy8gV2hlbiB1cGRhdGluZyB0aGUgbWFqb3Igb3IgbWlub3IgdmVyc2lvbiBvZiBvdXIgaW50ZXJuYWwtY29udHJhY3QsIHlvdSB3aWxsIG5lZWQgdG8gdXBkYXRlIHRoZXNlIGRhdGEgc3RydWN0dXJlcy5cbi8vICogSWYgdGhlcmUgYXJlIHRyYW5zbGF0aW9ucyB0byBhZGQsIGFkZCB0aGVtIHRvIHRoZSB2ZXJzaW9uIHRvICd1cGdyYWRlIGZyb20nIG9yICdkb3duZ3JhZGUgdG8nLlxuZXhwb3J0IGNvbnN0IEV4ZWN1dGVNaW5vckRvd25ncmFkZUNhbGxFeHRlcm5hbDogTWFqb3JNaW5vclRyYW5zbGF0b3JzPFRyYW5zbGF0aW9uc0V4dGVybmFsLkRvd25ncmFkZUV4ZWN1dGVDYWxsPiA9IHtcbiAgMToge1xuICAgIDk6IFtdLCAvLyBOb3RlIHRoYXQgd2UgcHV0IGRvd25ncmFkZXMgZnJvbSAxLjEwIHRvIDEuOSBpbiB0aGUgWzFdWzldIGJ1Y2tldFxuICAgIDEzOiBbRG93bmdyYWRlVW5kZXJseWluZ1RhYmxlRGF0YUFzeW5jLCBEb3duZ3JhZGVMb2dpY2FsVGFibGVEYXRhQXN5bmNdLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEV4ZWN1dGVNaW5vclVwZ3JhZGVSZXR1cm5FeHRlcm5hbDogTWFqb3JNaW5vclRyYW5zbGF0b3JzPFRyYW5zbGF0aW9uc0V4dGVybmFsLlVwZ3JhZGVFeGVjdXRlUmV0dXJuPiA9IHtcbiAgMToge1xuICAgIDk6IFtVcGdyYWRlRGF0YVRhYmxlVHlwZXNdLCAvLyBOb3RlIHRoYXQgd2UgcHV0IHVwZ3JhZGVzIGZyb20gMS45IHRvIDEuMTAgaW4gdGhlIFsxXVs5XSBidWNrZXRcbiAgICAyOTogW1VwZ3JhZGVEYXRhVGFibGVSb3dzQW5kQ29sdW1uc10sIC8vIDIwMjEuMSB3YXMgcmVsZWFzZWQgd2l0aCAxLjI5LiBVcGdyYWRlIGZyb20gMS4yOSBpbiB0aGUgWzFdWzI5XSBidWNrZXRcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBFeGVjdXRlTWlub3JVcGdyYWRlTm90aWZpY2F0aW9uOiBNYWpvck1pbm9yVHJhbnNsYXRvcnM8VHJhbnNsYXRpb25zRXh0ZXJuYWwuVXBncmFkZU5vdGlmaWNhdGlvbj4gPSB7XG4gIDE6IHtcbiAgICA5OiBbXSwgLy8gTm90ZSB0aGF0IHdlIHB1dCB1cGdyYWRlcyBmcm9tIDEuOSB0byAxLjEwIGluIHRoZSBbMV1bOV0gYnVja2V0XG4gIH0sXG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgRXh0ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXIgd2hpY2ggaGFzIHRoZSBhYmlsaXR5IHRvIHVwZ3JhZGUgYW5kIGRvd25ncmFkZVxuICogdGhlIGNvbnRyYWN0IGJldHdlZW4gdGhlIHR3byB2ZXJzaW9ucyB3aGljaCBhcmUgc3BlY2lmaWVkLiBJZiBleHRlcm5hbE1ham9yVmVyc2lvbiBpcyBsZXNzIHRoYW5cbiAqIHBsYXRmb3JtTWFqb3JWZXJzaW9uLCBhbiBFeHRlcm5hbElkZW50aXR5VmVyc2lvbkNvbnZlcnRlciB3aWxsIGJlIHJldHVybmVkLlxuICogSGFuZGxlcyB1cGdyYWRlL2Rvd25ncmFkZSBmb3IgYm90aCBtYWpvciBhbmQgbWlub3IgdXBkYXRlcy5cbiAqXG4gKiBAcGFyYW0gZXh0ZXJuYWxWZXJzaW9uIFZlcnNpb25OdW1iZXIgb2YgdGhlIGludGVybmFsIGFwaSB3aGljaCB0aGUgZXh0ZXJuYWwgbW9kdWxlIGlzIHVzaW5nXG4gKiBAcGFyYW0gcGxhdGZvcm1WZXJzaW9uIFZlcnNpb25OdW1iZXIgb2YgdGhlIGludGVybmFsIGFwaSB3aGljaCB0aGUgcGxhdGZvcm0gaXMgdXNpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENyZWF0ZUV4dGVybmFsQ29tcGF0aWJsZVZlcnNpb25Db252ZXJ0ZXIoXG4gIGV4dGVybmFsVmVyc2lvbjogVmVyc2lvbk51bWJlcixcbiAgcGxhdGZvcm1WZXJzaW9uOiBWZXJzaW9uTnVtYmVyLFxuKTogRXh0ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXIge1xuICByZXR1cm4gQ3JlYXRlRXh0ZXJuYWxDb21wYXRpYmxlVmVyc2lvbkNvbnZlcnRlcldpdGhUcmFuc2xhdG9ycyhcbiAgICBleHRlcm5hbFZlcnNpb24sXG4gICAgcGxhdGZvcm1WZXJzaW9uLFxuICAgIEV4ZWN1dGVNaW5vckRvd25ncmFkZUNhbGxFeHRlcm5hbCxcbiAgICBFeGVjdXRlTWlub3JVcGdyYWRlUmV0dXJuRXh0ZXJuYWwsXG4gICAgRXhlY3V0ZU1pbm9yVXBncmFkZU5vdGlmaWNhdGlvbixcbiAgKTtcbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBDcmVhdGVFeHRlcm5hbENvbXBhdGlibGVWZXJzaW9uQ29udmVydGVyV2l0aFRyYW5zbGF0b3JzLlxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgdXBncmFkZSwgZG93bmdyYWRlIGFycmF5cyBzbyB0aGF0IGFsbCB0aGUgbG9naWMgY2FuIGJlIHRlc3RlZC5cbiAqXG4gKiBAcGFyYW0gZXh0ZXJuYWxWZXJzaW9uIFZlcnNpb25OdW1iZXIgb2YgdGhlIGludGVybmFsIGNvbnRyYWN0IHdoaWNoIHRoZSBleHRlcm5hbCBtb2R1bGUgaXMgdXNpbmdcbiAqIEBwYXJhbSBwbGF0Zm9ybVZlcnNpb24gVmVyc2lvbk51bWJlciBvZiB0aGUgaW50ZXJuYWwgY29udHJhY3Qgd2hpY2ggdGhlIHBsYXRmb3JtIGlzIHVzaW5nXG4gKiBAcGFyYW0gdXBncmFkZXMgTWFqb3JNaW5vclRyYW5zbGF0b3JzIGZvciByZXNwb25zZSB1cGdyYWRlc1xuICogQHBhcmFtIGRvd25ncmFkZXMgTWFqb3JNaW5vclRyYW5zbGF0b3JzIGZvciBleGVjdXRlIGNhbGwgZG93bmdyYWRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlRXh0ZXJuYWxDb21wYXRpYmxlVmVyc2lvbkNvbnZlcnRlcldpdGhUcmFuc2xhdG9ycyhcbiAgZXh0ZXJuYWxWZXJzaW9uOiBWZXJzaW9uTnVtYmVyLFxuICBwbGF0Zm9ybVZlcnNpb246IFZlcnNpb25OdW1iZXIsXG4gIGRvd25ncmFkZXM6IE1ham9yTWlub3JUcmFuc2xhdG9yczxUcmFuc2xhdGlvbnNFeHRlcm5hbC5Eb3duZ3JhZGVFeGVjdXRlQ2FsbD4sXG4gIHVwZ3JhZGVzOiBNYWpvck1pbm9yVHJhbnNsYXRvcnM8VHJhbnNsYXRpb25zRXh0ZXJuYWwuVXBncmFkZUV4ZWN1dGVSZXR1cm4+LFxuICB1cGdyYWRlTm90aWZpY2F0aW9uczogTWFqb3JNaW5vclRyYW5zbGF0b3JzPFRyYW5zbGF0aW9uc0V4dGVybmFsLlVwZ3JhZGVOb3RpZmljYXRpb24+LFxuKTogRXh0ZXJuYWxDb250cmFjdFZlcnNpb25Db252ZXJ0ZXIge1xuICBjb25zdCBleHRlcm5hbE1ham9yVmVyc2lvbjogbnVtYmVyID0gZXh0ZXJuYWxWZXJzaW9uLm1ham9yO1xuICBjb25zdCBwbGF0Zm9ybU1ham9yVmVyc2lvbjogbnVtYmVyID0gcGxhdGZvcm1WZXJzaW9uLm1ham9yO1xuICBjb25zdCBwbGF0Zm9ybU1pbm9yVmVyc2lvbjogbnVtYmVyID0gcGxhdGZvcm1WZXJzaW9uLm1pbm9yO1xuXG4gIC8vIFRoaXMgY2hlY2sgaXMgcHJlc2VudCBpbiBWZXJzaW9uQ29udmVydGVyRmFjdG9yeS4gV2UgdGhyb3cgdGhlIHNhbWUgZXJyb3IgaGVyZSBhcyB3ZWxsLlxuICAvLyBIZW5jZSB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhlIG1pbm9yIHZlcnNpb25zIGZvciB0cmFuc2xhdGlvbnMuXG4gIGlmIChleHRlcm5hbE1ham9yVmVyc2lvbiA+IHBsYXRmb3JtTWFqb3JWZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHRlcm5hbCB2ZXJzaW9uIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHBsYXRmb3JtIHZlcnNpb24uXG4gICAgZXh0ZXJuYWxNYWpvclZlcnNpb249JHtleHRlcm5hbE1ham9yVmVyc2lvbn0gcGxhdGZvcm1NYWpvclZlcnNpb249JHtwbGF0Zm9ybU1ham9yVmVyc2lvbn1gKTtcbiAgfVxuXG4gIGlmIChleHRlcm5hbE1ham9yVmVyc2lvbiA8IHBsYXRmb3JtTWFqb3JWZXJzaW9uIHx8IFZlcnNpb25FcXVhbFRvKGV4dGVybmFsVmVyc2lvbiwgcGxhdGZvcm1WZXJzaW9uKSkge1xuICAgIHJldHVybiBuZXcgRXh0ZXJuYWxJZGVudGl0eVZlcnNpb25Db252ZXJ0ZXIoKTtcbiAgfVxuXG4gIC8vIFdhbGsgdGhlIHNwYW4gYmV0d2VlbiB0aGUgdmVyc2lvbnMgd2UgaGF2ZSBoZXJlIGFuZCBjb2xsZWN0IHRoZSB1cGdyYWRlIGFuZCBkb3duZ3JhZGVzIG5lY2Vzc2FyeVxuICBjb25zdCBuZWVkZWRFeGVjdXRlQ2FsbERvd25ncmFkZTogQXJyYXk8VHJhbnNsYXRpb25zRXh0ZXJuYWwuRG93bmdyYWRlRXhlY3V0ZUNhbGw+ID0gR2V0TmVlZGVkRXh0ZXJuYWxUcmFuc2xhdGlvbnMoXG4gICAgcGxhdGZvcm1NYWpvclZlcnNpb24sXG4gICAgcGxhdGZvcm1NaW5vclZlcnNpb24sXG4gICAgZG93bmdyYWRlcyxcbiAgKTtcblxuICBjb25zdCBuZWVkZWRFeGVjdXRlUmV0dXJuVXBncmFkZXM6IEFycmF5PFRyYW5zbGF0aW9uc0V4dGVybmFsLlVwZ3JhZGVFeGVjdXRlUmV0dXJuPiA9IEdldE5lZWRlZEV4dGVybmFsVHJhbnNsYXRpb25zKFxuICAgIHBsYXRmb3JtTWFqb3JWZXJzaW9uLFxuICAgIHBsYXRmb3JtTWlub3JWZXJzaW9uLFxuICAgIHVwZ3JhZGVzLFxuICApO1xuXG4gIGNvbnN0IG5lZWRlZE5vdGlmaWNhdGlvblVwZ3JhZGVzOiBBcnJheTxUcmFuc2xhdGlvbnNFeHRlcm5hbC5VcGdyYWRlTm90aWZpY2F0aW9uPiA9IEdldE5lZWRlZEV4dGVybmFsVHJhbnNsYXRpb25zKFxuICAgIHBsYXRmb3JtTWFqb3JWZXJzaW9uLFxuICAgIHBsYXRmb3JtTWlub3JWZXJzaW9uLFxuICAgIHVwZ3JhZGVOb3RpZmljYXRpb25zLFxuICApO1xuXG4gIC8vIFJldmVyc2UgdGhlIGRvd25ncmFkZSBjYWxscywgc28gdGhhdCB3ZSBzdGFydCB0aGUgZG93bmdyYWRlIGZyb20gdGhlIGV4dGVybmFsIHZlcnNpb24gdG8gdGhlIHBsYXRmb3JtIHZlcnNpb25cbiAgbmVlZGVkRXhlY3V0ZUNhbGxEb3duZ3JhZGUucmV2ZXJzZSgpO1xuICByZXR1cm4gbmV3IEV4dGVybmFsU3RhY2tpbmdWZXJzaW9uQ29udmVydGVyKFxuICAgIGV4dGVybmFsVmVyc2lvbixcbiAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgbmVlZGVkRXhlY3V0ZUNhbGxEb3duZ3JhZGUsXG4gICAgbmVlZGVkRXhlY3V0ZVJldHVyblVwZ3JhZGVzLFxuICAgIG5lZWRlZE5vdGlmaWNhdGlvblVwZ3JhZGVzLFxuICApO1xufVxuXG5mdW5jdGlvbiBHZXROZWVkZWRFeHRlcm5hbFRyYW5zbGF0aW9uczxUPihcbiAgcGxhdGZvcm1NYWpvclZlcnNpb246IG51bWJlcixcbiAgcGxhdGZvcm1NaW5vclZlcnNpb246IG51bWJlcixcbiAgbWFqb3JNaW5vclRyYW5zbGF0b3JzOiBNYWpvck1pbm9yVHJhbnNsYXRvcnM8VD4sXG4pOiBBcnJheTxUPiB7XG4gIGNvbnN0IG5lZWRlZFRyYW5zbGF0aW9uczogQXJyYXk8VD4gPSBbXTtcblxuICBpZiAocGxhdGZvcm1NYWpvclZlcnNpb24gaW4gbWFqb3JNaW5vclRyYW5zbGF0b3JzKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBwbGF0Zm9ybU1pbm9yVmVyc2lvbjtcbiAgICBjb25zdCBtYXhpbXVtTWlub3JWZXJzaW9uID0gR2V0TWF4aW11bU1pbm9ySW5kZXgoT2JqZWN0LmtleXMobWFqb3JNaW5vclRyYW5zbGF0b3JzW3BsYXRmb3JtTWFqb3JWZXJzaW9uXSkpO1xuICAgIGZvciAobGV0IG1pbm9yID0gc3RhcnQ7IG1pbm9yIDw9IG1heGltdW1NaW5vclZlcnNpb247IG1pbm9yKyspIHtcbiAgICAgIGlmIChtaW5vciBpbiBtYWpvck1pbm9yVHJhbnNsYXRvcnNbcGxhdGZvcm1NYWpvclZlcnNpb25dKSB7XG4gICAgICAgIG5lZWRlZFRyYW5zbGF0aW9ucy5wdXNoKC4uLm1ham9yTWlub3JUcmFuc2xhdG9yc1twbGF0Zm9ybU1ham9yVmVyc2lvbl1bbWlub3JdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmVlZGVkVHJhbnNsYXRpb25zO1xufVxuIiwiaW1wb3J0IHtcbiAgQXBpU2hvd0RhdGFUYWJsZVNlbnRpbmVsLFxuICBEYXRhSGVhZGVyLFxuICBEYXRhVGFibGUsXG4gIERhdGFUeXBlQ29udmVydGVyLFxuICBFeGVjdXRlUGFyYW1ldGVycyxcbiAgRXhlY3V0ZVJlc3BvbnNlLFxuICBJbnRlcm5hbFRhYmxlYXVFcnJvcixcbiAgTm90aWZpY2F0aW9uLFxuICBQYXJhbWV0ZXJJZCxcbiAgU2VsZWN0ZWRNYXJrc1RhYmxlLFxuICBVbmRlcmx5aW5nRGF0YVRhYmxlLFxuICBWZXJiSWQsXG59IGZyb20gJy4uLy4uL0pzQXBpSW50ZXJuYWxDb250cmFjdCc7XG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLWFueVxuXG4vKiogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB3ZSByZWNlaXZlIG5ld2VyIHZlcnNpb24gYW5kIHBhcmFtZXRlcnMgZnJvbSB0aGUgZXh0ZXJuYWwgYmVmb3JlIHdlIHNlbmQgaXQgdG8gcGxhdGZvcm0gKi9cbmV4cG9ydCB0eXBlIERvd25ncmFkZUV4ZWN1dGVDYWxsID0gKHZlcmI6IFZlcmJJZCwgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMpID0+IHsgdmVyYjogVmVyYklkOyBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyB9O1xuXG4vKiogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB3ZSByZWNlaXZlIGEgcmVzcG9uc2UgYmFjayBmcm9tIHBsYXRmb3JtIGFuZCB3ZSBuZWVkIHRvIHVwZ3JhZGUgaXQgdG8gZXh0ZXJuYWwncyB2ZXJzaW9uXG4gKiAgVGhlIHZlcmIgYW5kIHBhcmFtZXRlcnMgcHJvdmlkZSBhIGNvbnRleHQgdG8gZGVjaWRlIGhvdyB0byBoYW5kbGUgdGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgdHlwZSBVcGdyYWRlRXhlY3V0ZVJldHVybiA9IChleGVjdXRlUmVzcG9uc2U6IEV4ZWN1dGVSZXNwb25zZSwgdmVyYjogVmVyYklkLCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycykgPT4gRXhlY3V0ZVJlc3BvbnNlO1xuXG4vKiogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB3ZSByZWNlaXZlIGEgbm90aWZpY2F0aW9uIGZyb20gcGxhdGZvcm0gYW5kIHdlIG5lZWQgdG8gdXBncmFkZSBpdCB0byBleHRlcm5hbCdzIHZlcnNpb24gKi9cbmV4cG9ydCB0eXBlIFVwZ3JhZGVOb3RpZmljYXRpb24gPSAobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pID0+IE5vdGlmaWNhdGlvbjtcblxuLy8gMS4yIC0+IDEuMCBUcmFuc2xhdGlvbnNcbi8vIFVuY29tbWVudCB0aGlzIGxpbmUgdG8gaW1wb3J0IGZyb20gdGhlIFYxIGRlZmluaXRpb24gb2YgdGhlIEFQSVxuLy8gaW1wb3J0ICogYXMgVjEgZnJvbSAnQHRhYmxlYXUtYXBpLWludGVybmFsLWNvbnRyYWN0LWpzX3YxJztcblxuLyoqXG4gKiBQcmlvciB0byAyMDE5LjIgKGludGVybmFsLWNvbnRyYWN0IHYxLjkpLCBEYXRhVmFsdWUudmFsdWUgd2VyZSBhbGwgc3RyaW5ncy5cbiAqIEdvIHRocm91Z2ggYWxsIERhdGFWYWx1ZSBvYmplY3RzLiBJZiB3ZSBoYXZlIGEgc3RyaW5nLCBidXQgdGhlIHR5cGUgc2hvdWxkIG5vdCBiZSBhIHN0cmluZyxcbiAqIGNvbnZlcnQgaXQgdG8gdGhlIGNvcnJlY3QgdHlwZS4gVGhlIHR5cGUgb2YgRGF0YVZhbHVlLnZhbHVlIGlzICdhbnknIGluIHRoZSBjb250cmFjdCwgc29cbiAqIHRoaXMgY2hhbmdlIGRvZXNuJ3QgbmVlZCBhbnkgdXBkYXRlcyB0byBjbGFzc2VzIG9yIHR5cGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gVXBncmFkZURhdGFUYWJsZVR5cGVzKGV4ZWN1dGVSZXNwb25zZTogRXhlY3V0ZVJlc3BvbnNlLCB2ZXJiOiBWZXJiSWQsIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzKTogRXhlY3V0ZVJlc3BvbnNlIHtcbiAgaWYgKCFleGVjdXRlUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gZXhlY3V0ZVJlc3BvbnNlO1xuICB9XG5cbiAgY29uc3Qgb2xkVW5kZXJseWluZ0RhdGFUYWJsZSA9IGV4ZWN1dGVSZXNwb25zZS5yZXN1bHQgYXMgVW5kZXJseWluZ0RhdGFUYWJsZTtcbiAgaWYgKG9sZFVuZGVybHlpbmdEYXRhVGFibGUuZGF0YSAhPT0gdW5kZWZpbmVkICYmIG9sZFVuZGVybHlpbmdEYXRhVGFibGUuaXNTdW1tYXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb252ZXJ0RGF0YVZhbHVlcyhvbGRVbmRlcmx5aW5nRGF0YVRhYmxlLmRhdGEpO1xuICAgIHJldHVybiBleGVjdXRlUmVzcG9uc2U7XG4gIH1cblxuICBjb25zdCBvbGRTZWxlY3RlZE1hcmtzVGFibGUgPSBleGVjdXRlUmVzcG9uc2UucmVzdWx0IGFzIFNlbGVjdGVkTWFya3NUYWJsZTtcbiAgaWYgKG9sZFNlbGVjdGVkTWFya3NUYWJsZS5kYXRhICE9PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShvbGRTZWxlY3RlZE1hcmtzVGFibGUuZGF0YSkpIHtcbiAgICBvbGRTZWxlY3RlZE1hcmtzVGFibGUuZGF0YS5mb3JFYWNoKChtYXJrc1RhYmxlKSA9PiB7XG4gICAgICBjb252ZXJ0RGF0YVZhbHVlcyhtYXJrc1RhYmxlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXhlY3V0ZVJlc3BvbnNlO1xuICB9XG5cbiAgcmV0dXJuIGV4ZWN1dGVSZXNwb25zZTtcbn1cblxuLyoqXG4gKiBQcmlvciB0byAyMDIwLjIgKGludGVybmFsLWNvbnRyYWN0IHYxLjEzIGFuZCBvbGRlciksIHdvcmtzaGVldC5nZXRVbmRlcmx5aW5nVGFibGVEYXRhQXN5bmMgZG9lc24ndCBleGlzdC5cbiAqIE1hcCBpdCB0byB0aGUgb2xkZXIgR2V0VW5kZXJseWluZ0RhdGEgdmVyYiBhbmQgdmFsaWRhdGUgdGhlIHRoZSBsb2dpY2FsIHRhYmxlIElkLlxuICoqL1xuZXhwb3J0IGZ1bmN0aW9uIERvd25ncmFkZVVuZGVybHlpbmdUYWJsZURhdGFBc3luYyhcbiAgdmVyYjogVmVyYklkLFxuICBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyxcbik6IHtcbiAgdmVyYjogVmVyYklkO1xuICBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycztcbn0ge1xuICBpZiAodmVyYiA9PT0gVmVyYklkLkdldFVuZGVybHlpbmdUYWJsZURhdGEpIHtcbiAgICB2YWxpZGF0ZVBhcmFtZXRlcnNGb3JPYmplY3RNb2RlbCh2ZXJiLCBwYXJhbWV0ZXJzKTtcbiAgICB2ZXJiID0gVmVyYklkLkdldFVuZGVybHlpbmdEYXRhO1xuICB9XG4gIHJldHVybiB7XG4gICAgdmVyYjogdmVyYixcbiAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzLFxuICB9O1xufVxuXG4vKipcbiAqIFByaW9yIHRvIDIwMjAuMiAoaW50ZXJuYWwtY29udHJhY3QgdjEuMTMgYW5kIG9sZGVyKSwgZGF0YXNvdXJjZS5nZXRMb2dpY2FsVGFibGVEYXRhQXN5bmMgZG9lc24ndCBleGlzdC5cbiAqIE1hcCBpdCB0byB0aGUgb2xkZXIgR2V0RGF0YVNvdXJjZURhdGEgdmVyYiBhbmQgdmFsaWRhdGUgdGhlIHRoZSBsb2dpY2FsIHRhYmxlIElkLlxuICoqL1xuZXhwb3J0IGZ1bmN0aW9uIERvd25ncmFkZUxvZ2ljYWxUYWJsZURhdGFBc3luYyhcbiAgdmVyYjogVmVyYklkLFxuICBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyxcbik6IHtcbiAgdmVyYjogVmVyYklkO1xuICBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycztcbn0ge1xuICBpZiAodmVyYiA9PT0gVmVyYklkLkdldExvZ2ljYWxUYWJsZURhdGEpIHtcbiAgICB2YWxpZGF0ZVBhcmFtZXRlcnNGb3JPYmplY3RNb2RlbCh2ZXJiLCBwYXJhbWV0ZXJzKTtcbiAgICB2ZXJiID0gVmVyYklkLkdldERhdGFTb3VyY2VEYXRhO1xuICB9XG4gIHJldHVybiB7XG4gICAgdmVyYjogdmVyYixcbiAgICBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGF0YVZhbHVlcyh0YWJsZTogRGF0YVRhYmxlKTogdm9pZCB7XG4gIC8vIGRhdGFUYWJsZSBpcyBhIHR3by1kaW1lbnNpb25hbCBhcnJheSBvZiBkYXRhLiBGaXJzdCBpbmRleCBpcyB0aGUgcm93LCBzZWNvbmQgaXMgdGhlIGNvbHVtbi5cbiAgaWYgKHRhYmxlID09PSB1bmRlZmluZWQgfHwgdGFibGUuZGF0YVRhYmxlID09PSB1bmRlZmluZWQgfHwgIUFycmF5LmlzQXJyYXkodGFibGUuZGF0YVRhYmxlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRhYmxlLmRhdGFUYWJsZS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICByb3cuZm9yRWFjaCgoZGF0YVZhbHVlLCBjb2x1bW5JbmRleCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBkYXRhVmFsdWUudmFsdWU7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgZGF0YVZhbHVlLnZhbHVlID0gRGF0YVR5cGVDb252ZXJ0ZXIuY29udmVydFZhbHVlQXNTdHJpbmdUb1ZhbHVlKHZhbHVlLCB0YWJsZS5oZWFkZXJzW2NvbHVtbkluZGV4XS5kYXRhVHlwZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vLyBUb0RvOiBURlMxMDY5MDI3IFJlZmFjdG9yIGlucHV0IHZlcmJzICYgcGFyYW1ldGVycyBpbiBhcGktaW50ZXJuYWwtY29udHJhY3QgVXBncmFkZS9Eb3duZ3JhZGUgZnJhbWV3b3JrXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcmFtZXRlcnNGb3JPYmplY3RNb2RlbCh2ZXJiOiBWZXJiSWQsIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzKTogdm9pZCB7XG4gIGlmIChwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkxvZ2ljYWxUYWJsZUlkXSAhPT0gQXBpU2hvd0RhdGFUYWJsZVNlbnRpbmVsLlNpbmdsZVRhYmxlSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbG9naWNhbCB0YWJsZSBpZCBwYXNzZWQgdG8gJHt2ZXJifS5gKSBhcyBJbnRlcm5hbFRhYmxlYXVFcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFByaW9yIHRvIDIwMjEuMiAoaW50ZXJuYWwtY29udHJhY3QgdjEuMjkgYW5kIGJlbG93KSwgZ2V0U3VtbWFyeURhdGFBc3luYyBkaWQgbm90IHN1cHBvcnQgbWF4Um93cyxcbiAqIGFuZCBhbnkgZ2V0Li4uRGF0YUFzeW5jIGRpZCBub3Qgc3VwcG9ydCBjb2x1bW5zVG9JbmNsdWRlQnlJZC5cbiAqIFRyaW0gcmVzdWx0IHRvIG1heFJvd3MgaWYgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIHBhcmFtZXRlcnMgZm9yIGdldFN1bW1hcnlEYXRhQXN5bmNcbiAqIFRyaW0gY29sdW1ucyB0byBjb2x1bW5zVG9JbmNsdWRlIGlmIGluY2x1ZGVkIGluIHRoZSBwYXJhbWV0ZXJzIGZvciBhbnkgZ2V0Li4uRGF0YUFzeW5jXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBVcGdyYWRlRGF0YVRhYmxlUm93c0FuZENvbHVtbnMoXG4gIGV4ZWN1dGVSZXNwb25zZTogRXhlY3V0ZVJlc3BvbnNlLFxuICB2ZXJiOiBWZXJiSWQsXG4gIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzLFxuKTogRXhlY3V0ZVJlc3BvbnNlIHtcbiAgaWYgKGlzR2V0U3VtbWFyeURhdGFWZXJiKHZlcmIpICYmIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuTWF4Um93c10pIHtcbiAgICBleGVjdXRlUmVzcG9uc2UgPSBhZGp1c3REYXRhUm93TGVuZ3RoKGV4ZWN1dGVSZXNwb25zZSwgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5NYXhSb3dzXSBhcyBudW1iZXIpO1xuICB9XG5cbiAgaWYgKGlzR2V0VGFibGVEYXRhVmVyYih2ZXJiKSAmJiBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkNvbHVtbnNUb0luY2x1ZGVCeUlkXSkge1xuICAgIGV4ZWN1dGVSZXNwb25zZSA9IGFkanVzdERhdGFDb2x1bW5zKGV4ZWN1dGVSZXNwb25zZSwgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5Db2x1bW5zVG9JbmNsdWRlQnlJZF0gYXMgc3RyaW5nW10pO1xuICB9XG5cbiAgcmV0dXJuIGV4ZWN1dGVSZXNwb25zZTtcbn1cblxuZnVuY3Rpb24gaXNHZXRTdW1tYXJ5RGF0YVZlcmIodmVyYjogVmVyYklkKTogYm9vbGVhbiB7XG4gIHJldHVybiB2ZXJiID09PSBWZXJiSWQuR2V0RGF0YVN1bW1hcnlEYXRhO1xufVxuXG5mdW5jdGlvbiBpc0dldFRhYmxlRGF0YVZlcmIodmVyYjogVmVyYklkKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdmVyYiA9PT0gVmVyYklkLkdldERhdGFTdW1tYXJ5RGF0YSB8fFxuICAgIHZlcmIgPT09IFZlcmJJZC5HZXRVbmRlcmx5aW5nVGFibGVEYXRhIHx8XG4gICAgdmVyYiA9PT0gVmVyYklkLkdldExvZ2ljYWxUYWJsZURhdGEgfHxcbiAgICB2ZXJiID09PSBWZXJiSWQuR2V0RGF0YVNvdXJjZURhdGEgfHxcbiAgICB2ZXJiID09PSBWZXJiSWQuR2V0VW5kZXJseWluZ0RhdGFcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0RGF0YVJvd0xlbmd0aChleGVjdXRlUmVzcG9uc2U6IEV4ZWN1dGVSZXNwb25zZSwgbWF4Um93czogbnVtYmVyKTogRXhlY3V0ZVJlc3BvbnNlIHtcbiAgY29uc3QgdW5kZXJseWluZ0RhdGFUYWJsZSA9IGV4ZWN1dGVSZXNwb25zZS5yZXN1bHQgYXMgVW5kZXJseWluZ0RhdGFUYWJsZTtcbiAgaWYgKCF1bmRlcmx5aW5nRGF0YVRhYmxlLmRhdGEgfHwgIUFycmF5LmlzQXJyYXkodW5kZXJseWluZ0RhdGFUYWJsZS5kYXRhLmRhdGFUYWJsZSkpIHtcbiAgICByZXR1cm4gZXhlY3V0ZVJlc3BvbnNlO1xuICB9XG5cbiAgaWYgKG1heFJvd3MgPiAwICYmIG1heFJvd3MgPCB1bmRlcmx5aW5nRGF0YVRhYmxlLmRhdGEuZGF0YVRhYmxlLmxlbmd0aCkge1xuICAgIHVuZGVybHlpbmdEYXRhVGFibGUuZGF0YS5kYXRhVGFibGUubGVuZ3RoID0gbWF4Um93cztcbiAgfVxuICByZXR1cm4gZXhlY3V0ZVJlc3BvbnNlO1xufVxuXG5mdW5jdGlvbiBhZGp1c3REYXRhQ29sdW1ucyhleGVjdXRlUmVzcG9uc2U6IEV4ZWN1dGVSZXNwb25zZSwgY29sdW1uc1RvSW5jbHVkZTogc3RyaW5nW10pOiBFeGVjdXRlUmVzcG9uc2Uge1xuICBpZiAoY29sdW1uc1RvSW5jbHVkZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZXhlY3V0ZVJlc3BvbnNlO1xuICB9XG5cbiAgLy8gdmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIHZhbGlkIFVuZGVybHlpbmdEYXRhVGFibGVcbiAgY29uc3QgdW5kZXJseWluZ0RhdGFUYWJsZSA9IGV4ZWN1dGVSZXNwb25zZS5yZXN1bHQgYXMgVW5kZXJseWluZ0RhdGFUYWJsZTtcbiAgaWYgKCF1bmRlcmx5aW5nRGF0YVRhYmxlLmRhdGEgfHwgIUFycmF5LmlzQXJyYXkodW5kZXJseWluZ0RhdGFUYWJsZS5kYXRhLmRhdGFUYWJsZSkgfHwgIUFycmF5LmlzQXJyYXkodW5kZXJseWluZ0RhdGFUYWJsZS5kYXRhLmhlYWRlcnMpKSB7XG4gICAgcmV0dXJuIGV4ZWN1dGVSZXNwb25zZTtcbiAgfVxuXG4gIC8vIDEuIGZpbHRlciB0aGUgaGVhZGVycyB0byBvbmx5IGNvbHVtbnNUb0luY2x1ZGVcbiAgLy8gMi4gdXNlIHRoZSBuZXcgaGVhZGVycyB0byBmaWx0ZXIgYWxsIHJvd3NcbiAgLy8gMy4gdXBkYXRlIHRoZSBpbmRpY2VzIGluIG91ciBuZXcgaGVhZGVyc1xuICBjb25zdCBuZXdIZWFkZXJzOiBEYXRhSGVhZGVyW10gPSB1bmRlcmx5aW5nRGF0YVRhYmxlLmRhdGEuaGVhZGVycy5maWx0ZXIoKGhlYWRlciwgaW5kZXgpID0+XG4gICAgY29sdW1uc1RvSW5jbHVkZS5maW5kKChuYW1lKSA9PiBuYW1lID09PSBoZWFkZXIuZmllbGROYW1lKSxcbiAgKTtcbiAgdW5kZXJseWluZ0RhdGFUYWJsZS5kYXRhLmRhdGFUYWJsZS5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XG4gICAgdW5kZXJseWluZ0RhdGFUYWJsZS5kYXRhLmRhdGFUYWJsZVtpbmRleF0gPSByb3cuZmlsdGVyKFxuICAgICAgKHZhbHVlLCB2YWx1ZUluZGV4KSA9PiBuZXdIZWFkZXJzLmZpbmRJbmRleCgoaGVhZGVyKSA9PiBoZWFkZXIuaW5kZXggPT09IHZhbHVlSW5kZXgpICE9PSAtMSxcbiAgICApO1xuICB9KTtcbiAgbGV0IG5ld0luZGV4ID0gMDtcbiAgdW5kZXJseWluZ0RhdGFUYWJsZS5kYXRhLmhlYWRlcnMgPSBuZXdIZWFkZXJzLm1hcCgoaGVhZGVyKSA9PiB7XG4gICAgaGVhZGVyLmluZGV4ID0gbmV3SW5kZXgrKztcbiAgICByZXR1cm4gaGVhZGVyO1xuICB9KTtcblxuICByZXR1cm4gZXhlY3V0ZVJlc3BvbnNlO1xufVxuIiwiLy8gRXhwb3J0IGV2ZXJ5dGhpbmcgd2hpY2ggaGFkIGJlZW4gcHJldmlvdXNseSBpbiB0aGUgYXBpLXNoYXJlZCBtb2R1bGVcblxuZXhwb3J0IHsgQXBpVmVyc2lvbiB9IGZyb20gJy4vQXBpU2hhcmVkL0FwaVZlcnNpb24nO1xuZXhwb3J0IHsgRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzIH0gZnJvbSAnLi9BcGlTaGFyZWQvRW51bU1hcHBpbmdzL0V4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncyc7XG5leHBvcnQgKiBmcm9tICcuL0FwaVNoYXJlZC9Dcm9zc0ZyYW1lL0Nyb3NzRnJhbWVCb290c3RyYXAnO1xuZXhwb3J0IHsgQ3Jvc3NGcmFtZURpc3BhdGNoZXIgfSBmcm9tICcuL0FwaVNoYXJlZC9Dcm9zc0ZyYW1lL0Nyb3NzRnJhbWVEaXNwYXRjaGVyJztcbmV4cG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuL0FwaVNoYXJlZC9EYXRhU291cmNlJztcbmV4cG9ydCB7IEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyB9IGZyb20gJy4vQXBpU2hhcmVkL0VudW1NYXBwaW5ncy9JbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MnO1xuZXhwb3J0IHsgRXZlbnRMaXN0ZW5lck1hbmFnZXIgfSBmcm9tICcuL0FwaVNoYXJlZC9FdmVudExpc3RlbmVyTWFuYWdlcic7XG5leHBvcnQgeyBGaWVsZCB9IGZyb20gJy4vQXBpU2hhcmVkL0ZpZWxkJztcbmV4cG9ydCB7IEN1c3RvbVZpZXdJbXBsIH0gZnJvbSAnLi9BcGlTaGFyZWQvSW1wbC9DdXN0b21WaWV3SW1wbCc7XG5leHBvcnQgeyBEYXNoYm9hcmRJbXBsIH0gZnJvbSAnLi9BcGlTaGFyZWQvSW1wbC9EYXNoYm9hcmRJbXBsJztcbmV4cG9ydCB7IERhc2hib2FyZE9iamVjdEltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9JbXBsL0Rhc2hib2FyZE9iamVjdEltcGwnO1xuZXhwb3J0IHsgRGF0YVNvdXJjZUltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9JbXBsL0RhdGFTb3VyY2VJbXBsJztcbmV4cG9ydCB7IFBhcmFtZXRlckltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9JbXBsL1BhcmFtZXRlckltcGwnO1xuZXhwb3J0IHsgU2hlZXRJbXBsIH0gZnJvbSAnLi9BcGlTaGFyZWQvSW1wbC9TaGVldEltcGwnO1xuZXhwb3J0IHsgU2hlZXRJbmZvSW1wbCB9IGZyb20gJy4vQXBpU2hhcmVkL0ltcGwvU2hlZXRJbmZvSW1wbCc7XG5leHBvcnQgeyBTaW5nbGVFdmVudE1hbmFnZXJJbXBsIH0gZnJvbSAnLi9BcGlTaGFyZWQvSW1wbC9TaW5nbGVFdmVudE1hbmFnZXJJbXBsJztcbmV4cG9ydCB7IFN0b3J5SW1wbCB9IGZyb20gJy4vQXBpU2hhcmVkL0ltcGwvU3RvcnlJbXBsJztcbmV4cG9ydCB7IFN0b3J5UG9pbnRJbXBsIH0gZnJvbSAnLi9BcGlTaGFyZWQvSW1wbC9TdG9yeVBvaW50SW1wbCc7XG5leHBvcnQgeyBTdG9yeVBvaW50SW5mb0ltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9JbXBsL1N0b3J5UG9pbnRJbmZvSW1wbCc7XG5leHBvcnQgeyBXb3JrYm9va0ltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9JbXBsL1dvcmtib29rSW1wbCc7XG5leHBvcnQgeyBXb3Jrc2hlZXRJbXBsIH0gZnJvbSAnLi9BcGlTaGFyZWQvSW1wbC9Xb3Jrc2hlZXRJbXBsJztcbmV4cG9ydCB7IFBvaW50IH0gZnJvbSAnLi9BcGlTaGFyZWQvUG9pbnQnO1xuZXhwb3J0IHsgQW5ub3RhdGlvblNlcnZpY2UgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9Bbm5vdGF0aW9uU2VydmljZSc7XG5leHBvcnQgeyBEYXRhU291cmNlU2VydmljZSB9IGZyb20gJy4vQXBpU2hhcmVkL1NlcnZpY2VzL0RhdGFTb3VyY2VTZXJ2aWNlJztcbmV4cG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9GaWx0ZXJTZXJ2aWNlJztcbmV4cG9ydCB7IEdldERhdGFTZXJ2aWNlIH0gZnJvbSAnLi9BcGlTaGFyZWQvU2VydmljZXMvR2V0RGF0YVNlcnZpY2UnO1xuZXhwb3J0IHsgQ2xpZW50SW5mb1NlcnZpY2VJbXBsIH0gZnJvbSAnLi9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9DbGllbnRJbmZvU2VydmljZUltcGwnO1xuZXhwb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZUltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL05vdGlmaWNhdGlvblNlcnZpY2VJbXBsJztcbmV4cG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2VJbXBsQmFzZSwgUmVnaXN0cmF0aW9uIH0gZnJvbSAnLi9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9Ob3RpZmljYXRpb25TZXJ2aWNlSW1wbEJhc2UnO1xuZXhwb3J0IHsgU2VydmljZUltcGxCYXNlIH0gZnJvbSAnLi9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9TZXJ2aWNlSW1wbEJhc2UnO1xuZXhwb3J0IHsgU2l6ZVNlcnZpY2VJbXBsIH0gZnJvbSAnLi9BcGlTaGFyZWQvU2VydmljZXMvaW1wbC9TaXplU2VydmljZUltcGwnO1xuZXhwb3J0IHsgU3RvcnlBY3RpdmF0aW9uU2VydmljZUltcGwgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9pbXBsL1N0b3J5QWN0aXZhdGlvblNlcnZpY2VJbXBsJztcbmV4cG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UsIFVucmVnaXN0ZXJGbiB9IGZyb20gJy4vQXBpU2hhcmVkL1NlcnZpY2VzL05vdGlmaWNhdGlvblNlcnZpY2UnO1xuZXhwb3J0IHsgUGFyYW1ldGVyc1NlcnZpY2UgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9QYXJhbWV0ZXJzU2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9SZWdpc3RlckFsbFNoYXJlZFNlcnZpY2VzJztcbmV4cG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9TZWxlY3Rpb25TZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vQXBpU2hhcmVkL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeSc7XG5leHBvcnQgeyBTaXplU2VydmljZSB9IGZyb20gJy4vQXBpU2hhcmVkL1NlcnZpY2VzL1NpemVTZXJ2aWNlJztcbmV4cG9ydCB7IFN0b3J5QWN0aXZhdGlvblNlcnZpY2UgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9TdG9yeUFjdGl2YXRpb25TZXJ2aWNlJztcbmV4cG9ydCB7IFZpelNlcnZpY2UgfSBmcm9tICcuL0FwaVNoYXJlZC9TZXJ2aWNlcy9WaXpTZXJ2aWNlJztcbmV4cG9ydCB7IFNpbmdsZUV2ZW50TWFuYWdlciB9IGZyb20gJy4vQXBpU2hhcmVkL1NpbmdsZUV2ZW50TWFuYWdlcic7XG5leHBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuL0FwaVNoYXJlZC9UYWJsZWF1RXJyb3InO1xuZXhwb3J0IHsgRGVmZXJyZWQgfSBmcm9tICcuL0FwaVNoYXJlZC9VdGlscy9EZWZlcnJlZCc7XG5leHBvcnQgeyBFcnJvckhlbHBlcnMgfSBmcm9tICcuL0FwaVNoYXJlZC9VdGlscy9FcnJvckhlbHBlcnMnO1xuZXhwb3J0IHsgU2hlZXRVdGlscyB9IGZyb20gJy4vQXBpU2hhcmVkL1V0aWxzL1NoZWV0VXRpbHMnO1xuZXhwb3J0IHsgVmVyc2lvbk51bWJlciB9IGZyb20gJy4vQXBpU2hhcmVkL1ZlcnNpb25OdW1iZXInO1xuZXhwb3J0IHsgVmVyc2lvbmVkRXh0ZXJuYWxBcGlEaXNwYXRjaGVyIH0gZnJvbSAnLi9WZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXInO1xuIiwiaW1wb3J0IHsgVmVyc2lvbk51bWJlciB9IGZyb20gJy4vVmVyc2lvbk51bWJlcic7XG5pbXBvcnQgeyBWZXJzaW9uTnVtYmVyQ29udHJhY3QgfSBmcm9tICcuL1ZlcnNpb25OdW1iZXJDb250cmFjdCc7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgc2luZ2xldG9uIHdyYXBwZXIgb2YgVmVyc2lvbk51bWJlclxuICovXG5leHBvcnQgY2xhc3MgQXBpVmVyc2lvbiB7XG4gIC8vIFVzaW5nIHNvbWUgd2VicGFjayB0cmlja3MsIHdlIGNhbiBpbmplY3QgdGhpcyB2ZXJzaW9uIGludG8gb3VyIGNvZGUgKGtpbmRhIGxpa2UgYysrIHByZXByb2Nlc3NvciBzdHVmZilcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBWZXJzaW9uTnVtYmVyQ29udHJhY3Q7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgdmVyc2lvbiBudW1iZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBWZXJzaW9uTnVtYmVyQ29udHJhY3Qge1xuICAgIHJldHVybiBBcGlWZXJzaW9uLl9pbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgU2V0VmVyc2lvbk51bWJlcihudW1TdHJpbmc6IHN0cmluZywgaXNBbHBoYTogYm9vbGVhbik6IHZvaWQge1xuICAgIEFwaVZlcnNpb24uX2luc3RhbmNlID0gbmV3IFZlcnNpb25OdW1iZXIobnVtU3RyaW5nLCBpc0FscGhhKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IENvbm5lY3Rpb25EZXNjcmlwdGlvblN1bW1hcnkgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIGEgY29ubmVjdGlvbiBzdW1tYXJ5LlxuICogVGhpcyBkb2VzIG5vdCBmb2xsb3cgdGhlIEltcGwgcGF0dGVybiBhcyBpdCBpcyBqdXN0IGEgcHJvcGVydHkgYmFnLlxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvblN1bW1hcnkgaW1wbGVtZW50cyBDb250cmFjdC5Db25uZWN0aW9uU3VtbWFyeSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb25uZWN0aW9uSW5mbzogQ29ubmVjdGlvbkRlc2NyaXB0aW9uU3VtbWFyeSkge31cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbkluZm8ubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbkluZm8uaWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlcnZlclVSSSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uSW5mby5zZXJ2ZXJVUkk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbkluZm8udHlwZTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7XG4gIENvbW1hbmRSZXNwb25zZU1lc3NhZ2UsXG4gIENyb3NzRnJhbWVNZXNzZW5nZXIsXG4gIEluaXRpYWxpemF0aW9uT3B0aW9ucyxcbiAgTUVTU0FHSU5HX1ZFUlNJT04gYXMgQXBpTWVzc2FnaW5nVmVyc2lvbixcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IENyb3NzRnJhbWVEaXNwYXRjaGVyIH0gZnJvbSAnLi9Dcm9zc0ZyYW1lRGlzcGF0Y2hlcic7XG5cbi8vIENoZWNrcyB0byBzZWUgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYW4gaWZyYW1lIGN1cnJlbnRseTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzMyNjA3Ni84ODIxMTUzXG5mdW5jdGlvbiBpbklmcmFtZSh0aGlzV2luZG93OiBXaW5kb3cpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpc1dpbmRvdy5zZWxmICE9PSB0aGlzV2luZG93LnBhcmVudDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gYm9vdHN0cmFwIHRoZSBleHRlbnNpb24gd2l0aCBhIGNyb3NzLWZyYW1lIHBhcmVudCB3aGVyZSBUYWJsZWF1IGlzIHJ1bm5pbmdcbiAqXG4gKiBAcGFyYW0gdGhpc1dpbmRvdyBUaGUgd2luZG93IHdoaWNoIHdlIGFyZSBydW5uaW5nIGluIChpbmplY3RlZCBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VzKVxuICogQHBhcmFtIGludGVybmFsQ29udHJhY3RWZXJzaW9uIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgaW50ZXJuYWwgY29udHJhY3Qgd2UgYXJlIHVzaW5nXG4gKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggaXMgZG9pbmcgdGhlIGFjdHVhbCBib290c3RyYXBwaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb0Nyb3NzRnJhbWVCb290c3RyYXAoXG4gIHRoaXNXaW5kb3c6IFdpbmRvdyxcbiAgaW50ZXJuYWxDb250cmFjdFZlcnNpb246IENvbnRyYWN0LlZlcnNpb25OdW1iZXIsXG4gIG9wdGlvbnM6IEluaXRpYWxpemF0aW9uT3B0aW9ucyxcbik6IFByb21pc2U8Q29udHJhY3QuSW50ZXJuYWxBcGlEaXNwYXRjaGVyRmFjdG9yeT4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8Q29udHJhY3QuSW50ZXJuYWxBcGlEaXNwYXRjaGVyRmFjdG9yeT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBwYXJlbnQ6IFdpbmRvdztcblxuICAgIC8vIE5vcm1hbGx5LCB3ZSBhcmUgcnVubmluZyBpbnNpZGUgYW4gaWZyYW1lLiAgVGhlIGV4Y2VwdGlvbiB0byB0aGlzIGlzXG4gICAgLy8gd2hlbiB3ZSBhcmUgcnVubmluZyBhcyBhbiBleHRlbnNpb24gaW5zaWRlIGEgZGlhbG9nIGFzIHBhcnQgb2YgdGhlIFVJTmFtZXNwYWNlXG4gICAgLy8gZnVuY3Rpb25hbGl0eS4gIEluIHRoYXQgY2FzZSwgd2Ugd2FudCB0aGUgb3BlbmVyIG9mIHRoaXMgd2luZG93IHJhdGhlciB0aGFuIHRoZSBwYXJlbnQuXG4gICAgaWYgKCFpbklmcmFtZSh0aGlzV2luZG93KSkge1xuICAgICAgcGFyZW50ID0gdGhpc1dpbmRvdy5vcGVuZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudCA9IHRoaXNXaW5kb3cucGFyZW50O1xuICAgIH1cblxuICAgIGlmICghcGFyZW50KSB7XG4gICAgICByZWplY3QoJ1RoaXMgZXh0ZW5zaW9uIGlzIG5vdCBydW5uaW5nIGluc2lkZSBhbiBpZnJhbWUsIGRlc2t0b3AsIG9yIHBvcHVwIHdpbmRvdy4gSW5pdGlhbGl6YXRpb24gZmFpbGVkLicpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgbWVzc2VuZ2VyIHdoaWNoIHdpbGwgZG8gaGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoaXMgd2luZG93IGFuZCBvdXIgcGFyZW50XG4gICAgLy8gU2luY2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSB3ZSBhcmUgcnVubmluZyB5ZXQsIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGluaXRpYWwgb3JpZ2luICcqJy4gT25jZVxuICAgIC8vIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIG91ciBleHRlbnNpb24sIHdlIHdpbGwgbGltaXQgd2hlcmUgd2Ugc2VuZCBtZXNzYWdlc1xuICAgIGNvbnN0IG1lc3NlbmdlciA9IG5ldyBDcm9zc0ZyYW1lTWVzc2VuZ2VyKHRoaXNXaW5kb3csIHBhcmVudCwgJyonKTtcblxuICAgIC8vIFByZXBhcmUgdG8gc2VuZCBhbiBpbml0aWFsaXphdGlvbiBtZXNzYWdlIHRvIHRoZSBwYXJlbnQgZnJhbWVcbiAgICBjb25zdCBpbml0aWFsaXphdGlvbk1lc3NhZ2UgPSBtZXNzZW5nZXIucHJlcGFyZUluaXRpYWxpemF0aW9uTWVzc2FnZShpbnRlcm5hbENvbnRyYWN0VmVyc2lvbiwgQXBpTWVzc2FnaW5nVmVyc2lvbiwgb3B0aW9ucyk7XG5cbiAgICAvLyBXaGVuIHdlIHJlY2VpdmUgYSByZXNwb25zZSBiYWNrIGZyb20gdGhlIHBhcmVudCwgd2UgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBndWlkcyBtYXRjaCBhbmQgdGhlbiB3ZSBrbm93XG4gICAgLy8gdGhhdCB0aGUgcGFyZW50IGlzIGF3YXJlIG9mIHVzIGFuZCB3ZSBjYW4gc3RhcnQgY29tbXVuaWNhdGluZ1xuICAgIG1lc3Nlbmdlci5zZXRDb21tYW5kUmVzcG9uc2VNZXNzYWdlSGFuZGxlcihmdW5jdGlvbiAobXNnOiBDb21tYW5kUmVzcG9uc2VNZXNzYWdlKTogdm9pZCB7XG4gICAgICAvLyBWZXJpZnkgd2UgYXJlIGdldHRpbmcgYSByZXNwb25zZSBmcm9tIG91ciBpbml0aWFsaXplIG1lc3NhZ2VcbiAgICAgIGlmIChtc2cuY29tbWFuZEd1aWQgPT09IGluaXRpYWxpemF0aW9uTWVzc2FnZS5tZXNzYWdlR3VpZCkge1xuICAgICAgICAvLyBUaGUgdmVyc2lvbmluZyBvZiB0aGUgZGlzcGF0Y2hlciBoYXBwZW5zIG9uIHRoZSBvdGhlciBzaWRlIG9mIG91ciBmcmFtZSwgYW5kXG4gICAgICAgIC8vIGluIGEgd3JhcHBlciBvbiB0aGlzIHNpZGUuIFRoaXMgb25lIGRvZXNuJ3QgaGF2ZSBhbnkgdmVyc2lvbiBrbm93bGVkZ2UuXG4gICAgICAgIGNvbnN0IGRpc3BhdGNoZXJGYWN0b3J5ID0gKCkgPT4gbmV3IENyb3NzRnJhbWVEaXNwYXRjaGVyKG1lc3Nlbmdlcik7XG4gICAgICAgIHJlc29sdmUoZGlzcGF0Y2hlckZhY3RvcnkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTm93IHRoYXQgb3VyIGhhbmRsZXJzIGFyZSByZWFkeSwgc3RhcnQgbGlzdGVuaW5nIGFuZCBzZW5kIG91ciBpbml0aWFsaXphdGlvbiBtZXNzYWdlXG4gICAgbWVzc2VuZ2VyLnN0YXJ0TGlzdGVuaW5nKCk7XG4gICAgaW5pdGlhbGl6YXRpb25NZXNzYWdlLnNlbmQoKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgeyBFbWJlZGRpbmdFcnJvckNvZGVzIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7XG4gIENvbW1hbmRSZXNwb25zZU1lc3NhZ2UsXG4gIEV4ZWN1dGVQYXJhbWV0ZXJzLFxuICBFeGVjdXRlUmVzcG9uc2UsXG4gIEludGVybmFsQXBpRGlzcGF0Y2hlcixcbiAgTWVzc2VuZ2VyLFxuICBNb2RlbCxcbiAgTm90aWZpY2F0aW9uSGFuZGxlcixcbiAgTm90aWZpY2F0aW9uTWVzc2FnZSxcbiAgVmVyYklkLFxufSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnLi4vVGFibGVhdUVycm9yJztcblxuLyoqXG4gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJbnRlcm5hbEFwaURpc3BhdGNoZXIgaW50ZXJmYWNlIHdoaWNoIGZ1bmN0aW9ucyBieSBwYXNzaW5nIG1lc3NhZ2VzXG4gKiBhY3Jvc3MgYSBmcmFtZSBib3VuZGFyeS4gVGhpcyBpcyB1c3VhbGx5IGJldHdlZW4gdGhlIGNvZGUgd2hlcmUgb3VyIGphdnNjcmlwdCBsaWJyYXJ5IGhhcyBiZWVuIGluY2x1ZGVkXG4gKiBieSBhIDNyZCBwYXJ0eSBkZXYgYW5kIGFub3RoZXIgZnJhbWUgd2hlcmUgVGFibGVhdSBzZXJ2ZXIgaGFzIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDcm9zc0ZyYW1lRGlzcGF0Y2hlciBpbXBsZW1lbnRzIEludGVybmFsQXBpRGlzcGF0Y2hlciB7XG4gIC8vIENvbGxlY3Rpb24gb2YgcGVuZGluZyBwcm9taXNlcyB3aGljaCBhcmUgd2FpdGluZyB0byBiZSByZXNvbHZlZC4gV2hlbiB3ZSByZWNlaXZlIGEgcmVzcG9uc2UgYmFjayBmcm9tIHRoZSBvdGhlciBmcmFtZSxcbiAgLy8gdGhlc2UgcHJvbWlzZXMgY2FuIGJlIGVpdGhlciByZXNvbHZlZCBvciByZWplY3RlZFxuICBwcml2YXRlIF9wZW5kaW5nUHJvbWlzZXM6IHsgW21lc3NhZ2VHdWlkOiBzdHJpbmddOiB7IHJlc29sdmU6IChyZXNwb25zZTogRXhlY3V0ZVJlc3BvbnNlKSA9PiB2b2lkOyByZWplY3Q6IChlcnJvcjogTW9kZWwpID0+IHZvaWQgfSB9ID1cbiAgICB7fTtcblxuICAvLyBUaGUgY29sbGVjdGlvbiBvZiBub3RpZmljYXRpb24gaGFuZGxlcnMgd2hpY2ggaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIGRpc3BhdGNoZXJcbiAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uSGFuZGxlcnM6IEFycmF5PE5vdGlmaWNhdGlvbkhhbmRsZXI+ID0gW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQ3Jvc3NGcmFtZURpc3BhdGNoZXIgd2hpY2ggd2lsbCB1c2UgdGhlIGdpdmVuIG1lc3NlbmdlciB0byBjb21tdW5pY2F0ZVxuICAgKiBAcGFyYW0gX21lc3NlbmdlciBhbiBpbnN0YW50aWF0ZWQgYW5kIGxpc3RlbmluZyBtZXNzZW5nZXIgb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfbWVzc2VuZ2VyOiBNZXNzZW5nZXIpIHtcbiAgICBpZiAoIXRoaXMuX21lc3Nlbmdlcikge1xuICAgICAgdGhyb3cgJ01pc3NpbmcgbWVzc2VuZ2VyIG9iamVjdCc7XG4gICAgfVxuXG4gICAgLy8gU2V0IHVwIG91ciBtZXNzYWdlIGhhbmRsZXJzLiBXZSBvbmx5IGNhcmUgYWJvdXQgaW5jb21pbmcgbm90aWZpY2F0aW9ucyBhbmQgY29tbWFuZCByZXNwb25zZXNcbiAgICB0aGlzLl9tZXNzZW5nZXIuc2V0Q29tbWFuZFJlc3BvbnNlTWVzc2FnZUhhbmRsZXIodGhpcy5vbkNvbW1hbmRSZXNwb25zZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl9tZXNzZW5nZXIuc2V0Tm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIodGhpcy5vbk5vdGlmaWNhdGlvbi5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8vLy8vLyBTdGFydCBJbnRlcm5hbEFwaURpc3BhdGNoZXIgaW1wbGVtZW50YXRpb25cblxuICBwdWJsaWMgZXhlY3V0ZSh2ZXJiOiBWZXJiSWQsIHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzKTogUHJvbWlzZTxFeGVjdXRlUmVzcG9uc2U+IHtcbiAgICAvLyBUbyBleGVjdXRlIGEgdmVyYiwgd2UgZmlyc3QgcHJlcGFyZSBhIGNvbW1hbmQgbWVzc2FnZSBhbmQgdGhlbiBkZWZpbmUgYSBwcm9taXNlLlxuICAgIGNvbnN0IHByZXBhcmVkTWVzc2FnZSA9IHRoaXMuX21lc3Nlbmdlci5wcmVwYXJlQ29tbWFuZE1lc3NhZ2UodmVyYiwgcGFyYW1ldGVycyk7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPEV4ZWN1dGVSZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gU2F2ZSBvZmYgdGhlIHBlbmRpbmcgcHJvbWlzZSBieSB0aGUgbWVzc2FnZUd1aWQgd2UgYXJlIGFib3V0IHRvIHNlbmQuIFdoZW4gYSByZXNwb25zZSBpc1xuICAgICAgLy8gcmVjZWl2ZWQsIHdlJ2xsIGJlIGFibGUgdG8gcmVzb2x2ZSB0aGlzIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0XG4gICAgICB0aGlzLl9wZW5kaW5nUHJvbWlzZXNbcHJlcGFyZWRNZXNzYWdlLm1lc3NhZ2VHdWlkXSA9IHsgcmVzb2x2ZTogcmVzb2x2ZSwgcmVqZWN0OiByZWplY3QgfTtcbiAgICB9KTtcblxuICAgIC8vIEFjdHVhbGx5IHNlbmQgdGhlIG1lc3NhZ2UgYW5kIHJldHVybiB0aGUgcHJvbWlzZVxuICAgIHByZXBhcmVkTWVzc2FnZS5zZW5kKCk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJOb3RpZmljYXRpb25IYW5kbGVyKGhhbmRsZXI6IE5vdGlmaWNhdGlvbkhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICB9XG5cbiAgcHVibGljIHVucmVnaXN0ZXJOb3RpZmljYXRpb25IYW5kbGVyKGhhbmRsZXI6IE5vdGlmaWNhdGlvbkhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycyA9IHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmZpbHRlcigoaCkgPT4gaCAhPT0gaGFuZGxlcik7XG4gIH1cblxuICAvLy8vLy8gRW5kIEludGVybmFsQXBpRGlzcGF0Y2hlciBpbXBsZW1lbnRhdGlvblxuXG4gIHByaXZhdGUgb25Db21tYW5kUmVzcG9uc2UocmVzcG9uc2U6IENvbW1hbmRSZXNwb25zZU1lc3NhZ2UpOiB2b2lkIHtcbiAgICAvLyBXZSBnb3QgYSBjb21tYW5kIHJlc3BvbnNlLCBsb29rIHRocm91Z2ggdGhlIHBlbmRpbmcgcHJvbWlzZXMgYW5kIHJlc29sdmVcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1Byb21pc2VzKS5pbmRleE9mKHJlc3BvbnNlLmNvbW1hbmRHdWlkKSA8IDApIHtcbiAgICAgIHJldHVybjsgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgcmVmZXJlbmNlIHRvIHRoaXMgY29tbWFuZCwganVzdCByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwZW5kaW5nUHJvbWlzZSA9IHRoaXMuX3BlbmRpbmdQcm9taXNlc1tyZXNwb25zZS5jb21tYW5kR3VpZF07XG5cbiAgICAvLyBJZiB3ZSBoYXZlIGFuIGVycm9yIGRlZmluZWQsIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgcGVuZGluZ1Byb21pc2UucmVqZWN0KHJlc3BvbnNlLmVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBoYXZlIGRhdGEgZGVmaW5lZCwgcmVzb2x2ZSB0aGUgcHJvbWlzZVxuICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICBwZW5kaW5nUHJvbWlzZS5yZXNvbHZlKHsgcmVzdWx0OiByZXNwb25zZS5kYXRhIH0pO1xuICAgIH1cblxuICAgIC8vIENsZWFuIHVwIG91ciBwZW5kaW5nIHByb21pc2VzIG9iamVjdFxuICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5nUHJvbWlzZXNbcmVzcG9uc2UuY29tbWFuZEd1aWRdO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk5vdGlmaWNhdGlvbihub3RpZmljYXRpb25NZXNzYWdlOiBOb3RpZmljYXRpb25NZXNzYWdlKTogdm9pZCB7XG4gICAgLy8gR28gdGhyb3VnaCBlYWNoIG5vdGlmaWNhdGlvbiBoYW5kbGVyIHdlIGhhdmUgcmVnaXN0ZXJlZCBhbmQgbGV0IHRoZW0ga25vdyBhIG5vdGlmaWNhdGlvbiBjYW1lIGluXG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyKHsgbm90aWZpY2F0aW9uSWQ6IG5vdGlmaWNhdGlvbk1lc3NhZ2Uubm90aWZpY2F0aW9uSWQsIGRhdGE6IG5vdGlmaWNhdGlvbk1lc3NhZ2UuZGF0YSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSW5jYXNlIG9mIGEgSW5jb21wYXRpYmxlVmVyc2lvbkVycm9yLCByZS10aHJvdyB0aGUgZXJyb3IuXG4gICAgICAgIGlmICgoZSBhcyBUYWJsZWF1RXJyb3IpLmVycm9yQ29kZSA9PT0gRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbmNvbXBhdGlibGVWZXJzaW9uRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVsc2UgSWdub3JlICBzbyBpZiBvbmUgaGFuZGxlciBlcnJvcnMsIHRoZSBvdGhlciBzdGlsbCBnZXQgdGhlIG1lc3NhZ2UuXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZUltcGwgfSBmcm9tICcuL0ltcGwvRGF0YVNvdXJjZUltcGwnO1xuXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZSBpbXBsZW1lbnRzIENvbnRyYWN0LkRhdGFTb3VyY2Uge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfZGF0YVNvdXJjZUltcGw6IERhdGFTb3VyY2VJbXBsKSB7fVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW1wbC5uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW1wbC5pZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmllbGRzKCk6IEFycmF5PENvbnRyYWN0LkZpZWxkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbXBsLmZpZWxkcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXh0cmFjdFVwZGF0ZVRpbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUltcGwuZXh0cmFjdFVwZGF0ZVRpbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzRXh0cmFjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUltcGwuaXNFeHRyYWN0O1xuICB9XG5cbiAgcHVibGljIGdldCBpc1B1Ymxpc2hlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUltcGwuaXNQdWJsaXNoZWQ7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaGVkVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbXBsLnB1Ymxpc2hlZFVybCgpO1xuICB9XG5cbiAgcHVibGljIHJlZnJlc2hBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUltcGwucmVmcmVzaEFzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWN0aXZlVGFibGVzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5UYWJsZVN1bW1hcnk+PiB7XG4gICAgY29uc29sZS53YXJuKCdEYXRhU291cmNlLmdldEFjdGl2ZVRhYmxlc0FzeW5jIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgRGF0YVNvdXJjZS5nZXRMb2dpY2FsVGFibGVzQXN5bmMuJyk7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbXBsLmdldEFjdGl2ZVRhYmxlc0FzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29ubmVjdGlvblN1bW1hcmllc0FzeW5jKCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuQ29ubmVjdGlvblN1bW1hcnk+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbXBsLmdldENvbm5lY3Rpb25TdW1tYXJpZXNBc3luYygpO1xuICB9XG5cbiAgcHVibGljIGdldFVuZGVybHlpbmdEYXRhQXN5bmMob3B0aW9ucz86IENvbnRyYWN0LkRhdGFTb3VyY2VVbmRlcmx5aW5nRGF0YU9wdGlvbnMpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgICdEYXRhU291cmNlLmdldFVuZGVybHlpbmdEYXRhQXN5bmMgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnICtcbiAgICAgICAgJ0RhdGFTb3VyY2UuZ2V0TG9naWNhbFRhYmxlc0FzeW5jIGFuZCBEYXRhU291cmNlLmdldExvZ2ljYWxUYWJsZURhdGFBc3luYy4nLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbXBsLmdldFVuZGVybHlpbmdEYXRhQXN5bmMob3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9naWNhbFRhYmxlc0FzeW5jKCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuTG9naWNhbFRhYmxlPj4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW1wbC5nZXRMb2dpY2FsVGFibGVzQXN5bmMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2dpY2FsVGFibGVEYXRhQXN5bmMobG9naWNhbFRhYmxlSWQ6IHN0cmluZywgb3B0aW9ucz86IENvbnRyYWN0LkRhdGFTb3VyY2VVbmRlcmx5aW5nRGF0YU9wdGlvbnMpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW1wbC5nZXRMb2dpY2FsVGFibGVEYXRhQXN5bmMobG9naWNhbFRhYmxlSWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGdldExvZ2ljYWxUYWJsZURhdGFSZWFkZXJBc3luYyhcbiAgICBsb2dpY2FsVGFibGVJZDogc3RyaW5nLFxuICAgIHBhZ2VSb3dDb3VudD86IG51bWJlcixcbiAgICBvcHRpb25zPzogQ29udHJhY3QuRGF0YVNvdXJjZVVuZGVybHlpbmdEYXRhT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGVSZWFkZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUltcGwuZ2V0TG9naWNhbFRhYmxlRGF0YVJlYWRlckFzeW5jKGxvZ2ljYWxUYWJsZUlkLCBwYWdlUm93Q291bnQsIG9wdGlvbnMpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBEYXRlUmFuZ2VUeXBlIGFzIEV4dGVybmFsRGF0ZVJhbmdlVHlwZSxcbiAgRGlhbG9nU3R5bGUgYXMgRXh0ZXJuYWxEaWFsb2dTdHlsZSxcbiAgRmlsdGVyRG9tYWluVHlwZSBhcyBFeHRlcm5hbERvbWFpblR5cGUsXG4gIEZpbHRlck51bGxPcHRpb24gYXMgRXh0ZXJuYWxOdWxsT3B0aW9uLFxuICBGaWx0ZXJVcGRhdGVUeXBlIGFzIEV4dGVybmFsRmlsdGVyVXBkYXRlVHlwZSxcbiAgSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gIFBlcmlvZFR5cGUsXG4gIFJlcGxheVNwZWVkVHlwZSxcbiAgWm9uZVZpc2liaWxpdHlUeXBlLFxufSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgQXBpU2hvd0RhdGFUYWJsZUZvcm1hdCxcbiAgRGF0ZVJhbmdlVHlwZSBhcyBJbnRlcm5hbERhdGVSYW5nZVR5cGUsXG4gIERhdGVTdGVwUGVyaW9kLFxuICBEaWFsb2dTdHlsZSBhcyBJbnRlcm5hbERpYWxvZ1N0eWxlLFxuICBGaWx0ZXJEb21haW5UeXBlIGFzIEludGVybmFsRG9tYWluVHlwZSxcbiAgRmlsdGVyTnVsbE9wdGlvbiBhcyBJbnRlcm5hbE51bGxPcHRpb24sXG4gIEZpbHRlclVwZGF0ZVR5cGUgYXMgSW50ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLFxufSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRW51bUNvbnZlcnRlciB9IGZyb20gJy4uL1V0aWxzL0VudW1Db252ZXJ0ZXInO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTp0eXBlZGVmIC0gRGlzYWJsZSB0aGlzIHRvIG1ha2UgZGVjbGFyaW5nIHRoZXNlIGNsYXNzZXMgYSBiaXQgZWFzaWVyICovXG4vKipcbiAqIE1hcHMgZW51bXMgdXNlZCBieSB0aGUgZXh0ZXJuYWwtYXBpLWNvbnRyYWN0IHRvIHRoZSBlbnVtcyB1c2VkXG4gKiBpbiB0aGUgaW50ZXJuYWwtYXBpLWNvbnRyYWN0LCB3aGljaCBkZXZlbG9wZXJzIGNvZGUgYWdhaW5zdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncyB7XG4gIHB1YmxpYyBzdGF0aWMgZmlsdGVyRG9tYWluVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPEV4dGVybmFsRG9tYWluVHlwZSwgSW50ZXJuYWxEb21haW5UeXBlPih7XG4gICAgW0V4dGVybmFsRG9tYWluVHlwZS5SZWxldmFudF06IEludGVybmFsRG9tYWluVHlwZS5SZWxldmFudCxcbiAgICBbRXh0ZXJuYWxEb21haW5UeXBlLkRhdGFiYXNlXTogSW50ZXJuYWxEb21haW5UeXBlLkRhdGFiYXNlLFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIG51bGxPcHRpb25zID0gbmV3IEVudW1Db252ZXJ0ZXI8RXh0ZXJuYWxOdWxsT3B0aW9uLCBJbnRlcm5hbE51bGxPcHRpb24+KHtcbiAgICBbRXh0ZXJuYWxOdWxsT3B0aW9uLkFsbFZhbHVlc106IEludGVybmFsTnVsbE9wdGlvbi5BbGxWYWx1ZXMsXG4gICAgW0V4dGVybmFsTnVsbE9wdGlvbi5Ob25OdWxsVmFsdWVzXTogSW50ZXJuYWxOdWxsT3B0aW9uLk5vbk51bGxWYWx1ZXMsXG4gICAgW0V4dGVybmFsTnVsbE9wdGlvbi5OdWxsVmFsdWVzXTogSW50ZXJuYWxOdWxsT3B0aW9uLk51bGxWYWx1ZXMsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZmlsdGVyVXBkYXRlVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPEV4dGVybmFsRmlsdGVyVXBkYXRlVHlwZSwgSW50ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlPih7XG4gICAgW0V4dGVybmFsRmlsdGVyVXBkYXRlVHlwZS5BZGRdOiBJbnRlcm5hbEZpbHRlclVwZGF0ZVR5cGUuQWRkLFxuICAgIFtFeHRlcm5hbEZpbHRlclVwZGF0ZVR5cGUuQWxsXTogSW50ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLkFsbCxcbiAgICBbRXh0ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLlJlbW92ZV06IEludGVybmFsRmlsdGVyVXBkYXRlVHlwZS5SZW1vdmUsXG4gICAgW0V4dGVybmFsRmlsdGVyVXBkYXRlVHlwZS5SZXBsYWNlXTogSW50ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLlJlcGxhY2UsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgc2V0VmlzaWJpbGl0eVR5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxab25lVmlzaWJpbGl0eVR5cGUsIGJvb2xlYW4+KHtcbiAgICBbWm9uZVZpc2liaWxpdHlUeXBlLlNob3ddOiB0cnVlLFxuICAgIFtab25lVmlzaWJpbGl0eVR5cGUuSGlkZV06IGZhbHNlLFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIHNldFJlcGxheVNwZWVkVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPFJlcGxheVNwZWVkVHlwZSwgbnVtYmVyPih7XG4gICAgLy8gdGhlc2UgbnVtYmVycyBhcmUgZHVyYXRpb24gbXVsdGlwbGllcnNcbiAgICAvLyAyLjAsIGZvciBleGFtcGxlLCBkb3VibGVzIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmVwbGF5LCBzbG93aW5nIGl0IGRvd24gdG8gMC41eCBzcGVlZFxuICAgIFtSZXBsYXlTcGVlZFR5cGUuU2xvd106IDIuMCxcbiAgICBbUmVwbGF5U3BlZWRUeXBlLk5vcm1hbF06IDEuMCxcbiAgICBbUmVwbGF5U3BlZWRUeXBlLkZhc3RdOiAwLjUsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgc2hvd0RhdGFUYWJsZUZvcm1hdFR5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxJbmNsdWRlRGF0YVZhbHVlc09wdGlvbiwgQXBpU2hvd0RhdGFUYWJsZUZvcm1hdD4oe1xuICAgIFtJbmNsdWRlRGF0YVZhbHVlc09wdGlvbi5BbGxWYWx1ZXNdOiBBcGlTaG93RGF0YVRhYmxlRm9ybWF0Lk5hdGl2ZUFuZEZvcm1hdHRlZFZhbHVlcyxcbiAgICBbSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24uT25seU5hdGl2ZVZhbHVlc106IEFwaVNob3dEYXRhVGFibGVGb3JtYXQuTmF0aXZlVmFsdWVzT25seSxcbiAgICBbSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24uT25seUZvcm1hdHRlZFZhbHVlc106IEFwaVNob3dEYXRhVGFibGVGb3JtYXQuRm9ybWF0dGVkVmFsdWVzT25seSxcbiAgfSk7XG5cbiAgcHVibGljIHN0YXRpYyBwZXJpb2RUeXBlID0gbmV3IEVudW1Db252ZXJ0ZXI8UGVyaW9kVHlwZSwgRGF0ZVN0ZXBQZXJpb2Q+KHtcbiAgICBbUGVyaW9kVHlwZS5ZZWFyc106IERhdGVTdGVwUGVyaW9kLlllYXJzLFxuICAgIFtQZXJpb2RUeXBlLlF1YXJ0ZXJzXTogRGF0ZVN0ZXBQZXJpb2QuUXVhcnRlcnMsXG4gICAgW1BlcmlvZFR5cGUuTW9udGhzXTogRGF0ZVN0ZXBQZXJpb2QuTW9udGhzLFxuICAgIFtQZXJpb2RUeXBlLldlZWtzXTogRGF0ZVN0ZXBQZXJpb2QuV2Vla3MsXG4gICAgW1BlcmlvZFR5cGUuRGF5c106IERhdGVTdGVwUGVyaW9kLkRheXMsXG4gICAgW1BlcmlvZFR5cGUuSG91cnNdOiBEYXRlU3RlcFBlcmlvZC5Ib3VycyxcbiAgICBbUGVyaW9kVHlwZS5NaW51dGVzXTogRGF0ZVN0ZXBQZXJpb2QuTWludXRlcyxcbiAgICBbUGVyaW9kVHlwZS5TZWNvbmRzXTogRGF0ZVN0ZXBQZXJpb2QuU2Vjb25kcyxcbiAgfSk7XG5cbiAgcHVibGljIHN0YXRpYyBkYXRlUmFuZ2VUeXBlID0gbmV3IEVudW1Db252ZXJ0ZXI8RXh0ZXJuYWxEYXRlUmFuZ2VUeXBlLCBJbnRlcm5hbERhdGVSYW5nZVR5cGU+KHtcbiAgICBbRXh0ZXJuYWxEYXRlUmFuZ2VUeXBlLkxhc3RdOiBJbnRlcm5hbERhdGVSYW5nZVR5cGUuTGFzdCxcbiAgICBbRXh0ZXJuYWxEYXRlUmFuZ2VUeXBlLkxhc3ROXTogSW50ZXJuYWxEYXRlUmFuZ2VUeXBlLkxhc3ROLFxuICAgIFtFeHRlcm5hbERhdGVSYW5nZVR5cGUuTmV4dF06IEludGVybmFsRGF0ZVJhbmdlVHlwZS5OZXh0LFxuICAgIFtFeHRlcm5hbERhdGVSYW5nZVR5cGUuTmV4dE5dOiBJbnRlcm5hbERhdGVSYW5nZVR5cGUuTmV4dE4sXG4gICAgW0V4dGVybmFsRGF0ZVJhbmdlVHlwZS5DdXJyZW50XTogSW50ZXJuYWxEYXRlUmFuZ2VUeXBlLkN1cnJlbnQsXG4gICAgW0V4dGVybmFsRGF0ZVJhbmdlVHlwZS5Ub0RhdGVdOiBJbnRlcm5hbERhdGVSYW5nZVR5cGUuVG9EYXRlLFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIGRpYWxvZ1N0eWxlcyA9IG5ldyBFbnVtQ29udmVydGVyPEV4dGVybmFsRGlhbG9nU3R5bGUsIEludGVybmFsRGlhbG9nU3R5bGU+KHtcbiAgICBbRXh0ZXJuYWxEaWFsb2dTdHlsZS5XaW5kb3ddOiBJbnRlcm5hbERpYWxvZ1N0eWxlLldpbmRvdyxcbiAgICBbRXh0ZXJuYWxEaWFsb2dTdHlsZS5Nb2RhbF06IEludGVybmFsRGlhbG9nU3R5bGUuTW9kYWwsXG4gICAgW0V4dGVybmFsRGlhbG9nU3R5bGUuTW9kZWxlc3NdOiBJbnRlcm5hbERpYWxvZ1N0eWxlLk1vZGVsZXNzLFxuICB9KTtcbn1cbi8qIHRzbGludDplbmFibGU6dHlwZWRlZiAqL1xuIiwiaW1wb3J0IHtcbiAgQW5ub3RhdGlvblR5cGUgYXMgRXh0ZXJuYWxBbm5vdGF0aW9uVHlwZSxcbiAgQ2xhc3NOYW1lS2V5IGFzIEV4dGVybmFsQ2xhc3NOYW1lS2V5LFxuICBDb2x1bW5UeXBlIGFzIEV4dGVybmFsQ29sdW1uVHlwZSxcbiAgRGFzaGJvYXJkT2JqZWN0VHlwZSBhcyBFeHRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUsXG4gIERhdGFUeXBlIGFzIEV4dGVybmFsRGF0YVR5cGUsXG4gIERhdGVSYW5nZVR5cGUgYXMgRXh0ZXJuYWxEYXRlUmFuZ2VUeXBlLFxuICBFcnJvckNvZGVzIGFzIEV4dGVybmFsRXJyb3JDb2RlcyxcbiAgRXh0ZW5zaW9uQ29udGV4dCBhcyBFeHRlcm5hbEV4dGVuc2lvbnNDb250ZXh0LFxuICBFeHRlbnNpb25Nb2RlIGFzIEV4dGVybmFsRXh0ZW5zaW9uc01vZGUsXG4gIEZpZWxkQWdncmVnYXRpb25UeXBlIGFzIEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUsXG4gIEZpZWxkUm9sZVR5cGUgYXMgRXh0ZXJuYWxGaWVsZFJvbGVUeXBlLFxuICBGaWx0ZXJUeXBlIGFzIEV4dGVybmFsRmlsdGVyVHlwZSxcbiAgRmlsdGVyVXBkYXRlVHlwZSBhcyBFeHRlcm5hbEZpbHRlclVwZGF0ZVR5cGUsXG4gIEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUgYXMgRXh0ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLFxuICBQYXJhbWV0ZXJWYWx1ZVR5cGUgYXMgRXh0ZXJuYWxQYXJhbWV0ZXJWYWx1ZVR5cGUsXG4gIFBlcmlvZFR5cGUgYXMgRXh0ZXJuYWxEYXRlUGVyaW9kLFxuICBTaGVldFR5cGUgYXMgRXh0ZXJuYWxTaGVldFR5cGUsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQge1xuICBBbm5vdGF0ZUVudW0gYXMgSW50ZXJuYWxBbm5vdGF0aW9uVHlwZSxcbiAgQ2xhc3NOYW1lS2V5IGFzIEludGVybmFsQ2xhc3NOYW1lS2V5LFxuICBDb2x1bW5UeXBlIGFzIEludGVybmFsQ29sdW1uVHlwZSxcbiAgRGFzaGJvYXJkT2JqZWN0VHlwZSBhcyBJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUsXG4gIERhdGFUeXBlIGFzIEludGVybmFsRGF0YVR5cGUsXG4gIERhdGVSYW5nZVR5cGUgYXMgSW50ZXJuYWxEYXRlUmFuZ2VUeXBlLFxuICBEYXRlU3RlcFBlcmlvZCBhcyBJbnRlcm5hbERhdGVTdGVwUGVyaW9kLFxuICBEb21haW5SZXN0cmljdGlvblR5cGUgYXMgSW50ZXJuYWxEb21haW5SZXN0cmljdGlvblR5cGUsXG4gIEVycm9yQ29kZXMgYXMgSW50ZXJuYWxFcnJvckNvZGVzLFxuICBFeHRlbnNpb25Db250ZXh0IGFzIEludGVybmFsRXh0ZW5zaW9uc0NvbnRleHQsXG4gIEV4dGVuc2lvbk1vZGUgYXMgSW50ZXJuYWxFeHRlbnNpb25zTW9kZSxcbiAgRmllbGRBZ2dyZWdhdGlvblR5cGUgYXMgSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZSxcbiAgRmllbGRSb2xlVHlwZSBhcyBJbnRlcm5hbEZpZWxkUm9sZVR5cGUsXG4gIEZpbHRlclR5cGUgYXMgSW50ZXJuYWxGaWx0ZXJUeXBlLFxuICBGaWx0ZXJVcGRhdGVUeXBlIGFzIEludGVybmFsRmlsdGVyVXBkYXRlVHlwZSxcbiAgSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZSBhcyBJbnRlcm5hbEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUsXG4gIFNoZWV0VHlwZSBhcyBJbnRlcm5hbFNoZWV0VHlwZSxcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEVudW1Db252ZXJ0ZXIgfSBmcm9tICcuLi9VdGlscy9FbnVtQ29udmVydGVyJztcblxuLyogdHNsaW50OmRpc2FibGU6dHlwZWRlZiAtIERpc2FibGUgdGhpcyB0byBtYWtlIGRlY2xhcmluZyB0aGVzZSBjbGFzc2VzIGEgYml0IGVhc2llciAqL1xuLyoqXG4gKiBNYXBzIGVudW1zIHVzZWQgYnkgdGhlIGludGVybmFsLWFwaS1jb250cmFjdCB0byB0aGUgZW51bXMgdXNlZFxuICogaW4gdGhlIGV4dGVybmFsLWFwaS1jb250cmFjdCwgd2hpY2ggZGV2ZWxvcGVycyBjb2RlIGFnYWluc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3Mge1xuICBwdWJsaWMgc3RhdGljIGV4dGVuc2lvbkNvbnRleHQgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbEV4dGVuc2lvbnNDb250ZXh0LCBFeHRlcm5hbEV4dGVuc2lvbnNDb250ZXh0Pih7XG4gICAgW0ludGVybmFsRXh0ZW5zaW9uc0NvbnRleHQuRGVza3RvcF06IEV4dGVybmFsRXh0ZW5zaW9uc0NvbnRleHQuRGVza3RvcCxcbiAgICBbSW50ZXJuYWxFeHRlbnNpb25zQ29udGV4dC5TZXJ2ZXJdOiBFeHRlcm5hbEV4dGVuc2lvbnNDb250ZXh0LlNlcnZlcixcbiAgfSk7XG5cbiAgcHVibGljIHN0YXRpYyBleHRlbnNpb25Nb2RlID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxFeHRlbnNpb25zTW9kZSwgRXh0ZXJuYWxFeHRlbnNpb25zTW9kZT4oe1xuICAgIFtJbnRlcm5hbEV4dGVuc2lvbnNNb2RlLkF1dGhvcmluZ106IEV4dGVybmFsRXh0ZW5zaW9uc01vZGUuQXV0aG9yaW5nLFxuICAgIFtJbnRlcm5hbEV4dGVuc2lvbnNNb2RlLlZpZXdpbmddOiBFeHRlcm5hbEV4dGVuc2lvbnNNb2RlLlZpZXdpbmcsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgY29sdW1uVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPEludGVybmFsQ29sdW1uVHlwZSwgRXh0ZXJuYWxDb2x1bW5UeXBlPih7XG4gICAgW0ludGVybmFsQ29sdW1uVHlwZS5Db250aW51b3VzXTogRXh0ZXJuYWxDb2x1bW5UeXBlLkNvbnRpbnVvdXMsXG4gICAgW0ludGVybmFsQ29sdW1uVHlwZS5EaXNjcmV0ZV06IEV4dGVybmFsQ29sdW1uVHlwZS5EaXNjcmV0ZSxcbiAgfSk7XG5cbiAgcHVibGljIHN0YXRpYyBmaWVsZEFnZ3JlZ2F0aW9uVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPEludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUsIEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGU+KHtcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5BdHRyXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5BdHRyLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkF2Z106IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuQXZnLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkNvdW50XTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Db3VudCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Db3VudGRdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkNvdW50ZCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5EYXldOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkRheSxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5FbmRdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkVuZCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Ib3VyXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Ib3VyLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLkluT3V0XTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Jbk91dCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5LdXJ0b3Npc106IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuS3VydG9zaXMsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTWF4XTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5NYXgsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTWR5XTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5NZHksXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTWVkaWFuXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5NZWRpYW4sXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTWluXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5NaW4sXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTWludXRlXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5NaW51dGUsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTW9udGhZZWFyXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Nb250aFllYXIsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTm9uZV06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuTm9uZSxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5RdHJdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlF0cixcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5RdWFydDFdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlF1YXJ0MSxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5RdWFydDNdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlF1YXJ0MyxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5TZWNvbmRdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlNlY29uZCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5Ta2V3bmVzc106IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuU2tld25lc3MsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuU3RkZXZdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlN0ZGV2LFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlN0ZGV2cF06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuU3RkZXZwLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlN1bV06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuU3VtLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlRydW5jRGF5XTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5UcnVuY0RheSxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5UcnVuY0hvdXJdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlRydW5jSG91cixcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5UcnVuY01pbnV0ZV06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNNaW51dGUsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNNb250aF06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNNb250aCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5UcnVuY1F0cl06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNRdHIsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNTZWNvbmRdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlRydW5jU2Vjb25kLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlRydW5jV2Vla106IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNXZWVrLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlRydW5jWWVhcl06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVHJ1bmNZZWFyLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlVzZXJdOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLlVzZXIsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVmFyXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5WYXIsXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVmFycF06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuVmFycCxcbiAgICBbSW50ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5XZWVrXTogRXh0ZXJuYWxGaWVsZEFnZ3JlZ2F0aW9uVHlwZS5XZWVrLFxuICAgIFtJbnRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLldlZWtkYXldOiBFeHRlcm5hbEZpZWxkQWdncmVnYXRpb25UeXBlLldlZWtkYXksXG4gICAgW0ludGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuWWVhcl06IEV4dGVybmFsRmllbGRBZ2dyZWdhdGlvblR5cGUuWWVhcixcbiAgfSk7XG5cbiAgcHVibGljIHN0YXRpYyBmaWVsZFJvbGVUeXBlID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxGaWVsZFJvbGVUeXBlLCBFeHRlcm5hbEZpZWxkUm9sZVR5cGU+KHtcbiAgICBbSW50ZXJuYWxGaWVsZFJvbGVUeXBlLkRpbWVuc2lvbl06IEV4dGVybmFsRmllbGRSb2xlVHlwZS5EaW1lbnNpb24sXG4gICAgW0ludGVybmFsRmllbGRSb2xlVHlwZS5NZWFzdXJlXTogRXh0ZXJuYWxGaWVsZFJvbGVUeXBlLk1lYXN1cmUsXG4gICAgW0ludGVybmFsRmllbGRSb2xlVHlwZS5Vbmtub3duXTogRXh0ZXJuYWxGaWVsZFJvbGVUeXBlLlVua25vd24sXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgc2hlZXRUeXBlID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxTaGVldFR5cGUsIEV4dGVybmFsU2hlZXRUeXBlPih7XG4gICAgW0ludGVybmFsU2hlZXRUeXBlLkRhc2hib2FyZF06IEV4dGVybmFsU2hlZXRUeXBlLkRhc2hib2FyZCxcbiAgICBbSW50ZXJuYWxTaGVldFR5cGUuU3RvcnldOiBFeHRlcm5hbFNoZWV0VHlwZS5TdG9yeSxcbiAgICBbSW50ZXJuYWxTaGVldFR5cGUuV29ya3NoZWV0XTogRXh0ZXJuYWxTaGVldFR5cGUuV29ya3NoZWV0LFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIGRhc2hib2FyZE9iamVjdFR5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUsIEV4dGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZT4oe1xuICAgIFtJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuRXh0ZW5zaW9uXTogRXh0ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLkV4dGVuc2lvbixcbiAgICBbSW50ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLkJsYW5rXTogRXh0ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLkJsYW5rLFxuICAgIFtJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuSW1hZ2VdOiBFeHRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuSW1hZ2UsXG4gICAgW0ludGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5MZWdlbmRdOiBFeHRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuTGVnZW5kLFxuICAgIFtJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuUGFnZUZpbHRlcl06IEV4dGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5QYWdlRmlsdGVyLFxuICAgIFtJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuUGFyYW1ldGVyQ29udHJvbF06IEV4dGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5QYXJhbWV0ZXJDb250cm9sLFxuICAgIFtJbnRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuUXVpY2tGaWx0ZXJdOiBFeHRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuUXVpY2tGaWx0ZXIsXG4gICAgW0ludGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5UZXh0XTogRXh0ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLlRleHQsXG4gICAgW0ludGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5UaXRsZV06IEV4dGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5UaXRsZSxcbiAgICBbSW50ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLldlYlBhZ2VdOiBFeHRlcm5hbERhc2hib2FyZE9iamVjdFR5cGUuV2ViUGFnZSxcbiAgICBbSW50ZXJuYWxEYXNoYm9hcmRPYmplY3RUeXBlLldvcmtzaGVldF06IEV4dGVybmFsRGFzaGJvYXJkT2JqZWN0VHlwZS5Xb3Jrc2hlZXQsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZGF0YVR5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbERhdGFUeXBlLCBFeHRlcm5hbERhdGFUeXBlPih7XG4gICAgW0ludGVybmFsRGF0YVR5cGUuQm9vbF06IEV4dGVybmFsRGF0YVR5cGUuQm9vbCxcbiAgICBbSW50ZXJuYWxEYXRhVHlwZS5EYXRlXTogRXh0ZXJuYWxEYXRhVHlwZS5EYXRlLFxuICAgIFtJbnRlcm5hbERhdGFUeXBlLkRhdGVUaW1lXTogRXh0ZXJuYWxEYXRhVHlwZS5EYXRlVGltZSxcbiAgICBbSW50ZXJuYWxEYXRhVHlwZS5GbG9hdF06IEV4dGVybmFsRGF0YVR5cGUuRmxvYXQsXG4gICAgW0ludGVybmFsRGF0YVR5cGUuSW50XTogRXh0ZXJuYWxEYXRhVHlwZS5JbnQsXG4gICAgW0ludGVybmFsRGF0YVR5cGUuU3RyaW5nXTogRXh0ZXJuYWxEYXRhVHlwZS5TdHJpbmcsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZmlsdGVyVXBkYXRlVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPEludGVybmFsRmlsdGVyVXBkYXRlVHlwZSwgRXh0ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlPih7XG4gICAgW0ludGVybmFsRmlsdGVyVXBkYXRlVHlwZS5BZGRdOiBFeHRlcm5hbEZpbHRlclVwZGF0ZVR5cGUuQWRkLFxuICAgIFtJbnRlcm5hbEZpbHRlclVwZGF0ZVR5cGUuQWxsXTogRXh0ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLkFsbCxcbiAgICBbSW50ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLlJlbW92ZV06IEV4dGVybmFsRmlsdGVyVXBkYXRlVHlwZS5SZW1vdmUsXG4gICAgW0ludGVybmFsRmlsdGVyVXBkYXRlVHlwZS5SZXBsYWNlXTogRXh0ZXJuYWxGaWx0ZXJVcGRhdGVUeXBlLlJlcGxhY2UsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgYWxsb3dhYmxlVmFsdWVzID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxEb21haW5SZXN0cmljdGlvblR5cGUsIEV4dGVybmFsUGFyYW1ldGVyVmFsdWVUeXBlPih7XG4gICAgW0ludGVybmFsRG9tYWluUmVzdHJpY3Rpb25UeXBlLkFsbF06IEV4dGVybmFsUGFyYW1ldGVyVmFsdWVUeXBlLkFsbCxcbiAgICBbSW50ZXJuYWxEb21haW5SZXN0cmljdGlvblR5cGUuTGlzdF06IEV4dGVybmFsUGFyYW1ldGVyVmFsdWVUeXBlLkxpc3QsXG4gICAgW0ludGVybmFsRG9tYWluUmVzdHJpY3Rpb25UeXBlLlJhbmdlXTogRXh0ZXJuYWxQYXJhbWV0ZXJWYWx1ZVR5cGUuUmFuZ2UsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZVN0ZXBQZXJpb2QgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbERhdGVTdGVwUGVyaW9kLCBFeHRlcm5hbERhdGVQZXJpb2Q+KHtcbiAgICBbSW50ZXJuYWxEYXRlU3RlcFBlcmlvZC5ZZWFyc106IEV4dGVybmFsRGF0ZVBlcmlvZC5ZZWFycyxcbiAgICBbSW50ZXJuYWxEYXRlU3RlcFBlcmlvZC5RdWFydGVyc106IEV4dGVybmFsRGF0ZVBlcmlvZC5RdWFydGVycyxcbiAgICBbSW50ZXJuYWxEYXRlU3RlcFBlcmlvZC5Nb250aHNdOiBFeHRlcm5hbERhdGVQZXJpb2QuTW9udGhzLFxuICAgIFtJbnRlcm5hbERhdGVTdGVwUGVyaW9kLldlZWtzXTogRXh0ZXJuYWxEYXRlUGVyaW9kLldlZWtzLFxuICAgIFtJbnRlcm5hbERhdGVTdGVwUGVyaW9kLkRheXNdOiBFeHRlcm5hbERhdGVQZXJpb2QuRGF5cyxcbiAgICBbSW50ZXJuYWxEYXRlU3RlcFBlcmlvZC5Ib3Vyc106IEV4dGVybmFsRGF0ZVBlcmlvZC5Ib3VycyxcbiAgICBbSW50ZXJuYWxEYXRlU3RlcFBlcmlvZC5NaW51dGVzXTogRXh0ZXJuYWxEYXRlUGVyaW9kLk1pbnV0ZXMsXG4gICAgW0ludGVybmFsRGF0ZVN0ZXBQZXJpb2QuU2Vjb25kc106IEV4dGVybmFsRGF0ZVBlcmlvZC5TZWNvbmRzLFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIGRhdGVSYW5nZVR5cGUgPSBuZXcgRW51bUNvbnZlcnRlcjxJbnRlcm5hbERhdGVSYW5nZVR5cGUsIEV4dGVybmFsRGF0ZVJhbmdlVHlwZT4oe1xuICAgIFtJbnRlcm5hbERhdGVSYW5nZVR5cGUuQ3VycmVudF06IEV4dGVybmFsRGF0ZVJhbmdlVHlwZS5DdXJyZW50LFxuICAgIFtJbnRlcm5hbERhdGVSYW5nZVR5cGUuTGFzdF06IEV4dGVybmFsRGF0ZVJhbmdlVHlwZS5MYXN0LFxuICAgIFtJbnRlcm5hbERhdGVSYW5nZVR5cGUuTGFzdE5dOiBFeHRlcm5hbERhdGVSYW5nZVR5cGUuTGFzdE4sXG4gICAgW0ludGVybmFsRGF0ZVJhbmdlVHlwZS5OZXh0XTogRXh0ZXJuYWxEYXRlUmFuZ2VUeXBlLk5leHQsXG4gICAgW0ludGVybmFsRGF0ZVJhbmdlVHlwZS5OZXh0Tl06IEV4dGVybmFsRGF0ZVJhbmdlVHlwZS5OZXh0TixcbiAgICBbSW50ZXJuYWxEYXRlUmFuZ2VUeXBlLlRvRGF0ZV06IEV4dGVybmFsRGF0ZVJhbmdlVHlwZS5Ub0RhdGUsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgZXJyb3JDb2RlID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxFcnJvckNvZGVzLCBFeHRlcm5hbEVycm9yQ29kZXM+KFxuICAgIHtcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuSU5JVElBTElaQVRJT05fRVJST1JdOiBFeHRlcm5hbEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvcixcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuSU5URVJOQUxfRVJST1JdOiBFeHRlcm5hbEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvcixcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuTUlTU0lOR19FTlVNX01BUFBJTkddOiBFeHRlcm5hbEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvcixcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuTUlTU0lOR19QQVJBTUVURVJdOiBFeHRlcm5hbEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvcixcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuUEVSTUlTU0lPTl9ERU5JRURdOiBFeHRlcm5hbEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvcixcbiAgICAgIFtJbnRlcm5hbEVycm9yQ29kZXMuUFJFU19NT0RFTF9QQVJTSU5HX0VSUk9SXTogRXh0ZXJuYWxFcnJvckNvZGVzLkludGVybmFsRXJyb3IsXG4gICAgICBbSW50ZXJuYWxFcnJvckNvZGVzLlVOS05PV05fVkVSQl9JRF06IEV4dGVybmFsRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLFxuICAgICAgW0ludGVybmFsRXJyb3JDb2Rlcy5WRVJTSU9OX05PVF9DT05GSUdVUkVEXTogRXh0ZXJuYWxFcnJvckNvZGVzLkFQSU5vdEluaXRpYWxpemVkLFxuICAgICAgW0ludGVybmFsRXJyb3JDb2Rlcy5WSVNJQklMSVRZX0VSUk9SXTogRXh0ZXJuYWxFcnJvckNvZGVzLlZpc2liaWxpdHlFcnJvcixcbiAgICB9LFxuICAgIEV4dGVybmFsRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLFxuICApO1xuXG4gIHB1YmxpYyBzdGF0aWMgZmlsdGVyVHlwZSA9IG5ldyBFbnVtQ29udmVydGVyPEludGVybmFsRmlsdGVyVHlwZSwgRXh0ZXJuYWxGaWx0ZXJUeXBlPih7XG4gICAgW0ludGVybmFsRmlsdGVyVHlwZS5DYXRlZ29yaWNhbF06IEV4dGVybmFsRmlsdGVyVHlwZS5DYXRlZ29yaWNhbCxcbiAgICBbSW50ZXJuYWxGaWx0ZXJUeXBlLlJhbmdlXTogRXh0ZXJuYWxGaWx0ZXJUeXBlLlJhbmdlLFxuICAgIFtJbnRlcm5hbEZpbHRlclR5cGUuUmVsYXRpdmVEYXRlXTogRXh0ZXJuYWxGaWx0ZXJUeXBlLlJlbGF0aXZlRGF0ZSxcbiAgICBbSW50ZXJuYWxGaWx0ZXJUeXBlLkhpZXJhcmNoaWNhbF06IEV4dGVybmFsRmlsdGVyVHlwZS5IaWVyYXJjaGljYWwsXG4gIH0pO1xuXG4gIHB1YmxpYyBzdGF0aWMgY2xhc3NOYW1lS2V5ID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxDbGFzc05hbWVLZXksIEV4dGVybmFsQ2xhc3NOYW1lS2V5Pih7XG4gICAgW0ludGVybmFsQ2xhc3NOYW1lS2V5LkRhc2hib2FyZFRpdGxlXTogRXh0ZXJuYWxDbGFzc05hbWVLZXkuRGFzaGJvYXJkVGl0bGUsXG4gICAgW0ludGVybmFsQ2xhc3NOYW1lS2V5LlN0b3J5VGl0bGVdOiBFeHRlcm5hbENsYXNzTmFtZUtleS5TdG9yeVRpdGxlLFxuICAgIFtJbnRlcm5hbENsYXNzTmFtZUtleS5Ub29sdGlwXTogRXh0ZXJuYWxDbGFzc05hbWVLZXkuVG9vbHRpcCxcbiAgICBbSW50ZXJuYWxDbGFzc05hbWVLZXkuV29ya3NoZWV0XTogRXh0ZXJuYWxDbGFzc05hbWVLZXkuV29ya3NoZWV0LFxuICAgIFtJbnRlcm5hbENsYXNzTmFtZUtleS5Xb3Jrc2hlZXRUaXRsZV06IEV4dGVybmFsQ2xhc3NOYW1lS2V5LldvcmtzaGVldFRpdGxlLFxuICAgIC8vIFRlbXBvcmFyeSB1bnRpbCB3ZSBmaXggMTMxNzI2NiAtIFBsYXRmb3JtIGhhc24ndCBiZWVuIHVwZGF0ZWQgY3VycmVudGx5IGJlY2F1c2UgbmVhciBicmFuY2ggaXMgY2xvc2VkXG4gICAgWydkYXNoYm9hcmQtdGl0bGUnXTogRXh0ZXJuYWxDbGFzc05hbWVLZXkuRGFzaGJvYXJkVGl0bGUsXG4gICAgWydzdG9yeS10aXRsZSddOiBFeHRlcm5hbENsYXNzTmFtZUtleS5TdG9yeVRpdGxlLFxuICAgIFsndG9vbHRpcCddOiBFeHRlcm5hbENsYXNzTmFtZUtleS5Ub29sdGlwLFxuICAgIFsnd29ya3NoZWV0J106IEV4dGVybmFsQ2xhc3NOYW1lS2V5LldvcmtzaGVldCxcbiAgICBbJ3dvcmtzaGVldC10aXRsZSddOiBFeHRlcm5hbENsYXNzTmFtZUtleS5Xb3Jrc2hlZXRUaXRsZSxcbiAgfSk7XG5cbiAgcHVibGljIHN0YXRpYyBoaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlID0gbmV3IEVudW1Db252ZXJ0ZXI8XG4gICAgSW50ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLFxuICAgIEV4dGVybmFsSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZVxuICA+KHtcbiAgICBbSW50ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLkFsbFNlbGVjdGVkXTogRXh0ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLkFsbFNlbGVjdGVkLFxuICAgIFtJbnRlcm5hbEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUuTm9uZVNlbGVjdGVkXTogRXh0ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLk5vbmVTZWxlY3RlZCxcbiAgICBbSW50ZXJuYWxIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlLlNvbWVTZWxlY3RlZF06IEV4dGVybmFsSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZS5Tb21lU2VsZWN0ZWQsXG4gICAgW0ludGVybmFsSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZS5Vbmtub3duU2VsZWN0ZWRdOiBFeHRlcm5hbEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUuVW5rbm93blNlbGVjdGVkLFxuICB9KTtcblxuICBwdWJsaWMgc3RhdGljIGFubm90YXRpb25UeXBlID0gbmV3IEVudW1Db252ZXJ0ZXI8SW50ZXJuYWxBbm5vdGF0aW9uVHlwZSwgRXh0ZXJuYWxBbm5vdGF0aW9uVHlwZT4oe1xuICAgIFtJbnRlcm5hbEFubm90YXRpb25UeXBlLkFyZWFdOiBFeHRlcm5hbEFubm90YXRpb25UeXBlLkFyZWEsXG4gICAgW0ludGVybmFsQW5ub3RhdGlvblR5cGUuTWFya106IEV4dGVybmFsQW5ub3RhdGlvblR5cGUuTWFyayxcbiAgICBbSW50ZXJuYWxBbm5vdGF0aW9uVHlwZS5Qb2ludF06IEV4dGVybmFsQW5ub3RhdGlvblR5cGUuUG9pbnQsXG4gIH0pO1xufVxuLyogdHNsaW50OmVuYWJsZTp0eXBlZGVmICovXG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlcywgVGFibGVhdUV2ZW50VHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBTaW5nbGVFdmVudE1hbmFnZXIgfSBmcm9tICcuL1NpbmdsZUV2ZW50TWFuYWdlcic7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuL1RhYmxlYXVFcnJvcic7XG5cbi8qKlxuICogQ2xhc3MgZGVzaWduZWQgdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgaGFuZGxlcnMgZnJvbSBhIHVzZXIuIE9ubHkgdGhvc2UgZXZlbnRzXG4gKiB3aGljaCBhcmUgYWRkZWQgdmlhIEFkZE5ld0V2ZW50VHlwZSB3aWxsIGJlIHN1cHBvcnRlZCBieSB0aGlzIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjbGFzcyBFdmVudExpc3RlbmVyTWFuYWdlciBpbXBsZW1lbnRzIENvbnRyYWN0LkV2ZW50TGlzdGVuZXJNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBfZXZlbnRMaXN0ZW5lck1hbmFnZXJzOiB7IFt0YWJsZWF1RXZlbnRUeXBlOiBzdHJpbmddOiBTaW5nbGVFdmVudE1hbmFnZXIgfTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lck1hbmFnZXJzID0ge307XG4gIH1cblxuICBwdWJsaWMgYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGU6IFRhYmxlYXVFdmVudFR5cGUsIGhhbmRsZXI6IENvbnRyYWN0LlRhYmxlYXVFdmVudEhhbmRsZXJGbik6IENvbnRyYWN0LlRhYmxlYXVFdmVudFVucmVnaXN0ZXJGbiB7XG4gICAgaWYgKCF0aGlzLl9ldmVudExpc3RlbmVyTWFuYWdlcnMuaGFzT3duUHJvcGVydHkoZXZlbnRUeXBlKSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLlVuc3VwcG9ydGVkRXZlbnROYW1lLCBgQ2Fubm90IGFkZCBldmVudCwgdW5zdXBwb3J0ZWQgZXZlbnQgdHlwZTogJHtldmVudFR5cGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50TGlzdGVuZXJNYW5hZ2Vyc1tldmVudFR5cGVdLmFkZEV2ZW50TGlzdGVuZXIoaGFuZGxlcik7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGU6IFRhYmxlYXVFdmVudFR5cGUsIGhhbmRsZXI6IENvbnRyYWN0LlRhYmxlYXVFdmVudEhhbmRsZXJGbik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fZXZlbnRMaXN0ZW5lck1hbmFnZXJzLmhhc093blByb3BlcnR5KGV2ZW50VHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5VbnN1cHBvcnRlZEV2ZW50TmFtZSwgYENhbm5vdCByZW1vdmUgZXZlbnQsIHVuc3VwcG9ydGVkIGV2ZW50IHR5cGU6ICR7ZXZlbnRUeXBlfWApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9ldmVudExpc3RlbmVyTWFuYWdlcnNbZXZlbnRUeXBlXS5yZW1vdmVFdmVudExpc3RlbmVyKGhhbmRsZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZE5ld0V2ZW50VHlwZShldmVudE1hbmFnZXI6IFNpbmdsZUV2ZW50TWFuYWdlcik6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJNYW5hZ2Vyc1tldmVudE1hbmFnZXIuZXZlbnRUeXBlXSA9IGV2ZW50TWFuYWdlcjtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IENvbHVtblR5cGUsIEZpZWxkQWdncmVnYXRpb25UeXBlLCBGaWVsZFJvbGVUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEZpZWxkSW1wbCB9IGZyb20gJy4vSW1wbC9GaWVsZEltcGwnO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi9VdGlscy9FcnJvckhlbHBlcnMnO1xuXG5leHBvcnQgY2xhc3MgRmllbGQgaW1wbGVtZW50cyBDb250cmFjdC5GaWVsZCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9maWVsZEltcGw6IEZpZWxkSW1wbCkge31cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbXBsLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW1wbC5pZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbXBsLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBhZ2dyZWdhdGlvbigpOiBGaWVsZEFnZ3JlZ2F0aW9uVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW1wbC5hZ2dyZWdhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpOiBDb250cmFjdC5EYXRhU291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbXBsLmRhdGFTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJvbGUoKTogRmllbGRSb2xlVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW1wbC5yb2xlO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0hpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbXBsLmlzSGlkZGVuO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0dlbmVyYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbXBsLmlzR2VuZXJhdGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0NhbGN1bGF0ZWRGaWVsZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbXBsLmlzQ2FsY3VsYXRlZEZpZWxkO1xuICB9XG5cbiAgcHVibGljIGdldCBjb2x1bW5UeXBlKCk6IENvbHVtblR5cGUge1xuICAgIHRocm93IEVycm9ySGVscGVycy5hcGlOb3RJbXBsZW1lbnRlZCgnRmllbGQuY29sdW1uVHlwZScpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0NvbWJpbmVkRmllbGQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW1wbC5pc0NvbWJpbmVkRmllbGQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IEN1c3RvbVZpZXdNb2RlbCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlUmVnaXN0cnksIFNlcnZpY2VOYW1lcywgVml6U2VydmljZSB9IGZyb20gJy4uLy4uL0FwaVNoYXJlZCc7XG5leHBvcnQgY2xhc3MgQ3VzdG9tVmlld0ltcGwge1xuICBwcml2YXRlIF9sdWlkOiBzdHJpbmc7XG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2hhcmVkOiBib29sZWFuO1xuICBwcml2YXRlIF9pc0RlZmF1bHQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX293bmVyTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF91cmw6IHN0cmluZztcbiAgcHVibGljIGNvbnN0cnVjdG9yKGN1c3RvbVZpZXdNb2RlbDogQ3VzdG9tVmlld01vZGVsLCBwcml2YXRlIF9yZWdpc3RyeUlkOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sdWlkID0gY3VzdG9tVmlld01vZGVsLmx1aWQ7XG4gICAgdGhpcy5fbmFtZSA9IGN1c3RvbVZpZXdNb2RlbC5uYW1lO1xuICAgIHRoaXMuX3NoYXJlZCA9IGN1c3RvbVZpZXdNb2RlbC5zaGFyZWQ7XG4gICAgdGhpcy5faXNEZWZhdWx0ID0gY3VzdG9tVmlld01vZGVsLmlzRGVmYXVsdDtcbiAgICB0aGlzLl9vd25lck5hbWUgPSBjdXN0b21WaWV3TW9kZWwub3duZXIudXNlckZyaWVuZGx5TmFtZTtcbiAgICB0aGlzLl91cmwgPSBjdXN0b21WaWV3TW9kZWwudXJsO1xuICB9XG5cbiAgcHVibGljIGdldCBsdWlkKCkge1xuICAgIHJldHVybiB0aGlzLl9sdWlkO1xuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgcHVibGljIHNldCBuYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBzaGFyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgc2hhcmVkKHNoYXJlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX3NoYXJlZCA9IHNoYXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNEZWZhdWx0KCkge1xuICAgIHJldHVybiB0aGlzLl9pc0RlZmF1bHQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGlzRGVmYXVsdChpc0RlZmF1bHQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0RlZmF1bHQgPSBpc0RlZmF1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG93bmVyTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fb3duZXJOYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCB1cmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlQXN5bmMoKTogUHJvbWlzZTxDdXN0b21WaWV3SW1wbD4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8Vml6U2VydmljZT4oU2VydmljZU5hbWVzLlZpeik7XG4gICAgcmV0dXJuIHNlcnZpY2Uuc2F2ZUFzeW5jKHRoaXMpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHtcbiAgRGFzaGJvYXJkTGF5b3V0Q2hhbmdlLFxuICBEYXNoYm9hcmRMYXlvdXRDaGFuZ2VEZXRhaWxzLFxuICBFcnJvckNvZGVzLFxuICBTaGFyZWRFcnJvckNvZGVzLFxuICBTaGVldFR5cGUsXG59IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRPYmplY3RUeXBlLCBEYXNoYm9hcmRab25lLCBTaGVldFBhdGgsIFZpc3VhbElkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyB9IGZyb20gJy4uL0VudW1NYXBwaW5ncy9JbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9Qb2ludCc7XG5pbXBvcnQgeyBBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvQW5pbWF0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvRmlsdGVyU2VydmljZSc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlUmVnaXN0cnksIFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL1pvbmVTZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uL1RhYmxlYXVFcnJvcic7XG5pbXBvcnQgeyBFcnJvckhlbHBlcnMgfSBmcm9tICcuLi9VdGlscy9FcnJvckhlbHBlcnMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkT2JqZWN0SW1wbCB9IGZyb20gJy4vRGFzaGJvYXJkT2JqZWN0SW1wbCc7XG5pbXBvcnQgeyBTaGVldEltcGwgfSBmcm9tICcuL1NoZWV0SW1wbCc7XG5pbXBvcnQgeyBTaGVldEluZm9JbXBsIH0gZnJvbSAnLi9TaGVldEluZm9JbXBsJztcbmltcG9ydCB7IFN0b3J5UG9pbnRJbXBsIH0gZnJvbSAnLi9TdG9yeVBvaW50SW1wbCc7XG5pbXBvcnQgeyBXb3Jrc2hlZXRJbXBsIH0gZnJvbSAnLi9Xb3Jrc2hlZXRJbXBsJztcblxuZXhwb3J0IGNsYXNzIERhc2hib2FyZEltcGwgZXh0ZW5kcyBTaGVldEltcGwge1xuICBwcml2YXRlIF93b3Jrc2hlZXRzSW1wbDogQXJyYXk8V29ya3NoZWV0SW1wbD47XG4gIHByaXZhdGUgX29iamVjdHM6IEFycmF5PERhc2hib2FyZE9iamVjdEltcGw+O1xuICBwcml2YXRlIHpvbmVNYXA6IE1hcDxudW1iZXIsIERhc2hib2FyZE9iamVjdEltcGw+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBfc2hlZXRJbmZvOiBTaGVldEluZm9JbXBsLFxuICAgIHByaXZhdGUgX3pvbmVzOiBBcnJheTxEYXNoYm9hcmRab25lPixcbiAgICBwcml2YXRlIF9zaGVldFBhdGg6IFNoZWV0UGF0aCxcbiAgICBfcmVnaXN0cnlJZDogbnVtYmVyLFxuICAgIHByaXZhdGUgX3BhcmVudFN0b3J5UG9pbnRJbXBsOiBTdG9yeVBvaW50SW1wbCB8IG51bGwsXG4gICkge1xuICAgIHN1cGVyKF9zaGVldEluZm8sIF9yZWdpc3RyeUlkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgd29ya3NoZWV0c0ltcGwoKTogQXJyYXk8V29ya3NoZWV0SW1wbD4ge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXRzSW1wbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb2JqZWN0cygpOiBBcnJheTxEYXNoYm9hcmRPYmplY3RJbXBsPiB7XG4gICAgcmV0dXJuIHRoaXMuX29iamVjdHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhcmVudFN0b3J5UG9pbnQoKTogU3RvcnlQb2ludEltcGwgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50U3RvcnlQb2ludEltcGw7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZVdpdGhQdWJsaWNJbnRlcmZhY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX3dvcmtzaGVldHNJbXBsID0gbmV3IEFycmF5PFdvcmtzaGVldEltcGw+KCk7XG4gICAgdGhpcy5fb2JqZWN0cyA9IG5ldyBBcnJheTxEYXNoYm9hcmRPYmplY3RJbXBsPigpO1xuICAgIHRoaXMuem9uZU1hcCA9IG5ldyBNYXA8bnVtYmVyLCBEYXNoYm9hcmRPYmplY3RJbXBsPigpO1xuXG4gICAgLy8gUHJvY2VzcyBhbGwgdGhlIHpvbmVzIHdoaWNoIGFyZSBjb250YWluZWQgaW4gdGhpcyBkYXNoYm9hcmRcbiAgICBmb3IgKGNvbnN0IHpvbmUgb2YgdGhpcy5fem9uZXMpIHtcbiAgICAgIGxldCB3b3Jrc2hlZXRJbXBsOiBXb3Jrc2hlZXRJbXBsIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCB6b25lU2l6ZTogQ29udHJhY3QuU2l6ZSA9IHsgd2lkdGg6IHpvbmUud2lkdGgsIGhlaWdodDogem9uZS5oZWlnaHQgfTtcbiAgICAgIC8vIEFzIHRoZSBkYXNoYm9hcmQgaXMgYWN0aXZlLCBhbGwgb3RoZXIgem9uZXMgaW4gdGhlIGRhc2hib2FyZCBhcmUgaW5hY3RpdmUuXG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICBpZiAoem9uZS56b25lVHlwZSA9PT0gRGFzaGJvYXJkT2JqZWN0VHlwZS5Xb3Jrc2hlZXQpIHtcbiAgICAgICAgbGV0IHdvcmtzaGVldE5hbWUgPSAnJztcbiAgICAgICAgbGV0IHdvcmtzaGVldFVybCA9ICcnO1xuICAgICAgICBsZXQgaXNIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKHpvbmUuc2hlZXRJbmZvKSB7XG4gICAgICAgICAgLy8gem9uZS5zaGVldEluZm8gd2FzIG5vdCBpbml0aWFsaXplZCBwcmlvciB0byBpbnRlcm5hbC1jb250cmFjdCAxLjYuMFxuICAgICAgICAgIHdvcmtzaGVldE5hbWUgPSB6b25lLnNoZWV0SW5mby5uYW1lO1xuXG4gICAgICAgICAgLy8gd29ya3NoZWV0VXJsICYgaXNIaWRkZW4gaXMgZm9yIEVtYmVkZGluZyBvbmx5XG4gICAgICAgICAgd29ya3NoZWV0VXJsID0gem9uZS5zaGVldEluZm8udXJsIHx8ICcnO1xuICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSB1cmwsIHRoZW4gaXQncyBub3QgaGlkZGVuXG4gICAgICAgICAgaXNIaWRkZW4gPSB3b3Jrc2hlZXRVcmwgPT09ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdvcmtzaGVldE5hbWUgPSB6b25lLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW5kZXhlcywgaXNBY3RpdmUgYW5kIHNvbWUgbW9yZSBwcm9wZXJ0aWVzIGluIHNoZWV0SW5mb0ltcGwgYXJlIGVtYmVkZGluZyBzcGVjaWZpYy5cbiAgICAgICAgLy8gQnV0IHdlIGluaXQgdGhlbSBmb3IgYm90aCBleHRlbnNpb25zIGFuZCBlbWJlZGRpbmcgYXMgdGhlIE1vZGVscyB3aWxsIG9ubHkgdXNlIHdoYXQgaXMgcmVsZXZhbnQuXG4gICAgICAgIGNvbnN0IHNoZWV0SW5mb0ltcGwgPSBuZXcgU2hlZXRJbmZvSW1wbChcbiAgICAgICAgICB3b3Jrc2hlZXROYW1lLFxuICAgICAgICAgIFNoZWV0VHlwZS5Xb3Jrc2hlZXQsXG4gICAgICAgICAgem9uZVNpemUsXG4gICAgICAgICAgdGhpcy5fd29ya3NoZWV0c0ltcGwubGVuZ3RoLFxuICAgICAgICAgIGlzQWN0aXZlLFxuICAgICAgICAgIGlzSGlkZGVuLFxuICAgICAgICAgIHdvcmtzaGVldFVybCxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB2aXpJZDogVmlzdWFsSWQgPSB7XG4gICAgICAgICAgd29ya3NoZWV0OiB3b3Jrc2hlZXROYW1lLFxuICAgICAgICAgIGRhc2hib2FyZDogdGhpcy5fc2hlZXRJbmZvSW1wbC5uYW1lLFxuICAgICAgICAgIHN0b3J5Ym9hcmQ6IHRoaXMuX3NoZWV0UGF0aC5zdG9yeWJvYXJkLFxuICAgICAgICAgIGZsaXBib2FyZFpvbmVJRDogdGhpcy5fc2hlZXRQYXRoLmZsaXBib2FyZFpvbmVJRCxcbiAgICAgICAgICBzdG9yeVBvaW50SUQ6IHRoaXMuX3NoZWV0UGF0aC5zdG9yeVBvaW50SUQsXG4gICAgICAgIH07XG5cbiAgICAgICAgd29ya3NoZWV0SW1wbCA9IG5ldyBXb3Jrc2hlZXRJbXBsKHNoZWV0SW5mb0ltcGwsIHRoaXMuX3JlZ2lzdHJ5SWQsIHZpeklkLCB0aGlzLCB0aGlzLl9wYXJlbnRTdG9yeVBvaW50SW1wbCk7XG4gICAgICAgIHRoaXMuX3dvcmtzaGVldHNJbXBsLnB1c2god29ya3NoZWV0SW1wbCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHpvbmVQb2ludCA9IG5ldyBQb2ludCh6b25lLngsIHpvbmUueSk7XG5cbiAgICAgIGNvbnN0IGRhc2hib2FyZE9iamVjdEltcGwgPSBuZXcgRGFzaGJvYXJkT2JqZWN0SW1wbChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzLmRhc2hib2FyZE9iamVjdFR5cGUuY29udmVydCh6b25lLnpvbmVUeXBlKSxcbiAgICAgICAgem9uZVBvaW50LFxuICAgICAgICB6b25lU2l6ZSxcbiAgICAgICAgd29ya3NoZWV0SW1wbCxcbiAgICAgICAgem9uZS5uYW1lLFxuICAgICAgICB6b25lLmlzRmxvYXRpbmcgIT09IHVuZGVmaW5lZCA/IHpvbmUuaXNGbG9hdGluZyA6IGZhbHNlLCAvLyBiZWZvcmUgMS42LjAgd2UgZGlkbid0IGhhdmUgaXNGbG9hdGluZywgc28gd2UgYXNzdW1lIGZhbHNlXG4gICAgICAgIHpvbmUuaXNWaXNpYmxlICE9PSB1bmRlZmluZWQgPyB6b25lLmlzVmlzaWJsZSA6IHRydWUsIC8vIGJlZm9yZSAxLjYuMCB3ZSBkaWRuJ3QgaGF2ZSBpc1Zpc2libGUsIHNvIHdlIGFzc3VtZSB0cnVlXG4gICAgICAgIHpvbmUuem9uZUlkLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5fb2JqZWN0cy5wdXNoKGRhc2hib2FyZE9iamVjdEltcGwpO1xuICAgICAgdGhpcy56b25lTWFwLnNldCh6b25lLnpvbmVJZCwgZGFzaGJvYXJkT2JqZWN0SW1wbCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldERhc2hib2FyZE9iamVjdFZpc2liaWxpdHlBc3luYyhkYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5TWFwOiBDb250cmFjdC5EYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5TWFwIHwgb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgem9uZVNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8Wm9uZVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5ab25lKTtcblxuICAgIHJldHVybiB6b25lU2VydmljZS5zZXRWaXNpYmlsaXR5QXN5bmMoLypEYXNoYm9hcmQgTmFtZSovIHRoaXMubmFtZSwgdGhpcy56b25lTWFwLCBkYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5TWFwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXNoYm9hcmRPYmplY3RCeUlkKGRhc2hib2FyZE9iamVjdElkOiBudW1iZXIpOiBEYXNoYm9hcmRPYmplY3RJbXBsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy56b25lTWFwLmdldChkYXNoYm9hcmRPYmplY3RJZCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlWm9uZXMobmV3Wm9uZXM6IEFycmF5PERhc2hib2FyZFpvbmU+KTogRGFzaGJvYXJkTGF5b3V0Q2hhbmdlRGV0YWlscyB7XG4gICAgLy8gZ2V0dGluZyBwcmV2aW91cyBkYXNoYm9hcmQgb2JqZWN0c1xuICAgIGNvbnN0IG9sZERhc2hib2FyZE9iamVjdHMgPSB0aGlzLl9vYmplY3RzO1xuICAgIGNvbnN0IG9sZFpvbmVNYXAgPSB0aGlzLnpvbmVNYXA7XG4gICAgLy8gdXBkYXRpbmcgem9uZXMsIGFuZCByZWluaXRpYWxpemluZyBpbnN0YW5jZSB2YXJpYWJsZXNcbiAgICB0aGlzLl96b25lcyA9IG5ld1pvbmVzO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVdpdGhQdWJsaWNJbnRlcmZhY2VzKCk7XG4gICAgLy8gZ2V0dGluZyBuZXcgZGFzaGJvYXJkIG9iamVjdHNcbiAgICBjb25zdCBuZXdEYXNoYm9hcmRPYmplY3RzID0gdGhpcy5fb2JqZWN0cztcbiAgICBjb25zdCBuZXdab25lTWFwID0gdGhpcy56b25lTWFwO1xuICAgIC8vIGluaXRpYWxpemluZyBtYXAgZm9yIGNoYW5nZXNcbiAgICBjb25zdCB6b25lQ2hhbmdlczogRGFzaGJvYXJkTGF5b3V0Q2hhbmdlRGV0YWlscyA9IG5ldyBNYXAoKTtcblxuICAgIC8vIGNvbXBhcmluZyBvbGQgZGFzaGJvYXJkIG9iamVjdHMgd2l0aCBuZXcgb25lc1xuICAgIG9sZERhc2hib2FyZE9iamVjdHMuZm9yRWFjaCgob2xkT2JqZWN0KSA9PiB7XG4gICAgICBjb25zdCBvbGRJZDogbnVtYmVyID0gb2xkT2JqZWN0LmlkO1xuXG4gICAgICAvLyBjaGVja2luZyBpZiB6b25lIHdhcyByZW1vdmVkXG4gICAgICBpZiAoIW5ld1pvbmVNYXAuaGFzKG9sZElkKSkge1xuICAgICAgICB0aGlzLmFkZENoYW5nZShvbGRJZCwgem9uZUNoYW5nZXMsIERhc2hib2FyZExheW91dENoYW5nZS5SZW1vdmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdPYmplY3QgPSBuZXdab25lTWFwLmdldChvbGRJZCk7XG4gICAgICBpZiAob2xkT2JqZWN0LmlzRmxvYXRpbmcgIT09IG5ld09iamVjdCEuaXNGbG9hdGluZykge1xuICAgICAgICB0aGlzLmFkZENoYW5nZShvbGRJZCwgem9uZUNoYW5nZXMsIERhc2hib2FyZExheW91dENoYW5nZS5Jc0Zsb2F0aW5nQ2hhbmdlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvbGRPYmplY3QuaXNWaXNpYmxlICE9PSBuZXdPYmplY3QhLmlzVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmFkZENoYW5nZShvbGRJZCwgem9uZUNoYW5nZXMsIERhc2hib2FyZExheW91dENoYW5nZS5Jc1Zpc2libGVDaGFuZ2VkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9sZE9iamVjdC5uYW1lICE9PSBuZXdPYmplY3QhLm5hbWUpIHtcbiAgICAgICAgdGhpcy5hZGRDaGFuZ2Uob2xkSWQsIHpvbmVDaGFuZ2VzLCBEYXNoYm9hcmRMYXlvdXRDaGFuZ2UuTmFtZUNoYW5nZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAob2xkT2JqZWN0LnBvc2l0aW9uLnggIT09IG5ld09iamVjdCEucG9zaXRpb24ueCB8fCBvbGRPYmplY3QucG9zaXRpb24ueSAhPT0gbmV3T2JqZWN0IS5wb3NpdGlvbi55KSB7XG4gICAgICAgIHRoaXMuYWRkQ2hhbmdlKG9sZElkLCB6b25lQ2hhbmdlcywgRGFzaGJvYXJkTGF5b3V0Q2hhbmdlLlBvc2l0aW9uQ2hhbmdlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvbGRPYmplY3Quc2l6ZS53aWR0aCAhPT0gbmV3T2JqZWN0IS5zaXplLndpZHRoIHx8IG9sZE9iamVjdC5zaXplLmhlaWdodCAhPT0gbmV3T2JqZWN0IS5zaXplLmhlaWdodCkge1xuICAgICAgICB0aGlzLmFkZENoYW5nZShvbGRJZCwgem9uZUNoYW5nZXMsIERhc2hib2FyZExheW91dENoYW5nZS5TaXplQ2hhbmdlZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDaGVja2luZyBmb3IgYW55IGFkZGVkIHpvbmVzXG4gICAgbmV3RGFzaGJvYXJkT2JqZWN0cy5mb3JFYWNoKChuZXdPYmplY3QpID0+IHtcbiAgICAgIGlmICghb2xkWm9uZU1hcC5oYXMobmV3T2JqZWN0LmlkKSkge1xuICAgICAgICB0aGlzLmFkZENoYW5nZShuZXdPYmplY3QuaWQsIHpvbmVDaGFuZ2VzLCBEYXNoYm9hcmRMYXlvdXRDaGFuZ2UuQWRkZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpvbmVDaGFuZ2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDaGFuZ2Uoem9uZUlkOiBudW1iZXIsIHpvbmVDaGFuZ2VzOiBEYXNoYm9hcmRMYXlvdXRDaGFuZ2VEZXRhaWxzLCBjaGFuZ2U6IERhc2hib2FyZExheW91dENoYW5nZSk6IHZvaWQge1xuICAgIGlmICghem9uZUNoYW5nZXMuaGFzKHpvbmVJZCkpIHtcbiAgICAgIHpvbmVDaGFuZ2VzLnNldCh6b25lSWQsIFtdKTtcbiAgICB9XG5cbiAgICB6b25lQ2hhbmdlcy5nZXQoem9uZUlkKSEucHVzaChjaGFuZ2UpO1xuICB9XG5cbiAgcHVibGljIG1vdmVBbmRSZXNpemVEYXNoYm9hcmRPYmplY3RzQXN5bmMoXG4gICAgZGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlQXJyYXk6IENvbnRyYWN0LkRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZUFycmF5LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB6b25lU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxab25lU2VydmljZT4oU2VydmljZU5hbWVzLlpvbmUpO1xuXG4gICAgcmV0dXJuIHpvbmVTZXJ2aWNlLm1vdmVBbmRSZXNpemVBc3luYygvKkRhc2hib2FyZCBOYW1lKi8gdGhpcy5uYW1lLCB0aGlzLnpvbmVNYXAsIGRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZUFycmF5KTtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYXlBbmltYXRpb25Bc3luYyhyZXBsYXlTcGVlZDogQ29udHJhY3QuUmVwbGF5U3BlZWRUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYW5pbWF0aW9uU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxBbmltYXRpb25TZXJ2aWNlPihTZXJ2aWNlTmFtZXMuQW5pbWF0aW9uKTtcblxuICAgIHJldHVybiBhbmltYXRpb25TZXJ2aWNlLnJlcGxheUFzeW5jKHJlcGxheVNwZWVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5GaWx0ZXI+PiB7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldE9yRW1iZWRkZWRJbkFjdGl2ZVN0b3J5UG9pbnQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RmlsdGVyU2VydmljZT4oU2VydmljZU5hbWVzLkZpbHRlcik7XG4gICAgcmV0dXJuIHNlcnZpY2UuZ2V0RGFzaGJvYXJkRmlsdGVyc0FzeW5jKCk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlGaWx0ZXJBc3luYyhcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IEFycmF5PHN0cmluZz4sXG4gICAgdXBkYXRlVHlwZTogQ29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZSxcbiAgICBvcHRpb25zOiBDb250cmFjdC5GaWx0ZXJPcHRpb25zLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8Q29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZT4odXBkYXRlVHlwZSwgQ29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZSwgJ0ZpbHRlclVwZGF0ZVR5cGUnKTtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5U3RyaW5nUGFyYW1ldGVyKGZpZWxkTmFtZSwgJ2ZpZWxkTmFtZScpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgJ3ZhbHVlcyBwYXJhbWV0ZXIgZm9yIGFwcGx5RGFzaGJvYXJkRmlsdGVyQXN5bmMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH1cbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0T3JFbWJlZGRlZEluQWN0aXZlU3RvcnlQb2ludCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxGaWx0ZXJTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRmlsdGVyKTtcbiAgICByZXR1cm4gc2VydmljZS5hcHBseURhc2hib2FyZEZpbHRlckFzeW5jKGZpZWxkTmFtZSwgdmFsdWVzLCB1cGRhdGVUeXBlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5QWN0aXZlU2hlZXRPckVtYmVkZGVkSW5BY3RpdmVTdG9yeVBvaW50KCkge1xuICAgIGNvbnN0IGlzUm9vdEFuZEFjdGl2ZURhc2hib2FyZCA9IHRoaXMuYWN0aXZlO1xuICAgIGNvbnN0IGlzV2l0aGluQWN0aXZlU3RvcnlQb2ludCA9IHRoaXMucGFyZW50U3RvcnlQb2ludCAhPSBudWxsICYmIHRoaXMucGFyZW50U3RvcnlQb2ludC5hY3RpdmU7XG4gICAgaWYgKCFpc1Jvb3RBbmRBY3RpdmVEYXNoYm9hcmQgJiYgIWlzV2l0aGluQWN0aXZlU3RvcnlQb2ludCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLk5vdEFjdGl2ZVNoZWV0LCAnT3BlcmF0aW9uIG5vdCBhbGxvd2VkIG9uIG5vbi1hY3RpdmUgc2hlZXQnKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRPYmplY3RUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IERhc2hib2FyZEltcGwgfSBmcm9tICcuL0Rhc2hib2FyZEltcGwnO1xuaW1wb3J0IHsgV29ya3NoZWV0SW1wbCB9IGZyb20gJy4vV29ya3NoZWV0SW1wbCc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRhc2hib2FyZCBvYmplY3RzIC0gdGhlIHpvbmVzIGluIGEgZGFzaGJvYXJkLlxuICogVGhpcyBkb2VzIG5vdCBmb2xsb3cgdGhlIEltcGwgcGF0dGVybiBhcyBpdCBpcyBqdXN0IGEgcHJvcGVydHkgYmFnLlxuICovXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkT2JqZWN0SW1wbCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9kYXNoYm9hcmRJbXBsOiBEYXNoYm9hcmRJbXBsLFxuICAgIHByaXZhdGUgX3R5cGU6IERhc2hib2FyZE9iamVjdFR5cGUsXG4gICAgcHJpdmF0ZSBfcG9zaXRpb246IENvbnRyYWN0LlBvaW50LFxuICAgIHByaXZhdGUgX3NpemU6IENvbnRyYWN0LlNpemUsXG4gICAgcHJpdmF0ZSBfd29ya3NoZWV0SW1wbDogV29ya3NoZWV0SW1wbCB8IHVuZGVmaW5lZCxcbiAgICBwcml2YXRlIF9uYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBfaXNGbG9hdGluZzogYm9vbGVhbixcbiAgICBwcml2YXRlIF9pc1Zpc2libGU6IGJvb2xlYW4sXG4gICAgcHJpdmF0ZSBfaWQ6IG51bWJlcixcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgZGFzaGJvYXJkSW1wbCgpOiBEYXNoYm9hcmRJbXBsIHtcbiAgICByZXR1cm4gdGhpcy5fZGFzaGJvYXJkSW1wbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBEYXNoYm9hcmRPYmplY3RUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcG9zaXRpb24oKTogQ29udHJhY3QuUG9pbnQge1xuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2l6ZSgpOiBDb250cmFjdC5TaXplIHtcbiAgICByZXR1cm4gdGhpcy5fc2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgd29ya3NoZWV0SW1wbCgpOiBXb3Jrc2hlZXRJbXBsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fd29ya3NoZWV0SW1wbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0Zsb2F0aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Zsb2F0aW5nO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlzaWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgKiBhcyBJbnRlcm5hbENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU3VtbWFyeSB9IGZyb20gJy4uL0Nvbm5lY3Rpb25TdW1tYXJ5JztcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAnLi4vRmllbGQnO1xuaW1wb3J0IHsgTG9naWNhbFRhYmxlIH0gZnJvbSAnLi4vTG9naWNhbFRhYmxlJztcbmltcG9ydCB7IERhdGFTb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvRGF0YVNvdXJjZVNlcnZpY2UnO1xuaW1wb3J0IHsgR2V0RGF0YVNlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9HZXREYXRhU2VydmljZSc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlUmVnaXN0cnksIFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VzL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBUYWJsZVN1bW1hcnkgfSBmcm9tICcuLi9UYWJsZVN1bW1hcnknO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi4vVXRpbHMvRXJyb3JIZWxwZXJzJztcbmltcG9ydCB7IEZpZWxkSW1wbCB9IGZyb20gJy4vRmllbGRJbXBsJztcblxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VJbXBsIHtcbiAgcHJpdmF0ZSBfZmllbGRzOiBBcnJheTxGaWVsZD47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RhdGFTb3VyY2VJbmZvOiBJbnRlcm5hbENvbnRyYWN0LkRhdGFTb3VyY2UsIHByaXZhdGUgX3JlZ2lzdHJ5SWQ6IG51bWJlcikge1xuICAgIHRoaXMuX2ZpZWxkcyA9IF9kYXRhU291cmNlSW5mby5maWVsZHMubWFwKChmaWVsZE1vZGVsKSA9PiB7XG4gICAgICBjb25zdCBmaWVsZEltcGwgPSBuZXcgRmllbGRJbXBsKGZpZWxkTW9kZWwsIHRoaXMpO1xuICAgICAgcmV0dXJuIG5ldyBGaWVsZChmaWVsZEltcGwpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbmZvLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VJbmZvLmlkO1xuICB9XG5cbiAgcHVibGljIGdldCBleHRyYWN0VXBkYXRlVGltZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW5mby5leHRyYWN0VXBkYXRlVGltZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmllbGRzKCk6IEFycmF5PENvbnRyYWN0LkZpZWxkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFeHRyYWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW5mby5pc0V4dHJhY3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUHVibGlzaGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlSW5mby5pc1B1Ymxpc2hlZDtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoZWRVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZUluZm8ucHVibGlzaGVkVXJsO1xuICB9XG5cbiAgcHVibGljIGdldE1heFBhZ2VSb3dMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiAxMDAwMDtcbiAgfVxuXG4gIHB1YmxpYyByZWZyZXNoQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGF0YVNvdXJjZVNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RGF0YVNvdXJjZVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5EYXRhU291cmNlU2VydmljZSk7XG5cbiAgICByZXR1cm4gZGF0YVNvdXJjZVNlcnZpY2UucmVmcmVzaEFzeW5jKHRoaXMuX2RhdGFTb3VyY2VJbmZvLmlkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25uZWN0aW9uU3VtbWFyaWVzQXN5bmMoKTogUHJvbWlzZTxDb250cmFjdC5Db25uZWN0aW9uU3VtbWFyeVtdPiB7XG4gICAgY29uc3QgZGF0YVNvdXJjZVNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RGF0YVNvdXJjZVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5EYXRhU291cmNlU2VydmljZSk7XG5cbiAgICByZXR1cm4gZGF0YVNvdXJjZVNlcnZpY2UuZ2V0Q29ubmVjdGlvblN1bW1hcmllc0FzeW5jKHRoaXMuX2RhdGFTb3VyY2VJbmZvLmlkKS50aGVuPENvbnRyYWN0LkNvbm5lY3Rpb25TdW1tYXJ5W10+KChzdW1tYXJpZXMpID0+IHtcbiAgICAgIHJldHVybiBzdW1tYXJpZXMubWFwKChzdW1tYXJ5KSA9PiBuZXcgQ29ubmVjdGlvblN1bW1hcnkoc3VtbWFyeSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEFjdGl2ZVRhYmxlc0FzeW5jKCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuVGFibGVTdW1tYXJ5Pj4ge1xuICAgIGNvbnN0IGRhdGFTb3VyY2VTZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPERhdGFTb3VyY2VTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRGF0YVNvdXJjZVNlcnZpY2UpO1xuXG4gICAgcmV0dXJuIGRhdGFTb3VyY2VTZXJ2aWNlLmdldEFjdGl2ZVRhYmxlc0FzeW5jKHRoaXMuX2RhdGFTb3VyY2VJbmZvLmlkKS50aGVuPEFycmF5PENvbnRyYWN0LlRhYmxlU3VtbWFyeT4+KCh0YWJsZUluZm9zKSA9PiB7XG4gICAgICByZXR1cm4gdGFibGVJbmZvcy5tYXAoKHRhYmxlSW5mbykgPT4gbmV3IFRhYmxlU3VtbWFyeSh0YWJsZUluZm8pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVbmRlcmx5aW5nRGF0YUFzeW5jKG9wdGlvbnM/OiBDb250cmFjdC5EYXRhU291cmNlVW5kZXJseWluZ0RhdGFPcHRpb25zKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+IHtcbiAgICBjb25zdCBnZXREYXRhU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxHZXREYXRhU2VydmljZT4oU2VydmljZU5hbWVzLkdldERhdGEpO1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgcmV0dXJuIGdldERhdGFTZXJ2aWNlLmdldERhdGFTb3VyY2VEYXRhQXN5bmMoXG4gICAgICB0aGlzLmlkLFxuICAgICAgISFvcHRpb25zLmlnbm9yZUFsaWFzZXMsXG4gICAgICBvcHRpb25zLm1heFJvd3MgfHwgMCwgLy8gMCBhbmQgW10gYXJlIGRlZmF1bHRzXG4gICAgICBvcHRpb25zLmNvbHVtbnNUb0luY2x1ZGUgfHwgW10sXG4gICAgICBvcHRpb25zLmNvbHVtbnNUb0luY2x1ZGVCeUlkIHx8IFtdLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB8fCBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbi5BbGxWYWx1ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2dpY2FsVGFibGVEYXRhQXN5bmMobG9naWNhbFRhYmxlSWQ6IHN0cmluZywgb3B0aW9ucz86IENvbnRyYWN0LkRhdGFTb3VyY2VVbmRlcmx5aW5nRGF0YU9wdGlvbnMpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT4ge1xuICAgIGNvbnN0IGdldERhdGFTZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEdldERhdGFTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuR2V0RGF0YSk7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICByZXR1cm4gZ2V0RGF0YVNlcnZpY2UuZ2V0TG9naWNhbFRhYmxlRGF0YUFzeW5jKFxuICAgICAgdGhpcy5pZCxcbiAgICAgIGxvZ2ljYWxUYWJsZUlkLFxuICAgICAgISFvcHRpb25zLmlnbm9yZUFsaWFzZXMsXG4gICAgICBvcHRpb25zLm1heFJvd3MgfHwgMCwgLy8gMCBhbmQgW10gYXJlIGRlZmF1bHRzXG4gICAgICBvcHRpb25zLmNvbHVtbnNUb0luY2x1ZGUgfHwgW10sXG4gICAgICBvcHRpb25zLmNvbHVtbnNUb0luY2x1ZGVCeUlkIHx8IFtdLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB8fCBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbi5BbGxWYWx1ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2dpY2FsVGFibGVEYXRhUmVhZGVyQXN5bmMoXG4gICAgbG9naWNhbFRhYmxlSWQ6IHN0cmluZyxcbiAgICBwYWdlUm93Q291bnQ/OiBudW1iZXIsXG4gICAgb3B0aW9ucz86IENvbnRyYWN0LkRhdGFTb3VyY2VVbmRlcmx5aW5nRGF0YU9wdGlvbnMsXG4gICk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlUmVhZGVyPiB7XG4gICAgY29uc3QgZ2V0RGF0YVNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8R2V0RGF0YVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5HZXREYXRhKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHJldHVybiBnZXREYXRhU2VydmljZS5nZXRMb2dpY2FsVGFibGVEYXRhUmVhZGVyQXN5bmMoXG4gICAgICB0aGlzLmlkLFxuICAgICAgbG9naWNhbFRhYmxlSWQsXG4gICAgICBwYWdlUm93Q291bnQgfHwgdGhpcy5nZXRNYXhQYWdlUm93TGltaXQoKSxcbiAgICAgICEhb3B0aW9ucy5pZ25vcmVBbGlhc2VzLFxuICAgICAgb3B0aW9ucy5jb2x1bW5zVG9JbmNsdWRlQnlJZCB8fCBbXSxcbiAgICAgIG9wdGlvbnMuaW5jbHVkZURhdGFWYWx1ZXNPcHRpb24gfHwgSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24uQWxsVmFsdWVzLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZVdpdGhQdWJsaWNJbnRlcmZhY2VzKGRhdGFTb3VyY2U6IENvbnRyYWN0LkRhdGFTb3VyY2UpOiB2b2lkIHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5SW50ZXJuYWxWYWx1ZShkYXRhU291cmNlLCAnZGF0YVNvdXJjZScpO1xuXG4gICAgdGhpcy5fZmllbGRzID0gdGhpcy5fZGF0YVNvdXJjZUluZm8uZmllbGRzLm1hcCgoZmllbGRNb2RlbCkgPT4ge1xuICAgICAgY29uc3QgZmllbGRJbXBsID0gbmV3IEZpZWxkSW1wbChmaWVsZE1vZGVsLCBkYXRhU291cmNlKTtcbiAgICAgIHJldHVybiBuZXcgRmllbGQoZmllbGRJbXBsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2dpY2FsVGFibGVzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5Mb2dpY2FsVGFibGU+PiB7XG4gICAgY29uc3QgZGF0YVNvdXJjZVNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RGF0YVNvdXJjZVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5EYXRhU291cmNlU2VydmljZSk7XG5cbiAgICByZXR1cm4gZGF0YVNvdXJjZVNlcnZpY2UuZ2V0TG9naWNhbFRhYmxlc0FzeW5jKHRoaXMuaWQpLnRoZW48QXJyYXk8Q29udHJhY3QuTG9naWNhbFRhYmxlPj4oKGxvZ2ljYWxUYWJsZUluZm9zKSA9PiB7XG4gICAgICByZXR1cm4gbG9naWNhbFRhYmxlSW5mb3MubWFwKChsb2dpY2FsVGFibGVJbmZvKSA9PiBuZXcgTG9naWNhbFRhYmxlKGxvZ2ljYWxUYWJsZUluZm8pKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEZpZWxkQWdncmVnYXRpb25UeXBlLCBGaWVsZFJvbGVUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCAqIGFzIEludGVybmFsQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyB9IGZyb20gJy4uL0VudW1NYXBwaW5ncy9JbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MnO1xuXG5leHBvcnQgY2xhc3MgRmllbGRJbXBsIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ZpZWxkSW5mbzogSW50ZXJuYWxDb250cmFjdC5GaWVsZCwgcHJpdmF0ZSBfcGFyZW50RGF0YVNvdXJjZTogQ29udHJhY3QuRGF0YVNvdXJjZSkge31cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbmZvLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW5mby5pZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbmZvLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBhZ2dyZWdhdGlvbigpOiBGaWVsZEFnZ3JlZ2F0aW9uVHlwZSB7XG4gICAgcmV0dXJuIEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncy5maWVsZEFnZ3JlZ2F0aW9uVHlwZS5jb252ZXJ0KHRoaXMuX2ZpZWxkSW5mby5hZ2dyZWdhdGlvbik7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogQ29udHJhY3QuRGF0YVNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudERhdGFTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJvbGUoKTogRmllbGRSb2xlVHlwZSB7XG4gICAgcmV0dXJuIEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncy5maWVsZFJvbGVUeXBlLmNvbnZlcnQodGhpcy5fZmllbGRJbmZvLnJvbGUpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0hpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbmZvLmlzSGlkZGVuO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0dlbmVyYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbmZvLmlzR2VuZXJhdGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0NhbGN1bGF0ZWRGaWVsZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRJbmZvLmlzQ2FsY3VsYXRlZEZpZWxkO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0NvbWJpbmVkRmllbGQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSW5mby5pc0NvbWJpbmVkRmllbGQ7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXRhVHlwZSwgUGFyYW1ldGVyVmFsdWVUeXBlLCBQZXJpb2RUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFBhcmFtZXRlckluZm8gfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzIH0gZnJvbSAnLi4vRW51bU1hcHBpbmdzL0ludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyc7XG5pbXBvcnQgeyBEYXRhVmFsdWUgfSBmcm9tICcuLi9Nb2RlbHMvR2V0RGF0YU1vZGVscyc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJzU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL1BhcmFtZXRlcnNTZXJ2aWNlJztcbmltcG9ydCB7IEFwaVNlcnZpY2VSZWdpc3RyeSwgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IERhdGFWYWx1ZUZhY3RvcnkgfSBmcm9tICcuLi9VdGlscy9EYXRhVmFsdWVGYWN0b3J5JztcbmltcG9ydCB7IEVycm9ySGVscGVycyB9IGZyb20gJy4uL1V0aWxzL0Vycm9ySGVscGVycyc7XG5pbXBvcnQgeyBQYXJhbSB9IGZyb20gJy4uL1V0aWxzL1BhcmFtJztcblxuZXhwb3J0IGNsYXNzIFBhcmFtZXRlckltcGwge1xuICBwcml2YXRlIF9hbGxvd2FibGVWYWx1ZXM6IENvbnRyYWN0LlBhcmFtZXRlckRvbWFpblJlc3RyaWN0aW9uO1xuICBwcml2YXRlIF9nbG9iYWxGaWVsZE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFyYW1ldGVySW5mbzogUGFyYW1ldGVySW5mbztcblxuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1ldGVySW5mbzogUGFyYW1ldGVySW5mbywgcHJpdmF0ZSBfcmVnaXN0cnlJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQYXJhbWV0ZXJJbmZvKHBhcmFtZXRlckluZm8pO1xuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtZXRlckluZm8ubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IERhdGFWYWx1ZSB7XG4gICAgcmV0dXJuIERhdGFWYWx1ZUZhY3RvcnkuTWFrZVBhcmFtZXRlckRhdGFWYWx1ZSh0aGlzLl9wYXJhbWV0ZXJJbmZvLmN1cnJlbnRWYWx1ZSwgdGhpcy5fcGFyYW1ldGVySW5mby5kYXRhVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFUeXBlKCk6IERhdGFUeXBlIHtcbiAgICByZXR1cm4gSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzLmRhdGFUeXBlLmNvbnZlcnQodGhpcy5fcGFyYW1ldGVySW5mby5kYXRhVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2dsb2JhbEZpZWxkTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWxsb3dhYmxlVmFsdWVzKCk6IENvbnRyYWN0LlBhcmFtZXRlckRvbWFpblJlc3RyaWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dhYmxlVmFsdWVzO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVZhbHVlQXN5bmMobmV3VmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlKTogUHJvbWlzZTxEYXRhVmFsdWU+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKG5ld1ZhbHVlLCAnbmV3VmFsdWUnKTtcblxuICAgIGNvbnN0IGNvZXJjZWRWYWx1ZSA9IFBhcmFtLnNlcmlhbGl6ZVBhcmFtZXRlclZhbHVlKG5ld1ZhbHVlKTtcbiAgICBjb25zdCBwYXJhbWV0ZXJzU2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxQYXJhbWV0ZXJzU2VydmljZT4oU2VydmljZU5hbWVzLlBhcmFtZXRlcnMpO1xuICAgIHJldHVybiBwYXJhbWV0ZXJzU2VydmljZS5jaGFuZ2VQYXJhbWV0ZXJWYWx1ZUFzeW5jKHRoaXMuX2dsb2JhbEZpZWxkTmFtZSwgY29lcmNlZFZhbHVlKS50aGVuKChwYXJhbWV0ZXJJbmZvKSA9PiB7XG4gICAgICB0aGlzLnNldFBhcmFtZXRlckluZm8ocGFyYW1ldGVySW5mbyk7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFBhcmFtZXRlckluZm8ocGFyYW1ldGVySW5mbzogUGFyYW1ldGVySW5mbyk6IHZvaWQge1xuICAgIHRoaXMuX3BhcmFtZXRlckluZm8gPSBwYXJhbWV0ZXJJbmZvO1xuICAgIHRoaXMuX2dsb2JhbEZpZWxkTmFtZSA9IHBhcmFtZXRlckluZm8uZmllbGROYW1lO1xuXG4gICAgY29uc3QgdHlwZSA9IEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncy5hbGxvd2FibGVWYWx1ZXMuY29udmVydChwYXJhbWV0ZXJJbmZvLmFsbG93YWJsZVZhbHVlc1R5cGUpO1xuICAgIGxldCBsaXN0VmFsdWVzOiBBcnJheTxEYXRhVmFsdWU+IHwgdW5kZWZpbmVkO1xuICAgIGxldCBtaW5WYWx1ZTogRGF0YVZhbHVlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBtYXhWYWx1ZTogRGF0YVZhbHVlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBzdGVwU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGxldCBkYXRlU3RlcFBlcmlvZDogUGVyaW9kVHlwZSB8IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlID09PSBQYXJhbWV0ZXJWYWx1ZVR5cGUuTGlzdCkge1xuICAgICAgY29uc3QgdmFsdWVzID0gcGFyYW1ldGVySW5mby5hbGxvd2FibGVWYWx1ZXMgfHwgW107XG4gICAgICBsaXN0VmFsdWVzID0gdmFsdWVzLm1hcCgodmFsKSA9PiBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VQYXJhbWV0ZXJEYXRhVmFsdWUodmFsLCBwYXJhbWV0ZXJJbmZvLmRhdGFUeXBlKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBQYXJhbWV0ZXJWYWx1ZVR5cGUuUmFuZ2UpIHtcbiAgICAgIG1pblZhbHVlID0gcGFyYW1ldGVySW5mby5taW5WYWx1ZSAmJiBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VQYXJhbWV0ZXJEYXRhVmFsdWUocGFyYW1ldGVySW5mby5taW5WYWx1ZSwgcGFyYW1ldGVySW5mby5kYXRhVHlwZSk7XG4gICAgICBtYXhWYWx1ZSA9IHBhcmFtZXRlckluZm8ubWF4VmFsdWUgJiYgRGF0YVZhbHVlRmFjdG9yeS5NYWtlUGFyYW1ldGVyRGF0YVZhbHVlKHBhcmFtZXRlckluZm8ubWF4VmFsdWUsIHBhcmFtZXRlckluZm8uZGF0YVR5cGUpO1xuICAgICAgc3RlcFNpemUgPSBwYXJhbWV0ZXJJbmZvLnN0ZXBTaXplO1xuICAgICAgZGF0ZVN0ZXBQZXJpb2QgPSBwYXJhbWV0ZXJJbmZvLmRhdGVTdGVwUGVyaW9kICYmIEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncy5kYXRlU3RlcFBlcmlvZC5jb252ZXJ0KHBhcmFtZXRlckluZm8uZGF0ZVN0ZXBQZXJpb2QpO1xuICAgIH1cblxuICAgIHRoaXMuX2FsbG93YWJsZVZhbHVlcyA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBhbGxvd2FibGVWYWx1ZXM6IGxpc3RWYWx1ZXMsXG4gICAgICBtaW5WYWx1ZTogbWluVmFsdWUsXG4gICAgICBtYXhWYWx1ZTogbWF4VmFsdWUsXG4gICAgICBzdGVwU2l6ZTogc3RlcFNpemUsXG4gICAgICBkYXRlU3RlcFBlcmlvZDogZGF0ZVN0ZXBQZXJpb2QsXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFNoZWV0UGF0aCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBDbGllbnRJbmZvU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0NsaWVudEluZm9TZXJ2aWNlJztcbmltcG9ydCB7IFBhcmFtZXRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvUGFyYW1ldGVyc1NlcnZpY2UnO1xuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5LCBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgU2l6ZVNlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9TaXplU2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi9UYWJsZWF1RXJyb3InO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi4vVXRpbHMvRXJyb3JIZWxwZXJzJztcbmltcG9ydCB7IFBhcmFtIH0gZnJvbSAnLi4vVXRpbHMvUGFyYW0nO1xuaW1wb3J0IHsgU2hlZXRVdGlscyB9IGZyb20gJy4uL1V0aWxzL1NoZWV0VXRpbHMnO1xuaW1wb3J0IHsgUGFyYW1ldGVySW1wbCB9IGZyb20gJy4vUGFyYW1ldGVySW1wbCc7XG5pbXBvcnQgeyBTaGVldEluZm9JbXBsIH0gZnJvbSAnLi9TaGVldEluZm9JbXBsJztcblxuaW50ZXJmYWNlIFBhcnRpYWxTaGVldFNpemUge1xuICAvKipcbiAgICogQ29udGFpbnMgYW4gZW51bWVyYXRpb24gdmFsdWUgb2Ygb25lIG9mIHRoZSBmb2xsb3dpbmc6IEFVVE9NQVRJQywgRVhBQ1RMWSwgUkFOR0UsIEFUTEVBU1QsIGFuZCBBVE1PU1QuXG4gICAqL1xuICByZWFkb25seSBiZWhhdmlvcjogQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqICBUaGlzIGlzIG9ubHkgZGVmaW5lZCB3aGVuIGJlaGF2aW9yIGlzIEVYQUNUTFksIFJBTkdFLCBvciBBVExFQVNULlxuICAgKi9cbiAgcmVhZG9ubHkgbWluU2l6ZT86IFBhcnRpYWw8Q29udHJhY3QuU2l6ZT47XG5cbiAgLyoqXG4gICAqICBUaGlzIGlzIG9ubHkgZGVmaW5lZCB3aGVuIGJlaGF2aW9yIGlzIEVYQUNUTFksIFJBTkdFIG9yIEFUTU9TVC5cbiAgICovXG4gIHJlYWRvbmx5IG1heFNpemU/OiBQYXJ0aWFsPENvbnRyYWN0LlNpemU+O1xufVxuXG5leHBvcnQgY2xhc3MgU2hlZXRJbXBsIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfc2hlZXRJbmZvSW1wbDogU2hlZXRJbmZvSW1wbCwgcHJvdGVjdGVkIF9yZWdpc3RyeUlkOiBudW1iZXIpIHt9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NoZWV0SW5mb0ltcGwubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hlZXRUeXBlKCk6IENvbnRyYWN0LlNoZWV0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoZWV0SW5mb0ltcGwuc2hlZXRUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCBzaGVldFBhdGgoKTogU2hlZXRQYXRoIHtcbiAgICByZXR1cm4gdGhpcy5fc2hlZXRJbmZvSW1wbC5zaGVldFBhdGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNpemUoKTogQ29udHJhY3QuU2l6ZSB8IENvbnRyYWN0LlNoZWV0U2l6ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoZWV0SW5mb0ltcGwuc2hlZXRTaXplO1xuICB9XG5cbiAgcHVibGljIGdldCBoaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX3NoZWV0SW5mb0ltcGwuaXNIaWRkZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NoZWV0SW5mb0ltcGwuaXNIaWRkZW47XG4gICAgfVxuICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbXBsZW1lbnRhdGlvbkVycm9yLCBgaXNIaWRkZW4gbm90IGltcGxlbWVudGVkYCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fc2hlZXRJbmZvSW1wbC5pc0FjdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2hlZXRJbmZvSW1wbC5pc0FjdGl2ZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLkltcGxlbWVudGF0aW9uRXJyb3IsIGBhY3RpdmUgbm90IGltcGxlbWVudGVkYCk7XG4gIH1cblxuICBwdWJsaWMgc2V0IGFjdGl2ZShhY3RpdmU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5fc2hlZXRJbmZvSW1wbC5pc0FjdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zaGVldEluZm9JbXBsLmFjdGl2ZSA9IGFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuX3NoZWV0SW5mb0ltcGwuaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NoZWV0SW5mb0ltcGwuaW5kZXg7XG4gICAgfVxuICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbXBsZW1lbnRhdGlvbkVycm9yLCBgaW5kZXggbm90IGltcGxlbWVudGVkYCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9zaGVldEluZm9JbXBsLnVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2hlZXRJbmZvSW1wbC51cmw7XG4gICAgfVxuICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbXBsZW1lbnRhdGlvbkVycm9yLCBgdXJsIG5vdCBpbXBsZW1lbnRlZGApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaGVldFNpemUoKTogQ29udHJhY3QuU2hlZXRTaXplIHtcbiAgICBpZiAoIVNoZWV0VXRpbHMuaXNWYWxpZFNoZWV0U2l6ZSh0aGlzLnNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVtYmVkZGluZ0Vycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgJ3NpemUgaXMgbm90IG9mIHR5cGUgU2hlZXRTaXplJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kUGFyYW1ldGVyQXN5bmMocGFyYW1ldGVyTmFtZTogc3RyaW5nKTogUHJvbWlzZTxQYXJhbWV0ZXJJbXBsIHwgdW5kZWZpbmVkPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihwYXJhbWV0ZXJOYW1lLCAncGFyYW1ldGVyTmFtZScpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxQYXJhbWV0ZXJzU2VydmljZT4oU2VydmljZU5hbWVzLlBhcmFtZXRlcnMpO1xuICAgIHJldHVybiBzZXJ2aWNlLmZpbmRQYXJhbWV0ZXJCeU5hbWVBc3luYyhwYXJhbWV0ZXJOYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJhbWV0ZXJzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxQYXJhbWV0ZXJJbXBsPj4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8UGFyYW1ldGVyc1NlcnZpY2U+KFNlcnZpY2VOYW1lcy5QYXJhbWV0ZXJzKTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRQYXJhbWV0ZXJzRm9yU2hlZXRBc3luYyh0aGlzLnNoZWV0UGF0aCk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2l6ZUFzeW5jKG5ld1NpemU6IENvbnRyYWN0LlNoZWV0U2l6ZSk6IFByb21pc2U8Q29udHJhY3QuU2hlZXRTaXplPiB7XG4gICAgY29uc3QgaW52YWxpZFNpemVFcnJvciA9IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbnZhbGlkU2l6ZSwgJ0ludmFsaWQgc2hlZXQgc2l6ZSBwYXJhbWV0ZXInKTtcbiAgICBpZiAoIW5ld1NpemUgfHwgIW5ld1NpemUuYmVoYXZpb3IpIHtcbiAgICAgIHRocm93IGludmFsaWRTaXplRXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydGlhbFNoZWV0U2l6ZSA9IHRoaXMubm9ybWFsaXplU2hlZXRTaXplKG5ld1NpemUpO1xuXG4gICAgY29uc3QgaXNBdXRvbWF0aWMgPSBwYXJ0aWFsU2hlZXRTaXplLmJlaGF2aW9yID09PSBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdXRvbWF0aWM7XG4gICAgaWYgKCFpc0F1dG9tYXRpYyAmJiAhcGFydGlhbFNoZWV0U2l6ZS5taW5TaXplICYmICFwYXJ0aWFsU2hlZXRTaXplLm1heFNpemUpIHtcbiAgICAgIHRocm93IGludmFsaWRTaXplRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFpc0F1dG9tYXRpYyAmJiB0aGlzLnNoZWV0VHlwZSA9PT0gQ29udHJhY3QuU2hlZXRUeXBlLldvcmtzaGVldCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihcbiAgICAgICAgQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbnZhbGlkU2l6ZUJlaGF2aW9yT25Xb3Jrc2hlZXQsXG4gICAgICAgICdPbmx5IFNoZWV0U2l6ZUJlaGF2aW9yLkF1dG9tYXRpYyBpcyBhbGxvd2VkIG9uIFdvcmtzaGVldHMnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBdXRvbWF0aWMgJiYgdGhpcy5nZXRTaGVldFNpemUoKS5iZWhhdmlvciA9PT0gcGFydGlhbFNoZWV0U2l6ZS5iZWhhdmlvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXdTaXplKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9jZXNzZWROZXdTaXplID0gdGhpcy5wcm9jZXNzTmV3U2l6ZShwYXJ0aWFsU2hlZXRTaXplKTtcblxuICAgIGNvbnN0IHNpemVTZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFNpemVTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuU2l6ZSk7XG4gICAgcmV0dXJuIHNpemVTZXJ2aWNlLmNoYW5nZVNpemVBc3luYyh0aGlzLm5hbWUsIHByb2Nlc3NlZE5ld1NpemUpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgY2xpZW50SW5mb1NlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8Q2xpZW50SW5mb1NlcnZpY2U+KFNlcnZpY2VOYW1lcy5DbGllbnRJbmZvKTtcblxuICAgICAgcmV0dXJuIGNsaWVudEluZm9TZXJ2aWNlLmdldENsaWVudEluZm9Bc3luYygpLnRoZW4oKGJvb3RzdHJhcEluZm8pID0+IHtcbiAgICAgICAgY29uc3Qgc2hlZXQgPSBib290c3RyYXBJbmZvLnB1Ymxpc2hlZFNoZWV0cy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHRoaXMubmFtZSk7XG4gICAgICAgIGlmICghc2hlZXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LlNoYXJlZEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgYENhbid0IGZpbmQgc2hlZXQgd2l0aCBuYW1lICR7dGhpcy5uYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hlZXRTaXplID0gU2hlZXRVdGlscy5nZXRTaGVldFNpemVGcm9tU2l6ZUNvbnN0cmFpbnRzKHNoZWV0LnNpemVDb25zdHJhaW50KTtcbiAgICAgICAgdGhpcy5fc2hlZXRJbmZvSW1wbC5zaGVldFNpemUgPSBzaGVldFNpemU7XG5cbiAgICAgICAgcmV0dXJuIHNoZWV0U2l6ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVTaGVldFNpemUobmV3U2l6ZTogQ29udHJhY3QuU2hlZXRTaXplKTogUGFydGlhbFNoZWV0U2l6ZSB7XG4gICAgY29uc3QgeyBiZWhhdmlvciB9ID0gbmV3U2l6ZTtcblxuICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8Q29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3I+KGJlaGF2aW9yLCBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvciwgJ1NoZWV0U2l6ZUJlaGF2aW9yJyk7XG5cbiAgICBjb25zdCBtaW5TaXplID0gU2hlZXRJbXBsLnBhcnNlRGltZW5zaW9ucyhuZXdTaXplLm1pblNpemUpO1xuICAgIGNvbnN0IG1heFNpemUgPSBTaGVldEltcGwucGFyc2VEaW1lbnNpb25zKG5ld1NpemUubWF4U2l6ZSk7XG5cbiAgICByZXR1cm4geyBiZWhhdmlvciwgbWluU2l6ZSwgbWF4U2l6ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzTmV3U2l6ZShuZXdTaXplOiBQYXJ0aWFsU2hlZXRTaXplKTogQ29udHJhY3QuU2hlZXRTaXplIHtcbiAgICBjb25zdCB7IGJlaGF2aW9yLCBtaW5TaXplOiBtaW5TaXplTWF5YmUsIG1heFNpemU6IG1heFNpemVNYXliZSB9ID0gbmV3U2l6ZTtcblxuICAgIGNvbnN0IGhhc01pbldpZHRoID0gIVBhcmFtLmlzTnVsbE9yVW5kZWZpbmVkKG1pblNpemVNYXliZT8ud2lkdGgpO1xuICAgIGNvbnN0IGhhc01pbkhlaWdodCA9ICFQYXJhbS5pc051bGxPclVuZGVmaW5lZChtaW5TaXplTWF5YmU/LmhlaWdodCk7XG4gICAgY29uc3QgaGFzTWF4V2lkdGggPSAhUGFyYW0uaXNOdWxsT3JVbmRlZmluZWQobWF4U2l6ZU1heWJlPy53aWR0aCk7XG4gICAgY29uc3QgaGFzTWF4SGVpZ2h0ID0gIVBhcmFtLmlzTnVsbE9yVW5kZWZpbmVkKG1heFNpemVNYXliZT8uaGVpZ2h0KTtcbiAgICBjb25zdCBoYXNWYWxpZE1pblNpemUgPSBoYXNNaW5XaWR0aCAmJiBoYXNNaW5IZWlnaHQ7XG4gICAgY29uc3QgaGFzVmFsaWRNYXhTaXplID0gaGFzTWF4V2lkdGggJiYgaGFzTWF4SGVpZ2h0O1xuXG4gICAgc3dpdGNoIChiZWhhdmlvcikge1xuICAgICAgY2FzZSBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdXRvbWF0aWM6IHtcbiAgICAgICAgcmV0dXJuIHsgYmVoYXZpb3IgfTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdE1vc3Q6IHtcbiAgICAgICAgaWYgKCFtYXhTaXplTWF5YmUgfHwgIWhhc1ZhbGlkTWF4U2l6ZSkge1xuICAgICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5NaXNzaW5nTWF4U2l6ZSwgJ01pc3NpbmcgbWF4U2l6ZSBmb3IgU2hlZXRTaXplQmVoYXZpb3IuQXRNb3N0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXhTaXplID0geyB3aWR0aDogbWF4U2l6ZU1heWJlLndpZHRoISwgaGVpZ2h0OiBtYXhTaXplTWF5YmUuaGVpZ2h0ISB9O1xuICAgICAgICBpZiAobWF4U2l6ZS53aWR0aCA8IDAgfHwgbWF4U2l6ZS5oZWlnaHQgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLkludmFsaWRTaXplLCAnU2l6ZSB2YWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGJlaGF2aW9yLCBtYXhTaXplIH07XG4gICAgICB9XG5cbiAgICAgIGNhc2UgQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3IuQXRMZWFzdDoge1xuICAgICAgICBpZiAoIW1pblNpemVNYXliZSB8fCAhaGFzVmFsaWRNaW5TaXplKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLk1pc3NpbmdNaW5TaXplLCAnTWlzc2luZyBtaW5TaXplIGZvciBTaGVldFNpemVCZWhhdmlvci5BdExlYXN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW5TaXplID0geyB3aWR0aDogbWluU2l6ZU1heWJlLndpZHRoISwgaGVpZ2h0OiBtaW5TaXplTWF5YmUuaGVpZ2h0ISB9O1xuICAgICAgICBpZiAobWluU2l6ZS53aWR0aCA8IDAgfHwgbWluU2l6ZS5oZWlnaHQgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLkludmFsaWRTaXplLCAnU2l6ZSB2YWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGJlaGF2aW9yLCBtaW5TaXplIH07XG4gICAgICB9XG5cbiAgICAgIGNhc2UgQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3IuUmFuZ2U6IHtcbiAgICAgICAgaWYgKCFtaW5TaXplTWF5YmUgfHwgIW1heFNpemVNYXliZSB8fCAhaGFzVmFsaWRNaW5TaXplIHx8ICFoYXNWYWxpZE1heFNpemUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVtYmVkZGluZ0Vycm9yQ29kZXMuTWlzc2luZ01pbk1heFNpemUsICdNaXNzaW5nIG1pblNpemUgb3IgbWF4U2l6ZSBmb3IgU2hlZXRTaXplQmVoYXZpb3IuUmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1pblNpemUgPSB7IHdpZHRoOiBtaW5TaXplTWF5YmUud2lkdGghLCBoZWlnaHQ6IG1pblNpemVNYXliZS5oZWlnaHQhIH07XG4gICAgICAgIGNvbnN0IG1heFNpemUgPSB7IHdpZHRoOiBtYXhTaXplTWF5YmUud2lkdGghLCBoZWlnaHQ6IG1heFNpemVNYXliZS5oZWlnaHQhIH07XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1pblNpemUud2lkdGggPCAwIHx8XG4gICAgICAgICAgbWluU2l6ZS5oZWlnaHQgPCAwIHx8XG4gICAgICAgICAgbWF4U2l6ZS53aWR0aCA8IDAgfHxcbiAgICAgICAgICBtYXhTaXplLmhlaWdodCA8IDAgfHxcbiAgICAgICAgICBtaW5TaXplLndpZHRoID4gbWF4U2l6ZS53aWR0aCB8fFxuICAgICAgICAgIG1pblNpemUuaGVpZ2h0ID4gbWF4U2l6ZS5oZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLkludmFsaWRTaXplLCAnTWlzc2luZyBtaW5TaXplIG9yIG1heFNpemUgZm9yIFNoZWV0U2l6ZUJlaGF2aW9yLlJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBiZWhhdmlvciwgbWluU2l6ZSwgbWF4U2l6ZSB9O1xuICAgICAgfVxuXG4gICAgICBjYXNlIENvbnRyYWN0LlNoZWV0U2l6ZUJlaGF2aW9yLkV4YWN0bHk6IHtcbiAgICAgICAgaWYgKG1pblNpemVNYXliZSAmJiBtYXhTaXplTWF5YmUpIHtcbiAgICAgICAgICBpZiAoaGFzVmFsaWRNaW5TaXplICYmIGhhc1ZhbGlkTWF4U2l6ZSkge1xuICAgICAgICAgICAgY29uc3QgbWluU2l6ZSA9IHsgd2lkdGg6IG1pblNpemVNYXliZS53aWR0aCEsIGhlaWdodDogbWluU2l6ZU1heWJlLmhlaWdodCEgfTtcbiAgICAgICAgICAgIGNvbnN0IG1heFNpemUgPSB7IHdpZHRoOiBtYXhTaXplTWF5YmUud2lkdGghLCBoZWlnaHQ6IG1heFNpemVNYXliZS5oZWlnaHQhIH07XG5cbiAgICAgICAgICAgIGlmIChtaW5TaXplLndpZHRoICE9PSBtYXhTaXplLndpZHRoIHx8IG1pblNpemUuaGVpZ2h0ICE9PSBtYXhTaXplLmhlaWdodCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVtYmVkZGluZ0Vycm9yQ29kZXMuSW52YWxpZFNpemUsICdDb25mbGljdGluZyBzaXplIHZhbHVlcyBmb3IgU2hlZXRTaXplQmVoYXZpb3IuRXhhY3RseScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyBiZWhhdmlvciwgbWluU2l6ZSwgbWF4U2l6ZSB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChoYXNWYWxpZE1pblNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pblNpemUgPSB7IHdpZHRoOiBtaW5TaXplTWF5YmUud2lkdGghLCBoZWlnaHQ6IG1pblNpemVNYXliZS5oZWlnaHQhIH07XG4gICAgICAgICAgICByZXR1cm4geyBiZWhhdmlvciwgbWluU2l6ZSwgbWF4U2l6ZTogbWluU2l6ZSB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChoYXNWYWxpZE1heFNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heFNpemUgPSB7IHdpZHRoOiBtYXhTaXplTWF5YmUud2lkdGghLCBoZWlnaHQ6IG1heFNpemVNYXliZS5oZWlnaHQhIH07XG4gICAgICAgICAgICByZXR1cm4geyBiZWhhdmlvciwgbWluU2l6ZTogbWF4U2l6ZSwgbWF4U2l6ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRW1iZWRkaW5nRXJyb3JDb2Rlcy5JbnZhbGlkU2l6ZSwgJ0ludmFsaWQgc2hlZXQgc2l6ZSBwYXJhbWV0ZXInKTtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LlNoYXJlZEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgYFVuc3VwcG9ydGVkIHNoZWV0IHNpemUgYmVoYXZpb3I6ICR7YmVoYXZpb3J9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VEaW1lbnNpb25zID0gKHNpemU6IENvbnRyYWN0LlNpemUgfCB1bmRlZmluZWQpOiBQYXJ0aWFsPENvbnRyYWN0LlNpemU+ID0+IHtcbiAgICBjb25zdCBlbXB0eSA9IHsgd2lkdGg6IHVuZGVmaW5lZCwgaGVpZ2h0OiB1bmRlZmluZWQgfTtcblxuICAgIGlmICghc2l6ZSkge1xuICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IHsgc3VjY2Vzczogd2lkdGhQYXJzZWQsIHBhcnNlZDogcGFyc2VkV2lkdGggfSA9IFBhcmFtLnRyeVBhcnNlTnVtYmVyKHNpemUud2lkdGgpO1xuICAgIGNvbnN0IHsgc3VjY2VzczogaGVpZ2h0UGFyc2VkLCBwYXJzZWQ6IHBhcnNlZEhlaWdodCB9ID0gUGFyYW0udHJ5UGFyc2VOdW1iZXIoc2l6ZS5oZWlnaHQpO1xuXG4gICAgaWYgKHdpZHRoUGFyc2VkICYmIGhlaWdodFBhcnNlZCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IHBhcnNlZFdpZHRoISwgaGVpZ2h0OiBwYXJzZWRIZWlnaHQhIH07XG4gICAgfVxuXG4gICAgaWYgKHdpZHRoUGFyc2VkKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogcGFyc2VkV2lkdGghIH07XG4gICAgfVxuXG4gICAgaWYgKGhlaWdodFBhcnNlZCkge1xuICAgICAgcmV0dXJuIHsgaGVpZ2h0OiBwYXJzZWRIZWlnaHQhIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9O1xufVxuIiwiaW1wb3J0IHsgU2hlZXRTaXplIGFzIEVtYmVkZGluZ1NoZWV0U2l6ZSwgU2hlZXRUeXBlLCBTaXplIGFzIEV4dGVuc2lvblNoZWV0U2l6ZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBTaGVldFBhdGggfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuXG5leHBvcnQgY2xhc3MgU2hlZXRJbmZvSW1wbCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9uYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBfc2hlZXRUeXBlOiBTaGVldFR5cGUsXG4gICAgcHJpdmF0ZSBfc2hlZXRTaXplOiBFeHRlbnNpb25TaGVldFNpemUgfCBFbWJlZGRpbmdTaGVldFNpemUsXG4gICAgcHJpdmF0ZSBfaW5kZXg/OiBudW1iZXIsXG4gICAgcHJpdmF0ZSBfaXNBY3RpdmU/OiBib29sZWFuLFxuICAgIHByaXZhdGUgX2lzSGlkZGVuPzogYm9vbGVhbixcbiAgICBwcml2YXRlIF91cmw/OiBzdHJpbmcsXG4gICkge31cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hlZXRTaXplKCk6IEV4dGVuc2lvblNoZWV0U2l6ZSB8IEVtYmVkZGluZ1NoZWV0U2l6ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoZWV0U2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgc2hlZXRTaXplKHZhbHVlOiBFeHRlbnNpb25TaGVldFNpemUgfCBFbWJlZGRpbmdTaGVldFNpemUpIHtcbiAgICB0aGlzLl9zaGVldFNpemUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hlZXRUeXBlKCk6IFNoZWV0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoZWV0VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hlZXRQYXRoKCk6IFNoZWV0UGF0aCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNoZWV0TmFtZTogdGhpcy5uYW1lLFxuICAgICAgaXNEYXNoYm9hcmQ6IHRoaXMuc2hlZXRUeXBlID09PSBTaGVldFR5cGUuRGFzaGJvYXJkLFxuICAgICAgLy8gVE9ETyAtIFN0b3JpZXNcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldCBpbmRleCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNBY3RpdmUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlO1xuICB9XG5cbiAgcHVibGljIHNldCBhY3RpdmUoYWN0aXZlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNBY3RpdmUgPSBhY3RpdmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzSGlkZGVuKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pc0hpZGRlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFdmVudFR5cGUgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgU2luZ2xlRXZlbnRNYW5hZ2VyIH0gZnJvbSAnLi4vU2luZ2xlRXZlbnRNYW5hZ2VyJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIFNpbmdsZUV2ZW50TWFuYWdlciBpbnRlcmZhY2UgZm9yIGEgc2luZ2xlIHR5cGUgb2YgVGFibGVhdSBldmVudFxuICpcbiAqIEB0ZW1wbGF0ZSBURXZlbnRUeXBlIFRoZSBUYWJsZWF1IGV2ZW50IHR5cGUgdGhpcyBjbGFzcyBzcGVjaWFsaXplc1xuICovXG5leHBvcnQgY2xhc3MgU2luZ2xlRXZlbnRNYW5hZ2VySW1wbDxURXZlbnRUeXBlIGV4dGVuZHMgQ29udHJhY3QuVGFibGVhdUV2ZW50PiBpbXBsZW1lbnRzIFNpbmdsZUV2ZW50TWFuYWdlciB7XG4gIHByaXZhdGUgX2V2ZW50VHlwZTogVGFibGVhdUV2ZW50VHlwZTtcbiAgcHJpdmF0ZSBfaGFuZGxlcnM6IEFycmF5PChldmVudE9iajogVEV2ZW50VHlwZSkgPT4gdm9pZD47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGV2ZW50VHlwZTogVGFibGVhdUV2ZW50VHlwZSkge1xuICAgIHRoaXMuX2V2ZW50VHlwZSA9IGV2ZW50VHlwZTtcbiAgICB0aGlzLl9oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgcHVibGljIGdldCBldmVudFR5cGUoKTogVGFibGVhdUV2ZW50VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyKGhhbmRsZXI6IChldmVudE9iajogVEV2ZW50VHlwZSkgPT4gdm9pZCk6IENvbnRyYWN0LlRhYmxlYXVFdmVudFVucmVnaXN0ZXJGbiB7XG4gICAgdGhpcy5faGFuZGxlcnMucHVzaChoYW5kbGVyKTtcbiAgICByZXR1cm4gKCkgPT4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGhhbmRsZXIpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUV2ZW50TGlzdGVuZXIoaGFuZGxlcjogKGV2ZW50T2JqOiBURXZlbnRUeXBlKSA9PiB2b2lkKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYmVmb3JlQ291bnQgPSB0aGlzLl9oYW5kbGVycy5sZW5ndGg7XG4gICAgdGhpcy5faGFuZGxlcnMgPSB0aGlzLl9oYW5kbGVycy5maWx0ZXIoKGgpID0+IGggIT09IGhhbmRsZXIpO1xuICAgIHJldHVybiBiZWZvcmVDb3VudCA+IHRoaXMuX2hhbmRsZXJzLmxlbmd0aDtcbiAgfVxuXG4gIHB1YmxpYyB0cmlnZ2VyRXZlbnQoZXZlbnRHZW5lcmF0b3I6ICgpID0+IFRFdmVudFR5cGUpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5faGFuZGxlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGV2ZW50TW9kZWwgPSBldmVudEdlbmVyYXRvcigpO1xuICAgICAgICBoYW5kbGVyKGV2ZW50TW9kZWwpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBTaW5jZSB0aGlzIGhhbmRsZXIgY291bGQgYmUgb3V0c2lkZSBvdXIgY29udHJvbCwganVzdCBjYXRjaCBhbnl0aGluZyBpdCB0aHJvd3MgYW5kIGNvbnRpbnVlIG9uXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFNoZWV0SW5mbywgU3RvcnlNb2RlbCwgU3RvcnlQb2ludE1vZGVsIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEFwaVNlcnZpY2VSZWdpc3RyeSwgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IFN0b3J5QWN0aXZhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9TdG9yeUFjdGl2YXRpb25TZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uL1RhYmxlYXVFcnJvcic7XG5pbXBvcnQgeyBFcnJvckhlbHBlcnMgfSBmcm9tICcuLi9VdGlscy9FcnJvckhlbHBlcnMnO1xuaW1wb3J0IHsgU2hvcnRMaXZlZERlZmVycmVkIH0gZnJvbSAnLi4vVXRpbHMvU2hvcnRMaXZlZERlZmVycmVkJztcbmltcG9ydCB7IFNoZWV0SW1wbCB9IGZyb20gJy4vU2hlZXRJbXBsJztcbmltcG9ydCB7IFNoZWV0SW5mb0ltcGwgfSBmcm9tICcuL1NoZWV0SW5mb0ltcGwnO1xuaW1wb3J0IHsgU3RvcnlQb2ludEltcGwgfSBmcm9tICcuL1N0b3J5UG9pbnRJbXBsJztcbmltcG9ydCB7IFN0b3J5UG9pbnRJbmZvSW1wbCB9IGZyb20gJy4vU3RvcnlQb2ludEluZm9JbXBsJztcblxuZXhwb3J0IGNsYXNzIFN0b3J5SW1wbCBleHRlbmRzIFNoZWV0SW1wbCB7XG4gIHByaXZhdGUgX2FjdGl2ZVN0b3J5UG9pbnRJbXBsOiBTdG9yeVBvaW50SW1wbDtcbiAgcHJpdmF0ZSBfc3RvcnlQb2ludEluZm9JbXBsczogQXJyYXk8U3RvcnlQb2ludEluZm9JbXBsPiA9IFtdO1xuICBwcml2YXRlIF9kZWZlcnJlZDogU2hvcnRMaXZlZERlZmVycmVkPFN0b3J5UG9pbnRJbXBsPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIF9zaGVldEluZm9JbXBsOiBTaGVldEluZm9JbXBsLFxuICAgIHN0b3J5TW9kZWw6IFN0b3J5TW9kZWwsXG4gICAgcHJpdmF0ZSBfcHVibGlzaGVkU2hlZXRJbmZvczogQXJyYXk8U2hlZXRJbmZvPixcbiAgICBwcm90ZWN0ZWQgX3JlZ2lzdHJ5SWQ6IG51bWJlcixcbiAgKSB7XG4gICAgc3VwZXIoX3NoZWV0SW5mb0ltcGwsIF9yZWdpc3RyeUlkKTtcbiAgICB0aGlzLl9kZWZlcnJlZCA9IG5ldyBTaG9ydExpdmVkRGVmZXJyZWQ8U3RvcnlQb2ludEltcGw+KCk7XG4gICAgdGhpcy5pbml0aWFsaXplU3Rvcnkoc3RvcnlNb2RlbCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVTdG9yeShzdG9yeU1vZGVsOiBTdG9yeU1vZGVsKSB7XG4gICAgc3RvcnlNb2RlbC5zdG9yeVBvaW50cy5mb3JFYWNoKChzdG9yeVBvaW50TW9kZWwpID0+IHtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gc3RvcnlQb2ludE1vZGVsLmluZGV4ID09PSBzdG9yeU1vZGVsLmFjdGl2ZVN0b3J5UG9pbnRJbmRleDtcbiAgICAgIGNvbnN0IHN0b3J5UG9pbnRJbmZvSW1wbCA9IG5ldyBTdG9yeVBvaW50SW5mb0ltcGwoXG4gICAgICAgIHN0b3J5UG9pbnRNb2RlbC5jYXB0aW9uLFxuICAgICAgICBzdG9yeVBvaW50TW9kZWwuaW5kZXgsXG4gICAgICAgIHN0b3J5UG9pbnRNb2RlbC5zdG9yeVBvaW50SWQsXG4gICAgICAgIGlzQWN0aXZlLFxuICAgICAgICBzdG9yeVBvaW50TW9kZWwudXBkYXRlZCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgICB0aGlzLl9zdG9yeVBvaW50SW5mb0ltcGxzLnB1c2goc3RvcnlQb2ludEluZm9JbXBsKTtcblxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVN0b3J5UG9pbnRJbXBsID0gbmV3IFN0b3J5UG9pbnRJbXBsKFxuICAgICAgICAgIHN0b3J5UG9pbnRJbmZvSW1wbCxcbiAgICAgICAgICB0aGlzLl9wdWJsaXNoZWRTaGVldEluZm9zLFxuICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5SWQsXG4gICAgICAgICAgc3RvcnlQb2ludE1vZGVsLmNvbnRhaW5lZFNoZWV0SW5mbyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RvcnlJbmZvKGluZGV4OiBudW1iZXIsIHN0b3J5UG9pbnRNb2RlbDogU3RvcnlQb2ludE1vZGVsKSB7XG4gICAgaWYgKCF0aGlzLl9zdG9yeVBvaW50SW5mb0ltcGxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHN0b3J5SW5mb0ltcGwgPSB0aGlzLl9zdG9yeVBvaW50SW5mb0ltcGxzW2luZGV4XTtcbiAgICBpZiAoc3RvcnlJbmZvSW1wbC5zdG9yeVBvaW50SWQgIT09IHN0b3J5UG9pbnRNb2RlbC5zdG9yeVBvaW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoXG4gICAgICAgIENvbnRyYWN0LkVtYmVkZGluZ0Vycm9yQ29kZXMuU3RvcnlQb2ludElkTWlzbWF0Y2gsXG4gICAgICAgIGBXZSBzaG91bGQgbm90IGJlIHVwZGF0aW5nIGEgc3RvcnkgcG9pbnQgd2hlbiB0aGUgSURzIGRvbid0IG1hdGNoLiBFeGlzdGluZyBzdG9yeVBvaW50SUQ9JHtzdG9yeUluZm9JbXBsLnN0b3J5UG9pbnRJZH0sIG5ld1N0b3J5UG9pbnRJRD0ke3N0b3J5UG9pbnRNb2RlbC5zdG9yeVBvaW50SWR9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHN0b3J5SW5mb0ltcGwuY2FwdGlvbiA9IHN0b3J5UG9pbnRNb2RlbC5jYXB0aW9uO1xuICAgIHN0b3J5SW5mb0ltcGwudXBkYXRlZCA9IHN0b3J5UG9pbnRNb2RlbC51cGRhdGVkO1xuXG4gICAgaWYgKHRoaXMuX2FjdGl2ZVN0b3J5UG9pbnRJbXBsLnN0b3J5UG9pbnRJZCA9PT0gc3RvcnlQb2ludE1vZGVsLnN0b3J5UG9pbnRJZCkge1xuICAgICAgdGhpcy5fYWN0aXZlU3RvcnlQb2ludEltcGwudXBkYXRlZCA9IHN0b3J5SW5mb0ltcGwudXBkYXRlZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3Rvcnkoc3RvcnlQb2ludE1vZGVsOiBTdG9yeVBvaW50TW9kZWwpIHtcbiAgICBpZiAoIXRoaXMuX3N0b3J5UG9pbnRJbmZvSW1wbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdG9yeVBvaW50SW5mb0ltcGxzLmZvckVhY2goKHN0b3J5UG9pbnRJbmZvSW1wbCkgPT4ge1xuICAgICAgY29uc3QgaXNBY3RpdmUgPSBzdG9yeVBvaW50SW5mb0ltcGwuc3RvcnlQb2ludElkID09PSBzdG9yeVBvaW50TW9kZWwuc3RvcnlQb2ludElkO1xuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgc3RhdGVcbiAgICAgICAgc3RvcnlQb2ludEluZm9JbXBsLmNhcHRpb24gPSBzdG9yeVBvaW50TW9kZWwuY2FwdGlvbjtcbiAgICAgICAgc3RvcnlQb2ludEluZm9JbXBsLmluZGV4ID0gc3RvcnlQb2ludE1vZGVsLmluZGV4O1xuICAgICAgICBzdG9yeVBvaW50SW5mb0ltcGwuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgc3RvcnlQb2ludEluZm9JbXBsLnVwZGF0ZWQgPSBzdG9yeVBvaW50TW9kZWwudXBkYXRlZDtcblxuICAgICAgICAvLyByZS1pbml0aWFsaXplIGFjdGl2ZVN0b3J5UG9pbnRJbXBsXG4gICAgICAgIHRoaXMuX2FjdGl2ZVN0b3J5UG9pbnRJbXBsID0gbmV3IFN0b3J5UG9pbnRJbXBsKFxuICAgICAgICAgIHN0b3J5UG9pbnRJbmZvSW1wbCxcbiAgICAgICAgICB0aGlzLl9wdWJsaXNoZWRTaGVldEluZm9zLFxuICAgICAgICAgIHRoaXMuX3JlZ2lzdHJ5SWQsXG4gICAgICAgICAgc3RvcnlQb2ludE1vZGVsLmNvbnRhaW5lZFNoZWV0SW5mbyxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNldCBvbGQgb25lcyB0byBmYWxzZVxuICAgICAgICBzdG9yeVBvaW50SW5mb0ltcGwuYWN0aXZlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5hY3RpdmVTdG9yeVBvaW50KSB7XG4gICAgICB0aGlzLl9kZWZlcnJlZC5yZXNvbHZlKHRoaXMuYWN0aXZlU3RvcnlQb2ludCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmVTdG9yeVBvaW50KCk6IFN0b3J5UG9pbnRJbXBsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlU3RvcnlQb2ludEltcGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0b3J5UG9pbnRzSW5mbygpOiBBcnJheTxTdG9yeVBvaW50SW5mb0ltcGw+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcnlQb2ludEluZm9JbXBscztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NoZWV0SW5mb0ltcGwuYWN0aXZlO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0hpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9zaGVldEluZm9JbXBsLmlzSGlkZGVuO1xuICB9XG5cbiAgcHVibGljIGFjdGl2YXRlTmV4dFN0b3J5UG9pbnRBc3luYygpOiBQcm9taXNlPFN0b3J5UG9pbnRJbXBsPiB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVN0b3J5UG9pbnRJbXBsLmluZGV4ID09PSB0aGlzLl9zdG9yeVBvaW50SW5mb0ltcGxzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYWN0aXZlU3RvcnlQb2ludEltcGwpO1xuICAgIH1cblxuICAgIGxldCBwcm9taXNlID0gdGhpcy5fZGVmZXJyZWQuZ2V0TmV3UHJvbWlzZU9yVGhyb3dJZkJ1c3koKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8U3RvcnlBY3RpdmF0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLlN0b3J5QWN0aXZhdGlvbik7XG4gICAgc2VydmljZS5hY3RpdmF0ZU5leHRTdG9yeVBvaW50QXN5bmMoKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmF0ZVByZXZpb3VzU3RvcnlQb2ludEFzeW5jKCk6IFByb21pc2U8U3RvcnlQb2ludEltcGw+IHtcbiAgICBpZiAodGhpcy5fYWN0aXZlU3RvcnlQb2ludEltcGwuaW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYWN0aXZlU3RvcnlQb2ludEltcGwpO1xuICAgIH1cblxuICAgIGxldCBwcm9taXNlID0gdGhpcy5fZGVmZXJyZWQuZ2V0TmV3UHJvbWlzZU9yVGhyb3dJZkJ1c3koKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8U3RvcnlBY3RpdmF0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLlN0b3J5QWN0aXZhdGlvbik7XG4gICAgc2VydmljZS5hY3RpdmF0ZVByZXZpb3VzU3RvcnlQb2ludEFzeW5jKCk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZhdGVTdG9yeVBvaW50QXN5bmMoaW5kZXg6IG51bWJlcik6IFByb21pc2U8U3RvcnlQb2ludEltcGw+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKGluZGV4LCAnaW5kZXgnKTtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyVHlwZShpbmRleCwgJ251bWJlcicsICdpbmRleCcpO1xuXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl9zdG9yeVBvaW50SW5mb0ltcGxzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLkluZGV4T3V0T2ZSYW5nZSwgJ1RoZSBpbmRleCBwYXNzZWQgdG8gdGhpcyBjb21tYW5kIGlzIG91dCBvZiByYW5nZS4nKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPT09IHRoaXMuX2FjdGl2ZVN0b3J5UG9pbnRJbXBsLmluZGV4KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2FjdGl2ZVN0b3J5UG9pbnRJbXBsKTtcbiAgICB9XG5cbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMuX2RlZmVycmVkLmdldE5ld1Byb21pc2VPclRocm93SWZCdXN5KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFN0b3J5QWN0aXZhdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5TdG9yeUFjdGl2YXRpb24pO1xuICAgIHNlcnZpY2UuYWN0aXZhdGVTdG9yeVBvaW50QXN5bmMoaW5kZXgpO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgcHVibGljIHJldmVydFN0b3J5UG9pbnRBc3luYyhpbmRleDogbnVtYmVyKTogUHJvbWlzZTxTdG9yeVBvaW50SW5mb0ltcGw+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKGluZGV4LCAnaW5kZXgnKTtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyVHlwZShpbmRleCwgJ251bWJlcicsICdpbmRleCcpO1xuXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl9zdG9yeVBvaW50SW5mb0ltcGxzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FbWJlZGRpbmdFcnJvckNvZGVzLkluZGV4T3V0T2ZSYW5nZSwgJ1RoZSBpbmRleCBwYXNzZWQgdG8gdGhpcyBjb21tYW5kIGlzIG91dCBvZiByYW5nZS4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPFN0b3J5QWN0aXZhdGlvblNlcnZpY2U+KFNlcnZpY2VOYW1lcy5TdG9yeUFjdGl2YXRpb24pO1xuXG4gICAgcmV0dXJuIHNlcnZpY2UucmV2ZXJ0U3RvcnlQb2ludEFzeW5jKGluZGV4KS50aGVuPFN0b3J5UG9pbnRJbmZvSW1wbD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0b3J5SW5mbyhyZXNwb25zZS5pbmRleCwgcmVzcG9uc2UpO1xuICAgICAgY29uc3Qgc3RvcnlQb2ludEluZm9JbXBsID0gbmV3IFN0b3J5UG9pbnRJbmZvSW1wbChcbiAgICAgICAgcmVzcG9uc2UuY2FwdGlvbixcbiAgICAgICAgcmVzcG9uc2UuaW5kZXgsXG4gICAgICAgIHJlc3BvbnNlLnN0b3J5UG9pbnRJZCxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHJlc3BvbnNlLnVwZGF0ZWQsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0b3J5UG9pbnRJbmZvSW1wbDtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclBlbmRpbmdQcm9taXNlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGVmZXJyZWQpIHtcbiAgICAgIHRoaXMuX2RlZmVycmVkLnJlamVjdCgnQWxsIHBlbmRpbmcgcHJvbWlzZXMgY2xlYXJlZCcpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IENvbnRhaW5lZFNoZWV0SW5mb01vZGVsLCBTaGVldEluZm8sIFNoZWV0UGF0aCwgVmlzdWFsSWQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnLi4vVGFibGVhdUVycm9yJztcbmltcG9ydCB7IFNoZWV0VXRpbHMgfSBmcm9tICcuLi9VdGlscy9TaGVldFV0aWxzJztcbmltcG9ydCB7IERhc2hib2FyZEltcGwgfSBmcm9tICcuL0Rhc2hib2FyZEltcGwnO1xuaW1wb3J0IHsgU2hlZXRJbXBsIH0gZnJvbSAnLi9TaGVldEltcGwnO1xuaW1wb3J0IHsgU2hlZXRJbmZvSW1wbCB9IGZyb20gJy4vU2hlZXRJbmZvSW1wbCc7XG5pbXBvcnQgeyBTdG9yeUltcGwgfSBmcm9tICcuL1N0b3J5SW1wbCc7XG5pbXBvcnQgeyBTdG9yeVBvaW50SW5mb0ltcGwgfSBmcm9tICcuL1N0b3J5UG9pbnRJbmZvSW1wbCc7XG5pbXBvcnQgeyBXb3Jrc2hlZXRJbXBsIH0gZnJvbSAnLi9Xb3Jrc2hlZXRJbXBsJztcblxuZXhwb3J0IGNsYXNzIFN0b3J5UG9pbnRJbXBsIHtcbiAgcHJpdmF0ZSBfY29udGFpbmVkU2hlZXRJbXBsOiBTaGVldEltcGw7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3N0b3J5UG9pbnRJbmZvSW1wbDogU3RvcnlQb2ludEluZm9JbXBsLFxuICAgIHNoZWV0SW5mb3M6IEFycmF5PFNoZWV0SW5mbz4sXG4gICAgcmVnaXN0cnlJZDogbnVtYmVyLFxuICAgIGNvbnRhaW5lZFNoZWV0SW5mbz86IENvbnRhaW5lZFNoZWV0SW5mb01vZGVsLFxuICApIHtcbiAgICBpZiAoY29udGFpbmVkU2hlZXRJbmZvKSB7XG4gICAgICB0aGlzLl9jb250YWluZWRTaGVldEltcGwgPSB0aGlzLmNyZWF0ZUNvbnRhaW5lZFNoZWV0KGNvbnRhaW5lZFNoZWV0SW5mbywgc2hlZXRJbmZvcywgcmVnaXN0cnlJZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zdG9yeVBvaW50SW5mb0ltcGwuaW5kZXg7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNhcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcnlQb2ludEluZm9JbXBsLmNhcHRpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcnlQb2ludEluZm9JbXBsLmFjdGl2ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdXBkYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcnlQb2ludEluZm9JbXBsLnVwZGF0ZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IHVwZGF0ZWQodXBkYXRlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX3N0b3J5UG9pbnRJbmZvSW1wbC51cGRhdGVkID0gdXBkYXRlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFyZW50U3RvcnkoKTogU3RvcnlJbXBsIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcnlQb2ludEluZm9JbXBsLnBhcmVudFN0b3J5O1xuICB9XG5cbiAgcHVibGljIGdldCBjb250YWluZWRTaGVldCgpOiBTaGVldEltcGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jb250YWluZWRTaGVldEltcGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0b3J5UG9pbnRJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zdG9yeVBvaW50SW5mb0ltcGwuc3RvcnlQb2ludElkO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb250YWluZWRTaGVldChjb250YWluZWRTaGVldEluZm86IENvbnRhaW5lZFNoZWV0SW5mb01vZGVsLCBzaGVldEluZm9zOiBBcnJheTxTaGVldEluZm8+LCByZWdpc3RyeUlkOiBudW1iZXIpOiBTaGVldEltcGwge1xuICAgIGNvbnN0IGNvbnRhaW5lZFNoZWV0SWR4ID0gLTE7XG5cbiAgICBjb25zdCBwdWJsaXNoZWRTaGVldEluZm8gPSBTaGVldFV0aWxzLmdldFB1Ymxpc2hlZFNoZWV0SW5mb0J5TmFtZShjb250YWluZWRTaGVldEluZm8ubmFtZSwgc2hlZXRJbmZvcyk7XG4gICAgY29uc3QgY29udGFpbmVkU2hlZXRTaXplID0gU2hlZXRVdGlscy5jcmVhdGVBdXRvbWF0aWNTaXplKCk7XG4gICAgY29uc3QgaXNDb250YWluZWRTaGVldEhpZGRlbiA9IHB1Ymxpc2hlZFNoZWV0SW5mbyA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbnRhaW5lZFNoZWV0VXJsID0gcHVibGlzaGVkU2hlZXRJbmZvID8gcHVibGlzaGVkU2hlZXRJbmZvLnVybCA6ICcnO1xuICAgIC8vIENvbnRhaW5lZCBzaGVldHMgYXJlbid0IGFjdGl2ZSAtIHRoZSBjb250YWluaW5nIHNoZWV0IGlzIGFjdGl2ZS5cbiAgICBjb25zdCBjb250YWluZWRTaGVldEFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGFpbmVkU2hlZXRJbmZvSW1wbCA9IG5ldyBTaGVldEluZm9JbXBsKFxuICAgICAgY29udGFpbmVkU2hlZXRJbmZvLm5hbWUsXG4gICAgICBTaGVldFV0aWxzLmdldFNoZWV0VHlwZUVudW0oY29udGFpbmVkU2hlZXRJbmZvLnNoZWV0VHlwZSksXG4gICAgICBjb250YWluZWRTaGVldFNpemUsXG4gICAgICBjb250YWluZWRTaGVldElkeCxcbiAgICAgIGNvbnRhaW5lZFNoZWV0QWN0aXZlLFxuICAgICAgaXNDb250YWluZWRTaGVldEhpZGRlbixcbiAgICAgIGNvbnRhaW5lZFNoZWV0VXJsLFxuICAgICk7XG5cbiAgICBsZXQgc2hlZXRJbXBsOiBTaGVldEltcGw7XG4gICAgc3dpdGNoIChjb250YWluZWRTaGVldEluZm9JbXBsLnNoZWV0VHlwZSkge1xuICAgICAgY2FzZSBDb250cmFjdC5TaGVldFR5cGUuV29ya3NoZWV0OiB7XG4gICAgICAgIGNvbnN0IHZpeklkOiBWaXN1YWxJZCA9IHtcbiAgICAgICAgICB3b3Jrc2hlZXQ6IGNvbnRhaW5lZFNoZWV0SW5mb0ltcGwubmFtZSxcbiAgICAgICAgfTtcblxuICAgICAgICBzaGVldEltcGwgPSBuZXcgV29ya3NoZWV0SW1wbChjb250YWluZWRTaGVldEluZm9JbXBsLCByZWdpc3RyeUlkLCB2aXpJZCwgbnVsbCwgdGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBDb250cmFjdC5TaGVldFR5cGUuRGFzaGJvYXJkOiB7XG4gICAgICAgIGNvbnN0IHNoZWV0UGF0aDogU2hlZXRQYXRoID0ge1xuICAgICAgICAgIHNoZWV0TmFtZTogY29udGFpbmVkU2hlZXRJbmZvSW1wbC5uYW1lLFxuICAgICAgICAgIGlzRGFzaGJvYXJkOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHNoZWV0SW1wbCA9IG5ldyBEYXNoYm9hcmRJbXBsKGNvbnRhaW5lZFNoZWV0SW5mb0ltcGwsIGNvbnRhaW5lZFNoZWV0SW5mby5kYXNoYm9hcmRab25lcywgc2hlZXRQYXRoLCByZWdpc3RyeUlkLCB0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuU2hhcmVkRXJyb3JDb2Rlcy5TZXJ2ZXJFcnJvciwgJ0ludmFsaWQgU2hlZXRUeXBlJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoZWV0SW1wbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU3RvcnlJbXBsIH0gZnJvbSAnLi9TdG9yeUltcGwnO1xuXG5leHBvcnQgY2xhc3MgU3RvcnlQb2ludEluZm9JbXBsIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NhcHRpb246IHN0cmluZyxcbiAgICBwcml2YXRlIF9pbmRleDogbnVtYmVyLFxuICAgIHByaXZhdGUgX3N0b3J5UG9pbnRJZDogbnVtYmVyLFxuICAgIHByaXZhdGUgX2FjdGl2ZTogYm9vbGVhbixcbiAgICBwcml2YXRlIF91cGRhdGVkOiBib29sZWFuLFxuICAgIHByaXZhdGUgX3BhcmVudFN0b3J5SW1wbDogU3RvcnlJbXBsLFxuICApIHt9XG5cbiAgcHVibGljIGdldCBjYXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9jYXB0aW9uO1xuICB9XG5cbiAgcHVibGljIHNldCBjYXB0aW9uKGNhcHRpb246IHN0cmluZykge1xuICAgIHRoaXMuX2NhcHRpb24gPSBjYXB0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5kZXg7XG4gIH1cblxuICBwdWJsaWMgc2V0IGluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9pbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcHVibGljIGdldCBzdG9yeVBvaW50SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3J5UG9pbnRJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGFjdGl2ZShpc0FjdGl2ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2FjdGl2ZSA9IGlzQWN0aXZlO1xuICB9XG5cbiAgcHVibGljIGdldCB1cGRhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl91cGRhdGVkO1xuICB9XG5cbiAgcHVibGljIHNldCB1cGRhdGVkKGlzVXBkYXRlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX3VwZGF0ZWQgPSBpc1VwZGF0ZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhcmVudFN0b3J5KCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRTdG9yeUltcGw7XG4gIH1cbn1cbiIsImV4cG9ydCBjbGFzcyBXb3JrYm9va0ltcGwge31cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQge1xuICBBcGlNZW51VHlwZSxcbiAgQ29udGV4dE1lbnVPcHRpb25zLFxuICBEYXRlUmFuZ2VUeXBlLFxuICBFcnJvckNvZGVzLFxuICBGaWx0ZXJOdWxsT3B0aW9uLFxuICBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbixcbiAgUGVyaW9kVHlwZSxcbiAgU2VsZWN0aW9uVXBkYXRlVHlwZSxcbiAgU2hhcmVkRXJyb3JDb2Rlcyxcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IERhdGFTY2hlbWEsIERhdGFTb3VyY2UgYXMgRGF0YVNvdXJjZUluZm8sIFZpc3VhbElkLCBXb3Jrc2hlZXREYXRhU291cmNlSW5mbyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vRGF0YVNvdXJjZSc7XG5pbXBvcnQgeyBMb2dpY2FsVGFibGUgfSBmcm9tICcuLi9Mb2dpY2FsVGFibGUnO1xuaW1wb3J0IHsgQW5ub3RhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9TZXJ2aWNlcy9Bbm5vdGF0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0RhdGFTb3VyY2VTZXJ2aWNlJztcbmltcG9ydCB7IEV4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvRXh0ZXJuYWxDb250ZXh0TWVudVNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0ZpbHRlclNlcnZpY2UnO1xuaW1wb3J0IHsgR2V0RGF0YVNlcnZpY2UsIEdldERhdGFUeXBlIH0gZnJvbSAnLi4vU2VydmljZXMvR2V0RGF0YVNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL1NlbGVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5LCBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnLi4vVGFibGVhdUVycm9yJztcbmltcG9ydCB7IEVycm9ySGVscGVycyB9IGZyb20gJy4uL1V0aWxzL0Vycm9ySGVscGVycyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRJbXBsIH0gZnJvbSAnLi9EYXNoYm9hcmRJbXBsJztcbmltcG9ydCB7IERhdGFTb3VyY2VJbXBsIH0gZnJvbSAnLi9EYXRhU291cmNlSW1wbCc7XG5pbXBvcnQgeyBTaGVldEltcGwgfSBmcm9tICcuL1NoZWV0SW1wbCc7XG5pbXBvcnQgeyBTaGVldEluZm9JbXBsIH0gZnJvbSAnLi9TaGVldEluZm9JbXBsJztcbmltcG9ydCB7IFN0b3J5UG9pbnRJbXBsIH0gZnJvbSAnLi9TdG9yeVBvaW50SW1wbCc7XG5cbmV4cG9ydCBjbGFzcyBXb3Jrc2hlZXRJbXBsIGV4dGVuZHMgU2hlZXRJbXBsIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHNoZWV0SW5mb0ltcGw6IFNoZWV0SW5mb0ltcGwsXG4gICAgX3JlZ2lzdHJ5SWQ6IG51bWJlcixcbiAgICBwcml2YXRlIF92aXN1YWxJZDogVmlzdWFsSWQsXG4gICAgcHJpdmF0ZSBfcGFyZW50RGFzaGJvYXJkSW1wbDogRGFzaGJvYXJkSW1wbCB8IG51bGwsXG4gICAgcHJpdmF0ZSBfcGFyZW50U3RvcnlQb2ludEltcGw6IFN0b3J5UG9pbnRJbXBsIHwgbnVsbCxcbiAgKSB7XG4gICAgc3VwZXIoc2hlZXRJbmZvSW1wbCwgX3JlZ2lzdHJ5SWQpO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnREYXNoYm9hcmQoKTogRGFzaGJvYXJkSW1wbCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnREYXNoYm9hcmRJbXBsO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnRTdG9yeVBvaW50KCk6IFN0b3J5UG9pbnRJbXBsIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudFN0b3J5UG9pbnRJbXBsO1xuICB9XG5cbiAgcHVibGljIGdldCB2aXN1YWxJZCgpOiBWaXN1YWxJZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc3VhbElkO1xuICB9XG5cbiAgcHVibGljIGdldE1heFBhZ2VSb3dMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiAxMDAwMDtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUZpbHRlckFzeW5jKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogQXJyYXk8c3RyaW5nPixcbiAgICB1cGRhdGVUeXBlOiBDb250cmFjdC5GaWx0ZXJVcGRhdGVUeXBlLFxuICAgIG9wdGlvbnM6IENvbnRyYWN0LkZpbHRlck9wdGlvbnMsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeUVudW1WYWx1ZTxDb250cmFjdC5GaWx0ZXJVcGRhdGVUeXBlPih1cGRhdGVUeXBlLCBDb250cmFjdC5GaWx0ZXJVcGRhdGVUeXBlLCAnQ29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZScpO1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RmlsdGVyU2VydmljZT4oU2VydmljZU5hbWVzLkZpbHRlcik7XG4gICAgcmV0dXJuIHNlcnZpY2UuYXBwbHlGaWx0ZXJBc3luYyh0aGlzLnZpc3VhbElkLCBmaWVsZE5hbWUsIHZhbHVlcywgdXBkYXRlVHlwZSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlSYW5nZUZpbHRlckFzeW5jKGZpZWxkTmFtZTogc3RyaW5nLCBmaWx0ZXJPcHRpb25zOiBDb250cmFjdC5SYW5nZUZpbHRlck9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlQYXJhbWV0ZXIoZmllbGROYW1lLCAnZmllbGROYW1lJyk7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihmaWx0ZXJPcHRpb25zLCAnZmlsdGVyT3B0aW9ucycpO1xuICAgIGlmIChmaWx0ZXJPcHRpb25zLm51bGxPcHRpb24pIHtcbiAgICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8RmlsdGVyTnVsbE9wdGlvbj4oZmlsdGVyT3B0aW9ucy5udWxsT3B0aW9uLCBGaWx0ZXJOdWxsT3B0aW9uLCAnRmlsdGVyTnVsbE9wdGlvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBFcnJvckhlbHBlcnMudmVyaWZ5UmFuZ2VQYXJhbVR5cGUoZmlsdGVyT3B0aW9ucy5taW4sIGZpbHRlck9wdGlvbnMubWF4KTtcbiAgICB9XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxGaWx0ZXJTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRmlsdGVyKTtcbiAgICByZXR1cm4gc2VydmljZS5hcHBseVJhbmdlRmlsdGVyQXN5bmModGhpcy52aXN1YWxJZCwgZmllbGROYW1lLCBmaWx0ZXJPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUhpZXJhcmNoaWNhbEZpbHRlckFzeW5jKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogQXJyYXk8c3RyaW5nPiB8IENvbnRyYWN0LkhpZXJhcmNoaWNhbExldmVscyxcbiAgICB1cGRhdGVUeXBlOiBDb250cmFjdC5GaWx0ZXJVcGRhdGVUeXBlLFxuICAgIG9wdGlvbnM6IENvbnRyYWN0LkZpbHRlck9wdGlvbnMsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihmaWVsZE5hbWUsICdmaWVsZE5hbWUnKTtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKHZhbHVlcywgJ3ZhbHVlcycpO1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8Q29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZT4odXBkYXRlVHlwZSwgQ29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZSwgJ0NvbnRyYWN0LkZpbHRlclVwZGF0ZVR5cGUnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSAmJiAhdmFsdWVzLmxldmVscykge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihcbiAgICAgICAgRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLFxuICAgICAgICAndmFsdWVzIHBhcmFtZXRlciBmb3IgYXBwbHlIaWVyYXJjaGljYWxGaWx0ZXJBc3luYyBtdXN0IGJlIGFuIGFycmF5IG9yIGNvbnRhaW4gYSBsZXZlbHMga2V5JyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RmlsdGVyU2VydmljZT4oU2VydmljZU5hbWVzLkZpbHRlcik7XG4gICAgcmV0dXJuIHNlcnZpY2UuYXBwbHlIaWVyYXJjaGljYWxGaWx0ZXJBc3luYyh0aGlzLnZpc3VhbElkLCBmaWVsZE5hbWUsIHZhbHVlcywgdXBkYXRlVHlwZSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJGaWx0ZXJBc3luYyhmaWVsZE5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihmaWVsZE5hbWUsICdmaWVsZE5hbWUnKTtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEZpbHRlclNlcnZpY2U+KFNlcnZpY2VOYW1lcy5GaWx0ZXIpO1xuICAgIHJldHVybiBzZXJ2aWNlLmNsZWFyRmlsdGVyQXN5bmModGhpcy52aXN1YWxJZCwgZmllbGROYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseVJlbGF0aXZlRGF0ZUZpbHRlckFzeW5jKGZpZWxkTmFtZTogc3RyaW5nLCBvcHRpb25zOiBDb250cmFjdC5SZWxhdGl2ZURhdGVGaWx0ZXJPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5U3RyaW5nUGFyYW1ldGVyKGZpZWxkTmFtZSwgJ2ZpZWxkTmFtZScpO1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlQYXJhbWV0ZXIob3B0aW9ucywgJ29wdGlvbnMnKTtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5RW51bVZhbHVlPFBlcmlvZFR5cGU+KG9wdGlvbnMucGVyaW9kVHlwZSwgUGVyaW9kVHlwZSwgJ1BlcmlvZFR5cGUnKTtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5RW51bVZhbHVlPERhdGVSYW5nZVR5cGU+KG9wdGlvbnMucmFuZ2VUeXBlLCBEYXRlUmFuZ2VUeXBlLCAnRGF0ZVJhbmdlVHlwZScpO1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RmlsdGVyU2VydmljZT4oU2VydmljZU5hbWVzLkZpbHRlcik7XG4gICAgcmV0dXJuIHNlcnZpY2UuYXBwbHlSZWxhdGl2ZURhdGVGaWx0ZXJBc3luYyh0aGlzLnZpc3VhbElkLCBmaWVsZE5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGdldERhdGFTb3VyY2VzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5EYXRhU291cmNlPj4ge1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RGF0YVNvdXJjZVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5EYXRhU291cmNlU2VydmljZSk7XG4gICAgcmV0dXJuIHNlcnZpY2UuZ2V0RGF0YVNvdXJjZXNBc3luYyh0aGlzLnZpc3VhbElkKS50aGVuPEFycmF5PENvbnRyYWN0LkRhdGFTb3VyY2U+PigocmVzdWx0KSA9PiB7XG4gICAgICBjb25zdCBkYXRhU2NoZW1hOiBEYXRhU2NoZW1hID0gcmVzdWx0O1xuICAgICAgY29uc3Qgd29ya3NoZWV0RGF0YVNvdXJjZUluZm86IFdvcmtzaGVldERhdGFTb3VyY2VJbmZvID0gZGF0YVNjaGVtYS53b3Jrc2hlZXREYXRhU2NoZW1hTWFwW3RoaXMubmFtZV07XG5cbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VzOiBBcnJheTxDb250cmFjdC5EYXRhU291cmNlPiA9IFtdO1xuXG4gICAgICAvLyBGaXJzdCwgYWRkIHRoZSBwcmltYXJ5IGRhdGFzb3VyY2UuICBCeSBjb252ZW50aW9uLCBpdCBjb21lcyBmaXJzdCBpbiB0aGUgcmV0dXJuZWQgYXJyYXkuXG4gICAgICBjb25zdCBwcmltYXJ5SWQ6IHN0cmluZyA9IHdvcmtzaGVldERhdGFTb3VyY2VJbmZvLnByaW1hcnlEYXRhU291cmNlO1xuICAgICAgZGF0YVNvdXJjZXMucHVzaCh0aGlzLmNyZWF0ZURhdGFTb3VyY2VGcm9tSW5mbyhkYXRhU2NoZW1hLmRhdGFTb3VyY2VzW3ByaW1hcnlJZF0pKTtcblxuICAgICAgLy8gVGhlbiwgbG9vcCB0aHJvdWdoIGFueSBzZWNvbmRhcnkgZGF0YSBzb3VyY2VzIGFuZCBhZGQgdGhlbS5cbiAgICAgIGZvciAoY29uc3Qgc2Vjb25kYXJ5SWQgb2Ygd29ya3NoZWV0RGF0YVNvdXJjZUluZm8ucmVmZXJlbmNlZERhdGFTb3VyY2VMaXN0KSB7XG4gICAgICAgIGlmIChzZWNvbmRhcnlJZCAhPT0gcHJpbWFyeUlkKSB7XG4gICAgICAgICAgZGF0YVNvdXJjZXMucHVzaCh0aGlzLmNyZWF0ZURhdGFTb3VyY2VGcm9tSW5mbyhkYXRhU2NoZW1hLmRhdGFTb3VyY2VzW3NlY29uZGFyeUlkXSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhU291cmNlcztcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5GaWx0ZXI+PiB7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxGaWx0ZXJTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRmlsdGVyKTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRGaWx0ZXJzQXN5bmModGhpcy52aXN1YWxJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRNYXJrc0FzeW5jKCk6IFByb21pc2U8Q29udHJhY3QuTWFya3NDb2xsZWN0aW9uPiB7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxHZXREYXRhU2VydmljZT4oU2VydmljZU5hbWVzLkdldERhdGEpO1xuICAgIHJldHVybiBzZXJ2aWNlLmdldFNlbGVjdGVkTWFya3NBc3luYyh0aGlzLnZpc3VhbElkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRIaWdobGlnaHRlZE1hcmtzQXN5bmMoKTogUHJvbWlzZTxDb250cmFjdC5NYXJrc0NvbGxlY3Rpb24+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEdldERhdGFTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuR2V0RGF0YSk7XG4gICAgcmV0dXJuIHNlcnZpY2UuZ2V0SGlnaGxpZ2h0ZWRNYXJrc0FzeW5jKHRoaXMudmlzdWFsSWQpO1xuICB9XG5cbiAgcHVibGljIGdldFN1bW1hcnlEYXRhQXN5bmMob3B0aW9uczogQ29udHJhY3QuR2V0U3VtbWFyeURhdGFPcHRpb25zKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEdldERhdGFTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuR2V0RGF0YSk7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICByZXR1cm4gc2VydmljZS5nZXRVbmRlcmx5aW5nRGF0YUFzeW5jKFxuICAgICAgdGhpcy52aXN1YWxJZCxcbiAgICAgIEdldERhdGFUeXBlLlN1bW1hcnksXG4gICAgICAhIW9wdGlvbnMuaWdub3JlQWxpYXNlcyxcbiAgICAgICEhb3B0aW9ucy5pZ25vcmVTZWxlY3Rpb24sXG4gICAgICB0cnVlLFxuICAgICAgb3B0aW9ucy5jb2x1bW5zVG9JbmNsdWRlQnlJZCB8fCBbXSxcbiAgICAgIG9wdGlvbnMubWF4Um93cyB8fCAwLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB8fCBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbi5BbGxWYWx1ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdW1tYXJ5RGF0YVJlYWRlckFzeW5jKHBhZ2VSb3dDb3VudDogbnVtYmVyLCBvcHRpb25zOiBDb250cmFjdC5HZXRTdW1tYXJ5RGF0YU9wdGlvbnMpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZVJlYWRlcj4ge1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8R2V0RGF0YVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5HZXREYXRhKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHJldHVybiBzZXJ2aWNlLmdldFN1bW1hcnlEYXRhUmVhZGVyQXN5bmMoXG4gICAgICB0aGlzLnZpc3VhbElkLFxuICAgICAgcGFnZVJvd0NvdW50IHx8IHRoaXMuZ2V0TWF4UGFnZVJvd0xpbWl0KCksXG4gICAgICAhIW9wdGlvbnMuaWdub3JlQWxpYXNlcyxcbiAgICAgICEhb3B0aW9ucy5pZ25vcmVTZWxlY3Rpb24sXG4gICAgICB0cnVlLCAvLyBpbmNsdWRlQWxsQ29sdW1ucyAoY2FuIGJlIG92ZXJyaWRkZW4gYnkgY29sdW1uc1RvSW5jbHVkZUJ5SWQpXG4gICAgICBvcHRpb25zLmNvbHVtbnNUb0luY2x1ZGVCeUlkIHx8IFtdLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB8fCBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbi5BbGxWYWx1ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdW1tYXJ5Q29sdW1uc0luZm9Bc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkNvbHVtbj4+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEdldERhdGFTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuR2V0RGF0YSk7XG4gICAgcmV0dXJuIHNlcnZpY2UuZ2V0U3VtbWFyeUNvbHVtbnNJbmZvQXN5bmModGhpcy52aXN1YWxJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5kZXJseWluZ0RhdGFBc3luYyhvcHRpb25zOiBDb250cmFjdC5HZXRVbmRlcmx5aW5nRGF0YU9wdGlvbnMpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT4ge1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8R2V0RGF0YVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5HZXREYXRhKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRVbmRlcmx5aW5nRGF0YUFzeW5jKFxuICAgICAgdGhpcy52aXN1YWxJZCxcbiAgICAgIEdldERhdGFUeXBlLlVuZGVybHlpbmcsXG4gICAgICAhIW9wdGlvbnMuaWdub3JlQWxpYXNlcyxcbiAgICAgICEhb3B0aW9ucy5pZ25vcmVTZWxlY3Rpb24sXG4gICAgICAhIW9wdGlvbnMuaW5jbHVkZUFsbENvbHVtbnMsXG4gICAgICBvcHRpb25zLmNvbHVtbnNUb0luY2x1ZGVCeUlkIHx8IFtdLFxuICAgICAgb3B0aW9ucy5tYXhSb3dzIHx8IDAsXG4gICAgICBvcHRpb25zLmluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uIHx8IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLkFsbFZhbHVlcyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFVuZGVybHlpbmdUYWJsZXNBc3luYygpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkxvZ2ljYWxUYWJsZT4+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPERhdGFTb3VyY2VTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRGF0YVNvdXJjZVNlcnZpY2UpO1xuICAgIHJldHVybiBzZXJ2aWNlLmdldFVuZGVybHlpbmdUYWJsZXNBc3luYyh0aGlzLnZpc3VhbElkKS50aGVuPEFycmF5PENvbnRyYWN0LkxvZ2ljYWxUYWJsZT4+KChsb2dpY2FsVGFibGVJbmZvcykgPT4ge1xuICAgICAgcmV0dXJuIGxvZ2ljYWxUYWJsZUluZm9zLm1hcCgobG9naWNhbFRhYmxlSW5mbykgPT4gbmV3IExvZ2ljYWxUYWJsZShsb2dpY2FsVGFibGVJbmZvKSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5kZXJseWluZ1RhYmxlRGF0YUFzeW5jKGxvZ2ljYWxUYWJsZUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb250cmFjdC5HZXRVbmRlcmx5aW5nRGF0YU9wdGlvbnMpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT4ge1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8R2V0RGF0YVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5HZXREYXRhKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRVbmRlcmx5aW5nVGFibGVEYXRhQXN5bmMoXG4gICAgICB0aGlzLnZpc3VhbElkLFxuICAgICAgbG9naWNhbFRhYmxlSWQsXG4gICAgICAhIW9wdGlvbnMuaWdub3JlQWxpYXNlcyxcbiAgICAgICEhb3B0aW9ucy5pZ25vcmVTZWxlY3Rpb24sXG4gICAgICAhIW9wdGlvbnMuaW5jbHVkZUFsbENvbHVtbnMsXG4gICAgICBvcHRpb25zLmNvbHVtbnNUb0luY2x1ZGVCeUlkIHx8IFtdLFxuICAgICAgb3B0aW9ucy5tYXhSb3dzIHx8IDAsXG4gICAgICBvcHRpb25zLmluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uIHx8IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLkFsbFZhbHVlcyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFVuZGVybHlpbmdUYWJsZURhdGFSZWFkZXJBc3luYyhcbiAgICBsb2dpY2FsVGFibGVJZDogc3RyaW5nLFxuICAgIHBhZ2VSb3dDb3VudD86IG51bWJlcixcbiAgICBvcHRpb25zPzogQ29udHJhY3QuR2V0VW5kZXJseWluZ0RhdGFPcHRpb25zLFxuICApOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZVJlYWRlcj4ge1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8R2V0RGF0YVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5HZXREYXRhKTtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRVbmRlcmx5aW5nVGFibGVEYXRhUmVhZGVyQXN5bmMoXG4gICAgICB0aGlzLnZpc3VhbElkLFxuICAgICAgbG9naWNhbFRhYmxlSWQsXG4gICAgICBwYWdlUm93Q291bnQgfHwgdGhpcy5nZXRNYXhQYWdlUm93TGltaXQoKSxcbiAgICAgICEhb3B0aW9ucy5pZ25vcmVBbGlhc2VzLFxuICAgICAgISFvcHRpb25zLmlnbm9yZVNlbGVjdGlvbixcbiAgICAgICEhb3B0aW9ucy5pbmNsdWRlQWxsQ29sdW1ucyxcbiAgICAgIG9wdGlvbnMuY29sdW1uc1RvSW5jbHVkZUJ5SWQgfHwgW10sXG4gICAgICBvcHRpb25zLmluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uIHx8IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLkFsbFZhbHVlcyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNsZWFyU2VsZWN0ZWRNYXJrc0FzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8U2VsZWN0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLlNlbGVjdGlvbik7XG4gICAgcmV0dXJuIHNlcnZpY2UuY2xlYXJTZWxlY3RlZE1hcmtzQXN5bmModGhpcy52aXN1YWxJZCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0TWFya3NCeVZhbHVlQXN5bmMoc2VsZWN0aW9uczogQXJyYXk8Q29udHJhY3QuU2VsZWN0aW9uQ3JpdGVyaWE+LCBzZWxlY3Rpb25VcGRhdGVUeXBlOiBTZWxlY3Rpb25VcGRhdGVUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihzZWxlY3Rpb25zLCAnZmllbGROYW1lJyk7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeUVudW1WYWx1ZTxTZWxlY3Rpb25VcGRhdGVUeXBlPihzZWxlY3Rpb25VcGRhdGVUeXBlLCBTZWxlY3Rpb25VcGRhdGVUeXBlLCAnU2VsZWN0aW9uVXBkYXRlVHlwZScpO1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8U2VsZWN0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLlNlbGVjdGlvbik7XG4gICAgcmV0dXJuIHNlcnZpY2Uuc2VsZWN0TWFya3NCeVZhbHVlQXN5bmModGhpcy52aXN1YWxJZCwgc2VsZWN0aW9ucywgc2VsZWN0aW9uVXBkYXRlVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0TWFya3NCeUlkQXN5bmMoc2VsZWN0aW9uczogQXJyYXk8Q29udHJhY3QuTWFya0luZm8+LCBzZWxlY3Rpb25VcGRhdGVUeXBlOiBTZWxlY3Rpb25VcGRhdGVUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVBhcmFtZXRlcihzZWxlY3Rpb25zLCAnZmllbGROYW1lJyk7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeUVudW1WYWx1ZTxTZWxlY3Rpb25VcGRhdGVUeXBlPihzZWxlY3Rpb25VcGRhdGVUeXBlLCBTZWxlY3Rpb25VcGRhdGVUeXBlLCAnU2VsZWN0aW9uVXBkYXRlVHlwZScpO1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8U2VsZWN0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLlNlbGVjdGlvbik7XG4gICAgcmV0dXJuIHNlcnZpY2Uuc2VsZWN0TWFya3NCeUlkQXN5bmModGhpcy52aXN1YWxJZCwgc2VsZWN0aW9ucywgc2VsZWN0aW9uVXBkYXRlVHlwZSk7XG4gIH1cblxuICBwdWJsaWMgYW5ub3RhdGVNYXJrQXN5bmMobWFyazogQ29udHJhY3QuTWFya0luZm8sIGFubm90YXRpb25UZXh0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKG1hcmssICdtYXJrJyk7XG4gICAgdGhpcy52ZXJpZnlBY3RpdmVTaGVldCgpO1xuXG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxBbm5vdGF0aW9uU2VydmljZT4oU2VydmljZU5hbWVzLkFubm90YXRpb24pO1xuICAgIHJldHVybiBzZXJ2aWNlLmFubm90YXRlTWFya0FzeW5jKHRoaXMudmlzdWFsSWQsIG1hcmssIGFubm90YXRpb25UZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbm5vdGF0aW9uc0FzeW5jKCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuQW5ub3RhdGlvbj4+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEFubm90YXRpb25TZXJ2aWNlPihTZXJ2aWNlTmFtZXMuQW5ub3RhdGlvbik7XG4gICAgcmV0dXJuIHNlcnZpY2UuZ2V0QW5ub3RhdGlvbnNBc3luYyh0aGlzLnZpc3VhbElkKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVBbm5vdGF0aW9uQXN5bmMoYW5ub3RhdGlvbjogQ29udHJhY3QuQW5ub3RhdGlvbikge1xuICAgIEVycm9ySGVscGVycy52ZXJpZnlQYXJhbWV0ZXIoYW5ub3RhdGlvbiwgJ2Fubm90YXRpb24nKTtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEFubm90YXRpb25TZXJ2aWNlPihTZXJ2aWNlTmFtZXMuQW5ub3RhdGlvbik7XG4gICAgcmV0dXJuIHNlcnZpY2UucmVtb3ZlQW5ub3RhdGlvbkFzeW5jKHRoaXMudmlzdWFsSWQsIGFubm90YXRpb24pO1xuICB9XG5cbiAgcHVibGljIGFwcGVuZENvbnRleHRNZW51QXN5bmModGFyZ2V0TWVudTogQXBpTWVudVR5cGUsIGNvbmZpZzogQ29udGV4dE1lbnVPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEV4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRXh0ZXJuYWxDb250ZXh0TWVudSk7XG4gICAgcmV0dXJuIHNlcnZpY2UuYXBwZW5kQ29udGV4dE1lbnVBc3luYyh0aGlzLnZpc3VhbElkLndvcmtzaGVldCwgdGFyZ2V0TWVudSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDb250ZXh0TWVudUFzeW5jKHRhcmdldE1lbnU6IEFwaU1lbnVUeXBlLCBtZW51SXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnZlcmlmeUFjdGl2ZVNoZWV0KCk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEV4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRXh0ZXJuYWxDb250ZXh0TWVudSk7XG4gICAgcmV0dXJuIHNlcnZpY2UucmVtb3ZlQ29udGV4dE1lbnVBc3luYyh0aGlzLnZpc3VhbElkLndvcmtzaGVldCwgdGFyZ2V0TWVudSwgbWVudUl0ZW1JZCk7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZUNvbnRleHRNZW51QXN5bmModGFyZ2V0TWVudTogQXBpTWVudVR5cGUsIG1lbnVJdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RXh0ZXJuYWxDb250ZXh0TWVudVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5FeHRlcm5hbENvbnRleHRNZW51KTtcbiAgICByZXR1cm4gc2VydmljZS5leGVjdXRlQ29udGV4dE1lbnVBc3luYyh0aGlzLnZpc3VhbElkLndvcmtzaGVldCwgdGFyZ2V0TWVudSwgbWVudUl0ZW1JZCk7XG4gIH1cblxuICBwdWJsaWMgcmVuYW1lQ29udGV4dE1lbnVBc3luYyh0YXJnZXRNZW51OiBBcGlNZW51VHlwZSwgbWVudUhlYWRlcjogc3RyaW5nLCBtZW51RGVzY3JpcHRpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudmVyaWZ5QWN0aXZlU2hlZXQoKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8RXh0ZXJuYWxDb250ZXh0TWVudVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5FeHRlcm5hbENvbnRleHRNZW51KTtcbiAgICByZXR1cm4gc2VydmljZS5yZW5hbWVDb250ZXh0TWVudUFzeW5jKHRoaXMudmlzdWFsSWQud29ya3NoZWV0LCB0YXJnZXRNZW51LCBtZW51SGVhZGVyLCBtZW51RGVzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEYXRhU291cmNlRnJvbUluZm8oZGF0YVNvdXJjZUluZm86IERhdGFTb3VyY2VJbmZvKTogQ29udHJhY3QuRGF0YVNvdXJjZSB7XG4gICAgY29uc3QgZGF0YVNvdXJjZUltcGwgPSBuZXcgRGF0YVNvdXJjZUltcGwoZGF0YVNvdXJjZUluZm8sIHRoaXMuX3JlZ2lzdHJ5SWQpO1xuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgRGF0YVNvdXJjZShkYXRhU291cmNlSW1wbCk7XG4gICAgZGF0YVNvdXJjZUltcGwuaW5pdGlhbGl6ZVdpdGhQdWJsaWNJbnRlcmZhY2VzKGRhdGFTb3VyY2UpO1xuICAgIHJldHVybiBkYXRhU291cmNlO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlBY3RpdmVTaGVldCgpIHtcbiAgICBjb25zdCBpc1Jvb3RBbmRBY3RpdmVXb3Jrc2hlZXQgPSB0aGlzLmFjdGl2ZTtcbiAgICBjb25zdCBpc0luc2lkZUFjdGl2ZURhc2hib2FyZCA9IHRoaXMuaXNJbnNpZGVBY3RpdmVEYXNoYm9hcmQoKTtcbiAgICBjb25zdCBpc0luc2lkZUFjdGl2ZVN0b3J5UG9pbnQgPSB0aGlzLmlzSW5zaWRlQWN0aXZlU3RvcnlQb2ludCgpO1xuXG4gICAgaWYgKCFpc1Jvb3RBbmRBY3RpdmVXb3Jrc2hlZXQgJiYgIWlzSW5zaWRlQWN0aXZlRGFzaGJvYXJkICYmICFpc0luc2lkZUFjdGl2ZVN0b3J5UG9pbnQpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5Ob3RBY3RpdmVTaGVldCwgJ09wZXJhdGlvbiBub3QgYWxsb3dlZCBvbiBub24tYWN0aXZlIHNoZWV0Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0luc2lkZUFjdGl2ZVN0b3J5UG9pbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudFN0b3J5UG9pbnRJbXBsICYmIHRoaXMuX3BhcmVudFN0b3J5UG9pbnRJbXBsLmFjdGl2ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbnNpZGVBY3RpdmVEYXNoYm9hcmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudERhc2hib2FyZEltcGwgJiYgdGhpcy5fcGFyZW50RGFzaGJvYXJkSW1wbC5hY3RpdmU7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBMb2dpY2FsVGFibGVJbmZvIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBhIGxvZ2ljYWwgdGFibGUuXG4gKiBUaGlzIGRvZXMgbm90IGZvbGxvdyB0aGUgSW1wbCBwYXR0ZXJuIGFzIGl0IGlzIGp1c3QgYSBwcm9wZXJ0eSBiYWcuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dpY2FsVGFibGUgaW1wbGVtZW50cyBDb250cmFjdC5Mb2dpY2FsVGFibGUge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfbG9naWNhbFRhYmxlOiBMb2dpY2FsVGFibGVJbmZvKSB7fVxuXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9naWNhbFRhYmxlLmlkO1xuICB9XG5cbiAgcHVibGljIGdldCBjYXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ2ljYWxUYWJsZS5jYXB0aW9uO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGF0ZVJhbmdlVHlwZSwgRmlsdGVyRG9tYWluVHlwZSwgRmlsdGVyVHlwZSwgUGVyaW9kVHlwZSB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBIaWVyYXJjaGljYWxMZXZlbFNlbGVjdGlvblN0YXRlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzL2xpYi9zcmMvRXh0ZXJuYWxDb250cmFjdC9TaGFyZWQvTmFtZXNwYWNlcy9UYWJsZWF1JztcbmltcG9ydCB7IERhdGFTb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi4vU2VydmljZXMvRGF0YVNvdXJjZVNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0ZpbHRlclNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5LCBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlcy9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi4vVXRpbHMvRXJyb3JIZWxwZXJzJztcblxuZXhwb3J0IGNsYXNzIEZpbHRlciBpbXBsZW1lbnRzIENvbnRyYWN0LkZpbHRlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgX3dvcmtzaGVldE5hbWU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgX2ZpZWxkTmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBfZmlsdGVyVHlwZTogRmlsdGVyVHlwZSxcbiAgICBwcm90ZWN0ZWQgX2ZpZWxkSWQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgX3JlZ2lzdHJ5SWQ6IG51bWJlcixcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgd29ya3NoZWV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl93b3Jrc2hlZXROYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWVsZE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGROYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWVsZElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlclR5cGUoKTogRmlsdGVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmllbGRBc3luYygpOiBQcm9taXNlPENvbnRyYWN0LkZpZWxkPiB7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxEYXRhU291cmNlU2VydmljZT4oU2VydmljZU5hbWVzLkRhdGFTb3VyY2VTZXJ2aWNlKTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRGaWVsZEFzeW5jKHRoaXMuX2ZpZWxkSWQpO1xuICB9XG5cbiAgcHVibGljIGdldEFwcGxpZWRXb3Jrc2hlZXRzQXN5bmMoKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiB7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxGaWx0ZXJTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRmlsdGVyKTtcbiAgICByZXR1cm4gc2VydmljZS5nZXRBcHBsaWVkV29ya3NoZWV0c0FzeW5jKHRoaXMuX3dvcmtzaGVldE5hbWUsIHRoaXMuX2ZpZWxkSWQpO1xuICB9XG5cbiAgcHVibGljIHNldEFwcGxpZWRXb3Jrc2hlZXRzQXN5bmMoYXBwbHlUb1dvcmtzaGVldHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPEFycmF5PHN0cmluZz4+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyKGFwcGx5VG9Xb3Jrc2hlZXRzLCAnYXBwbHlUb1dvcmtzaGVldHMnKTtcbiAgICBjb25zdCB1bmlxdWVXb3Jrc2hlZXRzID0gbmV3IFNldChhcHBseVRvV29ya3NoZWV0cyk7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxGaWx0ZXJTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRmlsdGVyKTtcbiAgICByZXR1cm4gc2VydmljZS5zZXRBcHBsaWVkV29ya3NoZWV0c0FzeW5jKHRoaXMuX3dvcmtzaGVldE5hbWUsIHRoaXMuX2ZpZWxkTmFtZSwgdGhpcy5fZmllbGRJZCwgQXJyYXkuZnJvbSh1bmlxdWVXb3Jrc2hlZXRzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhdGVnb3JpY2FsRmlsdGVyIGV4dGVuZHMgRmlsdGVyIGltcGxlbWVudHMgQ29udHJhY3QuQ2F0ZWdvcmljYWxGaWx0ZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgd29ya3NoZWV0TmFtZTogc3RyaW5nLFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGZpZWxkSWQ6IHN0cmluZyxcbiAgICBmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlLFxuICAgIHJlZ2lzdHJ5SWQ6IG51bWJlcixcbiAgICBwcml2YXRlIF9hcHBsaWVkVmFsdWVzOiBBcnJheTxDb250cmFjdC5EYXRhVmFsdWU+LFxuICAgIHByaXZhdGUgX2lzRXhjbHVkZU1vZGU6IGJvb2xlYW4sXG4gICAgcHJpdmF0ZSBfaXNBbGxTZWxlY3RlZD86IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHdvcmtzaGVldE5hbWUsIGZpZWxkTmFtZSwgZmlsdGVyVHlwZSwgZmllbGRJZCwgcmVnaXN0cnlJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQWxsU2VsZWN0ZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFwcGxpZWRWYWx1ZXMoKTogQXJyYXk8Q29udHJhY3QuRGF0YVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpZWRWYWx1ZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzRXhjbHVkZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRXhjbHVkZU1vZGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RG9tYWluQXN5bmMoZG9tYWluVHlwZT86IEZpbHRlckRvbWFpblR5cGUpOiBQcm9taXNlPENvbnRyYWN0LkNhdGVnb3JpY2FsRG9tYWluPiB7XG4gICAgaWYgKCFkb21haW5UeXBlKSB7XG4gICAgICBkb21haW5UeXBlID0gRmlsdGVyRG9tYWluVHlwZS5SZWxldmFudDtcbiAgICB9XG5cbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5RW51bVZhbHVlPEZpbHRlckRvbWFpblR5cGU+KGRvbWFpblR5cGUsIEZpbHRlckRvbWFpblR5cGUsICdGaWx0ZXJEb21haW5UeXBlJyk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gQXBpU2VydmljZVJlZ2lzdHJ5LmdldCh0aGlzLl9yZWdpc3RyeUlkKS5nZXRTZXJ2aWNlPEZpbHRlclNlcnZpY2U+KFNlcnZpY2VOYW1lcy5GaWx0ZXIpO1xuICAgIHJldHVybiBzZXJ2aWNlLmdldENhdGVnb3JpY2FsRG9tYWluQXN5bmModGhpcy5fd29ya3NoZWV0TmFtZSwgdGhpcy5fZmllbGRJZCwgZG9tYWluVHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhpZXJhcmNoaWNhbERhdGFWYWx1ZSBpbXBsZW1lbnRzIENvbnRyYWN0LkhpZXJhcmNoaWNhbEZpbHRlckRhdGFWYWx1ZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTogQ29udHJhY3QuRGF0YVZhbHVlLCBwcml2YXRlIF9oaWVyYXJjaGljYWxQYXRoOiBzdHJpbmcsIHByaXZhdGUgX2xldmVsOiBudW1iZXIpIHt9XG5cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBDb250cmFjdC5EYXRhVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGllcmFyY2hpY2FsUGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9oaWVyYXJjaGljYWxQYXRoO1xuICB9XG5cbiAgcHVibGljIGdldCBsZXZlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSGllcmFyY2hpY2FsTGV2ZWxEZXRhaWwgaW1wbGVtZW50cyBDb250cmFjdC5IaWVyYXJjaGljYWxMZXZlbERldGFpbCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9uYW1lOiBzdHJpbmcsIHByaXZhdGUgX2xldmVsU2VsZWN0aW9uU3RhdGU6IEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUpIHt9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxldmVsU2VsZWN0aW9uU3RhdGUoKTogSGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2xldmVsU2VsZWN0aW9uU3RhdGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhpZXJhcmNoaWNhbEZpbHRlciBleHRlbmRzIEZpbHRlciBpbXBsZW1lbnRzIENvbnRyYWN0LkhpZXJhcmNoaWNhbEZpbHRlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICB3b3Jrc2hlZXROYW1lOiBzdHJpbmcsXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgZmllbGRJZDogc3RyaW5nLFxuICAgIGZpbHRlclR5cGU6IEZpbHRlclR5cGUsXG4gICAgcmVnaXN0cnlJZDogbnVtYmVyLFxuICAgIHByaXZhdGUgX2RpbWVuc2lvbk5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIF9oaWVyYXJjaHlDYXB0aW9uOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBfbnVtYmVyT2ZMZXZlbHM6IG51bWJlcixcbiAgICBwcml2YXRlIF9sZXZlbERldGFpbHM6IEFycmF5PENvbnRyYWN0LkhpZXJhcmNoaWNhbExldmVsRGV0YWlsPixcbiAgICBwcml2YXRlIF9hcHBsaWVkVmFsdWVzOiBBcnJheTxDb250cmFjdC5IaWVyYXJjaGljYWxGaWx0ZXJEYXRhVmFsdWU+LFxuICAgIHByaXZhdGUgX2lzQWxsU2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHdvcmtzaGVldE5hbWUsIGZpZWxkTmFtZSwgZmlsdGVyVHlwZSwgZmllbGRJZCwgcmVnaXN0cnlJZCk7XG4gIH1cbiAgZ2V0RG9tYWluQXN5bmMoZG9tYWluVHlwZT86IENvbnRyYWN0LkZpbHRlckRvbWFpblR5cGUpOiBQcm9taXNlPENvbnRyYWN0LkNhdGVnb3JpY2FsRG9tYWluPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgcHVibGljIGdldCBkaW1lbnNpb25OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RpbWVuc2lvbk5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhpZXJhcmNoeUNhcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faGllcmFyY2h5Q2FwdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbnVtYmVyT2ZMZXZlbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbnVtYmVyT2ZMZXZlbHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxldmVsRGV0YWlscygpOiBDb250cmFjdC5IaWVyYXJjaGljYWxMZXZlbERldGFpbFtdIHtcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWxEZXRhaWxzO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0FsbFNlbGVjdGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBhcHBsaWVkVmFsdWVzKCk6IEFycmF5PENvbnRyYWN0LkhpZXJhcmNoaWNhbEZpbHRlckRhdGFWYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWVkVmFsdWVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSYW5nZUZpbHRlciBleHRlbmRzIEZpbHRlciBpbXBsZW1lbnRzIENvbnRyYWN0LlJhbmdlRmlsdGVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHdvcmtzaGVldE5hbWU6IHN0cmluZyxcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICBmaWVsZElkOiBzdHJpbmcsXG4gICAgZmlsdGVyVHlwZTogRmlsdGVyVHlwZSxcbiAgICByZWdpc3RyeUlkOiBudW1iZXIsXG4gICAgcHJpdmF0ZSBfbWluOiBDb250cmFjdC5EYXRhVmFsdWUsXG4gICAgcHJpdmF0ZSBfbWF4OiBDb250cmFjdC5EYXRhVmFsdWUsXG4gICAgcHJpdmF0ZSBfaW5jbHVkZU51bGxWYWx1ZXM6IGJvb2xlYW4sXG4gICkge1xuICAgIHN1cGVyKHdvcmtzaGVldE5hbWUsIGZpZWxkTmFtZSwgZmlsdGVyVHlwZSwgZmllbGRJZCwgcmVnaXN0cnlJZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1pblZhbHVlKCk6IENvbnRyYWN0LkRhdGFWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogQ29udHJhY3QuRGF0YVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG5cbiAgcHVibGljIGdldCBpbmNsdWRlTnVsbFZhbHVlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW5jbHVkZU51bGxWYWx1ZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0RG9tYWluQXN5bmMoZG9tYWluVHlwZT86IEZpbHRlckRvbWFpblR5cGUpOiBQcm9taXNlPENvbnRyYWN0LlJhbmdlRG9tYWluPiB7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxGaWx0ZXJTZXJ2aWNlPihTZXJ2aWNlTmFtZXMuRmlsdGVyKTtcbiAgICBpZiAoIWRvbWFpblR5cGUpIHtcbiAgICAgIGRvbWFpblR5cGUgPSBGaWx0ZXJEb21haW5UeXBlLlJlbGV2YW50O1xuICAgIH1cblxuICAgIEVycm9ySGVscGVycy52ZXJpZnlFbnVtVmFsdWU8RmlsdGVyRG9tYWluVHlwZT4oZG9tYWluVHlwZSwgRmlsdGVyRG9tYWluVHlwZSwgJ0ZpbHRlckRvbWFpblR5cGUnKTtcblxuICAgIHJldHVybiBzZXJ2aWNlLmdldFJhbmdlRG9tYWluQXN5bmModGhpcy5fd29ya3NoZWV0TmFtZSwgdGhpcy5fZmllbGRJZCwgZG9tYWluVHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbGF0aXZlRGF0ZUZpbHRlciBleHRlbmRzIEZpbHRlciBpbXBsZW1lbnRzIENvbnRyYWN0LlJlbGF0aXZlRGF0ZUZpbHRlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICB3b3Jrc2hlZXROYW1lOiBzdHJpbmcsXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgZmllbGRJZDogc3RyaW5nLFxuICAgIGZpbHRlclR5cGU6IEZpbHRlclR5cGUsXG4gICAgcmVnaXN0cnlJZDogbnVtYmVyLFxuICAgIHByaXZhdGUgX2FuY2hvckRhdGU6IENvbnRyYWN0LkRhdGFWYWx1ZSxcbiAgICBwcml2YXRlIF9wZXJpb2RUeXBlOiBQZXJpb2RUeXBlLFxuICAgIHByaXZhdGUgX3JhbmdlVHlwZTogRGF0ZVJhbmdlVHlwZSxcbiAgICBwcml2YXRlIF9yYW5nZU46IG51bWJlcixcbiAgKSB7XG4gICAgc3VwZXIod29ya3NoZWV0TmFtZSwgZmllbGROYW1lLCBmaWx0ZXJUeXBlLCBmaWVsZElkLCByZWdpc3RyeUlkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYW5jaG9yRGF0ZSgpOiBDb250cmFjdC5EYXRhVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9hbmNob3JEYXRlO1xuICB9XG5cbiAgcHVibGljIGdldCBwZXJpb2RUeXBlKCk6IFBlcmlvZFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9wZXJpb2RUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCByYW5nZVR5cGUoKTogRGF0ZVJhbmdlVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmFuZ2VOKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlTjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcmljYWxEb21haW4gaW1wbGVtZW50cyBDb250cmFjdC5DYXRlZ29yaWNhbERvbWFpbiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZXM6IEFycmF5PENvbnRyYWN0LkRhdGFWYWx1ZT4sIHByaXZhdGUgX2RvbWFpblR5cGU6IEZpbHRlckRvbWFpblR5cGUpIHt9XG5cbiAgcHVibGljIGdldCB2YWx1ZXMoKTogQXJyYXk8Q29udHJhY3QuRGF0YVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBGaWx0ZXJEb21haW5UeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZG9tYWluVHlwZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmFuZ2VEb21haW4gaW1wbGVtZW50cyBDb250cmFjdC5SYW5nZURvbWFpbiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9taW46IENvbnRyYWN0LkRhdGFWYWx1ZSwgcHJpdmF0ZSBfbWF4OiBDb250cmFjdC5EYXRhVmFsdWUsIHByaXZhdGUgX2RvbWFpblR5cGU6IEZpbHRlckRvbWFpblR5cGUpIHt9XG5cbiAgcHVibGljIGdldCB0eXBlKCk6IEZpbHRlckRvbWFpblR5cGUge1xuICAgIHJldHVybiB0aGlzLl9kb21haW5UeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCBtaW4oKTogQ29udHJhY3QuRGF0YVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fbWluO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXgoKTogQ29udHJhY3QuRGF0YVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGF0YVR5cGUsIE1hcmtUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcblxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZSBpbXBsZW1lbnRzIENvbnRyYWN0LkRhdGFUYWJsZSB7XG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZGF0YTogQXJyYXk8QXJyYXk8Q29udHJhY3QuRGF0YVZhbHVlPj4sXG4gICAgcHJpdmF0ZSBfY29sdW1uczogQXJyYXk8Q29udHJhY3QuQ29sdW1uPixcbiAgICBwcml2YXRlIF90b3RhbFJvd0NvdW50OiBudW1iZXIsXG4gICAgcHJpdmF0ZSBfaXNUb3RhbFJvd0NvdW50TGltaXRlZDogYm9vbGVhbixcbiAgICBwcml2YXRlIF9pc1N1bW1hcnlEYXRhOiBib29sZWFuLFxuICAgIHByaXZhdGUgX21hcmtzSW5mbz86IEFycmF5PE1hcmtJbmZvPixcbiAgKSB7XG4gICAgdGhpcy5fbmFtZSA9IF9pc1N1bW1hcnlEYXRhID8gJ1N1bW1hcnkgRGF0YSBUYWJsZScgOiAnVW5kZXJseWluZyBEYXRhIFRhYmxlJztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXRhKCk6IEFycmF5PEFycmF5PENvbnRyYWN0LkRhdGFWYWx1ZT4+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBcnJheTxDb250cmFjdC5Db2x1bW4+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFya3NJbmZvKCk6IEFycmF5PENvbnRyYWN0Lk1hcmtJbmZvPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtzSW5mbztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG90YWxSb3dDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90b3RhbFJvd0NvdW50O1xuICB9XG5cbiAgcHVibGljIGdldCBpc1RvdGFsUm93Q291bnRMaW1pdGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pc1RvdGFsUm93Q291bnRMaW1pdGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1N1bW1hcnlEYXRhKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pc1N1bW1hcnlEYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYXJrSW5mbyBpbXBsZW1lbnRzIENvbnRyYWN0Lk1hcmtJbmZvIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX3R5cGU6IE1hcmtUeXBlLCBwcml2YXRlIF9jb2xvcjogc3RyaW5nLCBwcml2YXRlIF90dXBsZUlkPzogbnVtYmVyKSB7fVxuXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBNYXJrVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbG9yO1xuICB9XG5cbiAgcHVibGljIGdldCB0dXBsZUlkKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3R1cGxlSWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbHVtbiBpbXBsZW1lbnRzIENvbnRyYWN0LkNvbHVtbiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9maWVsZE5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIF9maWVsZElkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBfZGF0YVR5cGU6IERhdGFUeXBlLFxuICAgIHByaXZhdGUgX2lzUmVmZXJlbmNlZDogYm9vbGVhbixcbiAgICBwcml2YXRlIF9pbmRleDogbnVtYmVyLFxuICApIHt9XG5cbiAgcHVibGljIGdldCBmaWVsZE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGROYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWVsZElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkSWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFUeXBlKCk6IERhdGFUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUmVmZXJlbmNlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNSZWZlcmVuY2VkO1xuICB9XG5cbiAgcHVibGljIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pbmRleDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YVZhbHVlIGltcGxlbWVudHMgQ29udHJhY3QuRGF0YVZhbHVlIHtcbiAgLyogdHNsaW50OmRpc2FibGU6bm8tYW55ICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTogYW55LCBwcml2YXRlIF9uYXRpdmVWYWx1ZTogYW55LCBwcml2YXRlIF9mb3JtYXR0ZWRWYWx1ZT86IHN0cmluZykge31cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBuYXRpdmVWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9uYXRpdmVWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZm9ybWF0dGVkVmFsdWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVkVmFsdWU7XG4gIH1cbiAgLyogdHNsaW50OmVuYWJsZTpuby1hbnkgKi9cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBHZXREYXRhU2VydmljZSB9IGZyb20gJy4uL1NlcnZpY2VzL0dldERhdGFTZXJ2aWNlJztcbmltcG9ydCB7IEFwaVNlcnZpY2VSZWdpc3RyeSwgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZXMvU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IEVycm9ySGVscGVycyB9IGZyb20gJy4uL1V0aWxzL0Vycm9ySGVscGVycyc7XG5cbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVSZWFkZXIgaW1wbGVtZW50cyBDb250cmFjdC5EYXRhVGFibGVSZWFkZXIge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIF9pZDogc3RyaW5nLCBwcm90ZWN0ZWQgX3RvdGFsUm93Q291bnQ6IG51bWJlciwgcHJvdGVjdGVkIF9wYWdlUm93Q291bnQsIHByaXZhdGUgX3JlZ2lzdHJ5SWQ6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VDb3VudCA9IE1hdGguY2VpbChfdG90YWxSb3dDb3VudCAvIF9wYWdlUm93Q291bnQpO1xuICB9XG4gIHByb3RlY3RlZCBfcGFnZUNvdW50OiBudW1iZXI7XG5cbiAgcHVibGljIGdldCB0b3RhbFJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsUm93Q291bnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhZ2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlQ291bnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFnZUFzeW5jKHBhZ2VOdW1iZXI6IG51bWJlcik6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPiB7XG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeVJhbmdlKHBhZ2VOdW1iZXIsIDAsIHRoaXMuX3BhZ2VDb3VudCk7XG4gICAgY29uc3Qgc2VydmljZSA9IEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQodGhpcy5fcmVnaXN0cnlJZCkuZ2V0U2VydmljZTxHZXREYXRhU2VydmljZT4oU2VydmljZU5hbWVzLkdldERhdGEpO1xuICAgIHJldHVybiBzZXJ2aWNlLmdldFBhZ2VBc3luYyh0aGlzLl9pZCwgcGFnZU51bWJlciwgdGhpcy5fcGFnZVJvd0NvdW50KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBbGxQYWdlc0FzeW5jKG1heFJvd3M/OiBudW1iZXIpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT4ge1xuICAgIGNvbnN0IGZpcnN0UGFnZTogQ29udHJhY3QuRGF0YVRhYmxlID0gYXdhaXQgdGhpcy5nZXRQYWdlQXN5bmMoMCk7XG4gICAgbWF4Um93cyA9IG1heFJvd3MgfHwgdGhpcy50b3RhbFJvd0NvdW50O1xuICAgIGNvbnN0IHJvd3NSZXF1ZXN0ZWQgPSBNYXRoLm1pbihtYXhSb3dzLCB0aGlzLnRvdGFsUm93Q291bnQpO1xuICAgIGNvbnN0IHBhZ2VzUmVxdWVzdGVkID0gTWF0aC5jZWlsKHJvd3NSZXF1ZXN0ZWQgLyB0aGlzLl9wYWdlUm93Q291bnQpO1xuXG4gICAgLy8gRmV0Y2ggdXAgdG8gNDAwIHBhZ2VzLCB3aXRoIGEgZGVmYXVsdCBvZiAxMCwwMDAgcGFnZVJvd0NvdW50IHRoYXQgZ2l2ZXMgdXMgNCwwMDAsMDAwIHJvd3NcbiAgICBjb25zdCBwYWdlc1RvRmV0Y2ggPSBNYXRoLm1pbihwYWdlc1JlcXVlc3RlZCwgNDAwKTtcbiAgICBjb25zdCBpc0RhdGFMaW1pdGVkID0gcGFnZXNUb0ZldGNoIDwgcGFnZXNSZXF1ZXN0ZWQ7XG4gICAgbGV0IHJlbWFpbmluZ0RhdGE6IEFycmF5PEFycmF5PEFycmF5PENvbnRyYWN0LkRhdGFWYWx1ZT4+PiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFnZXNUb0ZldGNoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLmdldFBhZ2VBc3luYyhpKTtcbiAgICAgIHJlbWFpbmluZ0RhdGEucHVzaChwYWdlLmRhdGEpO1xuICAgIH1cblxuICAgIGxldCBmdWxsRGF0YSA9IGZpcnN0UGFnZS5kYXRhLmNvbmNhdCguLi5yZW1haW5pbmdEYXRhKTtcbiAgICAvLyBUaGlzIHNsaWNlcyB0aGUgYXJyYXkgb25seSBpZiBtYXhSb3dzIGhhcyBiZWVuIHNldCBhbmQgaXMgbGVzcyB0aGFuIHRvdGFsUm93Q291bnRcbiAgICBmdWxsRGF0YS5sZW5ndGggPSByb3dzUmVxdWVzdGVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGZpcnN0UGFnZS5uYW1lLFxuICAgICAgZGF0YTogZnVsbERhdGEsXG4gICAgICBjb2x1bW5zOiBmaXJzdFBhZ2UuY29sdW1ucyxcbiAgICAgIHRvdGFsUm93Q291bnQ6IGlzRGF0YUxpbWl0ZWQgPyBwYWdlc1RvRmV0Y2ggKiB0aGlzLl9wYWdlUm93Q291bnQgOiByb3dzUmVxdWVzdGVkLFxuICAgICAgaXNUb3RhbFJvd0NvdW50TGltaXRlZDogaXNEYXRhTGltaXRlZCxcbiAgICAgIGlzU3VtbWFyeURhdGE6IGZpcnN0UGFnZS5pc1N1bW1hcnlEYXRhLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcmVsZWFzZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNlcnZpY2UgPSBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHRoaXMuX3JlZ2lzdHJ5SWQpLmdldFNlcnZpY2U8R2V0RGF0YVNlcnZpY2U+KFNlcnZpY2VOYW1lcy5HZXREYXRhKTtcbiAgICByZXR1cm4gc2VydmljZS5yZWxlYXNlQXN5bmModGhpcy5faWQpO1xuICB9XG59XG4iLCIvKipcbiAqIFNlbGVjdGlvbiBNb2RlbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbk1vZGVsIHtcbiAgcHVibGljIHF1YWxpZmllZEZpZWxkQ2FwdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFZhbHVlIGJhc2VkIHNlbGVjdGlvbiBtb2RlbC4gTWVhbnQgZm9yIGhpZXJhcmNoaWNhbCwgcmFuZ2UgYW5kIGNhdGVnb3JpY2FsIHNlbGVjdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWx1ZVNlbGVjdGlvbk1vZGVsIGV4dGVuZHMgU2VsZWN0aW9uTW9kZWwge1xuICBwdWJsaWMgc2VsZWN0VmFsdWVzOiBBcnJheTxzdHJpbmc+ID0gW107XG59XG5cbi8qKlxuICogSGllcmFyY2hpY2FsIHZhbHVlIHNlbGVjdGlvbiBtb2RlbFxuICovXG5leHBvcnQgY2xhc3MgSGllcmFyY2hpY2FsU2VsZWN0aW9uTW9kZWwgZXh0ZW5kcyBWYWx1ZVNlbGVjdGlvbk1vZGVsIHt9XG5cbi8qKlxuICogUmFuZ2UgYmFzZWQgdmFsdWUgc2VsZWN0aW9uIG1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZVNlbGVjdGlvbk1vZGVsIGV4dGVuZHMgU2VsZWN0aW9uTW9kZWwge1xuICBwdWJsaWMgbWluVmFsdWU6IHN0cmluZztcbiAgcHVibGljIG1heFZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyBpbmNsdWRlZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERpbWVuc2lvbiB2YWx1ZSBzZWxlY3Rpb24gbW9kZWxcbiAqL1xuZXhwb3J0IGNsYXNzIERpbWVuc2lvblNlbGVjdGlvbk1vZGVsIGV4dGVuZHMgVmFsdWVTZWxlY3Rpb25Nb2RlbCB7fVxuLyoqXG4gKiBUdXBsZSBiYXNlZCBzZWxlY3Rpb24gbW9kZWxcbiAqL1xuZXhwb3J0IGNsYXNzIFR1cGxlU2VsZWN0aW9uTW9kZWwge1xuICBwdWJsaWMgc2VsZWN0aW9uVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgb2JqZWN0SWRzOiBBcnJheTxzdHJpbmc+ID0gW107XG59XG5cbi8qKlxuICogQ29udGFpbmVyIGNsYXNzIHRvIHBvcHVsYXRlIGFsbCB0aGUgc2VsZWN0aW9uIG1vZGVscyB3aGVuIHBhcnNpbmcgaW5wdXRcbiAqL1xuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lciB7XG4gIHB1YmxpYyBoaWVyTW9kZWxBcnI6IEFycmF5PEhpZXJhcmNoaWNhbFNlbGVjdGlvbk1vZGVsPiA9IFtdO1xuICBwdWJsaWMgZGltTW9kZWxBcnI6IEFycmF5PERpbWVuc2lvblNlbGVjdGlvbk1vZGVsPiA9IFtdO1xuICBwdWJsaWMgcXVhbnRNb2RlbEFycjogQXJyYXk8UmFuZ2VTZWxlY3Rpb25Nb2RlbD4gPSBbXTtcbiAgcHVibGljIHNlbGVjdGlvbjogVHVwbGVTZWxlY3Rpb25Nb2RlbDtcbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5cbmV4cG9ydCBjbGFzcyBQb2ludCBpbXBsZW1lbnRzIENvbnRyYWN0LlBvaW50IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX3g6IG51bWJlciwgcHJpdmF0ZSBfeTogbnVtYmVyKSB7fVxuXG4gIHB1YmxpYyBnZXQgeCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl94O1xuICB9XG5cbiAgcHVibGljIGdldCB5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3k7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbiB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBWaXN1YWxJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi9TZXJ2aWNlUmVnaXN0cnknO1xuXG4vKipcbiAqIERlZmluZXMgd2hpY2ggdHlwZSBvZiBnZXREYXRhIGNhbGwgdG8gbWFrZS5cbiAqL1xuZXhwb3J0IGVudW0gR2V0RGF0YVR5cGUge1xuICBTdW1tYXJ5ID0gJ3N1bW1hcnknLFxuICBVbmRlcmx5aW5nID0gJ3VuZGVybHlpbmcnLFxufVxuXG4vKipcbiAqIFNlcnZpY2UgZm9yIGltcGxlbWVudGluZyB0aGUgbG9naWMgZm9yIHZhcmlvdXMgZ2V0RGF0YSBjYWxsc1xuICpcbiAqIEBpbnRlcmZhY2UgR2V0RGF0YVNlcnZpY2VcbiAqIEBleHRlbmRzIHtBcGlTZXJ2aWNlfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldERhdGFTZXJ2aWNlIGV4dGVuZHMgQXBpU2VydmljZSB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaW1pdCBvZiByb3dzIGZvciBnZXRVbmRlcmx5aW5nRGF0YUFzeW5jXG4gICAqL1xuICBnZXRNYXhSb3dMaW1pdCgpOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVuZGVybHlpbmcgZGF0YSBmb3IgYSBwYXJ0aWN1bGFyIHZpc3VhbFxuICAgKlxuICAgKiBAcGFyYW0ge1Zpc3VhbElkfSB2aXN1YWxJZCAgVGhlIHZpc3VhbCBpZFxuICAgKiBAcGFyYW0ge0dldERhdGFUeXBlfSBnZXRUeXBlICBUaGUgdHlwZSBvZiBnZXREYXRhIGNhbGwgdG8gbWFrZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUFsaWFzZXMgIFdoZXRoZXIgb3Igbm90IGFsaWFzZXMgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBpZ25vcmVTZWxlY3Rpb24gIFdoZXRoZXIgb3Igbm90IHNlbGVjdGlvbiBzaG91bGQgYmUgaWdub3JlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVBbGxDb2x1bW5zICBTaG91bGQgYWxsIGNvbHVtbnMgYmUgaW5jbHVkZWRcbiAgICogQHBhcmFtIHtBcnJheX0gY29sdW1uc1RvSW5jbHVkZUJ5SWQgT3ZlcnJpZGVzIGluY2x1ZGVBbGxDb2x1bW5zLCBsaXN0cyB0aGUgY29sdW1ucyB0byBpbmNsdWRlLiBFbXB0eSBtZWFucyBhbGwgY29sdW1ucy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFJvd3MgIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gcmV0dXJuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT59ICBEYXRhIHRhYmxlIHdpdGggdGhlIHJlcXVlc3RlZCBkYXRhXG4gICAqL1xuICBnZXRVbmRlcmx5aW5nRGF0YUFzeW5jKFxuICAgIHZpc3VhbElkOiBWaXN1YWxJZCxcbiAgICBnZXRUeXBlOiBHZXREYXRhVHlwZSxcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIGlnbm9yZVNlbGVjdGlvbjogYm9vbGVhbixcbiAgICBpbmNsdWRlQWxsQ29sdW1uczogYm9vbGVhbixcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogQXJyYXk8c3RyaW5nPixcbiAgICBtYXhSb3dzOiBudW1iZXIsXG4gICAgaW5jbHVkZURhdGFWYWx1ZXNPcHRpb246IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLFxuICApOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VmlzdWFsSWR9IHZpc3VhbElkICBUaGUgdmlzdWFsIGlkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlUm93Q291bnQgVGhlIG51bWJlciBvZiByb3dzIHBlciBwYWdlLiBUaGUgZGVmYXVsdCBhbmQgbWF4aW11bSBpcyAxMCwwMDAgcm93cy5cbiAgICogQHBhcmFtIHtib29sZWFufSBpZ25vcmVBbGlhc2VzICBXaGV0aGVyIGFsaWFzIHZhbHVlcyBzaG91bGQgYmUgaWdub3JlZCBpbiB0aGUgcmV0dXJuZWQgZGF0YVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZVNlbGVjdGlvbiAgV2hldGhlciBzZWxlY3Rpb25zIGluIHRoaXMgdml6IHNob3VsZCBiZSBpZ25vcmVkIGluIHRoZSByZXR1cm5lZCBkYXRhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUFsbENvbHVtbnMgIFNob3VsZCBhbGwgY29sdW1ucyBiZSBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge0FycmF5fSBjb2x1bW5zVG9JbmNsdWRlQnlJZCBPdmVycmlkZXMgaW5jbHVkZUFsbENvbHVtbnMsIGxpc3RzIHRoZSBjb2x1bW5zIHRvIGluY2x1ZGUuIEVtcHR5IG1lYW5zIGFsbCBjb2x1bW5zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZVJlYWRlcj59ICBEYXRhIHRhYmxlIHJlYWRlciB0byBhY2Nlc3MgdGhlIHVuZGVybHlpbmcgZGF0YVxuICAgKi9cbiAgZ2V0U3VtbWFyeURhdGFSZWFkZXJBc3luYyhcbiAgICB2aXN1YWxJZDogVmlzdWFsSWQsXG4gICAgcGFnZVJvd0NvdW50OiBudW1iZXIsXG4gICAgaWdub3JlQWxpYXNlczogYm9vbGVhbixcbiAgICBpZ25vcmVTZWxlY3Rpb246IGJvb2xlYW4sXG4gICAgaW5jbHVkZUFsbENvbHVtbnM6IGJvb2xlYW4sXG4gICAgY29sdW1uc1RvSW5jbHVkZUJ5SWQ6IEFycmF5PHN0cmluZz4sXG4gICAgaW5jbHVkZURhdGFWYWx1ZXNPcHRpb246IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLFxuICApOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZVJlYWRlcj47XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBtYXJrcyBmb3IgYSBnaXZlbiB2aXN1YWxcbiAgICpcbiAgICogQHBhcmFtIHtWaXN1YWxJZH0gdmlzdWFsSWQgIFRoZSB2aXN1YWwgaWRcbiAgICogQHJldHVybnMge1Byb21pc2U8QWN0aXZlTWFya3M+fSAgQ29sbGVjdGlvbiBvZiBkYXRhIHRhYmxlcyB3aXRoIHRoZSBhY3RpdmUgbWFya3NcbiAgICovXG4gIGdldFNlbGVjdGVkTWFya3NBc3luYyh2aXN1YWxJZDogVmlzdWFsSWQpOiBQcm9taXNlPENvbnRyYWN0Lk1hcmtzQ29sbGVjdGlvbj47XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnRseSBoaWdobGlnaHRlZCBtYXJrcyBmb3IgYSBnaXZlbiB2aXN1YWxcbiAgICpcbiAgICogQHBhcmFtIHtWaXN1YWxJZH0gdmlzdWFsSWQgIFRoZSB2aXN1YWwgaWRcbiAgICogQHJldHVybnMge1Byb21pc2U8QWN0aXZlTWFya3M+fSAgQ29sbGVjdGlvbiBvZiBkYXRhIHRhYmxlcyB3aXRoIHRoZSBhY3RpdmUgbWFya3NcbiAgICovXG4gIGdldEhpZ2hsaWdodGVkTWFya3NBc3luYyh2aXN1YWxJZDogVmlzdWFsSWQpOiBQcm9taXNlPENvbnRyYWN0Lk1hcmtzQ29sbGVjdGlvbj47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhc291cmNlSWQgIFRoZSBpZCBvZiB0aGUgZGF0YXNvdXJjZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUFsaWFzZXMgIFdoZXRoZXIgYWxpYXMgdmFsdWVzIHNob3VsZCBiZSBpZ25vcmVkIGluIHRoZSByZXR1cm5lZCBkYXRhXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhSb3dzIFRoZSBtYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIHJldHJpZXZlXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gY29sdW1uc1RvSW5jbHVkZSBDb2x1bW5zIHdoaWNoIHNob3VsZCBiZSByZXR1cm5lZCBzcGVjaWZpZWQgYnkgY2FwdGlvbi4gRW1wdHkgbWVhbnMgYWxsIGNvbHVtbnNcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBjb2x1bW5zVG9JbmNsdWRlQnlJZCBDb2x1bW5zIHdoaWNoIHNob3VsZCBiZSByZXR1cm5lZCBzcGVjaWZpZWQgYnkgbmFtZS4gRW1wdHkgbWVhbnMgYWxsIGNvbHVtbnNcbiAgICogQHJldHVybnMge1Byb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPn0gIERhdGEgdGFibGUgd2l0aCB0aGUgcmVxdWVzdGVkIGRhdGFcbiAgICovXG4gIGdldERhdGFTb3VyY2VEYXRhQXN5bmMoXG4gICAgZGF0YXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgaWdub3JlQWxpYXNlczogYm9vbGVhbixcbiAgICBtYXhSb3dzOiBudW1iZXIsXG4gICAgY29sdW1uc1RvSW5jbHVkZTogQXJyYXk8c3RyaW5nPixcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogQXJyYXk8c3RyaW5nPixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPjtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFzb3VyY2VJZCAgVGhlIGlkIG9mIHRoZSBkYXRhc291cmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpY2FsVGFibGVJZCAgVGhlIGlkIG9mIHRoZSBsb2djaWFsIHRhYmxlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQWxpYXNlcyAgV2hldGhlciBhbGlhcyB2YWx1ZXMgc2hvdWxkIGJlIGlnbm9yZWQgaW4gdGhlIHJldHVybmVkIGRhdGFcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFJvd3MgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gcmV0cmlldmVcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBjb2x1bW5zVG9JbmNsdWRlIENvbHVtbnMgd2hpY2ggc2hvdWxkIGJlIHJldHVybmVkIHNwZWNpZmllZCBieSBjYXB0aW9uLiBFbXB0eSBtZWFucyBhbGwgY29sdW1uc1xuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGNvbHVtbnNUb0luY2x1ZGVCeUlkIENvbHVtbnMgd2hpY2ggc2hvdWxkIGJlIHJldHVybmVkIHNwZWNpZmllZCBieSBuYW1lLiBFbXB0eSBtZWFucyBhbGwgY29sdW1uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+fSAgRGF0YSB0YWJsZSB3aXRoIHRoZSByZXF1ZXN0ZWQgZGF0YVxuICAgKi9cbiAgZ2V0TG9naWNhbFRhYmxlRGF0YUFzeW5jKFxuICAgIGRhdGFzb3VyY2VJZDogc3RyaW5nLFxuICAgIGxvZ2ljYWxUYWJsZUlkOiBzdHJpbmcsXG4gICAgaWdub3JlQWxpYXNlczogYm9vbGVhbixcbiAgICBtYXhSb3dzOiBudW1iZXIsXG4gICAgY29sdW1uc1RvSW5jbHVkZTogQXJyYXk8c3RyaW5nPixcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogQXJyYXk8c3RyaW5nPixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPjtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFzb3VyY2VJZCAgVGhlIGlkIG9mIHRoZSBkYXRhc291cmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpY2FsVGFibGVJZCAgVGhlIGlkIG9mIHRoZSBsb2djaWFsIHRhYmxlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlUm93Q291bnQgVGhlIG51bWJlciBvZiByb3dzIHBlciBwYWdlLiBUaGUgZGVmYXVsdCBhbmQgbWF4aW11bSBpcyAxMCwwMDAgcm93cy5cbiAgICogQHBhcmFtIHtib29sZWFufSBpZ25vcmVBbGlhc2VzICBXaGV0aGVyIGFsaWFzIHZhbHVlcyBzaG91bGQgYmUgaWdub3JlZCBpbiB0aGUgcmV0dXJuZWQgZGF0YVxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGNvbHVtbnNUb0luY2x1ZGVCeUlkIENvbHVtbnMgd2hpY2ggc2hvdWxkIGJlIHJldHVybmVkIHNwZWNpZmllZCBieSBuYW1lLiBFbXB0eSBtZWFucyBhbGwgY29sdW1uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+fSAgRGF0YSB0YWJsZSB3aXRoIHRoZSByZXF1ZXN0ZWQgZGF0YVxuICAgKi9cbiAgZ2V0TG9naWNhbFRhYmxlRGF0YVJlYWRlckFzeW5jKFxuICAgIGRhdGFzb3VyY2VJZDogc3RyaW5nLFxuICAgIGxvZ2ljYWxUYWJsZUlkOiBzdHJpbmcsXG4gICAgcGFnZVJvd0NvdW50OiBudW1iZXIsXG4gICAgaWdub3JlQWxpYXNlczogYm9vbGVhbixcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogQXJyYXk8c3RyaW5nPixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlUmVhZGVyPjtcblxuICAvKipcbiAgICogQHBhcmFtIHtWaXN1YWxJZH0gdmlzdWFsSWQgIFRoZSB2aXN1YWwgaWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2ljYWxUYWJsZUlkICBUaGUgaWQgb2YgdGhlIGxvZ2NpYWwgdGFibGVcbiAgICogQHBhcmFtIHtib29sZWFufSBpZ25vcmVBbGlhc2VzICBXaGV0aGVyIGFsaWFzIHZhbHVlcyBzaG91bGQgYmUgaWdub3JlZCBpbiB0aGUgcmV0dXJuZWQgZGF0YVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZVNlbGVjdGlvbiAgV2hldGhlciBzZWxlY3Rpb25zIGluIHRoaXMgdml6IHNob3VsZCBiZSBpZ25vcmVkIGluIHRoZSByZXR1cm5lZCBkYXRhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUFsbENvbHVtbnMgIFdoZXRoZXIgdG8gaW5jbHVkZSBhbGwgY29sdW1ucyBvciBvbmx5IHRoZSByZWZlcmVuY2VkIGNvbHVtbnNcbiAgICogQHBhcmFtIHtBcnJheX0gY29sdW1uc1RvSW5jbHVkZUJ5SWQgT3ZlcnJpZGVzIGluY2x1ZGVBbGxDb2x1bW5zLCBsaXN0cyB0aGUgY29sdW1ucyB0byBpbmNsdWRlLiBFbXB0eSBtZWFucyBhbGwgY29sdW1ucy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFJvd3MgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gcmV0cmlldmVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPn0gIERhdGEgdGFibGUgd2l0aCB0aGUgcmVxdWVzdGVkIGRhdGFcbiAgICovXG4gIGdldFVuZGVybHlpbmdUYWJsZURhdGFBc3luYyhcbiAgICB2aXN1YWxJZDogVmlzdWFsSWQsXG4gICAgbG9naWNhbFRhYmxlSWQ6IHN0cmluZyxcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIGlnbm9yZVNlbGVjdGlvbjogYm9vbGVhbixcbiAgICBpbmNsdWRlQWxsQ29sdW1uczogYm9vbGVhbixcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogQXJyYXk8c3RyaW5nPixcbiAgICBtYXhSb3dzOiBudW1iZXIsXG4gICAgaW5jbHVkZURhdGFWYWx1ZXNPcHRpb246IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLFxuICApOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VmlzdWFsSWR9IHZpc3VhbElkICBUaGUgdmlzdWFsIGlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpY2FsVGFibGVJZCAgVGhlIGlkIG9mIHRoZSBsb2djaWFsIHRhYmxlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlUm93Q291bnQgVGhlIG51bWJlciBvZiByb3dzIHBlciBwYWdlLiBUaGUgZGVmYXVsdCBhbmQgbWF4aW11bSBpcyAxMCwwMDAgcm93cy5cbiAgICogQHBhcmFtIHtib29sZWFufSBpZ25vcmVBbGlhc2VzICBXaGV0aGVyIGFsaWFzIHZhbHVlcyBzaG91bGQgYmUgaWdub3JlZCBpbiB0aGUgcmV0dXJuZWQgZGF0YVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZVNlbGVjdGlvbiAgV2hldGhlciBzZWxlY3Rpb25zIGluIHRoaXMgdml6IHNob3VsZCBiZSBpZ25vcmVkIGluIHRoZSByZXR1cm5lZCBkYXRhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUFsbENvbHVtbnMgIFdoZXRoZXIgdG8gaW5jbHVkZSBhbGwgY29sdW1ucyBvciBvbmx5IHRoZSByZWZlcmVuY2VkIGNvbHVtbnNcbiAgICogQHBhcmFtIHtBcnJheX0gY29sdW1uc1RvSW5jbHVkZUJ5SWQgT3ZlcnJpZGVzIGluY2x1ZGVBbGxDb2x1bW5zLCBsaXN0cyB0aGUgY29sdW1ucyB0byBpbmNsdWRlLiBFbXB0eSBtZWFucyBhbGwgY29sdW1ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlPn0gIERhdGEgdGFibGUgd2l0aCB0aGUgcmVxdWVzdGVkIGRhdGFcbiAgICovXG4gIGdldFVuZGVybHlpbmdUYWJsZURhdGFSZWFkZXJBc3luYyhcbiAgICB2aXN1YWxJZDogVmlzdWFsSWQsXG4gICAgbG9naWNhbFRhYmxlSWQ6IHN0cmluZyxcbiAgICBwYWdlUm93Q291bnQ6IG51bWJlcixcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIGlnbm9yZVNlbGVjdGlvbjogYm9vbGVhbixcbiAgICBpbmNsdWRlQWxsQ29sdW1uczogYm9vbGVhbixcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogQXJyYXk8c3RyaW5nPixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8Q29udHJhY3QuRGF0YVRhYmxlUmVhZGVyPjtcblxuICAvKipcbiAgICogQHBhcmFtIHtWaXN1YWxJZH0gdmlzdWFsSWQgIFRoZSB2aXN1YWwgaWRcbiAgICovXG4gIGdldFN1bW1hcnlDb2x1bW5zSW5mb0FzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuQ29sdW1uPj47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB0YWJsZUlkICAgICBUaGUgdGFibGUgaWQgdXNlZCB0byBmZXRjaCBkYXRhLlxuICAgKiBAcGFyYW0gcGFnZU51bWJlciAgVGhlIHBhZ2UgbnVtYmVyICh6ZXJvLWJhc2VkKS5cbiAgICogQHBhcmFtIHBhZ2VTaXplICAgIFRoZSBwYWdlIHNpemUgb2YgdGhlIG93bmluZyBEYXRhVGFibGVSZWFkZXJcbiAgICogQHJldHVybnMgICAgICAgICAgIEEgRGF0YVRhYmxlIGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBwYWdlLiBUaGUgbnVtYmVyIG9mIHJvd3MgcmV0dXJuZWRcbiAgICogICAgICAgICAgICAgICAgICAgIGNhbiBiZSBsZXNzIHRoYW4gcmVxdWVzdGVkIGF0IHRoZSBlbmQgb2YgdGhlIGRhdGEuXG4gICAqL1xuICBnZXRQYWdlQXN5bmModGFibGVJZDogc3RyaW5nLCBwYWdlTnVtYmVyOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpOiBQcm9taXNlPENvbnRyYWN0LkRhdGFUYWJsZT47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB0YWJsZUlkICAgICBUaGUgdGFibGUgaWQgdXNlZCB0byBmZXRjaCBkYXRhLlxuICAgKi9cbiAgcmVsZWFzZUFzeW5jKHRhYmxlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBJbnRlcm5hbEFwaURpc3BhdGNoZXIsIFZlcnNpb25OdW1iZXIgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2VydmljZUltcGwgfSBmcm9tICcuL2ltcGwvQW5pbWF0aW9uU2VydmljZUltcGwnO1xuaW1wb3J0IHsgQW5ub3RhdGlvblNlcnZpY2VJbXBsIH0gZnJvbSAnLi9pbXBsL0Fubm90YXRpb25TZXJ2aWNlSW1wbCc7XG5pbXBvcnQgeyBEYXRhU291cmNlU2VydmljZUltcGwgfSBmcm9tICcuL2ltcGwvRGF0YVNvdXJjZVNlcnZpY2VJbXBsJztcbmltcG9ydCB7IEV4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlSW1wbCB9IGZyb20gJy4vaW1wbC9FeHRlcm5hbENvbnRleHRNZW51U2VydmljZUltcGwnO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZUltcGwgfSBmcm9tICcuL2ltcGwvRmlsdGVyU2VydmljZUltcGwnO1xuaW1wb3J0IHsgR2V0RGF0YVNlcnZpY2VJbXBsIH0gZnJvbSAnLi9pbXBsL0dldERhdGFTZXJ2aWNlSW1wbCc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlSW1wbCB9IGZyb20gJy4vaW1wbC9Ob3RpZmljYXRpb25TZXJ2aWNlSW1wbCc7XG5pbXBvcnQgeyBQYXJhbWV0ZXJzU2VydmljZUltcGwgfSBmcm9tICcuL2ltcGwvUGFyYW1ldGVyc1NlcnZpY2VJbXBsJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2VJbXBsIH0gZnJvbSAnLi9pbXBsL1NlbGVjdGlvblNlcnZpY2VJbXBsJztcbmltcG9ydCB7IFNpemVTZXJ2aWNlSW1wbCB9IGZyb20gJy4vaW1wbC9TaXplU2VydmljZUltcGwnO1xuaW1wb3J0IHsgVml6U2VydmljZUltcGwgfSBmcm9tICcuL2ltcGwvVml6U2VydmljZUltcGwnO1xuaW1wb3J0IHsgWm9uZVNlcnZpY2VJbXBsIH0gZnJvbSAnLi9pbXBsL1pvbmVTZXJ2aWNlSW1wbCc7XG5pbXBvcnQgeyBBcGlTZXJ2aWNlUmVnaXN0cnkgfSBmcm9tICcuL1NlcnZpY2VSZWdpc3RyeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckFsbFNoYXJlZFNlcnZpY2VzKGRpc3BhdGNoZXI6IEludGVybmFsQXBpRGlzcGF0Y2hlciwgcmVnaXN0cnlJZDogbnVtYmVyLCBwbGF0Zm9ybVZlcnNpb24/OiBWZXJzaW9uTnVtYmVyKTogdm9pZCB7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQocmVnaXN0cnlJZCkucmVnaXN0ZXJTZXJ2aWNlKG5ldyBBbmltYXRpb25TZXJ2aWNlSW1wbChkaXNwYXRjaGVyLCByZWdpc3RyeUlkKSk7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQocmVnaXN0cnlJZCkucmVnaXN0ZXJTZXJ2aWNlKG5ldyBEYXRhU291cmNlU2VydmljZUltcGwoZGlzcGF0Y2hlciwgcmVnaXN0cnlJZCwgcGxhdGZvcm1WZXJzaW9uKSk7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQocmVnaXN0cnlJZCkucmVnaXN0ZXJTZXJ2aWNlKG5ldyBHZXREYXRhU2VydmljZUltcGwoZGlzcGF0Y2hlciwgcmVnaXN0cnlJZCkpO1xuICBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHJlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgRmlsdGVyU2VydmljZUltcGwoZGlzcGF0Y2hlciwgcmVnaXN0cnlJZCkpO1xuICBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHJlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgTm90aWZpY2F0aW9uU2VydmljZUltcGwoZGlzcGF0Y2hlcikpO1xuICBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHJlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgUGFyYW1ldGVyc1NlcnZpY2VJbXBsKGRpc3BhdGNoZXIsIHJlZ2lzdHJ5SWQpKTtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LmdldChyZWdpc3RyeUlkKS5yZWdpc3RlclNlcnZpY2UobmV3IFNlbGVjdGlvblNlcnZpY2VJbXBsKGRpc3BhdGNoZXIsIHJlZ2lzdHJ5SWQpKTtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LmdldChyZWdpc3RyeUlkKS5yZWdpc3RlclNlcnZpY2UobmV3IEFubm90YXRpb25TZXJ2aWNlSW1wbChkaXNwYXRjaGVyLCByZWdpc3RyeUlkKSk7XG4gIEFwaVNlcnZpY2VSZWdpc3RyeS5nZXQocmVnaXN0cnlJZCkucmVnaXN0ZXJTZXJ2aWNlKG5ldyBab25lU2VydmljZUltcGwoZGlzcGF0Y2hlciwgcmVnaXN0cnlJZCkpO1xuICBBcGlTZXJ2aWNlUmVnaXN0cnkuZ2V0KHJlZ2lzdHJ5SWQpLnJlZ2lzdGVyU2VydmljZShuZXcgU2l6ZVNlcnZpY2VJbXBsKGRpc3BhdGNoZXIsIHJlZ2lzdHJ5SWQpKTtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LmdldChyZWdpc3RyeUlkKS5yZWdpc3RlclNlcnZpY2UobmV3IFZpelNlcnZpY2VJbXBsKGRpc3BhdGNoZXIsIHJlZ2lzdHJ5SWQpKTtcbiAgQXBpU2VydmljZVJlZ2lzdHJ5LmdldChyZWdpc3RyeUlkKS5yZWdpc3RlclNlcnZpY2UobmV3IEV4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlSW1wbChkaXNwYXRjaGVyLCByZWdpc3RyeUlkKSk7XG59XG4iLCJpbXBvcnQgeyBFcnJvckNvZGVzIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uL1RhYmxlYXVFcnJvcic7XG5cbi8qKlxuICogQmFzZSBpbnRlcmZhY2UgZm9yIGFuIGFwaSBzZXJ2aWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpU2VydmljZSB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuYW1lIGZvciB0aGlzIHNlcnZpY2UuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbGxlY3Rpb24gb2Ygc2VydmljZSBuYW1lIHdoaWNoIHdpbGwgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgYXBpLXNoYXJlZCBwcm9qZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIFNlcnZpY2VOYW1lcyB7XG4gIENsaWVudEluZm8gPSAnY2xpZW50LWluZm8tc2VydmljZScsXG4gIERhdGFTb3VyY2VTZXJ2aWNlID0gJ2RhdGEtc291cmNlLXNlcnZpY2UnLFxuICBHZXREYXRhID0gJ2dldC1kYXRhLXNlcnZpY2UnLFxuICBGaWx0ZXIgPSAnZmlsdGVyLXNlcnZpY2UnLFxuICBOb3RpZmljYXRpb24gPSAnbm90aWZpY2F0aW9uLXNlcnZpY2UnLFxuICBQYXJhbWV0ZXJzID0gJ3BhcmFtZXRlcnMtc2VydmljZScsXG4gIFNlbGVjdGlvbiA9ICdzZWxlY3Rpb24tc2VydmljZScsXG4gIEFubm90YXRpb24gPSAnYW5ub3RhdGlvbi1zZXJ2aWNlJyxcbiAgWm9uZSA9ICd6b25lLXNlcnZpY2UnLFxuICBBbmltYXRpb24gPSAnYW5pbWF0aW9uLXNlcnZpY2UnLFxuICBWaXogPSAndml6LXNlcnZpY2UnLFxuICBFeHRlcm5hbENvbnRleHRNZW51ID0gJ2V4dGVybmFsLWNvbnRleHQtbWVudS1zZXJ2aWNlJyxcbiAgSW5pdGlhbGl6YXRpb24gPSAnaW5pdGlhbGl6YXRpb24tc2VydmljZScsXG4gIFN0b3J5QWN0aXZhdGlvbiA9ICdzdG9yeS1hY3RpdmF0aW9uLXNlcnZpY2UnLFxuICBTaXplID0gJ3NpemUtc2VydmljZScsXG59XG5cbi8qKlxuICogRG8gc29tZSBnbG9iYWJsIGRlY2xhcmF0aW9ucyBzbyB3ZSBjYW4gY3JlYXRlIGEgc2luZ2xldG9uIG9uIHRoZSB3aW5kb3cgb2JqZWN0XG4gKi9cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX190YWJsZWF1QXBpU2VydmljZVJlZ2lzdHJ5OiB7IFtyZWdpc3RyeUlkOiBudW1iZXJdOiBTZXJ2aWNlUmVnaXN0cnkgfTtcbiAgfVxufVxuXG53aW5kb3cuX190YWJsZWF1QXBpU2VydmljZVJlZ2lzdHJ5ID0gd2luZG93Ll9fdGFibGVhdUFwaVNlcnZpY2VSZWdpc3RyeSB8fCB7fTtcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlUmVnaXN0cnkge1xuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgbmV3IHNlcnZpY2UgaW50byB0aGUgc2VydmljZSByZWdpc3RyeS4gQW55IGV4aXN0aW5nIG9uZSB3aWxsXG4gICAqIGJlIG92ZXJ3cml0dGVuLiB0aGUgc2VydmljZSBpcyByZWdpc3RlcmVkIHVuZGVyIHNlcnZpY2Uuc2VydmljZU5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtBcGlTZXJ2aWNlfSBzZXJ2aWNlIFRoZSBzZXJ2aXZlIHRvIHJlZ2lzdGVyXG4gICAqL1xuICByZWdpc3RlclNlcnZpY2Uoc2VydmljZTogQXBpU2VydmljZSk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZ2l2ZW4gc2VydmljZSBmcm9tIHRoZSByZWdpc3RyeS4gSWYgdGhlcmUgaXMgbm90IGFcbiAgICogc2VydmljZSByZWdpc3RlcmVkIHVuZGVyIHRoYXQgbmFtZSwgdGhyb3dzIGFuZCBlcnJvclxuICAgKlxuICAgKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgc2VydmljZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VydmljZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UuXG4gICAqIEByZXR1cm5zIHtUfSBUaGUgcmVxdWVzdGVkIHNlcnZpY2VcbiAgICovXG4gIGdldFNlcnZpY2U8VCBleHRlbmRzIEFwaVNlcnZpY2U+KHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBUO1xufVxuXG5jbGFzcyBTZXJ2aWNlUmVnaXN0cnlJbXBsIGltcGxlbWVudHMgU2VydmljZVJlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSBfc2VydmljZXM6IHsgW3NlcnZpY2VOYW1lOiBzdHJpbmddOiBBcGlTZXJ2aWNlIH07XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3NlcnZpY2VzID0ge307XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJTZXJ2aWNlKHNlcnZpY2U6IEFwaVNlcnZpY2UpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXJ2aWNlc1tzZXJ2aWNlLnNlcnZpY2VOYW1lXSA9IHNlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VydmljZTxUIGV4dGVuZHMgQXBpU2VydmljZT4oc2VydmljZU5hbWU6IHN0cmluZyk6IFQge1xuICAgIGlmICghdGhpcy5fc2VydmljZXMuaGFzT3duUHJvcGVydHkoc2VydmljZU5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgYFNlcnZpY2Ugbm90IHJlZ2lzdGVyZWQ6ICR7c2VydmljZU5hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VzW3NlcnZpY2VOYW1lXSBhcyBUO1xuICB9XG59XG5cbi8qKlxuICogU3RhdGljIGNsYXNzIHVzZWQgZm9yIGdldHRpbmcgYWNjZXNzIHRvIHRoZSBzaW5nbGUgaW5zdGFuY2VcbiAqIG9mIHRoZSBBcGlTZXJ2aWNlUmVnaXN0cnkgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RyeUlkLlxuICpcbiAqIEV4dGVuc2lvbnMgYnkgZGVzaWduIGRvbid0IG5lZWQgdG8gc3RvcmUvYWNjZXNzIG11bHRpcGxlIHNlcnZpY2UgcmVnaXN0cmllcy4gVGhlaXIgc2luZ2xlIGluc3RhbmNlIG9mIFNlcnZpY2VSZWdpc3RyeSBpc1xuICogc3RvcmVkL2FjY2VzcyB3aXRoIHJlZ2lzdHJ5SWQgPSAwLlxuICpcbiAqIFdoZXJlYXMgRW1iZWRkaW5nIG5lZWRzIHRvIGJlIGF3YXJlIG9mIHdoaWNoIFNlcnZpY2VSZWdpc3RyeSB0byB1c2Ugd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgdml6emVzIGVtYmVkZGVkLlxuICogQW4gZXhhbXBsZSBvZiBob3cgd2luZG93Ll9fdGFibGVhdUFwaVNlcnZpY2VSZWdpc3RyeSB3aWxsIGxvb2sgd2hlbiB0aGVyZSBhcmUgdHdvIHZpenplczogeyAwIDogU2VydmljZVJlZ2lzdHJ5LCAxIDogU2VydmljZVJlZ2lzdHJ5fVxuICogd2hlcmUgcmVnaXN0cnkgSUQgb2YgMCAmIDEgcmVmZXJzIHRvIHZpeidzIGludGVybmFsIGlkZW50aWZpZXIgKHdoaWNoIGlzIGdlbmVyYXRlZCBieSBWaXpNYW5hZ2VyKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaVNlcnZpY2VSZWdpc3RyeSB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIFNlcnZpY2VSZWdpc3RyeVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXQocmVnaXN0cnlJZDogbnVtYmVyKTogU2VydmljZVJlZ2lzdHJ5IHtcbiAgICBpZiAoIXdpbmRvdy5fX3RhYmxlYXVBcGlTZXJ2aWNlUmVnaXN0cnkgfHwgIXdpbmRvdy5fX3RhYmxlYXVBcGlTZXJ2aWNlUmVnaXN0cnlbcmVnaXN0cnlJZF0pIHtcbiAgICAgIEFwaVNlcnZpY2VSZWdpc3RyeS5zZXRJbnN0YW5jZShyZWdpc3RyeUlkLCBuZXcgU2VydmljZVJlZ2lzdHJ5SW1wbCgpKTtcbiAgICB9XG5cbiAgICBpZiAoIXdpbmRvdy5fX3RhYmxlYXVBcGlTZXJ2aWNlUmVnaXN0cnlbcmVnaXN0cnlJZF0pIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCAnU2VydmljZSByZWdpc3RyeSBmYWlsZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2luZG93Ll9fdGFibGVhdUFwaVNlcnZpY2VSZWdpc3RyeVtyZWdpc3RyeUlkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRoYXQgc2V0cyB0aGUgc2VydmljZSByZWdpc3RyeSBpbnN0YW5jZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0cnlJZC4gQ2FuIGJlIHVzZWQgYnkgdW5pdCB0ZXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge1NlcnZpY2VSZWdpc3RyeX0gc2VydmljZVJlZ2lzdHJ5IFRoZSBuZXcgcmVnaXN0cnlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc2V0SW5zdGFuY2UocmVnaXN0cnlJZDogbnVtYmVyLCBzZXJ2aWNlUmVnaXN0cnk6IFNlcnZpY2VSZWdpc3RyeSk6IHZvaWQge1xuICAgIGlmICghd2luZG93Ll9fdGFibGVhdUFwaVNlcnZpY2VSZWdpc3RyeSkge1xuICAgICAgd2luZG93Ll9fdGFibGVhdUFwaVNlcnZpY2VSZWdpc3RyeSA9IHt9O1xuICAgIH1cbiAgICB3aW5kb3cuX190YWJsZWF1QXBpU2VydmljZVJlZ2lzdHJ5W3JlZ2lzdHJ5SWRdID0gc2VydmljZVJlZ2lzdHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgdXNlZCBieSB1bml0IHRlc3RzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNsZWFyUmVnaXN0cnkoKTogdm9pZCB7XG4gICAgd2luZG93Ll9fdGFibGVhdUFwaVNlcnZpY2VSZWdpc3RyeSA9IHt9O1xuICB9XG5cbiAgLy8gUHJpdmF0ZSB0byBhdm9pZCBhbnlvbmUgY29uc3RydWN0aW5nIHRoaXNcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG59XG4iLCJpbXBvcnQgeyBSZXBsYXlTcGVlZFR5cGUgfSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgUGFyYW1ldGVySWQsIFZlcmJJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3MgYXMgRXh0ZXJuYWxFbnVtQ29udmVydGVyIH0gZnJvbSAnLi4vLi4vRW51bU1hcHBpbmdzL0V4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncyc7XG5pbXBvcnQgeyBFcnJvckhlbHBlcnMgfSBmcm9tICcuLi8uLi9VdGlscy9FcnJvckhlbHBlcnMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uL0FuaW1hdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IFNlcnZpY2VJbXBsQmFzZSB9IGZyb20gJy4vU2VydmljZUltcGxCYXNlJztcblxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvblNlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgQW5pbWF0aW9uU2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU2VydmljZU5hbWVzLkFuaW1hdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYXlBc3luYyhyZXBsYXlTcGVlZDogUmVwbGF5U3BlZWRUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5SZXBsYXlTcGVlZF06IDEuMCxcbiAgICB9O1xuXG4gICAgRXJyb3JIZWxwZXJzLnZlcmlmeUVudW1WYWx1ZTxSZXBsYXlTcGVlZFR5cGU+KHJlcGxheVNwZWVkLCBSZXBsYXlTcGVlZFR5cGUsICdSZXBsYXlTcGVlZFR5cGUnKTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlJlcGxheVNwZWVkXSA9IEV4dGVybmFsRW51bUNvbnZlcnRlci5zZXRSZXBsYXlTcGVlZFR5cGUuY29udmVydChyZXBsYXlTcGVlZCk7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5SZXBsYXlBbmltYXRpb24sIHBhcmFtZXRlcnMpLnRoZW48dm9pZD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBBbm5vdGF0ZUVudW0sIEFubm90YXRpb24sIEV4ZWN1dGVQYXJhbWV0ZXJzLCBQYXJhbWV0ZXJJZCwgVmVyYklkLCBWaXN1YWxJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBJbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MgfSBmcm9tICcuLi8uLi9FbnVtTWFwcGluZ3MvSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lciwgVHVwbGVTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJy4uLy4uL01vZGVscy9TZWxlY3Rpb25Nb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnLi4vLi4vVGFibGVhdUVycm9yJztcbmltcG9ydCB7IEFubm90YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vQW5ub3RhdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IFNlcnZpY2VJbXBsQmFzZSB9IGZyb20gJy4vU2VydmljZUltcGxCYXNlJztcblxuZXhwb3J0IGNsYXNzIEFubm90YXRpb25TZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIEFubm90YXRpb25TZXJ2aWNlIHtcbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTZXJ2aWNlTmFtZXMuQW5ub3RhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gYW5ub3RhdGUgYSBtYXJrIG9uIHRoZSBnaXZlbiB3b3Jrc2hlZXQuXG4gICAqXG4gICAqIEBwYXJhbSB2aXN1YWxJZFxuICAgKiBAcGFyYW0gbWFya1xuICAgKiBAcGFyYW0gYW5ub3RhdGlvblRleHRcbiAgICovXG4gIHB1YmxpYyBhbm5vdGF0ZU1hcmtBc3luYyh2aXN1YWxJZDogVmlzdWFsSWQsIG1hcms6IENvbnRyYWN0Lk1hcmtJbmZvLCBhbm5vdGF0aW9uVGV4dDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uTW9kZWxDb250YWluZXI6IFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lciA9IHRoaXMucGFyc2VNYXJrU2VsZWN0aW9uSWRzKFttYXJrXSk7XG4gICAgY29uc3QgZHVtbXlUYXJnZXRQb2ludCA9IHsgeDogMCwgeTogMCB9O1xuICAgIGNvbnN0IGZvcm1hdHRlZFRleHQgPSBgPGZvcm1hdHRlZC10ZXh0PjxydW4+JHthbm5vdGF0aW9uVGV4dH08L3J1bj48L2Zvcm1hdHRlZC10ZXh0PmA7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnYW5ub3RhdGVNYXJrQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpc3VhbElkXTogdmlzdWFsSWQsXG4gICAgICBbUGFyYW1ldGVySWQuQW5ub3RhdGVFbnVtXTogQW5ub3RhdGVFbnVtLk1hcmssXG4gICAgICBbUGFyYW1ldGVySWQuVGFyZ2V0UG9pbnRdOiBkdW1teVRhcmdldFBvaW50LFxuICAgICAgW1BhcmFtZXRlcklkLlNlbGVjdGlvbkxpc3RdOiBbc2VsZWN0aW9uTW9kZWxDb250YWluZXIuc2VsZWN0aW9uXSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Gb3JtYXR0ZWRUZXh0XTogZm9ybWF0dGVkVGV4dCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkNyZWF0ZUFubm90YXRpb24sIHBhcmFtZXRlcnMpLnRoZW48dm9pZD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyBFeHBlY3RpbmcgYW4gZW1wdHkgbW9kZWwgYW5kIGhlbmNlIHRoZSB2b2lkIHJlc3BvbnNlLlxuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbm5vdGF0aW9ucyBmb3IgdGhlIGdpdmVuIHdvcmtzaGVldC5cbiAgICpcbiAgICogQHBhcmFtIHZpc3VhbElkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PEFubm90YXRpb24+Pn1cbiAgICovXG4gIHB1YmxpYyBnZXRBbm5vdGF0aW9uc0FzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuQW5ub3RhdGlvbj4+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0QW5ub3RhdGlvbnNBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVmlzdWFsSWRdOiB2aXN1YWxJZCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldEFubm90YXRpb25zLCBwYXJhbWV0ZXJzKS50aGVuPEFycmF5PENvbnRyYWN0LkFubm90YXRpb24+PigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGFubm90YXRpb25zTGlzdCA9IHJlc3BvbnNlLnJlc3VsdCBhcyBBcnJheTxBbm5vdGF0aW9uPjtcbiAgICAgIHJldHVybiB0aGlzLmFubm90YXRpb25GaWx0ZXJNYXAoYW5ub3RhdGlvbnNMaXN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gcmVtb3ZlIGFuIGFubm90YXRpb24gZnJvbSBhIGdpdmVuIHdvcmtzaGVldC5cbiAgICpcbiAgICogQHBhcmFtIHZpc3VhbElkXG4gICAqIEBwYXJhbSBhbm5vdGF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlQW5ub3RhdGlvbkFzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCwgYW5ub3RhdGlvbjogQ29udHJhY3QuQW5ub3RhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyOiBTZWxlY3Rpb25Nb2RlbHNDb250YWluZXIgPSB0aGlzLnBhcnNlQW5ub3RhdGlvblNlbGVjdGlvbklkcyhbYW5ub3RhdGlvbl0pO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ3JlbW92ZUFubm90YXRpb25Bc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVmlzdWFsSWRdOiB2aXN1YWxJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TZWxlY3Rpb25MaXN0XTogW3NlbGVjdGlvbk1vZGVsQ29udGFpbmVyLnNlbGVjdGlvbl0sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5SZW1vdmVBbm5vdGF0aW9uLCBwYXJhbWV0ZXJzKS50aGVuPHZvaWQ+KChyZXNwb25zZSkgPT4ge1xuICAgICAgLy8gRXhwZWN0aW5nIGFuIGVtcHR5IG1vZGVsIGFuZCBoZW5jZSB0aGUgdm9pZCByZXNwb25zZS5cbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gcHJlcGFyZSB0aGUgcHJlcyBtb2RlbHMgZm9yIHNlbGVjdGlvbiBieSBNYXJrc0luZm9cbiAgICogQHBhcmFtIG1hcmtzXG4gICAqL1xuICBwcml2YXRlIHBhcnNlTWFya1NlbGVjdGlvbklkcyhtYXJrczogQXJyYXk8Q29udHJhY3QuTWFya0luZm8+KTogU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyIHtcbiAgICBjb25zdCBpZHM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lcjogU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyID0gbmV3IFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lcigpO1xuICAgIG1hcmtzLmZvckVhY2goKG1hcmspID0+IHtcbiAgICAgIGNvbnN0IHR1cGxlSWQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IG1hcmsudHVwbGVJZDtcbiAgICAgIGlmICh0dXBsZUlkICE9PSB1bmRlZmluZWQgJiYgdHVwbGVJZCAhPT0gbnVsbCAmJiB0dXBsZUlkID4gMCkge1xuICAgICAgICBpZHMucHVzaCh0dXBsZUlkLnRvU3RyaW5nKCkpOyAvLyBjb2xsZWN0IHRoZSB0dXBsZSBpZHNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCAnaW52YWxpZCB0dXBsZUlkJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IDApIHtcbiAgICAgIC8vIHR1cGxlIGlkcyBiYXNlZCBzZWxlY3Rpb25cbiAgICAgIGNvbnN0IHR1cGxlU2VsZWN0aW9uTW9kZWw6IFR1cGxlU2VsZWN0aW9uTW9kZWwgPSBuZXcgVHVwbGVTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgdHVwbGVTZWxlY3Rpb25Nb2RlbC5zZWxlY3Rpb25UeXBlID0gJ3R1cGxlcyc7XG4gICAgICB0dXBsZVNlbGVjdGlvbk1vZGVsLm9iamVjdElkcyA9IGlkcztcbiAgICAgIHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyLnNlbGVjdGlvbiA9IHR1cGxlU2VsZWN0aW9uTW9kZWw7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gcHJlcGFyZSB0aGUgcHJlcyBtb2RlbHMgZm9yIHNlbGVjdGlvbiBieSBNYXJrQW5ub3RhdGlvbkluZm9cbiAgICogQHBhcmFtIG1hcmtzXG4gICAqL1xuICBwcml2YXRlIHBhcnNlQW5ub3RhdGlvblNlbGVjdGlvbklkcyhhbm5vdGF0aW9uczogQXJyYXk8Q29udHJhY3QuQW5ub3RhdGlvbj4pOiBTZWxlY3Rpb25Nb2RlbHNDb250YWluZXIge1xuICAgIGNvbnN0IGlkczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGNvbnN0IHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyOiBTZWxlY3Rpb25Nb2RlbHNDb250YWluZXIgPSBuZXcgU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyKCk7XG4gICAgYW5ub3RhdGlvbnMuZm9yRWFjaCgoYW5ub3RhdGlvbikgPT4ge1xuICAgICAgY29uc3QgYW5ub3RhdGlvbklkOiBudW1iZXIgfCB1bmRlZmluZWQgPSBhbm5vdGF0aW9uLmFubm90YXRpb25JZDtcbiAgICAgIGlmIChhbm5vdGF0aW9uSWQgIT09IHVuZGVmaW5lZCAmJiBhbm5vdGF0aW9uSWQgIT09IG51bGwgJiYgYW5ub3RhdGlvbklkID49IDApIHtcbiAgICAgICAgaWRzLnB1c2goYW5ub3RhdGlvbklkLnRvU3RyaW5nKCkpOyAvLyBjb2xsZWN0IHRoZSBhbm5vdGF0aW9uIGlkc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FcnJvckNvZGVzLkludGVybmFsRXJyb3IsICdpbnZhbGlkIGFubm90YXRpb25JZCcpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChpZHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAvLyBhbm5vdGF0aW9uIGlkcyBiYXNlZCBzZWxlY3Rpb25cbiAgICAgIGNvbnN0IHR1cGxlU2VsZWN0aW9uTW9kZWw6IFR1cGxlU2VsZWN0aW9uTW9kZWwgPSBuZXcgVHVwbGVTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgdHVwbGVTZWxlY3Rpb25Nb2RlbC5zZWxlY3Rpb25UeXBlID0gJ2Fubm90YXRpb25zJztcbiAgICAgIHR1cGxlU2VsZWN0aW9uTW9kZWwub2JqZWN0SWRzID0gaWRzO1xuICAgICAgc2VsZWN0aW9uTW9kZWxDb250YWluZXIuc2VsZWN0aW9uID0gdHVwbGVTZWxlY3Rpb25Nb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBtYXAgQW5ub3RhdGlvbiB0byBNYXJrQW5ub3RhdGlvbkluZm9cbiAgICogQHBhcmFtIGFubm90YXRpb25cbiAgICogQHJldHVybnMge0Fubm90YXRpb259XG4gICAqL1xuICBwcml2YXRlIG1hcEFubm90YXRpb24oYW5ub3RhdGlvbjogQW5ub3RhdGlvbik6IENvbnRyYWN0LkFubm90YXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBhbm5vdGF0aW9uSFRNTDogYW5ub3RhdGlvbi5hbm5vdGF0aW9uVGV4dCxcbiAgICAgIGFubm90YXRpb25JZDogYW5ub3RhdGlvbi5hbm5vdGF0aW9uSWQsXG4gICAgICBhbm5vdGF0aW9uVGV4dDogYW5ub3RhdGlvbi5hbm5vdGF0aW9uUGxhaW5UZXh0LFxuICAgICAgYW5ub3RhdGlvblR5cGU6IEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncy5hbm5vdGF0aW9uVHlwZS5jb252ZXJ0KGFubm90YXRpb24uYW5ub3RhdGVFbnVtKSxcbiAgICAgIHR1cGxlSWQ6IGFubm90YXRpb24udHVwbGVJZCEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIEFubm90YXRpb25zIHRvIE1hcmsgQW5ub3RhdGlvbnMsIGFuZCBtYXAgdGhlbSB0byBNYXJrQW5ub3RhdGlvbkluZm9cbiAgICogQHBhcmFtIGFubm90YXRpb25zXG4gICAqIEByZXR1cm5zIHtBcnJheTxBbm5vdGF0aW9uPn1cbiAgICovXG4gIHByaXZhdGUgYW5ub3RhdGlvbkZpbHRlck1hcChhbm5vdGF0aW9uczogQXJyYXk8QW5ub3RhdGlvbj4pOiBBcnJheTxDb250cmFjdC5Bbm5vdGF0aW9uPiB7XG4gICAgY29uc3QgYW5ub3RhdGlvbkluZm9zID0gYW5ub3RhdGlvbnMubWFwKChhbm5vdGF0aW9uKSA9PiB0aGlzLm1hcEFubm90YXRpb24oYW5ub3RhdGlvbikpO1xuXG4gICAgcmV0dXJuIGFubm90YXRpb25JbmZvcztcbiAgfVxufVxuIiwiaW1wb3J0IHsgRW1iZWRkaW5nQm9vdHN0cmFwSW5mbywgRXhlY3V0ZVBhcmFtZXRlcnMsIFBhcmFtZXRlcklkLCBWZXJiSWQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgQ2xpZW50SW5mb1NlcnZpY2UgfSBmcm9tICcuLi9DbGllbnRJbmZvU2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgU2VydmljZUltcGxCYXNlIH0gZnJvbSAnLi9TZXJ2aWNlSW1wbEJhc2UnO1xuXG5leHBvcnQgY2xhc3MgQ2xpZW50SW5mb1NlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgQ2xpZW50SW5mb1NlcnZpY2Uge1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNlcnZpY2VOYW1lcy5DbGllbnRJbmZvO1xuICB9XG5cbiAgcHVibGljIGdldENsaWVudEluZm9Bc3luYygpOiBQcm9taXNlPEVtYmVkZGluZ0Jvb3RzdHJhcEluZm8+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkdldEVtYmVkZGluZ0NsaWVudEluZm87XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldENsaWVudEluZm9Bc3luYycsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxFbWJlZGRpbmdCb290c3RyYXBJbmZvPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGNsaWVudEluZm8gPSByZXNwb25zZS5yZXN1bHQgYXMgRW1iZWRkaW5nQm9vdHN0cmFwSW5mbztcbiAgICAgIHJldHVybiBjbGllbnRJbmZvO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgKiBhcyBJbnRlcm5hbENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQge1xuICBDb25uZWN0aW9uRGVzY3JpcHRpb25TdW1tYXJ5LFxuICBEYXRhU2NoZW1hLFxuICBFeGVjdXRlUGFyYW1ldGVycyxcbiAgSW50ZXJuYWxBcGlEaXNwYXRjaGVyLFxuICBMb2dpY2FsVGFibGVJbmZvLFxuICBQYXJhbWV0ZXJJZCxcbiAgVGFibGVJbmZvLFxuICBUYWJsZUluZm9zLFxuICBWZXJiSWQsXG4gIFZpc3VhbElkLFxufSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL0RhdGFTb3VyY2UnO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi8uLi9GaWVsZCc7XG5pbXBvcnQgeyBEYXRhU291cmNlSW1wbCB9IGZyb20gJy4uLy4uL0ltcGwvRGF0YVNvdXJjZUltcGwnO1xuaW1wb3J0IHsgRmllbGRJbXBsIH0gZnJvbSAnLi4vLi4vSW1wbC9GaWVsZEltcGwnO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnLi4vLi4vVGFibGVhdUVycm9yJztcbmltcG9ydCB7IERhdGFTb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi4vRGF0YVNvdXJjZVNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IFNlcnZpY2VJbXBsQmFzZSB9IGZyb20gJy4vU2VydmljZUltcGxCYXNlJztcblxuZXhwb3J0IGNvbnN0IFNFTlRJTkVMX0xPR0lDQUxfVEFCTEVfSU5GTzogTG9naWNhbFRhYmxlSW5mbyA9IHtcbiAgaWQ6IEludGVybmFsQ29udHJhY3QuQXBpU2hvd0RhdGFUYWJsZVNlbnRpbmVsLlNpbmdsZVRhYmxlSWQsXG4gIGNhcHRpb246IEludGVybmFsQ29udHJhY3QuQXBpU2hvd0RhdGFUYWJsZVNlbnRpbmVsLlNpbmdsZVRhYmxlQ2FwdGlvbixcbn07XG5cbi8vIFRoZSBtaW5pbXVtIHBsYXRmb3JtIHZlcnNpb24gd2hlbiBPYmplY3QgTW9kZWwgd2FzIHN1cHBvcnRlZFxuY29uc3QgcGxhdGZvcm1WZXJzaW9uT2JqZWN0TW9kZWxTdXBwb3J0ID0geyBtYWpvcjogMSwgbWlub3I6IDIwLCBmaXg6IDEgfTtcblxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VTZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIERhdGFTb3VyY2VTZXJ2aWNlIHtcbiAgLy8gU2luY2UgT2JqZWN0IE1vZGVsIGlzIHN1cHBvcnRlZCBzaW5jZSBUYWJsZWF1IDIwMjAuMiwgRGF0YVNvdXJjZVNlcnZpY2VJbXBsIGNhbiBiZSBpbml0aWFsaXplZCB3aXRoIHRoZVxuICAvLyBwbGF0Zm9ybSB2ZXJzaW9uIHdoZW4gT00gd2FzIHN1cHBvcnRlZC4gT25jZSB3ZSBkcm9wIHN1cHBvcnQgZm9yIFRhYmxlYXUgdmVyc2lvbnMgPD0gMjAyMC4xLCBhbGwgYWRkaXRpb25hbFxuICAvLyBjb2RlIGluIGhlcmUgZm9yIE9iamVjdCBNb2RlbCBjYW4gYmUgcmVtb3ZlZC5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGRpc3BhdGNoZXI6IEludGVybmFsQXBpRGlzcGF0Y2hlcixcbiAgICByZWdpc3RyeUlkOiBudW1iZXIsXG4gICAgcHJpdmF0ZSBfcGxhdGZvcm1WZXJzaW9uOiBJbnRlcm5hbENvbnRyYWN0LlZlcnNpb25OdW1iZXIgPSBwbGF0Zm9ybVZlcnNpb25PYmplY3RNb2RlbFN1cHBvcnQsXG4gICkge1xuICAgIHN1cGVyKGRpc3BhdGNoZXIsIHJlZ2lzdHJ5SWQpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU2VydmljZU5hbWVzLkRhdGFTb3VyY2VTZXJ2aWNlO1xuICB9XG5cbiAgcHVibGljIHJlZnJlc2hBc3luYyhkYXRhU291cmNlSWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAncmVmcmVzaEFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5EZWx0YVRpbWVNc106IDAsXG4gICAgICBbUGFyYW1ldGVySWQuU2hvdWxkUmVmcmVzaERTXTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgLy8gT24gc2VydmVyOiBOb3QgcGFzc2luZyB0aGUgZGF0YXNvdXJjZSBpZCB3aWxsIHJlZnJlc2ggYWxsIGRhdGFzb3VyY2VzLlxuICAgIGlmIChkYXRhU291cmNlSWQpIHtcbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRGF0YVNvdXJjZUlkXSA9IGRhdGFTb3VyY2VJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5SZWZyZXNoRGF0YVNvdXJjZSwgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY3RpdmVUYWJsZXNBc3luYyhkYXRhU291cmNlSWQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8VGFibGVJbmZvPj4ge1xuICAgIGNvbnN0IGpvaW5QYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0QWN0aXZlVGFibGVzQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkRhdGFTb3VyY2VJZF06IGRhdGFTb3VyY2VJZCxcbiAgICB9O1xuXG4gICAgLy8gR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGFibGVzIHVzZWQgYnkgdGhpcyBjb25uZWN0aW9uXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0QWN0aXZlVGFibGVzLCBqb2luUGFyYW1ldGVycykudGhlbjxBcnJheTxUYWJsZUluZm8+Pigoam9pblJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZUluZm9zID0gam9pblJlc3BvbnNlLnJlc3VsdCBhcyBUYWJsZUluZm9zO1xuXG4gICAgICAvLyBnZXRBY3RpdmVUYWJsZXMgaXMgdW5zdXBwb3J0ZWQgZm9yIGN1YmVzIGFuZCBHQS4gV2UgZG8gbm90IGhhdmUgYSBjb25uZWN0aW9uIHR5cGUgcHJvcGVydHlcbiAgICAgIC8vIGF2YWlsYWJsZSBmcm9tIHRoZSBwbGF0Zm9ybSAoaW50ZW50aW9uYWxseSwgdG8gcmVkdWNlIGNvZGUgY2h1cm4gYXMgbmV3IGNvbm5lY3Rpb25zIGFyZSBhZGRlZCkuXG4gICAgICAvLyBJbnN0ZWFkLGp1c3QgY2hlY2sgaWYgYW55IHRhYmxlcyBhcmUgcmV0dXJuZWQuIFRoaXMgYXJyYXkgd2lsbCBiZSBlbXB0eSBmb3IgYW55IG5vbi10YWJsZSBiYXNlZCBkYXRhc291cmNlLlxuICAgICAgaWYgKHRhYmxlSW5mb3MudGFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuVW5zdXBwb3J0ZWRNZXRob2RGb3JEYXRhU291cmNlVHlwZSwgYGdldEFjdGl2ZVRhYmxlcyBpcyBub3Qgc3VwcG9ydGVkIGZvcjogJHtkYXRhU291cmNlSWR9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YWJsZUluZm9zLnRhYmxlcztcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhU291cmNlc0FzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCk6IFByb21pc2U8RGF0YVNjaGVtYT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXREYXRhU291cmNlc0FzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaXN1YWxJZF06IHZpc3VhbElkLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0RGF0YVNvdXJjZXMsIHBhcmFtZXRlcnMpLnRoZW48RGF0YVNjaGVtYT4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBkYXRhU2NoZW1hID0gcmVzcG9uc2UucmVzdWx0IGFzIERhdGFTY2hlbWE7XG4gICAgICByZXR1cm4gZGF0YVNjaGVtYTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbGxEYXRhU291cmNlc0FzeW5jKCk6IFByb21pc2U8RGF0YVNjaGVtYT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRBbGxEYXRhU291cmNlc0FzeW5jJyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldEFsbERhdGFTb3VyY2VzLCBwYXJhbWV0ZXJzKS50aGVuPERhdGFTY2hlbWE+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgZGF0YVNjaGVtYSA9IHJlc3BvbnNlLnJlc3VsdCBhcyBEYXRhU2NoZW1hO1xuICAgICAgcmV0dXJuIGRhdGFTY2hlbWE7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29ubmVjdGlvblN1bW1hcmllc0FzeW5jKGRhdGFTb3VyY2VJZDogc3RyaW5nKTogUHJvbWlzZTxDb25uZWN0aW9uRGVzY3JpcHRpb25TdW1tYXJ5W10+IHtcbiAgICBjb25zdCBwYXJhbXM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRDb25uZWN0aW9uU3VtbWFyaWVzQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkRhdGFTb3VyY2VJZF06IGRhdGFTb3VyY2VJZCxcbiAgICB9O1xuXG4gICAgLy8gR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGFibGVzIHVzZWQgYnkgdGhpcyBjb25uZWN0aW9uXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0Q29ubmVjdGlvbkRlc2NyaXB0aW9uU3VtbWFyaWVzLCBwYXJhbXMpLnRoZW48Q29ubmVjdGlvbkRlc2NyaXB0aW9uU3VtbWFyeVtdPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uU3VtbWFyaWVzID0gcmVzcG9uc2UucmVzdWx0IGFzIENvbm5lY3Rpb25EZXNjcmlwdGlvblN1bW1hcnlbXTtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvblN1bW1hcmllcztcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWVsZEFzeW5jKGdsb2JhbGZpZWxkTmFtZTogc3RyaW5nKTogUHJvbWlzZTxDb250cmFjdC5GaWVsZD4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuR2V0RmllbGRBbmREYXRhU291cmNlO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRGaWVsZEFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5GaWVsZElkXTogZ2xvYmFsZmllbGROYW1lLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48Q29udHJhY3QuRmllbGQ+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHJlc3BvbnNlLnJlc3VsdFtQYXJhbWV0ZXJJZC5EYXRhU291cmNlXSBhcyBJbnRlcm5hbENvbnRyYWN0LkRhdGFTb3VyY2U7XG4gICAgICBjb25zdCBmaWVsZCA9IHJlc3BvbnNlLnJlc3VsdFtQYXJhbWV0ZXJJZC5GaWVsZF0gYXMgRmllbGQ7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RmllbGQoZmllbGQsIHRoaXMuY29udmVydERhdGFTb3VyY2UoZGF0YVNvdXJjZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldExvZ2ljYWxUYWJsZXNBc3luYyhkYXRhU291cmNlSWQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8TG9naWNhbFRhYmxlSW5mbz4+IHtcbiAgICBpZiAoIXRoaXMuaXNPYmplY3RNb2RlbFN1cHBvcnRlZEJ5UGxhdGZvcm0oKSkge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIHNlbnRpbmVsIElEIGNhbiBiZSBwYXNzZWQgdG8gZGF0YXNvdXJjZS5nZXRMb2dpY2FsVGFibGVEYXRhLlxuICAgICAgICogT25jZSB0aGUgZGVza3RvcCBpcyB1cGdyYWRlZCB0byBhIHZlcnNpb24gdGhhdCBzdXBwb3J0cyBvYmplY3QgbW9kZWwsXG4gICAgICAgKiB0aGUgc2VudGluZWwgSUQgd2lsbCBhdXRvbWF0aWNhbGx5IGZldGNoIHRoZSB1cGdyYWRlZCB0YWJsZS5cbiAgICAgICAqICovXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8QXJyYXk8TG9naWNhbFRhYmxlSW5mbz4+KChyZXNvbHZlKSA9PiByZXNvbHZlKFtTRU5USU5FTF9MT0dJQ0FMX1RBQkxFX0lORk9dKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0TG9naWNhbFRhYmxlc0FzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5EYXRhU291cmNlSWRdOiBkYXRhU291cmNlSWQsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5HZXRMb2dpY2FsVGFibGVzLCBwYXJhbXMpLnRoZW48QXJyYXk8TG9naWNhbFRhYmxlSW5mbz4+KChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdCBhcyBBcnJheTxMb2dpY2FsVGFibGVJbmZvPjtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVbmRlcmx5aW5nVGFibGVzQXN5bmModmlzdWFsSWQ6IFZpc3VhbElkKTogUHJvbWlzZTxBcnJheTxMb2dpY2FsVGFibGVJbmZvPj4ge1xuICAgIGlmICghdGhpcy5pc09iamVjdE1vZGVsU3VwcG9ydGVkQnlQbGF0Zm9ybSgpKSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgc2VudGluZWwgSUQgY2FuIGJlIHBhc3NlZCB0byB3b3Jrc2hlZXQuZ2V0VW5kZXJseWluZ1RhYmxlRGF0YS5cbiAgICAgICAqIE9uY2UgdGhlIGRlc2t0b3AgaXMgdXBncmFkZWQgdG8gYSB2ZXJzaW9uIHRoYXQgc3VwcG9ydHMgb2JqZWN0IG1vZGVsLFxuICAgICAgICogdGhlIHNlbnRpbmVsIElEIHdpbGwgYXV0b21hdGljYWxseSBmZXRjaCB0aGUgdXBncmFkZWQgdGFibGUuXG4gICAgICAgKiAqL1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEFycmF5PExvZ2ljYWxUYWJsZUluZm8+PigocmVzb2x2ZSkgPT4gcmVzb2x2ZShbU0VOVElORUxfTE9HSUNBTF9UQUJMRV9JTkZPXSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldFVuZGVybHlpbmdUYWJsZXNBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVmlzdWFsSWRdOiB2aXN1YWxJZCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldFVuZGVybHlpbmdUYWJsZXMsIHBhcmFtcykudGhlbjxBcnJheTxMb2dpY2FsVGFibGVJbmZvPj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0IGFzIEFycmF5PExvZ2ljYWxUYWJsZUluZm8+O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RmllbGQoZmllbGQ6IEludGVybmFsQ29udHJhY3QuRmllbGQsIGRhdGFTb3VyY2U6IENvbnRyYWN0LkRhdGFTb3VyY2UpOiBDb250cmFjdC5GaWVsZCB7XG4gICAgcmV0dXJuIG5ldyBGaWVsZChuZXcgRmllbGRJbXBsKGZpZWxkLCBkYXRhU291cmNlKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREYXRhU291cmNlKGRhdGFTb3VyY2U6IEludGVybmFsQ29udHJhY3QuRGF0YVNvdXJjZSk6IENvbnRyYWN0LkRhdGFTb3VyY2Uge1xuICAgIHJldHVybiBuZXcgRGF0YVNvdXJjZShuZXcgRGF0YVNvdXJjZUltcGwoZGF0YVNvdXJjZSwgdGhpcy5fcmVnaXN0cnlJZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc09iamVjdE1vZGVsU3VwcG9ydGVkQnlQbGF0Zm9ybSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwbGF0Zm9ybVZlcnNpb25Ob09iamVjdE1vZGVsU3VwcG9ydCA9IHsgbWFqb3I6IDEsIG1pbm9yOiAxMywgZml4OiAwIH07XG4gICAgcmV0dXJuIEludGVybmFsQ29udHJhY3QuVmVyc2lvbkxlc3NUaGFuKHBsYXRmb3JtVmVyc2lvbk5vT2JqZWN0TW9kZWxTdXBwb3J0LCB0aGlzLl9wbGF0Zm9ybVZlcnNpb24pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBBcGlNZW51VHlwZSwgQ29udGV4dE1lbnVPcHRpb25zIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEV4ZWN1dGVQYXJhbWV0ZXJzLCBQYXJhbWV0ZXJJZCwgVmVyYklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEV4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vRXh0ZXJuYWxDb250ZXh0TWVudVNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IFNlcnZpY2VJbXBsQmFzZSB9IGZyb20gJy4vU2VydmljZUltcGxCYXNlJztcblxuZXhwb3J0IGNsYXNzIEV4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIEV4dGVybmFsQ29udGV4dE1lbnVTZXJ2aWNlIHtcbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTZXJ2aWNlTmFtZXMuRXh0ZXJuYWxDb250ZXh0TWVudTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBlbmRDb250ZXh0TWVudUFzeW5jKHNoZWV0TmFtZTogc3RyaW5nLCB0YXJnZXRNZW51OiBBcGlNZW51VHlwZSwgY29uZmlnOiBDb250ZXh0TWVudU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuQXBwZW5kRXh0ZXJuYWxNZW51SXRlbTtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnYXBwZW5kQ29udGV4dE1lbnVBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuV29ya3NoZWV0TmFtZV06IHNoZWV0TmFtZSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5FeHRlcm5hbE1lbnVJdGVtRGlzcGxheU5hbWVdOiBjb25maWcuZGlzcGxheU5hbWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxzdHJpbmc+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgbmV3TWVudUl0ZW1JZCA9IHJlc3BvbnNlLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICByZXR1cm4gbmV3TWVudUl0ZW1JZDtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDb250ZXh0TWVudUFzeW5jKHNoZWV0TmFtZTogc3RyaW5nLCB0YXJnZXRNZW51OiBBcGlNZW51VHlwZSwgbWVudUl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5SZW1vdmVFeHRlcm5hbE1lbnVJdGVtO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdyZW1vdmVDb250ZXh0TWVudUFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Xb3Jrc2hlZXROYW1lXTogc2hlZXROYW1lLFxuICAgICAgW1BhcmFtZXRlcklkLkV4dGVybmFsTWVudUl0ZW1JZF06IG1lbnVJdGVtSWQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBleGVjdXRlQ29udGV4dE1lbnVBc3luYyhzaGVldE5hbWU6IHN0cmluZywgdGFyZ2V0TWVudTogQXBpTWVudVR5cGUsIG1lbnVJdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuRXhlY3V0ZUV4dGVybmFsTWVudUl0ZW07XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2V4ZWN1dGVDb250ZXh0TWVudUFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Xb3Jrc2hlZXROYW1lXTogc2hlZXROYW1lLFxuICAgICAgW1BhcmFtZXRlcklkLkV4dGVybmFsTWVudUl0ZW1JZF06IG1lbnVJdGVtSWQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZW5hbWVDb250ZXh0TWVudUFzeW5jKHNoZWV0TmFtZTogc3RyaW5nLCB0YXJnZXRNZW51OiBBcGlNZW51VHlwZSwgbWVudUhlYWRlcjogc3RyaW5nLCBtZW51RGVzY3JpcHRpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuUmVuYW1lRXh0ZXJuYWxNZW51O1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdyZW5hbWVDb250ZXh0TWVudUFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Xb3Jrc2hlZXROYW1lXTogc2hlZXROYW1lLFxuICAgICAgW1BhcmFtZXRlcklkLkV4dGVybmFsTWVudUhlYWRlcl06IG1lbnVIZWFkZXIsXG4gICAgICBbUGFyYW1ldGVySWQuRXh0ZXJuYWxNZW51RGVzY3JpcHRpb25dOiBtZW51RGVzY3JpcHRpb24sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7XG4gIERhdGVSYW5nZVR5cGUsXG4gIEVtYmVkZGluZ0Vycm9yQ29kZXMsXG4gIEVycm9yQ29kZXMsXG4gIEZpbHRlckRvbWFpblR5cGUsXG4gIEZpbHRlclR5cGUgYXMgRXh0ZXJuYWxGaWx0ZXJUeXBlLFxuICBTaGFyZWRFcnJvckNvZGVzLFxufSBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0ICogYXMgSW50ZXJuYWxDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXhlY3V0ZVBhcmFtZXRlcnMsIEZpbHRlclR5cGUsIFBhcmFtZXRlcklkLCBWZXJiSWQsIFZpc3VhbElkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uLy4uLy4uL0FwaVNoYXJlZCc7XG5pbXBvcnQgeyBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3MgYXMgRXh0ZXJuYWxFbnVtQ29udmVydGVyIH0gZnJvbSAnLi4vLi4vRW51bU1hcHBpbmdzL0V4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncyc7XG5pbXBvcnQgeyBJbnRlcm5hbFRvRXh0ZXJuYWxFbnVtTWFwcGluZ3MgYXMgSW50ZXJuYWxFbnVtQ29udmVydGVyIH0gZnJvbSAnLi4vLi4vRW51bU1hcHBpbmdzL0ludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyc7XG5pbXBvcnQge1xuICBDYXRlZ29yaWNhbERvbWFpbixcbiAgQ2F0ZWdvcmljYWxGaWx0ZXIsXG4gIEhpZXJhcmNoaWNhbERhdGFWYWx1ZSxcbiAgSGllcmFyY2hpY2FsRmlsdGVyLFxuICBIaWVyYXJjaGljYWxMZXZlbERldGFpbCxcbiAgUmFuZ2VEb21haW4sXG4gIFJhbmdlRmlsdGVyLFxuICBSZWxhdGl2ZURhdGVGaWx0ZXIsXG59IGZyb20gJy4uLy4uL01vZGVscy9GaWx0ZXJNb2RlbHMnO1xuaW1wb3J0IHsgRGF0YVZhbHVlIH0gZnJvbSAnLi4vLi4vTW9kZWxzL0dldERhdGFNb2RlbHMnO1xuaW1wb3J0IHsgRGF0YVZhbHVlRmFjdG9yeSB9IGZyb20gJy4uLy4uL1V0aWxzL0RhdGFWYWx1ZUZhY3RvcnknO1xuaW1wb3J0IHsgUGFyYW0gfSBmcm9tICcuLi8uLi9VdGlscy9QYXJhbSc7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vRmlsdGVyU2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgU2VydmljZUltcGxCYXNlIH0gZnJvbSAnLi9TZXJ2aWNlSW1wbEJhc2UnO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyU2VydmljZUltcGwgZXh0ZW5kcyBTZXJ2aWNlSW1wbEJhc2UgaW1wbGVtZW50cyBGaWx0ZXJTZXJ2aWNlIHtcbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTZXJ2aWNlTmFtZXMuRmlsdGVyO1xuICB9XG5cbiAgcHVibGljIGFwcGx5RmlsdGVyQXN5bmMoXG4gICAgdmlzdWFsSWQ6IFZpc3VhbElkLFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlczogQXJyYXk8c3RyaW5nPixcbiAgICB1cGRhdGVUeXBlOiBDb250cmFjdC5GaWx0ZXJVcGRhdGVUeXBlLFxuICAgIGZpbHRlck9wdGlvbnM6IENvbnRyYWN0LkZpbHRlck9wdGlvbnMsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5BcHBseUNhdGVnb3JpY2FsRmlsdGVyO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdhcHBseUZpbHRlckFzeW5jJyxcbiAgICB9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuVmlzdWFsSWRdID0gdmlzdWFsSWQ7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWVsZE5hbWVdID0gZmllbGROYW1lO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgJ3ZhbHVlcyBwYXJhbWV0ZXIgZm9yIGFwcGx5RmlsdGVyQXN5bmMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH1cbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkZpbHRlclZhbHVlc10gPSB2YWx1ZXM7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWx0ZXJVcGRhdGVUeXBlXSA9IEV4dGVybmFsRW51bUNvbnZlcnRlci5maWx0ZXJVcGRhdGVUeXBlLmNvbnZlcnQodXBkYXRlVHlwZSk7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5Jc0V4Y2x1ZGVNb2RlXSA9XG4gICAgICBmaWx0ZXJPcHRpb25zID09PSB1bmRlZmluZWQgfHwgZmlsdGVyT3B0aW9ucy5pc0V4Y2x1ZGVNb2RlID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IGZpbHRlck9wdGlvbnMuaXNFeGNsdWRlTW9kZTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxzdHJpbmc+KChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkTmFtZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseVJhbmdlRmlsdGVyQXN5bmModmlzdWFsSWQ6IFZpc3VhbElkLCBmaWVsZE5hbWU6IHN0cmluZywgZmlsdGVyT3B0aW9uczogQ29udHJhY3QuUmFuZ2VGaWx0ZXJPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkFwcGx5UmFuZ2VGaWx0ZXI7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2FwcGx5UmFuZ2VGaWx0ZXJBc3luYycsXG4gICAgfTtcblxuICAgIGlmIChmaWx0ZXJPcHRpb25zLm1pbiAhPT0gdW5kZWZpbmVkICYmIGZpbHRlck9wdGlvbnMubWluICE9PSBudWxsKSB7XG4gICAgICBsZXQgbWluOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgICBpZiAoZmlsdGVyT3B0aW9ucy5taW4gaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIG1pbiA9IFBhcmFtLnNlcmlhbGl6ZURhdGVGb3JQbGF0Zm9ybShmaWx0ZXJPcHRpb25zLm1pbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtaW4gPSBmaWx0ZXJPcHRpb25zLm1pbjtcbiAgICAgIH1cbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmlsdGVyUmFuZ2VNaW5dID0gbWluO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJPcHRpb25zLm1heCAhPT0gdW5kZWZpbmVkICYmIGZpbHRlck9wdGlvbnMubWF4ICE9PSBudWxsKSB7XG4gICAgICBsZXQgbWF4OiBzdHJpbmcgfCBudW1iZXI7XG4gICAgICBpZiAoZmlsdGVyT3B0aW9ucy5tYXggaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIG1heCA9IFBhcmFtLnNlcmlhbGl6ZURhdGVGb3JQbGF0Zm9ybShmaWx0ZXJPcHRpb25zLm1heCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXggPSBmaWx0ZXJPcHRpb25zLm1heDtcbiAgICAgIH1cbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmlsdGVyUmFuZ2VNYXhdID0gbWF4O1xuICAgIH1cblxuICAgIC8vIFRoZSBudWxsIG9wdGlvbiBpcyB1c2VkIHdpdGggbWluK21heCBmb3IgJ2luY2x1ZGUtcmFuZ2UnIG9yICdpbmNsdWRlLXJhbmdlLW9yLW51bGwnXG4gICAgaWYgKGZpbHRlck9wdGlvbnMubnVsbE9wdGlvbikge1xuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWx0ZXJSYW5nZU51bGxPcHRpb25dID0gRXh0ZXJuYWxFbnVtQ29udmVydGVyLm51bGxPcHRpb25zLmNvbnZlcnQoZmlsdGVyT3B0aW9ucy5udWxsT3B0aW9uKTtcbiAgICB9XG5cbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkZpZWxkTmFtZV0gPSBmaWVsZE5hbWU7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5WaXN1YWxJZF0gPSB2aXN1YWxJZDtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxzdHJpbmc+KChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5hcGlGaWx0ZXJIYW5kbGVyQ2hlY2tGb3JDb21tYW5kRXJyb3IocmVzcG9uc2UucmVzdWx0IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pO1xuICAgICAgcmV0dXJuIGZpZWxkTmFtZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUhpZXJhcmNoaWNhbEZpbHRlckFzeW5jKFxuICAgIHZpc3VhbElkOiBWaXN1YWxJZCxcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IEFycmF5PHN0cmluZz4gfCBDb250cmFjdC5IaWVyYXJjaGljYWxMZXZlbHMsXG4gICAgdXBkYXRlVHlwZTogQ29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZSxcbiAgICBmaWx0ZXJPcHRpb25zOiBDb250cmFjdC5GaWx0ZXJPcHRpb25zLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuSGllcmFyY2hpY2FsRmlsdGVyO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdhcHBseUhpZXJhcmNoaWNhbEZpbHRlckFzeW5jJyxcbiAgICB9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuVmlzdWFsSWRdID0gdmlzdWFsSWQ7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWVsZE5hbWVdID0gZmllbGROYW1lO1xuXG4gICAgY29uc3QgaGllcmFyY2hpY2FsTGV2ZWxzID0gKHZhbHVlcyBhcyBDb250cmFjdC5IaWVyYXJjaGljYWxMZXZlbHMpLmxldmVscztcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhpZXJhcmNoaWNhbExldmVscykgJiYgaGllcmFyY2hpY2FsTGV2ZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmlsdGVyTGV2ZWxzXSA9IGhpZXJhcmNoaWNhbExldmVscztcbiAgICB9IGVsc2UgaWYgKCh2YWx1ZXMgYXMgQXJyYXk8U3RyaW5nPikubGVuZ3RoID4gMCkge1xuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWx0ZXJWYWx1ZXNdID0gdmFsdWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGUgc2VydmVyIGNvbW1hbmQgZXhwZWN0cyBlbXB0eSBsaXN0IGZvciBjbGVhcmluZyB0aGUgZmlsdGVyXG4gICAgICAvLyBpdCBhbHNvIGV4cGVjdHMgZWl0aGVycyBGaWx0ZXJMZXZlbHMgb3IgRmlsdGVyVmFsdWVzIHRvIGJlIHNldFxuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWx0ZXJMZXZlbHNdID0gW107XG4gICAgfVxuXG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWx0ZXJVcGRhdGVUeXBlXSA9IEV4dGVybmFsRW51bUNvbnZlcnRlci5maWx0ZXJVcGRhdGVUeXBlLmNvbnZlcnQodXBkYXRlVHlwZSk7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5Jc0V4Y2x1ZGVNb2RlXSA9IGZpbHRlck9wdGlvbnMgJiYgISFmaWx0ZXJPcHRpb25zLmlzRXhjbHVkZU1vZGU7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48c3RyaW5nPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZE5hbWU7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJGaWx0ZXJBc3luYyh2aXN1YWxJZDogVmlzdWFsSWQsIGZpZWxkTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkNsZWFyRmlsdGVyO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdjbGVhckZpbHRlckFzeW5jJyxcbiAgICB9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuVmlzdWFsSWRdID0gdmlzdWFsSWQ7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWVsZE5hbWVdID0gZmllbGROYW1lO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxzdHJpbmc+KChyZXNwb3NuZSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkTmFtZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseVJlbGF0aXZlRGF0ZUZpbHRlckFzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCwgZmllbGROYW1lOiBzdHJpbmcsIG9wdGlvbnM6IENvbnRyYWN0LlJlbGF0aXZlRGF0ZUZpbHRlck9wdGlvbnMpIHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkFwcGx5UmVsYXRpdmVEYXRlRmlsdGVyO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdhcHBseVJlbGF0aXZlRGF0ZUZpbHRlckFzeW5jJyxcbiAgICB9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuVmlzdWFsSWRdID0gdmlzdWFsSWQ7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWVsZE5hbWVdID0gZmllbGROYW1lO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuUGVyaW9kVHlwZV0gPSBFeHRlcm5hbEVudW1Db252ZXJ0ZXIucGVyaW9kVHlwZS5jb252ZXJ0KG9wdGlvbnMucGVyaW9kVHlwZSk7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5EYXRlUmFuZ2VUeXBlXSA9IEV4dGVybmFsRW51bUNvbnZlcnRlci5kYXRlUmFuZ2VUeXBlLmNvbnZlcnQob3B0aW9ucy5yYW5nZVR5cGUpO1xuICAgIGlmIChvcHRpb25zLnJhbmdlVHlwZSA9PT0gRGF0ZVJhbmdlVHlwZS5MYXN0TiB8fCBvcHRpb25zLnJhbmdlVHlwZSA9PT0gRGF0ZVJhbmdlVHlwZS5OZXh0Tikge1xuICAgICAgaWYgKG9wdGlvbnMucmFuZ2VOID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5yYW5nZU4gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihcbiAgICAgICAgICBFbWJlZGRpbmdFcnJvckNvZGVzLk1pc3NpbmdSYW5nZU5Gb3JSZWxhdGl2ZURhdGVGaWx0ZXJzLFxuICAgICAgICAgICdNaXNzaW5nIHJhbmdlTiBmaWVsZCBmb3IgYSByZWxhdGl2ZSBkYXRlIGZpbHRlciBvZiBMQVNUTiBvciBORVhUTi4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5SYW5nZU5dID0gb3B0aW9ucy5yYW5nZU47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYW5jaG9yRGF0ZSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuYW5jaG9yRGF0ZSAhPT0gbnVsbCkge1xuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5BbmNob3JEYXRlXSA9IHRoaXMuY29udmVydEFuY2hvckRhdGUob3B0aW9ucy5hbmNob3JEYXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48c3RyaW5nPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHQgYXMgc3RyaW5nO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEZpbHRlcnNBc3luYyh2aXN1YWxJZDogVmlzdWFsSWQpOiBQcm9taXNlPEFycmF5PENvbnRyYWN0LkZpbHRlcj4+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkdldEZpbHRlcnM7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldEZpbHRlcnNBc3luYycsXG4gICAgfTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlZpc3VhbElkXSA9IHZpc3VhbElkO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxBcnJheTxDb250cmFjdC5GaWx0ZXI+PigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSByZXNwb25zZS5yZXN1bHQgYXMgQXJyYXk8SW50ZXJuYWxDb250cmFjdC5GaWx0ZXI+O1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydERvbWFpbkZpbHRlcnMoZmlsdGVycyk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2F0ZWdvcmljYWxEb21haW5Bc3luYyhcbiAgICB3b3Jrc2hlZXROYW1lOiBzdHJpbmcsXG4gICAgZmllbGRJZDogc3RyaW5nLFxuICAgIGRvbWFpblR5cGU6IEZpbHRlckRvbWFpblR5cGUsXG4gICk6IFByb21pc2U8Q29udHJhY3QuQ2F0ZWdvcmljYWxEb21haW4+IHtcbiAgICBjb25zdCB2ZXJiID0gVmVyYklkLkdldENhdGVnb3JpY2FsRG9tYWluO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRDYXRlZ29yaWNhbERvbWFpbkFzeW5jJyxcbiAgICB9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuVmlzdWFsSWRdID0ge1xuICAgICAgd29ya3NoZWV0OiB3b3Jrc2hlZXROYW1lLFxuICAgIH07XG5cbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkZpZWxkSWRdID0gZmllbGRJZDtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkRvbWFpblR5cGVdID0gRXh0ZXJuYWxFbnVtQ29udmVydGVyLmZpbHRlckRvbWFpblR5cGUuY29udmVydChkb21haW5UeXBlKTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48Q29udHJhY3QuQ2F0ZWdvcmljYWxEb21haW4+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgZG9tYWluID0gcmVzcG9uc2UucmVzdWx0IGFzIEludGVybmFsQ29udHJhY3QuQ2F0ZWdvcmljYWxEb21haW47XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0Q2F0ZWdvcmljYWxEb21haW4oZG9tYWluLCBkb21haW5UeXBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSYW5nZURvbWFpbkFzeW5jKHdvcmtzaGVldE5hbWU6IHN0cmluZywgZmllbGRJZDogc3RyaW5nLCBkb21haW5UeXBlOiBGaWx0ZXJEb21haW5UeXBlKTogUHJvbWlzZTxDb250cmFjdC5SYW5nZURvbWFpbj4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuR2V0UmFuZ2VEb21haW47XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldFJhbmdlRG9tYWluQXN5bmMnLFxuICAgIH07XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5WaXN1YWxJZF0gPSB7XG4gICAgICB3b3Jrc2hlZXQ6IHdvcmtzaGVldE5hbWUsXG4gICAgfTtcblxuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmllbGRJZF0gPSBmaWVsZElkO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRG9tYWluVHlwZV0gPSBFeHRlcm5hbEVudW1Db252ZXJ0ZXIuZmlsdGVyRG9tYWluVHlwZS5jb252ZXJ0KGRvbWFpblR5cGUpO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxDb250cmFjdC5SYW5nZURvbWFpbj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBkb21haW4gPSByZXNwb25zZS5yZXN1bHQgYXMgSW50ZXJuYWxDb250cmFjdC5SYW5nZURvbWFpbjtcblxuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFJhbmdlRG9tYWluKGRvbWFpbiwgZG9tYWluVHlwZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGFzaGJvYXJkRmlsdGVyc0FzeW5jKCk6IFByb21pc2U8QXJyYXk8Q29udHJhY3QuRmlsdGVyPj4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuR2V0RGFzaGJvYXJkRmlsdGVycztcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0RGFzaGJvYXJkRmlsdGVyc0FzeW5jJyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxBcnJheTxDb250cmFjdC5GaWx0ZXI+PigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSByZXNwb25zZS5yZXN1bHQgYXMgQXJyYXk8SW50ZXJuYWxDb250cmFjdC5GaWx0ZXI+O1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydERvbWFpbkZpbHRlcnMoZmlsdGVycyk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlEYXNoYm9hcmRGaWx0ZXJBc3luYyhcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZXM6IEFycmF5PHN0cmluZz4sXG4gICAgdXBkYXRlVHlwZTogQ29udHJhY3QuRmlsdGVyVXBkYXRlVHlwZSxcbiAgICBmaWx0ZXJPcHRpb25zOiBDb250cmFjdC5GaWx0ZXJPcHRpb25zLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuRGFzaGJvYXJkQ2F0ZWdvcmljYWxGaWx0ZXI7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2FwcGx5RGFzaGJvYXJkRmlsdGVyQXN5bmMnLFxuICAgIH07XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWVsZE5hbWVdID0gZmllbGROYW1lO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuRmlsdGVyVmFsdWVzXSA9IHZhbHVlcztcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkZpbHRlclVwZGF0ZVR5cGVdID0gRXh0ZXJuYWxFbnVtQ29udmVydGVyLmZpbHRlclVwZGF0ZVR5cGUuY29udmVydCh1cGRhdGVUeXBlKTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLklzRXhjbHVkZU1vZGVdID0gZmlsdGVyT3B0aW9ucyAmJiAhIWZpbHRlck9wdGlvbnMuaXNFeGNsdWRlTW9kZTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxzdHJpbmc+KChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QXBwbGllZFdvcmtzaGVldHNBc3luYyh3b3Jrc2hlZXROYW1lOiBzdHJpbmcsIGZpZWxkSWQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xuICAgIGNvbnN0IHNoYXJlZEZpbHRlck1vZGVsID0gYXdhaXQgdGhpcy5leGVjdXRlR2V0QXBwbGllZFdvcmtzaGVldHMod29ya3NoZWV0TmFtZSwgZmllbGRJZCwgJ2dldEFwcGxpZWRXb3Jrc2hlZXRzQXN5bmMnKTtcbiAgICBjb25zdCB3b3Jrc2hlZXROYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBzaGFyZWRGaWx0ZXJNb2RlbC53b3Jrc2hlZXRzPy5tYXAoKHdvcmtzaGVldEluZm86IEludGVybmFsQ29udHJhY3QuU2hhcmVkRmlsdGVyV29ya3NoZWV0TW9kZWwpID0+IHtcbiAgICAgIGlmICh3b3Jrc2hlZXRJbmZvLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgd29ya3NoZWV0TmFtZXMucHVzaCh3b3Jrc2hlZXRJbmZvLndvcmtzaGVldE5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB3b3Jrc2hlZXROYW1lcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRBcHBsaWVkV29ya3NoZWV0c0FzeW5jKFxuICAgIHdvcmtzaGVldE5hbWU6IHN0cmluZyxcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICBmaWVsZElkOiBzdHJpbmcsXG4gICAgYXBwbHlUb1dvcmtzaGVldHM6IEFycmF5PHN0cmluZz4sXG4gICk6IFByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xuICAgIGNvbnN0IHNoYXJlZEZpbHRlck1vZGVsID0gYXdhaXQgdGhpcy5leGVjdXRlR2V0QXBwbGllZFdvcmtzaGVldHMod29ya3NoZWV0TmFtZSwgZmllbGRJZCwgJ2dldEFwcGxpZWRXb3Jrc2hlZXRzQXN5bmNJbnRlcm5hbCcpO1xuICAgIGlmICghc2hhcmVkRmlsdGVyTW9kZWwgfHwgIXNoYXJlZEZpbHRlck1vZGVsLndvcmtzaGVldHMpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCAnVGhpcyBmaWx0ZXIgZG9lcyBub3QgYXBwbHkgdG8gbXVsdGlwbGUgd29ya3NoZWV0cycpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93ZWRXb3Jrc2hlZXRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBhY3RpdmVXb3Jrc2hlZXQgPSAnJztcbiAgICBzaGFyZWRGaWx0ZXJNb2RlbC53b3Jrc2hlZXRzLmZvckVhY2goKHdvcmtzaGVldCkgPT4ge1xuICAgICAgLy8gR2V0IGFjdGl2ZSB3b3Jrc2hlZXRcbiAgICAgIGlmICh3b3Jrc2hlZXQuaXNBY3RpdmUpIHtcbiAgICAgICAgYWN0aXZlV29ya3NoZWV0ID0gd29ya3NoZWV0LndvcmtzaGVldE5hbWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFBvcHVsYXRlIGFsbG93ZWQgd29ya3NoZWV0c1xuICAgICAgaWYgKHdvcmtzaGVldC5pc1NlbGVjdGVkIHx8IHdvcmtzaGVldC5pc0VuYWJsZWQpIHtcbiAgICAgICAgYWxsb3dlZFdvcmtzaGVldHMucHVzaCh3b3Jrc2hlZXQud29ya3NoZWV0TmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoYWN0aXZlV29ya3NoZWV0ID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludGVybmFsRXJyb3IsICdObyBhY3RpdmUgd29ya3NoZWV0Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFhcHBseVRvV29ya3NoZWV0cy5pbmNsdWRlcyhhY3RpdmVXb3Jrc2hlZXQpKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgYCR7YWN0aXZlV29ya3NoZWV0fSBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBhcHBsaWVkIHdvcmtzaGVldHNgKTtcbiAgICB9XG5cbiAgICBhcHBseVRvV29ya3NoZWV0cy5mb3JFYWNoKChzaGVldCkgPT4ge1xuICAgICAgLy8gY2hlY2sgaWYgaXQncyBwcmVzZW50IHdpdGhpbiBjb21wYXRpYmxlIHNoZWV0c1xuICAgICAgaWYgKCFhbGxvd2VkV29ya3NoZWV0cy5pbmNsdWRlcyhzaGVldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludGVybmFsRXJyb3IsIGBUaGUgZmllbGQgJHtmaWVsZE5hbWV9IGlzbid0IGFwcGxpY2FibGUgdG8gdGhlIHdvcmtzaGVldCAke3NoZWV0fWApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5DaGFuZ2VTaGFyZWRGaWx0ZXI7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7fTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV0gPSAnc2V0QXBwbGllZFdvcmtzaGVldHNBc3luYyc7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5WaXN1YWxJZF0gPSB7XG4gICAgICB3b3Jrc2hlZXQ6IHdvcmtzaGVldE5hbWUsXG4gICAgfTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkZpZWxkSWRdID0gZmllbGRJZDtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlNoYXJlZEZpbHRlclNoZWV0c10gPSBhcHBseVRvV29ya3NoZWV0cztcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxzdHJpbmdbXT4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm4gYXBwbHlUb1dvcmtzaGVldHM7XG4gICAgfSk7XG4gIH1cblxuICAvLyBIZWxwZXIgTWV0aG9kc1xuXG4gIHByaXZhdGUgZXhlY3V0ZUdldEFwcGxpZWRXb3Jrc2hlZXRzKFxuICAgIHdvcmtzaGVldE5hbWU6IHN0cmluZyxcbiAgICBmaWVsZElkOiBzdHJpbmcsXG4gICAgdGVsZW1ldHJ5RnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8SW50ZXJuYWxDb250cmFjdC5TaGFyZWRGaWx0ZXJNb2RlbD4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuR2V0U2hhcmVkRmlsdGVyO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge307XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdID0gdGVsZW1ldHJ5RnVuY3Rpb25OYW1lO1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuVmlzdWFsSWRdID0ge1xuICAgICAgd29ya3NoZWV0OiB3b3Jrc2hlZXROYW1lLFxuICAgIH07XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5GaWVsZElkXSA9IGZpZWxkSWQ7XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48SW50ZXJuYWxDb250cmFjdC5TaGFyZWRGaWx0ZXJNb2RlbD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBzaGFyZWRGaWx0ZXJNb2RlbCA9IHJlc3BvbnNlLnJlc3VsdCBhcyBJbnRlcm5hbENvbnRyYWN0LlNoYXJlZEZpbHRlck1vZGVsO1xuICAgICAgcmV0dXJuIHNoYXJlZEZpbHRlck1vZGVsO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RG9tYWluRmlsdGVycyhkb21haW5GaWx0ZXJzOiBBcnJheTxJbnRlcm5hbENvbnRyYWN0LkZpbHRlcj4pOiBBcnJheTxDb250cmFjdC5GaWx0ZXI+IHtcbiAgICBjb25zdCBmaWx0ZXJzOiBBcnJheTxDb250cmFjdC5GaWx0ZXI+ID0gW107XG4gICAgZG9tYWluRmlsdGVycy5mb3JFYWNoKChkb21haW5GaWx0ZXIpID0+IHtcbiAgICAgIHN3aXRjaCAoZG9tYWluRmlsdGVyLmZpbHRlclR5cGUpIHtcbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLkNhdGVnb3JpY2FsOiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gZG9tYWluRmlsdGVyIGFzIEludGVybmFsQ29udHJhY3QuQ2F0ZWdvcmljYWxGaWx0ZXI7XG4gICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuY29udmVydENhdGVnb3JpY2FsRmlsdGVyKGZpbHRlcikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgQ2F0ZWdvcmljYWwgRmlsdGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLkhpZXJhcmNoaWNhbDoge1xuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGRvbWFpbkZpbHRlciBhcyBJbnRlcm5hbENvbnRyYWN0LkhpZXJhcmNoaWNhbEZpbHRlcjtcbiAgICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5jb252ZXJ0SGllcmFyY2hpY2FsRmlsdGVyKGZpbHRlcikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSGllcmFyY2hpY2FsIEZpbHRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5SYW5nZToge1xuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGRvbWFpbkZpbHRlciBhcyBJbnRlcm5hbENvbnRyYWN0LlJhbmdlRmlsdGVyO1xuICAgICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLmNvbnZlcnRSYW5nZUZpbHRlcihmaWx0ZXIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFJhbmdlIEZpbHRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgRmlsdGVyVHlwZS5SZWxhdGl2ZURhdGU6IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBkb21haW5GaWx0ZXIgYXMgSW50ZXJuYWxDb250cmFjdC5SZWxhdGl2ZURhdGVGaWx0ZXI7XG4gICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuY29udmVydFJlbGF0aXZlRGF0ZUZpbHRlcihmaWx0ZXIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFJlbGF0aXZlIERhdGUgRmlsdGVyJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRDYXRlZ29yaWNhbEZpbHRlcihkb21haW5GaWx0ZXI6IEludGVybmFsQ29udHJhY3QuQ2F0ZWdvcmljYWxGaWx0ZXIpOiBDb250cmFjdC5DYXRlZ29yaWNhbEZpbHRlciB7XG4gICAgY29uc3QgYXBwbGllZFZhbHVlczogQXJyYXk8Q29udHJhY3QuRGF0YVZhbHVlPiA9IGRvbWFpbkZpbHRlci52YWx1ZXMubWFwKChkdikgPT4ge1xuICAgICAgcmV0dXJuIERhdGFWYWx1ZUZhY3RvcnkuTWFrZUZpbHRlckRhdGFWYWx1ZShkdik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IENhdGVnb3JpY2FsRmlsdGVyKFxuICAgICAgZG9tYWluRmlsdGVyLnZpc3VhbElkLndvcmtzaGVldCxcbiAgICAgIGRvbWFpbkZpbHRlci5maWVsZENhcHRpb24sXG4gICAgICBkb21haW5GaWx0ZXIuZmllbGROYW1lLFxuICAgICAgRmlsdGVyVHlwZS5DYXRlZ29yaWNhbCxcbiAgICAgIHRoaXMuX3JlZ2lzdHJ5SWQsXG4gICAgICBhcHBsaWVkVmFsdWVzLFxuICAgICAgZG9tYWluRmlsdGVyLmlzRXhjbHVkZSxcbiAgICAgIGRvbWFpbkZpbHRlci5pc0FsbFNlbGVjdGVkLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRIaWVyYXJjaGljYWxGaWx0ZXIoZG9tYWluRmlsdGVyOiBJbnRlcm5hbENvbnRyYWN0LkhpZXJhcmNoaWNhbEZpbHRlcik6IENvbnRyYWN0LkhpZXJhcmNoaWNhbEZpbHRlciB7XG4gICAgY29uc3QgYXBwbGllZFZhbHVlczogQXJyYXk8Q29udHJhY3QuSGllcmFyY2hpY2FsRmlsdGVyRGF0YVZhbHVlPiA9IGRvbWFpbkZpbHRlci52YWx1ZXMubWFwKChoaWVyYXJjaGljYWxEYXRhVmFsdWUpID0+IHtcbiAgICAgIHJldHVybiBuZXcgSGllcmFyY2hpY2FsRGF0YVZhbHVlKFxuICAgICAgICBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VGaWx0ZXJEYXRhVmFsdWUoaGllcmFyY2hpY2FsRGF0YVZhbHVlLnZhbHVlKSxcbiAgICAgICAgaGllcmFyY2hpY2FsRGF0YVZhbHVlLmhpZXJhcmNoaWNhbFBhdGgsXG4gICAgICAgIGhpZXJhcmNoaWNhbERhdGFWYWx1ZS5sZXZlbCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBsZXZlbERldGFpbHM6IEFycmF5PENvbnRyYWN0LkhpZXJhcmNoaWNhbExldmVsRGV0YWlsPiA9IGRvbWFpbkZpbHRlci5sZXZlbEluZm8ubWFwKChhTGV2ZWwpID0+IHtcbiAgICAgIHJldHVybiBuZXcgSGllcmFyY2hpY2FsTGV2ZWxEZXRhaWwoXG4gICAgICAgIGFMZXZlbC5uYW1lLFxuICAgICAgICBJbnRlcm5hbEVudW1Db252ZXJ0ZXIuaGllcmFyY2hpY2FsTGV2ZWxTZWxlY3Rpb25TdGF0ZS5jb252ZXJ0KGFMZXZlbC5sZXZlbFNlbGVjdGlvblN0YXRlKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IEhpZXJhcmNoaWNhbEZpbHRlcihcbiAgICAgIGRvbWFpbkZpbHRlci52aXN1YWxJZC53b3Jrc2hlZXQsXG4gICAgICBkb21haW5GaWx0ZXIuZmllbGRDYXB0aW9uLFxuICAgICAgZG9tYWluRmlsdGVyLmZpZWxkTmFtZSxcbiAgICAgIEZpbHRlclR5cGUuSGllcmFyY2hpY2FsLFxuICAgICAgdGhpcy5fcmVnaXN0cnlJZCxcbiAgICAgIGRvbWFpbkZpbHRlci5kaW1lbnNpb25OYW1lLFxuICAgICAgZG9tYWluRmlsdGVyLmhpZXJhcmNoeUNhcHRpb24sXG4gICAgICBkb21haW5GaWx0ZXIubGV2ZWxzLFxuICAgICAgbGV2ZWxEZXRhaWxzLFxuICAgICAgYXBwbGllZFZhbHVlcyxcbiAgICAgIGRvbWFpbkZpbHRlci5pc0FsbFNlbGVjdGVkLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRSYW5nZUZpbHRlcihkb21haW5GaWx0ZXI6IEludGVybmFsQ29udHJhY3QuUmFuZ2VGaWx0ZXIpOiBDb250cmFjdC5SYW5nZUZpbHRlciB7XG4gICAgY29uc3QgbWluVmFsdWU6IERhdGFWYWx1ZSA9IERhdGFWYWx1ZUZhY3RvcnkuTWFrZUZpbHRlckRhdGFWYWx1ZShkb21haW5GaWx0ZXIubWluKTtcbiAgICBjb25zdCBtYXhWYWx1ZTogRGF0YVZhbHVlID0gRGF0YVZhbHVlRmFjdG9yeS5NYWtlRmlsdGVyRGF0YVZhbHVlKGRvbWFpbkZpbHRlci5tYXgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VGaWx0ZXIoXG4gICAgICBkb21haW5GaWx0ZXIudmlzdWFsSWQud29ya3NoZWV0LFxuICAgICAgZG9tYWluRmlsdGVyLmZpZWxkQ2FwdGlvbixcbiAgICAgIGRvbWFpbkZpbHRlci5maWVsZE5hbWUsXG4gICAgICBGaWx0ZXJUeXBlLlJhbmdlLFxuICAgICAgdGhpcy5fcmVnaXN0cnlJZCxcbiAgICAgIG1pblZhbHVlLFxuICAgICAgbWF4VmFsdWUsXG4gICAgICBkb21haW5GaWx0ZXIuaW5jbHVkZU51bGxWYWx1ZXMsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFJlbGF0aXZlRGF0ZUZpbHRlcihkb21haW5GaWx0ZXI6IEludGVybmFsQ29udHJhY3QuUmVsYXRpdmVEYXRlRmlsdGVyKTogQ29udHJhY3QuUmVsYXRpdmVEYXRlRmlsdGVyIHtcbiAgICBjb25zdCBhbmNob3JEYXRlVmFsdWU6IERhdGFWYWx1ZSA9IERhdGFWYWx1ZUZhY3RvcnkuTWFrZUZpbHRlckRhdGFWYWx1ZShkb21haW5GaWx0ZXIuYW5jaG9yRGF0ZSk7XG4gICAgcmV0dXJuIG5ldyBSZWxhdGl2ZURhdGVGaWx0ZXIoXG4gICAgICBkb21haW5GaWx0ZXIudmlzdWFsSWQud29ya3NoZWV0LFxuICAgICAgZG9tYWluRmlsdGVyLmZpZWxkQ2FwdGlvbixcbiAgICAgIGRvbWFpbkZpbHRlci5maWVsZE5hbWUsXG4gICAgICBFeHRlcm5hbEZpbHRlclR5cGUuUmVsYXRpdmVEYXRlLFxuICAgICAgdGhpcy5fcmVnaXN0cnlJZCxcbiAgICAgIGFuY2hvckRhdGVWYWx1ZSxcbiAgICAgIEludGVybmFsRW51bUNvbnZlcnRlci5kYXRlU3RlcFBlcmlvZC5jb252ZXJ0KGRvbWFpbkZpbHRlci5wZXJpb2RUeXBlKSxcbiAgICAgIEludGVybmFsRW51bUNvbnZlcnRlci5kYXRlUmFuZ2VUeXBlLmNvbnZlcnQoZG9tYWluRmlsdGVyLnJhbmdlVHlwZSksXG4gICAgICBkb21haW5GaWx0ZXIucmFuZ2VOLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRDYXRlZ29yaWNhbERvbWFpbihkb21haW46IEludGVybmFsQ29udHJhY3QuQ2F0ZWdvcmljYWxEb21haW4sIGRvbWFpblR5cGU6IEZpbHRlckRvbWFpblR5cGUpOiBDb250cmFjdC5DYXRlZ29yaWNhbERvbWFpbiB7XG4gICAgY29uc3QgdmFsdWVzOiBBcnJheTxEYXRhVmFsdWU+ID0gZG9tYWluLnZhbHVlcy5tYXAoKGRvbWFpbkR2KSA9PiB7XG4gICAgICByZXR1cm4gRGF0YVZhbHVlRmFjdG9yeS5NYWtlRmlsdGVyRGF0YVZhbHVlKGRvbWFpbkR2KTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IENhdGVnb3JpY2FsRG9tYWluKHZhbHVlcywgZG9tYWluVHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRSYW5nZURvbWFpbihkb21haW46IEludGVybmFsQ29udHJhY3QuUmFuZ2VEb21haW4sIGRvbWFpblR5cGU6IEZpbHRlckRvbWFpblR5cGUpOiBDb250cmFjdC5SYW5nZURvbWFpbiB7XG4gICAgY29uc3QgbWluOiBEYXRhVmFsdWUgPSBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VGaWx0ZXJEYXRhVmFsdWUoZG9tYWluLm1pbik7XG4gICAgY29uc3QgbWF4OiBEYXRhVmFsdWUgPSBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VGaWx0ZXJEYXRhVmFsdWUoZG9tYWluLm1heCk7XG4gICAgcmV0dXJuIG5ldyBSYW5nZURvbWFpbihtaW4sIG1heCwgZG9tYWluVHlwZSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRBbmNob3JEYXRlKGFuY2hvckRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIC8vIENvbnZlcnRzIGEgRGF0ZSBvYmplY3QgaW50byBhIHN0cmluZyBmb3JtYXQgdGhhdCB0aGUgc2VydmVyIGV4cGVjdHMgZm9yIGRhdGUvdGltZSB2YWx1ZXMuXG4gICAgLy8gSWYgYW5jaG9yRGF0ZSBkb2Vzbid0IHJlcHJlc2VudCBhIHZhbGlkIERhdGUgb2JqZWN0LCBhbnkgb2YgdGhlc2Ugd291bGQgYmUgTmFOLlxuICAgIGNvbnN0IHllYXIgPSBhbmNob3JEYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgY29uc3QgbW9udGggPSBhbmNob3JEYXRlLmdldFVUQ01vbnRoKCkgKyAxO1xuICAgIGNvbnN0IGRheSA9IGFuY2hvckRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgIGNvbnN0IGhoID0gYW5jaG9yRGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGNvbnN0IG1tID0gYW5jaG9yRGF0ZS5nZXRVVENNaW51dGVzKCk7XG4gICAgY29uc3Qgc2VjID0gYW5jaG9yRGF0ZS5nZXRVVENTZWNvbmRzKCk7XG5cbiAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpIHx8IGlzTmFOKGRheSkgfHwgaXNOYU4oaGgpIHx8IGlzTmFOKG1tKSB8fCBpc05hTihzZWMpKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVtYmVkZGluZ0Vycm9yQ29kZXMuSW52YWxpZERhdGVQYXJhbWV0ZXIsICdJbnZhbGlkIGRhdGUgcGFyYW1ldGVyOiBhbmNob3JEYXRlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9ICR7aGh9OiR7bW19OiR7c2VjfWA7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYXBpRmlsdGVySGFuZGxlckNoZWNrRm9yQ29tbWFuZEVycm9yKHNlcnZlclBtOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgaWYgKCFzZXJ2ZXJQbVtJbnRlcm5hbENvbnRyYWN0LlBhcmFtZXRlcklkLlBhcmFtZXRlckVycm9yXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2VydmVyUG1bSW50ZXJuYWxDb250cmFjdC5QYXJhbWV0ZXJJZC5JbnZhbGlkRmllbGRDYXB0aW9uXSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludmFsaWRGaWx0ZXJGaWVsZE5hbWUsIHNlcnZlclBtW0ludGVybmFsQ29udHJhY3QuUGFyYW1ldGVySWQuSW52YWxpZEZpZWxkQ2FwdGlvbl0pO1xuICAgIH1cbiAgICBpZiAoc2VydmVyUG1bSW50ZXJuYWxDb250cmFjdC5QYXJhbWV0ZXJJZC5JbnZhbGlkVmFsdWVzXSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludmFsaWRGaWx0ZXJGaWVsZFZhbHVlLCBzZXJ2ZXJQbVtJbnRlcm5hbENvbnRyYWN0LlBhcmFtZXRlcklkLkludmFsaWRWYWx1ZXNdKTtcbiAgICB9XG4gICAgaWYgKHNlcnZlclBtW0ludGVybmFsQ29udHJhY3QuUGFyYW1ldGVySWQuSW52YWxpZEFnZ0ZpZWxkTmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkQWdncmVnYXRpb25GaWVsZE5hbWUsIHNlcnZlclBtW0ludGVybmFsQ29udHJhY3QuUGFyYW1ldGVySWQuSW52YWxpZEFnZ0ZpZWxkTmFtZV0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuU2VydmVyRXJyb3IsICdTZXJ2ZXIgRXJyb3InKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEVycm9yQ29kZXMsIEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7XG4gIEFwaVNob3dEYXRhVGFibGVGb3JtYXQsXG4gIERhdGFUYWJsZSBhcyBEYXRhVGFibGVJbnRlcm5hbENvbnRyYWN0LFxuICBEYXRhVGFibGVSZWFkZXIgYXMgRGF0YVRhYmxlUmVhZGVySW50ZXJuYWxDb250cmFjdCxcbiAgRXhlY3V0ZVBhcmFtZXRlcnMsXG4gIEhpZ2hsaWdodGVkTWFya3NUYWJsZSxcbiAgUGFyYW1ldGVySWQsXG4gIFNlbGVjdGVkTWFya3NUYWJsZSxcbiAgVW5kZXJseWluZ0RhdGFUYWJsZSxcbiAgVmVyYklkLFxuICBWaXN1YWxJZCxcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnLi4vLi4vLi4vQXBpU2hhcmVkJztcbmltcG9ydCB7IEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncyB9IGZyb20gJy4uLy4uL0VudW1NYXBwaW5ncy9FeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3MnO1xuaW1wb3J0IHsgQ29sdW1uLCBEYXRhVGFibGUsIE1hcmtJbmZvIH0gZnJvbSAnLi4vLi4vTW9kZWxzL0dldERhdGFNb2RlbHMnO1xuaW1wb3J0IHsgRGF0YVRhYmxlUmVhZGVyIH0gZnJvbSAnLi4vLi4vTW9kZWxzL0dldERhdGFUYWJsZVJlYWRlck1vZGVscyc7XG5pbXBvcnQgeyBEYXRhVmFsdWVGYWN0b3J5IH0gZnJvbSAnLi4vLi4vVXRpbHMvRGF0YVZhbHVlRmFjdG9yeSc7XG5pbXBvcnQgeyBHZXREYXRhU2VydmljZSwgR2V0RGF0YVR5cGUgfSBmcm9tICcuLi9HZXREYXRhU2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgU2VydmljZUltcGxCYXNlIH0gZnJvbSAnLi9TZXJ2aWNlSW1wbEJhc2UnO1xuXG5leHBvcnQgY2xhc3MgR2V0RGF0YVNlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgR2V0RGF0YVNlcnZpY2Uge1xuICAvLyBUaGUgZXh0ZW5zaW9uL2VtYmVkZGluZyBpbnN0YW5jZSB1c2VzIHRoZSBzYW1lIGNhY2hlIGZvciBhbGwgRGF0YVRhYmxlUmVhZGVycy5cbiAgcHJpdmF0ZSB2aWV3RGF0YVRhYmxlQ2FjaGVJZDogc3RyaW5nID0gdXVpZHY0KCk7XG5cbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTZXJ2aWNlTmFtZXMuR2V0RGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXhSb3dMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiAxMDAwMDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWaWV3RGF0YVRhYmxlQ2FjaGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZpZXdEYXRhVGFibGVDYWNoZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMaW1pdGVkTWF4Um93cyhyZXF1ZXN0ZWRSb3dzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHJvd0NvdW50TGltaXQgPSB0aGlzLmdldE1heFJvd0xpbWl0KCkgKyAxO1xuICAgIHJldHVybiByZXF1ZXN0ZWRSb3dzID4gMCAmJiByZXF1ZXN0ZWRSb3dzIDwgcm93Q291bnRMaW1pdCA/IHJlcXVlc3RlZFJvd3MgOiByb3dDb3VudExpbWl0O1xuICB9XG5cbiAgcHVibGljIGdldFVuZGVybHlpbmdEYXRhQXN5bmMoXG4gICAgdmlzdWFsSWQ6IFZpc3VhbElkLFxuICAgIGdldFR5cGU6IEdldERhdGFUeXBlLFxuICAgIGlnbm9yZUFsaWFzZXM6IGJvb2xlYW4sXG4gICAgaWdub3JlU2VsZWN0aW9uOiBib29sZWFuLFxuICAgIGluY2x1ZGVBbGxDb2x1bW5zOiBib29sZWFuLFxuICAgIGNvbHVtbnNUb0luY2x1ZGVCeUlkOiBBcnJheTxzdHJpbmc+LFxuICAgIG1heFJvd3M6IG51bWJlcixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8RGF0YVRhYmxlPiB7XG4gICAgLy8gQ3JlYXRlIGFsbCBvZiBvdXIgcGFyYW1ldGVyc1xuICAgIGNvbnN0IHN1bW1hcnlEYXRhID0gZ2V0VHlwZSA9PT0gR2V0RGF0YVR5cGUuU3VtbWFyeTtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBzdW1tYXJ5RGF0YSA/ICdnZXRTdW1tYXJ5RGF0YUFzeW5jJyA6ICdnZXRVbmRlcmx5aW5nRGF0YUFzeW5jJztcbiAgICBjb25zdCB2ZXJiID0gc3VtbWFyeURhdGEgPyBWZXJiSWQuR2V0RGF0YVN1bW1hcnlEYXRhIDogVmVyYklkLkdldFVuZGVybHlpbmdEYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RNYXhSb3dzID0gdmVyYiA9PT0gVmVyYklkLkdldFVuZGVybHlpbmdEYXRhID8gdGhpcy5nZXRMaW1pdGVkTWF4Um93cyhtYXhSb3dzKSA6IG1heFJvd3M7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogZnVuY3Rpb25OYW1lLFxuICAgIH07XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5WaXN1YWxJZF0gPSB2aXN1YWxJZDtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLklnbm9yZUFsaWFzZXNdID0gaWdub3JlQWxpYXNlcztcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLklnbm9yZVNlbGVjdGlvbl0gPSBpZ25vcmVTZWxlY3Rpb247XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5JbmNsdWRlQWxsQ29sdW1uc10gPSBpbmNsdWRlQWxsQ29sdW1ucztcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkNvbHVtbnNUb0luY2x1ZGVCeUlkXSA9IHRoaXMudmVyaWZ5SW5jbHVkZUNvbHVtbkFycmF5KGNvbHVtbnNUb0luY2x1ZGVCeUlkKTtcbiAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLk1heFJvd3NdID0gcmVxdWVzdE1heFJvd3M7XG4gICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5TaG93RGF0YVRhYmxlRm9ybWF0XSA9IEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncy5zaG93RGF0YVRhYmxlRm9ybWF0VHlwZS5jb252ZXJ0KGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUodmVyYiwgcGFyYW1ldGVycykudGhlbjxEYXRhVGFibGU+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2UucmVzdWx0IGFzIFVuZGVybHlpbmdEYXRhVGFibGU7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVzdWx0c1RhYmxlKHJlc3BvbnNlRGF0YS5kYXRhLCByZXNwb25zZURhdGEuaXNTdW1tYXJ5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdW1tYXJ5RGF0YVJlYWRlckFzeW5jKFxuICAgIHZpc3VhbElkOiBWaXN1YWxJZCxcbiAgICBwYWdlUm93Q291bnQ6IG51bWJlcixcbiAgICBpZ25vcmVBbGlhc2VzOiBib29sZWFuLFxuICAgIGlnbm9yZVNlbGVjdGlvbjogYm9vbGVhbixcbiAgICBpbmNsdWRlQWxsQ29sdW1uczogYm9vbGVhbixcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogQXJyYXk8c3RyaW5nPixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8RGF0YVRhYmxlUmVhZGVyPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldFN1bW1hcnlEYXRhUmVhZGVyQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpZXdEYXRhVGFibGVDYWNoZUlkXTogdGhpcy5nZXRWaWV3RGF0YVRhYmxlQ2FjaGVJZCgpLFxuICAgICAgW1BhcmFtZXRlcklkLlZpc3VhbElkXTogdmlzdWFsSWQsXG4gICAgICBbUGFyYW1ldGVySWQuUGFnZVJvd0NvdW50XTogcGFnZVJvd0NvdW50LFxuICAgICAgW1BhcmFtZXRlcklkLklnbm9yZUFsaWFzZXNdOiBpZ25vcmVBbGlhc2VzLFxuICAgICAgW1BhcmFtZXRlcklkLklnbm9yZVNlbGVjdGlvbl06IGlnbm9yZVNlbGVjdGlvbixcbiAgICAgIFtQYXJhbWV0ZXJJZC5JbmNsdWRlQWxsQ29sdW1uc106IGluY2x1ZGVBbGxDb2x1bW5zLFxuICAgICAgW1BhcmFtZXRlcklkLkNvbHVtbnNUb0luY2x1ZGVCeUlkXTogdGhpcy52ZXJpZnlJbmNsdWRlQ29sdW1uQXJyYXkoY29sdW1uc1RvSW5jbHVkZUJ5SWQpLFxuICAgICAgW1BhcmFtZXRlcklkLlNob3dEYXRhVGFibGVGb3JtYXRdOiBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3Muc2hvd0RhdGFUYWJsZUZvcm1hdFR5cGUuY29udmVydChpbmNsdWRlRGF0YVZhbHVlc09wdGlvbiksXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldERhdGFTdW1tYXJ5RGF0YVJlYWRlciwgcGFyYW1ldGVycykudGhlbjxEYXRhVGFibGVSZWFkZXI+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2UucmVzdWx0IGFzIERhdGFUYWJsZVJlYWRlckludGVybmFsQ29udHJhY3Q7XG5cbiAgICAgIHJldHVybiBuZXcgRGF0YVRhYmxlUmVhZGVyKHJlc3BvbnNlRGF0YS5pZCwgcmVzcG9uc2VEYXRhLnRvdGFsUm93Q291bnQsIHBhZ2VSb3dDb3VudCwgdGhpcy5fcmVnaXN0cnlJZCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3VtbWFyeUNvbHVtbnNJbmZvQXN5bmModmlzdWFsSWQ6IFZpc3VhbElkKTogUHJvbWlzZTxBcnJheTxDb250cmFjdC5Db2x1bW4+PiB7XG4gICAgLy8gQ3JlYXRlIGFsbCB0aGUgcGFyYW1ldGVycyBmb3IgR2V0RGF0YVR5cGUgb2YgU3VtbWFyeSB3aXRoIDEgcm93LCBhbmQgb25seSBuYXRpdmUgdmFsdWVzXG4gICAgLy8gVGhlbiByZXR1cm4ganVzdCB0aGUgY29sdW1uc1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuR2V0RGF0YVN1bW1hcnlEYXRhO1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRTdW1tYXJ5Q29sdW1uc0luZm9Bc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVmlzdWFsSWRdOiB2aXN1YWxJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5JZ25vcmVBbGlhc2VzXTogdHJ1ZSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5JZ25vcmVTZWxlY3Rpb25dOiB0cnVlLFxuICAgICAgW1BhcmFtZXRlcklkLkluY2x1ZGVBbGxDb2x1bW5zXTogdHJ1ZSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5NYXhSb3dzXTogMSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TaG93RGF0YVRhYmxlRm9ybWF0XTogQXBpU2hvd0RhdGFUYWJsZUZvcm1hdC5OYXRpdmVWYWx1ZXNPbmx5LFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48QXJyYXk8Q29udHJhY3QuQ29sdW1uPj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCB1bmRlcmx5aW5nRGF0YVRhYmxlID0gcmVzcG9uc2UucmVzdWx0IGFzIFVuZGVybHlpbmdEYXRhVGFibGU7XG4gICAgICBjb25zdCBkYXRhVGFibGUgPSB1bmRlcmx5aW5nRGF0YVRhYmxlLmRhdGE7XG4gICAgICBjb25zdCBjb2x1bW5zID0gZGF0YVRhYmxlLmhlYWRlcnMubWFwKChoKSA9PiBuZXcgQ29sdW1uKGguZmllbGRDYXB0aW9uLCBoLmZpZWxkTmFtZSwgaC5kYXRhVHlwZSwgaC5pc1JlZmVyZW5jZWQsIGguaW5kZXgpKTtcbiAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkTWFya3NBc3luYyh2aXN1YWxJZDogVmlzdWFsSWQpOiBQcm9taXNlPENvbnRyYWN0Lk1hcmtzQ29sbGVjdGlvbj4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRTZWxlY3RlZE1hcmtzQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpc3VhbElkXTogdmlzdWFsSWQsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5HZXRTZWxlY3RlZE1hcmtzLCBwYXJhbWV0ZXJzKS50aGVuPENvbnRyYWN0Lk1hcmtzQ29sbGVjdGlvbj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSByZXNwb25zZS5yZXN1bHQgYXMgU2VsZWN0ZWRNYXJrc1RhYmxlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLmRhdGEubWFwKCh0YWJsZSkgPT4gdGhpcy5wcm9jZXNzUmVzdWx0c1RhYmxlKHRhYmxlLCB0cnVlKSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEhpZ2hsaWdodGVkTWFya3NBc3luYyh2aXN1YWxJZDogVmlzdWFsSWQpOiBQcm9taXNlPENvbnRyYWN0Lk1hcmtzQ29sbGVjdGlvbj4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRIaWdobGlnaHRlZE1hcmtzQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpc3VhbElkXTogdmlzdWFsSWQsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5HZXRIaWdobGlnaHRlZE1hcmtzLCBwYXJhbWV0ZXJzKS50aGVuPENvbnRyYWN0Lk1hcmtzQ29sbGVjdGlvbj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSByZXNwb25zZS5yZXN1bHQgYXMgSGlnaGxpZ2h0ZWRNYXJrc1RhYmxlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLmRhdGEubWFwKCh0YWJsZSkgPT4gdGhpcy5wcm9jZXNzUmVzdWx0c1RhYmxlKHRhYmxlLCB0cnVlKSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldERhdGFTb3VyY2VEYXRhQXN5bmMoXG4gICAgZGF0YVNvdXJjZUlkOiBzdHJpbmcsXG4gICAgaWdub3JlQWxpYXNlczogYm9vbGVhbixcbiAgICBtYXhSb3dzOiBudW1iZXIsXG4gICAgY29sdW1uc1RvSW5jbHVkZTogQXJyYXk8c3RyaW5nPixcbiAgICBjb2x1bW5zVG9JbmNsdWRlQnlJZDogQXJyYXk8c3RyaW5nPixcbiAgICBpbmNsdWRlRGF0YVZhbHVlc09wdGlvbjogSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24sXG4gICk6IFByb21pc2U8RGF0YVRhYmxlPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldERhdGFTb3VyY2VEYXRhQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkRhdGFTb3VyY2VJZF06IGRhdGFTb3VyY2VJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5JZ25vcmVBbGlhc2VzXTogaWdub3JlQWxpYXNlcyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5NYXhSb3dzXTogdGhpcy5nZXRMaW1pdGVkTWF4Um93cyhtYXhSb3dzKSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Db2x1bW5zVG9JbmNsdWRlXTogdGhpcy52ZXJpZnlJbmNsdWRlQ29sdW1uQXJyYXkoY29sdW1uc1RvSW5jbHVkZSksXG4gICAgICBbUGFyYW1ldGVySWQuQ29sdW1uc1RvSW5jbHVkZUJ5SWRdOiB0aGlzLnZlcmlmeUluY2x1ZGVDb2x1bW5BcnJheShjb2x1bW5zVG9JbmNsdWRlQnlJZCksXG4gICAgICBbUGFyYW1ldGVySWQuU2hvd0RhdGFUYWJsZUZvcm1hdF06IEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncy5zaG93RGF0YVRhYmxlRm9ybWF0VHlwZS5jb252ZXJ0KGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0RGF0YVNvdXJjZURhdGEsIHBhcmFtZXRlcnMpLnRoZW48RGF0YVRhYmxlPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlLnJlc3VsdCBhcyBVbmRlcmx5aW5nRGF0YVRhYmxlO1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3VsdHNUYWJsZShyZXNwb25zZURhdGEuZGF0YSwgZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldExvZ2ljYWxUYWJsZURhdGFBc3luYyhcbiAgICBkYXRhc291cmNlSWQ6IHN0cmluZyxcbiAgICBsb2dpY2FsVGFibGVJZDogc3RyaW5nLFxuICAgIGlnbm9yZUFsaWFzZXM6IGJvb2xlYW4sXG4gICAgbWF4Um93czogbnVtYmVyLFxuICAgIGNvbHVtbnNUb0luY2x1ZGU6IEFycmF5PHN0cmluZz4sXG4gICAgY29sdW1uc1RvSW5jbHVkZUJ5SWQ6IEFycmF5PHN0cmluZz4sXG4gICAgaW5jbHVkZURhdGFWYWx1ZXNPcHRpb246IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLFxuICApOiBQcm9taXNlPERhdGFUYWJsZT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRMb2dpY2FsVGFibGVEYXRhQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkNvbHVtbnNUb0luY2x1ZGVdOiBjb2x1bW5zVG9JbmNsdWRlLFxuICAgICAgW1BhcmFtZXRlcklkLkNvbHVtbnNUb0luY2x1ZGVCeUlkXTogdGhpcy52ZXJpZnlJbmNsdWRlQ29sdW1uQXJyYXkoY29sdW1uc1RvSW5jbHVkZUJ5SWQpLFxuICAgICAgW1BhcmFtZXRlcklkLkRhdGFTb3VyY2VJZF06IGRhdGFzb3VyY2VJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5JZ25vcmVBbGlhc2VzXTogaWdub3JlQWxpYXNlcyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Mb2dpY2FsVGFibGVJZF06IGxvZ2ljYWxUYWJsZUlkLFxuICAgICAgW1BhcmFtZXRlcklkLk1heFJvd3NdOiB0aGlzLmdldExpbWl0ZWRNYXhSb3dzKG1heFJvd3MpLFxuICAgICAgW1BhcmFtZXRlcklkLlNob3dEYXRhVGFibGVGb3JtYXRdOiBFeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3Muc2hvd0RhdGFUYWJsZUZvcm1hdFR5cGUuY29udmVydChpbmNsdWRlRGF0YVZhbHVlc09wdGlvbiksXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldExvZ2ljYWxUYWJsZURhdGEsIHBhcmFtZXRlcnMpLnRoZW48RGF0YVRhYmxlPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlLnJlc3VsdCBhcyBVbmRlcmx5aW5nRGF0YVRhYmxlO1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3VsdHNUYWJsZShyZXNwb25zZURhdGEuZGF0YSwgZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldExvZ2ljYWxUYWJsZURhdGFSZWFkZXJBc3luYyhcbiAgICBkYXRhc291cmNlSWQ6IHN0cmluZyxcbiAgICBsb2dpY2FsVGFibGVJZDogc3RyaW5nLFxuICAgIHBhZ2VSb3dDb3VudDogbnVtYmVyLFxuICAgIGlnbm9yZUFsaWFzZXM6IGJvb2xlYW4sXG4gICAgY29sdW1uc1RvSW5jbHVkZUJ5SWQ6IEFycmF5PHN0cmluZz4sXG4gICAgaW5jbHVkZURhdGFWYWx1ZXNPcHRpb246IEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLFxuICApOiBQcm9taXNlPERhdGFUYWJsZVJlYWRlcj4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRMb2dpY2FsVGFibGVEYXRhUmVhZGVyQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpZXdEYXRhVGFibGVDYWNoZUlkXTogdGhpcy5nZXRWaWV3RGF0YVRhYmxlQ2FjaGVJZCgpLFxuICAgICAgW1BhcmFtZXRlcklkLkRhdGFTb3VyY2VJZF06IGRhdGFzb3VyY2VJZCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Mb2dpY2FsVGFibGVJZF06IGxvZ2ljYWxUYWJsZUlkLFxuICAgICAgW1BhcmFtZXRlcklkLlBhZ2VSb3dDb3VudF06IHBhZ2VSb3dDb3VudCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5JZ25vcmVBbGlhc2VzXTogaWdub3JlQWxpYXNlcyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5Db2x1bW5zVG9JbmNsdWRlQnlJZF06IHRoaXMudmVyaWZ5SW5jbHVkZUNvbHVtbkFycmF5KGNvbHVtbnNUb0luY2x1ZGVCeUlkKSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5TaG93RGF0YVRhYmxlRm9ybWF0XTogRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzLnNob3dEYXRhVGFibGVGb3JtYXRUeXBlLmNvbnZlcnQoaW5jbHVkZURhdGFWYWx1ZXNPcHRpb24pLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5HZXRMb2dpY2FsVGFibGVEYXRhUmVhZGVyLCBwYXJhbWV0ZXJzKS50aGVuPERhdGFUYWJsZVJlYWRlcj4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSByZXNwb25zZS5yZXN1bHQgYXMgRGF0YVRhYmxlUmVhZGVySW50ZXJuYWxDb250cmFjdDtcblxuICAgICAgcmV0dXJuIG5ldyBEYXRhVGFibGVSZWFkZXIocmVzcG9uc2VEYXRhLmlkLCByZXNwb25zZURhdGEudG90YWxSb3dDb3VudCwgcGFnZVJvd0NvdW50LCB0aGlzLl9yZWdpc3RyeUlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVbmRlcmx5aW5nVGFibGVEYXRhQXN5bmMoXG4gICAgdmlzdWFsSWQ6IFZpc3VhbElkLFxuICAgIGxvZ2ljYWxUYWJsZUlkOiBzdHJpbmcsXG4gICAgaWdub3JlQWxpYXNlczogYm9vbGVhbixcbiAgICBpZ25vcmVTZWxlY3Rpb246IGJvb2xlYW4sXG4gICAgaW5jbHVkZUFsbENvbHVtbnM6IGJvb2xlYW4sXG4gICAgY29sdW1uc1RvSW5jbHVkZUJ5SWQ6IEFycmF5PHN0cmluZz4sXG4gICAgbWF4Um93czogbnVtYmVyLFxuICAgIGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uOiBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbixcbiAgKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0VW5kZXJseWluZ1RhYmxlRGF0YUFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaXN1YWxJZF06IHZpc3VhbElkLFxuICAgICAgW1BhcmFtZXRlcklkLkxvZ2ljYWxUYWJsZUlkXTogbG9naWNhbFRhYmxlSWQsXG4gICAgICBbUGFyYW1ldGVySWQuSWdub3JlQWxpYXNlc106IGlnbm9yZUFsaWFzZXMsXG4gICAgICBbUGFyYW1ldGVySWQuSWdub3JlU2VsZWN0aW9uXTogaWdub3JlU2VsZWN0aW9uLFxuICAgICAgW1BhcmFtZXRlcklkLkluY2x1ZGVBbGxDb2x1bW5zXTogaW5jbHVkZUFsbENvbHVtbnMsXG4gICAgICBbUGFyYW1ldGVySWQuQ29sdW1uc1RvSW5jbHVkZUJ5SWRdOiB0aGlzLnZlcmlmeUluY2x1ZGVDb2x1bW5BcnJheShjb2x1bW5zVG9JbmNsdWRlQnlJZCksXG4gICAgICBbUGFyYW1ldGVySWQuTWF4Um93c106IHRoaXMuZ2V0TGltaXRlZE1heFJvd3MobWF4Um93cyksXG4gICAgICBbUGFyYW1ldGVySWQuU2hvd0RhdGFUYWJsZUZvcm1hdF06IEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncy5zaG93RGF0YVRhYmxlRm9ybWF0VHlwZS5jb252ZXJ0KGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0VW5kZXJseWluZ1RhYmxlRGF0YSwgcGFyYW1ldGVycykudGhlbjxEYXRhVGFibGU+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2UucmVzdWx0IGFzIFVuZGVybHlpbmdEYXRhVGFibGU7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVzdWx0c1RhYmxlKHJlc3BvbnNlRGF0YS5kYXRhLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VW5kZXJseWluZ1RhYmxlRGF0YVJlYWRlckFzeW5jKFxuICAgIHZpc3VhbElkOiBWaXN1YWxJZCxcbiAgICBsb2dpY2FsVGFibGVJZDogc3RyaW5nLFxuICAgIHBhZ2VSb3dDb3VudDogbnVtYmVyLFxuICAgIGlnbm9yZUFsaWFzZXM6IGJvb2xlYW4sXG4gICAgaWdub3JlU2VsZWN0aW9uOiBib29sZWFuLFxuICAgIGluY2x1ZGVBbGxDb2x1bW5zOiBib29sZWFuLFxuICAgIGNvbHVtbnNUb0luY2x1ZGVCeUlkOiBBcnJheTxzdHJpbmc+LFxuICAgIGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uOiBJbmNsdWRlRGF0YVZhbHVlc09wdGlvbixcbiAgKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGVSZWFkZXI+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0VW5kZXJseWluZ1RhYmxlRGF0YVJlYWRlckFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaWV3RGF0YVRhYmxlQ2FjaGVJZF06IHRoaXMuZ2V0Vmlld0RhdGFUYWJsZUNhY2hlSWQoKSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaXN1YWxJZF06IHZpc3VhbElkLFxuICAgICAgW1BhcmFtZXRlcklkLkxvZ2ljYWxUYWJsZUlkXTogbG9naWNhbFRhYmxlSWQsXG4gICAgICBbUGFyYW1ldGVySWQuSWdub3JlQWxpYXNlc106IGlnbm9yZUFsaWFzZXMsXG4gICAgICBbUGFyYW1ldGVySWQuSWdub3JlU2VsZWN0aW9uXTogaWdub3JlU2VsZWN0aW9uLFxuICAgICAgW1BhcmFtZXRlcklkLkluY2x1ZGVBbGxDb2x1bW5zXTogaW5jbHVkZUFsbENvbHVtbnMsXG4gICAgICBbUGFyYW1ldGVySWQuQ29sdW1uc1RvSW5jbHVkZUJ5SWRdOiB0aGlzLnZlcmlmeUluY2x1ZGVDb2x1bW5BcnJheShjb2x1bW5zVG9JbmNsdWRlQnlJZCksXG4gICAgICBbUGFyYW1ldGVySWQuU2hvd0RhdGFUYWJsZUZvcm1hdF06IEV4dGVybmFsVG9JbnRlcm5hbEVudW1NYXBwaW5ncy5zaG93RGF0YVRhYmxlRm9ybWF0VHlwZS5jb252ZXJ0KGluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uKSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5QYWdlUm93Q291bnRdOiBwYWdlUm93Q291bnQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldFVuZGVybHlpbmdUYWJsZURhdGFSZWFkZXIsIHBhcmFtZXRlcnMpLnRoZW48RGF0YVRhYmxlUmVhZGVyPigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlLnJlc3VsdCBhcyBEYXRhVGFibGVSZWFkZXJJbnRlcm5hbENvbnRyYWN0O1xuXG4gICAgICByZXR1cm4gbmV3IERhdGFUYWJsZVJlYWRlcihyZXNwb25zZURhdGEuaWQsIHJlc3BvbnNlRGF0YS50b3RhbFJvd0NvdW50LCBwYWdlUm93Q291bnQsIHRoaXMuX3JlZ2lzdHJ5SWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc3VtbWFyeVRhYmxlSWQgPSAnJztcblxuICBwdWJsaWMgZ2V0UGFnZUFzeW5jKHRhYmxlSWQ6IHN0cmluZywgcGFnZU51bWJlcjogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogUHJvbWlzZTxDb250cmFjdC5EYXRhVGFibGU+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnZ2V0UGFnZUFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaWV3RGF0YVRhYmxlQ2FjaGVJZF06IHRoaXMuZ2V0Vmlld0RhdGFUYWJsZUNhY2hlSWQoKSxcbiAgICAgIFtQYXJhbWV0ZXJJZC5WaWV3RGF0YVRhYmxlSWRdOiB0YWJsZUlkLFxuICAgICAgW1BhcmFtZXRlcklkLkRhdGFSb3dJbmRleF06IHBhZ2VOdW1iZXIgKiBwYWdlU2l6ZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0RGF0YVRhYmxlUmVhZGVyUGFnZSwgcGFyYW1ldGVycykudGhlbjxEYXRhVGFibGU+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2UucmVzdWx0IGFzIERhdGFUYWJsZUludGVybmFsQ29udHJhY3Q7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVzdWx0c1BhZ2UocmVzcG9uc2VEYXRhLCB0YWJsZUlkID09PSBHZXREYXRhU2VydmljZUltcGwuc3VtbWFyeVRhYmxlSWQgPyB0cnVlIDogZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlbGVhc2VBc3luYyh0YWJsZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAncmVsZWFzZScsXG4gICAgICBbUGFyYW1ldGVySWQuVmlld0RhdGFUYWJsZUNhY2hlSWRdOiB0aGlzLmdldFZpZXdEYXRhVGFibGVDYWNoZUlkKCksXG4gICAgICBbUGFyYW1ldGVySWQuVmlld0RhdGFUYWJsZUlkXTogdGFibGVJZCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuUmVsZWFzZURhdGFUYWJsZVJlYWRlciwgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5SW5jbHVkZUNvbHVtbkFycmF5KGNvbHVtbnM6IEFycmF5PHN0cmluZz4pOiBBcnJheTxzdHJpbmc+IHtcbiAgICAvLyBjb2x1bW5zIG11c3QgYmUgYSB2YWxpZCBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShjb2x1bW5zKSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsICdjb2x1bW5zVG9JbmNsdWRlIGFuZCBjb2x1bW5zVG9JbmNsdWRlQnlJZCBtdXN0IGJlIHZhbGlkIGFycmF5cycpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbnkgZHVwbGljYXRlcyBmcm9tIHRoZSBpbnB1dCBhcnJheVxuICAgIGNvbnN0IGNvbHVtbnNBc1NldDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KGNvbHVtbnMpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKGNvbHVtbnNBc1NldCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHNUYWJsZShyZXNwb25zZURhdGE6IERhdGFUYWJsZUludGVybmFsQ29udHJhY3QsIGlzU3VtbWFyeTogYm9vbGVhbik6IERhdGFUYWJsZSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlRGF0YS5oZWFkZXJzLm1hcCgoaCkgPT4gbmV3IENvbHVtbihoLmZpZWxkQ2FwdGlvbiwgaC5maWVsZE5hbWUsIGguZGF0YVR5cGUsIGguaXNSZWZlcmVuY2VkLCBoLmluZGV4KSk7XG5cbiAgICAvLyBUT0RPIFRoaXMgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGlzIGFwaSB3aWxsIHJlc3BvbmQgbWFya3MgaW5mbyBvciBub3RcbiAgICBsZXQgbWFya3M7XG4gICAgaWYgKHJlc3BvbnNlRGF0YS5tYXJrcykge1xuICAgICAgbWFya3MgPSByZXNwb25zZURhdGEubWFya3MubWFwKChoKSA9PiBuZXcgTWFya0luZm8oaC50eXBlLCBoLmNvbG9yLCBoLnR1cGxlSWQpKTtcbiAgICB9XG5cbiAgICAvLyBMaW1pdCsxIGlzIG91ciBzZW50aW5hbCB0aGF0IHVuZGVybHlpbmcgZGF0YSBjb250YWlucyBtb3JlIHJvd3MgdGhhbiB1c2VyIGlzIGFsbG93ZWQgdG8gZmV0Y2guXG4gICAgLy8gUmVtb3ZlIHRoZSBsYXN0IGVsZW1lbnQgc28gd2UgYWx3YXlzIHJldHVybiBNYXhSb3dMaW1pdFxuICAgIGNvbnN0IGlzVG90YWxSb3dDb3VudExpbWl0ZWQgPSBpc1N1bW1hcnkgPT09IGZhbHNlICYmIHJlc3BvbnNlRGF0YS5kYXRhVGFibGUubGVuZ3RoID09PSB0aGlzLmdldE1heFJvd0xpbWl0KCkgKyAxO1xuICAgIGlmIChpc1RvdGFsUm93Q291bnRMaW1pdGVkKSB7XG4gICAgICByZXNwb25zZURhdGEuZGF0YVRhYmxlLmxlbmd0aCAtPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlID0gcmVzcG9uc2VEYXRhLmRhdGFUYWJsZS5tYXAoKHJvdykgPT4ge1xuICAgICAgcmV0dXJuIHJvdy5tYXAoKGNlbGwsIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VUYWJsZURhdGFWYWx1ZShjZWxsLCBoZWFkZXJzW2luZGV4XS5kYXRhVHlwZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChtYXJrcykge1xuICAgICAgcmV0dXJuIG5ldyBEYXRhVGFibGUodGFibGUsIGhlYWRlcnMsIHRhYmxlLmxlbmd0aCwgaXNUb3RhbFJvd0NvdW50TGltaXRlZCwgaXNTdW1tYXJ5LCBtYXJrcyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0YVRhYmxlKHRhYmxlLCBoZWFkZXJzLCB0YWJsZS5sZW5ndGgsIGlzVG90YWxSb3dDb3VudExpbWl0ZWQsIGlzU3VtbWFyeSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHNQYWdlKHJlc3BvbnNlRGF0YTogRGF0YVRhYmxlSW50ZXJuYWxDb250cmFjdCwgaXNTdW1tYXJ5OiBib29sZWFuKTogRGF0YVRhYmxlIHtcbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VEYXRhLmhlYWRlcnMubWFwKChoKSA9PiBuZXcgQ29sdW1uKGguZmllbGRDYXB0aW9uLCBoLmZpZWxkTmFtZSwgaC5kYXRhVHlwZSwgaC5pc1JlZmVyZW5jZWQsIGguaW5kZXgpKTtcblxuICAgIGxldCBtYXJrcztcbiAgICBpZiAocmVzcG9uc2VEYXRhLm1hcmtzKSB7XG4gICAgICBtYXJrcyA9IHJlc3BvbnNlRGF0YS5tYXJrcy5tYXAoKGgpID0+IG5ldyBNYXJrSW5mbyhoLnR5cGUsIGguY29sb3IsIGgudHVwbGVJZCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlID0gcmVzcG9uc2VEYXRhLmRhdGFUYWJsZS5tYXAoKHJvdykgPT4ge1xuICAgICAgcmV0dXJuIHJvdy5tYXAoKGNlbGwsIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiBEYXRhVmFsdWVGYWN0b3J5Lk1ha2VUYWJsZURhdGFWYWx1ZShjZWxsLCBoZWFkZXJzW2luZGV4XS5kYXRhVHlwZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChtYXJrcykge1xuICAgICAgcmV0dXJuIG5ldyBEYXRhVGFibGUodGFibGUsIGhlYWRlcnMsIHRhYmxlLmxlbmd0aCwgZmFsc2UsIGlzU3VtbWFyeSwgbWFya3MpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGFUYWJsZSh0YWJsZSwgaGVhZGVycywgdGFibGUubGVuZ3RoLCBmYWxzZSwgaXNTdW1tYXJ5KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL05vdGlmaWNhdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2VJbXBsQmFzZSB9IGZyb20gJy4vTm90aWZpY2F0aW9uU2VydmljZUltcGxCYXNlJztcblxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblNlcnZpY2VJbXBsIGV4dGVuZHMgTm90aWZpY2F0aW9uU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgTm90aWZpY2F0aW9uU2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU2VydmljZU5hbWVzLk5vdGlmaWNhdGlvbjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW50ZXJuYWxBcGlEaXNwYXRjaGVyLCBNb2RlbCwgTm90aWZpY2F0aW9uLCBOb3RpZmljYXRpb25JZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBVbnJlZ2lzdGVyRm4gfSBmcm9tICcuLi9Ob3RpZmljYXRpb25TZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIFJlZ2lzdHJhdGlvbiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9maWx0ZXJGbjogKG5vdGlmaWNhdGlvbk1vZGVsOiBNb2RlbCkgPT4gYm9vbGVhbiwgcHJpdmF0ZSBfY2FsbGJhY2tGbjogKG5vdGlmaWNhdGlvbk1vZGVsOiBNb2RlbCkgPT4gdm9pZCkge1xuICAgIC8vIE5vdGhpbmcgSGVyZVxuICB9XG5cbiAgcHVibGljIG9uTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbk1vZGVsOiBNb2RlbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9maWx0ZXJGbihub3RpZmljYXRpb25Nb2RlbCkpIHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrRm4obm90aWZpY2F0aW9uTW9kZWwpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uU2VydmljZUltcGxCYXNlIHtcbiAgcHJpdmF0ZSBfaGFuZGxlcnM6IHsgW25vdGlmaWNhdGlvbklkOiBzdHJpbmddOiBBcnJheTxSZWdpc3RyYXRpb24+IH07XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlzcGF0Y2hlcjogSW50ZXJuYWxBcGlEaXNwYXRjaGVyKSB7XG4gICAgdGhpcy5faGFuZGxlcnMgPSB7fTtcbiAgICB0aGlzLmRpc3BhdGNoZXIucmVnaXN0ZXJOb3RpZmljYXRpb25IYW5kbGVyKHRoaXMub25Ob3RpZmljYXRpb24uYmluZCh0aGlzKSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJIYW5kbGVyKGlkOiBOb3RpZmljYXRpb25JZCwgZmlsdGVyRm46IChtb2RlbDogTW9kZWwpID0+IGJvb2xlYW4sIGhhbmRsZXI6IChtb2RlbDogTW9kZWwpID0+IHZvaWQpOiBVbnJlZ2lzdGVyRm4ge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5faGFuZGxlcnNbaWRdIHx8IG5ldyBBcnJheTxSZWdpc3RyYXRpb24+KCk7XG4gICAgY29uc3QgcmVnaXN0cmF0aW9uID0gbmV3IFJlZ2lzdHJhdGlvbihmaWx0ZXJGbiwgaGFuZGxlcik7XG4gICAgaGFuZGxlcnMucHVzaChyZWdpc3RyYXRpb24pO1xuICAgIHRoaXMuX2hhbmRsZXJzW2lkXSA9IGhhbmRsZXJzO1xuICAgIHJldHVybiAoKSA9PiB0aGlzLnJlbW92ZVJlZ2lzdHJhdGlvbihpZCwgcmVnaXN0cmF0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzSGFuZGxlcnNGb3JOb3RpZmljYXRpb25UeXBlKGlkOiBOb3RpZmljYXRpb25JZCk6IGJvb2xlYW4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlcnMuaGFzT3duUHJvcGVydHkoaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNIYW5kbGVyc0Zvck5vdGlmaWNhdGlvblR5cGUobm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbklkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdvIHRocm91Z2ggYW5kIGNoZWNrIGZvciBhbGwgdGhlIGhhbmRsZXJzIG9mIHRoaXMgcGFydGljdWxhciBub3RpZmljYXRpb25cbiAgICB0aGlzLl9oYW5kbGVyc1tub3RpZmljYXRpb24ubm90aWZpY2F0aW9uSWRdLmZvckVhY2goKGgpID0+IGgub25Ob3RpZmljYXRpb24obm90aWZpY2F0aW9uLmRhdGEpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVnaXN0cmF0aW9uKGlkOiBOb3RpZmljYXRpb25JZCwgcmVnaXN0cmF0aW9uOiBSZWdpc3RyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzSGFuZGxlcnNGb3JOb3RpZmljYXRpb25UeXBlKGlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZXJzW2lkXSA9IHRoaXMuX2hhbmRsZXJzW2lkXS5maWx0ZXIoKHJlZykgPT4gcmVnICE9PSByZWdpc3RyYXRpb24pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFcnJvckNvZGVzIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEV4ZWN1dGVQYXJhbWV0ZXJzLCBNb2RlbCwgUGFyYW1ldGVySWQsIFBhcmFtZXRlckluZm8sIFNoZWV0UGF0aCwgVmVyYklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFBhcmFtZXRlckltcGwgfSBmcm9tICcuLi8uLi9JbXBsL1BhcmFtZXRlckltcGwnO1xuaW1wb3J0IHsgVGFibGVhdUVycm9yIH0gZnJvbSAnLi4vLi4vVGFibGVhdUVycm9yJztcbmltcG9ydCB7IFBhcmFtZXRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vUGFyYW1ldGVyc1NlcnZpY2UnO1xuaW1wb3J0IHsgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IFNlcnZpY2VJbXBsQmFzZSB9IGZyb20gJy4vU2VydmljZUltcGxCYXNlJztcblxuZXhwb3J0IGNsYXNzIFBhcmFtZXRlcnNTZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIFBhcmFtZXRlcnNTZXJ2aWNlIHtcbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTZXJ2aWNlTmFtZXMuUGFyYW1ldGVycztcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJhbWV0ZXJzRm9yU2hlZXRBc3luYyhzaGVldFBhdGg6IFNoZWV0UGF0aCk6IFByb21pc2U8QXJyYXk8UGFyYW1ldGVySW1wbD4+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRQYXJhbWV0ZXJzRm9yU2hlZXRBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuU2hlZXRQYXRoXTogc2hlZXRQYXRoLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5nZXRQYXJhbWV0ZXJzQXN5bmMocGFyYW1ldGVycyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWxsUGFyYW1ldGVyc0FzeW5jKCk6IFByb21pc2U8QXJyYXk8UGFyYW1ldGVySW1wbD4+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRQYXJhbWV0ZXJzRm9yU2hlZXRBc3luYycsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmdldFBhcmFtZXRlcnNBc3luYyhwYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFyYW1ldGVyc0FzeW5jKGlucHV0UGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMpOiBQcm9taXNlPEFycmF5PFBhcmFtZXRlckltcGw+PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0UGFyYW1ldGVyc0ZvclNoZWV0LCBpbnB1dFBhcmFtZXRlcnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQgYXMgQXJyYXk8UGFyYW1ldGVySW5mbz47XG4gICAgICByZXR1cm4gcmVzdWx0Lm1hcCgocGFyYW1ldGVySW5mbykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFBhcmFtZXRlckltcGwocGFyYW1ldGVySW5mbywgdGhpcy5fcmVnaXN0cnlJZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VQYXJhbWV0ZXJWYWx1ZUFzeW5jKGZpZWxkTmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKTogUHJvbWlzZTxQYXJhbWV0ZXJJbmZvPiB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnY2hhbmdlUGFyYW1ldGVyVmFsdWVBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuUGFyYW1ldGVyRmllbGROYW1lXTogZmllbGROYW1lLFxuICAgICAgW1BhcmFtZXRlcklkLlBhcmFtZXRlclZhbHVlXTogbmV3VmFsdWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkNoYW5nZVBhcmFtZXRlclZhbHVlLCBwYXJhbWV0ZXJzKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0IGFzIFBhcmFtZXRlckluZm87XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGZpbmRQYXJhbWV0ZXJCeU5hbWVBc3luYyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBhcmFtZXRlckltcGwgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5maW5kUGFyYW1ldGVyQXN5bmMobmFtZSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kUGFyYW1ldGVyQnlHbG9iYWxGaWVsZE5hbWVBc3luYyhmaWVsZE5hbWU6IHN0cmluZyk6IFByb21pc2U8UGFyYW1ldGVySW1wbCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmZpbmRQYXJhbWV0ZXJBc3luYyh1bmRlZmluZWQsIGZpZWxkTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXJhbWV0ZXJBc3luYyhuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZpZWxkTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxQYXJhbWV0ZXJJbXBsIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2ZpbmRQYXJhbWV0ZXJBc3luYycsXG4gICAgfTtcbiAgICBpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlBhcmFtZXRlckNhcHRpb25dID0gbmFtZTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLlBhcmFtZXRlckZpZWxkTmFtZV0gPSBmaWVsZE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLCAnbmFtZSBvciBmaWVsZE5hbWUgbXVzdCBiZSBwcm92aWRlZCB0byBmaW5kIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkZpbmRQYXJhbWV0ZXIsIHBhcmFtZXRlcnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZU9mUGFyYW1ldGVySW5mbyA9IChvYmplY3Q6IE1vZGVsKTogb2JqZWN0IGlzIFBhcmFtZXRlckluZm8gPT4ge1xuICAgICAgICByZXR1cm4gJ2ZpZWxkTmFtZScgaW4gb2JqZWN0O1xuICAgICAgfTtcblxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0byBzZWUgaWYgd2UgZ290IGEgdmFsaWQgcmVzcG9uc2UgYmFjayBhZ2FpblxuICAgICAgaWYgKGluc3RhbmNlT2ZQYXJhbWV0ZXJJbmZvKHJlc3BvbnNlLnJlc3VsdCkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0O1xuICAgICAgICByZXR1cm4gbmV3IFBhcmFtZXRlckltcGwocmVzdWx0LCB0aGlzLl9yZWdpc3RyeUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIENvbnRyYWN0IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQge1xuICBFeGVjdXRlUGFyYW1ldGVycyxcbiAgUGFyYW1ldGVySWQsXG4gIFF1YW50aXRhdGl2ZUluY2x1ZGVkVmFsdWVzLFxuICBTZWxlY3Rpb25VcGRhdGVUeXBlIGFzIFNlbGVjdGlvblVwZGF0ZVR5cGVJbnRlcm5hbCxcbiAgVmVyYklkLFxuICBWaXN1YWxJZCxcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7XG4gIERpbWVuc2lvblNlbGVjdGlvbk1vZGVsLFxuICBIaWVyYXJjaGljYWxTZWxlY3Rpb25Nb2RlbCxcbiAgUmFuZ2VTZWxlY3Rpb25Nb2RlbCxcbiAgU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyLFxuICBUdXBsZVNlbGVjdGlvbk1vZGVsLFxuICBWYWx1ZVNlbGVjdGlvbk1vZGVsLFxufSBmcm9tICcuLi8uLi9Nb2RlbHMvU2VsZWN0aW9uTW9kZWxzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uLy4uL1RhYmxlYXVFcnJvcic7XG5pbXBvcnQgeyBQYXJhbSB9IGZyb20gJy4uLy4uL1V0aWxzL1BhcmFtJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9TZWxlY3Rpb25TZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL1NlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25TZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIFNlbGVjdGlvblNlcnZpY2Uge1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNlcnZpY2VOYW1lcy5TZWxlY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIGNsZWFyIGFsbCB0aGUgc2VsZWN0ZWQgbWFya3MgZm9yIHRoZSBnaXZlbiB3b3Jrc2hlZXQuXG4gICAqXG4gICAqIEBwYXJhbSB2aXN1YWxJZFxuICAgKi9cbiAgcHVibGljIGNsZWFyU2VsZWN0ZWRNYXJrc0FzeW5jKHZpc3VhbElkOiBWaXN1YWxJZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdjbGVhclNlbGVjdGVkTWFya3NBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVmlzdWFsSWRdOiB2aXN1YWxJZCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkNsZWFyU2VsZWN0ZWRNYXJrcywgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIHJldHVybjsgLy8gRXhwZWN0aW5nIGFuIGVtcHR5IG1vZGVsIGFuZCBoZW5jZSB0aGUgdm9pZCByZXNwb25zZS5cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gc2VsZWN0IG1hcmtzIGZvciB0aGUgZ2l2ZW4gd29ya3NoZWV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmlzdWFsSWRcbiAgICogQHBhcmFtIHNlbGVjdGlvbkNyaXRlcmlhXG4gICAqIEBwYXJhbSBzZWxlY3Rpb25VcGRhdGVUeXBlXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0TWFya3NCeVZhbHVlQXN5bmMoXG4gICAgdmlzdWFsSWQ6IFZpc3VhbElkLFxuICAgIHNlbGVjdGlvbkNyaXRlcmlhczogQXJyYXk8Q29udHJhY3QuU2VsZWN0aW9uQ3JpdGVyaWE+LFxuICAgIHNlbGVjdGlvblVwZGF0ZVR5cGU6IENvbnRyYWN0LlNlbGVjdGlvblVwZGF0ZVR5cGUsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChzZWxlY3Rpb25Dcml0ZXJpYXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKENvbnRyYWN0LkVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgJ1NlbGVjdGlvbiBjcml0ZXJpYSBtaXNzaW5nIGZvciBzZWxlY3RpbmcgbWFya3MgYnkgdmFsdWUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3Rpb25UeXBlOiBzdHJpbmcgPSB0aGlzLnZhbGlkYXRlU2VsZWN0aW9uVXBkYXRlVHlwZShzZWxlY3Rpb25VcGRhdGVUeXBlKTtcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lcjogU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyID0gdGhpcy5wYXJzZVNlbGVjdGlvbk1hcmtzKHNlbGVjdGlvbkNyaXRlcmlhcyk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnc2VsZWN0TWFya3NCeVZhbHVlQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpc3VhbElkXTogdmlzdWFsSWQsXG4gICAgICBbUGFyYW1ldGVySWQuU2VsZWN0aW9uVXBkYXRlVHlwZV06IHNlbGVjdGlvblR5cGUsXG4gICAgfTtcblxuICAgIGlmIChzZWxlY3Rpb25Nb2RlbENvbnRhaW5lci5oaWVyTW9kZWxBcnIgJiYgc2VsZWN0aW9uTW9kZWxDb250YWluZXIuaGllck1vZGVsQXJyLmxlbmd0aCkge1xuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5IaWVyVmFsU2VsZWN0aW9uTW9kZWxzXSA9IHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyLmhpZXJNb2RlbEFycjtcbiAgICB9XG4gICAgaWYgKHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyLnF1YW50TW9kZWxBcnIgJiYgc2VsZWN0aW9uTW9kZWxDb250YWluZXIucXVhbnRNb2RlbEFyci5sZW5ndGgpIHtcbiAgICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuUXVhbnRSYW5nZVNlbGVjdGlvbk1vZGVsc10gPSBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lci5xdWFudE1vZGVsQXJyO1xuICAgIH1cbiAgICBpZiAoc2VsZWN0aW9uTW9kZWxDb250YWluZXIuZGltTW9kZWxBcnIgJiYgc2VsZWN0aW9uTW9kZWxDb250YWluZXIuZGltTW9kZWxBcnIubGVuZ3RoKSB7XG4gICAgICBwYXJhbWV0ZXJzW1BhcmFtZXRlcklkLkRpbVZhbFNlbGVjdGlvbk1vZGVsc10gPSBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lci5kaW1Nb2RlbEFycjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5TZWxlY3RCeVZhbHVlLCBwYXJhbWV0ZXJzKS50aGVuPHZvaWQ+KChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5hcGlGaWx0ZXJIYW5kbGVyQ2hlY2tGb3JDb21tYW5kRXJyb3IocmVzcG9uc2UucmVzdWx0IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcGlGaWx0ZXJIYW5kbGVyQ2hlY2tGb3JDb21tYW5kRXJyb3Ioc2VydmVyUG06IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICBpZiAoIXNlcnZlclBtW1BhcmFtZXRlcklkLlBhcmFtZXRlckVycm9yXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2VydmVyUG1bUGFyYW1ldGVySWQuSW52YWxpZEZpZWxkc10pIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkU2VsZWN0aW9uRmllbGROYW1lLCBzZXJ2ZXJQbVtQYXJhbWV0ZXJJZC5JbnZhbGlkRmllbGRzXSk7XG4gICAgfVxuICAgIGlmIChzZXJ2ZXJQbVtQYXJhbWV0ZXJJZC5JbnZhbGlkVmFsdWVzXSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5TaGFyZWRFcnJvckNvZGVzLkludmFsaWRTZWxlY3Rpb25WYWx1ZSwgc2VydmVyUG1bUGFyYW1ldGVySWQuSW52YWxpZFZhbHVlc10pO1xuICAgIH1cbiAgICBpZiAoc2VydmVyUG1bUGFyYW1ldGVySWQuSW52YWxpZERhdGVzXSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5TaGFyZWRFcnJvckNvZGVzLkludmFsaWRTZWxlY3Rpb25EYXRlLCBzZXJ2ZXJQbVtQYXJhbWV0ZXJJZC5JbnZhbGlkRGF0ZXNdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHNlbGVjdCBtYXJrcyBmb3IgdGhlIGdpdmVuIHdvcmtzaGVldC5cbiAgICpcbiAgICogQHBhcmFtIHZpc3VhbElkXG4gICAqIEBwYXJhbSBNYXJrSW5mb1xuICAgKiBAcGFyYW0gc2VsZWN0aW9uVXBkYXRlVHlwZVxuICAgKi9cbiAgcHVibGljIHNlbGVjdE1hcmtzQnlJZEFzeW5jKFxuICAgIHZpc3VhbElkOiBWaXN1YWxJZCxcbiAgICBtYXJrczogQXJyYXk8Q29udHJhY3QuTWFya0luZm8+LFxuICAgIHNlbGVjdGlvblVwZGF0ZVR5cGU6IENvbnRyYWN0LlNlbGVjdGlvblVwZGF0ZVR5cGUsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChtYXJrcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLCAnTWFya3MgaW5mbyBtaXNzaW5nIGZvciBzZWxlY3RpbmcgbWFya3MgYnkgSWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3Rpb25UeXBlOiBzdHJpbmcgPSB0aGlzLnZhbGlkYXRlU2VsZWN0aW9uVXBkYXRlVHlwZShzZWxlY3Rpb25VcGRhdGVUeXBlKTtcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lcjogU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyID0gdGhpcy5wYXJzZVNlbGVjdGlvbklkcyhtYXJrcyk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnc2VsZWN0TWFya3NCeUlkQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlZpc3VhbElkXTogdmlzdWFsSWQsXG4gICAgICBbUGFyYW1ldGVySWQuU2VsZWN0aW9uVXBkYXRlVHlwZV06IHNlbGVjdGlvblR5cGUsXG4gICAgICBbUGFyYW1ldGVySWQuU2VsZWN0aW9uXTogc2VsZWN0aW9uTW9kZWxDb250YWluZXIuc2VsZWN0aW9uLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuU2VsZWN0QnlWYWx1ZSwgcGFyYW1ldGVycykudGhlbjx2b2lkPigocmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIEV4cGVjdGluZyBhbiBlbXB0eSBtb2RlbCBhbmQgaGVuY2UgdGhlIHZvaWQgcmVzcG9uc2UuXG4gICAgICByZXR1cm47XG4gICAgICAvLyBUT0RPIEludmVzdGlnYXRlIHRoZSBlcnJvciByZXNwb25zZSB3aXRoIG11bHRpcGxlIG91dHB1dCBwYXJhbXMgYW5kIHRocm93IGVycm9yIGFjY29yZGluZ2x5LlxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBwcmVwYXJlIHRoZSBwcmVzIG1vZGVscyBmb3Igc2VsZWN0aW9uIGJ5IE1hcmtzSW5mb1xuICAgKiBAcGFyYW0gbWFya3NcbiAgICovXG4gIHByaXZhdGUgcGFyc2VTZWxlY3Rpb25JZHMobWFya3M6IEFycmF5PENvbnRyYWN0Lk1hcmtJbmZvPik6IFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lciB7XG4gICAgY29uc3QgaWRzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgY29uc3Qgc2VsZWN0aW9uTW9kZWxDb250YWluZXI6IFNlbGVjdGlvbk1vZGVsc0NvbnRhaW5lciA9IG5ldyBTZWxlY3Rpb25Nb2RlbHNDb250YWluZXIoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0dXBsZUlkOiBudW1iZXIgfCB1bmRlZmluZWQgPSBtYXJrc1tpXS50dXBsZUlkO1xuICAgICAgaWYgKHR1cGxlSWQgIT09IHVuZGVmaW5lZCAmJiB0dXBsZUlkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHR1cGxlIGlkIGlzIHByb3ZpZGVkIHVzZSB0aGF0IGluc3RlYWQgb2YgcGFpclxuICAgICAgICBpZHMucHVzaCh0dXBsZUlkLnRvU3RyaW5nKCkpOyAvLyBjb2xsZWN0IHRoZSB0dXBsZSBpZHNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCAndHVwbGVJZCBwYXJzaW5nIGVycm9yJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpZHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAvLyB0dXBsZSBpZHMgYmFzZWQgc2VsZWN0aW9uXG4gICAgICBjb25zdCB0dXBsZVNlbGVjdGlvbk1vZGVsOiBUdXBsZVNlbGVjdGlvbk1vZGVsID0gbmV3IFR1cGxlU2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgIHR1cGxlU2VsZWN0aW9uTW9kZWwuc2VsZWN0aW9uVHlwZSA9ICd0dXBsZXMnO1xuICAgICAgdHVwbGVTZWxlY3Rpb25Nb2RlbC5vYmplY3RJZHMgPSBpZHM7XG4gICAgICBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lci5zZWxlY3Rpb24gPSB0dXBsZVNlbGVjdGlvbk1vZGVsO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0aW9uTW9kZWxDb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHByZXBhcmUgdGhlIHByZXMgbW9kZWxzIGZvciBzZWxlY3Rpb24gYnkgdmFsdWVzLlxuICAgKlxuICAgKiBTdXBwb3J0cyAzIHR5cGVzIGZvciBzZWxlY3Rpb246XG4gICAqIDEpIEhpZXJhcmNoaWNhbCB2YWx1ZSBiYXNlZCBzZWxlY3Rpb25cbiAgICogMikgUmFuZ2UgdmFsdWUgYmFzZWQgc2VsZWN0aW9uXG4gICAqIDMpIERpbWVuc2lvbiB2YWx1ZSBiYXNlZCBzZWxlY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIG1hcmtzXG4gICAqL1xuICBwcml2YXRlIHBhcnNlU2VsZWN0aW9uTWFya3Moc2VsZWN0aW9uQ3JpdGVyaWFzOiBBcnJheTxDb250cmFjdC5TZWxlY3Rpb25Dcml0ZXJpYT4pOiBTZWxlY3Rpb25Nb2RlbHNDb250YWluZXIge1xuICAgIGNvbnN0IHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyOiBTZWxlY3Rpb25Nb2RlbHNDb250YWluZXIgPSBuZXcgU2VsZWN0aW9uTW9kZWxzQ29udGFpbmVyKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbkNyaXRlcmlhcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3QgPSBzZWxlY3Rpb25Dcml0ZXJpYXNbaV07XG4gICAgICBpZiAoIShzdC5maWVsZE5hbWUgJiYgc3QudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBzdC52YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5FcnJvckNvZGVzLkludGVybmFsRXJyb3IsICdTZWxlY3Rpb24gQ3JpdGVyaWEgcGFyc2luZyBlcnJvcicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYXRSZWdleCA9IG5ldyBSZWdFeHAoJyhbW0EtWmEtejAtOV0rXSkuKicsICdnJyk7XG4gICAgICBjb25zdCByYW5nZU9wdGlvbiA9IHN0LnZhbHVlIGFzIENvbnRyYWN0LlJhbmdlVmFsdWU7XG4gICAgICBpZiAoY2F0UmVnZXgudGVzdChzdC5maWVsZE5hbWUpKSB7XG4gICAgICAgIC8vIEhpZXJhcmNoaWNhbCB2YWx1ZSBzZWxlY3Rpb25cbiAgICAgICAgY29uc3QgaGllck1vZGVsOiBIaWVyYXJjaGljYWxTZWxlY3Rpb25Nb2RlbCA9IHRoaXMuYWRkVG9QYXJhbXNMaXN0KHN0LmZpZWxkTmFtZSwgc3QudmFsdWUpIGFzIEhpZXJhcmNoaWNhbFNlbGVjdGlvbk1vZGVsO1xuICAgICAgICBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lci5oaWVyTW9kZWxBcnIucHVzaChoaWVyTW9kZWwpO1xuICAgICAgfSBlbHNlIGlmIChyYW5nZU9wdGlvbi5taW4gIT09IHVuZGVmaW5lZCAmJiByYW5nZU9wdGlvbi5tYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBSYW5nZSB2YWx1ZSBzZWxlY3Rpb25cbiAgICAgICAgY29uc3QgcXVhbnRNb2RlbDogUmFuZ2VTZWxlY3Rpb25Nb2RlbCA9IHRoaXMuYWRkVG9SYW5nZVBhcmFtc0xpc3Qoc3QuZmllbGROYW1lLCByYW5nZU9wdGlvbik7XG4gICAgICAgIHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyLnF1YW50TW9kZWxBcnIucHVzaChxdWFudE1vZGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERpbWVuc2lvbiB2YWx1ZSBzZWxlY3Rpb25cbiAgICAgICAgY29uc3QgZGltTW9kZWw6IERpbWVuc2lvblNlbGVjdGlvbk1vZGVsID0gdGhpcy5hZGRUb1BhcmFtc0xpc3Qoc3QuZmllbGROYW1lLCBzdC52YWx1ZSkgYXMgRGltZW5zaW9uU2VsZWN0aW9uTW9kZWw7XG4gICAgICAgIHNlbGVjdGlvbk1vZGVsQ29udGFpbmVyLmRpbU1vZGVsQXJyLnB1c2goZGltTW9kZWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3Rpb25Nb2RlbENvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gdHJhbnNmb3JtIHRoZSBrZXkgdmFsdWUgcGFpciBpbnRvIHZhbHVlIGJhc2VkIHByZXMgbW9kZWwgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVTZWxlY3Rpb25Nb2RlbFxuICAgKiBAcGFyYW0gZmllbGROYW1lXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBhZGRUb1BhcmFtc0xpc3QoZmllbGROYW1lOiBzdHJpbmcsIHZhbHVlOiBDb250cmFjdC5DYXRlZ29yaWNhbFZhbHVlIHwgQ29udHJhY3QuUmFuZ2VWYWx1ZSk6IFZhbHVlU2VsZWN0aW9uTW9kZWwge1xuICAgIGNvbnN0IHZhbHVlU2VsZWN0aW9uTW9kZWw6IFZhbHVlU2VsZWN0aW9uTW9kZWwgPSBuZXcgVmFsdWVTZWxlY3Rpb25Nb2RlbCgpO1xuICAgIGNvbnN0IG1hcmtWYWx1ZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBjb25zdCB2YWx1ZUFycjogQXJyYXk8c3RyaW5nPiA9IHZhbHVlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZUFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXJrVmFsdWVzLnB1c2goUGFyYW0uc2VyaWFsaXplUGFyYW1ldGVyVmFsdWUodmFsdWVBcnJbaV0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWFya1ZhbHVlcy5wdXNoKFBhcmFtLnNlcmlhbGl6ZVBhcmFtZXRlclZhbHVlKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgdmFsdWVTZWxlY3Rpb25Nb2RlbC5xdWFsaWZpZWRGaWVsZENhcHRpb24gPSBmaWVsZE5hbWU7XG4gICAgdmFsdWVTZWxlY3Rpb25Nb2RlbC5zZWxlY3RWYWx1ZXMgPSBtYXJrVmFsdWVzO1xuICAgIHJldHVybiB2YWx1ZVNlbGVjdGlvbk1vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byB0cmFuc2Zvcm0gdGhlIGtleSB2YWx1ZSBwYWlyIGludG8gcmFuZ2UgYmFzZWQgc2VsZWN0aW9uIHByZXMgbW9kZWwuXG4gICAqXG4gICAqIFRPRE86IE5lZWQgdG8gaGFuZGxlIHRoZSBwYXJzaW5nIG9mIGRhdGUgdHlwZSB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVNlbGVjdGlvbk1vZGVsXG4gICAqIEBwYXJhbSBmaWVsZE5hbWVcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIGFkZFRvUmFuZ2VQYXJhbXNMaXN0KGZpZWxkTmFtZTogc3RyaW5nLCB2YWx1ZTogQ29udHJhY3QuUmFuZ2VWYWx1ZSk6IFJhbmdlU2VsZWN0aW9uTW9kZWwge1xuICAgIGNvbnN0IHJhbmdlU2VsZWN0aW9uTW9kZWw6IFJhbmdlU2VsZWN0aW9uTW9kZWwgPSBuZXcgUmFuZ2VTZWxlY3Rpb25Nb2RlbCgpO1xuICAgIHJhbmdlU2VsZWN0aW9uTW9kZWwucXVhbGlmaWVkRmllbGRDYXB0aW9uID0gZmllbGROYW1lO1xuICAgIGlmICh2YWx1ZS5tYXggIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5tYXggIT09IG51bGwpIHtcbiAgICAgIHJhbmdlU2VsZWN0aW9uTW9kZWwubWF4VmFsdWUgPSBQYXJhbS5zZXJpYWxpemVQYXJhbWV0ZXJWYWx1ZSh2YWx1ZS5tYXgpO1xuICAgIH1cbiAgICBpZiAodmFsdWUubWluICE9PSB1bmRlZmluZWQgJiYgdmFsdWUubWluICE9PSBudWxsKSB7XG4gICAgICByYW5nZVNlbGVjdGlvbk1vZGVsLm1pblZhbHVlID0gUGFyYW0uc2VyaWFsaXplUGFyYW1ldGVyVmFsdWUodmFsdWUubWluKTtcbiAgICB9XG4gICAgcmFuZ2VTZWxlY3Rpb25Nb2RlbC5pbmNsdWRlZCA9IHRoaXMudmFsaWRhdGVOdWxsT3B0aW9uVHlwZSh2YWx1ZS5udWxsT3B0aW9uKTtcbiAgICByZXR1cm4gcmFuZ2VTZWxlY3Rpb25Nb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gdmFsaWRhdGUgdGhlIHNlbGVjdGlvbiB1cGRhdGUgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHNlbGVjdGlvblVwZGF0ZVR5cGVcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTZWxlY3Rpb25VcGRhdGVUeXBlKHNlbGVjdGlvblVwZGF0ZVR5cGU6IENvbnRyYWN0LlNlbGVjdGlvblVwZGF0ZVR5cGUpOiBzdHJpbmcge1xuICAgIGlmIChzZWxlY3Rpb25VcGRhdGVUeXBlID09PSBDb250cmFjdC5TZWxlY3Rpb25VcGRhdGVUeXBlLlJlcGxhY2UpIHtcbiAgICAgIHJldHVybiBTZWxlY3Rpb25VcGRhdGVUeXBlSW50ZXJuYWwuUmVwbGFjZTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblVwZGF0ZVR5cGUgPT09IENvbnRyYWN0LlNlbGVjdGlvblVwZGF0ZVR5cGUuQWRkKSB7XG4gICAgICByZXR1cm4gU2VsZWN0aW9uVXBkYXRlVHlwZUludGVybmFsLkFkZDtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblVwZGF0ZVR5cGUgPT09IENvbnRyYWN0LlNlbGVjdGlvblVwZGF0ZVR5cGUuUmVtb3ZlKSB7XG4gICAgICByZXR1cm4gU2VsZWN0aW9uVXBkYXRlVHlwZUludGVybmFsLlJlbW92ZTtcbiAgICB9XG4gICAgcmV0dXJuIFNlbGVjdGlvblVwZGF0ZVR5cGVJbnRlcm5hbC5SZXBsYWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgaW5jbHVkZSB0eXBlIGZvciByYW5nZSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBudWxsT3B0aW9uXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTnVsbE9wdGlvblR5cGUobnVsbE9wdGlvbjogQ29udHJhY3QuRmlsdGVyTnVsbE9wdGlvbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKG51bGxPcHRpb24pIHtcbiAgICAgIGlmIChudWxsT3B0aW9uID09PSBDb250cmFjdC5GaWx0ZXJOdWxsT3B0aW9uLk51bGxWYWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIFF1YW50aXRhdGl2ZUluY2x1ZGVkVmFsdWVzLkluY2x1ZGVOdWxsO1xuICAgICAgfSBlbHNlIGlmIChudWxsT3B0aW9uID09PSBDb250cmFjdC5GaWx0ZXJOdWxsT3B0aW9uLk5vbk51bGxWYWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIFF1YW50aXRhdGl2ZUluY2x1ZGVkVmFsdWVzLkluY2x1ZGVOb25OdWxsO1xuICAgICAgfSBlbHNlIGlmIChudWxsT3B0aW9uID09PSBDb250cmFjdC5GaWx0ZXJOdWxsT3B0aW9uLkFsbFZhbHVlcykge1xuICAgICAgICByZXR1cm4gUXVhbnRpdGF0aXZlSW5jbHVkZWRWYWx1ZXMuSW5jbHVkZUFsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUXVhbnRpdGF0aXZlSW5jbHVkZWRWYWx1ZXMuSW5jbHVkZUFsbDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgRXhlY3V0ZVJlc3BvbnNlLCBJbnRlcm5hbEFwaURpc3BhdGNoZXIsIEludGVybmFsVGFibGVhdUVycm9yLCBWZXJiSWQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgSW50ZXJuYWxUb0V4dGVybmFsRW51bU1hcHBpbmdzIH0gZnJvbSAnLi4vLi4vRW51bU1hcHBpbmdzL0ludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncyc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi8uLi9UYWJsZWF1RXJyb3InO1xuaW1wb3J0IHsgU2hvdWxkVGhyb3cgfSBmcm9tICcuLi8uLi9VdGlscy9FbnVtQ29udmVydGVyJztcblxuLyoqXG4gKiBFYWNoIFNlcnZjZUltcGwgc2hvdWxkIGV4dGVuZCB0aGlzIGJhc2UgY2xhc3MgZm9yIHRoZSBzYWtlIG9mXG4gKiBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuICBUaGlzIGJhc2UgaGFuZGxlcyB0aGUgY29udmVyc2lvblxuICogZnJvbSBpbnRlcm5hbCBlcnJvcnMgdG8gZXh0ZXJuYWwgZXJyb3JzIHRoYXQgd2UgdGhyb3cgdG8gZGV2ZWxvcGVyc1xuICovXG5leHBvcnQgY2xhc3MgU2VydmljZUltcGxCYXNlIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Rpc3BhdGNoZXI6IEludGVybmFsQXBpRGlzcGF0Y2hlciwgcHJvdGVjdGVkIF9yZWdpc3RyeUlkOiBudW1iZXIpIHt9XG5cbiAgcHJvdGVjdGVkIGV4ZWN1dGUodmVyYjogVmVyYklkLCBwYXJhbXM6IEV4ZWN1dGVQYXJhbWV0ZXJzKTogUHJvbWlzZTxFeGVjdXRlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hlci5leGVjdXRlKHZlcmIsIHBhcmFtcykuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAvLyBBbnkgaW50ZXJuYWwgZXJyb3IgdGhhdCBjb21lcyBmcm9tIHRoZSBkaXNwYXRjaGVyIHNob3VsZCBiZSBjb252ZXJ0ZWRcbiAgICAgIC8vIHRvIGFuIGV4dGVybmFsIGVycm9yIHVzaW5nIHRoZSBlbnVtIG1hcHBlciBmb3IgZXJyb3IgY29kZXMuXG4gICAgICBjb25zdCBpbnRlcm5hbEVycm9yID0gZXJyb3IgYXMgSW50ZXJuYWxUYWJsZWF1RXJyb3I7XG4gICAgICBjb25zdCBleHRlcm5hbEVycm9yQ29kZTogRXJyb3JDb2RlcyA9IEludGVybmFsVG9FeHRlcm5hbEVudW1NYXBwaW5ncy5lcnJvckNvZGUuY29udmVydChpbnRlcm5hbEVycm9yLmVycm9yQ29kZSwgU2hvdWxkVGhyb3cuTm8pO1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihleHRlcm5hbEVycm9yQ29kZSwgaW50ZXJuYWxFcnJvci5tZXNzYWdlKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU2hlZXRTaXplIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IEV4ZWN1dGVQYXJhbWV0ZXJzLCBQYXJhbWV0ZXJJZCwgVmVyYklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBTaXplU2VydmljZSB9IGZyb20gJy4uL1NpemVTZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VJbXBsQmFzZSB9IGZyb20gJy4vU2VydmljZUltcGxCYXNlJztcblxuZXhwb3J0IGNsYXNzIFNpemVTZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIFNpemVTZXJ2aWNlIHtcbiAgcHVibGljIGdldCBzZXJ2aWNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTZXJ2aWNlTmFtZXMuU2l6ZTtcbiAgfVxuXG4gIGNoYW5nZVNpemVBc3luYyhuYW1lOiBzdHJpbmcsIG5ld1NpemU6IFNoZWV0U2l6ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdjaGFuZ2VTaXplQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlNoZWV0TmFtZV06IG5hbWUsXG4gICAgICBbUGFyYW1ldGVySWQuTWluSGVpZ2h0XTogbmV3U2l6ZS5taW5TaXplPy5oZWlnaHQgfHwgMCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5NaW5XaWR0aF06IG5ld1NpemUubWluU2l6ZT8ud2lkdGggfHwgMCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5NYXhIZWlnaHRdOiBuZXdTaXplLm1heFNpemU/LmhlaWdodCB8fCAwLFxuICAgICAgW1BhcmFtZXRlcklkLk1heFdpZHRoXTogbmV3U2l6ZS5tYXhTaXplPy53aWR0aCB8fCAwLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5TZXRTaGVldFNpemUsIHBhcmFtZXRlcnMpLnRoZW48dm9pZD4oKF9yZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBFeGVjdXRlUGFyYW1ldGVycywgUGFyYW1ldGVySWQsIFN0b3J5UG9pbnRNb2RlbCwgVmVyYklkIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFNlcnZpY2VOYW1lcyB9IGZyb20gJy4uL1NlcnZpY2VSZWdpc3RyeSc7XG5pbXBvcnQgeyBTdG9yeUFjdGl2YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vU3RvcnlBY3RpdmF0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL1NlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBTdG9yeUFjdGl2YXRpb25TZXJ2aWNlSW1wbCBleHRlbmRzIFNlcnZpY2VJbXBsQmFzZSBpbXBsZW1lbnRzIFN0b3J5QWN0aXZhdGlvblNlcnZpY2Uge1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNlcnZpY2VOYW1lcy5TdG9yeUFjdGl2YXRpb247XG4gIH1cblxuICBhY3RpdmF0ZU5leHRTdG9yeVBvaW50QXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5BY3RpdmF0ZU5leHRTdG9yeVBvaW50O1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdhY3RpdmF0ZU5leHRTdG9yeVBvaW50QXN5bmMnLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48dm9pZD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICBhY3RpdmF0ZVByZXZpb3VzU3RvcnlQb2ludEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuQWN0aXZhdGVQcmV2aW91c1N0b3J5UG9pbnQ7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2FjdGl2YXRlUHJldmlvdXNTdG9yeVBvaW50QXN5bmMnLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKHZlcmIsIHBhcmFtZXRlcnMpLnRoZW48dm9pZD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICBhY3RpdmF0ZVN0b3J5UG9pbnRBc3luYyhpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmVyYiA9IFZlcmJJZC5BY3RpdmF0ZVN0b3J5UG9pbnQ7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2FjdGl2YXRlU3RvcnlQb2ludEFzeW5jJyxcbiAgICB9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuU3RvcnlQb2ludEluZGV4XSA9IGluZGV4O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKS50aGVuPHZvaWQ+KChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgcmV2ZXJ0U3RvcnlQb2ludEFzeW5jKGluZGV4OiBudW1iZXIpOiBQcm9taXNlPFN0b3J5UG9pbnRNb2RlbD4ge1xuICAgIGNvbnN0IHZlcmIgPSBWZXJiSWQuUmV2ZXJ0U3RvcnlQb2ludDtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAncmV2ZXJ0U3RvcnlQb2ludEFzeW5jJyxcbiAgICB9O1xuICAgIHBhcmFtZXRlcnNbUGFyYW1ldGVySWQuU3RvcnlQb2ludEluZGV4XSA9IGluZGV4O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSh2ZXJiLCBwYXJhbWV0ZXJzKS50aGVuPFN0b3J5UG9pbnRNb2RlbD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0IGFzIFN0b3J5UG9pbnRNb2RlbDtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ3VzdG9tVmlld01vZGVsLCBFeGVjdXRlUGFyYW1ldGVycywgUGFyYW1ldGVySWQsIFZlcmJJZCB9IGZyb20gJ0B0YWJsZWF1L2FwaS1pbnRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBDdXN0b21WaWV3SW1wbCB9IGZyb20gJy4uLy4uL0ltcGwvQ3VzdG9tVmlld0ltcGwnO1xuaW1wb3J0IHsgU2VydmljZU5hbWVzIH0gZnJvbSAnLi4vU2VydmljZVJlZ2lzdHJ5JztcbmltcG9ydCB7IFZpelNlcnZpY2UgfSBmcm9tICcuLi9WaXpTZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VJbXBsQmFzZSB9IGZyb20gJy4vU2VydmljZUltcGxCYXNlJztcblxuZXhwb3J0IGNsYXNzIFZpelNlcnZpY2VJbXBsIGV4dGVuZHMgU2VydmljZUltcGxCYXNlIGltcGxlbWVudHMgVml6U2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU2VydmljZU5hbWVzLlZpejtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVWaXpJbWFnZUFzeW5jKGlucHV0U3BlYzogb2JqZWN0KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnY3JlYXRlVml6SW1hZ2VBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuVml6QVBJSW5wdXRKc29uXTogSlNPTi5zdHJpbmdpZnkoaW5wdXRTcGVjKSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuVml6QVBJLCBwYXJhbWV0ZXJzKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0IGFzIHN0cmluZztcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZhdGVTaGVldEFzeW5jKG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdhY3RpdmF0ZVNoZWV0QXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLlN3aXRjaFRvU2hlZXROYW1lXTogbmFtZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuQWN0aXZhdGVTaGVldCwgcGFyYW1ldGVycykudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VzdG9tVmlld3NBc3luYygpOiBQcm9taXNlPEFycmF5PEN1c3RvbVZpZXdJbXBsPj4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdnZXRDdXN0b21WaWV3c0FzeW5jJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuR2V0Q3VzdG9tVmlld3MsIHBhcmFtZXRlcnMpLnRoZW48QXJyYXk8Q3VzdG9tVmlld0ltcGw+PigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbVZpZXdzID0gcmVzcG9uc2UucmVzdWx0IGFzIEFycmF5PEN1c3RvbVZpZXdNb2RlbD47XG4gICAgICByZXR1cm4gY3VzdG9tVmlld3MubWFwKChjdXN0b21WaWV3OiBDdXN0b21WaWV3TW9kZWwpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDdXN0b21WaWV3SW1wbChjdXN0b21WaWV3LCB0aGlzLl9yZWdpc3RyeUlkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNob3dDdXN0b21WaWV3QXN5bmMoY3VzdG9tVmlld05hbWU6IHN0cmluZyk6IFByb21pc2U8Q3VzdG9tVmlld0ltcGw+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnc2hvd0N1c3RvbVZpZXdBc3luYycsXG4gICAgICBbUGFyYW1ldGVySWQuQ3VzdG9tVmlld05hbWVdOiBjdXN0b21WaWV3TmFtZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuU2hvd0N1c3RvbVZpZXcsIHBhcmFtZXRlcnMpLnRoZW48Q3VzdG9tVmlld0ltcGw+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tVmlldyA9IHJlc3BvbnNlLnJlc3VsdCBhcyBDdXN0b21WaWV3TW9kZWw7XG4gICAgICByZXR1cm4gbmV3IEN1c3RvbVZpZXdJbXBsKGN1c3RvbVZpZXcsIHRoaXMuX3JlZ2lzdHJ5SWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUN1c3RvbVZpZXdBc3luYyhjdXN0b21WaWV3TmFtZTogc3RyaW5nKTogUHJvbWlzZTxDdXN0b21WaWV3SW1wbD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdyZW1vdmVDdXN0b21WaWV3QXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkN1c3RvbVZpZXdOYW1lXTogY3VzdG9tVmlld05hbWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlJlbW92ZUN1c3RvbVZpZXcsIHBhcmFtZXRlcnMpLnRoZW48Q3VzdG9tVmlld0ltcGw+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tVmlldyA9IHJlc3BvbnNlLnJlc3VsdCBhcyBDdXN0b21WaWV3TW9kZWw7XG4gICAgICByZXR1cm4gbmV3IEN1c3RvbVZpZXdJbXBsKGN1c3RvbVZpZXcsIHRoaXMuX3JlZ2lzdHJ5SWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNhdmVDdXN0b21WaWV3QXN5bmMoY3VzdG9tVmlld05hbWU6IHN0cmluZyk6IFByb21pc2U8Q3VzdG9tVmlld0ltcGw+IHtcbiAgICAvLyBDdXN0b21WaWV3SXNEZWZhdWx0IGlzIGEgcmVxdWlyZWQgcGFyYW1ldGVyLCBidXQgb3VyIEFQSSBoYXMgbm90IGJlZW4gdXBkYXRlZCB0byBhbGxvdyBpdCB0byBiZSBzcGVjaWZpZWQgeWV0LlxuICAgIC8vIFdlIHNob3VsZCBhZGQgYSAnZGVmYXVsdCcgcGFyYW1ldGVyIHRvIHRoZSBpbnRlcmZhY2UuXG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ3NhdmVDdXN0b21WaWV3QXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkN1c3RvbVZpZXdOYW1lXTogY3VzdG9tVmlld05hbWUsXG4gICAgICBbUGFyYW1ldGVySWQuQ3VzdG9tVmlld0lzRGVmYXVsdF06IGZhbHNlLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFZlcmJJZC5TYXZlV29ya2Jvb2tBc0N1c3RvbVZpZXcsIHBhcmFtZXRlcnMpLnRoZW48Q3VzdG9tVmlld0ltcGw+KChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tVmlldyA9IHJlc3BvbnNlLnJlc3VsdCBhcyBDdXN0b21WaWV3TW9kZWw7XG4gICAgICByZXR1cm4gbmV3IEN1c3RvbVZpZXdJbXBsKGN1c3RvbVZpZXcsIHRoaXMuX3JlZ2lzdHJ5SWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldEFjdGl2ZUN1c3RvbVZpZXdBc0RlZmF1bHRBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnc2V0QWN0aXZlQ3VzdG9tVmlld0FzRGVmYXVsdEFzeW5jJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuU2V0QWN0aXZlQ3VzdG9tVmlld0FzRGVmYXVsdCwgcGFyYW1ldGVycykudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUFzeW5jKGN1c3RvbVZpZXc6IEN1c3RvbVZpZXdJbXBsKTogUHJvbWlzZTxDdXN0b21WaWV3SW1wbD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnM6IEV4ZWN1dGVQYXJhbWV0ZXJzID0ge1xuICAgICAgW1BhcmFtZXRlcklkLkZ1bmN0aW9uTmFtZV06ICdzYXZlQXN5bmMnLFxuICAgICAgW1BhcmFtZXRlcklkLkN1c3RvbVZpZXdMdWlkXTogY3VzdG9tVmlldy5sdWlkLFxuICAgICAgW1BhcmFtZXRlcklkLkN1c3RvbVZpZXdOYW1lXTogY3VzdG9tVmlldy5uYW1lLFxuICAgICAgW1BhcmFtZXRlcklkLkN1c3RvbVZpZXdJc0RlZmF1bHRdOiBjdXN0b21WaWV3LmlzRGVmYXVsdCxcbiAgICAgIFtQYXJhbWV0ZXJJZC5DdXN0b21WaWV3SXNQdWJsaWNdOiBjdXN0b21WaWV3LnNoYXJlZCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuVXBkYXRlQ3VzdG9tVmlldywgcGFyYW1ldGVycykudGhlbjxDdXN0b21WaWV3SW1wbD4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21WaWV3ID0gcmVzcG9uc2UucmVzdWx0IGFzIEN1c3RvbVZpZXdNb2RlbDtcbiAgICAgIHJldHVybiBuZXcgQ3VzdG9tVmlld0ltcGwoY3VzdG9tVmlldywgdGhpcy5fcmVnaXN0cnlJZCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudFNyY0FzeW5jKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcGFyYW1ldGVyczogRXhlY3V0ZVBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRnVuY3Rpb25OYW1lXTogJ2dldEN1cnJlbnRTcmNBc3luYycsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLkdldEN1cnJlbnRTcmMsIHBhcmFtZXRlcnMpLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IERhc2hib2FyZE9iamVjdFZpc2liaWxpdHlUeXBlIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFBhcmFtZXRlcklkLCBWZXJiSWQgfSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgRXh0ZXJuYWxUb0ludGVybmFsRW51bU1hcHBpbmdzIGFzIEV4dGVybmFsRW51bUNvbnZlcnRlciB9IGZyb20gJy4uLy4uL0VudW1NYXBwaW5ncy9FeHRlcm5hbFRvSW50ZXJuYWxFbnVtTWFwcGluZ3MnO1xuaW1wb3J0IHsgRGFzaGJvYXJkT2JqZWN0SW1wbCB9IGZyb20gJy4uLy4uL0ltcGwvRGFzaGJvYXJkT2JqZWN0SW1wbCc7XG5pbXBvcnQgeyBFcnJvckhlbHBlcnMgfSBmcm9tICcuLi8uLi9VdGlscy9FcnJvckhlbHBlcnMnO1xuaW1wb3J0IHsgUGFyYW0gfSBmcm9tICcuLi8uLi9VdGlscy9QYXJhbSc7XG5pbXBvcnQgeyBTZXJ2aWNlTmFtZXMgfSBmcm9tICcuLi9TZXJ2aWNlUmVnaXN0cnknO1xuaW1wb3J0IHsgWm9uZVNlcnZpY2UgfSBmcm9tICcuLi9ab25lU2VydmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlSW1wbEJhc2UgfSBmcm9tICcuL1NlcnZpY2VJbXBsQmFzZSc7XG5cbmV4cG9ydCBjbGFzcyBab25lU2VydmljZUltcGwgZXh0ZW5kcyBTZXJ2aWNlSW1wbEJhc2UgaW1wbGVtZW50cyBab25lU2VydmljZSB7XG4gIHB1YmxpYyBnZXQgc2VydmljZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU2VydmljZU5hbWVzLlpvbmU7XG4gIH1cblxuICBwdWJsaWMgc2V0VmlzaWJpbGl0eUFzeW5jKFxuICAgIGRhc2hib2FyZDogc3RyaW5nLFxuICAgIGRhc2hib2FyZFpvbmVNYXA6IE1hcDxudW1iZXIsIERhc2hib2FyZE9iamVjdEltcGw+LFxuICAgIHpvbmVWaXNpYmlsaXR5TWFwOiBDb250cmFjdC5ab25lVmlzaWJpbGl0eU1hcCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgIFtQYXJhbWV0ZXJJZC5GdW5jdGlvbk5hbWVdOiAnc2V0VmlzaWJpbGl0eUFzeW5jJyxcbiAgICAgIFtQYXJhbWV0ZXJJZC5EYXNoYm9hcmRdOiBkYXNoYm9hcmQsXG4gICAgICBbUGFyYW1ldGVySWQuWm9uZUlkc1Zpc2liaWxpdHlNYXBdOiB7fSxcbiAgICB9O1xuXG4gICAgLy8gem9uZVZpc2liaWxpdHlNYXAgY2FuIGJlIGVpdGhlciBhbiBvYmplY3Qgb3IgYSBNYXAgLSBjb252ZXJ0IGl0IHRvIGEgTWFwXG4gICAgY29uc3QgcGFyYW1ldGVyQXNNYXAgPSBQYXJhbS5jb252ZXJ0UGFyYW1ldGVyVG9NYXAoem9uZVZpc2liaWxpdHlNYXAsICd6b25lVmlzaWJpbGl0eU1hcCcpO1xuXG4gICAgcGFyYW1ldGVyQXNNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgRXJyb3JIZWxwZXJzLnZlcmlmeVpvbmVJc1ZhbGlkKGRhc2hib2FyZFpvbmVNYXAsIE51bWJlci5wYXJzZUludChrZXksIDEwKSk7XG4gICAgICBFcnJvckhlbHBlcnMudmVyaWZ5RW51bVZhbHVlPERhc2hib2FyZE9iamVjdFZpc2liaWxpdHlUeXBlPih2YWx1ZSwgRGFzaGJvYXJkT2JqZWN0VmlzaWJpbGl0eVR5cGUsICdEYXNoYm9hcmRPYmplY3RWaXNpYmlsaXR5VHlwZScpO1xuICAgICAgcGFyYW1ldGVyc1tQYXJhbWV0ZXJJZC5ab25lSWRzVmlzaWJpbGl0eU1hcF1ba2V5XSA9IEV4dGVybmFsRW51bUNvbnZlcnRlci5zZXRWaXNpYmlsaXR5VHlwZS5jb252ZXJ0KHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoVmVyYklkLlNldFpvbmVWaXNpYmlsaXR5LCBwYXJhbWV0ZXJzKS50aGVuPHZvaWQ+KChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1vdmVBbmRSZXNpemVBc3luYyhcbiAgICBkYXNoYm9hcmQ6IHN0cmluZyxcbiAgICBkYXNoYm9hcmRab25lTWFwOiBNYXA8bnVtYmVyLCBEYXNoYm9hcmRPYmplY3RJbXBsPixcbiAgICBkYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGVBcnJheTogQ29udHJhY3QuRGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlQXJyYXksXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7XG4gICAgICBbUGFyYW1ldGVySWQuRGFzaGJvYXJkXTogZGFzaGJvYXJkLFxuICAgICAgW1BhcmFtZXRlcklkLkRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZUxpc3RdOiBkYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGVBcnJheSxcbiAgICB9O1xuXG4gICAgZGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlQXJyYXkuZm9yRWFjaCgoZGFzaGJvYXJkT2JqZWN0OiBDb250cmFjdC5EYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGUpID0+IHtcbiAgICAgIEVycm9ySGVscGVycy52ZXJpZnlab25lSXNWYWxpZEFuZEZsb2F0aW5nKGRhc2hib2FyZFpvbmVNYXAsIGRhc2hib2FyZE9iamVjdC5kYXNoYm9hcmRPYmplY3RJRCk7XG4gICAgICBFcnJvckhlbHBlcnMudmVyaWZ5V2lkdGhBbmRIZWlnaHRPZkRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZShkYXNoYm9hcmRPYmplY3QpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShWZXJiSWQuTW92ZUFuZFJlc2l6ZVpvbmVzLCBwYXJhbWV0ZXJzKS50aGVuPHZvaWQ+KChyZXNwb25zZSkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgVGFibGVJbmZvIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBhIHRhYmxlIHN1bW1hcnkuXG4gKiBUaGlzIGRvZXMgbm90IGZvbGxvdyB0aGUgSW1wbCBwYXR0ZXJuIGFzIGl0IGlzIGp1c3QgYSBwcm9wZXJ0eSBiYWcuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWJsZVN1bW1hcnkgaW1wbGVtZW50cyBDb250cmFjdC5UYWJsZVN1bW1hcnkge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfdGFibGVJbmZvOiBUYWJsZUluZm8pIHt9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlSW5mby5uYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUluZm8uaWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90YWJsZUluZm8uY29ubmVjdGlvbklkO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXN0b21TUUwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVJbmZvLmN1c3RvbVNRTDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgRW1iZWRkaW5nRXJyb3JDb2RlcywgRXJyb3JDb2RlcywgU2hhcmVkRXJyb3JDb2RlcyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5cbi8qKlxuICogQ3VzdG9tIGVycm9yIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUgZGVmYXVsdCBKYXZhU2NyaXB0IEVycm9yIG9iamVjdC5cbiAqIFRoaXMgYWxsb3dzIHVzIHRvIHByb3ZpZGUgYSBmaWVsZCB3aXRoIGEgc3BlY2lmaWMgZXJyb3IgY29kZVxuICogc28gdGhhdCBkZXZlbG9wZXJzIGNhbiBtb3JlIGVhc2lseSBwcm9ncmFtbWF0aWNhbGx5IHJlc3BvbmRcbiAqIHRvIGVycm9yIHNjZW5hcmlvcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhYmxlYXVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Vycm9yQ29kZTogRXJyb3JDb2RlcyB8IEVtYmVkZGluZ0Vycm9yQ29kZXMgfCBTaGFyZWRFcnJvckNvZGVzLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgJHtfZXJyb3JDb2RlfTogJHttZXNzYWdlfWApO1xuXG4gICAgLyp0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQtd2lraS9ibG9iL21hc3Rlci9CcmVha2luZy1DaGFuZ2VzLm1kI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29ya1xuICAgIC8vIEVycm9yIGluaGVyaXRhbmNlIGRvZXMgbm90IHdvcmsgcHJvcGVydGx5IHdoZW4gY29tcGlsaW5nIHRvIEVTNSwgdGhpcyBpcyBhIHdvcmthcm91bmQgdG8gZm9yY2VcbiAgICAvLyB0aGUgcHJvdG8gY2hhaW4gdG8gYmUgYnVpbHQgY29ycmVjdGx5LiAgU2VlIHRoZSBnaXRodWIgbGluayBhYm92ZSBmb3IgZGV0YWlscy5cbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVGFibGVhdUVycm9yLnByb3RvdHlwZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVycm9yQ29kZSgpOiBFcnJvckNvZGVzIHwgRW1iZWRkaW5nRXJyb3JDb2RlcyB8IFNoYXJlZEVycm9yQ29kZXMge1xuICAgIHJldHVybiB0aGlzLl9lcnJvckNvZGU7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIEludGVybmFsQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IERhdGFWYWx1ZSB9IGZyb20gJy4uL01vZGVscy9HZXREYXRhTW9kZWxzJztcblxuLyoqXG4gKiBJbiB2ZXJzaW9uIDIgb2YgdGhlIGludGVyZmFjZSwgd2Ugc2hvdWxkIGNvbGxhcHNlIHZhbHVlIGludG8gbmF0aXZlVmFsdWUsIGFuZCBkbyBhbGwgdGhpcyB3b3JrIG92ZXJcbiAqIGluIHRoZSBwbGF0Zm9ybS5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFWYWx1ZUZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIE1ha2VQYXJhbWV0ZXJEYXRhVmFsdWUoaW50ZXJuYWxEYXRhVmFsdWU6IEludGVybmFsQ29udHJhY3QuRGF0YVZhbHVlLCBkYXRhVHlwZTogSW50ZXJuYWxDb250cmFjdC5EYXRhVHlwZSk6IERhdGFWYWx1ZSB7XG4gICAgLy8gUGFyYW1ldGVyIHZhbHVlcyBhcmUgYWxsIHN0cmluZ3MsIGNvbnZlcnQgZnJvbSBzdHJpbmcgdG8gdmFsdWVcbiAgICByZXR1cm4gbmV3IERhdGFWYWx1ZShcbiAgICAgIGludGVybmFsRGF0YVZhbHVlLnZhbHVlLFxuICAgICAgSW50ZXJuYWxDb250cmFjdC5EYXRhVHlwZUNvbnZlcnRlci5jb252ZXJ0U3RyaW5nVmFsdWVUb05hdGl2ZVZhbHVlKGludGVybmFsRGF0YVZhbHVlLnZhbHVlLCBkYXRhVHlwZSksXG4gICAgICBpbnRlcm5hbERhdGFWYWx1ZS5mb3JtYXR0ZWRWYWx1ZSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBNYWtlRmlsdGVyRGF0YVZhbHVlKGludGVybmFsRGF0YVZhbHVlOiBJbnRlcm5hbENvbnRyYWN0LkRhdGFWYWx1ZSk6IERhdGFWYWx1ZSB7XG4gICAgLy8gRmlsdGVycyBhbHJlYWR5IGhhdmUgbmF0aXZlIHR5cGUgaW4gdmFsdWUsIGp1c3QgdXNlIHRoYXQgZm9yIG5hdGl2ZVZhbHVlIGFsc29cbiAgICByZXR1cm4gbmV3IERhdGFWYWx1ZShpbnRlcm5hbERhdGFWYWx1ZS52YWx1ZSwgaW50ZXJuYWxEYXRhVmFsdWUudmFsdWUsIGludGVybmFsRGF0YVZhbHVlLmZvcm1hdHRlZFZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgTWFrZVRhYmxlRGF0YVZhbHVlKGludGVybmFsRGF0YVZhbHVlOiBJbnRlcm5hbENvbnRyYWN0LkRhdGFWYWx1ZSwgZGF0YVR5cGU6IEludGVybmFsQ29udHJhY3QuRGF0YVR5cGUpOiBEYXRhVmFsdWUge1xuICAgIC8vIERhdGFUYWJsZXMgY29udGFpbiBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgZGF0ZSBhcyBzdHJpbmcgfCAnJW51bGwlXG4gICAgLy8gY29udmVydFZhbHVlVG9OYXRpdmVWYWx1ZSBjb252ZXJ0cyBkYXRlcyBhcyBzdHJpbmcgdG8gZGF0ZXMsIGFuZCBhbnkgc3BlY2lhbCB0byBudWxsXG4gICAgLy8gKGJvb2xlYW4sIG51bWJlcnMsIHN0cmluZ3MgYXJlIHBhc3NlZCB0aHJvdWdoKVxuICAgIC8vIEJlY2F1c2Ugb2YgSW5jbHVkZURhdGFWYWx1ZXNPcHRpb24gLSB3ZSBjYW4gaGF2ZSB1bmRlZmluZWQgdmFsdWVzLCB3aGljaCBhcmUgZGlmZmVyZW50IHRoYW4gYW55IHNwZWNpYWxcbiAgICByZXR1cm4gbmV3IERhdGFWYWx1ZShcbiAgICAgIGludGVybmFsRGF0YVZhbHVlLnZhbHVlLFxuICAgICAgaW50ZXJuYWxEYXRhVmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IEludGVybmFsQ29udHJhY3QuRGF0YVR5cGVDb252ZXJ0ZXIuY29udmVydFZhbHVlVG9OYXRpdmVWYWx1ZShpbnRlcm5hbERhdGFWYWx1ZS52YWx1ZSwgZGF0YVR5cGUpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaW50ZXJuYWxEYXRhVmFsdWUuZm9ybWF0dGVkVmFsdWUsXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBBIFByb21pc2Ugd3JhcHBlciBjbGFzcyBhbGxvd2luZyBmb3IgcmVzb2x2aW5nL3JlamVjdGluZyB0aGUgUHJvbWlzZSBvdXRzaWRlIHRoZSBjb250ZXh0IG9mIGl0cyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgRGVmZXJyZWRcbiAqIEB0ZW1wbGF0ZSBUUmVzb2x2ZSBUaGUgdHlwZSB1c2VkIHRvIHJlc29sdmUgdGhlIHByb21pc2UuXG4gKiBAdGVtcGxhdGUgVFJlamVjdCBUaGUgdHlwZSB1c2VkIHRvIHJlamVjdCB0aGUgcHJvbWlzZS4gRGVmYXVsdHMgdG8gYW55LlxuICogQGxpbmsgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM0NjM3NDM2XG4gKi9cbmV4cG9ydCBjbGFzcyBEZWZlcnJlZDxUUmVzb2x2ZSwgVFJlamVjdCA9IGFueT4ge1xuICBwcml2YXRlIF9wcm9taXNlOiBQcm9taXNlPFRSZXNvbHZlPjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZTogKHJlc3BvbnNlOiBUUmVzb2x2ZSB8IFByb21pc2VMaWtlPFRSZXNvbHZlPikgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfcmVqZWN0OiAocmVhc29uPzogVFJlamVjdCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBEZWZlcnJlZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZTxUUmVzb2x2ZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgUHJvbWlzZS5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtQcm9taXNlPFRSZXNvbHZlPn1cbiAgICovXG4gIGdldCBwcm9taXNlKCk6IFByb21pc2U8VFJlc29sdmU+IHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgd3JhcHBlZCBQcm9taXNlLlxuICAgKlxuICAgKiBAcGFyYW0geyhUUmVzb2x2ZSB8IFByb21pc2VMaWtlPFRSZXNvbHZlPil9IHJlc3BvbnNlIFRoZSBhcmd1bWVudCB0byBiZSByZXNvbHZlZCBieSB0aGUgUHJvbWlzZS5cbiAgICogQHJldHVybnMgeyp9ICB7dm9pZH1cbiAgICovXG4gIHJlc29sdmUocmVzcG9uc2U6IFRSZXNvbHZlIHwgUHJvbWlzZUxpa2U8VFJlc29sdmU+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9yZXNvbHZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzb2x2ZShyZXNwb25zZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtUUmVqZWN0fSBbcmVhc29uXSBUaGUgcmVhc29uIHdoeSB0aGUgUHJvbWlzZSByZWplY3RlZC5cbiAgICogQHJldHVybnMgeyp9ICB7dm9pZH1cbiAgICovXG4gIHJlamVjdChyZWFzb24/OiBUUmVqZWN0KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9yZWplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWplY3QocmVhc29uKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVW5yZWdpc3RlclRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IDMwMDAwO1xuIiwiaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi9UYWJsZWF1RXJyb3InO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgY29udmVydHMgZnJvbSBhIHNvdXJjZSBlbnVtIHZhbHVlIHRvIGRlc3RpbmF0aW9uIGVudW1cbiAqIHZhbHVlIGdpdmVuIGEgbWFwcGluZyBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiB3aGVuIGNvbnN0cnVjdGVkLlxuICpcbiAqIE5vdGU6IFRoaXMgZXhhY3Qgc2FtZSBjbGFzcyBpcyBkZWZpbmVkIGluIGFwaS1jb3JlLiAgR2l2ZW4gaXRzIHNtYWxsXG4gKiBuYXR1cmUsIGl0IGlzIG5vdCB3b3J0aCBoYXZpbmcgaW4gYSBzZXBhcmF0ZSBwcm9qZWN0IHRvIHNoYXJlIHRoaXMgYmV0d2VlblxuICogYXBpLWNvcmUgYW5kIGFwaS1zaGFyZWQuICBJZiBtb3JlIHV0aWxpdHkgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZCB0aGF0IGlzIHVzZWQgYnkgYXBpLWNvcmVcbiAqIGFuZCBhcGktc2hhcmVkIGJ1dCBoYXMgbm8gb3RoZXIgZGVwZW5kZWNpZXMsIGEgdXRpbHRpdHkgcHJvamVjdCBtaWdodCBiZSBtZXJpdGVkLFxuICogYW5kIHRoaXMgY2xhc3MgY291bGQgYmUgbW92ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnVtQ29udmVydGVyPFRTb3VyY2VUeXBlIGV4dGVuZHMgc3RyaW5nLCBURGVzdGluYXRpb25UeXBlPiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9tYXBwaW5nczogeyBbZW51bVZhbDogc3RyaW5nXTogVERlc3RpbmF0aW9uVHlwZSB9LCBwcml2YXRlIF9kZWZhdWx0VmFsPzogVERlc3RpbmF0aW9uVHlwZSkge31cblxuICBwdWJsaWMgY29udmVydChlbnVtVmFsOiBUU291cmNlVHlwZSwgdGhyb3dJZk1pc3Npbmc6IFNob3VsZFRocm93ID0gU2hvdWxkVGhyb3cuWWVzKTogVERlc3RpbmF0aW9uVHlwZSB7XG4gICAgaWYgKHRoaXMuX21hcHBpbmdzLmhhc093blByb3BlcnR5KGVudW1WYWwpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbWFwcGluZ3NbZW51bVZhbCBhcyBzdHJpbmddO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kZWZhdWx0VmFsICE9PSB1bmRlZmluZWQgJiYgdGhyb3dJZk1pc3NpbmcgIT09IFNob3VsZFRocm93Llllcykge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWw7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihFcnJvckNvZGVzLkludGVybmFsRXJyb3IsIGBFbnVtIE1hcHBpbmcgbm90IGZvdW5kIGZvcjogJHtlbnVtVmFsfWApO1xuICB9XG59XG5cbmV4cG9ydCBlbnVtIFNob3VsZFRocm93IHtcbiAgWWVzID0gJ3llcycsXG4gIE5vID0gJ25vJyxcbn1cbiIsImltcG9ydCB7IERhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZSwgU2hhcmVkRXJyb3JDb2RlcyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRPYmplY3RJbXBsIH0gZnJvbSAnLi4vSW1wbC9EYXNoYm9hcmRPYmplY3RJbXBsJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uL1RhYmxlYXVFcnJvcic7XG5pbXBvcnQgeyBQYXJhbSB9IGZyb20gJy4vUGFyYW0nO1xuXG5pbnRlcmZhY2UgRW51bUxpa2Uge1xuICB0b1N0cmluZygpOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNvbnN0cnVjdCBjb21tb24gZXJyb3JzIHRocm91Z2hvdXQgdGhlIGV4dGVybmFsXG4gKiBwcm9qZWN0cyAoYXBpLXNoYXJlZCwgZXh0ZW5zaW9ucy1hcGksIGV0Yy4pLiAgSXQgaGFzIHNvbWUgZHVwbGljYXRpb24gd2l0aFxuICogdGhlIEVycm9ySGVscGVycyBjbGFzcyBpbiBhcGktY29yZSwgYnV0IGlzIHNlcGFyYXRlIGR1ZSB0byB0aGUgbmVlZCB0byB0aHJvd1xuICogYW4gZXh0ZXJuYWwgVGFibGVhdUVycm9yIHZzLiBhbiBJbnRlcm5hbFRhYmxlYXVFcnJvci5cbiAqL1xuZXhwb3J0IGNsYXNzIEVycm9ySGVscGVycyB7XG4gIC8qKlxuICAgKiBUaHJvd3Mgd2l0aCBjb2RlIEludGVybmFsRXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBhcGlOYW1lIG5hbWUgb2YgYXBpIHRoYXQgd2FzIGNhbGxlZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXBpTm90SW1wbGVtZW50ZWQoYXBpTmFtZTogc3RyaW5nKTogVGFibGVhdUVycm9yIHtcbiAgICByZXR1cm4gbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludGVybmFsRXJyb3IsIGAke2FwaU5hbWV9IEFQSSBub3QgeWV0IGltcGxlbWVudGVkLmApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhbiBpbnRlcm5hbCBlcnJvciBpZiBhcmd1bWVudCBpcyBudWxsIG9yIHVuZGVmaW5lZC5cbiAgICpcbiAgICogQHBhcmFtIGFyZ3VtZW50VmFsdWUgdmFsdWUgdG8gdmVyaWZ5XG4gICAqIEBwYXJhbSBhcmd1bWVudE5hbWUgbmFtZSBvZiBhcmd1bWVudCB0byB2ZXJpZnlcbiAgICovXG4gIC8qdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG4gIHB1YmxpYyBzdGF0aWMgdmVyaWZ5SW50ZXJuYWxWYWx1ZShhcmd1bWVudFZhbHVlOiBhbnksIGFyZ3VtZW50TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGFyZ3VtZW50VmFsdWUgPT09IG51bGwgfHwgYXJndW1lbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgYCR7YXJndW1lbnRWYWx1ZX0gaXMgaW52YWxpZCB2YWx1ZSBmb3I6ICR7YXJndW1lbnROYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYW4gSW52YWxpZFBhcmFtZXRlciBlcnJvciBpZiBhcmd1bWVudCBpcyBudWxsIG9yIHVuZGVmaW5lZC5cbiAgICpcbiAgICogQHBhcmFtIGFyZ3VtZW50VmFsdWUgdmFsdWUgdG8gdmVyaWZ5XG4gICAqIEBwYXJhbSBhcmd1bWVudE5hbWUgbmFtZSBvZiBhcmd1bWVudCB0byB2ZXJpZnlcbiAgICovXG4gIC8qdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG4gIHB1YmxpYyBzdGF0aWMgdmVyaWZ5UGFyYW1ldGVyKGFyZ3VtZW50VmFsdWU6IGFueSwgYXJndW1lbnROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoYXJndW1lbnRWYWx1ZSA9PT0gbnVsbCB8fCBhcmd1bWVudFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLCBgJHthcmd1bWVudFZhbHVlfSBpcyBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXI6ICR7YXJndW1lbnROYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYW4gSW52YWxpZFBhcmFtZXRlciBlcnJvciBpZiBhcmd1bWVudCBpcyBub3QgdGhlIHNwZWNpZmllZCB0eXBlLlxuICAgKiBGb3Igb2JqZWN0cywgaXQganVzdCB0ZXN0cyB0aGF0IGl0IGlzIGFuIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0gYXJndW1lbnRWYWx1ZSB2YWx1ZSB0byB2ZXJpZnlcbiAgICogQHBhcmFtIGV4cGVjdGVkVHlwZSBleHBlY3RlZCByZXN1bHQgb2YgdHlwZW9mXG4gICAqIEBwYXJhbSBhcmd1bWVudE5hbWUgbmFtZSBvZiBhcmd1bWVudCB0byB2ZXJpZnlcbiAgICovXG4gIC8qdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG4gIHB1YmxpYyBzdGF0aWMgdmVyaWZ5UGFyYW1ldGVyVHlwZShhcmd1bWVudFZhbHVlOiBhbnksIGV4cGVjdGVkVHlwZTogc3RyaW5nLCBhcmd1bWVudE5hbWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRWYWx1ZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgYCR7YXJndW1lbnRWYWx1ZX0gaGFzIGludmFsaWQgdHlwZSBmb3IgcGFyYW1ldGVyOiAke2FyZ3VtZW50TmFtZX0uYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhbiBJbnZhbGlkUGFyYW1ldGVyIGVycm9yIGlmIGFyZ3VtZW50IGlzIGVtcHR5IHN0cmluZywgbnVsbCBvciB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSBhcmd1bWVudFZhbHVlIHZhbHVlIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gYXJndW1lbnROYW1lIG5hbWUgb2YgYXJndW1lbnQgdG8gdmVyaWZ5XG4gICAqL1xuICAvKnRzbGludDpkaXNhYmxlLW5leHQtbGluZSAqL1xuICBwdWJsaWMgc3RhdGljIHZlcmlmeVN0cmluZ1BhcmFtZXRlcihhcmd1bWVudFZhbHVlOiBzdHJpbmcsIGFyZ3VtZW50TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGFyZ3VtZW50VmFsdWUgPT09IG51bGwgfHwgYXJndW1lbnRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGFyZ3VtZW50VmFsdWUgPT09ICcnKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgYCR7YXJndW1lbnRWYWx1ZX0gaXMgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW10ZXI6ICR7YXJndW1lbnROYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBwYXNzZWQgdmFsdWUgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgdGhhdCBlbnVtLlxuICAgKiBUaHJvd3MgYW4gSW52YWxpZFBhcmFtZXRlciBlcnJvciBpZiB0aGUgZW51bSB2YWx1ZSBpcyBub3QgdmFsaWQuXG4gICAqXG4gICAqIFN0cmluZyBlbnVtcyBhcmUge3N0cmluZyA6IHN0cmluZ30gZGljdGlvbmFyaWVzIHdoaWNoIGFyZSBub3QgcmV2ZXJzZSBtYXBwYWJsZVxuICAgKiBUaGlzIGlzIGFuIHVnbHkgd29ya2Fyb3VuZFxuICAgKlxuICAgKiBAcGFyYW0gZW51bVZhbHVlIHZhbHVlIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gZW51bVR5cGUgZW51bSB0byB2ZXJpZnkgYWdhaW5zdFxuICAgKiBAcGFyYW0gZW51bU5hbWUgZW51bSBuYW1lIGZvciBjbGVhciBlcnJvciBtZXNzYWdlXG4gICAqL1xuICAvKnRzbGludDpkaXNhYmxlLW5leHQtbGluZSAqL1xuICBwdWJsaWMgc3RhdGljIHZlcmlmeUVudW1WYWx1ZTxFbnVtVHlwZSBleHRlbmRzIEVudW1MaWtlPihlbnVtVmFsdWU6IEVudW1UeXBlLCBlbnVtVHlwZTogYW55LCBlbnVtTmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IGlzVmFsaWQgPSBmYWxzZTtcbiAgICBPYmplY3Qua2V5cyhlbnVtVHlwZSkuZm9yRWFjaCgoZW51bUtleSkgPT4ge1xuICAgICAgaWYgKGVudW1UeXBlW2VudW1LZXldID09PSBlbnVtVmFsdWUudG9TdHJpbmcoKSkge1xuICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsIGAke2VudW1WYWx1ZX0gaXMgaW52YWxpZCB2YWx1ZSBmb3IgZW51bTogJHtlbnVtTmFtZX0uYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHBhc3NlZCB2YWx1ZSBpcyBiZXR3ZWVuIFttaW4sIG1heCkgLi4uIG1pbiA8PSB2YWx1ZSA8IG1heFxuICAgKiBUaHJvd3MgYW4gSW52YWxpZFBhcmFtZXRlciBlcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IHZhbGlkLlxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gdmVyaWZ5XG4gICAqIEBwYXJhbSBtaW4gICB2YWx1ZSBtdXN0IGJlID49IG1pblxuICAgKiBAcGFyYW0gbWF4ICAgdmFsdWUgbXVzdCBiZSA8IG1heFxuICAgKi9cbiAgLyp0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgcHVibGljIHN0YXRpYyB2ZXJpZnlSYW5nZSh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpIHtcbiAgICBsZXQgaXNWYWxpZCA9IG1pbiA8PSB2YWx1ZSAmJiB2YWx1ZSA8IG1heDtcblxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsIGAke3ZhbHVlfSBpcyBpbnZhbGlkIHZhbHVlIGZvciByYW5nZTogWyR7bWlufS4uJHttYXh9KWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGUgcGFyYW1zIG1pbiBhbmQgbWF4IGZvciBhcHBseWluZyByYW5nZSBmaWx0ZXIuXG4gICAqIFRocm93cyB3aXRoIGVycm9yIGNvZGUgSW52YWxpZFBhcmFtZXRlciBpZiByYW5nZSBpcyBpbnZhbGlkLlxuICAgKlxuICAgKiBAcGFyYW0gbWluIHJhbmdlIG1pblxuICAgKiBAcGFyYW0gbWF4IHJhbmdlIG1heFxuICAgKi9cbiAgLyp0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgcHVibGljIHN0YXRpYyB2ZXJpZnlSYW5nZVBhcmFtVHlwZShtaW46IGFueSwgbWF4OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIW1pbiAmJiAhbWF4KSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFNoYXJlZEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgJ1VuZXhwZWN0ZWQgaW52YWxpZCBwYXJhbSB2YWx1ZSwgYXQgbGVhc3Qgb25lIG9mIG1pbiBvciBtYXggaXMgcmVxdWlyZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbiAmJiAhUGFyYW0uaXNUeXBlTnVtYmVyKG1pbikgJiYgIVBhcmFtLmlzVHlwZURhdGUobWluKSkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihcbiAgICAgICAgU2hhcmVkRXJyb3JDb2Rlcy5JbnZhbGlkUGFyYW1ldGVyLFxuICAgICAgICAnVW5leHBlY3RlZCBpbnZhbGlkIHBhcmFtIHZhbHVlLCBvbmx5IERhdGUgYW5kIG51bWJlciBhcmUgYWxsb3dlZCBmb3IgcGFyYW1ldGVyIG1pbi4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobWF4ICYmICFQYXJhbS5pc1R5cGVOdW1iZXIobWF4KSAmJiAhUGFyYW0uaXNUeXBlRGF0ZShtYXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKFxuICAgICAgICBTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsXG4gICAgICAgICdVbmV4cGVjdGVkIGludmFsaWQgcGFyYW0gdmFsdWUsIG9ubHkgRGF0ZSBhbmQgbnVtYmVyIGFyZSBhbGxvd2VkIGZvciBwYXJhbWV0ZXIgbWF4LicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtaW4gJiYgbWF4ICYmIHR5cGVvZiBtaW4gIT09IHR5cGVvZiBtYXgpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoXG4gICAgICAgIFNoYXJlZEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlcixcbiAgICAgICAgJ1VuZXhwZWN0ZWQgaW52YWxpZCBwYXJhbSB2YWx1ZSwgcGFyYW1ldGVycyBtaW4gYW5kIG1heCBzaG91bGQgYmUgb2YgdGhlIHNhbWUgdHlwZS4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhhdCB0aGUgem9uZUlkIGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgZGFzaGJvYXJkLlxuICAgKiBUaHJvd3Mgd2l0aCBlcnJvciBjb2RlIEludmFsaWRQYXJhbWV0ZXIgaWYgZWl0aGVyIGNvbmRpdGlvbiBpcyBmYWxzZS5cbiAgICpcbiAgICogQHBhcmFtIGRhc2hib2FyZFpvbmVNYXAgQSBtYXAgb2Ygem9uZUlkJ3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGFzaGJvYXJkIG9iamVjdC5cbiAgICogQHBhcmFtIHpvbmVJRCBab25lSWQgdG8gYmUgdmFsaWRhdGVkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZlcmlmeVpvbmVJc1ZhbGlkKGRhc2hib2FyZFpvbmVNYXA6IE1hcDxudW1iZXIsIERhc2hib2FyZE9iamVjdEltcGw+LCB6b25lSUQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChkYXNoYm9hcmRab25lTWFwLmhhcyh6b25lSUQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihcbiAgICAgIFNoYXJlZEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlcixcbiAgICAgIGBVbmV4cGVjdGVkIGludmFsaWQgcGFyYW0gdmFsdWUsIERhc2hib2FyZCBPYmplY3QgSWQ6ICR7em9uZUlEfSBpcyBub3QgcHJlc2VudCBpbiBkYXNoYm9hcmQuYCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIHpvbmUgaXMgcHJlc2VudCBhbmQgZmxvYXRpbmcgaW4gdGhlIGN1cnJlbnQgZGFzaGJvYXJkLlxuICAgKiBUaHJvd3Mgd2l0aCBlcnJvciBjb2RlIEludmFsaWRQYXJhbWV0ZXIgaWYgZWl0aGVyIGNvbmRpdGlvbiBpcyBmYWxzZS5cbiAgICpcbiAgICogQHBhcmFtIGRhc2hib2FyZFpvbmVNYXAgQSBtYXAgb2Ygem9uZUlkJ3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGFzaGJvYXJkIG9iamVjdC5cbiAgICogQHBhcmFtIHpvbmVJRCBab25lSWQgdG8gYmUgdmFsaWRhdGVkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZlcmlmeVpvbmVJc1ZhbGlkQW5kRmxvYXRpbmcoZGFzaGJvYXJkWm9uZU1hcDogTWFwPG51bWJlciwgRGFzaGJvYXJkT2JqZWN0SW1wbD4sIHpvbmVJRDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGRhc2hib2FyZFpvbmVNYXAuaGFzKHpvbmVJRCkgJiYgZGFzaGJvYXJkWm9uZU1hcC5nZXQoem9uZUlEKSEuaXNGbG9hdGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoXG4gICAgICBTaGFyZWRFcnJvckNvZGVzLkludmFsaWRQYXJhbWV0ZXIsXG4gICAgICBgVW5leHBlY3RlZCBpbnZhbGlkIHBhcmFtIHZhbHVlLCBEYXNoYm9hcmQgT2JqZWN0IElkOiAke3pvbmVJRH0gaXMgbm90IHByZXNlbnQgb3IgaXMgYSBmaXhlZCB6b25lIGluIHRoZSBkYXNoYm9hcmQuYCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgd2lkdGggYW5kIGhlaWdodCBhcmUgPiAwIGZvciBlYWNoIERhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZSBvYmplY3QuXG4gICAqIFRocm93cyB3aXRoIGVycm9yIGNvZGUgSW52YWxpZFBhcmFtZXRlciBpZiBlaXRoZXIgY29uZGl0aW9uIGlzIGZhbHNlLlxuICAgKlxuICAgKiBAcGFyYW0gZGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlIERhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZSBvYmplY3QgZm9yIHdoaWNoIHdpZHRoIGFuZCBoZWlnaHQgd2lsbCBiZSB2YWxpZGF0ZWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmVyaWZ5V2lkdGhBbmRIZWlnaHRPZkRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZShcbiAgICBkYXNoYm9hcmRPYmplY3RQb3NpdGlvbkFuZFNpemVVcGRhdGU6IERhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKGRhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZS53aWR0aCA8IDAgfHwgZGFzaGJvYXJkT2JqZWN0UG9zaXRpb25BbmRTaXplVXBkYXRlLmhlaWdodCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoXG4gICAgICAgIFNoYXJlZEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlcixcbiAgICAgICAgYFVuZXhwZWN0ZWQgaW52YWxpZCBwYXJhbSB2YWx1ZSBmb3IgZGFzaGJvYXJkIG9iamVjdCBJRCAke2Rhc2hib2FyZE9iamVjdFBvc2l0aW9uQW5kU2l6ZVVwZGF0ZS5kYXNoYm9hcmRPYmplY3RJRH06YCArXG4gICAgICAgICAgYCBuZWdhdGl2ZSB3aWR0aHMgYW5kIGhlaWdodHMgYXJlIG5vdCBhbGxvd2VkLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJ0B0YWJsZWF1L2FwaS1leHRlcm5hbC1jb250cmFjdC1qcyc7XG5pbXBvcnQgeyBUYWJsZWF1RXJyb3IgfSBmcm9tICcuLi9UYWJsZWF1RXJyb3InO1xuaW1wb3J0IHsgRXJyb3JIZWxwZXJzIH0gZnJvbSAnLi9FcnJvckhlbHBlcnMnO1xuXG5leHBvcnQgY2xhc3MgUGFyYW0ge1xuICAvKipcbiAgICogc2VyaWFsaXplcyB0aGUgZGF0ZSBpbnRvIHRoZSBmb3JtYXQgdGhhdCB0aGUgc2VydmVyIGV4cGVjdHMuXG4gICAqIEBwYXJhbSBkYXRlIHRoZSBkYXRlIHRvIHNlcmlhbGl6ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzZXJpYWxpemVEYXRlRm9yUGxhdGZvcm0oZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeWVhcjogbnVtYmVyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIGNvbnN0IG1vbnRoOiBudW1iZXIgPSBkYXRlLmdldFVUQ01vbnRoKCkgKyAxO1xuICAgIGNvbnN0IGRheTogbnVtYmVyID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgY29uc3QgaGg6IG51bWJlciA9IGRhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBjb25zdCBtbTogbnVtYmVyID0gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG4gICAgY29uc3Qgc2VjOiBudW1iZXIgPSBkYXRlLmdldFVUQ1NlY29uZHMoKTtcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9ICR7aGh9OiR7bW19OiR7c2VjfWA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHNlcmlhbGl6ZUJvb2xlYW5Gb3JQbGF0Zm9ybShib29sOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYm9vbCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHNlcmlhbGl6ZU51bWJlckZvclBsYXRmb3JtKG51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVtLnRvU3RyaW5nKDEwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGUgaW5wdXQgaXMgYSBudW1iZXJcbiAgICovXG4gIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnkgKi9cbiAgcHVibGljIHN0YXRpYyBpc1R5cGVOdW1iZXIoaW5wdXQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8IGlucHV0IGluc3RhbmNlb2YgTnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoZSBpbnB1dCBpcyBhIERhdGVcbiAgICovXG4gIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnkgKi9cbiAgcHVibGljIHN0YXRpYyBpc1R5cGVEYXRlKGlucHV0OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaW5wdXQgaW5zdGFuY2VvZiBEYXRlO1xuICB9XG5cbiAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueSAqL1xuICBwdWJsaWMgc3RhdGljIGlzVHlwZVN0cmluZyhpbnB1dDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmc7XG4gIH1cblxuICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55ICovXG4gIHB1YmxpYyBzdGF0aWMgaXNUeXBlQm9vbChpbnB1dDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ2Jvb2xlYW4nIHx8IGlucHV0IGluc3RhbmNlb2YgQm9vbGVhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBpbnB1dCBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueSAqL1xuICBwdWJsaWMgc3RhdGljIGlzTnVsbE9yVW5kZWZpbmVkKGlucHV0OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnkgKi9cbiAgcHVibGljIHN0YXRpYyBzZXJpYWxpemVQYXJhbWV0ZXJWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoUGFyYW0uaXNUeXBlTnVtYmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFBhcmFtLnNlcmlhbGl6ZU51bWJlckZvclBsYXRmb3JtKHZhbHVlIGFzIG51bWJlcik7XG4gICAgfSBlbHNlIGlmIChQYXJhbS5pc1R5cGVEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFBhcmFtLnNlcmlhbGl6ZURhdGVGb3JQbGF0Zm9ybSh2YWx1ZSBhcyBEYXRlKTtcbiAgICB9IGVsc2UgaWYgKFBhcmFtLmlzVHlwZUJvb2wodmFsdWUpKSB7XG4gICAgICByZXR1cm4gUGFyYW0uc2VyaWFsaXplQm9vbGVhbkZvclBsYXRmb3JtKHZhbHVlIGFzIGJvb2xlYW4pO1xuICAgIH0gZWxzZSBpZiAoUGFyYW0uaXNUeXBlU3RyaW5nKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW50ZXJuYWxFcnJvciwgYFVuZXhwZWN0ZWQgaW52YWxpZCB2YWx1ZSBmb3I6ICR7dmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgdGhlIHBhcmFtZXRlciBpcyBhbHJlYWR5IGEgTWFwLCBvciBjb252ZXJ0cyBhbiBvYmplY3QgdG8gYSBNYXAuXG4gICAqIElmIHRoZSBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0LCB3ZSBjb252ZXJ0IGl0IHRvIGEgTWFwIHVzaW5nIE9iamVjdC5lbnRyaWVzLlxuICAgKiBAdGhyb3dzIGlmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IGFuIG9iamVjdCBvciBNYXBcbiAgICovXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgcHVibGljIHN0YXRpYyBjb252ZXJ0UGFyYW1ldGVyVG9NYXAocGFyYW06IG9iamVjdCwgcGFyYW1OYW1lOiBzdHJpbmcpOiBNYXA8YW55LCBhbnk+IHtcbiAgICBFcnJvckhlbHBlcnMudmVyaWZ5UGFyYW1ldGVyVHlwZShwYXJhbSwgJ29iamVjdCcsIHBhcmFtTmFtZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0pKSB7XG4gICAgICB0aHJvdyBuZXcgVGFibGVhdUVycm9yKEVycm9yQ29kZXMuSW52YWxpZFBhcmFtZXRlciwgYEV4cGVjdGluZyBvYmplY3Qgb3IgTWFwIGZvcjogJHtwYXJhbU5hbWV9LmApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbSBpbnN0YW5jZW9mIE1hcCA/IHBhcmFtIDogbmV3IE1hcChPYmplY3QuZW50cmllcyhwYXJhbSkpO1xuICB9XG5cbiAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueSAqL1xuICBwdWJsaWMgc3RhdGljIHRyeVBhcnNlTnVtYmVyKHZhbHVlOiBhbnkpOiB7IHBhcnNlZD86IG51bWJlcjsgc3VjY2VzczogYm9vbGVhbiB9IHtcbiAgICBpZiAoUGFyYW0uaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGlmIChQYXJhbS5pc1R5cGVOdW1iZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBwYXJzZWQ6IHZhbHVlIGFzIG51bWJlciwgc3VjY2VzczogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsdWVTdHJpbmcgPT09ICdOYU4nKSB7XG4gICAgICAvLyAnTmFOJyBwYXJzZXMgYXMgTmFOIHdoaWNoIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSBmYWlsZWQgcGFyc2UuXG4gICAgICByZXR1cm4geyBwYXJzZWQ6IE5hTiwgc3VjY2VzczogdHJ1ZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQodmFsdWVTdHJpbmcpO1xuICAgIGlmIChpc05hTihwYXJzZWQpKSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHBhcnNlZCwgc3VjY2VzczogdHJ1ZSB9O1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBDb250cmFjdCBmcm9tICdAdGFibGVhdS9hcGktZXh0ZXJuYWwtY29udHJhY3QtanMnO1xuaW1wb3J0IHsgU2hlZXRJbmZvLCBTaGVldFR5cGUsIFNpemVDb25zdHJhaW50IH0gZnJvbSAnQHRhYmxlYXUvYXBpLWludGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uL1RhYmxlYXVFcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBTaGVldFV0aWxzIHtcbiAgLy8gVGhpcyBpcyBhIGRpcmVjdCBwb3J0IGZyb20gU2hlZXRTaXplLmNzIC0gU2hlZXRTaXplRmFjdG9yeVxuICBwdWJsaWMgc3RhdGljIGdldFNoZWV0U2l6ZUZyb21TaXplQ29uc3RyYWludHMoc2l6ZUNvbnN0cmFpbnQ6IFNpemVDb25zdHJhaW50KTogQ29udHJhY3QuU2hlZXRTaXplIHtcbiAgICBjb25zdCB7IG1pbldpZHRoLCBtaW5IZWlnaHQsIG1heFdpZHRoLCBtYXhIZWlnaHQgfSA9IHNpemVDb25zdHJhaW50O1xuXG4gICAgaWYgKG1pbkhlaWdodCA9PT0gMCAmJiBtaW5XaWR0aCA9PT0gMCkge1xuICAgICAgaWYgKG1heEhlaWdodCA9PT0gMCAmJiBtYXhXaWR0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJlaGF2aW9yOiBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdXRvbWF0aWMsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJlaGF2aW9yOiBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdE1vc3QsXG4gICAgICAgIG1heFNpemU6IHsgd2lkdGg6IG1heFdpZHRoLCBoZWlnaHQ6IG1heEhlaWdodCB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobWF4SGVpZ2h0ID09PSAwICYmIG1heFdpZHRoID09PSAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiZWhhdmlvcjogQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3IuQXRMZWFzdCxcbiAgICAgICAgbWluU2l6ZTogeyB3aWR0aDogbWluV2lkdGgsIGhlaWdodDogbWluSGVpZ2h0IH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChtYXhIZWlnaHQgPT09IG1pbkhlaWdodCAmJiBtYXhXaWR0aCA9PT0gbWluV2lkdGggJiYgbWluV2lkdGggPiAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiZWhhdmlvcjogQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3IuRXhhY3RseSxcbiAgICAgICAgbWluU2l6ZTogeyB3aWR0aDogbWluV2lkdGgsIGhlaWdodDogbWluSGVpZ2h0IH0sXG4gICAgICAgIG1heFNpemU6IHsgd2lkdGg6IG1pbldpZHRoLCBoZWlnaHQ6IG1pbkhlaWdodCB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyAnRml0IFdpZHRoJyBmb3IgYSBEU0QgbGF5b3V0XG4gICAgY29uc3QgaXNEc2RMYXlvdXQgPSBtaW5XaWR0aCA9PT0gMCAmJiBtYXhXaWR0aCA9PT0gMDtcblxuICAgIHJldHVybiB7XG4gICAgICBiZWhhdmlvcjogQ29udHJhY3QuU2hlZXRTaXplQmVoYXZpb3IuUmFuZ2UsXG4gICAgICBtaW5TaXplOiB7IHdpZHRoOiBtaW5XaWR0aCwgaGVpZ2h0OiBtaW5IZWlnaHQgfSxcbiAgICAgIG1heFNpemU6IHsgd2lkdGg6IGlzRHNkTGF5b3V0ID8gMjE0NzQ4MzY0NyA6IG1heFdpZHRoLCBoZWlnaHQ6IG1heEhlaWdodCB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUF1dG9tYXRpY1NpemUoKTogQ29udHJhY3QuU2hlZXRTaXplIHtcbiAgICBsZXQgYmVoYXZpb3IgPSBDb250cmFjdC5TaGVldFNpemVCZWhhdmlvci5BdXRvbWF0aWM7XG4gICAgbGV0IG1pblNpemUgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICBsZXQgbWF4U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIHJldHVybiB7IGJlaGF2aW9yLCBtaW5TaXplLCBtYXhTaXplIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFB1Ymxpc2hlZFNoZWV0SW5mb0J5TmFtZShuYW1lOiBzdHJpbmcsIHNoZWV0SW5mb3M6IEFycmF5PFNoZWV0SW5mbz4pOiBTaGVldEluZm8gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNoZWV0SW5mbyA9IHNoZWV0SW5mb3MuZmluZCgoc2hlZXQpID0+IHNoZWV0Lm5hbWUgPT09IG5hbWUpO1xuICAgIHJldHVybiBzaGVldEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFNoZWV0VHlwZUVudW0oaW50ZXJuYWxTaGVldFR5cGU6IFNoZWV0VHlwZSk6IENvbnRyYWN0LlNoZWV0VHlwZSB7XG4gICAgbGV0IHNoZWV0VHlwZTogQ29udHJhY3QuU2hlZXRUeXBlO1xuICAgIHN3aXRjaCAoaW50ZXJuYWxTaGVldFR5cGUpIHtcbiAgICAgIGNhc2UgU2hlZXRUeXBlLldvcmtzaGVldDoge1xuICAgICAgICBzaGVldFR5cGUgPSBDb250cmFjdC5TaGVldFR5cGUuV29ya3NoZWV0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU2hlZXRUeXBlLkRhc2hib2FyZDoge1xuICAgICAgICBzaGVldFR5cGUgPSBDb250cmFjdC5TaGVldFR5cGUuRGFzaGJvYXJkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU2hlZXRUeXBlLlN0b3J5OiB7XG4gICAgICAgIHNoZWV0VHlwZSA9IENvbnRyYWN0LlNoZWV0VHlwZS5TdG9yeTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoQ29udHJhY3QuU2hhcmVkRXJyb3JDb2Rlcy5TZXJ2ZXJFcnJvciwgJ0ludmFsaWQgU2hlZXRUeXBlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaGVldFR5cGU7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzVmFsaWRTaGVldFNpemUoc2l6ZU9iamVjdDogQ29udHJhY3QuU2l6ZSB8IENvbnRyYWN0LlNoZWV0U2l6ZSk6IHNpemVPYmplY3QgaXMgQ29udHJhY3QuU2hlZXRTaXplIHtcbiAgICByZXR1cm4gKDxDb250cmFjdC5TaGVldFNpemU+c2l6ZU9iamVjdCkuYmVoYXZpb3IgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgQ29udHJhY3QgZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4uL1RhYmxlYXVFcnJvcic7XG5pbXBvcnQgeyBEZWZlcnJlZCwgVW5yZWdpc3RlclRpbWVvdXRJbk1pbGxpc2Vjb25kcyB9IGZyb20gJy4vRGVmZXJyZWQnO1xuXG4vKipcbiAqIEEgRGVmZXJyZWQgd3JhcHBlciBjbGFzcyBhZGRpbmcgZnVuY3Rpb25hbGl0eSB0byByZWplY3QgdW5yZXNwb25zaXZlIHByb21pc2VzIGFmdGVyIHRpbWVvdXRcbiAqXG4gKiB0aGlzIGNsYXNzIGhhbmRsZXMgdHdvIHRoaW5nczpcblxuICogICAgMS4gQWRkcyB0aW1lb3V0IGxvZ2ljIGZvciBkZWZlcnJlZFxuICogICAgMi4gSXQgYmxvY2tzIG11bHRpcGxlIGNhbGxzIGZyb20gZXhlY3V0aW5nIGF0IHRoZSBzYW1lIHRpbWUuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIFNob3J0TGl2ZWREZWZlcnJlZFxuICogQHRlbXBsYXRlIFRSZXNvbHZlIFRoZSB0eXBlIHVzZWQgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZS5cbiAqIEB0ZW1wbGF0ZSBUUmVqZWN0IFRoZSB0eXBlIHVzZWQgdG8gcmVqZWN0IHRoZSBwcm9taXNlLiBEZWZhdWx0cyB0byBhbnkuXG4gKlxuICovXG5leHBvcnQgY2xhc3MgU2hvcnRMaXZlZERlZmVycmVkPFRSZXNvbHZlLCBUUmVqZWN0ID0gYW55PiB7XG4gIHByaXZhdGUgX2RlZmVycmVkOiBEZWZlcnJlZDxUUmVzb2x2ZSwgVFJlamVjdD4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3RpbWVvdXRJZDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfdGltZW91dEluTWlsbGlzZWNvbmRzID0gVW5yZWdpc3RlclRpbWVvdXRJbk1pbGxpc2Vjb25kcykge31cblxuICBwdWJsaWMgZ2V0TmV3UHJvbWlzZU9yVGhyb3dJZkJ1c3koKTogUHJvbWlzZTxUUmVzb2x2ZT4ge1xuICAgIGlmICh0aGlzLl9kZWZlcnJlZCkge1xuICAgICAgdGhyb3cgbmV3IFRhYmxlYXVFcnJvcihDb250cmFjdC5TaGFyZWRFcnJvckNvZGVzLkFwaUV4ZWN1dGlvbkVycm9yLCAnVGhpcyBhcGkgY2Fubm90IGJlIGV4ZWN1dGVkIHRpbGwgcHJldmlvdXMgY2FsbCBpcyByZXNvbHZlZC4nKTtcbiAgICB9XG4gICAgdGhpcy5fZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcblxuICAgIHRoaXMuX3RpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVGFibGVhdUVycm9yKFxuICAgICAgICBDb250cmFjdC5TaGFyZWRFcnJvckNvZGVzLlRpbWVvdXQsXG4gICAgICAgIGBBcGkgZmFpbGVkIHRvIGNvbXBsZXRlIGluICR7dGhpcy5fdGltZW91dEluTWlsbGlzZWNvbmRzIC8gMTAwMH0gc2Vjb25kc2AsXG4gICAgICApO1xuICAgICAgdGhpcy5yZWplY3QoZXJyb3IpO1xuICAgIH0sIHRoaXMuX3RpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGVmZXJyZWQucHJvbWlzZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlKHJlc3BvbnNlOiBUUmVzb2x2ZSB8IFByb21pc2VMaWtlPFRSZXNvbHZlPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kZWZlcnJlZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCk7XG4gICAgICB0aGlzLl9kZWZlcnJlZC5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIHRoaXMuX2RlZmVycmVkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWplY3QoZXJyb3I6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kZWZlcnJlZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCk7XG4gICAgICB0aGlzLl9kZWZlcnJlZC5yZWplY3QoZXJyb3IpO1xuICAgICAgdGhpcy5fZGVmZXJyZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBFcnJvckNvZGVzIH0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbmltcG9ydCB7IFRhYmxlYXVFcnJvciB9IGZyb20gJy4vVGFibGVhdUVycm9yJztcbmltcG9ydCB7IFZlcnNpb25OdW1iZXJDb250cmFjdCB9IGZyb20gJy4vVmVyc2lvbk51bWJlckNvbnRyYWN0JztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGV4dGVuc2lvbnMsIGVtYmVkZGluZ1xuICogYW5kIGV4dGVuc2lvbnMtYXBpLXR5cGVzIGxpYnJhcnlcbiAqL1xuZXhwb3J0IGNsYXNzIFZlcnNpb25OdW1iZXIgaW1wbGVtZW50cyBWZXJzaW9uTnVtYmVyQ29udHJhY3Qge1xuICBwdWJsaWMgbWFqb3I6IG51bWJlcjtcbiAgcHVibGljIG1pbm9yOiBudW1iZXI7XG4gIHB1YmxpYyBmaXg6IG51bWJlcjtcbiAgcHVibGljIGJ1aWxkOiBudW1iZXI7XG4gIHB1YmxpYyBpc0FscGhhOiBib29sZWFuO1xuXG4gIC8vIHByaXZhdGUgY29uc3RydWN0b3Igc28gZXZlcnlvbmUgdXNlcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlXG4gIC8vIGJ1aWxkIG51bWJlcnMgaGF2ZSB0aGlzIGZvcm06IE0ubS5mLXByZS5OXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2ZXJzaW9uU3RyaW5nOiBzdHJpbmcsIGlzQWxwaGE6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBwYXJ0U3RyID0gdmVyc2lvblN0cmluZy5zcGxpdCgnLScpO1xuICAgIHRoaXMuYnVpbGQgPSB0aGlzLmdldEJ1aWxkTnVtYmVyKHBhcnRTdHJbMV0pO1xuICAgIHZlcnNpb25TdHJpbmcgPSBwYXJ0U3RyWzBdO1xuXG4gICAgY29uc3QgcGFydHMgPSB2ZXJzaW9uU3RyaW5nLnNwbGl0KCcuJykubWFwKChwKSA9PiBwYXJzZUludChwLCAxMCkpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBUYWJsZWF1RXJyb3IoRXJyb3JDb2Rlcy5JbnRlcm5hbEVycm9yLCBgSW52YWxpZCB2ZXJzaW9uIG51bWJlcjogJHt2ZXJzaW9uU3RyaW5nfWApO1xuICAgIH1cblxuICAgIHRoaXMubWFqb3IgPSBwYXJ0c1swXTtcbiAgICB0aGlzLm1pbm9yID0gcGFydHNbMV07XG4gICAgdGhpcy5maXggPSBwYXJ0c1syXTtcbiAgICB0aGlzLmlzQWxwaGEgPSBpc0FscGhhO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWlsZE51bWJlcihwcmVSZWxlYXNlU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vQnVpbGROdW1iZXIgPSAtMTtcbiAgICBpZiAoIXByZVJlbGVhc2VTdHJpbmcpIHtcbiAgICAgIHJldHVybiBub0J1aWxkTnVtYmVyO1xuICAgIH1cblxuICAgIC8vIFRoZSBwcmVSZWxlYXNlIHN0cmluZyBoYXMgdGhpcyBmb3JtOiBwcmUuTiwgYnV0IHdlIGRvbid0IGRlcGVuZCBvbiB0aGUgYWN0dWFsIHN0cmluZyBiZWluZyAncHJlJ1xuICAgIGNvbnN0IHBhcnRTdHIgPSBwcmVSZWxlYXNlU3RyaW5nLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIHBhcnRTdHJbMV0gPyBwYXJzZUludChwYXJ0U3RyWzFdLCAxMCkgOiBub0J1aWxkTnVtYmVyO1xuICB9XG5cbiAgcHVibGljIGdldCBmb3JtYXR0ZWRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm1ham9yfS4ke3RoaXMubWlub3J9LiR7dGhpcy5maXh9YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZnVsbEZvcm1hdHRlZFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubWFqb3J9LiR7dGhpcy5taW5vcn0uJHt0aGlzLmZpeH0tcHJlLiR7dGhpcy5idWlsZH1gO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBDcmVhdGVFeHRlcm5hbENvbXBhdGlibGVWZXJzaW9uQ29udmVydGVyLFxuICBFeGVjdXRlUGFyYW1ldGVycyxcbiAgRXhlY3V0ZVJlc3BvbnNlLFxuICBFeHRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlcixcbiAgSW50ZXJuYWxBcGlEaXNwYXRjaGVyLFxuICBJTlRFUk5BTF9DT05UUkFDVF9WRVJTSU9OLFxuICBOb3RpZmljYXRpb24sXG4gIE5vdGlmaWNhdGlvbkhhbmRsZXIsXG4gIFZlcmJJZCxcbiAgVmVyc2lvbkxlc3NUaGFuLFxuICBWZXJzaW9uTnVtYmVyLFxufSBmcm9tICdAdGFibGVhdS9hcGktaW50ZXJuYWwtY29udHJhY3QtanMnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBJbnRlcm5hbEFwaURpc3BhdGNoZXIgd2hpY2ggc3VwcG9ydHMgdXBncmFkaW5nIGFuZCBkb3duZ3JhZGluZyB0aGUgaW5wdXRcbiAqIGludGVybmFsIGNvbnRyYWN0IHRvIHRoZSB2ZXJzaW9uIHRoYXQgdGhpcyBtb2R1bGUgaXMgYnVpbHQgYWdhaW5zdFxuICpcbiAqIEBjbGFzcyBWZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXJcbiAqIEBpbXBsZW1lbnRzIHtJbnRlcm5hbEFwaURpc3BhdGNoZXJ9XG4gKi9cbmV4cG9ydCBjbGFzcyBWZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXIgaW1wbGVtZW50cyBJbnRlcm5hbEFwaURpc3BhdGNoZXIge1xuICBwcml2YXRlIF92ZXJzaW9uQ29udmVydGVyOiBFeHRlcm5hbENvbnRyYWN0VmVyc2lvbkNvbnZlcnRlcjtcbiAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uSGFuZGxlcnM6IEFycmF5PE5vdGlmaWNhdGlvbkhhbmRsZXI+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBWZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXJcbiAgICogV2UgaGF2ZSBtdWx0aXBsZSB2ZXJzaW9uIGNvbnZlcnRpbmcgZGlzcGF0Y2hlcnMgdGhhdCB3b3JrIHRvZ2V0aGVyLlxuICAgKiBJZiBuZWVkZWQsIHRoZSBWZXJzaW9uZWRFeHRlcm5hbEFwaURpc3BhdGNoZXIgd3JhcHMgZWl0aGVyIHRoZSBJbnRlcm5hbEFwaURpc3BhdGNoZXIgKGRlc2t0b3ApXG4gICAqIG9yIHRoZSBDcm9zc0ZyYW1lRGlzcGF0Y2hlciAoc2VydmVyKS5cbiAgICogVGhlIEludGVybmFsL0Nyb3NzRnJhbWUgZGlzcGF0Y2hlcnMgaGFuZGxlIGFuIHVwZGF0ZWQgcGxhdGZvcm0gd2l0aCBhbiBvbGRlciBleHRlcm5hbCBsaWJyYXJ5LlxuICAgKiAoVGhlIENyb3NzRnJhbWVEaXNwYXRjaGVyIHNlbmRzIG1lc3NhZ2VzIGFjcm9zcyB0aGUgZnJhbWUsIGFuZCBpdCBpcyBoYW5kbGVkIGJ5IHRoZSBQcmVzTGF5ZXJIYW5kbGVyLilcbiAgICogTWVhbndoaWxlLCB0aGUgVmVyc2lvbmVkRXh0ZXJuYWxBcGlEaXNwYXRjaGVyIGhhbmRsZXMgYW4gdXBkYXRlZCBleHRlcm5hbCBsaWJyYXJ5IHdpdGggYW4gb2xkZXIgcGxhdGZvcm0uXG5cbiAgICogQHBhcmFtIF9hcGlEZWxlZ2F0ZURpc3BhdGNoZXIgVGhlIGRlbGVnYXRlIHRoYXQgZG9lcyB0aGUgYWN0dWFsIHdvcmsuXG4gICAqIEBwYXJhbSBwbGF0Zm9ybVZlcnNpb25OdW1iZXIgVGhlIHZlcnNpb24gb2YgdGhlIGludGVybmFsIGNvbnRyYWN0IHdoaWNoIHRoZSBwbGF0Zm9ybSBtb2R1bGUgaXMgdXNpbmcuXG4gICAqIFRoaXMgbnVtYmVyIHdpbGwgYmUgdXNlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBkb3duZ3JhZGUgaW5jb21pbmcgY29tbWFuZHMgYW5kIHVwZ3JhZGUgdGhlIHJlc3VsdHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hcGlEZWxlZ2F0ZURpc3BhdGNoZXI6IEludGVybmFsQXBpRGlzcGF0Y2hlciwgcGxhdGZvcm1WZXJzaW9uTnVtYmVyOiBWZXJzaW9uTnVtYmVyKSB7XG4gICAgdGhpcy5fdmVyc2lvbkNvbnZlcnRlciA9IENyZWF0ZUV4dGVybmFsQ29tcGF0aWJsZVZlcnNpb25Db252ZXJ0ZXIoSU5URVJOQUxfQ09OVFJBQ1RfVkVSU0lPTiwgcGxhdGZvcm1WZXJzaW9uTnVtYmVyKTtcblxuICAgIHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzID0gW107XG4gICAgX2FwaURlbGVnYXRlRGlzcGF0Y2hlci5yZWdpc3Rlck5vdGlmaWNhdGlvbkhhbmRsZXIoKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZ3JhZGVkTm90aWZpY2F0aW9uID0gdGhpcy5fdmVyc2lvbkNvbnZlcnRlci51cGdyYWRlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbik7XG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiB7XG4gICAgICAgIGhhbmRsZXIodXBncmFkZWROb3RpZmljYXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG5lZWRzVmVyc2lvbkNvbnZlcnRlcihwbGF0Zm9ybVZlcnNpb246IFZlcnNpb25OdW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBJZiBvdXIgcGxhdGZvcm0gaXMgbGVzcyB0aGFuIGV4dGVybmFsIGxpYnJhcnkgdmVyc2lvbiwgdGhlbiB3ZSBuZWVkIGEgY29udmVydGVyXG4gICAgcmV0dXJuIFZlcnNpb25MZXNzVGhhbihwbGF0Zm9ybVZlcnNpb24sIElOVEVSTkFMX0NPTlRSQUNUX1ZFUlNJT04pO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGUodmVyYjogVmVyYklkLCBwYXJhbWV0ZXJzOiBFeGVjdXRlUGFyYW1ldGVycyk6IFByb21pc2U8RXhlY3V0ZVJlc3BvbnNlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRvd25ncmFkZVBhcmFtZXRlcnMgPSB0aGlzLl92ZXJzaW9uQ29udmVydGVyLmRvd25ncmFkZUV4ZWN1dGVDYWxsKHZlcmIsIHBhcmFtZXRlcnMpO1xuICAgICAgcmV0dXJuIHRoaXMuX2FwaURlbGVnYXRlRGlzcGF0Y2hlci5leGVjdXRlKGRvd25ncmFkZVBhcmFtZXRlcnMudmVyYiwgZG93bmdyYWRlUGFyYW1ldGVycy5wYXJhbWV0ZXJzKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCB1cGdyYWRlUmVzcG9uc2UgPSB0aGlzLl92ZXJzaW9uQ29udmVydGVyLnVwZ3JhZGVFeGVjdXRlUmV0dXJuKHJlc3BvbnNlLCB2ZXJiLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgcmV0dXJuIHVwZ3JhZGVSZXNwb25zZTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJOb3RpZmljYXRpb25IYW5kbGVyKGhhbmRsZXI6IE5vdGlmaWNhdGlvbkhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICB9XG5cbiAgcHVibGljIHVucmVnaXN0ZXJOb3RpZmljYXRpb25IYW5kbGVyKGhhbmRsZXI6IE5vdGlmaWNhdGlvbkhhbmRsZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycyA9IHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmZpbHRlcigoaCkgPT4gaCAhPT0gaGFuZGxlcik7XG4gIH1cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIi8qKlxuICogVGhpcyBpcyB5b3VyIG1haW4uIFRoaXMgaXMgd2hlcmUgeW91IHJlLWV4cG9ydCBldmVyeXRoaW5nIHlvdSB3YW50IHRvIGJlIHB1YmxpY2x5IGF2YWlsYWJsZS5cbiAqXG4gKiBUaGUgYnVpbGQgZW5mb3JjZXMgdGhhdCB0aGUgZmlsZSBoYXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgaXMgZXhwb3J0ZWQuXG4gKi9cblxuLy8gVGhlIGZvbGxvd2luZyBwb2x5ZmlsbHMgYXJlIG5lZWRlZCBmb3IgSUUxMVxuXG5pbXBvcnQgeyBBcGlWZXJzaW9uIH0gZnJvbSAnQHRhYmxlYXUvYXBpLXNoYXJlZC1qcyc7XG5pbXBvcnQgJ2NvcmUtanMvZXMvYXJyYXkvZmluZCc7XG5pbXBvcnQgJ2NvcmUtanMvZXMvYXJyYXkvZnJvbSc7XG5pbXBvcnQgJ2NvcmUtanMvZXMvbWFwJztcbmltcG9ydCAnY29yZS1qcy9lcy9udW1iZXIvaXMtaW50ZWdlcic7XG5pbXBvcnQgJ2NvcmUtanMvZXMvbnVtYmVyL2lzLW5hbic7XG5pbXBvcnQgJ2NvcmUtanMvZXMvbnVtYmVyL3BhcnNlLWZsb2F0JztcbmltcG9ydCAnY29yZS1qcy9lcy9udW1iZXIvcGFyc2UtaW50JztcbmltcG9ydCAnY29yZS1qcy9lcy9vYmplY3QvYXNzaWduJztcbmltcG9ydCAnY29yZS1qcy9lcy9vYmplY3QvZW50cmllcyc7XG5pbXBvcnQgJ2NvcmUtanMvZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnO1xuaW1wb3J0ICdjb3JlLWpzL2VzL3Byb21pc2UnO1xuLy8gRHVlIHRvIHRoZSB3YXkgd2UgY29uZmlndXJlZCB3ZWJwYWNrLCB3ZSBzaG91bGQgYmUgZXhwb3J0aW5nIHRoaW5ncyB3aGljaCB3aWxsIGJlIHVuZGVyXG4vLyBhIGdsb2JhbCB2YXJpYWJsZSBjYWxsZWQgXCJ0YWJsZWF1XCIuIEV4cG9ydCBldmVyeXRoaW5nIHdlIHdhbnQgdG8gYmUgdmlzaWJsZSB1bmRlciB0YWJsZWF1XG4vLyBmcm9tIHRoaXMgZmlsZS5cbmltcG9ydCB7IEV4dGVuc2lvbnNJbXBsIH0gZnJvbSAnLi9FeHRlbnNpb25zQXBpL0ltcGwvRXh0ZW5zaW9uc0ltcGwnO1xuaW1wb3J0IHsgRXh0ZW5zaW9ucyB9IGZyb20gJy4vRXh0ZW5zaW9uc0FwaS9OYW1lc3BhY2VzL0V4dGVuc2lvbnMnO1xuXG5kZWNsYXJlIGxldCBWRVJTSU9OX0lTX0FMUEhBOiBib29sZWFuO1xuY29uc3QgaXNBbHBoYTogYm9vbGVhbiA9IHR5cGVvZiBWRVJTSU9OX0lTX0FMUEhBICE9PSAndW5kZWZpbmVkJyA/IFZFUlNJT05fSVNfQUxQSEEgOiBmYWxzZTtcblxuZGVjbGFyZSBsZXQgQVBJX1ZFUlNJT05fTlVNQkVSOiBzdHJpbmc7XG5BcGlWZXJzaW9uLlNldFZlcnNpb25OdW1iZXIodHlwZW9mIEFQSV9WRVJTSU9OX05VTUJFUiAhPT0gJ3VuZGVmaW5lZCcgPyBBUElfVkVSU0lPTl9OVU1CRVIgOiAnMC4wLjAnLCBpc0FscGhhKTtcblxuY29uc3QgZXh0ZW5zaW9uSW1wbCA9IG5ldyBFeHRlbnNpb25zSW1wbCgpO1xuZXhwb3J0IGNvbnN0IGV4dGVuc2lvbnMgPSBuZXcgRXh0ZW5zaW9ucyhleHRlbnNpb25JbXBsKTtcblxuLy8gRXhwb3J0IEVudW1zXG4vLyBUaGVzZSBzaG93IHVwIHVuZGVyIHRoZSB0YWJsZWF1IG9iamVjdC4gSS5lLiB0YWJsZWF1LkV4dGVuc2lvbkNvbnRleHQuU2VydmVyXG5leHBvcnQge1xuICBBbmFseXRpY3NPYmplY3RUeXBlLFxuICBBbm5vdGF0aW9uVHlwZSxcbiAgQ2xhc3NOYW1lS2V5LFxuICBDb2x1bW5UeXBlLFxuICBEYXNoYm9hcmRMYXlvdXRDaGFuZ2UsXG4gIERhc2hib2FyZE9iamVjdFR5cGUsXG4gIERhc2hib2FyZE9iamVjdFZpc2liaWxpdHlUeXBlLFxuICBEYXRhVHlwZSxcbiAgRGF0ZVJhbmdlVHlwZSxcbiAgRGlhbG9nU3R5bGUsXG4gIEVuY29kaW5nVHlwZSxcbiAgRXJyb3JDb2RlcyxcbiAgRXh0ZW5zaW9uQ29udGV4dCxcbiAgRXh0ZW5zaW9uTW9kZSxcbiAgRmllbGRBZ2dyZWdhdGlvblR5cGUsXG4gIEZpZWxkUm9sZVR5cGUsXG4gIEZpbHRlckRvbWFpblR5cGUsXG4gIEZpbHRlck51bGxPcHRpb24sXG4gIEZpbHRlclR5cGUsXG4gIEZpbHRlclVwZGF0ZVR5cGUsXG4gIEhpZXJhcmNoaWNhbExldmVsU2VsZWN0aW9uU3RhdGUsXG4gIEluY2x1ZGVEYXRhVmFsdWVzT3B0aW9uLFxuICBNYXJrVHlwZSxcbiAgUGFyYW1ldGVyVmFsdWVUeXBlLFxuICBQZXJpb2RUeXBlLFxuICBRdWlja1RhYmxlQ2FsY1R5cGUsXG4gIFJlbGF0aXZlRGF0ZUZpbHRlck9wdGlvbnMsXG4gIFJlcGxheVNwZWVkVHlwZSxcbiAgU2VsZWN0aW9uVXBkYXRlVHlwZSxcbiAgU2hlZXRUeXBlLFxuICBTb3J0RGlyZWN0aW9uLFxuICBUYWJsZWF1RXZlbnRUeXBlLFxuICBUcmVuZExpbmVNb2RlbFR5cGUsXG4gIFZpekltYWdlRW5jb2RpbmdUeXBlLFxuICBWaXpJbWFnZVBhbGV0dGVUeXBlLFxuICBWaXpJbWFnZVNpemVTZXR0aW5nQWxpZ25tZW50VHlwZSxcbiAgVml6SW1hZ2VTaXplU2V0dGluZ1R5cGUsXG4gIFZpekltYWdlU29ydERpcmVjdGlvblR5cGUsXG4gIFpvbmVWaXNpYmlsaXR5VHlwZSxcbn0gZnJvbSAnQHRhYmxlYXUvYXBpLWV4dGVybmFsLWNvbnRyYWN0LWpzJztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/lib/tableau.extensions.1.10.0.min.js b/lib/tableau.extensions.1.10.0.min.js new file mode 100644 index 00000000..1442f7ee --- /dev/null +++ b/lib/tableau.extensions.1.10.0.min.js @@ -0,0 +1,2 @@ +(()=>{var e={163:(e,t,r)=>{r(9228);var n=r(8791);e.exports=n("Array","find")},6916:(e,t,r)=>{r(8673),r(7233);var n=r(9276);e.exports=n.Array.from},9618:(e,t,r)=>{r(5735),r(9321),r(8188),r(8673);var n=r(9276);e.exports=n.Map},5611:(e,t,r)=>{r(3132);var n=r(9276);e.exports=n.Number.isInteger},2316:(e,t,r)=>{r(4586);var n=r(9276);e.exports=n.Number.isNaN},119:(e,t,r)=>{r(8836);var n=r(9276);e.exports=n.Number.parseFloat},1980:(e,t,r)=>{r(7208);var n=r(9276);e.exports=n.Number.parseInt},47:(e,t,r)=>{r(3105);var n=r(9276);e.exports=n.Object.assign},188:(e,t,r)=>{r(5883);var n=r(9276);e.exports=n.Object.entries},5956:(e,t,r)=>{r(2506);var n=r(9276);e.exports=n.Object.setPrototypeOf},4137:(e,t,r)=>{r(5738),r(5735),r(8188),r(3439),r(7919),r(7178),r(1515),r(8673);var n=r(9276);e.exports=n.Promise},7111:(e,t,r)=>{var n=r(9859),i=r(6733),o=r(9821),a=n.TypeError;e.exports=function(e){if(i(e))return e;throw a(o(e)+" is not a function")}},7988:(e,t,r)=>{var n=r(9859),i=r(2359),o=r(9821),a=n.TypeError;e.exports=function(e){if(i(e))return e;throw a(o(e)+" is not a constructor")}},8505:(e,t,r)=>{var n=r(9859),i=r(6733),o=n.String,a=n.TypeError;e.exports=function(e){if("object"==typeof e||i(e))return e;throw a("Can't set "+o(e)+" as a prototype")}},9736:(e,t,r)=>{var n=r(95),i=r(7263),o=r(1787),a=n("unscopables"),s=Array.prototype;null==s[a]&&o.f(s,a,{configurable:!0,value:i(null)}),e.exports=function(e){s[a][e]=!0}},7728:(e,t,r)=>{var n=r(9859),i=r(1321),o=n.TypeError;e.exports=function(e,t){if(i(t,e))return e;throw o("Incorrect invocation")}},1176:(e,t,r)=>{var n=r(9859),i=r(5052),o=n.String,a=n.TypeError;e.exports=function(e){if(i(e))return e;throw a(o(e)+" is not an object")}},507:(e,t,r)=>{"use strict";var n=r(9859),i=r(7636),o=r(266),a=r(2991),s=r(4960),u=r(1943),l=r(2359),c=r(9646),p=r(2324),d=r(8403),f=r(8830),y=n.Array;e.exports=function(e){var t=a(e),r=l(this),n=arguments.length,h=n>1?arguments[1]:void 0,m=void 0!==h;m&&(h=i(h,n>2?arguments[2]:void 0));var g,v,b,I,S,_,T=f(t),P=0;if(!T||this==y&&u(T))for(g=c(t),v=r?new this(g):y(g);g>P;P++)_=m?h(t[P],P):t[P],p(v,P,_);else for(S=(I=d(t,T)).next,v=r?new this:[];!(b=o(S,I)).done;P++)_=m?s(I,h,[b.value,P],!0):b.value,p(v,P,_);return v.length=P,v}},9540:(e,t,r)=>{var n=r(905),i=r(3231),o=r(9646),a=function(e){return function(t,r,a){var s,u=n(t),l=o(u),c=i(a,l);if(e&&r!=r){for(;l>c;)if((s=u[c++])!=s)return!0}else for(;l>c;c++)if((e||c in u)&&u[c]===r)return e||c||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},9996:(e,t,r)=>{var n=r(7636),i=r(5968),o=r(9337),a=r(2991),s=r(9646),u=r(7501),l=i([].push),c=function(e){var t=1==e,r=2==e,i=3==e,c=4==e,p=6==e,d=7==e,f=5==e||p;return function(y,h,m,g){for(var v,b,I=a(y),S=o(I),_=n(h,m),T=s(S),P=0,A=g||u,E=t?A(y,T):r||d?A(y,0):void 0;T>P;P++)if((f||P in S)&&(b=_(v=S[P],P,I),e))if(t)E[P]=b;else if(b)switch(e){case 3:return!0;case 5:return v;case 6:return P;case 2:l(E,v)}else switch(e){case 4:return!1;case 7:l(E,v)}return p?-1:i||c?c:E}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterReject:c(7)}},1909:(e,t,r)=>{var n=r(5968);e.exports=n([].slice)},8760:(e,t,r)=>{var n=r(9859),i=r(3718),o=r(2359),a=r(5052),s=r(95)("species"),u=n.Array;e.exports=function(e){var t;return i(e)&&(t=e.constructor,(o(t)&&(t===u||i(t.prototype))||a(t)&&null===(t=t[s]))&&(t=void 0)),void 0===t?u:t}},7501:(e,t,r)=>{var n=r(8760);e.exports=function(e,t){return new(n(e))(0===t?0:t)}},4960:(e,t,r)=>{var n=r(1176),i=r(7281);e.exports=function(e,t,r,o){try{return o?t(n(r)[0],r[1]):t(r)}catch(t){i(e,"throw",t)}}},4575:(e,t,r)=>{var n=r(95)("iterator"),i=!1;try{var o=0,a={next:function(){return{done:!!o++}},return:function(){i=!0}};a[n]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var r=!1;try{var o={};o[n]=function(){return{next:function(){return{done:r=!0}}}},e(o)}catch(e){}return r}},7079:(e,t,r)=>{var n=r(5968),i=n({}.toString),o=n("".slice);e.exports=function(e){return o(i(e),8,-1)}},1589:(e,t,r)=>{var n=r(9859),i=r(1601),o=r(6733),a=r(7079),s=r(95)("toStringTag"),u=n.Object,l="Arguments"==a(function(){return arguments}());e.exports=i?a:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=u(e),s))?r:l?a(t):"Object"==(n=a(t))&&o(t.callee)?"Arguments":n}},1590:(e,t,r)=>{var n=r(5968),i=r(1909),o=n("".replace),a=n("".split),s=n([].join),u=String(Error("zxcasd").stack),l=/\n\s*at [^:]*:[^\n]*/,c=l.test(u),p=/@[^\n]*\n/.test(u)&&!/zxcasd/.test(u);e.exports=function(e,t){if("string"!=typeof e)return e;if(c)for(;t--;)e=o(e,l,"");else if(p)return s(i(a(e,"\n"),t),"\n");return e}},8081:(e,t,r)=>{"use strict";var n=r(1787).f,i=r(7263),o=r(8787),a=r(7636),s=r(7728),u=r(9003),l=r(7675),c=r(1832),p=r(7400),d=r(5926).fastKey,f=r(6407),y=f.set,h=f.getterFor;e.exports={getConstructor:function(e,t,r,l){var c=e((function(e,n){s(e,f),y(e,{type:t,index:i(null),first:void 0,last:void 0,size:0}),p||(e.size=0),null!=n&&u(n,e[l],{that:e,AS_ENTRIES:r})})),f=c.prototype,m=h(t),g=function(e,t,r){var n,i,o=m(e),a=v(e,t);return a?a.value=r:(o.last=a={index:i=d(t,!0),key:t,value:r,previous:n=o.last,next:void 0,removed:!1},o.first||(o.first=a),n&&(n.next=a),p?o.size++:e.size++,"F"!==i&&(o.index[i]=a)),e},v=function(e,t){var r,n=m(e),i=d(t);if("F"!==i)return n.index[i];for(r=n.first;r;r=r.next)if(r.key==t)return r};return o(f,{clear:function(){for(var e=m(this),t=e.index,r=e.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete t[r.index],r=r.next;e.first=e.last=void 0,p?e.size=0:this.size=0},delete:function(e){var t=this,r=m(t),n=v(t,e);if(n){var i=n.next,o=n.previous;delete r.index[n.index],n.removed=!0,o&&(o.next=i),i&&(i.previous=o),r.first==n&&(r.first=i),r.last==n&&(r.last=o),p?r.size--:t.size--}return!!n},forEach:function(e){for(var t,r=m(this),n=a(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:r.first;)for(n(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!v(this,e)}}),o(f,r?{get:function(e){var t=v(this,e);return t&&t.value},set:function(e,t){return g(this,0===e?0:e,t)}}:{add:function(e){return g(this,e=0===e?0:e,e)}}),p&&n(f,"size",{get:function(){return m(this).size}}),c},setStrong:function(e,t,r){var n=t+" Iterator",i=h(t),o=h(n);l(e,t,(function(e,t){y(this,{type:n,target:e,state:i(e),kind:t,last:void 0})}),(function(){for(var e=o(this),t=e.kind,r=e.last;r&&r.removed;)r=r.previous;return e.target&&(e.last=r=r?r.next:e.state.first)?"keys"==t?{value:r.key,done:!1}:"values"==t?{value:r.value,done:!1}:{value:[r.key,r.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),r?"entries":"values",!r,!0),c(t)}}},9789:(e,t,r)=>{"use strict";var n=r(3103),i=r(9859),o=r(5968),a=r(6541),s=r(7487),u=r(5926),l=r(9003),c=r(7728),p=r(6733),d=r(5052),f=r(4229),y=r(4575),h=r(4555),m=r(835);e.exports=function(e,t,r){var g=-1!==e.indexOf("Map"),v=-1!==e.indexOf("Weak"),b=g?"set":"add",I=i[e],S=I&&I.prototype,_=I,T={},P=function(e){var t=o(S[e]);s(S,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(v&&!d(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return v&&!d(e)?void 0:t(this,0===e?0:e)}:"has"==e?function(e){return!(v&&!d(e))&&t(this,0===e?0:e)}:function(e,r){return t(this,0===e?0:e,r),this})};if(a(e,!p(I)||!(v||S.forEach&&!f((function(){(new I).entries().next()})))))_=r.getConstructor(t,e,g,b),u.enable();else if(a(e,!0)){var A=new _,E=A[b](v?{}:-0,1)!=A,w=f((function(){A.has(1)})),D=y((function(e){new I(e)})),O=!v&&f((function(){for(var e=new I,t=5;t--;)e[b](t,t);return!e.has(-0)}));D||((_=t((function(e,t){c(e,S);var r=m(new I,e,_);return null!=t&&l(t,r[b],{that:r,AS_ENTRIES:g}),r}))).prototype=S,S.constructor=_),(w||O)&&(P("delete"),P("has"),g&&P("get")),(O||E)&&P(b),v&&S.clear&&delete S.clear}return T[e]=_,n({global:!0,forced:_!=I},T),h(_,e),v||r.setStrong(_,e,g),_}},7081:(e,t,r)=>{var n=r(8270),i=r(4826),o=r(7933),a=r(1787);e.exports=function(e,t){for(var r=i(t),s=a.f,u=o.f,l=0;l{var n=r(4229);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},3723:(e,t,r)=>{"use strict";var n=r(693).IteratorPrototype,i=r(7263),o=r(5358),a=r(4555),s=r(5495),u=function(){return this};e.exports=function(e,t,r){var l=t+" Iterator";return e.prototype=i(n,{next:o(1,r)}),a(e,l,!1,!0),s[l]=u,e}},5762:(e,t,r)=>{var n=r(7400),i=r(1787),o=r(5358);e.exports=n?function(e,t,r){return i.f(e,t,o(1,r))}:function(e,t,r){return e[t]=r,e}},5358:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},2324:(e,t,r)=>{"use strict";var n=r(9310),i=r(1787),o=r(5358);e.exports=function(e,t,r){var a=n(t);a in e?i.f(e,a,o(0,r)):e[a]=r}},7675:(e,t,r)=>{"use strict";var n=r(3103),i=r(266),o=r(4231),a=r(1805),s=r(6733),u=r(3723),l=r(7567),c=r(6540),p=r(4555),d=r(5762),f=r(7487),y=r(95),h=r(5495),m=r(693),g=a.PROPER,v=a.CONFIGURABLE,b=m.IteratorPrototype,I=m.BUGGY_SAFARI_ITERATORS,S=y("iterator"),_="keys",T="values",P="entries",A=function(){return this};e.exports=function(e,t,r,a,y,m,E){u(r,t,a);var w,D,O,x=function(e){if(e===y&&R)return R;if(!I&&e in N)return N[e];switch(e){case _:case T:case P:return function(){return new r(this,e)}}return function(){return new r(this)}},F=t+" Iterator",C=!1,N=e.prototype,M=N[S]||N["@@iterator"]||y&&N[y],R=!I&&M||x(y),V="Array"==t&&N.entries||M;if(V&&(w=l(V.call(new e)))!==Object.prototype&&w.next&&(o||l(w)===b||(c?c(w,b):s(w[S])||f(w,S,A)),p(w,F,!0,!0),o&&(h[F]=A)),g&&y==T&&M&&M.name!==T&&(!o&&v?d(N,"name",T):(C=!0,R=function(){return i(M,this)})),y)if(D={values:x(T),keys:m?R:x(_),entries:x(P)},E)for(O in D)(I||C||!(O in N))&&f(N,O,D[O]);else n({target:t,proto:!0,forced:I||C},D);return o&&!E||N[S]===R||f(N,S,R,{name:y}),h[t]=R,D}},7400:(e,t,r)=>{var n=r(4229);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},2635:(e,t,r)=>{var n=r(9859),i=r(5052),o=n.document,a=i(o)&&i(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},8639:e=>{e.exports="object"==typeof window},8983:(e,t,r)=>{var n=r(598),i=r(9859);e.exports=/ipad|iphone|ipod/i.test(n)&&void 0!==i.Pebble},2023:(e,t,r)=>{var n=r(598);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},8801:(e,t,r)=>{var n=r(7079),i=r(9859);e.exports="process"==n(i.process)},263:(e,t,r)=>{var n=r(598);e.exports=/web0s(?!.*chrome)/i.test(n)},598:(e,t,r)=>{var n=r(1333);e.exports=n("navigator","userAgent")||""},6358:(e,t,r)=>{var n,i,o=r(9859),a=r(598),s=o.process,u=o.Deno,l=s&&s.versions||u&&u.version,c=l&&l.v8;c&&(i=(n=c.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!i&&a&&(!(n=a.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=a.match(/Chrome\/(\d+)/))&&(i=+n[1]),e.exports=i},8791:(e,t,r)=>{var n=r(9859),i=r(5968);e.exports=function(e,t){return i(n[e].prototype[t])}},3837:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},373:(e,t,r)=>{var n=r(4229),i=r(5358);e.exports=!n((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",i(1,7)),7!==e.stack)}))},3103:(e,t,r)=>{var n=r(9859),i=r(7933).f,o=r(5762),a=r(7487),s=r(2079),u=r(7081),l=r(6541);e.exports=function(e,t){var r,c,p,d,f,y=e.target,h=e.global,m=e.stat;if(r=h?n:m?n[y]||s(y,{}):(n[y]||{}).prototype)for(c in t){if(d=t[c],p=e.noTargetGet?(f=i(r,c))&&f.value:r[c],!l(h?c:y+(m?".":"#")+c,e.forced)&&void 0!==p){if(typeof d==typeof p)continue;u(d,p)}(e.sham||p&&p.sham)&&o(d,"sham",!0),a(r,c,d,e)}}},4229:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},8476:(e,t,r)=>{var n=r(4229);e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},3171:e=>{var t=Function.prototype,r=t.apply,n=t.bind,i=t.call;e.exports="object"==typeof Reflect&&Reflect.apply||(n?i.bind(r):function(){return i.apply(r,arguments)})},7636:(e,t,r)=>{var n=r(5968),i=r(7111),o=n(n.bind);e.exports=function(e,t){return i(e),void 0===t?e:o?o(e,t):function(){return e.apply(t,arguments)}}},266:e=>{var t=Function.prototype.call;e.exports=t.bind?t.bind(t):function(){return t.apply(t,arguments)}},1805:(e,t,r)=>{var n=r(7400),i=r(8270),o=Function.prototype,a=n&&Object.getOwnPropertyDescriptor,s=i(o,"name"),u=s&&"something"===function(){}.name,l=s&&(!n||n&&a(o,"name").configurable);e.exports={EXISTS:s,PROPER:u,CONFIGURABLE:l}},5968:e=>{var t=Function.prototype,r=t.bind,n=t.call,i=r&&r.bind(n);e.exports=r?function(e){return e&&i(n,e)}:function(e){return e&&function(){return n.apply(e,arguments)}}},1333:(e,t,r)=>{var n=r(9859),i=r(6733),o=function(e){return i(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?o(n[e]):n[e]&&n[e][t]}},8830:(e,t,r)=>{var n=r(1589),i=r(5300),o=r(5495),a=r(95)("iterator");e.exports=function(e){if(null!=e)return i(e,a)||i(e,"@@iterator")||o[n(e)]}},8403:(e,t,r)=>{var n=r(9859),i=r(266),o=r(7111),a=r(1176),s=r(9821),u=r(8830),l=n.TypeError;e.exports=function(e,t){var r=arguments.length<2?u(e):t;if(o(r))return a(i(r,e));throw l(s(e)+" is not iterable")}},5300:(e,t,r)=>{var n=r(7111);e.exports=function(e,t){var r=e[t];return null==r?void 0:n(r)}},9859:(e,t,r)=>{var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof r.g&&r.g)||function(){return this}()||Function("return this")()},8270:(e,t,r)=>{var n=r(5968),i=r(2991),o=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return o(i(e),t)}},5977:e=>{e.exports={}},4665:(e,t,r)=>{var n=r(9859);e.exports=function(e,t){var r=n.console;r&&r.error&&(1==arguments.length?r.error(e):r.error(e,t))}},3777:(e,t,r)=>{var n=r(1333);e.exports=n("document","documentElement")},4394:(e,t,r)=>{var n=r(7400),i=r(4229),o=r(2635);e.exports=!n&&!i((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},9337:(e,t,r)=>{var n=r(9859),i=r(5968),o=r(4229),a=r(7079),s=n.Object,u=i("".split);e.exports=o((function(){return!s("z").propertyIsEnumerable(0)}))?function(e){return"String"==a(e)?u(e,""):s(e)}:s},835:(e,t,r)=>{var n=r(6733),i=r(5052),o=r(6540);e.exports=function(e,t,r){var a,s;return o&&n(a=t.constructor)&&a!==r&&i(s=a.prototype)&&s!==r.prototype&&o(e,s),e}},8511:(e,t,r)=>{var n=r(5968),i=r(6733),o=r(5353),a=n(Function.toString);i(o.inspectSource)||(o.inspectSource=function(e){return a(e)}),e.exports=o.inspectSource},9679:(e,t,r)=>{var n=r(5052),i=r(5762);e.exports=function(e,t){n(t)&&"cause"in t&&i(e,"cause",t.cause)}},5926:(e,t,r)=>{var n=r(3103),i=r(5968),o=r(5977),a=r(5052),s=r(8270),u=r(1787).f,l=r(8151),c=r(166),p=r(1441),d=r(8476),f=!1,y=p("meta"),h=0,m=Object.isExtensible||function(){return!0},g=function(e){u(e,y,{value:{objectID:"O"+h++,weakData:{}}})},v=e.exports={enable:function(){v.enable=function(){},f=!0;var e=l.f,t=i([].splice),r={};r[y]=1,e(r).length&&(l.f=function(r){for(var n=e(r),i=0,o=n.length;i{var n,i,o,a=r(8694),s=r(9859),u=r(5968),l=r(5052),c=r(5762),p=r(8270),d=r(5353),f=r(4399),y=r(5977),h="Object already initialized",m=s.TypeError,g=s.WeakMap;if(a||d.state){var v=d.state||(d.state=new g),b=u(v.get),I=u(v.has),S=u(v.set);n=function(e,t){if(I(v,e))throw new m(h);return t.facade=e,S(v,e,t),t},i=function(e){return b(v,e)||{}},o=function(e){return I(v,e)}}else{var _=f("state");y[_]=!0,n=function(e,t){if(p(e,_))throw new m(h);return t.facade=e,c(e,_,t),t},i=function(e){return p(e,_)?e[_]:{}},o=function(e){return p(e,_)}}e.exports={set:n,get:i,has:o,enforce:function(e){return o(e)?i(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!l(t)||(r=i(t)).type!==e)throw m("Incompatible receiver, "+e+" required");return r}}}},1943:(e,t,r)=>{var n=r(95),i=r(5495),o=n("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(i.Array===e||a[o]===e)}},3718:(e,t,r)=>{var n=r(7079);e.exports=Array.isArray||function(e){return"Array"==n(e)}},6733:e=>{e.exports=function(e){return"function"==typeof e}},2359:(e,t,r)=>{var n=r(5968),i=r(4229),o=r(6733),a=r(1589),s=r(1333),u=r(8511),l=function(){},c=[],p=s("Reflect","construct"),d=/^\s*(?:class|function)\b/,f=n(d.exec),y=!d.exec(l),h=function(e){if(!o(e))return!1;try{return p(l,c,e),!0}catch(e){return!1}};e.exports=!p||i((function(){var e;return h(h.call)||!h(Object)||!h((function(){e=!0}))||e}))?function(e){if(!o(e))return!1;switch(a(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}return y||!!f(d,u(e))}:h},6541:(e,t,r)=>{var n=r(4229),i=r(6733),o=/#|\.prototype\./,a=function(e,t){var r=u[s(e)];return r==c||r!=l&&(i(t)?n(t):!!t)},s=a.normalize=function(e){return String(e).replace(o,".").toLowerCase()},u=a.data={},l=a.NATIVE="N",c=a.POLYFILL="P";e.exports=a},2292:(e,t,r)=>{var n=r(5052),i=Math.floor;e.exports=Number.isInteger||function(e){return!n(e)&&isFinite(e)&&i(e)===e}},5052:(e,t,r)=>{var n=r(6733);e.exports=function(e){return"object"==typeof e?null!==e:n(e)}},4231:e=>{e.exports=!1},9395:(e,t,r)=>{var n=r(9859),i=r(1333),o=r(6733),a=r(1321),s=r(6969),u=n.Object;e.exports=s?function(e){return"symbol"==typeof e}:function(e){var t=i("Symbol");return o(t)&&a(t.prototype,u(e))}},9003:(e,t,r)=>{var n=r(9859),i=r(7636),o=r(266),a=r(1176),s=r(9821),u=r(1943),l=r(9646),c=r(1321),p=r(8403),d=r(8830),f=r(7281),y=n.TypeError,h=function(e,t){this.stopped=e,this.result=t},m=h.prototype;e.exports=function(e,t,r){var n,g,v,b,I,S,_,T=r&&r.that,P=!(!r||!r.AS_ENTRIES),A=!(!r||!r.IS_ITERATOR),E=!(!r||!r.INTERRUPTED),w=i(t,T),D=function(e){return n&&f(n,"normal",e),new h(!0,e)},O=function(e){return P?(a(e),E?w(e[0],e[1],D):w(e[0],e[1])):E?w(e,D):w(e)};if(A)n=e;else{if(!(g=d(e)))throw y(s(e)+" is not iterable");if(u(g)){for(v=0,b=l(e);b>v;v++)if((I=O(e[v]))&&c(m,I))return I;return new h(!1)}n=p(e,g)}for(S=n.next;!(_=o(S,n)).done;){try{I=O(_.value)}catch(e){f(n,"throw",e)}if("object"==typeof I&&I&&c(m,I))return I}return new h(!1)}},7281:(e,t,r)=>{var n=r(266),i=r(1176),o=r(5300);e.exports=function(e,t,r){var a,s;i(e);try{if(!(a=o(e,"return"))){if("throw"===t)throw r;return r}a=n(a,e)}catch(e){s=!0,a=e}if("throw"===t)throw r;if(s)throw a;return i(a),r}},693:(e,t,r)=>{"use strict";var n,i,o,a=r(4229),s=r(6733),u=r(7263),l=r(7567),c=r(7487),p=r(95),d=r(4231),f=p("iterator"),y=!1;[].keys&&("next"in(o=[].keys())?(i=l(l(o)))!==Object.prototype&&(n=i):y=!0),null==n||a((function(){var e={};return n[f].call(e)!==e}))?n={}:d&&(n=u(n)),s(n[f])||c(n,f,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:y}},5495:e=>{e.exports={}},9646:(e,t,r)=>{var n=r(4237);e.exports=function(e){return n(e.length)}},4794:(e,t,r)=>{var n,i,o,a,s,u,l,c,p=r(9859),d=r(7636),f=r(7933).f,y=r(5795).set,h=r(2023),m=r(8983),g=r(263),v=r(8801),b=p.MutationObserver||p.WebKitMutationObserver,I=p.document,S=p.process,_=p.Promise,T=f(p,"queueMicrotask"),P=T&&T.value;P||(n=function(){var e,t;for(v&&(e=S.domain)&&e.exit();i;){t=i.fn,i=i.next;try{t()}catch(e){throw i?a():o=void 0,e}}o=void 0,e&&e.enter()},h||v||g||!b||!I?!m&&_&&_.resolve?((l=_.resolve(void 0)).constructor=_,c=d(l.then,l),a=function(){c(n)}):v?a=function(){S.nextTick(n)}:(y=d(y,p),a=function(){y(n)}):(s=!0,u=I.createTextNode(""),new b(n).observe(u,{characterData:!0}),a=function(){u.data=s=!s})),e.exports=P||function(e){var t={fn:e,next:void 0};o&&(o.next=t),i||(i=t,a()),o=t}},4226:(e,t,r)=>{var n=r(9859);e.exports=n.Promise},3839:(e,t,r)=>{var n=r(6358),i=r(4229);e.exports=!!Object.getOwnPropertySymbols&&!i((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},8694:(e,t,r)=>{var n=r(9859),i=r(6733),o=r(8511),a=n.WeakMap;e.exports=i(a)&&/native code/.test(o(a))},6485:(e,t,r)=>{"use strict";var n=r(7111),i=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};e.exports.f=function(e){return new i(e)}},635:(e,t,r)=>{var n=r(3326);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:n(e)}},5496:(e,t,r)=>{var n=r(9859),i=r(4229),o=r(5968),a=r(3326),s=r(1017).trim,u=r(1647),l=o("".charAt),c=n.parseFloat,p=n.Symbol,d=p&&p.iterator,f=1/c(u+"-0")!=-1/0||d&&!i((function(){c(Object(d))}));e.exports=f?function(e){var t=s(a(e)),r=c(t);return 0===r&&"-"==l(t,0)?-0:r}:c},6596:(e,t,r)=>{var n=r(9859),i=r(4229),o=r(5968),a=r(3326),s=r(1017).trim,u=r(1647),l=n.parseInt,c=n.Symbol,p=c&&c.iterator,d=/^[+-]?0x/i,f=o(d.exec),y=8!==l(u+"08")||22!==l(u+"0x16")||p&&!i((function(){l(Object(p))}));e.exports=y?function(e,t){var r=s(a(e));return l(r,t>>>0||(f(d,r)?16:10))}:l},7888:(e,t,r)=>{"use strict";var n=r(7400),i=r(5968),o=r(266),a=r(4229),s=r(5632),u=r(894),l=r(9195),c=r(2991),p=r(9337),d=Object.assign,f=Object.defineProperty,y=i([].concat);e.exports=!d||a((function(){if(n&&1!==d({b:1},d(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol(),i="abcdefghijklmnopqrst";return e[r]=7,i.split("").forEach((function(e){t[e]=e})),7!=d({},e)[r]||s(d({},t)).join("")!=i}))?function(e,t){for(var r=c(e),i=arguments.length,a=1,d=u.f,f=l.f;i>a;)for(var h,m=p(arguments[a++]),g=d?y(s(m),d(m)):s(m),v=g.length,b=0;v>b;)h=g[b++],n&&!o(f,m,h)||(r[h]=m[h]);return r}:d},7263:(e,t,r)=>{var n,i=r(1176),o=r(219),a=r(3837),s=r(5977),u=r(3777),l=r(2635),c=r(4399)("IE_PROTO"),p=function(){},d=function(e){return"