/*! For license information please see 9904.305f5b5d.js.LICENSE.txt */
(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[9904],{36489:(e,t,r)=>{"use strict";r.d(t,{A:()=>ie});var n=r(64467),o=r(58168),i=r(96540),a=r(89379),l=r(23029),s=r(92901),c=r(9417),d=r(85501),u=r(64718),p=r(82284),f=r(80045);const h={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};var g=r(38221),v=r.n(g),b=r(32485),m=r.n(b);function w(e,t,r){return Math.max(t,Math.min(e,r))}var A=function(e){["onTouchStart","onTouchMove","onWheel"].includes(e._reactName)||e.preventDefault()},k=function(e){for(var t=[],r=y(e),n=S(e),o=r;o<n;o++)e.lazyLoadedList.indexOf(o)<0&&t.push(o);return t},y=function(e){return e.currentSlide-x(e)},S=function(e){return e.currentSlide+C(e)},x=function(e){return e.centerMode?Math.floor(e.slidesToShow/2)+(parseInt(e.centerPadding)>0?1:0):0},C=function(e){return e.centerMode?Math.floor((e.slidesToShow-1)/2)+1+(parseInt(e.centerPadding)>0?1:0):e.slidesToShow},T=function(e){return e&&e.offsetWidth||0},L=function(e){return e&&e.offsetHeight||0},M=function(e){var t,r,n,o,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t=e.startX-e.curX,r=e.startY-e.curY,n=Math.atan2(r,t),(o=Math.round(180*n/Math.PI))<0&&(o=360-Math.abs(o)),o<=45&&o>=0||o<=360&&o>=315?"left":o>=135&&o<=225?"right":!0===i?o>=35&&o<=135?"up":"down":"vertical"},E=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},z=function(e,t){var r={};return t.forEach((function(t){return r[t]=e[t]})),r},H=function(e,t){var r=function(e){for(var t=e.infinite?2*e.slideCount:e.slideCount,r=e.infinite?-1*e.slidesToShow:0,n=e.infinite?-1*e.slidesToShow:0,o=[];r<t;)o.push(r),r=n+e.slidesToScroll,n+=Math.min(e.slidesToScroll,e.slidesToShow);return o}(e),n=0;if(t>r[r.length-1])t=r[r.length-1];else for(var o in r){if(t<r[o]){t=n;break}n=r[o]}return t},W=function(e){var t=e.centerMode?e.slideWidth*Math.floor(e.slidesToShow/2):0;if(e.swipeToSlide){var r,n=e.listRef,o=n.querySelectorAll&&n.querySelectorAll(".slick-slide")||[];if(Array.from(o).every((function(n){if(e.vertical){if(n.offsetTop+L(n)/2>-1*e.swipeLeft)return r=n,!1}else if(n.offsetLeft-t+T(n)/2>-1*e.swipeLeft)return r=n,!1;return!0})),!r)return 0;var i=!0===e.rtl?e.slideCount-e.currentSlide:e.currentSlide;return Math.abs(r.dataset.index-i)||1}return e.slidesToScroll},P=function(e,t){return t.reduce((function(t,r){return t&&e.hasOwnProperty(r)}),!0)?null:console.error("Keys Missing:",e)},R=function(e){var t,r;P(e,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var n=e.slideCount+2*e.slidesToShow;e.vertical?r=n*e.slideHeight:t=D(e)*e.slideWidth;var o={opacity:1,transition:"",WebkitTransition:""};if(e.useTransform){var i=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)";o=(0,a.A)((0,a.A)({},o),{},{WebkitTransform:i,transform:l,msTransform:s})}else e.vertical?o.top=e.left:o.left=e.left;return e.fade&&(o={opacity:1}),t&&(o.width=t),r&&(o.height=r),window&&!window.addEventListener&&window.attachEvent&&(e.vertical?o.marginTop=e.left+"px":o.marginLeft=e.left+"px"),o},O=function(e){P(e,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var t=R(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},I=function(e){if(e.unslick)return 0;P(e,["slideIndex","trackRef","infinite","centerMode","slideCount","slidesToShow","slidesToScroll","slideWidth","listWidth","variableWidth","slideHeight"]);var t,r,n=e.slideIndex,o=e.trackRef,i=e.infinite,a=e.centerMode,l=e.slideCount,s=e.slidesToShow,c=e.slidesToScroll,d=e.slideWidth,u=e.listWidth,p=e.variableWidth,f=e.slideHeight,h=e.fade,g=e.vertical;if(h||1===e.slideCount)return 0;var v=0;if(i?(v=-N(e),l%c!=0&&n+c>l&&(v=-(n>l?s-(n-l):l%c)),a&&(v+=parseInt(s/2))):(l%c!=0&&n+c>l&&(v=s-l%c),a&&(v=parseInt(s/2))),t=g?n*f*-1+v*f:n*d*-1+v*d,!0===p){var b,m=o&&o.node;if(b=n+N(e),t=(r=m&&m.childNodes[b])?-1*r.offsetLeft:0,!0===a){b=i?n+N(e):n,r=m&&m.children[b],t=0;for(var w=0;w<b;w++)t-=m&&m.children[w]&&m.children[w].offsetWidth;t-=parseInt(e.centerPadding),t+=r&&(u-r.offsetWidth)/2}}return t},N=function(e){return e.unslick||!e.infinite?0:e.variableWidth?e.slideCount:e.slidesToShow+(e.centerMode?1:0)},F=function(e){return e.unslick||!e.infinite?0:e.slideCount},D=function(e){return 1===e.slideCount?1:N(e)+e.slideCount+F(e)},Z=function(e){return e.targetSlide>e.currentSlide?e.targetSlide>e.currentSlide+_(e)?"left":"right":e.targetSlide<e.currentSlide-X(e)?"right":"left"},_=function(e){var t=e.slidesToShow,r=e.centerMode,n=e.rtl,o=e.centerPadding;if(r){var i=(t-1)/2+1;return parseInt(o)>0&&(i+=1),n&&t%2==0&&(i+=1),i}return n?0:t-1},X=function(e){var t=e.slidesToShow,r=e.centerMode,n=e.rtl,o=e.centerPadding;if(r){var i=(t-1)/2+1;return parseInt(o)>0&&(i+=1),n||t%2!=0||(i+=1),i}return n?t-1:0},G=function(){return!("undefined"==typeof window||!window.document||!window.document.createElement)},Y=function(e){var t,r,n,o,i;return n=(i=e.rtl?e.slideCount-1-e.index:e.index)<0||i>=e.slideCount,e.centerMode?(o=Math.floor(e.slidesToShow/2),r=(i-e.currentSlide)%e.slideCount==0,i>e.currentSlide-o-1&&i<=e.currentSlide+o&&(t=!0)):t=e.currentSlide<=i&&i<e.currentSlide+e.slidesToShow,{"slick-slide":!0,"slick-active":t,"slick-center":r,"slick-cloned":n,"slick-current":i===(e.targetSlide<0?e.targetSlide+e.slideCount:e.targetSlide>=e.slideCount?e.targetSlide-e.slideCount:e.targetSlide)}},j=function(e,t){return e.key+"-"+t},B=function(e){var t,r=[],n=[],o=[],l=i.Children.count(e.children),s=y(e),c=S(e);return i.Children.forEach(e.children,(function(d,u){var p,f={message:"children",index:u,slidesToScroll:e.slidesToScroll,currentSlide:e.currentSlide};p=!e.lazyLoad||e.lazyLoad&&e.lazyLoadedList.indexOf(u)>=0?d:i.createElement("div",null);var h=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,a.A)((0,a.A)({},e),{},{index:u})),g=p.props.className||"",v=Y((0,a.A)((0,a.A)({},e),{},{index:u}));if(r.push(i.cloneElement(p,{key:"original"+j(p,u),"data-index":u,className:m()(v,g),tabIndex:"-1","aria-hidden":!v["slick-active"],style:(0,a.A)((0,a.A)({outline:"none"},p.props.style||{}),h),onClick:function(t){p.props&&p.props.onClick&&p.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(f)}})),e.infinite&&!1===e.fade){var b=l-u;b<=N(e)&&l!==e.slidesToShow&&((t=-b)>=s&&(p=d),v=Y((0,a.A)((0,a.A)({},e),{},{index:t})),n.push(i.cloneElement(p,{key:"precloned"+j(p,t),"data-index":t,tabIndex:"-1",className:m()(v,g),"aria-hidden":!v["slick-active"],style:(0,a.A)((0,a.A)({},p.props.style||{}),h),onClick:function(t){p.props&&p.props.onClick&&p.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(f)}}))),l!==e.slidesToShow&&((t=l+u)<c&&(p=d),v=Y((0,a.A)((0,a.A)({},e),{},{index:t})),o.push(i.cloneElement(p,{key:"postcloned"+j(p,t),"data-index":t,tabIndex:"-1",className:m()(v,g),"aria-hidden":!v["slick-active"],style:(0,a.A)((0,a.A)({},p.props.style||{}),h),onClick:function(t){p.props&&p.props.onClick&&p.props.onClick(t),e.focusOnSelect&&e.focusOnSelect(f)}})))}})),e.rtl?n.concat(r,o).reverse():n.concat(r,o)},q=function(e){(0,d.A)(r,e);var t=(0,u.A)(r);function r(){var e;(0,l.A)(this,r);for(var o=arguments.length,i=new Array(o),a=0;a<o;a++)i[a]=arguments[a];return e=t.call.apply(t,[this].concat(i)),(0,n.A)((0,c.A)(e),"node",null),(0,n.A)((0,c.A)(e),"handleRef",(function(t){e.node=t})),e}return(0,s.A)(r,[{key:"render",value:function(){var e=B(this.props),t=this.props,r={onMouseEnter:t.onMouseEnter,onMouseOver:t.onMouseOver,onMouseLeave:t.onMouseLeave};return i.createElement("div",(0,o.A)({ref:this.handleRef,className:"slick-track",style:this.props.trackStyle},r),e)}}]),r}(i.PureComponent),U=function(e){(0,d.A)(r,e);var t=(0,u.A)(r);function r(){return(0,l.A)(this,r),t.apply(this,arguments)}return(0,s.A)(r,[{key:"clickHandler",value:function(e,t){t.preventDefault(),this.props.clickHandler(e)}},{key:"render",value:function(){for(var e,t=this.props,r=t.onMouseEnter,n=t.onMouseOver,o=t.onMouseLeave,l=t.infinite,s=t.slidesToScroll,c=t.slidesToShow,d=t.slideCount,u=t.currentSlide,p=(e={slideCount:d,slidesToScroll:s,slidesToShow:c,infinite:l}).infinite?Math.ceil(e.slideCount/e.slidesToScroll):Math.ceil((e.slideCount-e.slidesToShow)/e.slidesToScroll)+1,f={onMouseEnter:r,onMouseOver:n,onMouseLeave:o},h=[],g=0;g<p;g++){var v=(g+1)*s-1,b=l?v:w(v,0,d-1),A=b-(s-1),k=l?A:w(A,0,d-1),y=m()({"slick-active":l?u>=k&&u<=b:u===k}),S={message:"dots",index:g,slidesToScroll:s,currentSlide:u},x=this.clickHandler.bind(this,S);h=h.concat(i.createElement("li",{key:g,className:y},i.cloneElement(this.props.customPaging(g),{onClick:x})))}return i.cloneElement(this.props.appendDots(h),(0,a.A)({className:this.props.dotsClass},f))}}]),r}(i.PureComponent),V=function(e){(0,d.A)(r,e);var t=(0,u.A)(r);function r(){return(0,l.A)(this,r),t.apply(this,arguments)}return(0,s.A)(r,[{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 r={key:"0","data-role":"none",className:m()(e),style:{display:"block"},onClick:t},n={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.prevArrow?i.cloneElement(this.props.prevArrow,(0,a.A)((0,a.A)({},r),n)):i.createElement("button",(0,o.A)({key:"0",type:"button"},r)," ","Previous")}}]),r}(i.PureComponent),$=function(e){(0,d.A)(r,e);var t=(0,u.A)(r);function r(){return(0,l.A)(this,r),t.apply(this,arguments)}return(0,s.A)(r,[{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"});E(this.props)||(e["slick-disabled"]=!0,t=null);var r={key:"1","data-role":"none",className:m()(e),style:{display:"block"},onClick:t},n={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount};return this.props.nextArrow?i.cloneElement(this.props.nextArrow,(0,a.A)((0,a.A)({},r),n)):i.createElement("button",(0,o.A)({key:"1",type:"button"},r)," ","Next")}}]),r}(i.PureComponent),K=r(43591),J=function(e){(0,d.A)(r,e);var t=(0,u.A)(r);function r(e){var s;(0,l.A)(this,r),s=t.call(this,e),(0,n.A)((0,c.A)(s),"listRefHandler",(function(e){return s.list=e})),(0,n.A)((0,c.A)(s),"trackRefHandler",(function(e){return s.track=e})),(0,n.A)((0,c.A)(s),"adaptHeight",(function(){if(s.props.adaptiveHeight&&s.list){var e=s.list.querySelector('[data-index="'.concat(s.state.currentSlide,'"]'));s.list.style.height=L(e)+"px"}})),(0,n.A)((0,c.A)(s),"componentDidMount",(function(){if(s.props.onInit&&s.props.onInit(),s.props.lazyLoad){var e=k((0,a.A)((0,a.A)({},s.props),s.state));e.length>0&&(s.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),s.props.onLazyLoad&&s.props.onLazyLoad(e))}var t=(0,a.A)({listRef:s.list,trackRef:s.track},s.props);s.updateState(t,!0,(function(){s.adaptHeight(),s.props.autoplay&&s.autoPlay("playing")})),"progressive"===s.props.lazyLoad&&(s.lazyLoadTimer=setInterval(s.progressiveLazyLoad,1e3)),s.ro=new K.A((function(){s.state.animating?(s.onWindowResized(!1),s.callbackTimers.push(setTimeout((function(){return s.onWindowResized()}),s.props.speed))):s.onWindowResized()})),s.ro.observe(s.list),document.querySelectorAll&&Array.prototype.forEach.call(document.querySelectorAll(".slick-slide"),(function(e){e.onfocus=s.props.pauseOnFocus?s.onSlideFocus:null,e.onblur=s.props.pauseOnFocus?s.onSlideBlur:null})),window.addEventListener?window.addEventListener("resize",s.onWindowResized):window.attachEvent("onresize",s.onWindowResized)})),(0,n.A)((0,c.A)(s),"componentWillUnmount",(function(){s.animationEndCallback&&clearTimeout(s.animationEndCallback),s.lazyLoadTimer&&clearInterval(s.lazyLoadTimer),s.callbackTimers.length&&(s.callbackTimers.forEach((function(e){return clearTimeout(e)})),s.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",s.onWindowResized):window.detachEvent("onresize",s.onWindowResized),s.autoplayTimer&&clearInterval(s.autoplayTimer),s.ro.disconnect()})),(0,n.A)((0,c.A)(s),"componentDidUpdate",(function(e){if(s.checkImagesLoad(),s.props.onReInit&&s.props.onReInit(),s.props.lazyLoad){var t=k((0,a.A)((0,a.A)({},s.props),s.state));t.length>0&&(s.setState((function(e){return{lazyLoadedList:e.lazyLoadedList.concat(t)}})),s.props.onLazyLoad&&s.props.onLazyLoad(t))}s.adaptHeight();var r=(0,a.A)((0,a.A)({listRef:s.list,trackRef:s.track},s.props),s.state),n=s.didPropsChange(e);n&&s.updateState(r,n,(function(){s.state.currentSlide>=i.Children.count(s.props.children)&&s.changeSlide({message:"index",index:i.Children.count(s.props.children)-s.props.slidesToShow,currentSlide:s.state.currentSlide}),e.autoplay===s.props.autoplay&&e.autoplaySpeed===s.props.autoplaySpeed||(!e.autoplay&&s.props.autoplay?s.autoPlay("playing"):s.props.autoplay?s.autoPlay("update"):s.pause("paused"))}))})),(0,n.A)((0,c.A)(s),"onWindowResized",(function(e){s.debouncedResize&&s.debouncedResize.cancel(),s.debouncedResize=v()((function(){return s.resizeWindow(e)}),50),s.debouncedResize()})),(0,n.A)((0,c.A)(s),"resizeWindow",(function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if(Boolean(s.track&&s.track.node)){var t=(0,a.A)((0,a.A)({listRef:s.list,trackRef:s.track},s.props),s.state);s.updateState(t,e,(function(){s.props.autoplay?s.autoPlay("update"):s.pause("paused")})),s.setState({animating:!1}),clearTimeout(s.animationEndCallback),delete s.animationEndCallback}})),(0,n.A)((0,c.A)(s),"updateState",(function(e,t,r){var n=function(e){var t,r=i.Children.count(e.children),n=e.listRef,o=Math.ceil(T(n)),l=e.trackRef&&e.trackRef.node,s=Math.ceil(T(l));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 d=n&&L(n.querySelector('[data-index="0"]')),u=d*e.slidesToShow,p=void 0===e.currentSlide?e.initialSlide:e.currentSlide;e.rtl&&void 0===e.currentSlide&&(p=r-1-e.initialSlide);var f=e.lazyLoadedList||[],h=k((0,a.A)((0,a.A)({},e),{},{currentSlide:p,lazyLoadedList:f})),g={slideCount:r,slideWidth:t,listWidth:o,trackWidth:s,currentSlide:p,slideHeight:d,listHeight:u,lazyLoadedList:f=f.concat(h)};return null===e.autoplaying&&e.autoplay&&(g.autoplaying="playing"),g}(e);e=(0,a.A)((0,a.A)((0,a.A)({},e),n),{},{slideIndex:n.currentSlide});var o=I(e);e=(0,a.A)((0,a.A)({},e),{},{left:o});var l=R(e);(t||i.Children.count(s.props.children)!==i.Children.count(e.children))&&(n.trackStyle=l),s.setState(n,r)})),(0,n.A)((0,c.A)(s),"ssrInit",(function(){if(s.props.variableWidth){var e=0,t=0,r=[],n=N((0,a.A)((0,a.A)((0,a.A)({},s.props),s.state),{},{slideCount:s.props.children.length})),o=F((0,a.A)((0,a.A)((0,a.A)({},s.props),s.state),{},{slideCount:s.props.children.length}));s.props.children.forEach((function(t){r.push(t.props.style.width),e+=t.props.style.width}));for(var l=0;l<n;l++)t+=r[r.length-1-l],e+=r[r.length-1-l];for(var c=0;c<o;c++)e+=r[c];for(var d=0;d<s.state.currentSlide;d++)t+=r[d];var u={width:e+"px",left:-t+"px"};if(s.props.centerMode){var p="".concat(r[s.state.currentSlide],"px");u.left="calc(".concat(u.left," + (100% - ").concat(p,") / 2 ) ")}return{trackStyle:u}}var f=i.Children.count(s.props.children),h=(0,a.A)((0,a.A)((0,a.A)({},s.props),s.state),{},{slideCount:f}),g=N(h)+F(h)+f,v=100/s.props.slidesToShow*g,b=100/g,m=-b*(N(h)+s.state.currentSlide)*v/100;return s.props.centerMode&&(m+=(100-b*v/100)/2),{slideWidth:b+"%",trackStyle:{width:v+"%",left:m+"%"}}})),(0,n.A)((0,c.A)(s),"checkImagesLoad",(function(){var e=s.list&&s.list.querySelectorAll&&s.list.querySelectorAll(".slick-slide img")||[],t=e.length,r=0;Array.prototype.forEach.call(e,(function(e){var n=function(){return++r&&r>=t&&s.onWindowResized()};if(e.onclick){var o=e.onclick;e.onclick=function(){o(),e.parentNode.focus()}}else e.onclick=function(){return e.parentNode.focus()};e.onload||(s.props.lazyLoad?e.onload=function(){s.adaptHeight(),s.callbackTimers.push(setTimeout(s.onWindowResized,s.props.speed))}:(e.onload=n,e.onerror=function(){n(),s.props.onLazyLoadError&&s.props.onLazyLoadError()}))}))})),(0,n.A)((0,c.A)(s),"progressiveLazyLoad",(function(){for(var e=[],t=(0,a.A)((0,a.A)({},s.props),s.state),r=s.state.currentSlide;r<s.state.slideCount+F(t);r++)if(s.state.lazyLoadedList.indexOf(r)<0){e.push(r);break}for(var n=s.state.currentSlide-1;n>=-N(t);n--)if(s.state.lazyLoadedList.indexOf(n)<0){e.push(n);break}e.length>0?(s.setState((function(t){return{lazyLoadedList:t.lazyLoadedList.concat(e)}})),s.props.onLazyLoad&&s.props.onLazyLoad(e)):s.lazyLoadTimer&&(clearInterval(s.lazyLoadTimer),delete s.lazyLoadTimer)})),(0,n.A)((0,c.A)(s),"slideHandler",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=s.props,n=r.asNavFor,o=r.beforeChange,i=r.onLazyLoad,l=r.speed,c=r.afterChange,d=s.state.currentSlide,u=function(e){var t=e.waitForAnimate,r=e.animating,n=e.fade,o=e.infinite,i=e.index,l=e.slideCount,s=e.lazyLoad,c=e.currentSlide,d=e.centerMode,u=e.slidesToScroll,p=e.slidesToShow,f=e.useCSS,h=e.lazyLoadedList;if(t&&r)return{};var g,v,b,m=i,A={},y={},S=o?i:w(i,0,l-1);if(n){if(!o&&(i<0||i>=l))return{};i<0?m=i+l:i>=l&&(m=i-l),s&&h.indexOf(m)<0&&(h=h.concat(m)),A={animating:!0,currentSlide:m,lazyLoadedList:h,targetSlide:m},y={animating:!1,targetSlide:m}}else g=m,m<0?(g=m+l,o?l%u!=0&&(g=l-l%u):g=0):!E(e)&&m>c?m=g=c:d&&m>=l?(m=o?l:l-1,g=o?0:l-1):m>=l&&(g=m-l,o?l%u!=0&&(g=0):g=l-p),!o&&m+p>=l&&(g=l-p),v=I((0,a.A)((0,a.A)({},e),{},{slideIndex:m})),b=I((0,a.A)((0,a.A)({},e),{},{slideIndex:g})),o||(v===b&&(m=g),v=b),s&&(h=h.concat(k((0,a.A)((0,a.A)({},e),{},{currentSlide:m})))),f?(A={animating:!0,currentSlide:g,trackStyle:O((0,a.A)((0,a.A)({},e),{},{left:v})),lazyLoadedList:h,targetSlide:S},y={animating:!1,currentSlide:g,trackStyle:R((0,a.A)((0,a.A)({},e),{},{left:b})),swipeLeft:null,targetSlide:S}):A={currentSlide:g,trackStyle:R((0,a.A)((0,a.A)({},e),{},{left:b})),lazyLoadedList:h,targetSlide:S};return{state:A,nextState:y}}((0,a.A)((0,a.A)((0,a.A)({index:e},s.props),s.state),{},{trackRef:s.track,useCSS:s.props.useCSS&&!t})),p=u.state,h=u.nextState;if(p){o&&o(d,p.currentSlide);var g=p.lazyLoadedList.filter((function(e){return s.state.lazyLoadedList.indexOf(e)<0}));i&&g.length>0&&i(g),!s.props.waitForAnimate&&s.animationEndCallback&&(clearTimeout(s.animationEndCallback),c&&c(d),delete s.animationEndCallback),s.setState(p,(function(){n&&s.asNavForIndex!==e&&(s.asNavForIndex=e,n.innerSlider.slideHandler(e)),h&&(s.animationEndCallback=setTimeout((function(){var e=h.animating,t=(0,f.A)(h,["animating"]);s.setState(t,(function(){s.callbackTimers.push(setTimeout((function(){return s.setState({animating:e})}),10)),c&&c(p.currentSlide),delete s.animationEndCallback}))}),l))}))}})),(0,n.A)((0,c.A)(s),"changeSlide",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=function(e,t){var r,n,o,i,l=e.slidesToScroll,s=e.slidesToShow,c=e.slideCount,d=e.currentSlide,u=e.targetSlide,p=e.lazyLoad,f=e.infinite;if(r=c%l!=0?0:(c-d)%l,"previous"===t.message)i=d-(o=0===r?l:s-r),p&&!f&&(i=-1==(n=d-o)?c-1:n),f||(i=u-l);else if("next"===t.message)i=d+(o=0===r?l:r),p&&!f&&(i=(d+l)%c+r),f||(i=u+l);else if("dots"===t.message)i=t.index*t.slidesToScroll;else if("children"===t.message){if(i=t.index,f){var h=Z((0,a.A)((0,a.A)({},e),{},{targetSlide:i}));i>t.currentSlide&&"left"===h?i-=c:i<t.currentSlide&&"right"===h&&(i+=c)}}else"index"===t.message&&(i=Number(t.index));return i}((0,a.A)((0,a.A)({},s.props),s.state),e);if((0===r||r)&&(!0===t?s.slideHandler(r,t):s.slideHandler(r),s.props.autoplay&&s.autoPlay("update"),s.props.focusOnSelect)){var n=s.list.querySelectorAll(".slick-current");n[0]&&n[0].focus()}})),(0,n.A)((0,c.A)(s),"clickHandler",(function(e){!1===s.clickable&&(e.stopPropagation(),e.preventDefault()),s.clickable=!0})),(0,n.A)((0,c.A)(s),"keyHandler",(function(e){var t=function(e,t,r){return e.target.tagName.match("TEXTAREA|INPUT|SELECT")||!t?"":37===e.keyCode?r?"next":"previous":39===e.keyCode?r?"previous":"next":""}(e,s.props.accessibility,s.props.rtl);""!==t&&s.changeSlide({message:t})})),(0,n.A)((0,c.A)(s),"selectHandler",(function(e){s.changeSlide(e)})),(0,n.A)((0,c.A)(s),"disableBodyScroll",(function(){window.ontouchmove=function(e){(e=e||window.event).preventDefault&&e.preventDefault(),e.returnValue=!1}})),(0,n.A)((0,c.A)(s),"enableBodyScroll",(function(){window.ontouchmove=null})),(0,n.A)((0,c.A)(s),"swipeStart",(function(e){s.props.verticalSwiping&&s.disableBodyScroll();var t=function(e,t,r){return"IMG"===e.target.tagName&&A(e),!t||!r&&-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}}}(e,s.props.swipe,s.props.draggable);""!==t&&s.setState(t)})),(0,n.A)((0,c.A)(s),"swipeMove",(function(e){var t=function(e,t){var r=t.scrolling,n=t.animating,o=t.vertical,i=t.swipeToSlide,l=t.verticalSwiping,s=t.rtl,c=t.currentSlide,d=t.edgeFriction,u=t.edgeDragged,p=t.onEdge,f=t.swiped,h=t.swiping,g=t.slideCount,v=t.slidesToScroll,b=t.infinite,m=t.touchObject,w=t.swipeEvent,k=t.listHeight,y=t.listWidth;if(!r){if(n)return A(e);o&&i&&l&&A(e);var S,x={},C=I(t);m.curX=e.touches?e.touches[0].pageX:e.clientX,m.curY=e.touches?e.touches[0].pageY:e.clientY,m.swipeLength=Math.round(Math.sqrt(Math.pow(m.curX-m.startX,2)));var T=Math.round(Math.sqrt(Math.pow(m.curY-m.startY,2)));if(!l&&!h&&T>10)return{scrolling:!0};l&&(m.swipeLength=T);var L=(s?-1:1)*(m.curX>m.startX?1:-1);l&&(L=m.curY>m.startY?1:-1);var z=Math.ceil(g/v),H=M(t.touchObject,l),W=m.swipeLength;return b||(0===c&&("right"===H||"down"===H)||c+1>=z&&("left"===H||"up"===H)||!E(t)&&("left"===H||"up"===H))&&(W=m.swipeLength*d,!1===u&&p&&(p(H),x.edgeDragged=!0)),!f&&w&&(w(H),x.swiped=!0),S=o?C+W*(k/y)*L:s?C-W*L:C+W*L,l&&(S=C+W*L),x=(0,a.A)((0,a.A)({},x),{},{touchObject:m,swipeLeft:S,trackStyle:R((0,a.A)((0,a.A)({},t),{},{left:S}))}),Math.abs(m.curX-m.startX)<.8*Math.abs(m.curY-m.startY)||m.swipeLength>10&&(x.swiping=!0,A(e)),x}}(e,(0,a.A)((0,a.A)((0,a.A)({},s.props),s.state),{},{trackRef:s.track,listRef:s.list,slideIndex:s.state.currentSlide}));t&&(t.swiping&&(s.clickable=!1),s.setState(t))})),(0,n.A)((0,c.A)(s),"swipeEnd",(function(e){var t=function(e,t){var r=t.dragging,n=t.swipe,o=t.touchObject,i=t.listWidth,l=t.touchThreshold,s=t.verticalSwiping,c=t.listHeight,d=t.swipeToSlide,u=t.scrolling,p=t.onSwipe,f=t.targetSlide,h=t.currentSlide,g=t.infinite;if(!r)return n&&A(e),{};var v=s?c/l:i/l,b=M(o,s),m={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(u)return m;if(!o.swipeLength)return m;if(o.swipeLength>v){var w,k;A(e),p&&p(b);var y=g?h:f;switch(b){case"left":case"up":k=y+W(t),w=d?H(t,k):k,m.currentDirection=0;break;case"right":case"down":k=y-W(t),w=d?H(t,k):k,m.currentDirection=1;break;default:w=y}m.triggerSlideHandler=w}else{var S=I(t);m.trackStyle=O((0,a.A)((0,a.A)({},t),{},{left:S}))}return m}(e,(0,a.A)((0,a.A)((0,a.A)({},s.props),s.state),{},{trackRef:s.track,listRef:s.list,slideIndex:s.state.currentSlide}));if(t){var r=t.triggerSlideHandler;delete t.triggerSlideHandler,s.setState(t),void 0!==r&&(s.slideHandler(r),s.props.verticalSwiping&&s.enableBodyScroll())}})),(0,n.A)((0,c.A)(s),"touchEnd",(function(e){s.swipeEnd(e),s.clickable=!0})),(0,n.A)((0,c.A)(s),"slickPrev",(function(){s.callbackTimers.push(setTimeout((function(){return s.changeSlide({message:"previous"})}),0))})),(0,n.A)((0,c.A)(s),"slickNext",(function(){s.callbackTimers.push(setTimeout((function(){return s.changeSlide({message:"next"})}),0))})),(0,n.A)((0,c.A)(s),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e=Number(e),isNaN(e))return"";s.callbackTimers.push(setTimeout((function(){return s.changeSlide({message:"index",index:e,currentSlide:s.state.currentSlide},t)}),0))})),(0,n.A)((0,c.A)(s),"play",(function(){var e;if(s.props.rtl)e=s.state.currentSlide-s.props.slidesToScroll;else{if(!E((0,a.A)((0,a.A)({},s.props),s.state)))return!1;e=s.state.currentSlide+s.props.slidesToScroll}s.slideHandler(e)})),(0,n.A)((0,c.A)(s),"autoPlay",(function(e){s.autoplayTimer&&clearInterval(s.autoplayTimer);var t=s.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;s.autoplayTimer=setInterval(s.play,s.props.autoplaySpeed+50),s.setState({autoplaying:"playing"})})),(0,n.A)((0,c.A)(s),"pause",(function(e){s.autoplayTimer&&(clearInterval(s.autoplayTimer),s.autoplayTimer=null);var t=s.state.autoplaying;"paused"===e?s.setState({autoplaying:"paused"}):"focused"===e?"hovered"!==t&&"playing"!==t||s.setState({autoplaying:"focused"}):"playing"===t&&s.setState({autoplaying:"hovered"})})),(0,n.A)((0,c.A)(s),"onDotsOver",(function(){return s.props.autoplay&&s.pause("hovered")})),(0,n.A)((0,c.A)(s),"onDotsLeave",(function(){return s.props.autoplay&&"hovered"===s.state.autoplaying&&s.autoPlay("leave")})),(0,n.A)((0,c.A)(s),"onTrackOver",(function(){return s.props.autoplay&&s.pause("hovered")})),(0,n.A)((0,c.A)(s),"onTrackLeave",(function(){return s.props.autoplay&&"hovered"===s.state.autoplaying&&s.autoPlay("leave")})),(0,n.A)((0,c.A)(s),"onSlideFocus",(function(){return s.props.autoplay&&s.pause("focused")})),(0,n.A)((0,c.A)(s),"onSlideBlur",(function(){return s.props.autoplay&&"focused"===s.state.autoplaying&&s.autoPlay("blur")})),(0,n.A)((0,c.A)(s),"render",(function(){var e,t,r,n=m()("slick-slider",s.props.className,{"slick-vertical":s.props.vertical,"slick-initialized":!0}),l=(0,a.A)((0,a.A)({},s.props),s.state),c=z(l,["fade","cssEase","speed","infinite","centerMode","focusOnSelect","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding","targetSlide","useCSS"]),d=s.props.pauseOnHover;if(c=(0,a.A)((0,a.A)({},c),{},{onMouseEnter:d?s.onTrackOver:null,onMouseLeave:d?s.onTrackLeave:null,onMouseOver:d?s.onTrackOver:null,focusOnSelect:s.props.focusOnSelect&&s.clickable?s.selectHandler:null}),!0===s.props.dots&&s.state.slideCount>=s.props.slidesToShow){var u=z(l,["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","clickHandler","children","customPaging","infinite","appendDots"]),p=s.props.pauseOnDotsHover;u=(0,a.A)((0,a.A)({},u),{},{clickHandler:s.changeSlide,onMouseEnter:p?s.onDotsLeave:null,onMouseOver:p?s.onDotsOver:null,onMouseLeave:p?s.onDotsLeave:null}),e=i.createElement(U,u)}var f=z(l,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);f.clickHandler=s.changeSlide,s.props.arrows&&(t=i.createElement(V,f),r=i.createElement($,f));var h=null;s.props.vertical&&(h={height:s.state.listHeight});var g=null;!1===s.props.vertical?!0===s.props.centerMode&&(g={padding:"0px "+s.props.centerPadding}):!0===s.props.centerMode&&(g={padding:s.props.centerPadding+" 0px"});var v=(0,a.A)((0,a.A)({},h),g),b=s.props.touchMove,w={className:"slick-list",style:v,onClick:s.clickHandler,onMouseDown:b?s.swipeStart:null,onMouseMove:s.state.dragging&&b?s.swipeMove:null,onMouseUp:b?s.swipeEnd:null,onMouseLeave:s.state.dragging&&b?s.swipeEnd:null,onTouchStart:b?s.swipeStart:null,onTouchMove:s.state.dragging&&b?s.swipeMove:null,onTouchEnd:b?s.touchEnd:null,onTouchCancel:s.state.dragging&&b?s.swipeEnd:null,onKeyDown:s.props.accessibility?s.keyHandler:null},A={className:n,dir:"ltr",style:s.props.style};return s.props.unslick&&(w={className:"slick-list"},A={className:n}),i.createElement("div",A,s.props.unslick?"":t,i.createElement("div",(0,o.A)({ref:s.listRefHandler},w),i.createElement(q,(0,o.A)({ref:s.trackRefHandler},c),s.props.children)),s.props.unslick?"":r,s.props.unslick?"":e)})),s.list=null,s.track=null,s.state=(0,a.A)((0,a.A)({},h),{},{currentSlide:s.props.initialSlide,slideCount:i.Children.count(s.props.children)}),s.callbackTimers=[],s.clickable=!0,s.debouncedResize=null;var d=s.ssrInit();return s.state=(0,a.A)((0,a.A)({},s.state),d),s}return(0,s.A)(r,[{key:"didPropsChange",value:function(e){for(var t=!1,r=0,n=Object.keys(this.props);r<n.length;r++){var o=n[r];if(!e.hasOwnProperty(o)){t=!0;break}if("object"!==(0,p.A)(e[o])&&"function"!=typeof e[o]&&e[o]!==this.props[o]){t=!0;break}}return t||i.Children.count(this.props.children)!==i.Children.count(e.children)}}]),r}(i.Component),Q=r(11441),ee=r.n(Q);const te={accessibility:!0,adaptiveHeight:!1,afterChange:null,appendDots:function(e){return i.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.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};const re=function(e){(0,d.A)(r,e);var t=(0,u.A)(r);function r(e){var o;return(0,l.A)(this,r),o=t.call(this,e),(0,n.A)((0,c.A)(o),"innerSliderRefHandler",(function(e){return o.innerSlider=e})),(0,n.A)((0,c.A)(o),"slickPrev",(function(){return o.innerSlider.slickPrev()})),(0,n.A)((0,c.A)(o),"slickNext",(function(){return o.innerSlider.slickNext()})),(0,n.A)((0,c.A)(o),"slickGoTo",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return o.innerSlider.slickGoTo(e,t)})),(0,n.A)((0,c.A)(o),"slickPause",(function(){return o.innerSlider.pause("paused")})),(0,n.A)((0,c.A)(o),"slickPlay",(function(){return o.innerSlider.autoPlay("play")})),o.state={breakpoint:null},o._responsiveMediaHandlers=[],o}return(0,s.A)(r,[{key:"media",value:function(e,t){var r=window.matchMedia(e),n=function(e){e.matches&&t()};r.addListener(n),n(r),this._responsiveMediaHandlers.push({mql:r,query:e,listener:n})}},{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(r,n){var o;o=0===n?ee()({minWidth:0,maxWidth:r}):ee()({minWidth:t[n-1]+1,maxWidth:r}),G()&&e.media(o,(function(){e.setState({breakpoint:r})}))}));var r=ee()({minWidth:t.slice(-1)[0]});G()&&this.media(r,(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,r=this;(e=this.state.breakpoint?"unslick"===(t=this.props.responsive.filter((function(e){return e.breakpoint===r.state.breakpoint})))[0].settings?"unslick":(0,a.A)((0,a.A)((0,a.A)({},te),this.props),t[0].settings):(0,a.A)((0,a.A)({},te),this.props)).centerMode&&(e.slidesToScroll,e.slidesToScroll=1),e.fade&&(e.slidesToShow,e.slidesToScroll,e.slidesToShow=1,e.slidesToScroll=1);var n=i.Children.toArray(this.props.children);n=n.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 l=[],s=null,c=0;c<n.length;c+=e.rows*e.slidesPerRow){for(var d=[],u=c;u<c+e.rows*e.slidesPerRow;u+=e.slidesPerRow){for(var p=[],f=u;f<u+e.slidesPerRow&&(e.variableWidth&&n[f].props.style&&(s=n[f].props.style.width),!(f>=n.length));f+=1)p.push(i.cloneElement(n[f],{key:100*c+10*u+f,tabIndex:-1,style:{width:"".concat(100/e.slidesPerRow,"%"),display:"inline-block"}}));d.push(i.createElement("div",{key:10*c+u},p))}e.variableWidth?l.push(i.createElement("div",{key:c,style:{width:s}},d)):l.push(i.createElement("div",{key:c},d))}if("unslick"===e){var h="regular slider "+(this.props.className||"");return i.createElement("div",{className:h},n)}return l.length<=e.slidesToShow&&(e.unslick=!0),i.createElement(J,(0,o.A)({style:this.props.style,ref:this.innerSliderRefHandler},e),l)}}]),r}(i.Component);var ne=r(98756),oe=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r};const ie=i.forwardRef((function(e,t){var r,a=e.dots,l=void 0===a||a,s=e.arrows,c=void 0!==s&&s,d=e.draggable,u=void 0!==d&&d,p=e.dotPosition,f=void 0===p?"bottom":p,h=oe(e,["dots","arrows","draggable","dotPosition"]),g=i.useContext(ne.QO),v=g.getPrefixCls,b=g.direction,w=i.useRef(),A=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];w.current.slickGoTo(e,t)};i.useImperativeHandle(t,(function(){return{goTo:A,autoPlay:w.current.innerSlider.autoPlay,innerSlider:w.current.innerSlider,prev:w.current.slickPrev,next:w.current.slickNext}}),[w.current]);var k=i.useRef(i.Children.count(h.children));i.useEffect((function(){k.current!==i.Children.count(h.children)&&(A(h.initialSlide||0,!1),k.current=i.Children.count(h.children))}),[h.children]);var y=(0,o.A)({},h);"fade"===y.effect&&(y.fade=!0);var S=v("carousel",y.prefixCls),x="slick-dots";y.vertical="left"===f||"right"===f;var C=!!l,T=m()(x,"".concat(x,"-").concat(f),"boolean"!=typeof l&&(null==l?void 0:l.className)),L=m()(S,(r={},(0,n.A)(r,"".concat(S,"-rtl"),"rtl"===b),(0,n.A)(r,"".concat(S,"-vertical"),y.vertical),r));return i.createElement("div",{className:L},i.createElement(re,(0,o.A)({ref:w},y,{dots:C,dotsClass:T,arrows:c,draggable:u})))}))},79867:(e,t,r)=>{"use strict";r.r(t),r.d(t,{render:()=>E});var n=window.document,o=window.Math,i=window.HTMLElement,a=window.XMLHttpRequest,l=function(e,t){for(var r=0,n=e.length;r<n;r++)t(e[r])},s=function(e){return function(t,r,n){var o=e.createElement(t);if(null!=r)for(var i in r){var a=r[i];null!=a&&(null!=o[i]?o[i]=a:o.setAttribute(i,a))}return null!=n&&l(n,(function(t){o.appendChild("string"==typeof t?e.createTextNode(t):t)})),o}},c=s(n),d=function(e,t){return{}.hasOwnProperty.call(e,t)},u=function(e){return(""+e).toLowerCase()},p="github.com",f="https://api."+p,h=a&&"prototype"in a&&"withCredentials"in a.prototype,g=h&&i&&"attachShadow"in i.prototype&&!("prototype"in i.prototype.attachShadow),v=function(e,t,r){e.addEventListener?e.addEventListener(t,r,!1):e.attachEvent("on"+t,r)},b=function(e,t,r){e.removeEventListener?e.removeEventListener(t,r,!1):e.detachEvent("on"+t,r)},m={light:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #0969da;outline-offset:-2px}.btn{color:#24292f;background-color:#ebf0f4;border-color:#ccd1d5;border-color:rgba(31,35,40,.15);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='%23f6f8fa'/%3e%3cstop offset='90%25' stop-color='%23ebf0f4'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #f6f8fa, #ebf0f4 90%);background-image:linear-gradient(180deg, #f6f8fa, #ebf0f4 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF6F8FA', endColorstr='#FFEAEFF3')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#e9ebef;background-position:0 -0.5em;border-color:#cbcdd1;border-color:rgba(31,35,40,.15);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='%23f3f4f6'/%3e%3cstop offset='90%25' stop-color='%23e9ebef'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #f3f4f6, #e9ebef 90%);background-image:linear-gradient(180deg, #f3f4f6, #e9ebef 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF3F4F6', endColorstr='#FFE8EAEE')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#e5e9ed;border-color:#c7cbcf;border-color:rgba(31,35,40,.15);background-image:none;filter:none}.social-count{color:#24292f;background-color:#fff;border-color:#dddedf;border-color:rgba(31,35,40,.15)}.social-count:hover,.social-count:focus{color:#0969da}.octicon-heart{color:#bf3989}",light_high_contrast:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #0349b4;outline-offset:-2px}.btn{color:#0e1116;background-color:#e7ecf0;border-color:#2f3237;border-color:rgba(1,4,9,.8);background-image:none;filter:none}.btn:hover,.btn:focus{background-color:#c4cdd5;background-position:0 -0.5em;border-color:#282c32;border-color:rgba(1,4,9,.8);background-image:none;filter:none}.btn:active{background-color:#d8dde1;border-color:#2c2f34;border-color:rgba(1,4,9,.8)}.social-count{color:#0e1116;background-color:#fff;border-color:#34363a;border-color:rgba(1,4,9,.8)}.social-count:hover,.social-count:focus{color:#0349b4}.octicon-heart{color:#971368}",dark:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #2f81f7;outline-offset:-2px}.btn{color:#c9d1d9;background-color:#1a1e23;border-color:#2f3439;border-color:rgba(240,246,252,.1);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='%2321262d'/%3e%3cstop offset='90%25' stop-color='%231a1e23'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #21262d, #1a1e23 90%);background-image:linear-gradient(180deg, #21262d, #1a1e23 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF21262D', endColorstr='#FF191D22')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#292e33;background-position:0 -0.5em;border-color:#8b949e;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='%2330363d'/%3e%3cstop offset='90%25' stop-color='%23292e33'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #30363d, #292e33 90%);background-image:linear-gradient(180deg, #30363d, #292e33 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF30363D', endColorstr='#FF282D32')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#161719;border-color:#8b949e;background-image:none;filter:none}.social-count{color:#c9d1d9;background-color:#0d1117;border-color:#24282e;border-color:rgba(240,246,252,.1)}.social-count:hover,.social-count:focus{color:#2f81f7}.octicon-heart{color:#db61a2}",dark_dimmed:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #539bf5;outline-offset:-2px}.btn{color:#adbac7;background-color:#30363d;border-color:#40464e;border-color:rgba(205,217,229,.1);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='%23373e47'/%3e%3cstop offset='90%25' stop-color='%2330363d'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #373e47, #30363d 90%);background-image:linear-gradient(180deg, #373e47, #30363d 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF373E47', endColorstr='#FF2F353C')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#3c444d;background-position:0 -0.5em;border-color:#768390;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='%23444c56'/%3e%3cstop offset='90%25' stop-color='%233c444d'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\");background-image:-moz-linear-gradient(top, #444c56, #3c444d 90%);background-image:linear-gradient(180deg, #444c56, #3c444d 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF444C56', endColorstr='#FF3B434C')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#2e3031;border-color:#768390;background-image:none;filter:none}.social-count{color:#adbac7;background-color:#22272e;border-color:#333940;border-color:rgba(205,217,229,.1)}.social-count:hover,.social-count:focus{color:#539bf5}.octicon-heart{color:#c96198}",dark_high_contrast:".btn:focus-visible,.social-count:focus-visible{outline:2px solid #71b7ff;outline-offset:-2px}.btn{color:#f0f3f6;background-color:#272b33;border-color:#7a828e;background-image:none;filter:none}.btn:hover,.btn:focus{background-color:#4a515b;background-position:0 -0.5em;border-color:#bdc4cc;background-image:none;filter:none}.btn:active{background-color:#1d1d1f;border-color:#bdc4cc}.social-count{color:#f0f3f6;background-color:#0a0c10;border-color:#7a828e}.social-count:hover,.social-count:focus{color:#71b7ff}.octicon-heart{color:#ef6eb1}"},w=function(e,t){return"@media(prefers-color-scheme:"+e+"){"+m[d(m,t)?t:e]+"}"},A=function(e){if(null==e)return m.light;if(d(m,e))return m[e];var t=function(e,t,r,n){null==t&&(t="&"),null==r&&(r="="),null==n&&(n=window.decodeURIComponent);var o={};return l(e.split(t),(function(e){if(""!==e){var t=e.split(r);o[n(t[0])]=null!=t[1]?n(t.slice(1).join(r)):void 0}})),o}(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"]+w("light",t.light)+w("dark",t.dark)},k={"comment-discussion":{heights:{16:{width:16,path:'<path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path>'}}},download:{heights:{16:{width:16,path:'<path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path>'}}},eye:{heights:{16:{width:16,path:'<path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"></path>'}}},heart:{heights:{16:{width:16,path:'<path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-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.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.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.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path>'}}},"issue-opened":{heights:{16:{width:16,path:'<path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path>'}}},"mark-github":{heights:{16:{width:16,path:'<path d="M8 0c4.42 0 8 3.58 8 8a8.013 8.013 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8Z"></path>'}}},package:{heights:{16:{width:16,path:'<path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path>'}}},play:{heights:{16:{width:16,path:'<path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>'}}},"repo-forked":{heights:{16:{width:16,path:'<path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>'}}},"repo-template":{heights:{16:{width:16,path:'<path d="M13.25 8a.75.75 0 0 1 .75.75v4.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-.75a.75.75 0 0 1 0-1.5h.75v-.25a.75.75 0 0 1 .75-.75ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2ZM2.75 8a.75.75 0 0 1 .75.75v.268c.083-.012.166-.018.25-.018h.5a.75.75 0 0 1 0 1.5h-.5a.25.25 0 0 0-.25.25v.75c0 .28.114.532.3.714a.75.75 0 1 1-1.05 1.072A2.495 2.495 0 0 1 2 11.5V8.75A.75.75 0 0 1 2.75 8ZM11 .75a.75.75 0 0 1 .75-.75h1.5a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-1.5 0V1.5h-.75A.75.75 0 0 1 11 .75Zm-5 0A.75.75 0 0 1 6.75 0h2.5a.75.75 0 0 1 0 1.5h-2.5A.75.75 0 0 1 6 .75Zm0 9A.75.75 0 0 1 6.75 9h2.5a.75.75 0 0 1 0 1.5h-2.5A.75.75 0 0 1 6 9.75ZM4.992.662a.75.75 0 0 1-.636.848c-.436.063-.783.41-.846.846a.751.751 0 0 1-1.485-.212A2.501 2.501 0 0 1 4.144.025a.75.75 0 0 1 .848.637ZM2.75 4a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-1.5 0v-1.5A.75.75 0 0 1 2.75 4Zm10.5 0a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-1.5 0v-1.5a.75.75 0 0 1 .75-.75Z"></path>'}}},star:{heights:{16:{width:16,path:'<path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path>'}}}},y=function(e,t){e=u(e).replace(/^octicon-/,""),d(k,e)||(e="mark-github");var r=t>=24&&24 in k[e].heights?24:16,n=k[e].heights[r];return'<svg viewBox="0 0 '+n.width+" "+r+'" width="'+t*n.width/r+'" height="'+t+'" class="octicon octicon-'+e+'" aria-hidden="true">'+n.path+"</svg>"},S={},x=function(e,t){var r=S[e]||(S[e]=[]);if(!(r.push(t)>1)){var n=function(e){var t;return function(){t||(t=1,e.apply(this,arguments))}}((function(){for(delete S[e];t=r.shift();)t.apply(null,arguments)}));if(h){var o=new a;v(o,"abort",n),v(o,"error",n),v(o,"load",(function(){var e;try{e=JSON.parse(this.responseText)}catch(t){return void n(t)}n(200!==this.status,e)})),o.open("GET",e),o.send()}else{var i=this||window;i._=function(e){i._=null,n(200!==e.meta.status,e.data)};var l=s(i.document)("script",{async:!0,src:e+(-1!==e.indexOf("?")?"&":"?")+"callback=_"}),c=function(){i._&&i._({meta:{}})};v(l,"load",c),v(l,"error",c),function(e,t,r){if(null!=e.readyState){var n="readystatechange",o=function(){if(t.test(e.readyState))return b(e,n,o),r.apply(this,arguments)};v(e,n,o)}}(l,/de|m/,c),i.document.getElementsByTagName("head")[0].appendChild(l)}}},C=function(e,t,r){var n=s(e.ownerDocument),o=e.appendChild(n("style",{type:"text/css"})),i="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;display:inline-flex;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:16px;padding:5px 10px;font-size:12px;line-height:16px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor;overflow:visible}"+A(t["data-color-scheme"]);o.styleSheet?o.styleSheet.cssText=i:o.appendChild(e.ownerDocument.createTextNode(i));var a="large"===u(t["data-size"]),l=n("a",{className:"btn",href:t.href,rel:"noopener",target:"_blank",title:t.title||void 0,"aria-label":t["aria-label"]||void 0,innerHTML:y(t["data-icon"],a?16:14)+"&nbsp;"},[n("span",{},[t["data-text"]||""])]),c=e.appendChild(n("div",{className:"widget"+(a?" widget-lg":"")},[l])),d=l.hostname.replace(/\.$/,"");if(("."+d).substring(d.length-10)!=="."+p)return l.removeAttribute("href"),void r(c);var h=(" /"+l.pathname).split(/\/+/);if(((d===p||d==="gist."+p)&&"archive"===h[3]||d===p&&"releases"===h[3]&&("download"===h[4]||"latest"===h[4]&&"download"===h[5])||d==="codeload."+p)&&(l.target="_top"),"true"===u(t["data-show-count"])&&d===p&&"marketplace"!==h[1]&&"sponsors"!==h[1]&&"orgs"!==h[1]&&"users"!==h[1]&&"-"!==h[1]){var g,v;if(!h[2]&&h[1])v="followers",g="?tab=followers";else if(!h[3]&&h[2])v="stargazers_count",g="/stargazers";else if(h[4]||"subscription"!==h[3])if(h[4]||"fork"!==h[3]){if("issues"!==h[3])return void r(c);v="open_issues_count",g="/issues"}else v="forks_count",g="/forks";else v="subscribers_count",g="/watchers";var b=h[2]?"/repos/"+h[1]+"/"+h[2]:"/users/"+h[1];x.call(this,f+b,(function(e,t){if(!e){var o=t[v];c.appendChild(n("a",{className:"social-count",href:t.html_url+g,rel:"noopener",target:"_blank","aria-label":o+" "+v.replace(/_count$/,"").replace("_"," ").slice(0,o<2?-1:void 0)+" on GitHub"},[(""+o).replace(/\B(?=(\d{3})+(?!\d))/g,",")]))}r(c)}))}else r(c)},T=window.devicePixelRatio||1,L=function(e){return(T>1?o.ceil(o.round(e*T)/T*2)/2:o.ceil(e))||0},M=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){var t={href:e.href,title:e.title,"aria-label":e.getAttribute("aria-label")};return l(["icon","color-scheme","text","size","show-count"],(function(r){var n="data-"+r;t[n]=e.getAttribute(n)})),null==t["data-text"]&&(t["data-text"]=e.textContent||e.innerText),t}(e)),g){var r=c("span");C(r.attachShadow({mode:"closed"}),e,(function(){t(r)}))}else{var i=c("iframe",{src:"javascript:0",title:e.title||void 0,allowtransparency:!0,scrolling:"no",frameBorder:0});M(i,[0,0]),i.style.border="none";var a=function(){var r,l=i.contentWindow;try{r=l.document.body}catch(s){return void n.body.appendChild(i.parentNode.removeChild(i))}b(i,"load",a),C.call(l,r,e,(function(r){var n=function(e){var t=e.offsetWidth,r=e.offsetHeight;if(e.getBoundingClientRect){var n=e.getBoundingClientRect();t=o.max(t,L(n.width)),r=o.max(r,L(n.height))}return[t,r]}(r);i.parentNode.removeChild(i),function(e,t,r){var n=function(){return b(e,t,n),r.apply(this,arguments)};v(e,t,n)}(i,"load",(function(){M(i,n)})),i.src="https://unpkg.com/github-buttons@2.27.0/dist/buttons.html#"+(i.name=function(e,t,r,n){null==t&&(t="&"),null==r&&(r="="),null==n&&(n=window.encodeURIComponent);var o=[];for(var i in e){var a=e[i];null!=a&&o.push(n(i)+r+n(a))}return o.join(t)}(e)),t(i)}))};v(i,"load",a),n.body.appendChild(i)}}},11441:(e,t,r)=>{var n=r(28028),o=function(e){var t="",r=Object.keys(e);return r.forEach((function(o,i){var a=e[o];(function(e){return/[height|width]$/.test(e)})(o=n(o))&&"number"==typeof a&&(a+="px"),t+=!0===a?o:!1===a?"not "+o:"("+o+": "+a+")",i<r.length-1&&(t+=" and ")})),t};e.exports=function(e){var t="";return"string"==typeof e?e:e instanceof Array?(e.forEach((function(r,n){t+=o(r),n<e.length-1&&(t+=", ")})),t):o(e)}},28028:e=>{e.exports=function(e){return e.replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()})).toLowerCase()}},20072:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(96540);class o extends n.PureComponent{constructor(e){super(e),this.$=n.createRef(),this._=n.createRef()}render(){return n.createElement("span",{ref:this.$},n.createElement("a",{...this.props,ref:this._},this.props.children))}componentDidMount(){this.paint()}getSnapshotBeforeUpdate(){return this.reset(),null}componentDidUpdate(){this.paint()}componentWillUnmount(){this.reset()}paint(){const e=this.$.current.appendChild(document.createElement("span"));Promise.resolve().then(r.bind(r,79867)).then((({render:t})=>{null!=this._.current&&t(e.appendChild(this._.current),(function(t){try{e.parentNode.replaceChild(t,e)}catch(e){}}))}))}reset(){this.$.current.replaceChild(this._.current,this.$.current.lastChild)}}const i=o}}]);