/*! For license information please see component---src-pages-index-tsx-780f6047c31ac828a1f4.js.LICENSE.txt */
(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{"+uyH":function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.Track=void 0;var i=r(a("j8BX")),n=r(a("phZJ")),o=r(a("lFqo")),l=r(a("v06X")),s=r(a("IVAY")),d=r(a("CPqs")),c=r(a("0jh0")),u=r(a("hrfQ")),f=r(a("q1tI")),p=r(a("TSYQ")),h=a("3K4p"),g=function(e){var t,a,r,i,n;return r=(n=e.rtl?e.slideCount-1-e.index:e.index)<0||n>=e.slideCount,e.centerMode?(i=Math.floor(e.slidesToShow/2),a=(n-e.currentSlide)%e.slideCount==0,n>e.currentSlide-i-1&&n<=e.currentSlide+i&&(t=!0)):t=e.currentSlide<=n&&n<e.currentSlide+e.slidesToShow,{"slick-slide":!0,"slick-active":t,"slick-center":a,"slick-cloned":r,"slick-current":n===(e.targetSlide<0?e.targetSlide+e.slideCount:e.targetSlide>=e.slideCount?e.targetSlide-e.slideCount:e.targetSlide)}},m=function(e,t){return e.key+"-"+t},v=function(e){var t,a=[],r=[],i=[],n=f.default.Children.count(e.children),o=(0,h.lazyStartIndex)(e),l=(0,h.lazyEndIndex)(e);return f.default.Children.forEach(e.children,(function(s,d){var c,v={message:"children",index:d,slidesToScroll:e.slidesToScroll,currentSlide:e.currentSlide};c=!e.lazyLoad||e.lazyLoad&&e.lazyLoadedList.indexOf(d)>=0?s:f.default.createElement("div",null);var b=function(e){var t={};return void 0!==e.variableWidth&&!1!==e.variableWidth||(t.width=e.slideWidth),e.fade&&(t.position="relative",e.vertical?t.top=-e.index*parseInt(e.slideHeight):t.left=-e.index*parseInt(e.slideWidth),t.opacity=e.currentSlide===e.index?1:0,e.useCSS&&(t.transition="opacity "+e.speed+"ms "+e.cssEase+", visibility "+e.speed+"ms "+e.cssEase)),t}((0,u.default)((0,u.default)({},e),{},{index:d})),y=c.props.className||"",w=g((0,u.default)((0,u.default)({},e),{},{index:d}));if(a.push(f.default.cloneElement(c,{key:"original"+m(c,d),"data-index":d,className:(0,p.default)(w,y),tabIndex:"-1","aria-hidden":!w["slick-active"],style:(0,u.default)((0,u.default)({outline:"none"},c.props.style||{}),b),onClick:function(t){c.props&&c.props.onClick&&c.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(v)}})),e.infinite&&!1===e.fade){var S=n-d;S<=(0,h.getPreClones)(e)&&n!==e.slidesToShow&&((t=-S)>=o&&(c=s),w=g((0,u.default)((0,u.default)({},e),{},{index:t})),r.push(f.default.cloneElement(c,{key:"precloned"+m(c,t),"data-index":t,tabIndex:"-1",className:(0,p.default)(w,y),"aria-hidden":!w["slick-active"],style:(0,u.default)((0,u.default)({},c.props.style||{}),b),onClick:function(t){c.props&&c.props.onClick&&c.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(v)}}))),n!==e.slidesToShow&&((t=n+d)<l&&(c=s),w=g((0,u.default)((0,u.default)({},e),{},{index:t})),i.push(f.default.cloneElement(c,{key:"postcloned"+m(c,t),"data-index":t,tabIndex:"-1",className:(0,p.default)(w,y),"aria-hidden":!w["slick-active"],style:(0,u.default)((0,u.default)({},c.props.style||{}),b),onClick:function(t){c.props&&c.props.onClick&&c.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(v)}})))}})),e.rtl?r.concat(a,i).reverse():r.concat(a,i)},b=function(e){(0,s.default)(a,e);var t=(0,d.default)(a);function a(){var e;(0,n.default)(this,a);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return e=t.call.apply(t,[this].concat(i)),(0,c.default)((0,l.default)(e),"node",null),(0,c.default)((0,l.default)(e),"handleRef",(function(t){e.node=t})),e}return(0,o.default)(a,[{key:"render",value:function(){var e=v(this.props),t=this.props,a={onMouseEnter:t.onMouseEnter,onMouseOver:t.onMouseOver,onMouseLeave:t.onMouseLeave};return f.default.createElement("div",(0,i.default)({ref:this.handleRef,className:"slick-track",style:this.props.trackStyle},a),e)}}]),a}(f.default.PureComponent);t.Track=b},"3Fjq":function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.NextArrow=t.PrevArrow=void 0;var i=r(a("j8BX")),n=r(a("hrfQ")),o=r(a("phZJ")),l=r(a("lFqo")),s=r(a("IVAY")),d=r(a("CPqs")),c=r(a("q1tI")),u=r(a("TSYQ")),f=a("3K4p"),p=function(e){(0,s.default)(a,e);var t=(0,d.default)(a);function a(){return(0,o.default)(this,a),t.apply(this,arguments)}return(0,l.default)(a,[{key:"clickHandler",value:function(e,t){t&&t.preventDefault(),this.props.clickHandler(e,t)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-prev":!0},t=this.clickHandler.bind(this,{message:"previous"});!this.props.infinite&&(0===this.props.currentSlide||this.props.slideCount<=this.props.slidesToShow)&&(e["slick-disabled"]=!0,t=null);var a={key:"0","data-role":"none",className:(0,u.default)(e),style:{display:"block"},onClick:t},r={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.prevArrow?c.default.cloneElement(this.props.prevArrow,(0,n.default)((0,n.default)({},a),r)):c.default.createElement("button",(0,i.default)({key:"0",type:"button"},a)," ","Previous")}}]),a}(c.default.PureComponent);t.PrevArrow=p;var h=function(e){(0,s.default)(a,e);var t=(0,d.default)(a);function a(){return(0,o.default)(this,a),t.apply(this,arguments)}return(0,l.default)(a,[{key:"clickHandler",value:function(e,t){t&&t.preventDefault(),this.props.clickHandler(e,t)}},{key:"render",value:function(){var e={"slick-arrow":!0,"slick-next":!0},t=this.clickHandler.bind(this,{message:"next"});(0,f.canGoNext)(this.props)||(e["slick-disabled"]=!0,t=null);var a={key:"1","data-role":"none",className:(0,u.default)(e),style:{display:"block"},onClick:t},r={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.nextArrow?c.default.cloneElement(this.props.nextArrow,(0,n.default)((0,n.default)({},a),r)):c.default.createElement("button",(0,i.default)({key:"1",type:"button"},a)," ","Next")}}]),a}(c.default.PureComponent);t.NextArrow=h},"3K4p":function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.clamp=o,t.canUseDOM=t.slidesOnLeft=t.slidesOnRight=t.siblingDirection=t.getTotalSlides=t.getPostClones=t.getPreClones=t.getTrackLeft=t.getTrackAnimateCSS=t.getTrackCSS=t.checkSpecKeys=t.getSlideCount=t.checkNavigable=t.getNavigableIndexes=t.swipeEnd=t.swipeMove=t.swipeStart=t.keyHandler=t.changeSlide=t.slideHandler=t.initializedState=t.extractObject=t.canGoNext=t.getSwipeDirection=t.getHeight=t.getWidth=t.lazySlidesOnRight=t.lazySlidesOnLeft=t.lazyEndIndex=t.lazyStartIndex=t.getRequiredLazySlides=t.getOnDemandLazySlides=void 0;var i=r(a("hrfQ")),n=r(a("q1tI"));function o(e,t,a){return Math.max(t,Math.min(e,a))}var l=function(e){for(var t=[],a=s(e),r=d(e),i=a;i<r;i++)e.lazyLoadedList.indexOf(i)<0&&t.push(i);return t};t.getOnDemandLazySlides=l;t.getRequiredLazySlides=function(e){for(var t=[],a=s(e),r=d(e),i=a;i<r;i++)t.push(i);return t};var s=function(e){return e.currentSlide-c(e)};t.lazyStartIndex=s;var d=function(e){return e.currentSlide+u(e)};t.lazyEndIndex=d;var c=function(e){return e.centerMode?Math.floor(e.slidesToShow/2)+(parseInt(e.centerPadding)>0?1:0):0};t.lazySlidesOnLeft=c;var u=function(e){return e.centerMode?Math.floor((e.slidesToShow-1)/2)+1+(parseInt(e.centerPadding)>0?1:0):e.slidesToShow};t.lazySlidesOnRight=u;var f=function(e){return e&&e.offsetWidth||0};t.getWidth=f;var p=function(e){return e&&e.offsetHeight||0};t.getHeight=p;var h=function(e){var t,a,r,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t=e.startX-e.curX,a=e.startY-e.curY,r=Math.atan2(a,t),(i=Math.round(180*r/Math.PI))<0&&(i=360-Math.abs(i)),i<=45&&i>=0||i<=360&&i>=315?"left":i>=135&&i<=225?"right":!0===n?i>=35&&i<=135?"up":"down":"vertical"};t.getSwipeDirection=h;var g=function(e){var t=!0;return e.infinite||(e.centerMode&&e.currentSlide>=e.slideCount-1||e.slideCount<=e.slidesToShow||e.currentSlide>=e.slideCount-e.slidesToShow)&&(t=!1),t};t.canGoNext=g;t.extractObject=function(e,t){var a={};return t.forEach((function(t){return a[t]=e[t]})),a};t.initializedState=function(e){var t,a=n.default.Children.count(e.children),r=e.listRef,o=Math.ceil(f(r)),s=e.trackRef&&e.trackRef.node,d=Math.ceil(f(s));if(e.vertical)t=o;else{var c=e.centerMode&&2*parseInt(e.centerPadding);"string"==typeof e.centerPadding&&"%"===e.centerPadding.slice(-1)&&(c*=o/100),t=Math.ceil((o-c)/e.slidesToShow)}var u=r&&p(r.querySelector('[data-index="0"]')),h=u*e.slidesToShow,g=void 0===e.currentSlide?e.initialSlide:e.currentSlide;e.rtl&&void 0===e.currentSlide&&(g=a-1-e.initialSlide);var m=e.lazyLoadedList||[],v=l((0,i.default)((0,i.default)({},e),{},{currentSlide:g,lazyLoadedList:m}));m.concat(v);var b={slideCount:a,slideWidth:t,listWidth:o,trackWidth:d,currentSlide:g,slideHeight:u,listHeight:h,lazyLoadedList:m};return null===e.autoplaying&&e.autoplay&&(b.autoplaying="playing"),b};t.slideHandler=function(e){var t=e.waitForAnimate,a=e.animating,r=e.fade,n=e.infinite,s=e.index,d=e.slideCount,c=e.lazyLoadedList,u=e.lazyLoad,f=e.currentSlide,p=e.centerMode,h=e.slidesToScroll,m=e.slidesToShow,v=e.useCSS;if(t&&a)return{};var b,y,x,O=s,j={},C={},E=n?s:o(s,0,d-1);if(r){if(!n&&(s<0||s>=d))return{};s<0?O=s+d:s>=d&&(O=s-d),u&&c.indexOf(O)<0&&c.push(O),j={animating:!0,currentSlide:O,lazyLoadedList:c,targetSlide:O},C={animating:!1,targetSlide:O}}else b=O,O<0?(b=O+d,n?d%h!=0&&(b=d-d%h):b=0):!g(e)&&O>f?O=b=f:p&&O>=d?(O=n?d:d-1,b=n?0:d-1):O>=d&&(b=O-d,n?d%h!=0&&(b=0):b=d-m),!n&&O+m>=d&&(b=d-m),y=k((0,i.default)((0,i.default)({},e),{},{slideIndex:O})),x=k((0,i.default)((0,i.default)({},e),{},{slideIndex:b})),n||(y===x&&(O=b),y=x),u&&c.concat(l((0,i.default)((0,i.default)({},e),{},{currentSlide:O}))),v?(j={animating:!0,currentSlide:b,trackStyle:S((0,i.default)((0,i.default)({},e),{},{left:y})),lazyLoadedList:c,targetSlide:E},C={animating:!1,currentSlide:b,trackStyle:w((0,i.default)((0,i.default)({},e),{},{left:x})),swipeLeft:null,targetSlide:E}):j={currentSlide:b,trackStyle:w((0,i.default)((0,i.default)({},e),{},{left:x})),lazyLoadedList:c,targetSlide:E};return{state:j,nextState:C}};t.changeSlide=function(e,t){var a,r,n,o,l=e.slidesToScroll,s=e.slidesToShow,d=e.slideCount,c=e.currentSlide,u=e.targetSlide,f=e.lazyLoad,p=e.infinite;if(a=d%l!=0?0:(d-c)%l,"previous"===t.message)o=c-(n=0===a?l:s-a),f&&!p&&(o=-1===(r=c-n)?d-1:r),p||(o=u-l);else if("next"===t.message)o=c+(n=0===a?l:a),f&&!p&&(o=(c+l)%d+a),p||(o=u+l);else if("dots"===t.message)o=t.index*t.slidesToScroll;else if("children"===t.message){if(o=t.index,p){var h=C((0,i.default)((0,i.default)({},e),{},{targetSlide:o}));o>t.currentSlide&&"left"===h?o-=d:o<t.currentSlide&&"right"===h&&(o+=d)}}else"index"===t.message&&(o=Number(t.index));return o};t.keyHandler=function(e,t,a){return e.target.tagName.match("TEXTAREA|INPUT|SELECT")||!t?"":37===e.keyCode?a?"next":"previous":39===e.keyCode?a?"previous":"next":""};t.swipeStart=function(e,t,a){return"IMG"===e.target.tagName&&e.preventDefault(),!t||!a&&-1!==e.type.indexOf("mouse")?"":{dragging:!0,touchObject:{startX:e.touches?e.touches[0].pageX:e.clientX,startY:e.touches?e.touches[0].pageY:e.clientY,curX:e.touches?e.touches[0].pageX:e.clientX,curY:e.touches?e.touches[0].pageY:e.clientY}}};t.swipeMove=function(e,t){var a=t.scrolling,r=t.animating,n=t.vertical,o=t.swipeToSlide,l=t.verticalSwiping,s=t.rtl,d=t.currentSlide,c=t.edgeFriction,u=t.edgeDragged,f=t.onEdge,p=t.swiped,m=t.swiping,v=t.slideCount,b=t.slidesToScroll,y=t.infinite,S=t.touchObject,x=t.swipeEvent,O=t.listHeight,j=t.listWidth;if(!a){if(r)return e.preventDefault();n&&o&&l&&e.preventDefault();var C,E={},T=k(t);S.curX=e.touches?e.touches[0].pageX:e.clientX,S.curY=e.touches?e.touches[0].pageY:e.clientY,S.swipeLength=Math.round(Math.sqrt(Math.pow(S.curX-S.startX,2)));var z=Math.round(Math.sqrt(Math.pow(S.curY-S.startY,2)));if(!l&&!m&&z>10)return{scrolling:!0};l&&(S.swipeLength=z);var L=(s?-1:1)*(S.curX>S.startX?1:-1);l&&(L=S.curY>S.startY?1:-1);var M=Math.ceil(v/b),P=h(t.touchObject,l),N=S.swipeLength;return y||(0===d&&"right"===P||d+1>=M&&"left"===P||!g(t)&&"left"===P)&&(N=S.swipeLength*c,!1===u&&f&&(f(P),E.edgeDragged=!0)),!p&&x&&(x(P),E.swiped=!0),C=n?T+N*(O/j)*L:s?T-N*L:T+N*L,l&&(C=T+N*L),E=(0,i.default)((0,i.default)({},E),{},{touchObject:S,swipeLeft:C,trackStyle:w((0,i.default)((0,i.default)({},t),{},{left:C}))}),Math.abs(S.curX-S.startX)<.8*Math.abs(S.curY-S.startY)?E:(S.swipeLength>10&&(E.swiping=!0,e.preventDefault()),E)}};t.swipeEnd=function(e,t){var a=t.dragging,r=t.swipe,n=t.touchObject,o=t.listWidth,l=t.touchThreshold,s=t.verticalSwiping,d=t.listHeight,c=t.swipeToSlide,u=t.scrolling,f=t.onSwipe,p=t.targetSlide,g=t.currentSlide,m=t.infinite;if(!a)return r&&e.preventDefault(),{};var y=s?d/l:o/l,w=h(n,s),x={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(u)return x;if(!n.swipeLength)return x;if(n.swipeLength>y){var O,j;e.preventDefault(),f&&f(w);var C=m?g:p;switch(w){case"left":case"up":j=C+b(t),O=c?v(t,j):j,x.currentDirection=0;break;case"right":case"down":j=C-b(t),O=c?v(t,j):j,x.currentDirection=1;break;default:O=C}x.triggerSlideHandler=O}else{var E=k(t);x.trackStyle=S((0,i.default)((0,i.default)({},t),{},{left:E}))}return x};var m=function(e){for(var t=e.infinite?2*e.slideCount:e.slideCount,a=e.infinite?-1*e.slidesToShow:0,r=e.infinite?-1*e.slidesToShow:0,i=[];a<t;)i.push(a),a=r+e.slidesToScroll,r+=Math.min(e.slidesToScroll,e.slidesToShow);return i};t.getNavigableIndexes=m;var v=function(e,t){var a=m(e),r=0;if(t>a[a.length-1])t=a[a.length-1];else for(var i in a){if(t<a[i]){t=r;break}r=a[i]}return t};t.checkNavigable=v;var b=function(e){var t=e.centerMode?e.slideWidth*Math.floor(e.slidesToShow/2):0;if(e.swipeToSlide){var a,r=e.listRef.querySelectorAll(".slick-slide");if(Array.from(r).every((function(r){if(e.vertical){if(r.offsetTop+p(r)/2>-1*e.swipeLeft)return a=r,!1}else if(r.offsetLeft-t+f(r)/2>-1*e.swipeLeft)return a=r,!1;return!0})),!a)return 0;var i=!0===e.rtl?e.slideCount-e.currentSlide:e.currentSlide;return Math.abs(a.dataset.index-i)||1}return e.slidesToScroll};t.getSlideCount=b;var y=function(e,t){return t.reduce((function(t,a){return t&&e.hasOwnProperty(a)}),!0)?null:console.error("Keys Missing:",e)};t.checkSpecKeys=y;var w=function(e){var t,a;y(e,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var r=e.slideCount+2*e.slidesToShow;e.vertical?a=r*e.slideHeight:t=j(e)*e.slideWidth;var n={opacity:1,transition:"",WebkitTransition:""};if(e.useTransform){var o=e.vertical?"translate3d(0px, "+e.left+"px, 0px)":"translate3d("+e.left+"px, 0px, 0px)",l=e.vertical?"translate3d(0px, "+e.left+"px, 0px)":"translate3d("+e.left+"px, 0px, 0px)",s=e.vertical?"translateY("+e.left+"px)":"translateX("+e.left+"px)";n=(0,i.default)((0,i.default)({},n),{},{WebkitTransform:o,transform:l,msTransform:s})}else e.vertical?n.top=e.left:n.left=e.left;return e.fade&&(n={opacity:1}),t&&(n.width=t),a&&(n.height=a),window&&!window.addEventListener&&window.attachEvent&&(e.vertical?n.marginTop=e.left+"px":n.marginLeft=e.left+"px"),n};t.getTrackCSS=w;var S=function(e){y(e,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var t=w(e);return e.useTransform?(t.WebkitTransition="-webkit-transform "+e.speed+"ms "+e.cssEase,t.transition="transform "+e.speed+"ms "+e.cssEase):e.vertical?t.transition="top "+e.speed+"ms "+e.cssEase:t.transition="left "+e.speed+"ms "+e.cssEase,t};t.getTrackAnimateCSS=S;var k=function(e){if(e.unslick)return 0;y(e,["slideIndex","trackRef","infinite","centerMode","slideCount","slidesToShow","slidesToScroll","slideWidth","listWidth","variableWidth","slideHeight"]);var t,a,r=e.slideIndex,i=e.trackRef,n=e.infinite,o=e.centerMode,l=e.slideCount,s=e.slidesToShow,d=e.slidesToScroll,c=e.slideWidth,u=e.listWidth,f=e.variableWidth,p=e.slideHeight,h=e.fade,g=e.vertical;if(h||1===e.slideCount)return 0;var m=0;if(n?(m=-x(e),l%d!=0&&r+d>l&&(m=-(r>l?s-(r-l):l%d)),o&&(m+=parseInt(s/2))):(l%d!=0&&r+d>l&&(m=s-l%d),o&&(m=parseInt(s/2))),t=g?r*p*-1+m*p:r*c*-1+m*c,!0===f){var v,b=i&&i.node;if(v=r+x(e),t=(a=b&&b.childNodes[v])?-1*a.offsetLeft:0,!0===o){v=n?r+x(e):r,a=b&&b.children[v],t=0;for(var w=0;w<v;w++)t-=b&&b.children[w]&&b.children[w].offsetWidth;t-=parseInt(e.centerPadding),t+=a&&(u-a.offsetWidth)/2}}return t};t.getTrackLeft=k;var x=function(e){return e.unslick||!e.infinite?0:e.variableWidth?e.slideCount:e.slidesToShow+(e.centerMode?1:0)};t.getPreClones=x;var O=function(e){return e.unslick||!e.infinite?0:e.slideCount};t.getPostClones=O;var j=function(e){return 1===e.slideCount?1:x(e)+e.slideCount+O(e)};t.getTotalSlides=j;var C=function(e){return e.targetSlide>e.currentSlide?e.targetSlide>e.currentSlide+E(e)?"left":"right":e.targetSlide<e.currentSlide-T(e)?"right":"left"};t.siblingDirection=C;var E=function(e){var t=e.slidesToShow,a=e.centerMode,r=e.rtl,i=e.centerPadding;if(a){var n=(t-1)/2+1;return parseInt(i)>0&&(n+=1),r&&t%2==0&&(n+=1),n}return r?0:t-1};t.slidesOnRight=E;var T=function(e){var t=e.slidesToShow,a=e.centerMode,r=e.rtl,i=e.centerPadding;if(a){var n=(t-1)/2+1;return parseInt(i)>0&&(n+=1),r||t%2!=0||(n+=1),n}return r?t-1:0};t.slidesOnLeft=T;t.canUseDOM=function(){return!("undefined"==typeof window||!window.document||!window.document.createElement)}},"9eSz":function(e,t,a){"use strict";var r=a("5NKs");t.__esModule=!0,t.default=void 0;var i,n=r(a("v06X")),o=r(a("XEEL")),l=r(a("uDP2")),s=r(a("j8BX")),d=r(a("q1tI")),c=r(a("17x9")),u=function(e){var t=(0,s.default)({},e),a=t.resolutions,r=t.sizes,i=t.critical;return a&&(t.fixed=a,delete t.resolutions),r&&(t.fluid=r,delete t.sizes),i&&(t.loading="eager"),t.fluid&&(t.fluid=k([].concat(t.fluid))),t.fixed&&(t.fixed=k([].concat(t.fixed))),t},f=function(e){var t=e.media;return!!t&&(b&&!!window.matchMedia(t).matches)},p=function(e){var t=e.fluid,a=e.fixed,r=h(t||a||[]);return r&&r.src},h=function(e){if(b&&function(e){return!!e&&Array.isArray(e)&&e.some((function(e){return void 0!==e.media}))}(e)){var t=e.findIndex(f);if(-1!==t)return e[t];var a=e.findIndex((function(e){return void 0===e.media}));if(-1!==a)return e[a]}return e[0]},g=Object.create({}),m=function(e){var t=u(e),a=p(t);return g[a]||!1},v="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype,b="undefined"!=typeof window,y=b&&window.IntersectionObserver,w=new WeakMap;function S(e){return e.map((function(e){var t=e.src,a=e.srcSet,r=e.srcSetWebp,i=e.media,n=e.sizes;return d.default.createElement(d.default.Fragment,{key:t},r&&d.default.createElement("source",{type:"image/webp",media:i,srcSet:r,sizes:n}),a&&d.default.createElement("source",{media:i,srcSet:a,sizes:n}))}))}function k(e){var t=[],a=[];return e.forEach((function(e){return(e.media?t:a).push(e)})),[].concat(t,a)}function x(e){return e.map((function(e){var t=e.src,a=e.media,r=e.tracedSVG;return d.default.createElement("source",{key:t,media:a,srcSet:r})}))}function O(e){return e.map((function(e){var t=e.src,a=e.media,r=e.base64;return d.default.createElement("source",{key:t,media:a,srcSet:r})}))}function j(e,t){var a=e.srcSet,r=e.srcSetWebp,i=e.media,n=e.sizes;return"<source "+(t?"type='image/webp' ":"")+(i?'media="'+i+'" ':"")+'srcset="'+(t?r:a)+'" '+(n?'sizes="'+n+'" ':"")+"/>"}var C=function(e,t){var a=(void 0===i&&"undefined"!=typeof window&&window.IntersectionObserver&&(i=new window.IntersectionObserver((function(e){e.forEach((function(e){if(w.has(e.target)){var t=w.get(e.target);(e.isIntersecting||e.intersectionRatio>0)&&(i.unobserve(e.target),w.delete(e.target),t())}}))}),{rootMargin:"200px"})),i);return a&&(a.observe(e),w.set(e,t)),function(){a.unobserve(e),w.delete(e)}},E=function(e){var t=e.src?'src="'+e.src+'" ':'src="" ',a=e.sizes?'sizes="'+e.sizes+'" ':"",r=e.srcSet?'srcset="'+e.srcSet+'" ':"",i=e.title?'title="'+e.title+'" ':"",n=e.alt?'alt="'+e.alt+'" ':'alt="" ',o=e.width?'width="'+e.width+'" ':"",l=e.height?'height="'+e.height+'" ':"",s=e.crossOrigin?'crossorigin="'+e.crossOrigin+'" ':"",d=e.loading?'loading="'+e.loading+'" ':"",c=e.draggable?'draggable="'+e.draggable+'" ':"";return"<picture>"+e.imageVariants.map((function(e){return(e.srcSetWebp?j(e,!0):"")+j(e)})).join("")+"<img "+d+o+l+a+r+t+n+i+s+c+'style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture>'},T=d.default.forwardRef((function(e,t){var a=e.src,r=e.imageVariants,i=e.generateSources,n=e.spreadProps,o=e.ariaHidden,l=d.default.createElement(z,(0,s.default)({ref:t,src:a},n,{ariaHidden:o}));return r.length>1?d.default.createElement("picture",null,i(r),l):l})),z=d.default.forwardRef((function(e,t){var a=e.sizes,r=e.srcSet,i=e.src,n=e.style,o=e.onLoad,c=e.onError,u=e.loading,f=e.draggable,p=e.ariaHidden,h=(0,l.default)(e,["sizes","srcSet","src","style","onLoad","onError","loading","draggable","ariaHidden"]);return d.default.createElement("img",(0,s.default)({"aria-hidden":p,sizes:a,srcSet:r,src:i},h,{onLoad:o,onError:c,ref:t,loading:u,draggable:f,style:(0,s.default)({position:"absolute",top:0,left:0,width:"100%",height:"100%",objectFit:"cover",objectPosition:"center"},n)}))}));z.propTypes={style:c.default.object,onError:c.default.func,onLoad:c.default.func};var L=function(e){function t(t){var a;(a=e.call(this,t)||this).seenBefore=b&&m(t),a.isCritical="eager"===t.loading||t.critical,a.addNoScript=!(a.isCritical&&!t.fadeIn),a.useIOSupport=!v&&y&&!a.isCritical&&!a.seenBefore;var r=a.isCritical||b&&(v||!a.useIOSupport);return a.state={isVisible:r,imgLoaded:!1,imgCached:!1,fadeIn:!a.seenBefore&&t.fadeIn,isHydrated:!1},a.imageRef=d.default.createRef(),a.placeholderRef=t.placeholderRef||d.default.createRef(),a.handleImageLoaded=a.handleImageLoaded.bind((0,n.default)(a)),a.handleRef=a.handleRef.bind((0,n.default)(a)),a}(0,o.default)(t,e);var a=t.prototype;return a.componentDidMount=function(){if(this.setState({isHydrated:b}),this.state.isVisible&&"function"==typeof this.props.onStartLoad&&this.props.onStartLoad({wasCached:m(this.props)}),this.isCritical){var e=this.imageRef.current;e&&e.complete&&this.handleImageLoaded()}},a.componentWillUnmount=function(){this.cleanUpListeners&&this.cleanUpListeners()},a.handleRef=function(e){var t=this;this.useIOSupport&&e&&(this.cleanUpListeners=C(e,(function(){var e=m(t.props);t.state.isVisible||"function"!=typeof t.props.onStartLoad||t.props.onStartLoad({wasCached:e}),t.setState({isVisible:!0},(function(){t.setState({imgLoaded:e,imgCached:!(!t.imageRef.current||!t.imageRef.current.currentSrc)})}))})))},a.handleImageLoaded=function(){var e,t,a;e=this.props,t=u(e),(a=p(t))&&(g[a]=!0),this.setState({imgLoaded:!0}),this.props.onLoad&&this.props.onLoad()},a.render=function(){var e=u(this.props),t=e.title,a=e.alt,r=e.className,i=e.style,n=void 0===i?{}:i,o=e.imgStyle,l=void 0===o?{}:o,c=e.placeholderStyle,f=void 0===c?{}:c,p=e.placeholderClassName,g=e.fluid,m=e.fixed,v=e.backgroundColor,b=e.durationFadeIn,y=e.Tag,w=e.itemProp,k=e.loading,j=e.draggable,C=g||m;if(!C)return null;var L=!1===this.state.fadeIn||this.state.imgLoaded,M=!0===this.state.fadeIn&&!this.state.imgCached,P=(0,s.default)({opacity:L?1:0,transition:M?"opacity "+b+"ms":"none"},l),N="boolean"==typeof v?"lightgray":v,R={transitionDelay:b+"ms"},I=(0,s.default)({opacity:this.state.imgLoaded?0:1},M&&R,l,f),F={title:t,alt:this.state.isVisible?"":a,style:I,className:p,itemProp:w},H=this.state.isHydrated?h(C):C[0];if(g)return d.default.createElement(y,{className:(r||"")+" gatsby-image-wrapper",style:(0,s.default)({position:"relative",overflow:"hidden",maxWidth:H.maxWidth?H.maxWidth+"px":null,maxHeight:H.maxHeight?H.maxHeight+"px":null},n),ref:this.handleRef,key:"fluid-"+JSON.stringify(H.srcSet)},d.default.createElement(y,{"aria-hidden":!0,style:{width:"100%",paddingBottom:100/H.aspectRatio+"%"}}),N&&d.default.createElement(y,{"aria-hidden":!0,title:t,style:(0,s.default)({backgroundColor:N,position:"absolute",top:0,bottom:0,opacity:this.state.imgLoaded?0:1,right:0,left:0},M&&R)}),H.base64&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:H.base64,spreadProps:F,imageVariants:C,generateSources:O}),H.tracedSVG&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:H.tracedSVG,spreadProps:F,imageVariants:C,generateSources:x}),this.state.isVisible&&d.default.createElement("picture",null,S(C),d.default.createElement(z,{alt:a,title:t,sizes:H.sizes,src:H.src,crossOrigin:this.props.crossOrigin,srcSet:H.srcSet,style:P,ref:this.imageRef,onLoad:this.handleImageLoaded,onError:this.props.onError,itemProp:w,loading:k,draggable:j})),this.addNoScript&&d.default.createElement("noscript",{dangerouslySetInnerHTML:{__html:E((0,s.default)({alt:a,title:t,loading:k},H,{imageVariants:C}))}}));if(m){var D=(0,s.default)({position:"relative",overflow:"hidden",display:"inline-block",width:H.width,height:H.height},n);return"inherit"===n.display&&delete D.display,d.default.createElement(y,{className:(r||"")+" gatsby-image-wrapper",style:D,ref:this.handleRef,key:"fixed-"+JSON.stringify(H.srcSet)},N&&d.default.createElement(y,{"aria-hidden":!0,title:t,style:(0,s.default)({backgroundColor:N,width:H.width,opacity:this.state.imgLoaded?0:1,height:H.height},M&&R)}),H.base64&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:H.base64,spreadProps:F,imageVariants:C,generateSources:O}),H.tracedSVG&&d.default.createElement(T,{ariaHidden:!0,ref:this.placeholderRef,src:H.tracedSVG,spreadProps:F,imageVariants:C,generateSources:x}),this.state.isVisible&&d.default.createElement("picture",null,S(C),d.default.createElement(z,{alt:a,title:t,width:H.width,height:H.height,sizes:H.sizes,src:H.src,crossOrigin:this.props.crossOrigin,srcSet:H.srcSet,style:P,ref:this.imageRef,onLoad:this.handleImageLoaded,onError:this.props.onError,itemProp:w,loading:k,draggable:j})),this.addNoScript&&d.default.createElement("noscript",{dangerouslySetInnerHTML:{__html:E((0,s.default)({alt:a,title:t,loading:k},H,{imageVariants:C}))}}))}return null},t}(d.default.Component);L.defaultProps={fadeIn:!0,durationFadeIn:500,alt:"",Tag:"div",loading:"lazy"};var M=c.default.shape({width:c.default.number.isRequired,height:c.default.number.isRequired,src:c.default.string.isRequired,srcSet:c.default.string.isRequired,base64:c.default.string,tracedSVG:c.default.string,srcWebp:c.default.string,srcSetWebp:c.default.string,media:c.default.string}),P=c.default.shape({aspectRatio:c.default.number.isRequired,src:c.default.string.isRequired,srcSet:c.default.string.isRequired,sizes:c.default.string.isRequired,base64:c.default.string,tracedSVG:c.default.string,srcWebp:c.default.string,srcSetWebp:c.default.string,media:c.default.string,maxWidth:c.default.number,maxHeight:c.default.number});function N(e){return function(t,a,r){var i;if(!t.fixed&&!t.fluid)throw new Error("The prop `fluid` or `fixed` is marked as required in `"+r+"`, but their values are both `undefined`.");c.default.checkPropTypes(((i={})[a]=e,i),t,"prop",r)}}L.propTypes={resolutions:M,sizes:P,fixed:N(c.default.oneOfType([M,c.default.arrayOf(M)])),fluid:N(c.default.oneOfType([P,c.default.arrayOf(P)])),fadeIn:c.default.bool,durationFadeIn:c.default.number,title:c.default.string,alt:c.default.string,className:c.default.oneOfType([c.default.string,c.default.object]),critical:c.default.bool,crossOrigin:c.default.oneOfType([c.default.string,c.default.bool]),style:c.default.object,imgStyle:c.default.object,placeholderStyle:c.default.object,placeholderClassName:c.default.string,backgroundColor:c.default.oneOfType([c.default.string,c.default.bool]),onLoad:c.default.func,onError:c.default.func,onStartLoad:c.default.func,Tag:c.default.string,itemProp:c.default.string,loading:c.default.oneOf(["auto","lazy","eager"]),draggable:c.default.bool};var R=L;t.default=R},BJfS:function(e,t){e.exports=function(e){return e.replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()})).toLowerCase()}},F1Ou:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r={animating:!1,autoplaying:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,dragging:!1,edgeDragged:!1,initialized:!1,lazyLoadedList:[],listHeight:null,listWidth:null,scrolling:!1,slideCount:null,slideHeight:null,slideWidth:null,swipeLeft:null,swiped:!1,swiping:!1,touchObject:{startX:0,startY:0,curX:0,curY:0},trackStyle:{},trackWidth:0,targetSlide:0};t.default=r},"N/JB":function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(a("ToDW")).default;t.default=i},Oyq8:function(e,t,a){"use strict";a.d(t,"b",(function(){return r})),a.d(t,"a",(function(){return i}));var r=[{name:" Aaron Suddjian",github:"https://github.com/suddjian",image:"https://github.com/suddjian.png"},{name:"Beto Dealmeida",github:"https://github.com/betodealmeida",image:"https://github.com/betodealmeida.png"},{name:"Bogdan Kyryliuk",github:"https://github.com/bkyryliuk",image:"https://github.com/bkyryliuk.png"},{name:"Chris Williams",github:"https://github.com/williaster",image:"https://github.com/williaster.png"},{name:"Craig Rueda",github:"https://github.com/craig-rueda",image:"https://github.com/craig-rueda.png"},{name:"Daniel Gaspar",github:"https://github.com/dpgaspar",image:"https://github.com/dpgaspar.png"},{name:"Erik Ritter",github:"https://github.com/etr2460",image:"https://github.com/etr2460.png"},{name:"Evan Rusackas",github:"https://github.com/rusackas",image:"https://github.com/rusackas.png"},{name:"Grace Guo",github:"https://github.com/graceguo-supercat",image:"https://github.com/graceguo-supercat.png"},{name:"Jeff Feng",github:"https://github.com/jfeng15",image:"https://github.com/jfeng15.png"},{name:"Jesse Yang",github:"https://github.com/ktmud",image:"https://github.com/ktmud.png"},{name:"John Bodley",github:"https://github.com/john-bodley",image:"https://github.com/john-bodley.png"},{name:"Krist Wongsuphasawat",github:"https://github.com/kristw",image:"https://github.com/kristw.png"},{name:"Maxime Beauchemin",github:"https://github.com/mistercrunch",image:"https://github.com/mistercrunch.png"},{name:"Michelle Thomas",github:"https://github.com/michellethomas",image:"https://github.com/michellethomas.png"},{name:"Nishant Bangarwa",github:"https://github.com/nishantmonu51",image:"https://github.com/nishantmonu51.png"},{name:"Tai Dupree",github:"https://github.com/nytai",image:"https://github.com/nytai.png"},{name:"Ville Brofeldt",github:"https://github.com/villebro",image:"https://github.com/villebro.png"},{name:"Will Barrett",github:"https://github.com/willbarrett",image:"https://github.com/willbarrett.png"}];void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!r.hasOwnProperty("__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"pmc",filename:"src/resources/data.js"}}),void 0!==r&&r&&r===Object(r)&&Object.isExtensible(r)&&!r.hasOwnProperty("__filemeta")&&Object.defineProperty(r,"__filemeta",{configurable:!0,value:{name:"pmc",filename:"src/resources/data.js"}});var i=[{title:"Amazon Redshfit",href:"https://aws.amazon.com/redshift/",imgName:"aws-redshift.png",width:50},{title:"Apache Druid",href:"http://druid.io/",imgName:"druid.png"},{title:"Apache Kylin",href:"http://kylin.apache.org/",imgName:"apache-kylin.png"},{title:"BigQuery",href:"https://cloud.google.com/bigquery/",imgName:"googleBQ.png"},{title:"ClickHouse",href:"https://clickhouse.tech/",imgName:"clickhouse.png"},{title:"Dremio",href:"https://dremio.com/",imgName:"dremio.png"},{title:"Exasol",href:"https://www.exasol.com/en/",imgName:"exasol.png"},{title:"FireBirdSql",href:"https://firebirdsql.org/",imgName:"firebird.png"},{title:"Green Plum",href:"https://greenplum.org/",imgName:"greenplum.png"},{title:"IBM Db2",href:"https://www.ibm.com/analytics/db2",imgName:"ibmdb2.png"},{title:"MySQL",href:"https://www.mysql.com/",imgName:"mysql.png"},{title:"Microsoft SqlServer",href:"https://www.microsoft.com/en-us/sql-server",imgName:"msql.png"},{title:"MonetDB",href:"https://www.monetdb.org/",imgName:"monet.png"},{title:"Oracle",href:"https://www.oracle.com/database/",imgName:"oraclelogo.png"},{title:"PostgresSQL",href:"https://www.postgresql.org/",imgName:"postsql.png"},{title:"Presto",href:"https://prestodb.io/",imgName:"presto-og.png"},{title:"Snowflake",href:"https://www.snowflake.com/",imgName:"snowflake.png"},{title:"SQLite",href:"https://www.sqlite.org/index.html",imgName:"sqllite.png"},{title:"Trino",href:"https://trino.io/",imgName:"trino2.jpg"},{title:"Rockset",href:"https://rockset.com/",imgName:"rockset.png"},{title:"Vertica",href:"https://www.vertica.com/",imgName:"vertica.png"},{title:"Hologres",href:"https://www.alibabacloud.com/product/hologres",imgName:"hologres.png"}];void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!i.hasOwnProperty("__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"Databases",filename:"src/resources/data.js"}}),void 0!==i&&i&&i===Object(i)&&Object.isExtensible(i)&&!i.hasOwnProperty("__filemeta")&&Object.defineProperty(i,"__filemeta",{configurable:!0,value:{name:"Databases",filename:"src/resources/data.js"}})},QeBL:function(e,t,a){"use strict";a.r(t);a("SchZ"),a("mdmF");var r=a("0jh0"),i=a.n(r),n=a("j8BX"),o=a.n(n),l=a("phZJ"),s=a.n(l),d=a("lFqo"),c=a.n(d),u=a("IVAY"),f=a.n(u),p=a("CPqs"),h=a.n(p),g=a("q1tI"),m=a.n(g),v=a("lAhR"),b=a.n(v),y=a("N/JB"),w=a.n(y),S=a("TSYQ"),k=a.n(S),x=a("H84U"),O=function(e){f()(a,e);var t=h()(a);function a(e){var r;return s()(this,a),(r=t.call(this,e)).saveSlick=function(e){r.slick=e},r.onWindowResized=function(){r.props.autoplay&&r.slick&&r.slick.innerSlider&&r.slick.innerSlider.autoPlay&&r.slick.innerSlider.autoPlay()},r.renderCarousel=function(e){var t,a,n=e.getPrefixCls,l=e.direction,s=o()({},r.props);"fade"===s.effect&&(s.fade=!0);var d=n("carousel",s.prefixCls),c=r.getDotPosition();s.vertical="left"===c||"right"===c;var u=!!s.dots,f=k()("slick-dots","".concat("slick-dots","-").concat(c||"bottom"),"boolean"!=typeof s.dots&&(null===(a=s.dots)||void 0===a?void 0:a.className)),p=k()(d,(t={},i()(t,"".concat(d,"-rtl"),"rtl"===l),i()(t,"".concat(d,"-vertical"),s.vertical),t));return g.createElement("div",{className:p},g.createElement(w.a,o()({ref:r.saveSlick},s,{dots:u,dotsClass:f})))},r.onWindowResized=b()(r.onWindowResized,500,{leading:!1}),r}return c()(a,[{key:"componentDidMount",value:function(){this.props.autoplay&&window.addEventListener("resize",this.onWindowResized),this.innerSlider=this.slick&&this.slick.innerSlider}},{key:"componentDidUpdate",value:function(e){g.Children.count(this.props.children)!==g.Children.count(e.children)&&this.goTo(this.props.initialSlide||0,!1)}},{key:"componentWillUnmount",value:function(){this.props.autoplay&&(window.removeEventListener("resize",this.onWindowResized),this.onWindowResized.cancel())}},{key:"getDotPosition",value:function(){var e=this.props.dotPosition;return void 0===e?"bottom":e}},{key:"next",value:function(){this.slick.slickNext()}},{key:"prev",value:function(){this.slick.slickPrev()}},{key:"goTo",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.slick.slickGoTo(e,t)}},{key:"render",value:function(){return g.createElement(x.a,null,this.renderCarousel)}}]),a}(g.Component);O.defaultProps={dots:!0,arrows:!1,draggable:!1};a("Jmwx");var j=a("BMrR"),C=(a("rO+z"),a("kPKH")),E=(a("L/Qf"),a("2/Rp")),T=a("52AM"),z=a("Wbzz"),L=a("dCk4"),M=a("qKvR"),P=a("lOwS"),N={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M834.1 469.2A347.49 347.49 0 00751.2 354l-29.1-26.7a8.09 8.09 0 00-13 3.3l-13 37.3c-8.1 23.4-23 47.3-44.1 70.8-1.4 1.5-3 1.9-4.1 2-1.1.1-2.8-.1-4.3-1.5-1.4-1.2-2.1-3-2-4.8 3.7-60.2-14.3-128.1-53.7-202C555.3 171 510 123.1 453.4 89.7l-41.3-24.3c-5.4-3.2-12.3 1-12 7.3l2.2 48c1.5 32.8-2.3 61.8-11.3 85.9-11 29.5-26.8 56.9-47 81.5a295.64 295.64 0 01-47.5 46.1 352.6 352.6 0 00-100.3 121.5A347.75 347.75 0 00160 610c0 47.2 9.3 92.9 27.7 136a349.4 349.4 0 0075.5 110.9c32.4 32 70 57.2 111.9 74.7C418.5 949.8 464.5 959 512 959s93.5-9.2 136.9-27.3A348.6 348.6 0 00760.8 857c32.4-32 57.8-69.4 75.5-110.9a344.2 344.2 0 0027.7-136c0-48.8-10-96.2-29.9-140.9zM713 808.5c-53.7 53.2-125 82.4-201 82.4s-147.3-29.2-201-82.4c-53.5-53.1-83-123.5-83-198.4 0-43.5 9.8-85.2 29.1-124 18.8-37.9 46.8-71.8 80.8-97.9a349.6 349.6 0 0058.6-56.8c25-30.5 44.6-64.5 58.2-101a240 240 0 0012.1-46.5c24.1 22.2 44.3 49 61.2 80.4 33.4 62.6 48.8 118.3 45.8 165.7a74.01 74.01 0 0024.4 59.8 73.36 73.36 0 0053.4 18.8c19.7-1 37.8-9.7 51-24.4 13.3-14.9 24.8-30.1 34.4-45.6 14 17.9 25.7 37.4 35 58.4 15.9 35.8 24 73.9 24 113.1 0 74.9-29.5 145.4-83 198.4z"}}]},name:"fire",theme:"outlined"},R=a("6VBw"),I=function(e,t){return g.createElement(R.a,Object.assign({},e,{ref:t,icon:N}))};I.displayName="FireOutlined";var F=g.forwardRef(I),H={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-600 72h560v208H232V136zm560 480H232V408h560v208zm0 272H232V680h560v208zM304 240a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"database",theme:"outlined"},D=function(e,t){return g.createElement(R.a,Object.assign({},e,{ref:t,icon:H}))};D.displayName="DatabaseOutlined";var A=g.forwardRef(D),W={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888.3 693.2c-42.5-24.6-94.3-18-129.2 12.8l-53-30.7V523.6c0-15.7-8.4-30.3-22-38.1l-136-78.3v-67.1c44.2-15 76-56.8 76-106.1 0-61.9-50.1-112-112-112s-112 50.1-112 112c0 49.3 31.8 91.1 76 106.1v67.1l-136 78.3c-13.6 7.8-22 22.4-22 38.1v151.6l-53 30.7c-34.9-30.8-86.8-37.4-129.2-12.8-53.5 31-71.7 99.4-41 152.9 30.8 53.5 98.9 71.9 152.2 41 42.5-24.6 62.7-73 53.6-118.8l48.7-28.3 140.6 81c6.8 3.9 14.4 5.9 22 5.9s15.2-2 22-5.9L674.5 740l48.7 28.3c-9.1 45.7 11.2 94.2 53.6 118.8 53.3 30.9 121.5 12.6 152.2-41 30.8-53.6 12.6-122-40.7-152.9zm-673 138.4a47.6 47.6 0 01-65.2-17.6c-13.2-22.9-5.4-52.3 17.5-65.5a47.6 47.6 0 0165.2 17.6c13.2 22.9 5.4 52.3-17.5 65.5zM522 463.8zM464 234a48.01 48.01 0 0196 0 48.01 48.01 0 01-96 0zm170 446.2l-122 70.3-122-70.3V539.8l122-70.3 122 70.3v140.4zm239.9 133.9c-13.2 22.9-42.4 30.8-65.2 17.6-22.8-13.2-30.7-42.6-17.5-65.5s42.4-30.8 65.2-17.6c22.9 13.2 30.7 42.5 17.5 65.5z"}}]},name:"deployment-unit",theme:"outlined"},_=function(e,t){return g.createElement(R.a,Object.assign({},e,{ref:t,icon:W}))};_.displayName="DeploymentUnitOutlined";var q=g.forwardRef(_),B={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM288 604a64 64 0 10128 0 64 64 0 10-128 0zm118-224a48 48 0 1096 0 48 48 0 10-96 0zm158 228a96 96 0 10192 0 96 96 0 10-192 0zm148-314a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"dot-chart",theme:"outlined"},V=function(e,t){return g.createElement(R.a,Object.assign({},e,{ref:t,icon:B}))};V.displayName="DotChartOutlined";var G=g.forwardRef(V);function X(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function Y(e,t){for(var a=0;a<t.length;a++){var r=t[a];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var U=a("gUOe");var K=a("0QZy"),Q=a("uRdJ");function J(e,t){return!t||"object"!==Object(K.a)(t)&&"function"!=typeof t?Object(Q.a)(e):t}function Z(e){return(Z=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function $(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function ee(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?$(Object(a),!0).forEach((function(t){X(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):$(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function te(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var a,r=Z(e);if(t){var i=Z(this).constructor;a=Reflect.construct(r,arguments,i)}else a=r.apply(this,arguments);return J(this,a)}}var ae=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&Object(U.a)(e,t)}(o,e);var t,r,i,n=te(o);function o(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,o),(t=n.call(this,e)).$=m.a.createRef(),t._=m.a.createRef(),t}return t=o,(r=[{key:"render",value:function(){return m.a.createElement("span",{ref:this.$},m.a.createElement("a",ee(ee({},this.props),{},{ref:this._}),this.props.children))}},{key:"componentDidMount",value:function(){this.paint()}},{key:"getSnapshotBeforeUpdate",value:function(){return this.reset(),null}},{key:"componentDidUpdate",value:function(){this.paint()}},{key:"componentWillUnmount",value:function(){this.reset()}},{key:"paint",value:function(){var e=this,t=this.$.current.appendChild(document.createElement("span"));Promise.resolve().then(a.bind(null,"q01k")).then((function(a){(0,a.render)(t.appendChild(e._.current),(function(e){try{t.parentNode.replaceChild(e,t)}catch(t){}}))}))}},{key:"reset",value:function(){this.$.current.replaceChild(this._.current,this.$.current.lastChild)}}])&&Y(t.prototype,r),i&&Y(t,i),o}(g.PureComponent),re=a("Oyq8"),ie=a("9Dj+"),ne=a("9eSz"),oe=a.n(ne),le=function(e){var t=e.imageName,a=Object(z.useStaticQuery)("1341666470").allImages.edges.map((function(e){var t,a;return null===(t=e.node)||void 0===t||null===(a=t.childImageSharp)||void 0===a?void 0:a.fixed})).filter((function(e){return(null==e?void 0:e.originalName)===t}));return Object(M.jsx)(oe.a,{fixed:a[0]})},se=le;void 0!==le&&le&&le===Object(le)&&Object.isExtensible(le)&&!le.hasOwnProperty("__filemeta")&&Object.defineProperty(le,"__filemeta",{configurable:!0,value:{name:"DbImage",filename:"src/components/DbImage.tsx"}});a("TpwP");var de=a("vrFN"),ce=a("fT7D"),ue=a.n(ce),fe=a("Al62");var pe=P.supersetTheme.colors,he=Object(M.css)("text-align:center;.alert{color:",pe.alert.base,";}.error{color:",pe.error.base,";}.warning{color:",pe.warning.base,";}.info{color:",pe.info.base,";}.success{color:",pe.success.base,";}.secondary{color:",pe.secondary.base,";}.info-text{font-size:32px;font-weight:normal;max-width:600px;margin:auto;}.info-text-smaller{font-size:24px;max-width:800px;}"),ge=Object(M.css)("position:relative;padding-top:131px;padding-bottom:80px;padding-left:20px;padding-right:20px;background-image:url('/images/data-point.jpg');background-size:cover;background-position-x:right;.github-section{margin-bottom:40px;margin-top:40px;.github-button{margin:5px;}}.logo-horiz{margin-top:20px;margin-bottom:20px;width:600px;max-width:100%;",[fe.d[3]],"{width:550px;}",[fe.d[2]],"{width:450px;}",[fe.d[1]],"{width:425px;}",[fe.d[0]],"{width:400px;}}.alert{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb;max-width:600px;margin:0 auto;padding:0.75rem 1.25rem;margin-top:83px;border:1px solid transparent;border-radius:0.25rem;}"),me={name:"177fmpb",styles:"font-size:55px;text-align:center;"},ve=Object(M.css)("background:#fff;padding:5vw 0;margin-top:0px;margin-bottom:30px;.featureList{padding:40px;width:100%;list-style-type:none;margin:0 auto;max-width:1000px;.feature{padding:20px;text-align:center;margin-bottom:40px;.imagePlaceHolder{svg{width:70px;height:70px;}margin-bottom:15px;}.featureText{color:",pe.grayscale.dark2,";font-size:16px;strong{font-size:22px;}}}}.heading{font-size:22px;margin:0 auto;text-align:center;}"),be={name:"1as7kk4",styles:"background:white;margin-bottom:64px;.databaseSub{text-align:center;display:block;margin-bottom:40px;font-size:18px;}.database-list{margin-top:100px;list-style-type:none;padding:0px;max-width:1000px;margin:0 auto;display:flex;flex-wrap:wrap;justify-content:space-around;margin-bottom:50px;li{padding:15px;}}"},ye=Object(M.css)(".toggleContainer{display:flex;flex-direction:column;margin-bottom:100px;position:relative;.toggleBtns{display:flex;flex-direction:row;justify-content:center;.toggle{margin:10px;color:#666;border:1px solid #888;background-color:#20a7c911;border-radius:3px;padding:16px;transition:all 0.25s;overflow:visible;",[fe.d[0]],"{> span{display:none;position:absolute;bottom:0px;left:50%;width:100%;transform:translate(-50%,100%);}h2{font-size:14px;margin:0;}}&:hover{cursor:pointer;color:",pe.primary.base,";border:1px solid ",pe.primary.base,";}&.active{background:red;background:#20a7c933;",[fe.d[0]],"{> span{display:block;}}}}}.imageContainer{img{margin:0 auto;width:80%;box-shadow:0 0 3px #aaa;margin-top:5px;margin-bottom:5px;}}}"),we=function(e){var t=e.icon,a=e.title,r=e.descr;return Object(M.jsx)("li",{className:"feature"},Object(M.jsx)("div",{className:"imagePlaceHolder"},t),Object(M.jsx)("div",{className:"featureText"},Object(M.jsx)("h3",null,a),r))},Se=Object(T.b)()((function(){var e=Object(T.d)(),t=Object(g.useRef)(null),a=Object(g.useState)(0),r=a[0],i=a[1];return Object(M.jsx)(L.a,{theme:e},Object(M.jsx)(de.a,{title:"Superset"}),Object(M.jsx)(ie.a,null,Object(M.jsx)("div",{css:he},Object(M.jsx)("div",{css:ge},Object(M.jsx)("img",{className:"logo-horiz",src:ue.a,alt:"logo-horiz"}),Object(M.jsx)("div",{className:"info-text"},"Apache Superset is a modern data exploration and visualization platform"),Object(M.jsx)("div",{className:"github-section"},Object(M.jsx)("span",{className:"github-button"},Object(M.jsx)(ae,{href:"https://github.com/apache/superset","data-size":"large","data-show-count":"true","aria-label":"Star apache/superset on GitHub"},"Star")),Object(M.jsx)("span",{className:"github-button"},Object(M.jsx)(ae,{href:"https://github.com/apache/superset/subscription","data-size":"large","data-show-count":"true","aria-label":"Watch apache/superset on GitHub"},"Watch")),Object(M.jsx)("span",{className:"github-button"},Object(M.jsx)(ae,{href:"https://github.com/apache/superset/fork","data-size":"large","data-show-count":"true","aria-label":"Fork apache/superset on GitHub"},"Fork"))),Object(M.jsx)("div",null,Object(M.jsx)(z.Link,{to:"/docs/intro"},Object(M.jsx)(E.a,{type:"primary",size:"medium"},"Get Started")))),Object(M.jsx)("div",{css:ve},Object(M.jsx)("h2",{css:me},"Overview"),Object(M.jsx)("div",{className:"info-text info-text-smaller"},"Superset is fast, lightweight, intuitive, and loaded with options that make it easy for users of all skill sets to explore and visualize their data, from simple line charts to highly detailed geospatial charts."),Object(M.jsx)("ul",{className:"featureList ant-row"},Object(M.jsx)(j.a,null,Object(M.jsx)(C.a,{sm:24,md:12},Object(M.jsx)(we,{icon:Object(M.jsx)(F,{className:"warning"}),title:"Powerful yet easy to use",descr:"\n                    Quickly and easily integrate and explore your data, using\n                    either our simple no-code viz builder or state of the art SQL\n                    IDE.\n                  "})),Object(M.jsx)(C.a,{sm:24,md:12},Object(M.jsx)(we,{icon:Object(M.jsx)(A,{className:"info"}),title:"Integrates with modern databases",descr:"\n                    Superset can connect to any SQL based datasource\n                    through SQLAlchemy, including modern cloud native databases\n                    and engines at petabyte scale.\n                  "}))),Object(M.jsx)(j.a,null,Object(M.jsx)(C.a,{sm:24,md:12},Object(M.jsx)(we,{icon:Object(M.jsx)(q,{className:"success"}),title:"Modern architecture",descr:"\n                    Superset is lightweight and highly scalable, leveraging the\n                    power of your existing data infrastructure without requiring\n                    yet another ingestion layer.\n                  "})),Object(M.jsx)(C.a,{sm:24,md:12},Object(M.jsx)(we,{icon:Object(M.jsx)(G,{className:"alert"}),title:"Rich visualizations and dashboards",descr:"\n                    Superset ships with a wide array of beautiful visualizations.\n                    Our visualization plug-in architecture makes it easy to build\n                    custom visualizations that drop directly into Superset.\n                  "}))))),Object(M.jsx)("div",{css:ye},Object(M.jsx)("h2",{css:me},"Explore"),Object(M.jsx)("div",{className:"toggleContainer"},Object(M.jsx)("div",{className:"toggleBtns"},Object(M.jsx)("div",{className:"toggle "+(0===r?"active":null),onClick:function(){return t.current.goTo(0)},role:"button"},Object(M.jsx)("h2",null,"Explore"),Object(M.jsx)("span",null,"Explore your data using the array of data visualizations.")),Object(M.jsx)("div",{className:"toggle "+(1===r?"active":null),onClick:function(){return t.current.goTo(1)},role:"button"},Object(M.jsx)("h2",null,"View"),Object(M.jsx)("span",null,"View your data through interactive dashboards")),Object(M.jsx)("div",{className:"toggle "+(2===r?"active":null),onClick:function(){return t.current.goTo(2)},role:"button"},Object(M.jsx)("h2",null,"Investigate"),Object(M.jsx)("span",null,"Use SQL Lab to write queries to explore your data"))),Object(M.jsx)(O,{ref:t,effect:"scrollx",afterChange:function(e){i(e)}},Object(M.jsx)("div",{className:"imageContainer"},Object(M.jsx)("img",{src:"/images/explorer5.jpg",alt:""})),Object(M.jsx)("div",{className:"imageContainer"},Object(M.jsx)("img",{src:"/images/dashboard3.png",alt:""})),Object(M.jsx)("div",{className:"imageContainer"},Object(M.jsx)("img",{src:"/images/sqllab5.jpg",alt:""})))),Object(M.jsx)("div",{css:be},Object(M.jsx)("h2",{css:me},"Supported Databases"),Object(M.jsx)("ul",{className:"database-list"},re.a.map((function(e){var t=e.title,a=e.imgName,r=e.width,i=e.height;return Object(M.jsx)("li",null,Object(M.jsx)(se,{imageName:a,width:r,height:i,alt:t}))}))),Object(M.jsx)("span",{className:"databaseSub"},"... and many other",Object(M.jsx)("a",{href:"docs/databases/installing-database-drivers"}," ","compatible databases"," ")))))))}));t.default=Se;void 0!==Se&&Se&&Se===Object(Se)&&Object.isExtensible(Se)&&!Se.hasOwnProperty("__filemeta")&&Object.defineProperty(Se,"__filemeta",{configurable:!0,value:{name:"__DOCZ_DUMMY_EXPORT_DEFAULT",filename:"src/pages/index.tsx"}})},ToDW:function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(a("j8BX")),n=r(a("hrfQ")),o=r(a("phZJ")),l=r(a("lFqo")),s=r(a("v06X")),d=r(a("IVAY")),c=r(a("CPqs")),u=r(a("0jh0")),f=r(a("q1tI")),p=a("hQUZ"),h=r(a("pIsd")),g=r(a("cZFH")),m=a("3K4p"),v=function(e){(0,d.default)(a,e);var t=(0,c.default)(a);function a(e){var r;return(0,o.default)(this,a),r=t.call(this,e),(0,u.default)((0,s.default)(r),"innerSliderRefHandler",(function(e){return r.innerSlider=e})),(0,u.default)((0,s.default)(r),"slickPrev",(function(){return r.innerSlider.slickPrev()})),(0,u.default)((0,s.default)(r),"slickNext",(function(){return r.innerSlider.slickNext()})),(0,u.default)((0,s.default)(r),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return r.innerSlider.slickGoTo(e,t)})),(0,u.default)((0,s.default)(r),"slickPause",(function(){return r.innerSlider.pause("paused")})),(0,u.default)((0,s.default)(r),"slickPlay",(function(){return r.innerSlider.autoPlay("play")})),r.state={breakpoint:null},r._responsiveMediaHandlers=[],r}return(0,l.default)(a,[{key:"media",value:function(e,t){var a=window.matchMedia(e),r=function(e){e.matches&&t()};a.addListener(r),r(a),this._responsiveMediaHandlers.push({mql:a,query:e,listener:r})}},{key:"componentDidMount",value:function(){var e=this;if(this.props.responsive){var t=this.props.responsive.map((function(e){return e.breakpoint}));t.sort((function(e,t){return e-t})),t.forEach((function(a,r){var i;i=0===r?(0,h.default)({minWidth:0,maxWidth:a}):(0,h.default)({minWidth:t[r-1]+1,maxWidth:a}),(0,m.canUseDOM)()&&e.media(i,(function(){e.setState({breakpoint:a})}))}));var a=(0,h.default)({minWidth:t.slice(-1)[0]});(0,m.canUseDOM)()&&this.media(a,(function(){e.setState({breakpoint:null})}))}}},{key:"componentWillUnmount",value:function(){this._responsiveMediaHandlers.forEach((function(e){e.mql.removeListener(e.listener)}))}},{key:"render",value:function(){var e,t,a=this;(e=this.state.breakpoint?"unslick"===(t=this.props.responsive.filter((function(e){return e.breakpoint===a.state.breakpoint})))[0].settings?"unslick":(0,n.default)((0,n.default)((0,n.default)({},g.default),this.props),t[0].settings):(0,n.default)((0,n.default)({},g.default),this.props)).centerMode&&(e.slidesToScroll,e.slidesToScroll=1),e.fade&&(e.slidesToShow,e.slidesToScroll,e.slidesToShow=1,e.slidesToScroll=1);var r=f.default.Children.toArray(this.props.children);r=r.filter((function(e){return"string"==typeof e?!!e.trim():!!e})),e.variableWidth&&(e.rows>1||e.slidesPerRow>1)&&(console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1"),e.variableWidth=!1);for(var o=[],l=null,s=0;s<r.length;s+=e.rows*e.slidesPerRow){for(var d=[],c=s;c<s+e.rows*e.slidesPerRow;c+=e.slidesPerRow){for(var u=[],h=c;h<c+e.slidesPerRow&&(e.variableWidth&&r[h].props.style&&(l=r[h].props.style.width),!(h>=r.length));h+=1)u.push(f.default.cloneElement(r[h],{key:100*s+10*c+h,tabIndex:-1,style:{width:"".concat(100/e.slidesPerRow,"%"),display:"inline-block"}}));d.push(f.default.createElement("div",{key:10*s+c},u))}e.variableWidth?o.push(f.default.createElement("div",{key:s,style:{width:l}},d)):o.push(f.default.createElement("div",{key:s},d))}if("unslick"===e){var m="regular slider "+(this.props.className||"");return f.default.createElement("div",{className:m},r)}return o.length<=e.slidesToShow&&(e.unslick=!0),f.default.createElement(p.InnerSlider,(0,i.default)({style:this.props.style,ref:this.innerSliderRefHandler},e),o)}}]),a}(f.default.Component);t.default=v},cZFH:function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(a("q1tI")),n={accessibility:!0,adaptiveHeight:!1,afterChange:null,appendDots:function(e){return i.default.createElement("ul",{style:{display:"block"}},e)},arrows:!0,autoplay:!1,autoplaySpeed:3e3,beforeChange:null,centerMode:!1,centerPadding:"50px",className:"",cssEase:"ease",customPaging:function(e){return i.default.createElement("button",null,e+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,infinite:!0,initialSlide:0,lazyLoad:null,nextArrow:null,onEdge:null,onInit:null,onLazyLoadError:null,onReInit:null,pauseOnDotsHover:!1,pauseOnFocus:!1,pauseOnHover:!0,prevArrow:null,responsive:null,rows:1,rtl:!1,slide:"div",slidesPerRow:1,slidesToScroll:1,slidesToShow:1,speed:500,swipe:!0,swipeEvent:null,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,waitForAnimate:!0};t.default=n},coqV:function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.Dots=void 0;var i=r(a("hrfQ")),n=r(a("phZJ")),o=r(a("lFqo")),l=r(a("IVAY")),s=r(a("CPqs")),d=r(a("q1tI")),c=r(a("TSYQ")),u=a("3K4p"),f=function(e){(0,l.default)(a,e);var t=(0,s.default)(a);function a(){return(0,n.default)(this,a),t.apply(this,arguments)}return(0,o.default)(a,[{key:"clickHandler",value:function(e,t){t.preventDefault(),this.props.clickHandler(e)}},{key:"render",value:function(){for(var e,t=this.props,a=t.onMouseEnter,r=t.onMouseOver,n=t.onMouseLeave,o=t.infinite,l=t.slidesToScroll,s=t.slidesToShow,f=t.slideCount,p=t.currentSlide,h=(e={slideCount:f,slidesToScroll:l,slidesToShow:s,infinite:o}).infinite?Math.ceil(e.slideCount/e.slidesToScroll):Math.ceil((e.slideCount-e.slidesToShow)/e.slidesToScroll)+1,g={onMouseEnter:a,onMouseOver:r,onMouseLeave:n},m=[],v=0;v<h;v++){var b=(v+1)*l-1,y=o?b:(0,u.clamp)(b,0,f-1),w=y-(l-1),S=o?w:(0,u.clamp)(w,0,f-1),k=(0,c.default)({"slick-active":o?p>=S&&p<=y:p===S}),x={message:"dots",index:v,slidesToScroll:l,currentSlide:p},O=this.clickHandler.bind(this,x);m=m.concat(d.default.createElement("li",{key:v,className:k},d.default.cloneElement(this.props.customPaging(v),{onClick:O})))}return d.default.cloneElement(this.props.appendDots(m),(0,i.default)({className:this.props.dotsClass},g))}}]),a}(d.default.PureComponent);t.Dots=f},fT7D:function(e,t,a){e.exports=a.p+"static/superset-logo-horiz-apache-ac1a91de27eed9f5c53944c555a39c6f.svg"},hQUZ:function(e,t,a){"use strict";var r=a("5NKs");Object.defineProperty(t,"__esModule",{value:!0}),t.InnerSlider=void 0;var i=r(a("cjBy")),n=r(a("j8BX")),o=r(a("xK7m")),l=r(a("hrfQ")),s=r(a("phZJ")),d=r(a("lFqo")),c=r(a("v06X")),u=r(a("IVAY")),f=r(a("CPqs")),p=r(a("0jh0")),h=r(a("q1tI")),g=r(a("F1Ou")),m=r(a("sEfC")),v=r(a("TSYQ")),b=a("3K4p"),y=a("+uyH"),w=a("coqV"),S=a("3Fjq"),k=r(a("bdgK")),x=function(e){(0,u.default)(a,e);var t=(0,f.default)(a);function a(e){var r;(0,s.default)(this,a),r=t.call(this,e),(0,p.default)((0,c.default)(r),"listRefHandler",(function(e){return r.list=e})),(0,p.default)((0,c.default)(r),"trackRefHandler",(function(e){return r.track=e})),(0,p.default)((0,c.default)(r),"adaptHeight",(function(){if(r.props.adaptiveHeight&&r.list){var e=r.list.querySelector('[data-index="'.concat(r.state.currentSlide,'"]'));r.list.style.height=(0,b.getHeight)(e)+"px"}})),(0,p.default)((0,c.default)(r),"componentDidMount",(function(){if(r.props.onInit&&r.props.onInit(),r.props.lazyLoad){var e=(0,b.getOnDemandLazySlides)((0,l.default)((0,l.default)({},r.props),r.state));e.length>0&&(r.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),r.props.onLazyLoad&&r.props.onLazyLoad(e))}var t=(0,l.default)({listRef:r.list,trackRef:r.track},r.props);r.updateState(t,!0,(function(){r.adaptHeight(),r.props.autoplay&&r.autoPlay("update")})),"progressive"===r.props.lazyLoad&&(r.lazyLoadTimer=setInterval(r.progressiveLazyLoad,1e3)),r.ro=new k.default((function(){r.state.animating?(r.onWindowResized(!1),r.callbackTimers.push(setTimeout((function(){return r.onWindowResized()}),r.props.speed))):r.onWindowResized()})),r.ro.observe(r.list),Array.prototype.forEach.call(document.querySelectorAll(".slick-slide"),(function(e){e.onfocus=r.props.pauseOnFocus?r.onSlideFocus:null,e.onblur=r.props.pauseOnFocus?r.onSlideBlur:null})),window.addEventListener?window.addEventListener("resize",r.onWindowResized):window.attachEvent("onresize",r.onWindowResized)})),(0,p.default)((0,c.default)(r),"componentWillUnmount",(function(){r.animationEndCallback&&clearTimeout(r.animationEndCallback),r.lazyLoadTimer&&clearInterval(r.lazyLoadTimer),r.callbackTimers.length&&(r.callbackTimers.forEach((function(e){return clearTimeout(e)})),r.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",r.onWindowResized):window.detachEvent("onresize",r.onWindowResized),r.autoplayTimer&&clearInterval(r.autoplayTimer),r.ro.disconnect()})),(0,p.default)((0,c.default)(r),"componentDidUpdate",(function(e){if(r.checkImagesLoad(),r.props.onReInit&&r.props.onReInit(),r.props.lazyLoad){var t=(0,b.getOnDemandLazySlides)((0,l.default)((0,l.default)({},r.props),r.state));t.length>0&&(r.setState((function(e){return{lazyLoadedList:e.lazyLoadedList.concat(t)}})),r.props.onLazyLoad&&r.props.onLazyLoad(t))}r.adaptHeight();var a=(0,l.default)((0,l.default)({listRef:r.list,trackRef:r.track},r.props),r.state),i=r.didPropsChange(e);i&&r.updateState(a,i,(function(){r.state.currentSlide>=h.default.Children.count(r.props.children)&&r.changeSlide({message:"index",index:h.default.Children.count(r.props.children)-r.props.slidesToShow,currentSlide:r.state.currentSlide}),e.autoplay===r.props.autoplay&&e.autoplaySpeed===r.props.autoplaySpeed||(r.props.autoplay?r.autoPlay("update"):r.pause("paused"))}))})),(0,p.default)((0,c.default)(r),"onWindowResized",(function(e){r.debouncedResize&&r.debouncedResize.cancel(),r.debouncedResize=(0,m.default)((function(){return r.resizeWindow(e)}),50),r.debouncedResize()})),(0,p.default)((0,c.default)(r),"resizeWindow",(function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=Boolean(r.track&&r.track.node);if(t){var a=(0,l.default)((0,l.default)({listRef:r.list,trackRef:r.track},r.props),r.state);r.updateState(a,e,(function(){r.props.autoplay?r.autoPlay("update"):r.pause("paused")})),r.setState({animating:!1}),clearTimeout(r.animationEndCallback),delete r.animationEndCallback}})),(0,p.default)((0,c.default)(r),"updateState",(function(e,t,a){var i=(0,b.initializedState)(e);e=(0,l.default)((0,l.default)((0,l.default)({},e),i),{},{slideIndex:i.currentSlide});var n=(0,b.getTrackLeft)(e);e=(0,l.default)((0,l.default)({},e),{},{left:n});var o=(0,b.getTrackCSS)(e);(t||h.default.Children.count(r.props.children)!==h.default.Children.count(e.children))&&(i.trackStyle=o),r.setState(i,a)})),(0,p.default)((0,c.default)(r),"ssrInit",(function(){if(r.props.variableWidth){var e=0,t=0,a=[],i=(0,b.getPreClones)((0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{slideCount:r.props.children.length})),n=(0,b.getPostClones)((0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{slideCount:r.props.children.length}));r.props.children.forEach((function(t){a.push(t.props.style.width),e+=t.props.style.width}));for(var o=0;o<i;o++)t+=a[a.length-1-o],e+=a[a.length-1-o];for(var s=0;s<n;s++)e+=a[s];for(var d=0;d<r.state.currentSlide;d++)t+=a[d];var c={width:e+"px",left:-t+"px"};if(r.props.centerMode){var u="".concat(a[r.state.currentSlide],"px");c.left="calc(".concat(c.left," + (100% - ").concat(u,") / 2 ) ")}return{trackStyle:c}}var f=h.default.Children.count(r.props.children),p=(0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{slideCount:f}),g=(0,b.getPreClones)(p)+(0,b.getPostClones)(p)+f,m=100/r.props.slidesToShow*g,v=100/g,y=-v*((0,b.getPreClones)(p)+r.state.currentSlide)*m/100;return r.props.centerMode&&(y+=(100-v*m/100)/2),{slideWidth:v+"%",trackStyle:{width:m+"%",left:y+"%"}}})),(0,p.default)((0,c.default)(r),"checkImagesLoad",(function(){var e=r.list.querySelectorAll(".slick-slide img"),t=e.length,a=0;Array.prototype.forEach.call(e,(function(e){var i=function(){return++a&&a>=t&&r.onWindowResized()};if(e.onclick){var n=e.onclick;e.onclick=function(){n(),e.parentNode.focus()}}else e.onclick=function(){return e.parentNode.focus()};e.onload||(r.props.lazyLoad?e.onload=function(){r.adaptHeight(),r.callbackTimers.push(setTimeout(r.onWindowResized,r.props.speed))}:(e.onload=i,e.onerror=function(){i(),r.props.onLazyLoadError&&r.props.onLazyLoadError()}))}))})),(0,p.default)((0,c.default)(r),"progressiveLazyLoad",(function(){for(var e=[],t=(0,l.default)((0,l.default)({},r.props),r.state),a=r.state.currentSlide;a<r.state.slideCount+(0,b.getPostClones)(t);a++)if(r.state.lazyLoadedList.indexOf(a)<0){e.push(a);break}for(var i=r.state.currentSlide-1;i>=-(0,b.getPreClones)(t);i--)if(r.state.lazyLoadedList.indexOf(i)<0){e.push(i);break}e.length>0?(r.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),r.props.onLazyLoad&&r.props.onLazyLoad(e)):r.lazyLoadTimer&&(clearInterval(r.lazyLoadTimer),delete r.lazyLoadTimer)})),(0,p.default)((0,c.default)(r),"slideHandler",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=r.props,i=a.asNavFor,n=a.beforeChange,s=a.onLazyLoad,d=a.speed,c=a.afterChange,u=r.state.currentSlide,f=(0,b.slideHandler)((0,l.default)((0,l.default)((0,l.default)({index:e},r.props),r.state),{},{trackRef:r.track,useCSS:r.props.useCSS&&!t})),p=f.state,h=f.nextState;if(p){n&&n(u,p.currentSlide);var g=p.lazyLoadedList.filter((function(e){return r.state.lazyLoadedList.indexOf(e)<0}));s&&g.length>0&&s(g),!r.props.waitForAnimate&&r.animationEndCallback&&(clearTimeout(r.animationEndCallback),c&&c(u),delete r.animationEndCallback),r.setState(p,(function(){i&&r.asNavForIndex!==e&&(r.asNavForIndex=e,i.innerSlider.slideHandler(e)),h&&(r.animationEndCallback=setTimeout((function(){var e=h.animating,t=(0,o.default)(h,["animating"]);r.setState(t,(function(){r.callbackTimers.push(setTimeout((function(){return r.setState({animating:e})}),10)),c&&c(p.currentSlide),delete r.animationEndCallback}))}),d))}))}})),(0,p.default)((0,c.default)(r),"changeSlide",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=(0,l.default)((0,l.default)({},r.props),r.state),i=(0,b.changeSlide)(a,e);if((0===i||i)&&(!0===t?r.slideHandler(i,t):r.slideHandler(i),r.props.autoplay&&r.autoPlay("update"),r.props.focusOnSelect)){var n=r.list.querySelectorAll(".slick-current");n[0]&&n[0].focus()}})),(0,p.default)((0,c.default)(r),"clickHandler",(function(e){!1===r.clickable&&(e.stopPropagation(),e.preventDefault()),r.clickable=!0})),(0,p.default)((0,c.default)(r),"keyHandler",(function(e){var t=(0,b.keyHandler)(e,r.props.accessibility,r.props.rtl);""!==t&&r.changeSlide({message:t})})),(0,p.default)((0,c.default)(r),"selectHandler",(function(e){r.changeSlide(e)})),(0,p.default)((0,c.default)(r),"disableBodyScroll",(function(){window.ontouchmove=function(e){(e=e||window.event).preventDefault&&e.preventDefault(),e.returnValue=!1}})),(0,p.default)((0,c.default)(r),"enableBodyScroll",(function(){window.ontouchmove=null})),(0,p.default)((0,c.default)(r),"swipeStart",(function(e){r.props.verticalSwiping&&r.disableBodyScroll();var t=(0,b.swipeStart)(e,r.props.swipe,r.props.draggable);""!==t&&r.setState(t)})),(0,p.default)((0,c.default)(r),"swipeMove",(function(e){var t=(0,b.swipeMove)(e,(0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{trackRef:r.track,listRef:r.list,slideIndex:r.state.currentSlide}));t&&(t.swiping&&(r.clickable=!1),r.setState(t))})),(0,p.default)((0,c.default)(r),"swipeEnd",(function(e){var t=(0,b.swipeEnd)(e,(0,l.default)((0,l.default)((0,l.default)({},r.props),r.state),{},{trackRef:r.track,listRef:r.list,slideIndex:r.state.currentSlide}));if(t){var a=t.triggerSlideHandler;delete t.triggerSlideHandler,r.setState(t),void 0!==a&&(r.slideHandler(a),r.props.verticalSwiping&&r.enableBodyScroll())}})),(0,p.default)((0,c.default)(r),"touchEnd",(function(e){r.swipeEnd(e),r.clickable=!0})),(0,p.default)((0,c.default)(r),"slickPrev",(function(){r.callbackTimers.push(setTimeout((function(){return r.changeSlide({message:"previous"})}),0))})),(0,p.default)((0,c.default)(r),"slickNext",(function(){r.callbackTimers.push(setTimeout((function(){return r.changeSlide({message:"next"})}),0))})),(0,p.default)((0,c.default)(r),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e=Number(e),isNaN(e))return"";r.callbackTimers.push(setTimeout((function(){return r.changeSlide({message:"index",index:e,currentSlide:r.state.currentSlide},t)}),0))})),(0,p.default)((0,c.default)(r),"play",(function(){var e;if(r.props.rtl)e=r.state.currentSlide-r.props.slidesToScroll;else{if(!(0,b.canGoNext)((0,l.default)((0,l.default)({},r.props),r.state)))return!1;e=r.state.currentSlide+r.props.slidesToScroll}r.slideHandler(e)})),(0,p.default)((0,c.default)(r),"autoPlay",(function(e){r.autoplayTimer&&clearInterval(r.autoplayTimer);var t=r.state.autoplaying;if("update"===e){if("hovered"===t||"focused"===t||"paused"===t)return}else if("leave"===e){if("paused"===t||"focused"===t)return}else if("blur"===e&&("paused"===t||"hovered"===t))return;r.autoplayTimer=setInterval(r.play,r.props.autoplaySpeed+50),r.setState({autoplaying:"playing"})})),(0,p.default)((0,c.default)(r),"pause",(function(e){r.autoplayTimer&&(clearInterval(r.autoplayTimer),r.autoplayTimer=null);var t=r.state.autoplaying;"paused"===e?r.setState({autoplaying:"paused"}):"focused"===e?"hovered"!==t&&"playing"!==t||r.setState({autoplaying:"focused"}):"playing"===t&&r.setState({autoplaying:"hovered"})})),(0,p.default)((0,c.default)(r),"onDotsOver",(function(){return r.props.autoplay&&r.pause("hovered")})),(0,p.default)((0,c.default)(r),"onDotsLeave",(function(){return r.props.autoplay&&"hovered"===r.state.autoplaying&&r.autoPlay("leave")})),(0,p.default)((0,c.default)(r),"onTrackOver",(function(){return r.props.autoplay&&r.pause("hovered")})),(0,p.default)((0,c.default)(r),"onTrackLeave",(function(){return r.props.autoplay&&"hovered"===r.state.autoplaying&&r.autoPlay("leave")})),(0,p.default)((0,c.default)(r),"onSlideFocus",(function(){return r.props.autoplay&&r.pause("focused")})),(0,p.default)((0,c.default)(r),"onSlideBlur",(function(){return r.props.autoplay&&"focused"===r.state.autoplaying&&r.autoPlay("blur")})),(0,p.default)((0,c.default)(r),"render",(function(){var e,t,a,i=(0,v.default)("slick-slider",r.props.className,{"slick-vertical":r.props.vertical,"slick-initialized":!0}),o=(0,l.default)((0,l.default)({},r.props),r.state),s=(0,b.extractObject)(o,["fade","cssEase","speed","infinite","centerMode","focusOnSelect","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding","targetSlide","useCSS"]),d=r.props.pauseOnHover;if(s=(0,l.default)((0,l.default)({},s),{},{onMouseEnter:d?r.onTrackOver:null,onMouseLeave:d?r.onTrackLeave:null,onMouseOver:d?r.onTrackOver:null,focusOnSelect:r.props.focusOnSelect&&r.clickable?r.selectHandler:null}),!0===r.props.dots&&r.state.slideCount>=r.props.slidesToShow){var c=(0,b.extractObject)(o,["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","clickHandler","children","customPaging","infinite","appendDots"]),u=r.props.pauseOnDotsHover;c=(0,l.default)((0,l.default)({},c),{},{clickHandler:r.changeSlide,onMouseEnter:u?r.onDotsLeave:null,onMouseOver:u?r.onDotsOver:null,onMouseLeave:u?r.onDotsLeave:null}),e=h.default.createElement(w.Dots,c)}var f=(0,b.extractObject)(o,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);f.clickHandler=r.changeSlide,r.props.arrows&&(t=h.default.createElement(S.PrevArrow,f),a=h.default.createElement(S.NextArrow,f));var p=null;r.props.vertical&&(p={height:r.state.listHeight});var g=null;!1===r.props.vertical?!0===r.props.centerMode&&(g={padding:"0px "+r.props.centerPadding}):!0===r.props.centerMode&&(g={padding:r.props.centerPadding+" 0px"});var m=(0,l.default)((0,l.default)({},p),g),k=r.props.touchMove,x={className:"slick-list",style:m,onClick:r.clickHandler,onMouseDown:k?r.swipeStart:null,onMouseMove:r.state.dragging&&k?r.swipeMove:null,onMouseUp:k?r.swipeEnd:null,onMouseLeave:r.state.dragging&&k?r.swipeEnd:null,onTouchStart:k?r.swipeStart:null,onTouchMove:r.state.dragging&&k?r.swipeMove:null,onTouchEnd:k?r.touchEnd:null,onTouchCancel:r.state.dragging&&k?r.swipeEnd:null,onKeyDown:r.props.accessibility?r.keyHandler:null},O={className:i,dir:"ltr",style:r.props.style};return r.props.unslick&&(x={className:"slick-list"},O={className:i}),h.default.createElement("div",O,r.props.unslick?"":t,h.default.createElement("div",(0,n.default)({ref:r.listRefHandler},x),h.default.createElement(y.Track,(0,n.default)({ref:r.trackRefHandler},s),r.props.children)),r.props.unslick?"":a,r.props.unslick?"":e)})),r.list=null,r.track=null,r.state=(0,l.default)((0,l.default)({},g.default),{},{currentSlide:r.props.initialSlide,slideCount:h.default.Children.count(r.props.children)}),r.callbackTimers=[],r.clickable=!0,r.debouncedResize=null;var i=r.ssrInit();return r.state=(0,l.default)((0,l.default)({},r.state),i),r}return(0,d.default)(a,[{key:"didPropsChange",value:function(e){for(var t=!1,a=0,r=Object.keys(this.props);a<r.length;a++){var n=r[a];if(!e.hasOwnProperty(n)){t=!0;break}if("object"!==(0,i.default)(e[n])&&"function"!=typeof e[n]&&e[n]!==this.props[n]){t=!0;break}}return t||h.default.Children.count(this.props.children)!==h.default.Children.count(e.children)}}]),a}(h.default.Component);t.InnerSlider=x},lOwS:function(e,t,a){"use strict";t.__esModule=!0,t.default=t.supersetTheme=t.styled=t.css=t.withTheme=t.ThemeProvider=t.useTheme=void 0;var r,i=(r=a("5D9J"))&&r.__esModule?r:{default:r},n=a("wLTh");t.useTheme=n.useTheme,t.ThemeProvider=n.ThemeProvider,t.withTheme=n.withTheme;var o=a("qKvR");t.css=o.css;var l=i.default;t.styled=l;var s={borderRadius:4,colors:{primary:{base:"#20A7C9",dark1:"#1A85A0",dark2:"#156378",light1:"#79CADE",light2:"#A5DAE9",light3:"#D2EDF4",light4:"#E9F6F9",light5:"#F3F8FA"},secondary:{base:"#444E7C",dark1:"#363E63",dark2:"#282E4A",dark3:"#1B1F31",light1:"#8E94B0",light2:"#B4B8CA",light3:"#D9DBE4",light4:"#ECEEF2",light5:"#F5F5F8"},grayscale:{base:"#666666",dark1:"#323232",dark2:"#000000",light1:"#B2B2B2",light2:"#E0E0E0",light3:"#F0F0F0",light4:"#F7F7F7",light5:"#FFFFFF"},error:{base:"#E04355",dark1:"#A7323F",dark2:"#6F212A",light1:"#EFA1AA",light2:"#FAEDEE"},warning:{base:"#FF7F44",dark1:"#BF5E33",dark2:"#7F3F21",light1:"#FEC0A1",light2:"#FFF2EC"},alert:{base:"#FCC700",dark1:"#BC9501",dark2:"#7D6300",light1:"#FDE380",light2:"#FEF9E6"},success:{base:"#5AC189",dark1:"#439066",dark2:"#2B6144",light1:"#ACE1C4",light2:"#EEF8F3"},info:{base:"#66BCFE",dark1:"#4D8CBE",dark2:"#315E7E",light1:"#B3DEFE",light2:"#EFF8FE"}},opacity:{light:"10%",mediumLight:"35%",mediumHeavy:"60%",heavy:"80%"},typography:{families:{sansSerif:"'Inter', Helvetica, Arial",serif:"Georgia, 'Times New Roman', Times, serif",monospace:"'Fira Code', 'Courier New', monospace"},weights:{light:200,normal:400,bold:700},sizes:{xxs:9,xs:10,s:12,m:14,l:16,xl:21,xxl:28}},zIndex:{aboveDashboardCharts:10,dropdown:11,max:3e3},transitionTiming:.3,gridUnit:4};t.supersetTheme=s;var d=l;t.default=d},mdmF:function(e,t,a){},pIsd:function(e,t,a){var r=a("BJfS"),i=function(e){var t="",a=Object.keys(e);return a.forEach((function(i,n){var o=e[i];(function(e){return/[height|width]$/.test(e)})(i=r(i))&&"number"==typeof o&&(o+="px"),t+=!0===o?i:!1===o?"not "+i:"("+i+": "+o+")",n<a.length-1&&(t+=" and ")})),t};e.exports=function(e){var t="";return"string"==typeof e?e:e instanceof Array?(e.forEach((function(a,r){t+=i(a),r<e.length-1&&(t+=", ")})),t):i(e)}},q01k:function(e,t,a){"use strict";a.r(t),a.d(t,"render",(function(){return E}));var r=window.document,i=window.Math,n=window.HTMLElement,o=window.XMLHttpRequest,l=function(e){return function(t,a,r){var i=e.createElement(t);if(null!=a)for(var n in a){var o=a[n];null!=o&&(null!=i[n]?i[n]=o:i.setAttribute(n,o))}if(null!=r)for(var l=0,s=r.length;l<s;l++){var d=r[l];i.appendChild("string"==typeof d?e.createTextNode(d):d)}return i}},s=l(r),d=function(e,t){return{}.hasOwnProperty.call(e,t)},c=function(e){return(""+e).toLowerCase()},u="github.com",f=o&&"prototype"in o&&"withCredentials"in o.prototype,p=f&&n&&"attachShadow"in n.prototype&&!("prototype"in n.prototype.attachShadow),h=function(e,t,a){e.addEventListener?e.addEventListener(t,a,!1):e.attachEvent("on"+t,a)},g=function(e,t,a){e.removeEventListener?e.removeEventListener(t,a,!1):e.detachEvent("on"+t,a)},m={light:".btn{color:#24292e;background-color:#eff3f6;border-color:#c5c9cc;border-color:rgba(27,31,35,.2);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23fafbfc'/%3e%3cstop offset='90%25' stop-color='%23eff3f6'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #fafbfc, #eff3f6 90%);background-image:linear-gradient(180deg, #fafbfc, #eff3f6 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFFAFBFC', endColorstr='#FFEEF2F5')}:root .btn{filter:none}.btn:focus,.btn:hover{background-color:#e6ebf1;background-position:-0.5em;border-color:#9fa4a9;border-color:rgba(27,31,35,.35);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23f0f3f6'/%3e%3cstop offset='90%25' stop-color='%23e6ebf1'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #f0f3f6, #e6ebf1 90%);background-image:linear-gradient(180deg, #f0f3f6, #e6ebf1 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF0F3F6', endColorstr='#FFE5EAF0')}:root .btn:focus,:root .btn:hover{filter:none}.btn:active{background-color:#e9ecef;border-color:#a1a4a8;border-color:rgba(27,31,35,.35);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15);background-image:none;filter:none}.social-count{color:#24292e;background-color:#fff;border-color:#d1d2d3;border-color:rgba(27,31,35,.2)}.social-count:focus,.social-count:hover{color:#0366d6}.octicon-heart{color:#ea4aaa}",dark:".btn{color:#fafbfc;background-color:#202428;border-color:#1f2327;border-color:rgba(27,31,35,.2);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%232f363d'/%3e%3cstop offset='90%25' stop-color='%23202428'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #2f363d, #202428 90%);background-image:linear-gradient(180deg, #2f363d, #202428 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF2F363D', endColorstr='#FF1E2226')}:root .btn{filter:none}.btn:focus,.btn:hover{background-color:#1b1f23;background-position:-0.5em;border-color:#1b1f23;border-color:rgba(27,31,35,.5);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%232b3137'/%3e%3cstop offset='90%25' stop-color='%231b1f23'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #2b3137, #1b1f23 90%);background-image:linear-gradient(180deg, #2b3137, #1b1f23 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF2B3137', endColorstr='#FF191D21')}:root .btn:focus,:root .btn:hover{filter:none}.btn:active{background-color:#181b1f;border-color:#1a1d21;border-color:rgba(27,31,35,.5);box-shadow:inset 0 .15em .3em rgba(27,31,35,.15);background-image:none;filter:none}.social-count{color:#fafbfc;background-color:#1b1f23;border-color:#1b1f23;border-color:rgba(27,31,35,.2)}.social-count:focus,.social-count:hover{color:#2188ff}.octicon-heart{color:#ec6cb9}"},v=function(e,t){return"@media(prefers-color-scheme:"+e+"){"+m[d(m,t)?t:e]+"}"},b=function(e){if(null==e)return m.light;if(d(m,e))return m[e];var t=function(e,t,a,r){null==t&&(t="&"),null==a&&(a="="),null==r&&(r=window.decodeURIComponent);for(var i={},n=e.split(t),o=0,l=n.length;o<l;o++){var s=n[o];if(""!==s){var d=s.split(a);i[r(d[0])]=null!=d[1]?r(d.slice(1).join(a)):void 0}}return i}(e,";",":",(function(e){return e.replace(/^[ \t\n\f\r]+|[ \t\n\f\r]+$/g,"")}));return m[d(m,t["no-preference"])?t["no-preference"]:"light"]+v("light",t.light)+v("dark",t.dark)},y={"mark-github":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path>'}}},heart:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.565 20.565 0 008 13.393a20.561 20.561 0 003.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.75.75 0 01-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5zM8 14.25l-.345.666-.002-.001-.006-.003-.018-.01a7.643 7.643 0 01-.31-.17 22.075 22.075 0 01-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.08 22.08 0 01-3.744 2.584l-.018.01-.006.003h-.002L8 14.25zm0 0l.345.666a.752.752 0 01-.69 0L8 14.25z"></path>'}}},eye:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path>'}}},star:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path>'}}},"repo-forked":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path>'}}},"repo-template":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M6 .75A.75.75 0 016.75 0h2.5a.75.75 0 010 1.5h-2.5A.75.75 0 016 .75zm5 0a.75.75 0 01.75-.75h1.5a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V1.5h-.75A.75.75 0 0111 .75zM4.992.662a.75.75 0 01-.636.848c-.436.063-.783.41-.846.846a.75.75 0 01-1.485-.212A2.501 2.501 0 014.144.025a.75.75 0 01.848.637zM2.75 4a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 012.75 4zm10.5 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5a.75.75 0 01.75-.75zM2.75 8a.75.75 0 01.75.75v.268A1.72 1.72 0 013.75 9h.5a.75.75 0 010 1.5h-.5a.25.25 0 00-.25.25v.75c0 .28.114.532.3.714a.75.75 0 01-1.05 1.072A2.495 2.495 0 012 11.5V8.75A.75.75 0 012.75 8zm10.5 0a.75.75 0 01.75.75v4.5a.75.75 0 01-.75.75h-2.5a.75.75 0 010-1.5h1.75v-2h-.75a.75.75 0 010-1.5h.75v-.25a.75.75 0 01.75-.75zM6 9.75A.75.75 0 016.75 9h2.5a.75.75 0 010 1.5h-2.5A.75.75 0 016 9.75zm-1 2.5v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path>'}}},"issue-opened":{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"></path>'}}},download:{heights:{16:{width:16,path:'<path fill-rule="evenodd" d="M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"></path>'}}}},w=function(e,t){e=c(e).replace(/^octicon-/,""),d(y,e)||(e="mark-github");var a=t>=24&&24 in y[e].heights?24:16,r=y[e].heights[a];return'<svg viewBox="0 0 '+r.width+" "+a+'" width="'+t*r.width/a+'" height="'+t+'" class="octicon octicon-'+e+'" aria-hidden="true">'+r.path+"</svg>"},S={},k=function(e,t){var a=S[e]||(S[e]=[]);if(!(a.push(t)>1)){var r=function(e){var t;return function(){t||(t=1,e.apply(this,arguments))}}((function(){for(delete S[e];t=a.shift();)t.apply(null,arguments)}));if(f){var i=new o;h(i,"abort",r),h(i,"error",r),h(i,"load",(function(){var e;try{e=JSON.parse(this.responseText)}catch(t){return void r(t)}r(200!==this.status,e)})),i.open("GET",e),i.send()}else{var n=this||window;n._=function(e){n._=null,r(200!==e.meta.status,e.data)};var s=l(n.document)("script",{async:!0,src:e+(-1!==e.indexOf("?")?"&":"?")+"callback=_"}),d=function(){n._&&n._({meta:{}})};h(s,"load",d),h(s,"error",d),s.readyState&&function(e,t,a){h(e,"readystatechange",(function r(){if(t.test(e.readyState))return g(e,"readystatechange",r),a.apply(this,arguments)}))}(s,/de|m/,d),n.document.getElementsByTagName("head")[0].appendChild(s)}}},x=function(e,t,a){var r=l(e.ownerDocument),i=e.appendChild(r("style",{type:"text/css"})),n="body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;line-height:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:20px;padding:3px 10px;font-size:12px;line-height:20px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor}"+b(t["data-color-scheme"]);i.styleSheet?i.styleSheet.cssText=n:i.appendChild(e.ownerDocument.createTextNode(n));var o="large"===c(t["data-size"]),s=r("a",{className:"btn",href:t.href,rel:"noopener",target:"_blank",title:t.title||void 0,"aria-label":t["aria-label"]||void 0,innerHTML:w(t["data-icon"],o?16:14)},[" ",r("span",{},[t["data-text"]||""])]),d=e.appendChild(r("div",{className:"widget"+(o?" widget-lg":"")},[s])),f=s.hostname.replace(/\.$/,"");if(f.length<u.length||("."+f).substring(f.length-u.length)!=="."+u)return s.removeAttribute("href"),void a(d);var p=(" /"+s.pathname).split(/\/+/);if(((f===u||f==="gist."+u)&&"archive"===p[3]||f===u&&"releases"===p[3]&&("download"===p[4]||"latest"===p[4]&&"download"===p[5])||f==="codeload."+u)&&(s.target="_top"),"true"===c(t["data-show-count"])&&f===u){var h,g;if(!p[2]&&p[1])g="followers",h="?tab=followers";else if(!p[3]&&p[2])g="stargazers_count",h="/stargazers";else if(p[4]||"subscription"!==p[3])if(p[4]||"fork"!==p[3]){if("issues"!==p[3])return void a(d);g="open_issues_count",h="/issues"}else g="forks_count",h="/network/members";else g="subscribers_count",h="/watchers";var m=p[2]?"/repos/"+p[1]+"/"+p[2]:"/users/"+p[1];k.call(this,"https://api.github.com"+m,(function(e,t){if(!e){var i=t[g];d.appendChild(r("a",{className:"social-count",href:t.html_url+h,rel:"noopener",target:"_blank","aria-label":i+" "+g.replace(/_count$/,"").replace("_"," ").slice(0,i<2?-1:void 0)+" on GitHub"},[(""+i).replace(/\B(?=(\d{3})+(?!\d))/g,",")]))}a(d)}))}else a(d)},O=window.devicePixelRatio||1,j=function(e){return(O>1?i.ceil(i.round(e*O)/O*2)/2:i.ceil(e))||0},C=function(e,t){e.style.width=t[0]+"px",e.style.height=t[1]+"px"},E=function(e,t){if(null!=e&&null!=t)if(e.getAttribute&&(e=function(e){for(var t={href:e.href,title:e.title,"aria-label":e.getAttribute("aria-label")},a=["icon","color-scheme","text","size","show-count"],r=0,i=a.length;r<i;r++){var n="data-"+a[r];t[n]=e.getAttribute(n)}return null==t["data-text"]&&(t["data-text"]=e.textContent||e.innerText),t}(e)),p){var a=s("span");x(a.attachShadow({mode:"closed"}),e,(function(){t(a)}))}else{var n=s("iframe",{src:"javascript:0",title:e.title||void 0,allowtransparency:!0,scrolling:"no",frameBorder:0});C(n,[0,0]),n.style.border="none";h(n,"load",(function a(){var o,l=n.contentWindow;try{o=l.document.body}catch(s){return void r.body.appendChild(n.parentNode.removeChild(n))}g(n,"load",a),x.call(l,o,e,(function(a){var r=function(e){var t=e.offsetWidth,a=e.offsetHeight;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=i.max(t,j(r.width)),a=i.max(a,j(r.height))}return[t,a]}(a);n.parentNode.removeChild(n),function(e,t,a){h(e,t,(function r(){return g(e,t,r),a.apply(this,arguments)}))}(n,"load",(function(){C(n,r)})),n.src="https://unpkg.com/github-buttons@2.14.0/dist/buttons.html#"+(n.name=function(e,t,a,r){null==t&&(t="&"),null==a&&(a="="),null==r&&(r=window.encodeURIComponent);var i=[];for(var n in e){var o=e[n];null!=o&&i.push(r(n)+a+r(o))}return i.join(t)}(e)),t(n)}))})),r.body.appendChild(n)}}},wLTh:function(e,t,a){"use strict";a.r(t),a.d(t,"ThemeProvider",(function(){return m})),a.d(t,"useTheme",(function(){return b})),a.d(t,"withTheme",(function(){return v}));var r=a("0jh0"),i=a.n(r),n=a("q1tI"),o=a.n(n),l=a("qKvR"),s=a("gRFL"),d=a("j8BX"),c=a.n(d),u=a("2mql"),f=a.n(u);function p(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}var h=function(e,t){return"function"==typeof t?t(e):function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?p(a,!0).forEach((function(t){i()(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):p(a).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}({},e,{},t)},g=Object(s.a)((function(e){return Object(s.a)((function(t){return h(e,t)}))})),m=function(e){return Object(n.createElement)(l.ThemeContext.Consumer,null,(function(t){return e.theme!==t&&(t=g(t)(e.theme)),Object(n.createElement)(l.ThemeContext.Provider,{value:t},e.children)}))};function v(e){var t=e.displayName||e.name||"Component",a=Object(n.forwardRef)((function(t,a){return Object(n.createElement)(l.ThemeContext.Consumer,null,(function(r){return Object(n.createElement)(e,c()({theme:r,ref:a},t))}))}));return a.displayName="WithTheme("+t+")",f()(a,e)}function b(){return o.a.useContext(l.ThemeContext)}}}]);
//# sourceMappingURL=component---src-pages-index-tsx-780f6047c31ac828a1f4.js.map