diff --git a/README.md b/README.md index 511551c..0f89127 100644 --- a/README.md +++ b/README.md @@ -103,8 +103,8 @@ The most wonderful thing about `colortranslator` is that you don‘t need to spe | `rgb(255, 0, 255)` | Functional RGB notation | | `rgba(255, 0, 255, 0.5)` | Functional RGB notation with alpha | | `rgb(255 0 255)` | Functional RGB notation (CSS Colors 4 space-separated) | -| `rgba(255 0 255 / 0.5)` | Functional RGB notation with alpha (CSS Colors 4 space-separated) | -| `rgba(255 0 255 / 50%)` | Functional RGB notation CSS with alpha in percenatages (Colors 4 space-separated) | +| `rgb(255 0 255 / 0.5)` | Functional RGB notation with alpha (CSS Colors 4 space-separated) | +| `rgb(255 0 255 / 50%)` | Functional RGB notation CSS with alpha in percenatages (Colors 4 space-separated) | | `hsl(300, 100%, 50%)` | Functional HSL notation | | `hsl(300grad, 100%, 50%)` | Functional HSL notation with hue in grads | | `hsl(300deg, 100%, 50%)` | Functional HSL notation with hue in degrees | @@ -112,8 +112,8 @@ The most wonderful thing about `colortranslator` is that you don‘t need to spe | `hsl(0.83turn, 100%, 50%)` | Functional HSL notation with hue in turns | | `hsla(300, 100%, 50%, 0.5)` | Functional HSL notation with alpha | | `hsl(300 100% 50%)` | Functional HSL notation (CSS Colors 4 space-separated) | -| `hsla(300 100% 50% / 0.5)` | Functional HSL notation with alpha (CSS Colors 4 space-separated) | -| `hsla(300 100% 50% / 50%)` | Functional HSL notation with alpha in percentages (CSS Colors 4 space-separated) | +| `hsl(300 100% 50% / 0.5)` | Functional HSL notation with alpha (CSS Colors 4 space-separated) | +| `hsl(300 100% 50% / 50%)` | Functional HSL notation with alpha in percentages (CSS Colors 4 space-separated) | | `cmyk(0%, 100%, 100%, 0%)` | Functional CMYK notation with percentages | | `cmyk(0%, 100%, 100%, 0%, 1)` | Functional CMYK notation with percentages and alpha | | `cmyk(0% 100% 100% 0%)` | Functional CMYK notation with percentages (CSS Colors 4 space-separated) | @@ -165,7 +165,8 @@ It is possible to instantiate the class using any of the previous inputs. ```typescript interface Options { - decimals?: number; // defaults to 6 + decimals?: number; // defaults to 6 + legacyCSS: boolean; // defaults to false } ``` @@ -178,7 +179,7 @@ const hex = new ColorTranslator('#FF00FF'); const rgb = new ColorTranslator('rgb(255, 0, 0)'); -const hsl = new ColorTranslator('hsl(50, 20%, 90%)'); +const hsl = new ColorTranslator('hsl(50 20% 90% / 0.5)'); const hsla = new ColorTranslator({ r: 115, g: 200, b: 150, a: 0.5 }); @@ -281,8 +282,8 @@ const color = new ColorTranslator('#FF00FF', { decimals: 2 }); color.R; // 255 color.G; // 0 color.B; // 255 -color.RGB; // rgb(255,0,255) -color.HSLA; // hsla(300,100%,50%,1) +color.RGB; // rgb(255 0 255) +color.HSLA; // hsl(300 100% 50% / 1) color.options; // { decimals: 2 } ``` @@ -292,6 +293,10 @@ For the static methods, it is not needed to specify the input color model, the A There are 43 static methods available, 16 of them to convert colors, 12 to create color blends, 12 to mix colors, one to get shades, one to get tints, and one to create color harmonies. +>Note: the library tries to detect some options automatically if you don‘t send them in the [options object](#options-object). These are the rules for this autodetection: +> +> * `legacyCSS`: if this option is set, then its value prevail, if it is not set, and all the CSS inputs are provided in CSS Level 3, then this option will be `true`, otherwise it will take its default value which is `false`. + ###### Color conversion static methods The static methods to convert colors accept any of the mentioned inputs as the first parameter, the second parameter is optional and it is an [options object](#options-object) (this second option is not present in the methods to generate HEX colors): @@ -326,35 +331,35 @@ convertColorStaticMethod( ```javascript ColorTranslator.toHEX('gold'); // #FFD700 -ColorTranslator.toRGB('#FF00FF'); // rgb(255,0,255) +ColorTranslator.toRGB('#FF00FF'); // rgb(255 0 255) ColorTranslator.toRGBA( 'hsl(50, 20%, 90%)', { decimals: 0 } ); // rgba(235,233,224,1) -ColorTranslator.toHSL('rgb(255, 0, 0)'); // hsl(0,100%,50%) +ColorTranslator.toHSL('rgb(255 0 0)'); // hsl(0 100% 50%) ColorTranslator.toHSLA('rgba(0, 255, 255, 0.5)'); // hsla(180,100%,50%,0.5) ColorTranslator.toCMYKObject('#F0F'); // {c: 0, m: 100, y: 0, k: 0} -ColorTranslator.toCMYK('#F0F'); // cmyk(0%,100%,0%,0%) +ColorTranslator.toCMYK('#F0F'); // cmyk(0% 100% 0% 0%) ColorTranslator.toRGB( { h: 115, s: '70%', l: '45%' }, { decimals: 0 } -); // rgb(48,195,34) +); // rgb(48 195 34) ColorTranslator.toHSLA( { r: 115, g: 200, b: 150, a: 0.5 }, { decimals: 1 } -); // hsla(144.7,43.6%,61.8%,0.5) +); // hsl(144.7 43.6% 61.8% / 0.5) ColorTranslator.toHSLA( { r: 95, g: 23, b: 12, a: Math.SQRT1_2 }, { decimals: 4 } -); // hsla(7.9518,77.5701%,20.9804%,0.7071) +); // hsl(7.9518 77.5701% 20.9804% / 0.7071) ``` You can also consult the [demo 3](https://elchininet.github.io/ColorTranslator/#demo3), and the [demo 4](https://elchininet.github.io/ColorTranslator/#demo4) to check the use of these static methods. @@ -405,9 +410,9 @@ ColorTranslator.getBlendHEX('#FF0000', '#0000FF', 5); ColorTranslator.getBlendHSLA('#FF000000', '#0000FFFF', 3); // [ -// "hsla(0,100%,50%,0)", -// "hsla(300,100%,25%,0.5)", -// "hsla(240,100%,50%,1)" +// "hsl(0 100% 50% / 0)", +// "hsl(300 100% 25% / 0.5)", +// "hsl(240 100% 50% / 1)" // ] ColorTranslator.getBlendRGBAObject('#F000', 'rgba(0,0,255,1)', 5); @@ -463,7 +468,7 @@ ColorTranslator.getMixHEX(['#FF0000', '#0000FF']); ColorTranslator.getMixHSL(['rgba(255, 0, 0, 1)', '#00FF00']); -// hsl(60,100%,50%) +// hsl(60 100% 50%) ColorTranslator.getMixHEXAObject(['#F00', 'rgb(0, 0, 255)'], Mix.ADDITIVE); @@ -565,12 +570,12 @@ ColorTranslator.getHarmony('#FF00FF'); // ["#FF00FF", "#00FF00"] -ColorTranslator.getHarmony('rgba(0, 255, 255, 0.5)', Harmony.ANALOGOUS); +ColorTranslator.getHarmony('rgba(0 255 255 / 0.5)', Harmony.ANALOGOUS); // [ -// "rgba(0,255,255,0.5)", -// "rgba(0,127.5,255,0.5)", -// "rgba(0,255,127.5,0.5)" +// "rgba(0 255 255 / 0.5)", +// "rgba(0 127.5 255 / 0.5)", +// "rgba(0 255 127.5 / 0.5)" // ] ColorTranslator.getHarmony( diff --git a/dist/web/colortranslator.js b/dist/web/colortranslator.js index b5c1e97..fb84434 100644 --- a/dist/web/colortranslator.js +++ b/dist/web/colortranslator.js @@ -1 +1 @@ -var colortranslator=function(t){"use strict";var e=function(){return e=Object.assign||function(t){for(var e,n=1,r=arguments.length;n=6&&(n-=6),j(n<1?255*((e-t)*n+t):n<3?255*e:n<4?255*((e-t)*(4-n)+t):255*t)},I=function(t,e,n){e/=100;var r=(n/=100)<=.5?n*(e+1):n+e-n*e,i=2*n-r;return{r:Y(i,r,(t/=60)+2),g:Y(i,r,t),b:Y(i,r,t-2)}},x=function(t,e,n,r){return{r:j(255*(1-t)*(r=1-r)),g:j(255*(1-e)*r),b:j(255*(1-n)*r)}},K=function(t,e,n){t/=255,e/=255,n/=255;var r=1-Math.max(t,e,n),i=1-r,o=i&&(i-e)/i,u=i&&(i-n)/i;return{c:j(100*(i&&(i-t)/i)),m:j(100*o),y:j(100*u),k:j(100*r)}},T=function(t,e,n,r){void 0===r&&(r=1),t/=255,e/=255,n/=255,r=Math.min(r,1);var i=Math.max(t,e,n),o=Math.min(t,e,n),u=i-o,a=0,c=0,s=(i+o)/2;if(0!==u){switch(i){case t:a=(e-n)/u%6;break;case e:a=(n-t)/u+2;break;case n:a=(t-e)/u+4}(a=j(60*a))<0&&(a+=360),c=u/(1-Math.abs(2*s-1))}return{h:a,s:j(100*c),l:j(100*s),a:r}},P=function(t,e){if(t<0&&(t+=360),t>360&&(t-=360),360===t||0===t)return t;var n=[[0,120],[120,180],[180,240],[240,360]],r=[[0,60],[60,120],[120,240],[240,360]],i=e?r:n,o=0,u=0,a=0,c=0;return(e?n:r).find((function(e,n){return t>=e[0]&&t360||t<0)&&(t-=360*Math.floor(t/360)),t},q=function(t){return"string"==typeof t&&(t=y.test(t)?C(t)/100:+t),isNaN(+t)||t>1?1:j(t)},$=function(r,i,o){return i.reduce((function(i,u){return n(n([],i,!0),[e(e({},r),{h:o===t.Mix.ADDITIVE?U(r.h+u):U(P(P(r.h,!1)+u,!0))})],!1)}),[e({},r)])},_=function(t,e){return $(t,[30,-30],e)},Q=function(t,e){return $(t,[180],e)},z=function(t,e){return $(t,[150,-150],e)},J=function(t,e){return $(t,[120,-120],e)},W=function(t,e){return $(t,[60,-120,180],e)},Z=function(t,e){return $(t,[90,-90,180],e)},tt=function(t){return"string"==typeof t?function(t){var e;if(Object.keys(r).some((function(n){if(m[n].test(t))return e=n,!0})),!e&&~b.indexOf(t)&&(e=r.HEX),!e)throw new Error(E);return e}(t):function(t){var e,n=!1,i=G(Object.keys(t));if(p[i]&&(e=p[i]),e&&e===r.RGB){var o=Object.entries(t).some((function(t){return!F.test("".concat(t[1]))})),u=Object.entries(t).some((function(t){return!(y.test("".concat(t[1]))||!F.test("".concat(t[1]))&&!isNaN(+t[1])&&+t[1]<=255)}));o&&u&&(n=!0),o||(e=r.HEX)}if(!e||n)throw new Error(B);return e}(t)},et=((s={})[r.HEX]=function(t){var e=(~b.indexOf(t)?u[t]:t).match(m.HEX),n={r:D(e[1]||e[5]),g:D(e[2]||e[6]),b:D(e[3]||e[7])},r=e[4]||e[8];return void 0!==r&&(n.a=D(r)/255),n},s[r.RGB]=function(t){var e=t.match(m.RGB),n=L(e[1]||e[5]),r=L(e[2]||e[6]),i=L(e[3]||e[7]),o=e[4]||e[8],u={r:Math.min(n,255),g:Math.min(r,255),b:Math.min(i,255)};return void 0!==o&&(u.a=q(o)),u},s[r.HSL]=function(t){var e=t.match(m.HSL),n=U(e[1]||e[5]),r=R(e[2]||e[6]),i=R(e[3]||e[7]),o=e[4]||e[8],u=I(n,r,i);return void 0!==o&&(u.a=q(o)),u},s[r.CMYK]=function(t){var e=t.match(m.CMYK),n=O(e[1]||e[6]),r=O(e[2]||e[7]),i=O(e[3]||e[8]),o=O(e[4]||e[9]),u=e[5]||e[10],a=x(n,r,i,o);return void 0!==u&&(a.a=q(u)),a},s),nt=((d={})[r.HEX]=function(t){var e={r:L("".concat(t.r)),g:L("".concat(t.g)),b:L("".concat(t.b))};return M(t,"a")&&(e.a=Math.min(L("".concat(t.a),!0),1)),e},d[r.RGB]=function(t){return this.HEX(t)},d[r.HSL]=function(t){var e=R("".concat(t.s)),n=R("".concat(t.l)),r=I(U(t.h),e,n);return M(t,"a")&&(r.a=q(t.a)),r},d[r.CMYK]=function(t){var e=O("".concat(t.c)),n=O("".concat(t.m)),r=O("".concat(t.y)),i=O("".concat(t.k)),o=x(e,n,r,i);return M(t,"a")&&(o.a=q(t.a)),o},d),rt=function(t,e){return void 0===e&&(e=tt(t)),"string"==typeof t?et[e](t):nt[e](t)},it=((l={})[r.HEX]=function(t){return{r:S(t.r),g:S(t.g),b:S(t.b)}},l.HEXA=function(t){var e=it.HEX(t);return e.a=M(t,"a")?S(255*t.a):"0xFF",e},l[r.RGB]=function(t,e){return M(t,"a")&&delete t.a,ct(t,e)},l.RGBA=function(t,e){return t.a=M(t,"a")?j(t.a):1,ct(t,e)},l[r.HSL]=function(t,e){var n=T(t.r,t.g,t.b);return delete n.a,st(n,e)},l.HSLA=function(t,e){var n=it.HSL(t,e);return n.a=M(t,"a")?j(t.a,e):1,n},l[r.CMYK]=function(t,e){return dt(K(t.r,t.g,t.b),e)},l.CMYKA=function(t,e){var n=it.CMYK(t,e);return n.a=M(t,"a")?j(t.a,e):1,n},l),ot=function(t,n,i,o){var u=X(o),a=u.decimals,c=tt(t),s="string"==typeof t,d=rt(t,c),l="string"==typeof t&&M(d,"a")||"string"!=typeof t&&M(t,"a"),f=T(d.r,d.g,d.b,d.a);l||delete f.a;var h=i?f.l/(n+1):(100-f.l)/(n+1),b=Array(n).fill(null).map((function(t,n){return e(e({},f),{l:f.l+h*(n+1)*(1-2*+i)})}));switch(c){case r.HEX:default:return b.map((function(t){var n=I(t.h,t.s,t.l);return l&&(n.a=t.a),s?l?N.HEX(ct(e(e({},n),{a:j(255*n.a)}),u.decimals)):N.HEX(ct(n,a)):l?it.HEXA(n):it.HEX(n)}));case r.RGB:return b.map((function(t){var e=I(t.h,t.s,t.l);return l&&(e.a=t.a),s?N.RGB(ct(e,a)):l?it.RGBA(e,a):it.RGB(e,a)}));case r.HSL:return b.map((function(t){return s?N.HSL(st(t,a)):l?it.HSLA(e(e({},I(t.h,t.s,t.l)),{a:t.a}),a):it.HSL(I(t.h,t.s,t.l),a)}))}},ut=((f={buildHarmony:function(t,e,n,i){var o=tt(t),u=rt(t,o),a=T(u.r,u.g,u.b,u.a),c="string"==typeof t&&M(u,"a")||"string"!=typeof t&&M(t,"a"),s="string"==typeof t;switch(o){case r.HEX:default:return c?this.HEXA(st(a,0),e,n,s):this.HEX(st(a,0),e,n,s);case r.HSL:return c?this.HSLA(a,e,n,s,i):this.HSL(a,e,n,s,i);case r.RGB:return c?this.RGBA(a,e,n,s,i):this.RGB(a,e,n,s,i)}}})[r.HEX]=function(t,e,n,r){return e(t,n).map((function(t){return r?N.HEX(I(t.h,t.s,t.l)):it.HEX(I(t.h,t.s,t.l))}))},f.HEXA=function(t,n,r,i){return n(t,r).map((function(t){return i?N.HEX(e(e({},I(t.h,t.s,t.l)),{a:255*q(t.a)})):it.HEXA(e(e({},I(t.h,t.s,t.l)),{a:q(t.a)}))}))},f[r.RGB]=function(t,e,n,r,i){return e(t,n).map((function(t){return r?N.RGB(ct(I(t.h,t.s,t.l),i)):it.RGB(I(t.h,t.s,t.l),i)}))},f.RGBA=function(t,n,r,i,o){return n(t,r).map((function(t){return i?N.RGB(ct(e(e({},I(t.h,t.s,t.l)),{a:q(t.a)}),o)):it.RGBA(e(e({},I(t.h,t.s,t.l)),{a:q(t.a)}),o)}))},f[r.HSL]=function(t,e,n,r,i){return e(t,n).map((function(t){return r?N.HSL(st({h:t.h,s:t.s,l:t.l},i)):it.HSL(I(t.h,t.s,t.l),i)}))},f.HSLA=function(t,n,r,i,o){return n(t,r).map((function(t){return i?N.HSL(st(e(e({},t),{a:q(t.a)}),o)):it.HSLA(e(e({},I(t.h,t.s,t.l)),{a:q(t.a)}),o)}))},f),at=((h={mix:function(n,r){var i,o,u,a,c,s,d,l,f,h,b,g,p,m,A,y=n.map((function(t){var e=tt(t);return rt(t,e)})),F=r===t.Mix.SUBTRACTIVE?y.map((function(t){var e,n,r,i,o,u,a,c,s,d,l,f,h,b,g=(e=t.r,n=t.g,r=t.b,i=Math.min(e,n,r),o=Math.min(255-e,255-n,255-r),u=e-i,a=n-i,c=r-i,s=Math.min(u,a),d=u-s,l=(a+s)/2,f=(c+a-s)/2,h=Math.max(d,l,f)/Math.max(u,a,c),b=isNaN(h)||h===1/0||h<=0?1:h,{r:d/b+o,y:l/b+o,b:f/b+o});return M(t,"a")&&(g.a=t.a),g})):null;function H(n){var i=r===t.Mix.ADDITIVE?{r:0,g:0,b:0,a:0}:{r:0,y:0,b:0,a:0};return n.reduce((function(n,i){var o=M(i,"a")?i.a:1,u={r:Math.min(n.r+i.r*o,255),b:Math.min(n.b+i.b*o,255),a:1-(1-o)*(1-n.a)},a="g"in n?n.g:n.y,c="g"in i?i.g:i.y;return e(e({},u),r===t.Mix.ADDITIVE?{g:Math.min(a+c*o,255)}:{y:Math.min(a+c*o,255)})}),i)}if(r===t.Mix.ADDITIVE)i=H(y);else{var E=H(F);o=E.r,u=E.y,a=E.b,c=Math.min(o,u,a),s=Math.min(255-o,255-u,255-a),d=o-c,l=u-c,f=a-c,h=Math.min(l,f),b=d+l-h,g=l+h,p=2*(f-h),m=Math.max(b,g,p)/Math.max(d,l,f),A=isNaN(m)||m===1/0||m<=0?1:m,(i={r:b/A+s,g:g/A+s,b:p/A+s}).a=E.a}return{r:j(i.r),g:j(i.g),b:j(i.b),a:k(i.a,0,1)}}})[r.HEX]=function(t,e,n){var r=this.mix(t,e);return delete r.a,n?N.HEX(r):it.HEX(r)},h.HEXA=function(t,e,n){var r=this.mix(t,e);return r.a=n?255*q(r.a):q(r.a),n?N.HEX(r):it.HEXA(r)},h[r.RGB]=function(t,e,n,r){var i=X(r).decimals,o=this.mix(t,e);return delete o.a,n?N.RGB(o):it.RGB(o,i)},h.RGBA=function(t,e,n,r){var i=X(r).decimals,o=this.mix(t,e);return n?N.RGB(o):it.RGBA(o,i)},h[r.HSL]=function(t,e,n,r){var i=X(r).decimals,o=this.mix(t,e),u=T(o.r,o.g,o.b);return delete o.a,delete u.a,n?N.HSL(u):it.HSL(o,i)},h.HSLA=function(t,e,n,r){var i=X(r).decimals,o=this.mix(t,e),u=T(o.r,o.g,o.b,o.a);return n?N.HSL(u):it.HSLA(o,i)},h),ct=function(t,n){return e({r:j(t.r,n),g:j(t.g,n),b:j(t.b,n)},M(t,"a")?{a:j(t.a,n)}:{})},st=function(t,n){return e({h:j(t.h,n),s:j(t.s,n),l:j(t.l,n)},M(t,"a")?{a:j(t.a,n)}:{})},dt=function(t,e){return{c:j(t.c,e),m:j(t.m,e),y:j(t.y,e),k:j(t.k,e)}},lt=function(t,e,n,r){var i=X(n).decimals;return r(rt(t,e),i)},ft=function(t,e,n,r,i){var o=X(r).decimals;n<1&&(n=5);var u=function(t,e,n){var r=n-1,i=(e.r-t.r)/r,o=(e.g-t.g)/r,u=(e.b-t.b)/r,a=q(t.a),c=(q(e.a)-a)/r;return Array(n).fill(null).map((function(n,s){return 0===s?t:s===r?e:{r:j(t.r+i*s),g:j(t.g+o*s),b:j(t.b+u*s),a:j(a+c*s)}}))}(rt(t),rt(e),n);return u.map((function(t){return i(t,o)}))},ht=function(){function n(t,e){void 0===e&&(e={}),this._options=X(e),this.rgb=rt(t),this.updateHSL(),this.updateCMYK()}return n.prototype.updateRGB=function(){this.rgb=e(e({},I(this.hsl.h,this.hsl.s,this.hsl.l)),{a:this.hsl.a})},n.prototype.updateRGBFromCMYK=function(){this.rgb=e(e({},x(this.cmyk.c,this.cmyk.m,this.cmyk.y,this.cmyk.k)),{a:this.rgb.a})},n.prototype.updateHSL=function(){this.hsl=T(this.rgb.r,this.rgb.g,this.rgb.b,this.rgb.a)},n.prototype.updateCMYK=function(){this.cmyk=K(this.rgb.r,this.rgb.g,this.rgb.b)},n.prototype.updateRGBAndCMYK=function(){return this.updateRGB(),this.updateCMYK(),this},n.prototype.updateHSLAndCMYK=function(){return this.updateHSL(),this.updateCMYK(),this},n.prototype.updateRGBAndHSL=function(){return this.updateRGBFromCMYK(),this.updateHSL(),this},n.prototype.setOptions=function(t){return void 0===t&&(t={}),this._options=e(e({},this._options),t),this},n.prototype.setH=function(t){return this.hsl.h=U(t),this.updateRGBAndCMYK()},n.prototype.setS=function(t){return this.hsl.s=k(t,0,100),this.updateRGBAndCMYK()},n.prototype.setL=function(t){return this.hsl.l=k(t,0,100),this.updateRGBAndCMYK()},n.prototype.setR=function(t){return this.rgb.r=k(t,0,255),this.updateHSLAndCMYK()},n.prototype.setG=function(t){return this.rgb.g=k(t,0,255),this.updateHSLAndCMYK()},n.prototype.setB=function(t){return this.rgb.b=k(t,0,255),this.updateHSLAndCMYK()},n.prototype.setA=function(t){return this.hsl.a=this.rgb.a=k(t,0,1),this},n.prototype.setC=function(t){return this.cmyk.c=k(t,0,100),this.updateRGBAndHSL()},n.prototype.setM=function(t){return this.cmyk.m=k(t,0,100),this.updateRGBAndHSL()},n.prototype.setY=function(t){return this.cmyk.y=k(t,0,100),this.updateRGBAndHSL()},n.prototype.setK=function(t){return this.cmyk.k=k(t,0,100),this.updateRGBAndHSL()},Object.defineProperty(n.prototype,"options",{get:function(){return this._options},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"H",{get:function(){return j(this.hsl.h,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"S",{get:function(){return j(this.hsl.s,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"L",{get:function(){return j(this.hsl.l,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"R",{get:function(){return j(this.rgb.r,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"G",{get:function(){return j(this.rgb.g,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"B",{get:function(){return j(this.rgb.b,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"A",{get:function(){return j(this.hsl.a,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"C",{get:function(){return j(this.cmyk.c,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"M",{get:function(){return j(this.cmyk.m,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"Y",{get:function(){return j(this.cmyk.y,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"K",{get:function(){return j(this.cmyk.k,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"HEXObject",{get:function(){return it.HEX(this.rgb)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"HEXAObject",{get:function(){return it.HEXA(this.rgb)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"RGBObject",{get:function(){return{r:this.R,g:this.G,b:this.B}},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"RGBAObject",{get:function(){return e(e({},this.RGBObject),{a:this.A})},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"HSLObject",{get:function(){return{h:this.H,s:this.S,l:this.L}},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"HSLAObject",{get:function(){return e(e({},this.HSLObject),{a:this.A})},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"CMYKObject",{get:function(){return{c:this.C,m:this.M,y:this.Y,k:this.K}},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"CMYKAObject",{get:function(){return e(e({},this.CMYKObject),{a:this.A})},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"HEX",{get:function(){return N.HEX({r:this.R,g:this.G,b:this.B})},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"HEXA",{get:function(){return N.HEX({r:this.R,g:this.G,b:this.B,a:255*this.A})},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"RGB",{get:function(){return N.RGB({r:this.R,g:this.G,b:this.B})},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"RGBA",{get:function(){return N.RGB({r:this.R,g:this.G,b:this.B,a:this.A})},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"HSL",{get:function(){return N.HSL({h:this.H,s:this.S,l:this.L})},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"HSLA",{get:function(){return N.HSL({h:this.H,s:this.S,l:this.L,a:this.A})},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"CMYK",{get:function(){return N.CMYK({c:this.C,m:this.M,y:this.Y,k:this.K})},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"CMYKA",{get:function(){return N.CMYK({c:this.C,m:this.M,y:this.Y,k:this.K,a:this.A})},enumerable:!1,configurable:!0}),n.toHEXObject=function(t){var e=tt(t);return lt(t,e,{decimals:0},it.HEX)},n.toHEX=function(t){return N.HEX(n.toHEXObject(t))},n.toHEXAObject=function(t){var e=tt(t);return lt(t,e,{decimals:0},it.HEXA)},n.toHEXA=function(t){return N.HEX(n.toHEXAObject(t))},n.toRGBObject=function(t,e){void 0===e&&(e={});var n=tt(t);return lt(t,n,e,it.RGB)},n.toRGB=function(t,e){return void 0===e&&(e={}),N.RGB(n.toRGBObject(t,e))},n.toRGBAObject=function(t,e){void 0===e&&(e={});var n=tt(t);return lt(t,n,e,it.RGBA)},n.toRGBA=function(t,e){return void 0===e&&(e={}),N.RGB(n.toRGBAObject(t,e))},n.toHSLObject=function(t,e){void 0===e&&(e={});var n=tt(t);return lt(t,n,e,it.HSL)},n.toHSL=function(t,e){return void 0===e&&(e={}),N.HSL(n.toHSLObject(t,e))},n.toHSLAObject=function(t,e){void 0===e&&(e={});var n=tt(t);return lt(t,n,e,it.HSLA)},n.toHSLA=function(t,e){return void 0===e&&(e={}),N.HSL(n.toHSLAObject(t,e))},n.toCMYKObject=function(t,e){void 0===e&&(e={});var n=tt(t);return lt(t,n,e,it.CMYK)},n.toCMYK=function(t,e){return void 0===e&&(e={}),N.CMYK(n.toCMYKObject(t,e))},n.toCMYKAObject=function(t,e){void 0===e&&(e={});var n=tt(t);return lt(t,n,e,it.CMYKA)},n.toCMYKA=function(t,e){return void 0===e&&(e={}),N.CMYK(n.toCMYKAObject(t,e))},n.getBlendHEXObject=function(t,e,n){return void 0===n&&(n=5),ft(t,e,n,{decimals:0},it.HEX)},n.getBlendHEX=function(t,e,r){return void 0===r&&(r=5),n.getBlendHEXObject(t,e,r).map((function(t){return N.HEX(t)}))},n.getBlendHEXAObject=function(t,e,n){return void 0===n&&(n=5),ft(t,e,n,{decimals:0},it.HEXA)},n.getBlendHEXA=function(t,e,r){return void 0===r&&(r=5),n.getBlendHEXAObject(t,e,r).map((function(t){return N.HEX(t)}))},n.getBlendRGBObject=function(t,e,n,r){return void 0===n&&(n=5),void 0===r&&(r={}),ft(t,e,n,r,it.RGB)},n.getBlendRGB=function(t,e,r,i){return void 0===r&&(r=5),void 0===i&&(i={}),n.getBlendRGBObject(t,e,r,i).map((function(t){return N.RGB(t)}))},n.getBlendRGBAObject=function(t,e,n,r){return void 0===n&&(n=5),void 0===r&&(r={}),ft(t,e,n,r,it.RGBA)},n.getBlendRGBA=function(t,e,r,i){return void 0===r&&(r=5),void 0===i&&(i={}),n.getBlendRGBAObject(t,e,r,i).map((function(t){return N.RGB(t)}))},n.getBlendHSLObject=function(t,e,n,r){return void 0===n&&(n=5),void 0===r&&(r={}),ft(t,e,n,r,it.HSL)},n.getBlendHSL=function(t,e,r,i){return void 0===r&&(r=5),void 0===i&&(i={}),n.getBlendHSLObject(t,e,r,i).map((function(t){return N.HSL(t)}))},n.getBlendHSLAObject=function(t,e,n,r){return void 0===n&&(n=5),void 0===r&&(r={}),ft(t,e,n,r,it.HSLA)},n.getBlendHSLA=function(t,e,r,i){return void 0===r&&(r=5),void 0===i&&(i={}),n.getBlendHSLAObject(t,e,r,i).map((function(t){return N.HSL(t)}))},n.getMixHEXObject=function(e,n){return void 0===n&&(n=t.Mix.ADDITIVE),at.HEX(e,n,!1)},n.getMixHEX=function(e,n){return void 0===n&&(n=t.Mix.ADDITIVE),at.HEX(e,n,!0)},n.getMixHEXAObject=function(e,n){return void 0===n&&(n=t.Mix.ADDITIVE),at.HEXA(e,n,!1)},n.getMixHEXA=function(e,n){return void 0===n&&(n=t.Mix.ADDITIVE),at.HEXA(e,n,!0)},n.getMixRGBObject=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),at.RGB(e,n,!1,r)},n.getMixRGB=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),at.RGB(e,n,!0,r)},n.getMixRGBAObject=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),at.RGBA(e,n,!1,r)},n.getMixRGBA=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),at.RGBA(e,n,!0,r)},n.getMixHSLObject=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),at.HSL(e,n,!1,r)},n.getMixHSL=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),at.HSL(e,n,!0,r)},n.getMixHSLAObject=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),at.HSLA(e,n,!1,r)},n.getMixHSLA=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),at.HSLA(e,n,!0,r)},n.getShades=function(t,e,n){return void 0===n&&(n={}),ot(t,e,!0,n)},n.getTints=function(t,e,n){return void 0===n&&(n={}),ot(t,e,!1,n)},n.getHarmony=function(e,n,r,i){return void 0===n&&(n=t.Harmony.COMPLEMENTARY),void 0===r&&(r=t.Mix.ADDITIVE),void 0===i&&(i={}),function(e,n,r,i){var o,u=X(r).decimals;return(o={},o[t.Harmony.ANALOGOUS]=ut.buildHarmony(n,_,i,u),o[t.Harmony.COMPLEMENTARY]=ut.buildHarmony(n,Q,i,u),o[t.Harmony.SPLIT_COMPLEMENTARY]=ut.buildHarmony(n,z,i,u),o[t.Harmony.TRIADIC]=ut.buildHarmony(n,J,i,u),o[t.Harmony.TETRADIC]=ut.buildHarmony(n,W,i,u),o[t.Harmony.SQUARE]=ut.buildHarmony(n,Z,i,u),o)[e]}(n,e,i,r)},n}();return t.ColorTranslator=ht,t}({}); +var colortranslator=function(t){"use strict";var e=function(){return e=Object.assign||function(t){for(var e,n=1,r=arguments.length;n=6&&(n-=6),j(n<1?255*((e-t)*n+t):n<3?255*e:n<4?255*((e-t)*(4-n)+t):255*t)},x=function(t,e,n){e/=100;var r=(n/=100)<=.5?n*(e+1):n+e-n*e,i=2*n-r;return{r:I(i,r,(t/=60)+2),g:I(i,r,t),b:I(i,r,t-2)}},K=function(t,e,n,r){return{r:j(255*(1-t)*(r=1-r)),g:j(255*(1-e)*r),b:j(255*(1-n)*r)}},T=function(t,e,n){t/=255,e/=255,n/=255;var r=1-Math.max(t,e,n),i=1-r,o=i&&(i-e)/i,a=i&&(i-n)/i;return{c:j(100*(i&&(i-t)/i)),m:j(100*o),y:j(100*a),k:j(100*r)}},P=function(t,e,n,r){void 0===r&&(r=1),t/=255,e/=255,n/=255,r=Math.min(r,1);var i=Math.max(t,e,n),o=Math.min(t,e,n),a=i-o,u=0,c=0,s=(i+o)/2;if(0!==a){switch(i){case t:u=(e-n)/a%6;break;case e:u=(n-t)/a+2;break;case n:u=(t-e)/a+4}(u=j(60*u))<0&&(u+=360),c=a/(1-Math.abs(2*s-1))}return{h:u,s:j(100*c),l:j(100*s),a:r}},w=function(t,e){if(t<0&&(t+=360),t>360&&(t-=360),360===t||0===t)return t;var n=[[0,120],[120,180],[180,240],[240,360]],r=[[0,60],[60,120],[120,240],[240,360]],i=e?r:n,o=0,a=0,u=0,c=0;return(e?n:r).find((function(e,n){return t>=e[0]&&t360||t<0)&&(t-=360*Math.floor(t/360)),t},$=function(t){return"string"==typeof t&&(t=A.test(t)?C(t)/100:+t),isNaN(+t)||t>1?1:j(t)},_=function(r,i,o){return i.reduce((function(i,a){return n(n([],i,!0),[e(e({},r),{h:o===t.Mix.ADDITIVE?q(r.h+a):q(w(w(r.h,!1)+a,!0))})],!1)}),[e({},r)])},Q=function(t,e){return _(t,[30,-30],e)},z=function(t,e){return _(t,[180],e)},J=function(t,e){return _(t,[150,-150],e)},W=function(t,e){return _(t,[120,-120],e)},Z=function(t,e){return _(t,[60,-120,180],e)},tt=function(t,e){return _(t,[90,-90,180],e)},et=function(t){return"string"==typeof t?function(t){var e;if(Object.keys(r).some((function(n){if(m[n].test(t))return e=n,!0})),!e&&~p.indexOf(t)&&(e=r.HEX),!e)throw new Error(v);return e}(t):function(t){var e,n=!1,i=G(Object.keys(t));if(b[i]&&(e=b[i]),e&&e===r.RGB){var o=Object.entries(t).some((function(t){return!F.test("".concat(t[1]))})),a=Object.entries(t).some((function(t){return!(A.test("".concat(t[1]))||!F.test("".concat(t[1]))&&!isNaN(+t[1])&&+t[1]<=255)}));o&&a&&(n=!0),o||(e=r.HEX)}if(!e||n)throw new Error(E);return e}(t)},nt=((s={})[r.HEX]=function(t){var e=(~p.indexOf(t)?a[t]:t).match(m.HEX),n={r:R(e[1]||e[5]),g:R(e[2]||e[6]),b:R(e[3]||e[7])},r=e[4]||e[8];return void 0!==r&&(n.a=R(r)/255),n},s[r.RGB]=function(t){var e=t.match(m.RGB),n=L(e[1]||e[5]),r=L(e[2]||e[6]),i=L(e[3]||e[7]),o=e[4]||e[8],a={r:Math.min(n,255),g:Math.min(r,255),b:Math.min(i,255)};return void 0!==o&&(a.a=$(o)),a},s[r.HSL]=function(t){var e=t.match(m.HSL),n=q(e[1]||e[5]),r=S(e[2]||e[6]),i=S(e[3]||e[7]),o=e[4]||e[8],a=x(n,r,i);return void 0!==o&&(a.a=$(o)),a},s[r.CMYK]=function(t){var e=t.match(m.CMYK),n=O(e[1]||e[6]),r=O(e[2]||e[7]),i=O(e[3]||e[8]),o=O(e[4]||e[9]),a=e[5]||e[10],u=K(n,r,i,o);return void 0!==a&&(u.a=$(a)),u},s),rt=((d={})[r.HEX]=function(t){var e={r:L("".concat(t.r)),g:L("".concat(t.g)),b:L("".concat(t.b))};return M(t,"a")&&(e.a=Math.min(L("".concat(t.a),!0),1)),e},d[r.RGB]=function(t){return this.HEX(t)},d[r.HSL]=function(t){var e=S("".concat(t.s)),n=S("".concat(t.l)),r=x(q(t.h),e,n);return M(t,"a")&&(r.a=$(t.a)),r},d[r.CMYK]=function(t){var e=O("".concat(t.c)),n=O("".concat(t.m)),r=O("".concat(t.y)),i=O("".concat(t.k)),o=K(e,n,r,i);return M(t,"a")&&(o.a=$(t.a)),o},d),it=function(t,e){return void 0===e&&(e=et(t)),"string"==typeof t?nt[e](t):rt[e](t)},ot=((l={})[r.HEX]=function(t){return{r:D(t.r),g:D(t.g),b:D(t.b)}},l.HEXA=function(t){var e=ot.HEX(t);return e.a=M(t,"a")?D(255*t.a):"0xFF",e},l[r.RGB]=function(t,e){return M(t,"a")&&delete t.a,st(t,e)},l.RGBA=function(t,e){return t.a=M(t,"a")?j(t.a):1,st(t,e)},l[r.HSL]=function(t,e){var n=P(t.r,t.g,t.b);return delete n.a,dt(n,e)},l.HSLA=function(t,e){var n=ot.HSL(t,e);return n.a=M(t,"a")?j(t.a,e):1,n},l[r.CMYK]=function(t,e){return lt(T(t.r,t.g,t.b),e)},l.CMYKA=function(t,e){var n=ot.CMYK(t,e);return n.a=M(t,"a")?j(t.a,e):1,n},l),at=function(t,n,i,o){var a=o.decimals,u=et(t),c="string"==typeof t,s=it(t,u),d="string"==typeof t&&M(s,"a")||"string"!=typeof t&&M(t,"a"),l=P(s.r,s.g,s.b,s.a);d||delete l.a;var f=i?l.l/(n+1):(100-l.l)/(n+1),h=Array(n).fill(null).map((function(t,n){return e(e({},l),{l:l.l+f*(n+1)*(1-2*+i)})}));switch(u){case r.HEX:default:return h.map((function(t){var n=x(t.h,t.s,t.l);return d&&(n.a=t.a),c?d?U.HEX(st(e(e({},n),{a:j(255*n.a)}),a)):U.HEX(st(n,a)):d?ot.HEXA(n):ot.HEX(n)}));case r.RGB:return h.map((function(t){var e=x(t.h,t.s,t.l);return d&&(e.a=t.a),c?U.RGB(st(e,a),o):d?ot.RGBA(e,a):ot.RGB(e,a)}));case r.HSL:return h.map((function(t){return c?U.HSL(dt(t,a),o):d?ot.HSLA(e(e({},x(t.h,t.s,t.l)),{a:t.a}),a):ot.HSL(x(t.h,t.s,t.l),a)}))}},ut=((f={buildHarmony:function(t,e,n,i){var o=et(t),a=it(t,o),u=P(a.r,a.g,a.b,a.a),c="string"==typeof t&&M(a,"a")||"string"!=typeof t&&M(t,"a"),s="string"==typeof t;switch(o){case r.HEX:default:return c?this.HEXA(dt(u,0),e,n,s):this.HEX(dt(u,0),e,n,s);case r.HSL:return c?this.HSLA(u,e,n,s,i):this.HSL(u,e,n,s,i);case r.RGB:return c?this.RGBA(u,e,n,s,i):this.RGB(u,e,n,s,i)}}})[r.HEX]=function(t,e,n,r){return e(t,n).map((function(t){return r?U.HEX(x(t.h,t.s,t.l)):ot.HEX(x(t.h,t.s,t.l))}))},f.HEXA=function(t,n,r,i){return n(t,r).map((function(t){return i?U.HEX(e(e({},x(t.h,t.s,t.l)),{a:255*$(t.a)})):ot.HEXA(e(e({},x(t.h,t.s,t.l)),{a:$(t.a)}))}))},f[r.RGB]=function(t,e,n,r,i){var o=i.decimals;return e(t,n).map((function(t){return r?U.RGB(st(x(t.h,t.s,t.l),o),i):ot.RGB(x(t.h,t.s,t.l),o)}))},f.RGBA=function(t,n,r,i,o){var a=o.decimals;return n(t,r).map((function(t){return i?U.RGB(st(e(e({},x(t.h,t.s,t.l)),{a:$(t.a)}),a),o):ot.RGBA(e(e({},x(t.h,t.s,t.l)),{a:$(t.a)}),a)}))},f[r.HSL]=function(t,e,n,r,i){var o=i.decimals;return e(t,n).map((function(t){return r?U.HSL(dt({h:t.h,s:t.s,l:t.l},o),i):ot.HSL(x(t.h,t.s,t.l),o)}))},f.HSLA=function(t,n,r,i,o){var a=o.decimals;return n(t,r).map((function(t){return i?U.HSL(dt(e(e({},t),{a:$(t.a)}),a),o):ot.HSLA(e(e({},x(t.h,t.s,t.l)),{a:$(t.a)}),a)}))},f),ct=((h={mix:function(n,r){var i,o,a,u,c,s,d,l,f,h,p,g,b,m,y,A=n.map((function(t){var e=et(t);return it(t,e)})),F=r===t.Mix.SUBTRACTIVE?A.map((function(t){var e,n,r,i,o,a,u,c,s,d,l,f,h,p,g=(e=t.r,n=t.g,r=t.b,i=Math.min(e,n,r),o=Math.min(255-e,255-n,255-r),a=e-i,u=n-i,c=r-i,s=Math.min(a,u),d=a-s,l=(u+s)/2,f=(c+u-s)/2,h=Math.max(d,l,f)/Math.max(a,u,c),p=isNaN(h)||h===1/0||h<=0?1:h,{r:d/p+o,y:l/p+o,b:f/p+o});return M(t,"a")&&(g.a=t.a),g})):null;function H(n){var i=r===t.Mix.ADDITIVE?{r:0,g:0,b:0,a:0}:{r:0,y:0,b:0,a:0};return n.reduce((function(n,i){var o=M(i,"a")?i.a:1,a={r:Math.min(n.r+i.r*o,255),b:Math.min(n.b+i.b*o,255),a:1-(1-o)*(1-n.a)},u="g"in n?n.g:n.y,c="g"in i?i.g:i.y;return e(e({},a),r===t.Mix.ADDITIVE?{g:Math.min(u+c*o,255)}:{y:Math.min(u+c*o,255)})}),i)}if(r===t.Mix.ADDITIVE)i=H(A);else{var v=H(F);o=v.r,a=v.y,u=v.b,c=Math.min(o,a,u),s=Math.min(255-o,255-a,255-u),d=o-c,l=a-c,f=u-c,h=Math.min(l,f),p=d+l-h,g=l+h,b=2*(f-h),m=Math.max(p,g,b)/Math.max(d,l,f),y=isNaN(m)||m===1/0||m<=0?1:m,(i={r:p/y+s,g:g/y+s,b:b/y+s}).a=v.a}return{r:j(i.r),g:j(i.g),b:j(i.b),a:k(i.a,0,1)}}})[r.HEX]=function(t,e,n){var r=this.mix(t,e);return delete r.a,n?U.HEX(r):ot.HEX(r)},h.HEXA=function(t,e,n){var r=this.mix(t,e);return r.a=n?255*$(r.a):$(r.a),n?U.HEX(r):ot.HEXA(r)},h[r.RGB]=function(t,e,n,r){var i=r.decimals,o=this.mix(t,e);return delete o.a,n?U.RGB(o,r):ot.RGB(o,i)},h.RGBA=function(t,e,n,r){var i=r.decimals,o=this.mix(t,e);return n?U.RGB(o,r):ot.RGBA(o,i)},h[r.HSL]=function(t,e,n,r){var i=r.decimals,o=this.mix(t,e),a=P(o.r,o.g,o.b);return delete o.a,delete a.a,n?U.HSL(a,r):ot.HSL(o,i)},h.HSLA=function(t,e,n,r){var i=r.decimals,o=this.mix(t,e),a=P(o.r,o.g,o.b,o.a);return n?U.HSL(a,r):ot.HSLA(o,i)},h),st=function(t,n){return e({r:j(t.r,n),g:j(t.g,n),b:j(t.b,n)},M(t,"a")?{a:j(t.a,n)}:{})},dt=function(t,n){return e({h:j(t.h,n),s:j(t.s,n),l:j(t.l,n)},M(t,"a")?{a:j(t.a,n)}:{})},lt=function(t,e){return{c:j(t.c,e),m:j(t.m,e),y:j(t.y,e),k:j(t.k,e)}},ft=function(t,e,n,r){var i=X(n).decimals;return r(it(t,e),i)},ht=function(t,e,n,r,i){var o=X(r).decimals;n<1&&(n=5);var a=function(t,e,n){var r=n-1,i=(e.r-t.r)/r,o=(e.g-t.g)/r,a=(e.b-t.b)/r,u=$(t.a),c=($(e.a)-u)/r;return Array(n).fill(null).map((function(n,s){return 0===s?t:s===r?e:{r:j(t.r+i*s),g:j(t.g+o*s),b:j(t.b+a*s),a:j(u+c*s)}}))}(it(t),it(e),n);return a.map((function(t){return i(t,o)}))},pt=function(){function r(t,e){void 0===e&&(e={}),this._options=X(e),this.rgb=it(t),this.updateHSL(),this.updateCMYK()}return r.prototype.updateRGB=function(){this.rgb=e(e({},x(this.hsl.h,this.hsl.s,this.hsl.l)),{a:this.hsl.a})},r.prototype.updateRGBFromCMYK=function(){this.rgb=e(e({},K(this.cmyk.c,this.cmyk.m,this.cmyk.y,this.cmyk.k)),{a:this.rgb.a})},r.prototype.updateHSL=function(){this.hsl=P(this.rgb.r,this.rgb.g,this.rgb.b,this.rgb.a)},r.prototype.updateCMYK=function(){this.cmyk=T(this.rgb.r,this.rgb.g,this.rgb.b)},r.prototype.updateRGBAndCMYK=function(){return this.updateRGB(),this.updateCMYK(),this},r.prototype.updateHSLAndCMYK=function(){return this.updateHSL(),this.updateCMYK(),this},r.prototype.updateRGBAndHSL=function(){return this.updateRGBFromCMYK(),this.updateHSL(),this},r.prototype.setOptions=function(t){return void 0===t&&(t={}),this._options=e(e({},this._options),t),this},r.prototype.setH=function(t){return this.hsl.h=q(t),this.updateRGBAndCMYK()},r.prototype.setS=function(t){return this.hsl.s=k(t,0,100),this.updateRGBAndCMYK()},r.prototype.setL=function(t){return this.hsl.l=k(t,0,100),this.updateRGBAndCMYK()},r.prototype.setR=function(t){return this.rgb.r=k(t,0,255),this.updateHSLAndCMYK()},r.prototype.setG=function(t){return this.rgb.g=k(t,0,255),this.updateHSLAndCMYK()},r.prototype.setB=function(t){return this.rgb.b=k(t,0,255),this.updateHSLAndCMYK()},r.prototype.setA=function(t){return this.hsl.a=this.rgb.a=k(t,0,1),this},r.prototype.setC=function(t){return this.cmyk.c=k(t,0,100),this.updateRGBAndHSL()},r.prototype.setM=function(t){return this.cmyk.m=k(t,0,100),this.updateRGBAndHSL()},r.prototype.setY=function(t){return this.cmyk.y=k(t,0,100),this.updateRGBAndHSL()},r.prototype.setK=function(t){return this.cmyk.k=k(t,0,100),this.updateRGBAndHSL()},Object.defineProperty(r.prototype,"options",{get:function(){return this._options},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"H",{get:function(){return j(this.hsl.h,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"S",{get:function(){return j(this.hsl.s,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"L",{get:function(){return j(this.hsl.l,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"R",{get:function(){return j(this.rgb.r,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"G",{get:function(){return j(this.rgb.g,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"B",{get:function(){return j(this.rgb.b,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"A",{get:function(){return j(this.hsl.a,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"C",{get:function(){return j(this.cmyk.c,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"M",{get:function(){return j(this.cmyk.m,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"Y",{get:function(){return j(this.cmyk.y,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"K",{get:function(){return j(this.cmyk.k,this.options.decimals)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"HEXObject",{get:function(){return ot.HEX(this.rgb)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"HEXAObject",{get:function(){return ot.HEXA(this.rgb)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"RGBObject",{get:function(){return{r:this.R,g:this.G,b:this.B}},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"RGBAObject",{get:function(){return e(e({},this.RGBObject),{a:this.A})},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"HSLObject",{get:function(){return{h:this.H,s:this.S,l:this.L}},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"HSLAObject",{get:function(){return e(e({},this.HSLObject),{a:this.A})},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"CMYKObject",{get:function(){return{c:this.C,m:this.M,y:this.Y,k:this.K}},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"CMYKAObject",{get:function(){return e(e({},this.CMYKObject),{a:this.A})},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"HEX",{get:function(){return U.HEX({r:this.R,g:this.G,b:this.B})},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"HEXA",{get:function(){return U.HEX({r:this.R,g:this.G,b:this.B,a:255*this.A})},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"RGB",{get:function(){return U.RGB({r:this.R,g:this.G,b:this.B},this.options)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"RGBA",{get:function(){return U.RGB({r:this.R,g:this.G,b:this.B,a:this.A},this.options)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"HSL",{get:function(){return U.HSL({h:this.H,s:this.S,l:this.L},this.options)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"HSLA",{get:function(){return U.HSL({h:this.H,s:this.S,l:this.L,a:this.A},this.options)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"CMYK",{get:function(){return U.CMYK({c:this.C,m:this.M,y:this.Y,k:this.K},this.options)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"CMYKA",{get:function(){return U.CMYK({c:this.C,m:this.M,y:this.Y,k:this.K,a:this.A},this.options)},enumerable:!1,configurable:!0}),r.toHEXObject=function(t){var e=et(t);return ft(t,e,{decimals:0},ot.HEX)},r.toHEX=function(t){return U.HEX(r.toHEXObject(t))},r.toHEXAObject=function(t){var e=et(t);return ft(t,e,{decimals:0},ot.HEXA)},r.toHEXA=function(t){return U.HEX(r.toHEXAObject(t))},r.toRGBObject=function(t,e){void 0===e&&(e={});var n=et(t);return ft(t,n,e,ot.RGB)},r.toRGB=function(t,e){return void 0===e&&(e={}),U.RGB(r.toRGBObject(t,e),Y(e,t))},r.toRGBAObject=function(t,e){void 0===e&&(e={});var n=et(t);return ft(t,n,e,ot.RGBA)},r.toRGBA=function(t,e){return void 0===e&&(e={}),U.RGB(r.toRGBAObject(t,e),Y(e,t))},r.toHSLObject=function(t,e){void 0===e&&(e={});var n=et(t);return ft(t,n,e,ot.HSL)},r.toHSL=function(t,e){return void 0===e&&(e={}),U.HSL(r.toHSLObject(t,e),Y(e,t))},r.toHSLAObject=function(t,e){void 0===e&&(e={});var n=et(t);return ft(t,n,e,ot.HSLA)},r.toHSLA=function(t,e){return void 0===e&&(e={}),U.HSL(r.toHSLAObject(t,e),Y(e,t))},r.toCMYKObject=function(t,e){void 0===e&&(e={});var n=et(t);return ft(t,n,e,ot.CMYK)},r.toCMYK=function(t,e){return void 0===e&&(e={}),U.CMYK(r.toCMYKObject(t,e),Y(e,t))},r.toCMYKAObject=function(t,e){void 0===e&&(e={});var n=et(t);return ft(t,n,e,ot.CMYKA)},r.toCMYKA=function(t,e){return void 0===e&&(e={}),U.CMYK(r.toCMYKAObject(t,e),Y(e,t))},r.getBlendHEXObject=function(t,e,n){return void 0===n&&(n=5),ht(t,e,n,{decimals:0},ot.HEX)},r.getBlendHEX=function(t,e,n){return void 0===n&&(n=5),r.getBlendHEXObject(t,e,n).map((function(t){return U.HEX(t)}))},r.getBlendHEXAObject=function(t,e,n){return void 0===n&&(n=5),ht(t,e,n,{decimals:0},ot.HEXA)},r.getBlendHEXA=function(t,e,n){return void 0===n&&(n=5),r.getBlendHEXAObject(t,e,n).map((function(t){return U.HEX(t)}))},r.getBlendRGBObject=function(t,e,n,r){return void 0===n&&(n=5),void 0===r&&(r={}),ht(t,e,n,r,ot.RGB)},r.getBlendRGB=function(t,e,n,i){return void 0===n&&(n=5),void 0===i&&(i={}),r.getBlendRGBObject(t,e,n,i).map((function(n){return U.RGB(n,Y(i,t,e))}))},r.getBlendRGBAObject=function(t,e,n,r){return void 0===n&&(n=5),void 0===r&&(r={}),ht(t,e,n,r,ot.RGBA)},r.getBlendRGBA=function(t,e,n,i){return void 0===n&&(n=5),void 0===i&&(i={}),r.getBlendRGBAObject(t,e,n,i).map((function(n){return U.RGB(n,Y(i,t,e))}))},r.getBlendHSLObject=function(t,e,n,r){return void 0===n&&(n=5),void 0===r&&(r={}),ht(t,e,n,r,ot.HSL)},r.getBlendHSL=function(t,e,n,i){return void 0===n&&(n=5),void 0===i&&(i={}),r.getBlendHSLObject(t,e,n,i).map((function(n){return U.HSL(n,Y(i,t,e))}))},r.getBlendHSLAObject=function(t,e,n,r){return void 0===n&&(n=5),void 0===r&&(r={}),ht(t,e,n,r,ot.HSLA)},r.getBlendHSLA=function(t,e,n,i){return void 0===n&&(n=5),void 0===i&&(i={}),r.getBlendHSLAObject(t,e,n,i).map((function(n){return U.HSL(n,Y(i,t,e))}))},r.getMixHEXObject=function(e,n){return void 0===n&&(n=t.Mix.ADDITIVE),ct.HEX(e,n,!1)},r.getMixHEX=function(e,n){return void 0===n&&(n=t.Mix.ADDITIVE),ct.HEX(e,n,!0)},r.getMixHEXAObject=function(e,n){return void 0===n&&(n=t.Mix.ADDITIVE),ct.HEXA(e,n,!1)},r.getMixHEXA=function(e,n){return void 0===n&&(n=t.Mix.ADDITIVE),ct.HEXA(e,n,!0)},r.getMixRGBObject=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),ct.RGB(e,n,!1,X(r))},r.getMixRGB=function(e,r,i){return void 0===r&&(r=t.Mix.ADDITIVE),void 0===i&&(i={}),ct.RGB(e,r,!0,Y.apply(void 0,n([i],e,!1)))},r.getMixRGBAObject=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),ct.RGBA(e,n,!1,X(r))},r.getMixRGBA=function(e,r,i){return void 0===r&&(r=t.Mix.ADDITIVE),void 0===i&&(i={}),ct.RGBA(e,r,!0,Y.apply(void 0,n([i],e,!1)))},r.getMixHSLObject=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),ct.HSL(e,n,!1,X(r))},r.getMixHSL=function(e,r,i){return void 0===r&&(r=t.Mix.ADDITIVE),void 0===i&&(i={}),ct.HSL(e,r,!0,Y.apply(void 0,n([i],e,!1)))},r.getMixHSLAObject=function(e,n,r){return void 0===n&&(n=t.Mix.ADDITIVE),void 0===r&&(r={}),ct.HSLA(e,n,!1,X(r))},r.getMixHSLA=function(e,r,i){return void 0===r&&(r=t.Mix.ADDITIVE),void 0===i&&(i={}),ct.HSLA(e,r,!0,Y.apply(void 0,n([i],e,!1)))},r.getShades=function(t,e,n){return void 0===n&&(n={}),at(t,e,!0,Y(n,t))},r.getTints=function(t,e,n){return void 0===n&&(n={}),at(t,e,!1,Y(n,t))},r.getHarmony=function(e,n,r,i){return void 0===n&&(n=t.Harmony.COMPLEMENTARY),void 0===r&&(r=t.Mix.ADDITIVE),void 0===i&&(i={}),function(e,n,r,i){var o;return(o={},o[t.Harmony.ANALOGOUS]=ut.buildHarmony(n,Q,r,i),o[t.Harmony.COMPLEMENTARY]=ut.buildHarmony(n,z,r,i),o[t.Harmony.SPLIT_COMPLEMENTARY]=ut.buildHarmony(n,J,r,i),o[t.Harmony.TRIADIC]=ut.buildHarmony(n,W,r,i),o[t.Harmony.TETRADIC]=ut.buildHarmony(n,Z,r,i),o[t.Harmony.SQUARE]=ut.buildHarmony(n,tt,r,i),o)[e]}(n,e,r,Y(i,e))},r}();return t.ColorTranslator=pt,t}({}); diff --git a/docs/scripts/bundle.js b/docs/scripts/bundle.js index 63f76df..ab3bf70 100644 --- a/docs/scripts/bundle.js +++ b/docs/scripts/bundle.js @@ -1 +1 @@ -(()=>{var __webpack_modules__={538:(module,exports)=>{eval('var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!function(){var r=null;\n(function(){function X(e){function j(){try{J.doScroll("left")}catch(e){P(j,50);return}w("poll")}function w(j){if(!(j.type=="readystatechange"&&x.readyState!="complete")&&((j.type=="load"?n:x)[z](i+j.type,w,!1),!m&&(m=!0)))e.call(n,j.type||j)}var Y=x.addEventListener,m=!1,C=!0,t=Y?"addEventListener":"attachEvent",z=Y?"removeEventListener":"detachEvent",i=Y?"":"on";if(x.readyState=="complete")e.call(n,"lazy");else{if(x.createEventObject&&J.doScroll){try{C=!n.frameElement}catch(A){}C&&j()}x[t](i+"DOMContentLoaded",\nw,!1);x[t](i+"readystatechange",w,!1);n[t](i+"load",w,!1)}}function Q(){S&&X(function(){var e=K.length;$(e?function(){for(var j=0;j=0;){var M=A[m],T=M.src.match(/^[^#?]*\\/run_prettify\\.js(\\?[^#]*)?(?:#.*)?$/);if(T){z=T[1]||"";M.parentNode.removeChild(M);break}}var S=!0,D=\n[],N=[],K=[];z.replace(/[&?]([^&=]+)=([^&]+)/g,function(e,j,w){w=decodeURIComponent(w);j=decodeURIComponent(j);j=="autorun"?S=!/^[0fn]/i.test(w):j=="lang"?D.push(w):j=="skin"?N.push(w):j=="callback"&&K.push(w)});m=0;for(z=D.length;m122||(o<65||k>90||f.push([Math.max(65,k)|32,Math.min(o,90)|32]),o<97||k>122||f.push([Math.max(97,k)&-33,Math.min(o,122)&-33]))}}f.sort(function(f,a){return f[0]-\na[0]||a[1]-f[1]});b=[];g=[];for(a=0;ak[0]&&(k[1]+1>k[0]&&c.push("-"),c.push(h(k[1])));c.push("]");return c.join("")}function e(f){for(var a=f.source.match(/\\[(?:[^\\\\\\]]|\\\\[\\S\\s])*]|\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\\\d+|\\\\[^\\dux]|\\(\\?[!:=]|[()^]|[^()[\\\\^]+/g),c=a.length,d=[],g=0,k=0;g=2&&f==="["?a[g]=b(o):f!=="\\\\"&&(a[g]=o.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var j=0,F=!1,l=!1,I=0,c=a.length;I=5&&"lang-"===y.substring(0,5))&&!(u&&typeof u[1]==="string"))g=!1,y="src";g||(m[B]=y)}k=c;c+=B.length;if(g){g=u[1];var o=B.indexOf(g),H=o+g.length;u[2]&&(H=B.length-u[2].length,o=H-g.length);y=y.substring(5);n(l+k,B.substring(0,o),h,j);n(l+k+o,g,A(y,\ng),j);n(l+k+H,B.substring(H),h,j)}else j.push(l+k,y)}a.g=j}var b={},e;(function(){for(var h=a.concat(d),l=[],i={},c=0,p=h.length;c=0;)b[q.charAt(f)]=m;m=m[1];q=""+m;i.hasOwnProperty(q)||(l.push(m),i[q]=r)}l.push(/[\\S\\s]/);e=j(l)})();var i=d.length;return h}function t(a){var d=[],h=[];a.tripleQuotedStrings?d.push(["str",/^(?:\'\'\'(?:[^\'\\\\]|\\\\[\\S\\s]|\'\'?(?=[^\']))*(?:\'\'\'|$)|"""(?:[^"\\\\]|\\\\[\\S\\s]|""?(?=[^"]))*(?:"""|$)|\'(?:[^\'\\\\]|\\\\[\\S\\s])*(?:\'|$)|"(?:[^"\\\\]|\\\\[\\S\\s])*(?:"|$))/,\nr,"\'\\""]):a.multiLineStrings?d.push(["str",/^(?:\'(?:[^\'\\\\]|\\\\[\\S\\s])*(?:\'|$)|"(?:[^"\\\\]|\\\\[\\S\\s])*(?:"|$)|`(?:[^\\\\`]|\\\\[\\S\\s])*(?:`|$))/,r,"\'\\"`"]):d.push(["str",/^(?:\'(?:[^\\n\\r\'\\\\]|\\\\.)*(?:\'|$)|"(?:[^\\n\\r"\\\\]|\\\\.)*(?:"|$))/,r,"\\"\'"]);a.verbatimStrings&&h.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,r]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,r,"#"]):d.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\\b|[^\\n\\r]*)/,\nr,"#"]),h.push(["str",/^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h(?:h|pp|\\+\\+)?|[a-z]\\w*)>/,r])):d.push(["com",/^#[^\\n\\r]*/,r,"#"]));a.cStyleComments&&(h.push(["com",/^\\/\\/[^\\n\\r]*/,r]),h.push(["com",/^\\/\\*[\\S\\s]*?(?:\\*\\/|$)/,r]));if(b=a.regexLiterals){var e=(b=b>1?"":"\\n\\r")?".":"[\\\\S\\\\s]";h.push(["lang-regex",RegExp("^(?:^^\\\\.?|[+-]|[!=]=?=?|\\\\#|%=?|&&?=?|\\\\(|\\\\*=?|[+\\\\-]=|->|\\\\/=?|::?|<>?>?=?|,|;|\\\\?|@|\\\\[|~|{|\\\\^\\\\^?=?|\\\\|\\\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\\\s*("+\n("/(?=[^/*"+b+"])(?:[^/\\\\x5B\\\\x5C"+b+"]|\\\\x5C"+e+"|\\\\x5B(?:[^\\\\x5C\\\\x5D"+b+"]|\\\\x5C"+e+")*(?:\\\\x5D|$))+/")+")")])}(b=a.types)&&h.push(["typ",b]);b=(""+a.keywords).replace(/^ | $/g,"");b.length&&h.push(["kwd",RegExp("^(?:"+b.replace(/[\\s,]+/g,"|")+")\\\\b"),r]);d.push(["pln",/^\\s+/,r," \\r\\n\\t\\u00a0"]);b="^.[^\\\\s\\\\w.$@\'\\"`/\\\\\\\\]*";a.regexLiterals&&(b+="(?!s*/)");h.push(["lit",/^@[$_a-z][\\w$@]*/i,r],["typ",/^(?:[@_]?[A-Z]+[a-z][\\w$@]*|\\w+_t\\b)/,r],["pln",/^[$_a-z][\\w$@]*/i,r],["lit",/^(?:0x[\\da-f]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+-]?\\d+)?)[a-z]*/i,\nr,"0123456789"],["pln",/^\\\\[\\S\\s]?/,r],["pun",RegExp(b),r]);return C(d,h)}function z(a,d,h){function b(a){var c=a.nodeType;if(c==1&&!j.test(a.className))if("br"===a.nodeName)e(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&h){var d=a.nodeValue,i=d.match(m);if(i)c=d.substring(0,i.index),a.nodeValue=c,(d=d.substring(i.index+i[0].length))&&a.parentNode.insertBefore(l.createTextNode(d),a.nextSibling),e(a),c||a.parentNode.removeChild(a)}}\nfunction e(a){function b(a,c){var d=c?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),h=a.nextSibling;f.appendChild(d);for(var e=h;e;e=h)h=e.nextSibling,f.appendChild(e)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var j=/(?:^|\\s)nocode(?:\\s|$)/,m=/\\r\\n?|\\n/,l=a.ownerDocument,i=l.createElement("li");a.firstChild;)i.appendChild(a.firstChild);for(var c=[i],p=0;p=0;){var b=d[h];U.hasOwnProperty(b)?V.console&&console.warn("cannot override language handler %s",b):U[b]=a}}function A(a,d){if(!a||!U.hasOwnProperty(a))a=/^\\s*=o&&(b+=2);h>=H&&(t+=2)}}finally{if(g)g.style.display=k}}catch(v){V.console&&console.log(v&&v.stack||v)}}var V=window,G=["break,continue,do,else,for,if,return,while"],O=[[G,"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],\n"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],J=[O,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],K=[O,"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"],\nL=[K,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],O=[O,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],M=[G,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],\nN=[G,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],R=[G,"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use"],G=[G,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],Q=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\\d*)\\b/,\nS=/\\S/,T=t({keywords:[J,L,O,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",M,N,G],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),U={};i(T,["default-code"]);i(C([],[["pln",/^[^]*(?:>|$)/],["com",/^<\\!--[\\S\\s]*?(?:--\\>|$)/],["lang-",/^<\\?([\\S\\s]+?)(?:\\?>|$)/],["lang-",/^<%([\\S\\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",\n/^]*>([\\S\\s]+?)<\\/xmp\\b[^>]*>/i],["lang-js",/^]*>([\\S\\s]*?)(<\\/script\\b[^>]*>)/i],["lang-css",/^]*>([\\S\\s]*?)(<\\/style\\b[^>]*>)/i],["lang-in.tag",/^(<\\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);i(C([["pln",/^\\s+/,r," \\t\\r\\n"],["atv",/^(?:"[^"]*"?|\'[^\']*\'?)/,r,"\\"\'"]],[["tag",/^^<\\/?[a-z](?:[\\w-.:]*\\w)?|\\/?>$/i],["atn",/^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i],["lang-uq.val",/^=\\s*([^\\s"\'>]*(?:[^\\s"\'/>]|\\/(?=\\s)))/],["pun",/^[/<->]+/],\n["lang-js",/^on\\w+\\s*=\\s*"([^"]+)"/i],["lang-js",/^on\\w+\\s*=\\s*\'([^\']+)\'/i],["lang-js",/^on\\w+\\s*=\\s*([^\\s"\'>]+)/i],["lang-css",/^style\\s*=\\s*"([^"]+)"/i],["lang-css",/^style\\s*=\\s*\'([^\']+)\'/i],["lang-css",/^style\\s*=\\s*([^\\s"\'>]+)/i]]),["in.tag"]);i(C([],[["atv",/^[\\S\\s]+/]]),["uq.val"]);i(t({keywords:J,hashComments:!0,cStyleComments:!0,types:Q}),["c","cc","cpp","cxx","cyc","m"]);i(t({keywords:"null,true,false"}),["json"]);i(t({keywords:L,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:Q}),\n["cs"]);i(t({keywords:K,cStyleComments:!0}),["java"]);i(t({keywords:G,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]);i(t({keywords:M,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py","python"]);i(t({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),["perl","pl","pm"]);i(t({keywords:N,\nhashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]);i(t({keywords:O,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]);i(t({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);i(t({keywords:R,cStyleComments:!0,multilineStrings:!0}),["rc","rs","rust"]);\ni(C([],[["str",/^[\\S\\s]+/]]),["regex"]);var X=V.PR={createSimpleLexer:C,registerLangHandler:i,sourceDecorator:t,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:function(a,d,e){var b=document.createElement("div");b.innerHTML="
"+a+"
";b=b.firstChild;e&&z(b,e,!0);D({h:d,j:e,c:b,i:1});return b.innerHTML},\nprettyPrint:e=e=function(a,d){function e(){for(var b=V.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;p{"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: ./node_modules/google-code-prettify/bin/run_prettify.min.js\nvar run_prettify_min = __webpack_require__(538);\n;// CONCATENATED MODULE: ./node_modules/whatwg-fetch/fetch.js\nvar global =\n (typeof globalThis !== \'undefined\' && globalThis) ||\n (typeof self !== \'undefined\' && self) ||\n (typeof global !== \'undefined\' && global)\n\nvar support = {\n searchParams: \'URLSearchParams\' in global,\n iterable: \'Symbol\' in global && \'iterator\' in Symbol,\n blob:\n \'FileReader\' in global &&\n \'Blob\' in global &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: \'FormData\' in global,\n arrayBuffer: \'ArrayBuffer\' in global\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n \'[object Int8Array]\',\n \'[object Uint8Array]\',\n \'[object Uint8ClampedArray]\',\n \'[object Int16Array]\',\n \'[object Uint16Array]\',\n \'[object Int32Array]\',\n \'[object Uint32Array]\',\n \'[object Float32Array]\',\n \'[object Float64Array]\'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== \'string\') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&\'*+.^_`|~!]/i.test(name) || name === \'\') {\n throw new TypeError(\'Invalid character in header field name: "\' + name + \'"\')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== \'string\') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nfunction Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + \', \' + value : value\n}\n\nHeaders.prototype[\'delete\'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError(\'Already read\'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join(\'\')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n this.bodyUsed = this.bodyUsed\n this._bodyInit = body\n if (!body) {\n this._bodyText = \'\'\n } else if (typeof body === \'string\') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can\'t handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get(\'content-type\')) {\n if (typeof body === \'string\') {\n this.headers.set(\'content-type\', \'text/plain;charset=UTF-8\')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set(\'content-type\', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set(\'content-type\', \'application/x-www-form-urlencoded;charset=UTF-8\')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error(\'could not read FormData body as blob\')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this)\n if (isConsumed) {\n return isConsumed\n }\n if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error(\'could not read FormData body as text\')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = [\'DELETE\', \'GET\', \'HEAD\', \'OPTIONS\', \'POST\', \'PUT\']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nfunction Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError(\'Please use the "new" operator, this DOM object constructor cannot be called as a function.\')\n }\n\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError(\'Already read\')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || \'same-origin\'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || \'GET\')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal\n this.referrer = null\n\n if ((this.method === \'GET\' || this.method === \'HEAD\') && body) {\n throw new TypeError(\'Body not allowed for GET or HEAD requests\')\n }\n this._initBody(body)\n\n if (this.method === \'GET\' || this.method === \'HEAD\') {\n if (options.cache === \'no-store\' || options.cache === \'no-cache\') {\n // Search for a \'_\' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, \'$1_=\' + new Date().getTime())\n } else {\n // Otherwise add a new \'_\' parameter to the end with the current time\n var reQueryString = /\\?/\n this.url += (reQueryString.test(this.url) ? \'&\' : \'?\') + \'_=\' + new Date().getTime()\n }\n }\n }\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split(\'&\')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split(\'=\')\n var name = split.shift().replace(/\\+/g, \' \')\n var value = split.join(\'=\').replace(/\\+/g, \' \')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, \' \')\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split(\'\\r\')\n .map(function(header) {\n return header.indexOf(\'\\n\') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(\':\')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(\':\').trim()\n headers.append(key, value)\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nfunction Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError(\'Please use the "new" operator, this DOM object constructor cannot be called as a function.\')\n }\n if (!options) {\n options = {}\n }\n\n this.type = \'default\'\n this.status = options.status === undefined ? 200 : options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText === undefined ? \'\' : \'\' + options.statusText\n this.headers = new Headers(options.headers)\n this.url = options.url || \'\'\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 0, statusText: \'\'})\n response.type = \'error\'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError(\'Invalid status code\')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nvar DOMException = global.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nfunction fetch_fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException(\'Aborted\', \'AbortError\'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || \'\')\n }\n options.url = \'responseURL\' in xhr ? xhr.responseURL : options.headers.get(\'X-Request-URL\')\n var body = \'response\' in xhr ? xhr.response : xhr.responseText\n setTimeout(function() {\n resolve(new Response(body, options))\n }, 0)\n }\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError(\'Network request failed\'))\n }, 0)\n }\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError(\'Network request failed\'))\n }, 0)\n }\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new DOMException(\'Aborted\', \'AbortError\'))\n }, 0)\n }\n\n function fixUrl(url) {\n try {\n return url === \'\' && global.location.href ? global.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true)\n\n if (request.credentials === \'include\') {\n xhr.withCredentials = true\n } else if (request.credentials === \'omit\') {\n xhr.withCredentials = false\n }\n\n if (\'responseType\' in xhr) {\n if (support.blob) {\n xhr.responseType = \'blob\'\n } else if (\n support.arrayBuffer &&\n request.headers.get(\'Content-Type\') &&\n request.headers.get(\'Content-Type\').indexOf(\'application/octet-stream\') !== -1\n ) {\n xhr.responseType = \'arraybuffer\'\n }\n }\n\n if (init && typeof init.headers === \'object\' && !(init.headers instanceof Headers)) {\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n })\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n }\n\n if (request.signal) {\n request.signal.addEventListener(\'abort\', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener(\'abort\', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === \'undefined\' ? null : request._bodyInit)\n })\n}\n\nfetch_fetch.polyfill = true\n\nif (!global.fetch) {\n global.fetch = fetch_fetch\n global.Headers = Headers\n global.Request = Request\n global.Response = Response\n}\n\n;// CONCATENATED MODULE: ./src/constants/numbers.ts\nvar MAX_DECIMALS = 6;\nvar DEFAULT_BLEND_STEPS = 5;\n\n;// CONCATENATED MODULE: ./src/constants/enums.ts\nvar ColorModel;\n(function (ColorModel) {\n ColorModel["HEX"] = "HEX";\n ColorModel["RGB"] = "RGB";\n ColorModel["HSL"] = "HSL";\n ColorModel["CMYK"] = "CMYK";\n})(ColorModel || (ColorModel = {}));\nvar Harmony;\n(function (Harmony) {\n Harmony["ANALOGOUS"] = "ANALOGOUS";\n Harmony["COMPLEMENTARY"] = "COMPLEMENTARY";\n Harmony["SPLIT_COMPLEMENTARY"] = "SPLIT_COMPLEMENTARY";\n Harmony["TRIADIC"] = "TRIADIC";\n Harmony["TETRADIC"] = "TETRADIC";\n Harmony["SQUARE"] = "SQUARE";\n})(Harmony || (Harmony = {}));\nvar Mix;\n(function (Mix) {\n Mix["ADDITIVE"] = "ADDITIVE";\n Mix["SUBTRACTIVE"] = "SUBTRACTIVE";\n})(Mix || (Mix = {}));\nvar ColorKeywords;\n(function (ColorKeywords) {\n ColorKeywords["black"] = "#000000";\n ColorKeywords["silver"] = "#C0C0C0";\n ColorKeywords["gray"] = "#808080";\n ColorKeywords["white"] = "#FFFFFF";\n ColorKeywords["maroon"] = "#800000";\n ColorKeywords["red"] = "#FF0000";\n ColorKeywords["purple"] = "#800080";\n ColorKeywords["fuchsia"] = "#FF00FF";\n ColorKeywords["green"] = "#008000";\n ColorKeywords["lime"] = "#00FF00";\n ColorKeywords["olive"] = "#808000";\n ColorKeywords["yellow"] = "#FFFF00";\n ColorKeywords["navy"] = "#000080";\n ColorKeywords["blue"] = "#0000FF";\n ColorKeywords["teal"] = "#008080";\n ColorKeywords["aqua"] = "#00FFFF";\n ColorKeywords["orange"] = "#FFA500";\n ColorKeywords["aliceblue"] = "#F0F8FF";\n ColorKeywords["antiquewhite"] = "#FAEBD7";\n ColorKeywords["aquamarine"] = "#7FFFD4";\n ColorKeywords["azure"] = "#F0FFFF";\n ColorKeywords["beige"] = "#F5F5DC";\n ColorKeywords["bisque"] = "#FFE4C4";\n ColorKeywords["blanchedalmond"] = "#FFEBCD";\n ColorKeywords["blueviolet"] = "#8A2BE2";\n ColorKeywords["brown"] = "#A52A2A";\n ColorKeywords["burlywood"] = "#DEB887";\n ColorKeywords["cadetblue"] = "#5F9EA0";\n ColorKeywords["chartreuse"] = "#7FFF00";\n ColorKeywords["chocolate"] = "#D2691E";\n ColorKeywords["coral"] = "#FF7F50";\n ColorKeywords["cornflowerblue"] = "#6495ED";\n ColorKeywords["cornsilk"] = "#FFF8DC";\n ColorKeywords["crimson"] = "#DC143C";\n ColorKeywords["cyan"] = "#00FFFF";\n ColorKeywords["darkblue"] = "#00008B";\n ColorKeywords["darkcyan"] = "#008B8B";\n ColorKeywords["darkgoldenrod"] = "#B8860B";\n ColorKeywords["darkgray"] = "#A9A9A9";\n ColorKeywords["darkgreen"] = "#006400";\n ColorKeywords["darkgrey"] = "#A9A9A9";\n ColorKeywords["darkkhaki"] = "#BDB76B";\n ColorKeywords["darkmagenta"] = "#8B008B";\n ColorKeywords["darkolivegreen"] = "#556B2F";\n ColorKeywords["darkorange"] = "#FF8C00";\n ColorKeywords["darkorchid"] = "#9932CC";\n ColorKeywords["darkred"] = "#8B0000";\n ColorKeywords["darksalmon"] = "#E9967A";\n ColorKeywords["darkseagreen"] = "#8FBC8F";\n ColorKeywords["darkslateblue"] = "#483D8B";\n ColorKeywords["darkslategray"] = "#2F4F4F";\n ColorKeywords["darkslategrey"] = "#2F4F4F";\n ColorKeywords["darkturquoise"] = "#00CED1";\n ColorKeywords["darkviolet"] = "#9400D3";\n ColorKeywords["deeppink"] = "#FF1493";\n ColorKeywords["deepskyblue"] = "#00BFFF";\n ColorKeywords["dimgray"] = "#696969";\n ColorKeywords["dimgrey"] = "#696969";\n ColorKeywords["dodgerblue"] = "#1E90FF";\n ColorKeywords["firebrick"] = "#B22222";\n ColorKeywords["floralwhite"] = "#FFFAF0";\n ColorKeywords["forestgreen"] = "#228B22";\n ColorKeywords["gainsboro"] = "#DCDCDC";\n ColorKeywords["ghostwhite"] = "#F8F8FF";\n ColorKeywords["gold"] = "#FFD700";\n ColorKeywords["goldenrod"] = "#DAA520";\n ColorKeywords["greenyellow"] = "#ADFF2F";\n ColorKeywords["grey"] = "#808080";\n ColorKeywords["honeydew"] = "#F0FFF0";\n ColorKeywords["hotpink"] = "#FF69B4";\n ColorKeywords["indianred"] = "#CD5C5C";\n ColorKeywords["indigo"] = "#4B0082";\n ColorKeywords["ivory"] = "#FFFFF0";\n ColorKeywords["khaki"] = "#F0E68C";\n ColorKeywords["lavender"] = "#E6E6FA";\n ColorKeywords["lavenderblush"] = "#FFF0F5";\n ColorKeywords["lawngreen"] = "#7CFC00";\n ColorKeywords["lemonchiffon"] = "#FFFACD";\n ColorKeywords["lightblue"] = "#ADD8E6";\n ColorKeywords["lightcoral"] = "#F08080";\n ColorKeywords["lightcyan"] = "#E0FFFF";\n ColorKeywords["lightgoldenrodyellow"] = "#FAFAD2";\n ColorKeywords["lightgray"] = "#D3D3D3";\n ColorKeywords["lightgreen"] = "#90EE90";\n ColorKeywords["lightgrey"] = "#D3D3D3";\n ColorKeywords["lightpink"] = "#FFB6C1";\n ColorKeywords["lightsalmon"] = "#FFA07A";\n ColorKeywords["lightseagreen"] = "#20B2AA";\n ColorKeywords["lightskyblue"] = "#87CEFA";\n ColorKeywords["lightslategray"] = "#778899";\n ColorKeywords["lightslategrey"] = "#778899";\n ColorKeywords["lightsteelblue"] = "#B0C4DE";\n ColorKeywords["lightyellow"] = "#FFFFE0";\n ColorKeywords["limegreen"] = "#32CD32";\n ColorKeywords["linen"] = "#FAF0E6";\n ColorKeywords["magenta"] = "#FF00FF";\n ColorKeywords["mediumaquamarine"] = "#66CDAA";\n ColorKeywords["mediumblue"] = "#0000CD";\n ColorKeywords["mediumorchid"] = "#BA55D3";\n ColorKeywords["mediumpurple"] = "#9370DB";\n ColorKeywords["mediumseagreen"] = "#3CB371";\n ColorKeywords["mediumslateblue"] = "#7B68EE";\n ColorKeywords["mediumspringgreen"] = "#00FA9A";\n ColorKeywords["mediumturquoise"] = "#48D1CC";\n ColorKeywords["mediumvioletred"] = "#C71585";\n ColorKeywords["midnightblue"] = "#191970";\n ColorKeywords["mintcream"] = "#F5FFFA";\n ColorKeywords["mistyrose"] = "#FFE4E1";\n ColorKeywords["moccasin"] = "#FFE4B5";\n ColorKeywords["navajowhite"] = "#FFDEAD";\n ColorKeywords["oldlace"] = "#FDF5E6";\n ColorKeywords["olivedrab"] = "#6B8E23";\n ColorKeywords["orangered"] = "#FF4500";\n ColorKeywords["orchid"] = "#DA70D6";\n ColorKeywords["palegoldenrod"] = "#EEE8AA";\n ColorKeywords["palegreen"] = "#98FB98";\n ColorKeywords["paleturquoise"] = "#AFEEEE";\n ColorKeywords["palevioletred"] = "#DB7093";\n ColorKeywords["papayawhip"] = "#FFEFD5";\n ColorKeywords["peachpuff"] = "#FFDAB9";\n ColorKeywords["peru"] = "#CD853F";\n ColorKeywords["pink"] = "#FFC0CB";\n ColorKeywords["plum"] = "#DDA0DD";\n ColorKeywords["powderblue"] = "#B0E0E6";\n ColorKeywords["rosybrown"] = "#BC8F8F";\n ColorKeywords["royalblue"] = "#4169E1";\n ColorKeywords["saddlebrown"] = "#8B4513";\n ColorKeywords["salmon"] = "#FA8072";\n ColorKeywords["sandybrown"] = "#F4A460";\n ColorKeywords["seagreen"] = "#2E8B57";\n ColorKeywords["seashell"] = "#FFF5EE";\n ColorKeywords["sienna"] = "#A0522D";\n ColorKeywords["skyblue"] = "#87CEEB";\n ColorKeywords["slateblue"] = "#6A5ACD";\n ColorKeywords["slategray"] = "#708090";\n ColorKeywords["slategrey"] = "#708090";\n ColorKeywords["snow"] = "#FFFAFA";\n ColorKeywords["springgreen"] = "#00FF7F";\n ColorKeywords["steelblue"] = "#4682B4";\n ColorKeywords["tan"] = "#D2B48C";\n ColorKeywords["thistle"] = "#D8BFD8";\n ColorKeywords["tomato"] = "#FF6347";\n ColorKeywords["turquoise"] = "#40E0D0";\n ColorKeywords["violet"] = "#EE82EE";\n ColorKeywords["wheat"] = "#F5DEB3";\n ColorKeywords["whitesmoke"] = "#F5F5F5";\n ColorKeywords["yellowgreen"] = "#9ACD32";\n ColorKeywords["rebeccapurple"] = "#663399";\n})(ColorKeywords || (ColorKeywords = {}));\nvar COLOR_KEYS = Object.keys(ColorKeywords);\nvar COLOR_PROPS = {\n HEX: [\'r\', \'g\', \'b\', \'a\'],\n RGB: [\'r\', \'g\', \'b\', \'a\'],\n HSL: [\'h\', \'s\', \'l\', \'a\'],\n CMYK: [\'c\', \'m\', \'y\', \'k\', \'a\']\n};\nvar VALID_COLOR_OBJECTS = {\n BGR: ColorModel.RGB,\n ABGR: ColorModel.RGB,\n HLS: ColorModel.HSL,\n AHLS: ColorModel.HSL,\n CKMY: ColorModel.CMYK,\n ACKMY: ColorModel.CMYK\n};\n\n;// CONCATENATED MODULE: ./src/constants/regexps.ts\nvar _a;\n\nvar COLORREGS = (_a = {},\n _a[ColorModel.HEX] = /^#(?:([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])?|([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?)$/i,\n _a[ColorModel.RGB] = /^rgba?\\s*\\(\\s*(?:((?:\\d*\\.)?\\d+%?)\\s*,\\s*((?:\\d*\\.)?\\d+%?)\\s*,\\s*((?:\\d*\\.)?\\d+%?)(?:\\s*,\\s*((?:\\d*\\.)?\\d+))?|((?:\\d*\\.)?\\d+%?)\\s*((?:\\d*\\.)?\\d+%?)\\s*((?:\\d*\\.)?\\d+%?)(?:\\s*\\/\\s*((?:\\d*\\.)?\\d+%?))?)\\s*\\)$/,\n _a[ColorModel.HSL] = /^hsla?\\s*\\(\\s*(?:(-?(?:\\d*\\.)?\\d+(?:deg|grad|rad|turn)?)\\s*,\\s*((?:\\d*\\.)?\\d+)%\\s*,\\s*((?:\\d*\\.)?\\d+)%(?:\\s*,\\s*((?:\\d*\\.)?\\d+))?|(-?(?:\\d*\\.)?\\d+(?:deg|grad|rad|turn)?)\\s*((?:\\d*\\.)?\\d+)%\\s*((?:\\d*\\.)?\\d+)%(?:\\s*\\/\\s*((?:\\d*\\.)?\\d+%?))?)\\s*\\)$/,\n _a[ColorModel.CMYK] = /^(?:device-cmyk|cmyk)\\s*\\(\\s*(?:((?:\\d*\\.)?\\d+%?)\\s*,\\s*((?:\\d*\\.)?\\d+%?)\\s*,\\s*((?:\\d*\\.)?\\d+%?)\\s*,\\s*((?:\\d*\\.)?\\d+%?)(?:\\s*,\\s*((?:\\d*\\.)?\\d+))?|((?:\\d*\\.)?\\d+%?)\\s*((?:\\d*\\.)?\\d+%?)\\s*((?:\\d*\\.)?\\d+%?)\\s*((?:\\d*\\.)?\\d+%?)(?:\\s*\\/\\s*((?:\\d*\\.)?\\d+%?))?)\\s*\\)$/,\n _a);\nvar HSL_HUE = /^(-?(?:\\d*\\.)?\\d+)((?:deg|grad|rad|turn)?)$/;\nvar PCENT = /^(\\d+(?:\\.\\d+)?|\\.\\d+)%$/;\nvar HEX = /^0x([a-f\\d]{1,2})$/i;\nvar TEMPLATE_VAR = /\\{(\\d+)\\}/g;\n\n;// CONCATENATED MODULE: ./src/constants/errors.ts\nvar ERRORS = {\n NOT_ACCEPTED_STRING_INPUT: \'The provided string color doesn\\\'t have a correct format\',\n NOT_ACCEPTED_OBJECT_INPUT: \'The provided color object doesn\\\'t have the proper keys or format\'\n};\n\n;// CONCATENATED MODULE: ./src/constants/options.ts\n\nvar DEFAULT_OPTIONS = {\n decimals: MAX_DECIMALS\n};\n\n;// CONCATENATED MODULE: ./src/constants/index.ts\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./src/helpers/index.ts\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar hasProp = function (obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); };\nvar percentNumber = function (percent) {\n return +"".concat(percent).replace(PCENT, \'$1\');\n};\nvar percent = function (percent) { return PCENT.test("".concat(percent))\n ? percentNumber(percent)\n : Math.min(+percent, 100); };\nvar getDEC = function (hex) {\n if (hex.length === 1) {\n hex += hex;\n }\n return parseInt(hex, 16);\n};\nvar getHEX = function (number) {\n var hex = round(number, 0).toString(16).toUpperCase();\n if (hex.length === 1) {\n return "0x0".concat(hex);\n }\n return "0x".concat(hex);\n};\nvar toHEX = function (h) {\n var hex = round(h, 0).toString(16).toUpperCase();\n if (hex.length === 1) {\n hex = "0".concat(hex);\n }\n return hex;\n};\nvar getBase255Number = function (color, alpha) {\n if (alpha === void 0) { alpha = false; }\n if (!alpha && PCENT.test(color)) {\n return Math.min(255 * percentNumber(color) / 100, 255);\n }\n if (HEX.test(color)) {\n if (color.length === 3) {\n color += color.slice(-1);\n }\n return alpha\n ? round(color) / 255\n : round(color);\n }\n return Math.min(+color, alpha ? 1 : 255);\n};\nvar getCMYKNumber = function (color) { return Math.min(PCENT.test(color) ? percentNumber(color) / 100 : +color, 1); };\nvar getOrderedArrayString = function (keys) { return __spreadArray([], keys, true).sort().join(\'\').toUpperCase(); };\nvar round = function (value, decimals) {\n if (decimals === void 0) { decimals = MAX_DECIMALS; }\n var exp = Math.pow(10, decimals);\n return Math.round(+value * exp) / exp;\n};\nvar minmax = function (n, min, max) { return Math.max(min, Math.min(n, max)); };\nvar grades = function (radian) { return radian * 180 / Math.PI; };\nvar parseOptions = function (options) { return (__assign(__assign({}, DEFAULT_OPTIONS), options)); };\n\n;// CONCATENATED MODULE: ./src/color/translators.ts\n\nvar hueToRGB = function (t1, t2, hue) {\n if (hue < 0) {\n hue += 6;\n }\n if (hue >= 6) {\n hue -= 6;\n }\n if (hue < 1) {\n return round(((t2 - t1) * hue + t1) * 255);\n }\n else if (hue < 3) {\n return round(t2 * 255);\n }\n else if (hue < 4) {\n return round(((t2 - t1) * (4 - hue) + t1) * 255);\n }\n else {\n return round(t1 * 255);\n }\n};\nvar hslToRGB = function (h, s, l) {\n h /= 60;\n s /= 100;\n l /= 100;\n var t2 = (l <= .5)\n ? l * (s + 1)\n : l + s - (l * s);\n var t1 = l * 2 - t2;\n var r = hueToRGB(t1, t2, h + 2);\n var g = hueToRGB(t1, t2, h);\n var b = hueToRGB(t1, t2, h - 2);\n return { r: r, g: g, b: b };\n};\nvar cmykToRGB = function (c, m, y, k) {\n k = 1 - k;\n var r = round(255 * (1 - c) * k);\n var g = round(255 * (1 - m) * k);\n var b = round(255 * (1 - y) * k);\n return { r: r, g: g, b: b };\n};\nvar rgbToCMYK = function (r, g, b) {\n r /= 255;\n g /= 255;\n b /= 255;\n var k = 1 - Math.max(r, g, b);\n var k1 = 1 - k;\n var c = k1 && (k1 - r) / k1;\n var m = k1 && (k1 - g) / k1;\n var y = k1 && (k1 - b) / k1;\n return {\n c: round(c * 100),\n m: round(m * 100),\n y: round(y * 100),\n k: round(k * 100)\n };\n};\nvar rgbToHSL = function (r, g, b, a) {\n if (a === void 0) { a = 1; }\n r /= 255;\n g /= 255;\n b /= 255;\n a = Math.min(a, 1);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h = 0;\n var s = 0;\n var l = (max + min) / 2;\n if (d !== 0) {\n switch (max) {\n case r:\n h = ((g - b) / d) % 6;\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h = round(h * 60);\n if (h < 0) {\n h += 360;\n }\n s = d / (1 - Math.abs(2 * l - 1));\n }\n return {\n h: h,\n s: round(s * 100),\n l: round(l * 100),\n a: a\n };\n};\nvar rgbToRYB = function (r, g, b) {\n var Iw = Math.min(r, g, b);\n var Ib = Math.min(255 - r, 255 - g, 255 - b);\n var rRGB = r - Iw;\n var gRGB = g - Iw;\n var bRGB = b - Iw;\n var minRG = Math.min(rRGB, gRGB);\n var rRYB = rRGB - minRG;\n var yRYB = (gRGB + minRG) / 2;\n var bRYB = (bRGB + gRGB - minRG) / 2;\n var n = Math.max(rRYB, yRYB, bRYB) / Math.max(rRGB, gRGB, bRGB);\n var N = isNaN(n) || n === Infinity || n <= 0 ? 1 : n;\n return {\n r: rRYB / N + Ib,\n y: yRYB / N + Ib,\n b: bRYB / N + Ib\n };\n};\nvar rybToRGB = function (r, y, b) {\n var Iw = Math.min(r, y, b);\n var Ib = Math.min(255 - r, 255 - y, 255 - b);\n var rRYB = r - Iw;\n var yRYB = y - Iw;\n var bRYB = b - Iw;\n var minYB = Math.min(yRYB, bRYB);\n var rRGB = rRYB + yRYB - minYB;\n var gRGB = yRYB + minYB;\n var bRGB = 2 * (bRYB - minYB);\n var n = Math.max(rRGB, gRGB, bRGB) / Math.max(rRYB, yRYB, bRYB);\n var N = isNaN(n) || n === Infinity || n <= 0 ? 1 : n;\n return {\n r: rRGB / N + Ib,\n g: gRGB / N + Ib,\n b: bRGB / N + Ib\n };\n};\nvar hueRYB = function (hue, toRYB) {\n if (hue < 0)\n hue += 360;\n if (hue > 360)\n hue -= 360;\n if (hue === 360 || hue === 0)\n return hue;\n var map1 = [\n [0, 120],\n [120, 180],\n [180, 240],\n [240, 360]\n ];\n var map2 = [\n [0, 60],\n [60, 120],\n [120, 240],\n [240, 360]\n ];\n var from = toRYB ? map1 : map2;\n var to = toRYB ? map2 : map1;\n var a = 0;\n var b = 0;\n var c = 0;\n var d = 0;\n from.find(function (arr, index) {\n if (hue >= arr[0] && hue < arr[1]) {\n a = arr[0];\n b = arr[1];\n c = to[index][0];\n d = to[index][1];\n return true;\n }\n return false;\n });\n return c + (hue - a) * ((d - c) / (b - a));\n};\n\n;// CONCATENATED MODULE: ./src/color/css.ts\nvar css_a;\n\n\nvar prepareColorForCss = function (color, isHex) {\n if (isHex === void 0) { isHex = false; }\n var props = getOrderedArrayString(Object.keys(color));\n var model = VALID_COLOR_OBJECTS[props];\n var keys = COLOR_PROPS[model];\n return keys.reduce(function (result, key) {\n var value = color[key];\n if (typeof value !== \'undefined\') {\n if (isHex) {\n result.push(toHEX(round(value, 0)));\n }\n else {\n result.push(value);\n }\n }\n return result;\n }, []);\n};\nvar getResultFromTemplate = function (template, vars) {\n return template.replace(TEMPLATE_VAR, function (__match, indexStr) {\n var index = +indexStr - 1;\n return "".concat(vars[index]);\n });\n};\nvar CSS = (css_a = {},\n css_a[ColorModel.HEX] = function (color) {\n var values = prepareColorForCss(color, true);\n var template = values.length === 4\n ? \'#{1}{2}{3}{4}\'\n : \'#{1}{2}{3}\';\n return getResultFromTemplate(template, values);\n },\n css_a[ColorModel.RGB] = function (color) {\n var values = prepareColorForCss(color);\n var template = values.length === 4\n ? \'rgba({1},{2},{3},{4})\'\n : \'rgb({1},{2},{3})\';\n return getResultFromTemplate(template, values);\n },\n css_a[ColorModel.HSL] = function (color) {\n var values = prepareColorForCss(color);\n var template = values.length === 4\n ? \'hsla({1},{2}%,{3}%,{4})\'\n : \'hsl({1},{2}%,{3}%)\';\n return getResultFromTemplate(template, values);\n },\n css_a[ColorModel.CMYK] = function (color) {\n var values = prepareColorForCss(color);\n var template = values.length === 5\n ? \'cmyk({1}%,{2}%,{3}%,{4}%,{5})\'\n : \'cmyk({1}%,{2}%,{3}%,{4}%)\';\n return getResultFromTemplate(template, values);\n },\n css_a);\n\n;// CONCATENATED MODULE: ./src/color/utils.ts\nvar utils_assign = (undefined && undefined.__assign) || function () {\n utils_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return utils_assign.apply(this, arguments);\n};\nvar utils_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar utils_a, _b, _c, _d, _e;\n\n\n\n\nvar pi2 = 360;\nvar normalizeHue = function (hue) {\n if (typeof hue === \'string\') {\n var matches = hue.match(HSL_HUE);\n var value = +matches[1];\n var units = matches[2];\n switch (units) {\n case \'rad\':\n hue = round(grades(value));\n break;\n case \'turn\':\n hue = round(value * 360);\n break;\n case \'deg\':\n case \'grad\':\n default:\n hue = value;\n }\n }\n if (hue > 360 || hue < 0) {\n hue -= Math.floor(hue / pi2) * pi2;\n }\n return hue;\n};\nvar normalizeAlpha = function (alpha) {\n if (typeof alpha === \'string\') {\n if (PCENT.test(alpha)) {\n alpha = percentNumber(alpha) / 100;\n }\n else {\n alpha = +alpha;\n }\n }\n return (isNaN(+alpha) || alpha > 1) ? 1 : round(alpha);\n};\nvar harmony = function (color, angles, mode) {\n return angles.reduce(function (arr, num) {\n return (utils_spreadArray(utils_spreadArray([], arr, true), [\n utils_assign(utils_assign({}, color), { h: mode === Mix.ADDITIVE\n ? normalizeHue(color.h + num)\n : normalizeHue(hueRYB(hueRYB(color.h, false) + num, true)) })\n ], false));\n }, [utils_assign({}, color)]);\n};\nvar analogous = function (color, mode) { return harmony(color, [30, -30], mode); };\nvar complementary = function (color, mode) { return harmony(color, [180], mode); };\nvar splitComplementary = function (color, mode) { return harmony(color, [150, -150], mode); };\nvar triadic = function (color, mode) { return harmony(color, [120, -120], mode); };\nvar tetradic = function (color, mode) { return harmony(color, [60, -120, 180], mode); };\nvar square = function (color, mode) { return harmony(color, [90, -90, 180], mode); };\nvar getColorModelFromString = function (color) {\n var model;\n Object.keys(ColorModel).some(function (p) {\n var reg = COLORREGS[p];\n if (reg.test(color)) {\n model = p;\n return true;\n }\n });\n if (!model &&\n !!~COLOR_KEYS.indexOf(color)) {\n model = ColorModel.HEX;\n }\n if (!model) {\n throw new Error(ERRORS.NOT_ACCEPTED_STRING_INPUT);\n }\n return model;\n};\nvar getColorModelFromObject = function (color) {\n var model;\n var invalid = false;\n var props = getOrderedArrayString(Object.keys(color));\n if (VALID_COLOR_OBJECTS[props]) {\n model = VALID_COLOR_OBJECTS[props];\n }\n if (model && model === ColorModel.RGB) {\n var hasInvalidHex = Object.entries(color).some(function (item) {\n return !HEX.test("".concat(item[1]));\n });\n var hasInvalidRegb = Object.entries(color).some(function (item) {\n return !(PCENT.test("".concat(item[1])) ||\n (!HEX.test("".concat(item[1])) &&\n !isNaN(+item[1]) &&\n +item[1] <= 255));\n });\n if (hasInvalidHex && hasInvalidRegb) {\n invalid = true;\n }\n if (!hasInvalidHex) {\n model = ColorModel.HEX;\n }\n }\n if (!model || invalid) {\n throw new Error(ERRORS.NOT_ACCEPTED_OBJECT_INPUT);\n }\n return model;\n};\nvar getColorModel = function (color) { return typeof color === \'string\'\n ? getColorModelFromString(color)\n : getColorModelFromObject(color); };\nvar getRGBObjectFromString = (utils_a = {},\n utils_a[ColorModel.HEX] = function (color) {\n var colorStr = !~COLOR_KEYS.indexOf(color)\n ? color\n : ColorKeywords[color];\n var match = colorStr.match(COLORREGS.HEX);\n var object = {\n r: getDEC(match[1] || match[5]),\n g: getDEC(match[2] || match[6]),\n b: getDEC(match[3] || match[7])\n };\n var a = match[4] || match[8];\n if (a !== undefined) {\n object.a = getDEC(a) / 255;\n }\n return object;\n },\n utils_a[ColorModel.RGB] = function (color) {\n var match = color.match(COLORREGS.RGB);\n var r = getBase255Number(match[1] || match[5]);\n var g = getBase255Number(match[2] || match[6]);\n var b = getBase255Number(match[3] || match[7]);\n var a = match[4] || match[8];\n var object = {\n r: Math.min(r, 255),\n g: Math.min(g, 255),\n b: Math.min(b, 255)\n };\n if (a !== undefined) {\n object.a = normalizeAlpha(a);\n }\n return object;\n },\n utils_a[ColorModel.HSL] = function (color) {\n var match = color.match(COLORREGS.HSL);\n var h = normalizeHue(match[1] || match[5]);\n var s = percent(match[2] || match[6]);\n var l = percent(match[3] || match[7]);\n var a = match[4] || match[8];\n var rgb = hslToRGB(h, s, l);\n if (a !== undefined) {\n rgb.a = normalizeAlpha(a);\n }\n return rgb;\n },\n utils_a[ColorModel.CMYK] = function (color) {\n var match = color.match(COLORREGS.CMYK);\n var c = getCMYKNumber(match[1] || match[6]);\n var m = getCMYKNumber(match[2] || match[7]);\n var y = getCMYKNumber(match[3] || match[8]);\n var k = getCMYKNumber(match[4] || match[9]);\n var a = match[5] || match[10];\n var rgb = cmykToRGB(c, m, y, k);\n if (a !== undefined) {\n rgb.a = normalizeAlpha(a);\n }\n return rgb;\n },\n utils_a);\nvar getRGBObjectFromObject = (_b = {},\n _b[ColorModel.HEX] = function (color) {\n var object = {\n r: getBase255Number("".concat(color.r)),\n g: getBase255Number("".concat(color.g)),\n b: getBase255Number("".concat(color.b))\n };\n if (hasProp(color, \'a\')) {\n object.a = Math.min(getBase255Number("".concat(color.a), true), 1);\n }\n return object;\n },\n _b[ColorModel.RGB] = function (color) {\n return this.HEX(color);\n },\n _b[ColorModel.HSL] = function (color) {\n var s = percent("".concat(color.s));\n var l = percent("".concat(color.l));\n var rgb = hslToRGB(normalizeHue(color.h), s, l);\n if (hasProp(color, \'a\')) {\n rgb.a = normalizeAlpha(color.a);\n }\n return rgb;\n },\n _b[ColorModel.CMYK] = function (color) {\n var c = getCMYKNumber("".concat(color.c));\n var m = getCMYKNumber("".concat(color.m));\n var y = getCMYKNumber("".concat(color.y));\n var k = getCMYKNumber("".concat(color.k));\n var rgb = cmykToRGB(c, m, y, k);\n if (hasProp(color, \'a\')) {\n rgb.a = normalizeAlpha(color.a);\n }\n return rgb;\n },\n _b);\nvar getRGBObject = function (color, model) {\n if (model === void 0) { model = getColorModel(color); }\n return typeof color === \'string\'\n ? getRGBObjectFromString[model](color)\n : getRGBObjectFromObject[model](color);\n};\nvar translateColor = (_c = {},\n _c[ColorModel.HEX] = function (color) {\n return {\n r: getHEX(color.r),\n g: getHEX(color.g),\n b: getHEX(color.b)\n };\n },\n _c.HEXA = function (color) {\n var rgb = translateColor.HEX(color);\n rgb.a = hasProp(color, \'a\')\n ? getHEX(color.a * 255)\n : \'0xFF\';\n return rgb;\n },\n _c[ColorModel.RGB] = function (color, decimals) {\n if (hasProp(color, \'a\')) {\n delete color.a;\n }\n return roundRGBObject(color, decimals);\n },\n _c.RGBA = function (color, decimals) {\n color.a = hasProp(color, \'a\')\n ? round(color.a)\n : 1;\n return roundRGBObject(color, decimals);\n },\n _c[ColorModel.HSL] = function (color, decimals) {\n var hsl = rgbToHSL(color.r, color.g, color.b);\n delete hsl.a;\n return roundHSLObject(hsl, decimals);\n },\n _c.HSLA = function (color, decimals) {\n var hsl = translateColor.HSL(color, decimals);\n hsl.a = hasProp(color, \'a\')\n ? round(color.a, decimals)\n : 1;\n return hsl;\n },\n _c[ColorModel.CMYK] = function (color, decimals) {\n return roundCMYKObject(rgbToCMYK(color.r, color.g, color.b), decimals);\n },\n _c.CMYKA = function (color, decimals) {\n var cmyk = translateColor.CMYK(color, decimals);\n cmyk.a = hasProp(color, \'a\')\n ? round(color.a, decimals)\n : 1;\n return cmyk;\n },\n _c);\nvar blend = function (from, to, steps) {\n var div = steps - 1;\n var diffR = (to.r - from.r) / div;\n var diffG = (to.g - from.g) / div;\n var diffB = (to.b - from.b) / div;\n var fromA = normalizeAlpha(from.a);\n var toA = normalizeAlpha(to.a);\n var diffA = (toA - fromA) / div;\n return Array(steps).fill(null).map(function (__n, i) {\n if (i === 0) {\n return from;\n }\n if (i === div) {\n return to;\n }\n return {\n r: round(from.r + diffR * i),\n g: round(from.g + diffG * i),\n b: round(from.b + diffB * i),\n a: round(fromA + diffA * i)\n };\n });\n};\nvar getColorMixture = function (color, steps, shades, options) {\n var parsedOptions = parseOptions(options);\n var decimals = parsedOptions.decimals;\n var model = getColorModel(color);\n var isCSS = typeof color === \'string\';\n var rgb = getRGBObject(color, model);\n var hasAlpha = ((typeof color === \'string\' && hasProp(rgb, \'a\')) ||\n (typeof color !== \'string\' && hasProp(color, \'a\')));\n var hsl = rgbToHSL(rgb.r, rgb.g, rgb.b, rgb.a);\n if (!hasAlpha)\n delete hsl.a;\n var increment = shades\n ? hsl.l / (steps + 1)\n : (100 - hsl.l) / (steps + 1);\n var hslMap = Array(steps).fill(null).map(function (__n, i) { return (utils_assign(utils_assign({}, hsl), { l: hsl.l + increment * (i + 1) * (1 - +shades * 2) })); });\n switch (model) {\n case ColorModel.HEX:\n default:\n return hslMap.map(function (hslColor) {\n var rgbColor = hslToRGB(hslColor.h, hslColor.s, hslColor.l);\n if (hasAlpha)\n rgbColor.a = hslColor.a;\n return isCSS\n ? hasAlpha\n ? CSS.HEX(roundRGBObject(utils_assign(utils_assign({}, rgbColor), { a: round(rgbColor.a * 255) }), parsedOptions.decimals))\n : CSS.HEX(roundRGBObject(rgbColor, decimals))\n : hasAlpha\n ? translateColor.HEXA(rgbColor)\n : translateColor.HEX(rgbColor);\n });\n case ColorModel.RGB:\n return hslMap.map(function (hslColor) {\n var rgbColor = hslToRGB(hslColor.h, hslColor.s, hslColor.l);\n if (hasAlpha)\n rgbColor.a = hslColor.a;\n return isCSS\n ? CSS.RGB(roundRGBObject(rgbColor, decimals))\n : hasAlpha\n ? translateColor.RGBA(rgbColor, decimals)\n : translateColor.RGB(rgbColor, decimals);\n });\n case ColorModel.HSL:\n return hslMap.map(function (hslColor) {\n return isCSS\n ? CSS.HSL(roundHSLObject(hslColor, decimals))\n : hasAlpha\n ? translateColor.HSLA(utils_assign(utils_assign({}, hslToRGB(hslColor.h, hslColor.s, hslColor.l)), { a: hslColor.a }), decimals)\n : translateColor.HSL(hslToRGB(hslColor.h, hslColor.s, hslColor.l), decimals);\n });\n }\n};\nvar colorHarmony = (_d = {\n buildHarmony: function (color, harmonyFunction, mode, decimals) {\n var model = getColorModel(color);\n var rgb = getRGBObject(color, model);\n var hsl = rgbToHSL(rgb.r, rgb.g, rgb.b, rgb.a);\n var hasAlpha = ((typeof color === \'string\' && hasProp(rgb, \'a\')) ||\n (typeof color !== \'string\' && hasProp(color, \'a\')));\n var isCSS = typeof color === \'string\';\n switch (model) {\n case ColorModel.HEX:\n default:\n return hasAlpha\n ? this.HEXA(roundHSLObject(hsl, 0), harmonyFunction, mode, isCSS)\n : this.HEX(roundHSLObject(hsl, 0), harmonyFunction, mode, isCSS);\n case ColorModel.HSL:\n return hasAlpha\n ? this.HSLA(hsl, harmonyFunction, mode, isCSS, decimals)\n : this.HSL(hsl, harmonyFunction, mode, isCSS, decimals);\n case ColorModel.RGB:\n return hasAlpha\n ? this.RGBA(hsl, harmonyFunction, mode, isCSS, decimals)\n : this.RGB(hsl, harmonyFunction, mode, isCSS, decimals);\n }\n }\n },\n _d[ColorModel.HEX] = function (color, harmonyFunction, mode, css) {\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.HEX(hslToRGB(c.h, c.s, c.l))\n : translateColor.HEX(hslToRGB(c.h, c.s, c.l))); });\n },\n _d.HEXA = function (color, harmonyFunction, mode, css) {\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.HEX(utils_assign(utils_assign({}, hslToRGB(c.h, c.s, c.l)), { a: normalizeAlpha(c.a) * 255 }))\n : translateColor.HEXA(utils_assign(utils_assign({}, hslToRGB(c.h, c.s, c.l)), { a: normalizeAlpha(c.a) }))); });\n },\n _d[ColorModel.RGB] = function (color, harmonyFunction, mode, css, decimals) {\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.RGB(roundRGBObject(hslToRGB(c.h, c.s, c.l), decimals))\n : translateColor.RGB(hslToRGB(c.h, c.s, c.l), decimals)); });\n },\n _d.RGBA = function (color, harmonyFunction, mode, css, decimals) {\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.RGB(roundRGBObject(utils_assign(utils_assign({}, hslToRGB(c.h, c.s, c.l)), { a: normalizeAlpha(c.a) }), decimals))\n : translateColor.RGBA(utils_assign(utils_assign({}, hslToRGB(c.h, c.s, c.l)), { a: normalizeAlpha(c.a) }), decimals)); });\n },\n _d[ColorModel.HSL] = function (color, harmonyFunction, mode, css, decimals) {\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.HSL(roundHSLObject({\n h: c.h,\n s: c.s,\n l: c.l\n }, decimals))\n : translateColor.HSL(hslToRGB(c.h, c.s, c.l), decimals)); });\n },\n _d.HSLA = function (color, harmonyFunction, mode, css, decimals) {\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.HSL(roundHSLObject(utils_assign(utils_assign({}, c), { a: normalizeAlpha(c.a) }), decimals))\n : translateColor.HSLA(utils_assign(utils_assign({}, hslToRGB(c.h, c.s, c.l)), { a: normalizeAlpha(c.a) }), decimals)); });\n },\n _d);\nvar colorMixer = (_e = {\n mix: function (colors, mode) {\n var rgbMap = colors.map(function (color) {\n var model = getColorModel(color);\n return getRGBObject(color, model);\n });\n var rybMap = mode === Mix.SUBTRACTIVE\n ? rgbMap.map(function (color) {\n var ryb = rgbToRYB(color.r, color.g, color.b);\n if (hasProp(color, \'a\')) {\n ryb.a = color.a;\n }\n return ryb;\n })\n : null;\n function createMix(items) {\n var initial = mode === Mix.ADDITIVE\n ? { r: 0, g: 0, b: 0, a: 0 }\n : { r: 0, y: 0, b: 0, a: 0 };\n return items.reduce(function (mix, color) {\n var colorA = hasProp(color, \'a\') ? color.a : 1;\n var common = {\n r: Math.min(mix.r + color.r * colorA, 255),\n b: Math.min(mix.b + color.b * colorA, 255),\n a: 1 - (1 - colorA) * (1 - mix.a)\n };\n var mixGY = \'g\' in mix\n ? mix.g\n : mix.y;\n var colorGY = \'g\' in color\n ? color.g\n : color.y;\n return utils_assign(utils_assign({}, common), (mode === Mix.ADDITIVE\n ? { g: Math.min(mixGY + colorGY * colorA, 255) }\n : { y: Math.min(mixGY + colorGY * colorA, 255) }));\n }, initial);\n }\n var mix;\n if (mode === Mix.ADDITIVE) {\n mix = createMix(rgbMap);\n }\n else {\n var ryb = createMix(rybMap);\n mix = rybToRGB(ryb.r, ryb.y, ryb.b);\n mix.a = ryb.a;\n }\n return {\n r: round(mix.r),\n g: round(mix.g),\n b: round(mix.b),\n a: minmax(mix.a, 0, 1)\n };\n }\n },\n _e[ColorModel.HEX] = function (colors, mode, css) {\n var mix = this.mix(colors, mode);\n delete mix.a;\n return (css\n ? CSS.HEX(mix)\n : translateColor.HEX(mix));\n },\n _e.HEXA = function (colors, mode, css) {\n var mix = this.mix(colors, mode);\n mix.a = css\n ? normalizeAlpha(mix.a) * 255\n : normalizeAlpha(mix.a);\n return (css\n ? CSS.HEX(mix)\n : translateColor.HEXA(mix));\n },\n _e[ColorModel.RGB] = function (colors, mode, css, options) {\n var decimals = parseOptions(options).decimals;\n var mix = this.mix(colors, mode);\n delete mix.a;\n return (css\n ? CSS.RGB(mix)\n : translateColor.RGB(mix, decimals));\n },\n _e.RGBA = function (colors, mode, css, options) {\n var decimals = parseOptions(options).decimals;\n var mix = this.mix(colors, mode);\n return (css\n ? CSS.RGB(mix)\n : translateColor.RGBA(mix, decimals));\n },\n _e[ColorModel.HSL] = function (colors, mode, css, options) {\n var decimals = parseOptions(options).decimals;\n var mix = this.mix(colors, mode);\n var hsl = rgbToHSL(mix.r, mix.g, mix.b);\n delete mix.a;\n delete hsl.a;\n return (css\n ? CSS.HSL(hsl)\n : translateColor.HSL(mix, decimals));\n },\n _e.HSLA = function (colors, mode, css, options) {\n var decimals = parseOptions(options).decimals;\n var mix = this.mix(colors, mode);\n var hsl = rgbToHSL(mix.r, mix.g, mix.b, mix.a);\n return (css\n ? CSS.HSL(hsl)\n : translateColor.HSLA(mix, decimals));\n },\n _e);\nvar roundRGBObject = function (color, decimals) {\n return utils_assign({ r: round(color.r, decimals), g: round(color.g, decimals), b: round(color.b, decimals) }, (hasProp(color, \'a\')\n ? {\n a: round(color.a, decimals)\n }\n : {}));\n};\nvar roundHSLObject = function (color, decimals) {\n return utils_assign({ h: round(color.h, decimals), s: round(color.s, decimals), l: round(color.l, decimals) }, (hasProp(color, \'a\')\n ? {\n a: round(color.a, decimals)\n }\n : {}));\n};\nvar roundCMYKObject = function (color, decimals) {\n return {\n c: round(color.c, decimals),\n m: round(color.m, decimals),\n y: round(color.y, decimals),\n k: round(color.k, decimals)\n };\n};\n\n;// CONCATENATED MODULE: ./src/index.ts\nvar src_assign = (undefined && undefined.__assign) || function () {\n src_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return src_assign.apply(this, arguments);\n};\n\n\n\n\n\nvar getColorReturn = function (color, model, options, translateFunction) {\n var decimals = parseOptions(options).decimals;\n var rgbObject = getRGBObject(color, model);\n return translateFunction(rgbObject, decimals);\n};\nvar getBlendReturn = function (from, to, steps, options, translateFunction) {\n var decimals = parseOptions(options).decimals;\n if (steps < 1)\n steps = DEFAULT_BLEND_STEPS;\n var fromRGBObject = getRGBObject(from);\n var toRGBObject = getRGBObject(to);\n var blendArray = blend(fromRGBObject, toRGBObject, steps);\n return blendArray.map(function (color) {\n return translateFunction(color, decimals);\n });\n};\nvar getHarmonyReturn = function (harmony, color, options, mode) {\n var _a;\n var decimals = parseOptions(options).decimals;\n return (_a = {},\n _a[Harmony.ANALOGOUS] = colorHarmony.buildHarmony(color, analogous, mode, decimals),\n _a[Harmony.COMPLEMENTARY] = colorHarmony.buildHarmony(color, complementary, mode, decimals),\n _a[Harmony.SPLIT_COMPLEMENTARY] = colorHarmony.buildHarmony(color, splitComplementary, mode, decimals),\n _a[Harmony.TRIADIC] = colorHarmony.buildHarmony(color, triadic, mode, decimals),\n _a[Harmony.TETRADIC] = colorHarmony.buildHarmony(color, tetradic, mode, decimals),\n _a[Harmony.SQUARE] = colorHarmony.buildHarmony(color, square, mode, decimals),\n _a)[harmony];\n};\nvar ColorTranslator = (function () {\n function ColorTranslator(color, options) {\n if (options === void 0) { options = {}; }\n this._options = parseOptions(options);\n this.rgb = getRGBObject(color);\n this.updateHSL();\n this.updateCMYK();\n }\n ColorTranslator.prototype.updateRGB = function () {\n this.rgb = src_assign(src_assign({}, hslToRGB(this.hsl.h, this.hsl.s, this.hsl.l)), { a: this.hsl.a });\n };\n ColorTranslator.prototype.updateRGBFromCMYK = function () {\n this.rgb = src_assign(src_assign({}, cmykToRGB(this.cmyk.c, this.cmyk.m, this.cmyk.y, this.cmyk.k)), { a: this.rgb.a });\n };\n ColorTranslator.prototype.updateHSL = function () {\n this.hsl = rgbToHSL(this.rgb.r, this.rgb.g, this.rgb.b, this.rgb.a);\n };\n ColorTranslator.prototype.updateCMYK = function () {\n this.cmyk = rgbToCMYK(this.rgb.r, this.rgb.g, this.rgb.b);\n };\n ColorTranslator.prototype.updateRGBAndCMYK = function () {\n this.updateRGB();\n this.updateCMYK();\n return this;\n };\n ColorTranslator.prototype.updateHSLAndCMYK = function () {\n this.updateHSL();\n this.updateCMYK();\n return this;\n };\n ColorTranslator.prototype.updateRGBAndHSL = function () {\n this.updateRGBFromCMYK();\n this.updateHSL();\n return this;\n };\n ColorTranslator.prototype.setOptions = function (options) {\n if (options === void 0) { options = {}; }\n this._options = src_assign(src_assign({}, this._options), options);\n return this;\n };\n ColorTranslator.prototype.setH = function (h) {\n this.hsl.h = normalizeHue(h);\n return this.updateRGBAndCMYK();\n };\n ColorTranslator.prototype.setS = function (s) {\n this.hsl.s = minmax(s, 0, 100);\n return this.updateRGBAndCMYK();\n };\n ColorTranslator.prototype.setL = function (l) {\n this.hsl.l = minmax(l, 0, 100);\n return this.updateRGBAndCMYK();\n };\n ColorTranslator.prototype.setR = function (r) {\n this.rgb.r = minmax(r, 0, 255);\n return this.updateHSLAndCMYK();\n };\n ColorTranslator.prototype.setG = function (g) {\n this.rgb.g = minmax(g, 0, 255);\n return this.updateHSLAndCMYK();\n };\n ColorTranslator.prototype.setB = function (b) {\n this.rgb.b = minmax(b, 0, 255);\n return this.updateHSLAndCMYK();\n };\n ColorTranslator.prototype.setA = function (a) {\n this.hsl.a = this.rgb.a = minmax(a, 0, 1);\n return this;\n };\n ColorTranslator.prototype.setC = function (c) {\n this.cmyk.c = minmax(c, 0, 100);\n return this.updateRGBAndHSL();\n };\n ColorTranslator.prototype.setM = function (m) {\n this.cmyk.m = minmax(m, 0, 100);\n return this.updateRGBAndHSL();\n };\n ColorTranslator.prototype.setY = function (y) {\n this.cmyk.y = minmax(y, 0, 100);\n return this.updateRGBAndHSL();\n };\n ColorTranslator.prototype.setK = function (k) {\n this.cmyk.k = minmax(k, 0, 100);\n return this.updateRGBAndHSL();\n };\n Object.defineProperty(ColorTranslator.prototype, "options", {\n get: function () {\n return this._options;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "H", {\n get: function () {\n return round(this.hsl.h, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "S", {\n get: function () {\n return round(this.hsl.s, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "L", {\n get: function () {\n return round(this.hsl.l, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "R", {\n get: function () {\n return round(this.rgb.r, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "G", {\n get: function () {\n return round(this.rgb.g, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "B", {\n get: function () {\n return round(this.rgb.b, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "A", {\n get: function () {\n return round(this.hsl.a, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "C", {\n get: function () {\n return round(this.cmyk.c, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "M", {\n get: function () {\n return round(this.cmyk.m, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "Y", {\n get: function () {\n return round(this.cmyk.y, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "K", {\n get: function () {\n return round(this.cmyk.k, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HEXObject", {\n get: function () {\n return translateColor.HEX(this.rgb);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HEXAObject", {\n get: function () {\n return translateColor.HEXA(this.rgb);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "RGBObject", {\n get: function () {\n return {\n r: this.R,\n g: this.G,\n b: this.B\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "RGBAObject", {\n get: function () {\n return src_assign(src_assign({}, this.RGBObject), { a: this.A });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HSLObject", {\n get: function () {\n return {\n h: this.H,\n s: this.S,\n l: this.L\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HSLAObject", {\n get: function () {\n return src_assign(src_assign({}, this.HSLObject), { a: this.A });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "CMYKObject", {\n get: function () {\n return {\n c: this.C,\n m: this.M,\n y: this.Y,\n k: this.K\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "CMYKAObject", {\n get: function () {\n return src_assign(src_assign({}, this.CMYKObject), { a: this.A });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HEX", {\n get: function () {\n return CSS.HEX({\n r: this.R,\n g: this.G,\n b: this.B\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HEXA", {\n get: function () {\n return CSS.HEX({\n r: this.R,\n g: this.G,\n b: this.B,\n a: this.A * 255\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "RGB", {\n get: function () {\n return CSS.RGB({\n r: this.R,\n g: this.G,\n b: this.B\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "RGBA", {\n get: function () {\n return CSS.RGB({\n r: this.R,\n g: this.G,\n b: this.B,\n a: this.A\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HSL", {\n get: function () {\n return CSS.HSL({\n h: this.H,\n s: this.S,\n l: this.L\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HSLA", {\n get: function () {\n return CSS.HSL({\n h: this.H,\n s: this.S,\n l: this.L,\n a: this.A\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "CMYK", {\n get: function () {\n return CSS.CMYK({\n c: this.C,\n m: this.M,\n y: this.Y,\n k: this.K\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "CMYKA", {\n get: function () {\n return CSS.CMYK({\n c: this.C,\n m: this.M,\n y: this.Y,\n k: this.K,\n a: this.A\n });\n },\n enumerable: false,\n configurable: true\n });\n ColorTranslator.toHEXObject = function (color) {\n var model = getColorModel(color);\n return getColorReturn(color, model, { decimals: 0 }, translateColor.HEX);\n };\n ColorTranslator.toHEX = function (color) {\n return CSS.HEX(ColorTranslator.toHEXObject(color));\n };\n ColorTranslator.toHEXAObject = function (color) {\n var model = getColorModel(color);\n return getColorReturn(color, model, { decimals: 0 }, translateColor.HEXA);\n };\n ColorTranslator.toHEXA = function (color) {\n return CSS.HEX(ColorTranslator.toHEXAObject(color));\n };\n ColorTranslator.toRGBObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.RGB);\n };\n ColorTranslator.toRGB = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.RGB(ColorTranslator.toRGBObject(color, options));\n };\n ColorTranslator.toRGBAObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.RGBA);\n };\n ColorTranslator.toRGBA = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.RGB(ColorTranslator.toRGBAObject(color, options));\n };\n ColorTranslator.toHSLObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.HSL);\n };\n ColorTranslator.toHSL = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.HSL(ColorTranslator.toHSLObject(color, options));\n };\n ColorTranslator.toHSLAObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.HSLA);\n };\n ColorTranslator.toHSLA = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.HSL(ColorTranslator.toHSLAObject(color, options));\n };\n ColorTranslator.toCMYKObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.CMYK);\n };\n ColorTranslator.toCMYK = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.CMYK(ColorTranslator.toCMYKObject(color, options));\n };\n ColorTranslator.toCMYKAObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.CMYKA);\n };\n ColorTranslator.toCMYKA = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.CMYK(ColorTranslator.toCMYKAObject(color, options));\n };\n ColorTranslator.getBlendHEXObject = function (from, to, steps) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n return getBlendReturn(from, to, steps, { decimals: 0 }, translateColor.HEX);\n };\n ColorTranslator.getBlendHEX = function (from, to, steps) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n return ColorTranslator.getBlendHEXObject(from, to, steps)\n .map(function (color) { return CSS.HEX(color); });\n };\n ColorTranslator.getBlendHEXAObject = function (from, to, steps) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n return getBlendReturn(from, to, steps, { decimals: 0 }, translateColor.HEXA);\n };\n ColorTranslator.getBlendHEXA = function (from, to, steps) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n return ColorTranslator.getBlendHEXAObject(from, to, steps)\n .map(function (color) { return CSS.HEX(color); });\n };\n ColorTranslator.getBlendRGBObject = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return getBlendReturn(from, to, steps, options, translateColor.RGB);\n };\n ColorTranslator.getBlendRGB = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return ColorTranslator.getBlendRGBObject(from, to, steps, options)\n .map(function (color) { return CSS.RGB(color); });\n };\n ColorTranslator.getBlendRGBAObject = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return getBlendReturn(from, to, steps, options, translateColor.RGBA);\n };\n ColorTranslator.getBlendRGBA = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return ColorTranslator.getBlendRGBAObject(from, to, steps, options)\n .map(function (color) { return CSS.RGB(color); });\n };\n ColorTranslator.getBlendHSLObject = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return getBlendReturn(from, to, steps, options, translateColor.HSL);\n };\n ColorTranslator.getBlendHSL = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return ColorTranslator.getBlendHSLObject(from, to, steps, options)\n .map(function (color) { return CSS.HSL(color); });\n };\n ColorTranslator.getBlendHSLAObject = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return getBlendReturn(from, to, steps, options, translateColor.HSLA);\n };\n ColorTranslator.getBlendHSLA = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return ColorTranslator.getBlendHSLAObject(from, to, steps, options)\n .map(function (color) { return CSS.HSL(color); });\n };\n ColorTranslator.getMixHEXObject = function (colors, mode) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n return colorMixer.HEX(colors, mode, false);\n };\n ColorTranslator.getMixHEX = function (colors, mode) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n return colorMixer.HEX(colors, mode, true);\n };\n ColorTranslator.getMixHEXAObject = function (colors, mode) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n return colorMixer.HEXA(colors, mode, false);\n };\n ColorTranslator.getMixHEXA = function (colors, mode) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n return colorMixer.HEXA(colors, mode, true);\n };\n ColorTranslator.getMixRGBObject = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.RGB(colors, mode, false, options);\n };\n ColorTranslator.getMixRGB = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.RGB(colors, mode, true, options);\n };\n ColorTranslator.getMixRGBAObject = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.RGBA(colors, mode, false, options);\n };\n ColorTranslator.getMixRGBA = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.RGBA(colors, mode, true, options);\n };\n ColorTranslator.getMixHSLObject = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.HSL(colors, mode, false, options);\n };\n ColorTranslator.getMixHSL = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.HSL(colors, mode, true, options);\n };\n ColorTranslator.getMixHSLAObject = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.HSLA(colors, mode, false, options);\n };\n ColorTranslator.getMixHSLA = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.HSLA(colors, mode, true, options);\n };\n ColorTranslator.getShades = function (color, shades, options) {\n if (options === void 0) { options = {}; }\n return getColorMixture(color, shades, true, options);\n };\n ColorTranslator.getTints = function (color, tints, options) {\n if (options === void 0) { options = {}; }\n return getColorMixture(color, tints, false, options);\n };\n ColorTranslator.getHarmony = function (color, harmony, mode, options) {\n if (harmony === void 0) { harmony = Harmony.COMPLEMENTARY; }\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return getHarmonyReturn(harmony, color, options, mode);\n };\n return ColorTranslator;\n}());\n\n\n\n;// CONCATENATED MODULE: ./src/@demo/demo1/index.js\n\n\n/* harmony default export */ const demo1 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n const color = new ColorTranslator(\'hsl(180,100%,50%)\', { decimals: 0 });\n\n for (let row = 0; row < 10; row++) {\n\n for (let col = 0; col < 10; col++) {\n\n color\n .setS(row * 10)\n .setL(col * 5 + 30);\n\n const box = document.createElement(\'div\');\n\n box.classList.add(\'box\');\n box.style.background = color.HEX;\n\n box.innerText =\n `R:${color.R}\n G:${color.G}\n B:${color.B}`;\n container.appendChild(box);\n\n }\n }\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo2/index.js\n\n\n/* harmony default export */ const demo2 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n const color = new ColorTranslator({ r: 255, g: 0, b: 0 });\n const hue = [0, 30, 60, 120, 240, 280, 320, 0];\n let rainbow;\n\n for (let r = 0; r < hue.length; r++) {\n\n color.setH(hue[r]);\n\n const bow = document.createElement(\'div\');\n\n bow.classList.add(\'rainbow\');\n bow.style.background = color.HEX;\n\n if (rainbow) {\n rainbow.appendChild(bow);\n } else {\n container.appendChild(bow);\n }\n\n rainbow = bow;\n }\n\n rainbow.style.background = \'#333\';\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo3/index.js\n\n\n/* harmony default export */ const demo3 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n const hsl = { h: 0, s: \'90%\', l: \'50%\' };\n const hue = [undefined, 55, 30, 0, 290, 220, 130];\n const total = hue.length;\n\n for (let row = 0; row < total; row++) {\n\n for (let col = 0; col < total; col++) {\n\n let index = total - row + col;\n if (index >= total) {\n index -= total;\n }\n hsl.h = hue[index];\n const rgb = hue[index] === undefined\n ? \'#FFF\'\n : ColorTranslator.toHEX(hsl);\n const box = document.createElement(\'div\');\n\n box.classList.add(\'flag\');\n box.style.background = rgb;\n\n container.appendChild(box);\n\n }\n }\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo4/index.js\n\n\n/* harmony default export */ const demo4 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n const colors = [\n \'red\',\n \'lime\',\n \'blue\',\n \'aqua\',\n \'yellow\',\n \'fuchsia\'\n ];\n const total = colors.length;\n\n for (let row = 0; row < total; row++) {\n\n const hsl = ColorTranslator.toHSLObject(colors[row], { decimals: 0 });\n const step = hsl.s / (total - 1);\n\n for (let col = 0; col < total; col++) {\n\n const rgb = ColorTranslator.toHEX(hsl, { decimals: 0 });\n const cmyk = ColorTranslator.toCMYKObject(hsl, { decimals: 0 });\n\n const box = document.createElement(\'div\');\n box.classList.add(\'box\');\n box.style.background = rgb;\n box.innerText = `C:${cmyk.c}\n M:${cmyk.m}\n Y:${cmyk.y}\n K:${cmyk.k}`;\n\n container.appendChild(box);\n\n hsl.s -= step;\n\n }\n }\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo5/index.js\n\n\n/* harmony default export */ const demo5 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n const rows = 11;\n const mult = 3;\n\n for (let i = 0; i < rows; i++) {\n\n const blends = ColorTranslator.getBlendHEX(\'#FF0000\', \'#FFFF00\', mult + i * mult);\n\n blends.forEach((blend, index) => {\n const box = document.createElement(\'div\');\n box.classList.add(\'box\', `file${i}`);\n box.style.background = blend;\n box.innerText = index + 1;\n container.appendChild(box);\n });\n\n }\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo6/index.js\n\n\n/* harmony default export */ const demo6 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n\n const colors = [\'#F00\', \'#FF8000\', \'#FF0\', \'#0F0\', \'#00F\', \'#AA00FF\', \'#FF00AA\'];\n\n const createBox = (color, type) => {\n const box = document.createElement(\'div\');\n box.classList.add(\'box\');\n box.style.backgroundColor = color;\n if (type) box.dataset.type = type;\n container.appendChild(box);\n };\n\n colors.forEach((color) => {\n const shades = ColorTranslator.getShades(color, 3).reverse();\n const tints = ColorTranslator.getTints(color, 3);\n shades.forEach((shade) => createBox(shade, \'shade\'));\n createBox(color);\n tints.forEach((tint) => createBox(tint, \'tint\'));\n });\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo7/index.js\n\n\n\n/* harmony default export */ const demo7 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n\n const mixes = [\n \'#FF0000\',\n \'#00FF00\',\n \'#0000FF\',\n [1, 3],\n [1, 2],\n [2, 3],\n [1, 2, 3]\n ];\n\n const fillPlanes = () => {\n const planes = container.querySelectorAll(\'#planes path\');\n planes.forEach((plane, index) => {\n let color = \'#CCCCCC\';\n if (typeof mixes[index] === \'string\') {\n color = mixes[index];\n } else if(mixes[index]) {\n const colors = mixes[index].map((i) => mixes[i - 1]);\n color = mixes[index] = ColorTranslator.getMixHEX(colors);\n }\n plane.setAttribute(\'fill\', color);\n });\n };\n\n fetch(\'images/color-mixes.svg\')\n .then(result => result.text())\n .then((svgCode) => {\n container.innerHTML = svgCode;\n fillPlanes();\n });\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo8/index.js\n\n\n/* harmony default export */ const demo8 = ((ColorTranslator, { Mix }) => {\n\n const container = document.createElement(\'div\');\n\n const mixes = [\n \'#FF0000\',\n \'#FFFF00\',\n \'#0000FF\',\n [1, 3],\n [1, 2],\n [2, 3],\n [1, 2, 3]\n ];\n\n const fillPlanes = () => {\n const planes = container.querySelectorAll(\'#planes path\');\n planes.forEach((plane, index) => {\n let color = \'#CCCCCC\';\n if (typeof mixes[index] === \'string\') {\n color = mixes[index];\n } else if(mixes[index]) {\n const colors = mixes[index].map((i) => mixes[i - 1]);\n color = mixes[index] = ColorTranslator.getMixHEX(colors, Mix.SUBTRACTIVE);\n }\n plane.setAttribute(\'fill\', color);\n });\n };\n\n fetch(\'images/color-mixes.svg\')\n .then(result => result.text())\n .then((svgCode) => {\n container.innerHTML = svgCode;\n fillPlanes();\n });\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo9/index.js\n\n\n/* harmony default export */ const demo9 = ((ColorTranslator, { Harmony }) => {\n\n const container = document.createElement(\'div\');\n\n const harmonies = [\n { label: \'Complementary\', value: Harmony.COMPLEMENTARY },\n { label: \'Split Complementary\', value: Harmony.SPLIT_COMPLEMENTARY },\n { label: \'Analogous\', value: Harmony.ANALOGOUS },\n { label: \'Triadic\', value: Harmony.TRIADIC },\n { label: \'Tetradic\', value: Harmony.TETRADIC },\n { label: \'Square\', value: Harmony.SQUARE }\n ];\n\n const baseColor = \'#F00\';\n\n const createElement = (className, parent) => {\n const div = document.createElement(\'div\');\n div.classList.add(className);\n parent.appendChild(div);\n return div;\n };\n\n const createHarmony = (item) => {\n\n const wrapper = createElement(\'wrapper\', container);\n const wheel = createElement(\'wheel\', wrapper);\n const harmony = createElement(\'harmony\', wrapper);\n createElement(\'label\', wrapper).innerText = item.label;\n\n fetch(\'images/wheel-additive.svg\')\n .then(result => result.text())\n .then((svgCode) => {\n const harmonyColors = ColorTranslator.getHarmony(baseColor, item.value);\n const selector = \'path\' + harmonyColors.map((color) => `:not([fill="${color}"])`).join(\'\');\n wheel.innerHTML = svgCode;\n harmonyColors.forEach((hex) => createElement(\'box\', harmony).style.background = hex);\n wheel.querySelectorAll(selector).forEach((path) => path.setAttribute(\'fill-opacity\', \'0.25\'));\n });\n\n };\n\n harmonies.forEach((item) => createHarmony(item));\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo10/index.js\n\n\n/* harmony default export */ const demo10 = ((ColorTranslator, { Harmony, Mix }) => {\n\n const container = document.createElement(\'div\');\n\n const harmonies = [\n { label: \'Complementary\', value: Harmony.COMPLEMENTARY },\n { label: \'Split Complementary\', value: Harmony.SPLIT_COMPLEMENTARY },\n { label: \'Analogous\', value: Harmony.ANALOGOUS },\n { label: \'Triadic\', value: Harmony.TRIADIC },\n { label: \'Tetradic\', value: Harmony.TETRADIC },\n { label: \'Square\', value: Harmony.SQUARE }\n ];\n\n const baseColor = \'#F00\';\n\n const createElement = (className, parent) => {\n const div = document.createElement(\'div\');\n div.classList.add(className);\n parent.appendChild(div);\n return div;\n };\n\n const createHarmony = (item) => {\n\n const wrapper = createElement(\'wrapper\', container);\n const wheel = createElement(\'wheel\', wrapper);\n const harmony = createElement(\'harmony\', wrapper);\n createElement(\'label\', wrapper).innerText = item.label;\n\n fetch(\'images/wheel-subtractive.svg\')\n .then(result => result.text())\n .then((svgCode) => {\n const harmonyColors = ColorTranslator.getHarmony(baseColor, item.value, Mix.SUBTRACTIVE);\n const selector = \'path\' + harmonyColors.map((color) => `:not([fill="${color}"])`).join(\'\');\n wheel.innerHTML = svgCode;\n harmonyColors.forEach((hex) => createElement(\'box\', harmony).style.background = hex);\n wheel.querySelectorAll(selector).forEach((path) => path.setAttribute(\'fill-opacity\', \'0.25\'));\n });\n\n };\n\n harmonies.forEach((item) => createHarmony(item));\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst functioToString = (fn) => {\n const article = document.createElement(\'article\');\n const pre = document.createElement(\'pre\');\n article.classList.add(\'function-container\');\n pre.classList.add(\'prettyprint\');\n article.appendChild(pre);\n pre.innerHTML = fn.toString().replace(\'(ColorTranslator)\', \'()\');\n return article;\n};\n\nconst demos = new Map([\n [\'demo1\', demo1],\n [\'demo2\', demo2],\n [\'demo3\', demo3],\n [\'demo4\', demo4],\n [\'demo5\', demo5],\n [\'demo6\', demo6],\n [\'demo7\', demo7],\n [\'demo8\', demo8],\n [\'demo9\', demo9],\n [\'demo10\', demo10],\n]);\n\ndocument.addEventListener(\'DOMContentLoaded\', () => {\n demos.forEach((module, div) => {\n const demo = document.getElementById(div);\n const container = document.createElement(\'div\');\n const wrapper = document.createElement(\'div\');\n\n container.classList.add(\'demo-container\');\n wrapper.classList.add(\'demo-wrapper\');\n\n wrapper.appendChild(module(ColorTranslator, { Harmony: Harmony, Mix: Mix }));\n container.appendChild(wrapper);\n demo.appendChild(container);\n demo.appendChild(functioToString(module));\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc5LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLGlCQUFpQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JELFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUiw0RUFBNEU7QUFDNUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLHFDQUFxQywwQkFBMEI7QUFDL0Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QiwwQkFBMEIsZUFBZTtBQUN0RTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPLFNBQVMsV0FBSztBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBLFdBQUs7O0FBRUw7QUFDQSxpQkFBaUIsV0FBSztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7O0FDNWxCTztBQUNBOzs7QUNEQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGdDQUFnQztBQUMxQjtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQywwQkFBMEI7QUFDcEI7QUFDUDtBQUNBO0FBQ0E7QUFDQSxDQUFDLGtCQUFrQjtBQUNaO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsc0NBQXNDO0FBQ2hDO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDMUxBO0FBQ3FDO0FBQzlCLHdCQUF3QjtBQUMvQixPQUFPLFVBQVUsNkRBQTZELEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDcEgsT0FBTyxVQUFVO0FBQ2pCLE9BQU8sVUFBVTtBQUNqQixPQUFPLFVBQVU7QUFDakI7QUFDTztBQUNBO0FBQ0EsdUJBQXVCLElBQUk7QUFDM0Isc0JBQXNCLE9BQU87OztBQ1g3QjtBQUNQO0FBQ0E7QUFDQTs7O0FDSHlDO0FBQ2xDO0FBQ1AsY0FBYyxZQUFZO0FBQzFCOzs7QUNIMEI7QUFDRjtBQUNFO0FBQ0Q7QUFDQzs7O0FDSjFCLGdCQUFnQixTQUFJLElBQUksU0FBSTtBQUM1QjtBQUNBLGlEQUFpRCxPQUFPO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsU0FBSSxJQUFJLFNBQUk7QUFDakMsNkVBQTZFLE9BQU87QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDdUU7QUFDaEUscUNBQXFDO0FBQ3JDO0FBQ1AsdUNBQXVDLEtBQUs7QUFDNUM7QUFDTyxtQ0FBbUMsT0FBTyxLQUFLO0FBQ3REO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCw0QkFBNEI7QUFDNUIsa0JBQWtCLEtBQUs7QUFDdkI7QUFDQTtBQUNBLFFBQVEsR0FBRztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLHVDQUF1QyxnQkFBZ0IsS0FBSztBQUM1RCw4Q0FBOEM7QUFDOUM7QUFDUCwrQkFBK0IsV0FBVyxZQUFZO0FBQ3REO0FBQ0E7QUFDQTtBQUNPLHNDQUFzQztBQUN0QyxpQ0FBaUM7QUFDakMsd0NBQXdDLDRCQUE0QixFQUFFLGVBQWU7OztBQ3hFM0Q7QUFDMUI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQjtBQUNBO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCO0FBQ0E7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQjtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNPO0FBQ1A7QUFDQSxZQUFZLEtBQUs7QUFDakIsWUFBWSxLQUFLO0FBQ2pCLFlBQVksS0FBSztBQUNqQixhQUFhO0FBQ2I7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLEtBQUs7QUFDaEIsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsS0FBSztBQUNoQjtBQUNBO0FBQ087QUFDUCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEtBQUs7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxLQUFLO0FBQ2hCO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQ3RLQSxJQUFJLEtBQUU7QUFDa0Y7QUFDekI7QUFDL0Q7QUFDQSw0QkFBNEI7QUFDNUIsZ0JBQWdCLHFCQUFxQjtBQUNyQyxnQkFBZ0IsbUJBQW1CO0FBQ25DLGVBQWUsV0FBVztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixLQUFLLENBQUMsS0FBSztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLDRCQUE0QixZQUFZO0FBQ3hDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTyxXQUFXLEtBQUUsS0FBSztBQUN6QixJQUFJLEtBQUUsQ0FBQyxVQUFVO0FBQ2pCO0FBQ0E7QUFDQSxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsRUFBRTtBQUM1QixpQkFBaUIsR0FBRyxHQUFHLEVBQUU7QUFDekI7QUFDQSxLQUFLO0FBQ0wsSUFBSSxLQUFFLENBQUMsVUFBVTtBQUNqQjtBQUNBO0FBQ0EscUJBQXFCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDbkMsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM5QjtBQUNBLEtBQUs7QUFDTCxJQUFJLEtBQUUsQ0FBQyxVQUFVO0FBQ2pCO0FBQ0E7QUFDQSxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQy9CO0FBQ0EsS0FBSztBQUNMLElBQUksS0FBRSxDQUFDLFVBQVU7QUFDakI7QUFDQTtBQUNBLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUMzQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUN0QztBQUNBLEtBQUs7QUFDTCxJQUFJLEtBQUU7OztBQ3hETixJQUFJLFlBQVEsSUFBSSxTQUFJLElBQUksU0FBSTtBQUM1QixJQUFJLFlBQVE7QUFDWixpREFBaUQsT0FBTztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVE7QUFDbkI7QUFDQSxJQUFJLGlCQUFhLElBQUksU0FBSSxJQUFJLFNBQUk7QUFDakMsNkVBQTZFLE9BQU87QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQUU7QUFDK0g7QUFDbUM7QUFDOUQ7QUFDekU7QUFDakM7QUFDTztBQUNQO0FBQ0EsZ0NBQWdDLE9BQU87QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsS0FBSyxDQUFDLE1BQU07QUFDbEM7QUFDQTtBQUNBLHNCQUFzQixLQUFLO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSxZQUFZLEtBQUs7QUFDakIsb0JBQW9CLGFBQWE7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxLQUFLO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixpQkFBYSxDQUFDLGlCQUFhO0FBQzNDLFlBQVksWUFBUSxDQUFDLFlBQVEsR0FBRyxZQUFZLFlBQVksR0FBRztBQUMzRDtBQUNBLG1DQUFtQyxNQUFNLENBQUMsTUFBTSxnQ0FBZ0M7QUFDaEY7QUFDQSxLQUFLLEdBQUcsWUFBUSxHQUFHO0FBQ25CO0FBQ08seUNBQXlDO0FBQ3pDLDZDQUE2QztBQUM3QyxrREFBa0Q7QUFDbEQsdUNBQXVDO0FBQ3ZDLHdDQUF3QztBQUN4QyxzQ0FBc0M7QUFDN0M7QUFDQTtBQUNBLGdCQUFnQixVQUFVO0FBQzFCLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLGdCQUFnQixVQUFVO0FBQzFCO0FBQ0E7QUFDQSx3QkFBd0IsTUFBTTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IscUJBQXFCO0FBQ3JDLFFBQVEsbUJBQW1CO0FBQzNCLGdCQUFnQixtQkFBbUI7QUFDbkM7QUFDQSwyQkFBMkIsVUFBVTtBQUNyQztBQUNBLG9CQUFvQixHQUFHO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLHFCQUFxQixLQUFLO0FBQzFCLGtCQUFrQixHQUFHO0FBQ3JCO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsVUFBVTtBQUM5QjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsTUFBTTtBQUM5QjtBQUNBO0FBQ0E7QUFDTyx1Q0FBdUM7QUFDOUM7QUFDQTtBQUNPLDhCQUE4QixPQUFFLEtBQUs7QUFDNUMsSUFBSSxPQUFFLENBQUMsVUFBVTtBQUNqQix5QkFBeUIsVUFBVTtBQUNuQztBQUNBLGNBQWMsYUFBYTtBQUMzQixtQ0FBbUMsU0FBUztBQUM1QztBQUNBLGVBQWUsTUFBTTtBQUNyQixlQUFlLE1BQU07QUFDckIsZUFBZSxNQUFNO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixNQUFNO0FBQzdCO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSSxPQUFFLENBQUMsVUFBVTtBQUNqQixnQ0FBZ0MsU0FBUztBQUN6QyxnQkFBZ0IsZ0JBQWdCO0FBQ2hDLGdCQUFnQixnQkFBZ0I7QUFDaEMsZ0JBQWdCLGdCQUFnQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJLE9BQUUsQ0FBQyxVQUFVO0FBQ2pCLGdDQUFnQyxTQUFTO0FBQ3pDO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkIsZ0JBQWdCLE9BQU87QUFDdkI7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJLE9BQUUsQ0FBQyxVQUFVO0FBQ2pCLGdDQUFnQyxTQUFTO0FBQ3pDLGdCQUFnQixhQUFhO0FBQzdCLGdCQUFnQixhQUFhO0FBQzdCLGdCQUFnQixhQUFhO0FBQzdCLGdCQUFnQixhQUFhO0FBQzdCO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSSxPQUFFO0FBQ0MscUNBQXFDO0FBQzVDLE9BQU8sVUFBVTtBQUNqQjtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsZ0JBQWdCO0FBQy9CLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLGdDQUFnQyxnQkFBZ0I7QUFDaEQ7QUFDQTtBQUNBLEtBQUs7QUFDTCxPQUFPLFVBQVU7QUFDakI7QUFDQSxLQUFLO0FBQ0wsT0FBTyxVQUFVO0FBQ2pCLGdCQUFnQixPQUFPO0FBQ3ZCLGdCQUFnQixPQUFPO0FBQ3ZCLGtCQUFrQixRQUFRO0FBQzFCLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsT0FBTyxVQUFVO0FBQ2pCLGdCQUFnQixhQUFhO0FBQzdCLGdCQUFnQixhQUFhO0FBQzdCLGdCQUFnQixhQUFhO0FBQzdCLGdCQUFnQixhQUFhO0FBQzdCLGtCQUFrQixTQUFTO0FBQzNCLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNQLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNPLDZCQUE2QjtBQUNwQyxPQUFPLFVBQVU7QUFDakI7QUFDQSxlQUFlLE1BQU07QUFDckIsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkIsY0FBYyxNQUFNO0FBQ3BCO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsT0FBTyxVQUFVO0FBQ2pCLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxrQkFBa0IsT0FBTztBQUN6QixjQUFjLEtBQUs7QUFDbkI7QUFDQTtBQUNBLEtBQUs7QUFDTCxPQUFPLFVBQVU7QUFDakIsa0JBQWtCLFFBQVE7QUFDMUI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZ0JBQWdCLE9BQU87QUFDdkIsY0FBYyxLQUFLO0FBQ25CO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsT0FBTyxVQUFVO0FBQ2pCLCtCQUErQixTQUFTO0FBQ3hDLEtBQUs7QUFDTDtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEIsY0FBYyxLQUFLO0FBQ25CO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBSztBQUNwQixlQUFlLEtBQUs7QUFDcEIsZUFBZSxLQUFLO0FBQ3BCLGVBQWUsS0FBSztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNPO0FBQ1Asd0JBQXdCLFlBQVk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsT0FBTztBQUN6RCxzQ0FBc0MsT0FBTztBQUM3QyxjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSxRQUFRLFlBQVEsQ0FBQyxZQUFRLEdBQUcsVUFBVSxvREFBb0QsS0FBSztBQUNoSztBQUNBLGFBQWEsVUFBVTtBQUN2QjtBQUNBO0FBQ0EsK0JBQStCLFFBQVE7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsR0FBRyxvQkFBb0IsWUFBUSxDQUFDLFlBQVEsR0FBRyxlQUFlLEdBQUcsS0FBSyxvQkFBb0I7QUFDaEgsMEJBQTBCLEdBQUc7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLGFBQWEsVUFBVTtBQUN2QjtBQUNBLCtCQUErQixRQUFRO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixHQUFHO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBLHNCQUFzQixHQUFHO0FBQ3pCO0FBQ0EsOENBQThDLFlBQVEsQ0FBQyxZQUFRLEdBQUcsRUFBRSxRQUFRLHlDQUF5QyxlQUFlO0FBQ3BJLDZDQUE2QyxRQUFRO0FBQ3JELGFBQWE7QUFDYjtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsUUFBUTtBQUM5QiwwREFBMEQsT0FBTztBQUNqRSw4Q0FBOEMsT0FBTztBQUNyRDtBQUNBO0FBQ0EscUJBQXFCLFVBQVU7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsVUFBVTtBQUMvQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsVUFBVTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLE9BQU8sVUFBVTtBQUNqQjtBQUNBLHdDQUF3QztBQUN4QyxjQUFjLEdBQUcsS0FBSyxRQUFRO0FBQzlCLGlDQUFpQyxRQUFRLG9CQUFvQjtBQUM3RCxLQUFLO0FBQ0w7QUFDQTtBQUNBLHdDQUF3QztBQUN4QyxjQUFjLEdBQUcsS0FBSyxZQUFRLENBQUMsWUFBUSxHQUFHLEVBQUUsUUFBUSxvQkFBb0IsOEJBQThCO0FBQ3RHLGtDQUFrQyxZQUFRLENBQUMsWUFBUSxHQUFHLEVBQUUsUUFBUSxvQkFBb0Isd0JBQXdCLE1BQU07QUFDbEgsS0FBSztBQUNMLE9BQU8sVUFBVTtBQUNqQjtBQUNBLHdDQUF3QztBQUN4QyxjQUFjLEdBQUcsb0JBQW9CLFFBQVE7QUFDN0MsaUNBQWlDLFFBQVEsOEJBQThCO0FBQ3ZFLEtBQUs7QUFDTDtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLGNBQWMsR0FBRyxvQkFBb0IsWUFBUSxDQUFDLFlBQVEsR0FBRyxFQUFFLFFBQVEsb0JBQW9CLHdCQUF3QjtBQUMvRyxrQ0FBa0MsWUFBUSxDQUFDLFlBQVEsR0FBRyxFQUFFLFFBQVEsb0JBQW9CLHdCQUF3QixnQkFBZ0I7QUFDNUgsS0FBSztBQUNMLE9BQU8sVUFBVTtBQUNqQjtBQUNBLHdDQUF3QztBQUN4QyxjQUFjLEdBQUc7QUFDakI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLGlDQUFpQyxRQUFRLDhCQUE4QjtBQUN2RSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHdDQUF3QztBQUN4QyxjQUFjLEdBQUcsb0JBQW9CLFlBQVEsQ0FBQyxZQUFRLEdBQUcsUUFBUSx3QkFBd0I7QUFDekYsa0NBQWtDLFlBQVEsQ0FBQyxZQUFRLEdBQUcsRUFBRSxRQUFRLG9CQUFvQix3QkFBd0IsZ0JBQWdCO0FBQzVILEtBQUs7QUFDTDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2Isa0NBQWtDLEdBQUc7QUFDckM7QUFDQSw4QkFBOEIsUUFBUTtBQUN0Qyx3QkFBd0IsT0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLHVDQUF1QyxHQUFHO0FBQzFDLHdCQUF3QjtBQUN4Qix3QkFBd0I7QUFDeEI7QUFDQSxpQ0FBaUMsT0FBTztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLFlBQVEsQ0FBQyxZQUFRLEdBQUcscUJBQXFCLEdBQUc7QUFDdkUsNEJBQTRCO0FBQzVCLDRCQUE0Qiw0Q0FBNEM7QUFDeEUsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSx5QkFBeUIsR0FBRztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixRQUFRO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixLQUFLO0FBQ3hCLG1CQUFtQixLQUFLO0FBQ3hCLG1CQUFtQixLQUFLO0FBQ3hCLG1CQUFtQixNQUFNO0FBQ3pCO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsT0FBTyxVQUFVO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGNBQWMsR0FBRztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLEdBQUc7QUFDakI7QUFDQSxLQUFLO0FBQ0wsT0FBTyxVQUFVO0FBQ2pCLHVCQUF1QixZQUFZO0FBQ25DO0FBQ0E7QUFDQTtBQUNBLGNBQWMsR0FBRztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNBLHVCQUF1QixZQUFZO0FBQ25DO0FBQ0E7QUFDQSxjQUFjLEdBQUc7QUFDakI7QUFDQSxLQUFLO0FBQ0wsT0FBTyxVQUFVO0FBQ2pCLHVCQUF1QixZQUFZO0FBQ25DO0FBQ0Esa0JBQWtCLFFBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsY0FBYyxHQUFHO0FBQ2pCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsdUJBQXVCLFlBQVk7QUFDbkM7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLGNBQWMsR0FBRztBQUNqQjtBQUNBLEtBQUs7QUFDTDtBQUNPO0FBQ1AsV0FBVyxZQUFRLEdBQUcsR0FBRyxLQUFLLHdCQUF3QixLQUFLLHdCQUF3QixLQUFLLHFCQUFxQixHQUFHLE9BQU87QUFDdkg7QUFDQSxlQUFlLEtBQUs7QUFDcEI7QUFDQSxZQUFZO0FBQ1o7QUFDTztBQUNQLFdBQVcsWUFBUSxHQUFHLEdBQUcsS0FBSyx3QkFBd0IsS0FBSyx3QkFBd0IsS0FBSyxxQkFBcUIsR0FBRyxPQUFPO0FBQ3ZIO0FBQ0EsZUFBZSxLQUFLO0FBQ3BCO0FBQ0EsWUFBWTtBQUNaO0FBQ087QUFDUDtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLEtBQUs7QUFDaEIsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsS0FBSztBQUNoQjtBQUNBOzs7QUM3aEJBLElBQUksVUFBUSxJQUFJLFNBQUksSUFBSSxTQUFJO0FBQzVCLElBQUksVUFBUTtBQUNaLGlEQUFpRCxPQUFPO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBUTtBQUNuQjtBQUMrRDtBQUNlO0FBQ3hDO0FBQ0w7QUFDc0I7QUFDdkQ7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQixvQkFBb0IsWUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFlBQVk7QUFDL0I7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DLHdCQUF3QixZQUFrQjtBQUMxQyxzQkFBc0IsWUFBa0I7QUFDeEMscUJBQXFCLEtBQVc7QUFDaEM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQixtQkFBbUI7QUFDbkIsV0FBVyxPQUFPLGNBQWMsWUFBa0IscUJBQXFCLFNBQWU7QUFDdEYsV0FBVyxPQUFPLGtCQUFrQixZQUFrQixxQkFBcUIsYUFBbUI7QUFDOUYsV0FBVyxPQUFPLHdCQUF3QixZQUFrQixxQkFBcUIsa0JBQXdCO0FBQ3pHLFdBQVcsT0FBTyxZQUFZLFlBQWtCLHFCQUFxQixPQUFhO0FBQ2xGLFdBQVcsT0FBTyxhQUFhLFlBQWtCLHFCQUFxQixRQUFjO0FBQ3BGLFdBQVcsT0FBTyxXQUFXLFlBQWtCLHFCQUFxQixNQUFZO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLHdCQUF3QixZQUFZO0FBQ3BDLG1CQUFtQixZQUFrQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixVQUFRLENBQUMsVUFBUSxHQUFHLEVBQUUsUUFBUSx5Q0FBeUMsZUFBZTtBQUN6RztBQUNBO0FBQ0EsbUJBQW1CLFVBQVEsQ0FBQyxVQUFRLEdBQUcsRUFBRSxTQUFTLHlEQUF5RCxlQUFlO0FBQzFIO0FBQ0E7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBO0FBQ0Esb0JBQW9CLFNBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyx3QkFBd0IsVUFBUSxDQUFDLFVBQVEsR0FBRztBQUM1QztBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsWUFBa0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE1BQU07QUFDM0I7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE1BQU07QUFDM0I7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE1BQU07QUFDM0I7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE1BQU07QUFDM0I7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE1BQU07QUFDM0I7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE1BQU07QUFDeEM7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLE1BQU07QUFDNUI7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLE1BQU07QUFDNUI7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLE1BQU07QUFDNUI7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLE1BQU07QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsS0FBSztBQUN4QixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLEtBQUs7QUFDeEIsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixLQUFLO0FBQ3hCLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsS0FBSztBQUN4QixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLEtBQUs7QUFDeEIsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixLQUFLO0FBQ3hCLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsS0FBSztBQUN4QixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLEtBQUs7QUFDeEIsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixLQUFLO0FBQ3hCLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsS0FBSztBQUN4QixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLEtBQUs7QUFDeEIsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixjQUFvQjtBQUN2QyxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLGNBQW9CO0FBQ3ZDLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixVQUFRLENBQUMsVUFBUSxHQUFHLHFCQUFxQixXQUFXO0FBQ3ZFLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixVQUFRLENBQUMsVUFBUSxHQUFHLHFCQUFxQixXQUFXO0FBQ3ZFLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLFVBQVEsQ0FBQyxVQUFRLEdBQUcsc0JBQXNCLFdBQVc7QUFDeEUsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLEdBQUc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLEdBQUc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLEdBQUc7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsR0FBRztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0Esb0JBQW9CLGFBQW1CO0FBQ3ZDLDhDQUE4QyxhQUFhLEVBQUUsY0FBb0I7QUFDakY7QUFDQTtBQUNBLGVBQWUsR0FBRztBQUNsQjtBQUNBO0FBQ0Esb0JBQW9CLGFBQW1CO0FBQ3ZDLDhDQUE4QyxhQUFhLEVBQUUsY0FBb0I7QUFDakY7QUFDQTtBQUNBLGVBQWUsR0FBRztBQUNsQjtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLG9CQUFvQixhQUFtQjtBQUN2QyxxREFBcUQsY0FBb0I7QUFDekU7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxlQUFlLEdBQUc7QUFDbEI7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxvQkFBb0IsYUFBbUI7QUFDdkMscURBQXFELGNBQW9CO0FBQ3pFO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEMsZUFBZSxHQUFHO0FBQ2xCO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEMsb0JBQW9CLGFBQW1CO0FBQ3ZDLHFEQUFxRCxjQUFvQjtBQUN6RTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGVBQWUsR0FBRztBQUNsQjtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLG9CQUFvQixhQUFtQjtBQUN2QyxxREFBcUQsY0FBb0I7QUFDekU7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxlQUFlLEdBQUc7QUFDbEI7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxvQkFBb0IsYUFBbUI7QUFDdkMscURBQXFELGNBQW9CO0FBQ3pFO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEMsZUFBZSxHQUFHO0FBQ2xCO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEMsb0JBQW9CLGFBQW1CO0FBQ3ZDLHFEQUFxRCxjQUFvQjtBQUN6RTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGVBQWUsR0FBRztBQUNsQjtBQUNBO0FBQ0EsZ0NBQWdDLFFBQVEsbUJBQW1CO0FBQzNELGlEQUFpRCxhQUFhLEVBQUUsY0FBb0I7QUFDcEY7QUFDQTtBQUNBLGdDQUFnQyxRQUFRLG1CQUFtQjtBQUMzRDtBQUNBLG9DQUFvQyxPQUFPLEdBQUcsY0FBYztBQUM1RDtBQUNBO0FBQ0EsZ0NBQWdDLFFBQVEsbUJBQW1CO0FBQzNELGlEQUFpRCxhQUFhLEVBQUUsY0FBb0I7QUFDcEY7QUFDQTtBQUNBLGdDQUFnQyxRQUFRLG1CQUFtQjtBQUMzRDtBQUNBLG9DQUFvQyxPQUFPLEdBQUcsY0FBYztBQUM1RDtBQUNBO0FBQ0EsZ0NBQWdDLFFBQVEsbUJBQW1CO0FBQzNELGtDQUFrQztBQUNsQyx3REFBd0QsY0FBb0I7QUFDNUU7QUFDQTtBQUNBLGdDQUFnQyxRQUFRLG1CQUFtQjtBQUMzRCxrQ0FBa0M7QUFDbEM7QUFDQSxvQ0FBb0MsT0FBTyxHQUFHLGNBQWM7QUFDNUQ7QUFDQTtBQUNBLGdDQUFnQyxRQUFRLG1CQUFtQjtBQUMzRCxrQ0FBa0M7QUFDbEMsd0RBQXdELGNBQW9CO0FBQzVFO0FBQ0E7QUFDQSxnQ0FBZ0MsUUFBUSxtQkFBbUI7QUFDM0Qsa0NBQWtDO0FBQ2xDO0FBQ0Esb0NBQW9DLE9BQU8sR0FBRyxjQUFjO0FBQzVEO0FBQ0E7QUFDQSxnQ0FBZ0MsUUFBUSxtQkFBbUI7QUFDM0Qsa0NBQWtDO0FBQ2xDLHdEQUF3RCxjQUFvQjtBQUM1RTtBQUNBO0FBQ0EsZ0NBQWdDLFFBQVEsbUJBQW1CO0FBQzNELGtDQUFrQztBQUNsQztBQUNBLG9DQUFvQyxPQUFPLEdBQUcsY0FBYztBQUM1RDtBQUNBO0FBQ0EsZ0NBQWdDLFFBQVEsbUJBQW1CO0FBQzNELGtDQUFrQztBQUNsQyx3REFBd0QsY0FBb0I7QUFDNUU7QUFDQTtBQUNBLGdDQUFnQyxRQUFRLG1CQUFtQjtBQUMzRCxrQ0FBa0M7QUFDbEM7QUFDQSxvQ0FBb0MsT0FBTyxHQUFHLGNBQWM7QUFDNUQ7QUFDQTtBQUNBLCtCQUErQixPQUFPLEdBQUc7QUFDekMsZUFBZSxVQUFnQjtBQUMvQjtBQUNBO0FBQ0EsK0JBQStCLE9BQU8sR0FBRztBQUN6QyxlQUFlLFVBQWdCO0FBQy9CO0FBQ0E7QUFDQSwrQkFBK0IsT0FBTyxHQUFHO0FBQ3pDLGVBQWUsVUFBZ0I7QUFDL0I7QUFDQTtBQUNBLCtCQUErQixPQUFPLEdBQUc7QUFDekMsZUFBZSxVQUFnQjtBQUMvQjtBQUNBO0FBQ0EsK0JBQStCLE9BQU8sR0FBRztBQUN6QyxrQ0FBa0M7QUFDbEMsZUFBZSxVQUFnQjtBQUMvQjtBQUNBO0FBQ0EsK0JBQStCLE9BQU8sR0FBRztBQUN6QyxrQ0FBa0M7QUFDbEMsZUFBZSxVQUFnQjtBQUMvQjtBQUNBO0FBQ0EsK0JBQStCLE9BQU8sR0FBRztBQUN6QyxrQ0FBa0M7QUFDbEMsZUFBZSxVQUFnQjtBQUMvQjtBQUNBO0FBQ0EsK0JBQStCLE9BQU8sR0FBRztBQUN6QyxrQ0FBa0M7QUFDbEMsZUFBZSxVQUFnQjtBQUMvQjtBQUNBO0FBQ0EsK0JBQStCLE9BQU8sR0FBRztBQUN6QyxrQ0FBa0M7QUFDbEMsZUFBZSxVQUFnQjtBQUMvQjtBQUNBO0FBQ0EsK0JBQStCLE9BQU8sR0FBRztBQUN6QyxrQ0FBa0M7QUFDbEMsZUFBZSxVQUFnQjtBQUMvQjtBQUNBO0FBQ0EsK0JBQStCLE9BQU8sR0FBRztBQUN6QyxrQ0FBa0M7QUFDbEMsZUFBZSxVQUFnQjtBQUMvQjtBQUNBO0FBQ0EsK0JBQStCLE9BQU8sR0FBRztBQUN6QyxrQ0FBa0M7QUFDbEMsZUFBZSxVQUFnQjtBQUMvQjtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGVBQWUsZUFBcUI7QUFDcEM7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxlQUFlLGVBQXFCO0FBQ3BDO0FBQ0E7QUFDQSxrQ0FBa0MsVUFBVSxPQUFPO0FBQ25ELCtCQUErQixPQUFPLEdBQUc7QUFDekMsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDMEI7QUFDSDs7O0FDbGtCRDs7QUFFdkIsNENBQWU7O0FBRWY7QUFDQSw2REFBNkQsYUFBYTs7QUFFMUUsc0JBQXNCLFVBQVU7O0FBRWhDLDBCQUEwQixVQUFVOztBQUVwQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQjtBQUNyQixxQkFBcUI7QUFDckIscUJBQXFCLFFBQVE7QUFDN0I7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxDQUFDLEU7O0FDL0JzQjs7QUFFdkIsNENBQWU7O0FBRWY7QUFDQSx3Q0FBd0Msb0JBQW9CO0FBQzVEO0FBQ0E7O0FBRUEsb0JBQW9CLGdCQUFnQjs7QUFFcEM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxDQUFDLEU7O0FDL0JzQjs7QUFFdkIsNENBQWU7O0FBRWY7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSxzQkFBc0IsYUFBYTs7QUFFbkMsMEJBQTBCLGFBQWE7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQyxFOztBQ2pDc0I7O0FBRXZCLDRDQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixhQUFhOztBQUVuQywrREFBK0QsYUFBYTtBQUM1RTs7QUFFQSwwQkFBMEIsYUFBYTs7QUFFdkMscURBQXFELGFBQWE7QUFDbEUsNkRBQTZELGFBQWE7O0FBRTFFO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxpQ0FBaUM7QUFDakMsaUNBQWlDO0FBQ2pDLGlDQUFpQyxPQUFPOztBQUV4Qzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLENBQUMsRTs7QUMxQ3NCOztBQUV2Qiw0Q0FBZTs7QUFFZjtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLFVBQVU7O0FBRTlCOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEMsRUFBRTtBQUM5QztBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUOztBQUVBOztBQUVBLENBQUMsRTs7QUN4QnNCOztBQUV2Qiw0Q0FBZTs7QUFFZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBLENBQUMsRTs7QUMxQnNCOzs7QUFHdkIsNENBQWU7O0FBRWY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQSxDQUFDLEU7O0FDeENzQjs7QUFFdkIsNENBQWUsb0JBQW9CLEtBQUs7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUEsQ0FBQyxFOztBQ3ZDc0I7O0FBRXZCLDRDQUFlLG9CQUFvQixTQUFTOztBQUU1Qzs7QUFFQTtBQUNBLFVBQVUsNERBQTREO0FBQ3RFLFVBQVUsa0VBQWtFO0FBQzVFLFVBQVUsd0RBQXdEO0FBQ2xFLFVBQVUsc0RBQXNEO0FBQ2hFLFVBQVUsdURBQXVEO0FBQ2pFLFVBQVU7QUFDVjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRkFBc0YsTUFBTTtBQUM1RjtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViOztBQUVBOztBQUVBOztBQUVBLENBQUMsRTs7QUMvQ3NCOztBQUV2Qiw2Q0FBZSxvQkFBb0IsY0FBYzs7QUFFakQ7O0FBRUE7QUFDQSxVQUFVLDREQUE0RDtBQUN0RSxVQUFVLGtFQUFrRTtBQUM1RSxVQUFVLHdEQUF3RDtBQUNsRSxVQUFVLHNEQUFzRDtBQUNoRSxVQUFVLHVEQUF1RDtBQUNqRSxVQUFVO0FBQ1Y7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0ZBQXNGLE1BQU07QUFDNUY7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjs7QUFFQTs7QUFFQTs7QUFFQSxDQUFDLEU7O0FDL0NxRTtBQUNBO0FBQ0g7QUFDN0M7QUFDQztBQUM2QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxLQUFLO0FBQ25CLGNBQWMsS0FBSztBQUNuQixjQUFjLEtBQUs7QUFDbkIsY0FBYyxLQUFLO0FBQ25CLGNBQWMsS0FBSztBQUNuQixjQUFjLEtBQUs7QUFDbkIsY0FBYyxLQUFLO0FBQ25CLGNBQWMsS0FBSztBQUNuQixjQUFjLEtBQUs7QUFDbkIsZUFBZSxNQUFNO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQ0FBbUMsZUFBZSxJQUFJLE9BQU8sY0FBSyxPQUFFO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcz82ZDkzIiwid2VicGFjazovL2NvbG9ydHJhbnNsYXRvci8uL3NyYy9jb25zdGFudHMvbnVtYmVycy50cz9kNTU5Iiwid2VicGFjazovL2NvbG9ydHJhbnNsYXRvci8uL3NyYy9jb25zdGFudHMvZW51bXMudHM/ZjVjYSIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvY29uc3RhbnRzL3JlZ2V4cHMudHM/Y2ZmOCIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvY29uc3RhbnRzL2Vycm9ycy50cz83YTRkIiwid2VicGFjazovL2NvbG9ydHJhbnNsYXRvci8uL3NyYy9jb25zdGFudHMvb3B0aW9ucy50cz81YTM1Iiwid2VicGFjazovL2NvbG9ydHJhbnNsYXRvci8uL3NyYy9jb25zdGFudHMvaW5kZXgudHM/NzAyYSIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvaGVscGVycy9pbmRleC50cz83OGExIiwid2VicGFjazovL2NvbG9ydHJhbnNsYXRvci8uL3NyYy9jb2xvci90cmFuc2xhdG9ycy50cz85ZjcwIiwid2VicGFjazovL2NvbG9ydHJhbnNsYXRvci8uL3NyYy9jb2xvci9jc3MudHM/NmIxMiIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvY29sb3IvdXRpbHMudHM/NjlmMyIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvaW5kZXgudHM/ZTk0ZSIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvQGRlbW8vZGVtbzEvaW5kZXguanM/Mzk2NSIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvQGRlbW8vZGVtbzIvaW5kZXguanM/ZDhkYyIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvQGRlbW8vZGVtbzMvaW5kZXguanM/ZDM4NiIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvQGRlbW8vZGVtbzQvaW5kZXguanM/NjE5ZiIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvQGRlbW8vZGVtbzUvaW5kZXguanM/ZDhjYyIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvQGRlbW8vZGVtbzYvaW5kZXguanM/M2EzMiIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvQGRlbW8vZGVtbzcvaW5kZXguanM/ODM0MyIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvQGRlbW8vZGVtbzgvaW5kZXguanM/NzcyNSIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvQGRlbW8vZGVtbzkvaW5kZXguanM/ODUzMiIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvQGRlbW8vZGVtbzEwL2luZGV4LmpzPzRmNjciLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL0BkZW1vL2RlbW8uanM/OWI3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpXG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGdsb2JhbCxcbiAgaXRlcmFibGU6ICdTeW1ib2wnIGluIGdsb2JhbCAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZ2xvYmFsICYmXG4gICAgJ0Jsb2InIGluIGdsb2JhbCAmJlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSkoKSxcbiAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZ2xvYmFsLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnbG9iYWxcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgICAgcmV0dXJuIGlzQ29uc3VtZWRcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICB9XG4gIH1cblxuICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG52YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbFxuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KVxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGdsb2JhbC5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZ2xvYmFsLmxvY2F0aW9uLmhyZWYgPyBnbG9iYWwubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXIgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykuaW5kZXhPZignYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcidcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5pdCAmJiB0eXBlb2YgaW5pdC5oZWFkZXJzID09PSAnb2JqZWN0JyAmJiAhKGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbml0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnbG9iYWwuZmV0Y2gpIHtcbiAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbiAgZ2xvYmFsLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGdsb2JhbC5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnbG9iYWwuUmVzcG9uc2UgPSBSZXNwb25zZVxufVxuIiwiZXhwb3J0IHZhciBNQVhfREVDSU1BTFMgPSA2O1xuZXhwb3J0IHZhciBERUZBVUxUX0JMRU5EX1NURVBTID0gNTtcbiIsImV4cG9ydCB2YXIgQ29sb3JNb2RlbDtcbihmdW5jdGlvbiAoQ29sb3JNb2RlbCkge1xuICAgIENvbG9yTW9kZWxbXCJIRVhcIl0gPSBcIkhFWFwiO1xuICAgIENvbG9yTW9kZWxbXCJSR0JcIl0gPSBcIlJHQlwiO1xuICAgIENvbG9yTW9kZWxbXCJIU0xcIl0gPSBcIkhTTFwiO1xuICAgIENvbG9yTW9kZWxbXCJDTVlLXCJdID0gXCJDTVlLXCI7XG59KShDb2xvck1vZGVsIHx8IChDb2xvck1vZGVsID0ge30pKTtcbmV4cG9ydCB2YXIgSGFybW9ueTtcbihmdW5jdGlvbiAoSGFybW9ueSkge1xuICAgIEhhcm1vbnlbXCJBTkFMT0dPVVNcIl0gPSBcIkFOQUxPR09VU1wiO1xuICAgIEhhcm1vbnlbXCJDT01QTEVNRU5UQVJZXCJdID0gXCJDT01QTEVNRU5UQVJZXCI7XG4gICAgSGFybW9ueVtcIlNQTElUX0NPTVBMRU1FTlRBUllcIl0gPSBcIlNQTElUX0NPTVBMRU1FTlRBUllcIjtcbiAgICBIYXJtb255W1wiVFJJQURJQ1wiXSA9IFwiVFJJQURJQ1wiO1xuICAgIEhhcm1vbnlbXCJURVRSQURJQ1wiXSA9IFwiVEVUUkFESUNcIjtcbiAgICBIYXJtb255W1wiU1FVQVJFXCJdID0gXCJTUVVBUkVcIjtcbn0pKEhhcm1vbnkgfHwgKEhhcm1vbnkgPSB7fSkpO1xuZXhwb3J0IHZhciBNaXg7XG4oZnVuY3Rpb24gKE1peCkge1xuICAgIE1peFtcIkFERElUSVZFXCJdID0gXCJBRERJVElWRVwiO1xuICAgIE1peFtcIlNVQlRSQUNUSVZFXCJdID0gXCJTVUJUUkFDVElWRVwiO1xufSkoTWl4IHx8IChNaXggPSB7fSkpO1xuZXhwb3J0IHZhciBDb2xvcktleXdvcmRzO1xuKGZ1bmN0aW9uIChDb2xvcktleXdvcmRzKSB7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImJsYWNrXCJdID0gXCIjMDAwMDAwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInNpbHZlclwiXSA9IFwiI0MwQzBDMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJncmF5XCJdID0gXCIjODA4MDgwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIndoaXRlXCJdID0gXCIjRkZGRkZGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm1hcm9vblwiXSA9IFwiIzgwMDAwMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJyZWRcIl0gPSBcIiNGRjAwMDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wicHVycGxlXCJdID0gXCIjODAwMDgwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImZ1Y2hzaWFcIl0gPSBcIiNGRjAwRkZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZ3JlZW5cIl0gPSBcIiMwMDgwMDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGltZVwiXSA9IFwiIzAwRkYwMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJvbGl2ZVwiXSA9IFwiIzgwODAwMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJ5ZWxsb3dcIl0gPSBcIiNGRkZGMDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibmF2eVwiXSA9IFwiIzAwMDA4MFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJibHVlXCJdID0gXCIjMDAwMEZGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInRlYWxcIl0gPSBcIiMwMDgwODBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiYXF1YVwiXSA9IFwiIzAwRkZGRlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJvcmFuZ2VcIl0gPSBcIiNGRkE1MDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiYWxpY2VibHVlXCJdID0gXCIjRjBGOEZGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImFudGlxdWV3aGl0ZVwiXSA9IFwiI0ZBRUJEN1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJhcXVhbWFyaW5lXCJdID0gXCIjN0ZGRkQ0XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImF6dXJlXCJdID0gXCIjRjBGRkZGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImJlaWdlXCJdID0gXCIjRjVGNURDXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImJpc3F1ZVwiXSA9IFwiI0ZGRTRDNFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJibGFuY2hlZGFsbW9uZFwiXSA9IFwiI0ZGRUJDRFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJibHVldmlvbGV0XCJdID0gXCIjOEEyQkUyXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImJyb3duXCJdID0gXCIjQTUyQTJBXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImJ1cmx5d29vZFwiXSA9IFwiI0RFQjg4N1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJjYWRldGJsdWVcIl0gPSBcIiM1RjlFQTBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiY2hhcnRyZXVzZVwiXSA9IFwiIzdGRkYwMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJjaG9jb2xhdGVcIl0gPSBcIiNEMjY5MUVcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiY29yYWxcIl0gPSBcIiNGRjdGNTBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiY29ybmZsb3dlcmJsdWVcIl0gPSBcIiM2NDk1RURcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiY29ybnNpbGtcIl0gPSBcIiNGRkY4RENcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiY3JpbXNvblwiXSA9IFwiI0RDMTQzQ1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJjeWFuXCJdID0gXCIjMDBGRkZGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtibHVlXCJdID0gXCIjMDAwMDhCXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtjeWFuXCJdID0gXCIjMDA4QjhCXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtnb2xkZW5yb2RcIl0gPSBcIiNCODg2MEJcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGFya2dyYXlcIl0gPSBcIiNBOUE5QTlcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGFya2dyZWVuXCJdID0gXCIjMDA2NDAwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtncmV5XCJdID0gXCIjQTlBOUE5XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtraGFraVwiXSA9IFwiI0JEQjc2QlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrbWFnZW50YVwiXSA9IFwiIzhCMDA4QlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrb2xpdmVncmVlblwiXSA9IFwiIzU1NkIyRlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrb3JhbmdlXCJdID0gXCIjRkY4QzAwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtvcmNoaWRcIl0gPSBcIiM5OTMyQ0NcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGFya3JlZFwiXSA9IFwiIzhCMDAwMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrc2FsbW9uXCJdID0gXCIjRTk5NjdBXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtzZWFncmVlblwiXSA9IFwiIzhGQkM4RlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrc2xhdGVibHVlXCJdID0gXCIjNDgzRDhCXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtzbGF0ZWdyYXlcIl0gPSBcIiMyRjRGNEZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGFya3NsYXRlZ3JleVwiXSA9IFwiIzJGNEY0RlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrdHVycXVvaXNlXCJdID0gXCIjMDBDRUQxXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmt2aW9sZXRcIl0gPSBcIiM5NDAwRDNcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGVlcHBpbmtcIl0gPSBcIiNGRjE0OTNcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGVlcHNreWJsdWVcIl0gPSBcIiMwMEJGRkZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGltZ3JheVwiXSA9IFwiIzY5Njk2OVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkaW1ncmV5XCJdID0gXCIjNjk2OTY5XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRvZGdlcmJsdWVcIl0gPSBcIiMxRTkwRkZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZmlyZWJyaWNrXCJdID0gXCIjQjIyMjIyXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImZsb3JhbHdoaXRlXCJdID0gXCIjRkZGQUYwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImZvcmVzdGdyZWVuXCJdID0gXCIjMjI4QjIyXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImdhaW5zYm9yb1wiXSA9IFwiI0RDRENEQ1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJnaG9zdHdoaXRlXCJdID0gXCIjRjhGOEZGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImdvbGRcIl0gPSBcIiNGRkQ3MDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZ29sZGVucm9kXCJdID0gXCIjREFBNTIwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImdyZWVueWVsbG93XCJdID0gXCIjQURGRjJGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImdyZXlcIl0gPSBcIiM4MDgwODBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiaG9uZXlkZXdcIl0gPSBcIiNGMEZGRjBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiaG90cGlua1wiXSA9IFwiI0ZGNjlCNFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJpbmRpYW5yZWRcIl0gPSBcIiNDRDVDNUNcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiaW5kaWdvXCJdID0gXCIjNEIwMDgyXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIml2b3J5XCJdID0gXCIjRkZGRkYwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImtoYWtpXCJdID0gXCIjRjBFNjhDXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxhdmVuZGVyXCJdID0gXCIjRTZFNkZBXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxhdmVuZGVyYmx1c2hcIl0gPSBcIiNGRkYwRjVcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGF3bmdyZWVuXCJdID0gXCIjN0NGQzAwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxlbW9uY2hpZmZvblwiXSA9IFwiI0ZGRkFDRFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaWdodGJsdWVcIl0gPSBcIiNBREQ4RTZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHRjb3JhbFwiXSA9IFwiI0YwODA4MFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaWdodGN5YW5cIl0gPSBcIiNFMEZGRkZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIl0gPSBcIiNGQUZBRDJcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHRncmF5XCJdID0gXCIjRDNEM0QzXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxpZ2h0Z3JlZW5cIl0gPSBcIiM5MEVFOTBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHRncmV5XCJdID0gXCIjRDNEM0QzXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxpZ2h0cGlua1wiXSA9IFwiI0ZGQjZDMVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaWdodHNhbG1vblwiXSA9IFwiI0ZGQTA3QVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaWdodHNlYWdyZWVuXCJdID0gXCIjMjBCMkFBXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxpZ2h0c2t5Ymx1ZVwiXSA9IFwiIzg3Q0VGQVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaWdodHNsYXRlZ3JheVwiXSA9IFwiIzc3ODg5OVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaWdodHNsYXRlZ3JleVwiXSA9IFwiIzc3ODg5OVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaWdodHN0ZWVsYmx1ZVwiXSA9IFwiI0IwQzRERVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaWdodHllbGxvd1wiXSA9IFwiI0ZGRkZFMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaW1lZ3JlZW5cIl0gPSBcIiMzMkNEMzJcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGluZW5cIl0gPSBcIiNGQUYwRTZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibWFnZW50YVwiXSA9IFwiI0ZGMDBGRlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJtZWRpdW1hcXVhbWFyaW5lXCJdID0gXCIjNjZDREFBXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm1lZGl1bWJsdWVcIl0gPSBcIiMwMDAwQ0RcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibWVkaXVtb3JjaGlkXCJdID0gXCIjQkE1NUQzXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm1lZGl1bXB1cnBsZVwiXSA9IFwiIzkzNzBEQlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJtZWRpdW1zZWFncmVlblwiXSA9IFwiIzNDQjM3MVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJtZWRpdW1zbGF0ZWJsdWVcIl0gPSBcIiM3QjY4RUVcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibWVkaXVtc3ByaW5nZ3JlZW5cIl0gPSBcIiMwMEZBOUFcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibWVkaXVtdHVycXVvaXNlXCJdID0gXCIjNDhEMUNDXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm1lZGl1bXZpb2xldHJlZFwiXSA9IFwiI0M3MTU4NVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJtaWRuaWdodGJsdWVcIl0gPSBcIiMxOTE5NzBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibWludGNyZWFtXCJdID0gXCIjRjVGRkZBXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm1pc3R5cm9zZVwiXSA9IFwiI0ZGRTRFMVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJtb2NjYXNpblwiXSA9IFwiI0ZGRTRCNVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJuYXZham93aGl0ZVwiXSA9IFwiI0ZGREVBRFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJvbGRsYWNlXCJdID0gXCIjRkRGNUU2XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm9saXZlZHJhYlwiXSA9IFwiIzZCOEUyM1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJvcmFuZ2VyZWRcIl0gPSBcIiNGRjQ1MDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wib3JjaGlkXCJdID0gXCIjREE3MEQ2XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInBhbGVnb2xkZW5yb2RcIl0gPSBcIiNFRUU4QUFcIjtcbiAgICBDb2xvcktleXdvcmRzW1wicGFsZWdyZWVuXCJdID0gXCIjOThGQjk4XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInBhbGV0dXJxdW9pc2VcIl0gPSBcIiNBRkVFRUVcIjtcbiAgICBDb2xvcktleXdvcmRzW1wicGFsZXZpb2xldHJlZFwiXSA9IFwiI0RCNzA5M1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJwYXBheWF3aGlwXCJdID0gXCIjRkZFRkQ1XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInBlYWNocHVmZlwiXSA9IFwiI0ZGREFCOVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJwZXJ1XCJdID0gXCIjQ0Q4NTNGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInBpbmtcIl0gPSBcIiNGRkMwQ0JcIjtcbiAgICBDb2xvcktleXdvcmRzW1wicGx1bVwiXSA9IFwiI0REQTBERFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJwb3dkZXJibHVlXCJdID0gXCIjQjBFMEU2XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInJvc3licm93blwiXSA9IFwiI0JDOEY4RlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJyb3lhbGJsdWVcIl0gPSBcIiM0MTY5RTFcIjtcbiAgICBDb2xvcktleXdvcmRzW1wic2FkZGxlYnJvd25cIl0gPSBcIiM4QjQ1MTNcIjtcbiAgICBDb2xvcktleXdvcmRzW1wic2FsbW9uXCJdID0gXCIjRkE4MDcyXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInNhbmR5YnJvd25cIl0gPSBcIiNGNEE0NjBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wic2VhZ3JlZW5cIl0gPSBcIiMyRThCNTdcIjtcbiAgICBDb2xvcktleXdvcmRzW1wic2Vhc2hlbGxcIl0gPSBcIiNGRkY1RUVcIjtcbiAgICBDb2xvcktleXdvcmRzW1wic2llbm5hXCJdID0gXCIjQTA1MjJEXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInNreWJsdWVcIl0gPSBcIiM4N0NFRUJcIjtcbiAgICBDb2xvcktleXdvcmRzW1wic2xhdGVibHVlXCJdID0gXCIjNkE1QUNEXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInNsYXRlZ3JheVwiXSA9IFwiIzcwODA5MFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJzbGF0ZWdyZXlcIl0gPSBcIiM3MDgwOTBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wic25vd1wiXSA9IFwiI0ZGRkFGQVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJzcHJpbmdncmVlblwiXSA9IFwiIzAwRkY3RlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJzdGVlbGJsdWVcIl0gPSBcIiM0NjgyQjRcIjtcbiAgICBDb2xvcktleXdvcmRzW1widGFuXCJdID0gXCIjRDJCNDhDXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInRoaXN0bGVcIl0gPSBcIiNEOEJGRDhcIjtcbiAgICBDb2xvcktleXdvcmRzW1widG9tYXRvXCJdID0gXCIjRkY2MzQ3XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInR1cnF1b2lzZVwiXSA9IFwiIzQwRTBEMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJ2aW9sZXRcIl0gPSBcIiNFRTgyRUVcIjtcbiAgICBDb2xvcktleXdvcmRzW1wid2hlYXRcIl0gPSBcIiNGNURFQjNcIjtcbiAgICBDb2xvcktleXdvcmRzW1wid2hpdGVzbW9rZVwiXSA9IFwiI0Y1RjVGNVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJ5ZWxsb3dncmVlblwiXSA9IFwiIzlBQ0QzMlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJyZWJlY2NhcHVycGxlXCJdID0gXCIjNjYzMzk5XCI7XG59KShDb2xvcktleXdvcmRzIHx8IChDb2xvcktleXdvcmRzID0ge30pKTtcbmV4cG9ydCB2YXIgQ09MT1JfS0VZUyA9IE9iamVjdC5rZXlzKENvbG9yS2V5d29yZHMpO1xuZXhwb3J0IHZhciBDT0xPUl9QUk9QUyA9IHtcbiAgICBIRVg6IFsncicsICdnJywgJ2InLCAnYSddLFxuICAgIFJHQjogWydyJywgJ2cnLCAnYicsICdhJ10sXG4gICAgSFNMOiBbJ2gnLCAncycsICdsJywgJ2EnXSxcbiAgICBDTVlLOiBbJ2MnLCAnbScsICd5JywgJ2snLCAnYSddXG59O1xuZXhwb3J0IHZhciBWQUxJRF9DT0xPUl9PQkpFQ1RTID0ge1xuICAgIEJHUjogQ29sb3JNb2RlbC5SR0IsXG4gICAgQUJHUjogQ29sb3JNb2RlbC5SR0IsXG4gICAgSExTOiBDb2xvck1vZGVsLkhTTCxcbiAgICBBSExTOiBDb2xvck1vZGVsLkhTTCxcbiAgICBDS01ZOiBDb2xvck1vZGVsLkNNWUssXG4gICAgQUNLTVk6IENvbG9yTW9kZWwuQ01ZS1xufTtcbiIsInZhciBfYTtcbmltcG9ydCB7IENvbG9yTW9kZWwgfSBmcm9tICcuL2VudW1zJztcbmV4cG9ydCB2YXIgQ09MT1JSRUdTID0gKF9hID0ge30sXG4gICAgX2FbQ29sb3JNb2RlbC5IRVhdID0gL14jKD86KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKT98KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KT8pJC9pLFxuICAgIF9hW0NvbG9yTW9kZWwuUkdCXSA9IC9ecmdiYT9cXHMqXFwoXFxzKig/OigoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCslPylcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKyU/KSg/OlxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrKSk/fCgoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pKD86XFxzKlxcL1xccyooKD86XFxkKlxcLik/XFxkKyU/KSk/KVxccypcXCkkLyxcbiAgICBfYVtDb2xvck1vZGVsLkhTTF0gPSAvXmhzbGE/XFxzKlxcKFxccyooPzooLT8oPzpcXGQqXFwuKT9cXGQrKD86ZGVnfGdyYWR8cmFkfHR1cm4pPylcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKyklXFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCspJSg/OlxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrKSk/fCgtPyg/OlxcZCpcXC4pP1xcZCsoPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxccyooKD86XFxkKlxcLik/XFxkKyklXFxzKigoPzpcXGQqXFwuKT9cXGQrKSUoPzpcXHMqXFwvXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pKT8pXFxzKlxcKSQvLFxuICAgIF9hW0NvbG9yTW9kZWwuQ01ZS10gPSAvXig/OmRldmljZS1jbXlrfGNteWspXFxzKlxcKFxccyooPzooKD86XFxkKlxcLik/XFxkKyU/KVxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCslPylcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKyU/KSg/OlxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrKSk/fCgoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pKD86XFxzKlxcL1xccyooKD86XFxkKlxcLik/XFxkKyU/KSk/KVxccypcXCkkLyxcbiAgICBfYSk7XG5leHBvcnQgdmFyIEhTTF9IVUUgPSAvXigtPyg/OlxcZCpcXC4pP1xcZCspKCg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pJC87XG5leHBvcnQgdmFyIFBDRU5UID0gL14oXFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKSUkLztcbmV4cG9ydCB2YXIgSEVYID0gL14weChbYS1mXFxkXXsxLDJ9KSQvaTtcbmV4cG9ydCB2YXIgVEVNUExBVEVfVkFSID0gL1xceyhcXGQrKVxcfS9nO1xuIiwiZXhwb3J0IHZhciBFUlJPUlMgPSB7XG4gICAgTk9UX0FDQ0VQVEVEX1NUUklOR19JTlBVVDogJ1RoZSBwcm92aWRlZCBzdHJpbmcgY29sb3IgZG9lc25cXCd0IGhhdmUgYSBjb3JyZWN0IGZvcm1hdCcsXG4gICAgTk9UX0FDQ0VQVEVEX09CSkVDVF9JTlBVVDogJ1RoZSBwcm92aWRlZCBjb2xvciBvYmplY3QgZG9lc25cXCd0IGhhdmUgdGhlIHByb3BlciBrZXlzIG9yIGZvcm1hdCdcbn07XG4iLCJpbXBvcnQgeyBNQVhfREVDSU1BTFMgfSBmcm9tICcuL251bWJlcnMnO1xuZXhwb3J0IHZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gICAgZGVjaW1hbHM6IE1BWF9ERUNJTUFMU1xufTtcbiIsImV4cG9ydCAqIGZyb20gJy4vbnVtYmVycyc7XG5leHBvcnQgKiBmcm9tICcuL2VudW1zJztcbmV4cG9ydCAqIGZyb20gJy4vcmVnZXhwcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycyc7XG5leHBvcnQgKiBmcm9tICcuL29wdGlvbnMnO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbmltcG9ydCB7IFBDRU5ULCBIRVgsIE1BWF9ERUNJTUFMUywgREVGQVVMVF9PUFRJT05TIH0gZnJvbSAnI2NvbnN0YW50cyc7XG5leHBvcnQgdmFyIGhhc1Byb3AgPSBmdW5jdGlvbiAob2JqLCBwcm9wKSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTsgfTtcbmV4cG9ydCB2YXIgcGVyY2VudE51bWJlciA9IGZ1bmN0aW9uIChwZXJjZW50KSB7XG4gICAgcmV0dXJuICtcIlwiLmNvbmNhdChwZXJjZW50KS5yZXBsYWNlKFBDRU5ULCAnJDEnKTtcbn07XG5leHBvcnQgdmFyIHBlcmNlbnQgPSBmdW5jdGlvbiAocGVyY2VudCkgeyByZXR1cm4gUENFTlQudGVzdChcIlwiLmNvbmNhdChwZXJjZW50KSlcbiAgICA/IHBlcmNlbnROdW1iZXIocGVyY2VudClcbiAgICA6IE1hdGgubWluKCtwZXJjZW50LCAxMDApOyB9O1xuZXhwb3J0IHZhciBnZXRERUMgPSBmdW5jdGlvbiAoaGV4KSB7XG4gICAgaWYgKGhleC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaGV4ICs9IGhleDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KGhleCwgMTYpO1xufTtcbmV4cG9ydCB2YXIgZ2V0SEVYID0gZnVuY3Rpb24gKG51bWJlcikge1xuICAgIHZhciBoZXggPSByb3VuZChudW1iZXIsIDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChoZXgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBcIjB4MFwiLmNvbmNhdChoZXgpO1xuICAgIH1cbiAgICByZXR1cm4gXCIweFwiLmNvbmNhdChoZXgpO1xufTtcbmV4cG9ydCB2YXIgdG9IRVggPSBmdW5jdGlvbiAoaCkge1xuICAgIHZhciBoZXggPSByb3VuZChoLCAwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBoZXggPSBcIjBcIi5jb25jYXQoaGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGhleDtcbn07XG5leHBvcnQgdmFyIGdldEJhc2UyNTVOdW1iZXIgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKSB7XG4gICAgaWYgKGFscGhhID09PSB2b2lkIDApIHsgYWxwaGEgPSBmYWxzZTsgfVxuICAgIGlmICghYWxwaGEgJiYgUENFTlQudGVzdChjb2xvcikpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKDI1NSAqIHBlcmNlbnROdW1iZXIoY29sb3IpIC8gMTAwLCAyNTUpO1xuICAgIH1cbiAgICBpZiAoSEVYLnRlc3QoY29sb3IpKSB7XG4gICAgICAgIGlmIChjb2xvci5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNvbG9yICs9IGNvbG9yLnNsaWNlKC0xKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxwaGFcbiAgICAgICAgICAgID8gcm91bmQoY29sb3IpIC8gMjU1XG4gICAgICAgICAgICA6IHJvdW5kKGNvbG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgubWluKCtjb2xvciwgYWxwaGEgPyAxIDogMjU1KTtcbn07XG5leHBvcnQgdmFyIGdldENNWUtOdW1iZXIgPSBmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJuIE1hdGgubWluKFBDRU5ULnRlc3QoY29sb3IpID8gcGVyY2VudE51bWJlcihjb2xvcikgLyAxMDAgOiArY29sb3IsIDEpOyB9O1xuZXhwb3J0IHZhciBnZXRPcmRlcmVkQXJyYXlTdHJpbmcgPSBmdW5jdGlvbiAoa2V5cykgeyByZXR1cm4gX19zcHJlYWRBcnJheShbXSwga2V5cywgdHJ1ZSkuc29ydCgpLmpvaW4oJycpLnRvVXBwZXJDYXNlKCk7IH07XG5leHBvcnQgdmFyIHJvdW5kID0gZnVuY3Rpb24gKHZhbHVlLCBkZWNpbWFscykge1xuICAgIGlmIChkZWNpbWFscyA9PT0gdm9pZCAwKSB7IGRlY2ltYWxzID0gTUFYX0RFQ0lNQUxTOyB9XG4gICAgdmFyIGV4cCA9IE1hdGgucG93KDEwLCBkZWNpbWFscyk7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoK3ZhbHVlICogZXhwKSAvIGV4cDtcbn07XG5leHBvcnQgdmFyIG1pbm1heCA9IGZ1bmN0aW9uIChuLCBtaW4sIG1heCkgeyByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihuLCBtYXgpKTsgfTtcbmV4cG9ydCB2YXIgZ3JhZGVzID0gZnVuY3Rpb24gKHJhZGlhbikgeyByZXR1cm4gcmFkaWFuICogMTgwIC8gTWF0aC5QSTsgfTtcbmV4cG9ydCB2YXIgcGFyc2VPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsgcmV0dXJuIChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TKSwgb3B0aW9ucykpOyB9O1xuIiwiaW1wb3J0IHsgcm91bmQgfSBmcm9tICcjaGVscGVycyc7XG5leHBvcnQgdmFyIGh1ZVRvUkdCID0gZnVuY3Rpb24gKHQxLCB0MiwgaHVlKSB7XG4gICAgaWYgKGh1ZSA8IDApIHtcbiAgICAgICAgaHVlICs9IDY7XG4gICAgfVxuICAgIGlmIChodWUgPj0gNikge1xuICAgICAgICBodWUgLT0gNjtcbiAgICB9XG4gICAgaWYgKGh1ZSA8IDEpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKCgodDIgLSB0MSkgKiBodWUgKyB0MSkgKiAyNTUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChodWUgPCAzKSB7XG4gICAgICAgIHJldHVybiByb3VuZCh0MiAqIDI1NSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGh1ZSA8IDQpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKCgodDIgLSB0MSkgKiAoNCAtIGh1ZSkgKyB0MSkgKiAyNTUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKHQxICogMjU1KTtcbiAgICB9XG59O1xuZXhwb3J0IHZhciBoc2xUb1JHQiA9IGZ1bmN0aW9uIChoLCBzLCBsKSB7XG4gICAgaCAvPSA2MDtcbiAgICBzIC89IDEwMDtcbiAgICBsIC89IDEwMDtcbiAgICB2YXIgdDIgPSAobCA8PSAuNSlcbiAgICAgICAgPyBsICogKHMgKyAxKVxuICAgICAgICA6IGwgKyBzIC0gKGwgKiBzKTtcbiAgICB2YXIgdDEgPSBsICogMiAtIHQyO1xuICAgIHZhciByID0gaHVlVG9SR0IodDEsIHQyLCBoICsgMik7XG4gICAgdmFyIGcgPSBodWVUb1JHQih0MSwgdDIsIGgpO1xuICAgIHZhciBiID0gaHVlVG9SR0IodDEsIHQyLCBoIC0gMik7XG4gICAgcmV0dXJuIHsgcjogciwgZzogZywgYjogYiB9O1xufTtcbmV4cG9ydCB2YXIgY215a1RvUkdCID0gZnVuY3Rpb24gKGMsIG0sIHksIGspIHtcbiAgICBrID0gMSAtIGs7XG4gICAgdmFyIHIgPSByb3VuZCgyNTUgKiAoMSAtIGMpICogayk7XG4gICAgdmFyIGcgPSByb3VuZCgyNTUgKiAoMSAtIG0pICogayk7XG4gICAgdmFyIGIgPSByb3VuZCgyNTUgKiAoMSAtIHkpICogayk7XG4gICAgcmV0dXJuIHsgcjogciwgZzogZywgYjogYiB9O1xufTtcbmV4cG9ydCB2YXIgcmdiVG9DTVlLID0gZnVuY3Rpb24gKHIsIGcsIGIpIHtcbiAgICByIC89IDI1NTtcbiAgICBnIC89IDI1NTtcbiAgICBiIC89IDI1NTtcbiAgICB2YXIgayA9IDEgLSBNYXRoLm1heChyLCBnLCBiKTtcbiAgICB2YXIgazEgPSAxIC0gaztcbiAgICB2YXIgYyA9IGsxICYmIChrMSAtIHIpIC8gazE7XG4gICAgdmFyIG0gPSBrMSAmJiAoazEgLSBnKSAvIGsxO1xuICAgIHZhciB5ID0gazEgJiYgKGsxIC0gYikgLyBrMTtcbiAgICByZXR1cm4ge1xuICAgICAgICBjOiByb3VuZChjICogMTAwKSxcbiAgICAgICAgbTogcm91bmQobSAqIDEwMCksXG4gICAgICAgIHk6IHJvdW5kKHkgKiAxMDApLFxuICAgICAgICBrOiByb3VuZChrICogMTAwKVxuICAgIH07XG59O1xuZXhwb3J0IHZhciByZ2JUb0hTTCA9IGZ1bmN0aW9uIChyLCBnLCBiLCBhKSB7XG4gICAgaWYgKGEgPT09IHZvaWQgMCkgeyBhID0gMTsgfVxuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuICAgIGEgPSBNYXRoLm1pbihhLCAxKTtcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gICAgdmFyIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICAgIHZhciBkID0gbWF4IC0gbWluO1xuICAgIHZhciBoID0gMDtcbiAgICB2YXIgcyA9IDA7XG4gICAgdmFyIGwgPSAobWF4ICsgbWluKSAvIDI7XG4gICAgaWYgKGQgIT09IDApIHtcbiAgICAgICAgc3dpdGNoIChtYXgpIHtcbiAgICAgICAgICAgIGNhc2UgcjpcbiAgICAgICAgICAgICAgICBoID0gKChnIC0gYikgLyBkKSAlIDY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGc6XG4gICAgICAgICAgICAgICAgaCA9IChiIC0gcikgLyBkICsgMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYjpcbiAgICAgICAgICAgICAgICBoID0gKHIgLSBnKSAvIGQgKyA0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGggPSByb3VuZChoICogNjApO1xuICAgICAgICBpZiAoaCA8IDApIHtcbiAgICAgICAgICAgIGggKz0gMzYwO1xuICAgICAgICB9XG4gICAgICAgIHMgPSBkIC8gKDEgLSBNYXRoLmFicygyICogbCAtIDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaDogaCxcbiAgICAgICAgczogcm91bmQocyAqIDEwMCksXG4gICAgICAgIGw6IHJvdW5kKGwgKiAxMDApLFxuICAgICAgICBhOiBhXG4gICAgfTtcbn07XG5leHBvcnQgdmFyIHJnYlRvUllCID0gZnVuY3Rpb24gKHIsIGcsIGIpIHtcbiAgICB2YXIgSXcgPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICB2YXIgSWIgPSBNYXRoLm1pbigyNTUgLSByLCAyNTUgLSBnLCAyNTUgLSBiKTtcbiAgICB2YXIgclJHQiA9IHIgLSBJdztcbiAgICB2YXIgZ1JHQiA9IGcgLSBJdztcbiAgICB2YXIgYlJHQiA9IGIgLSBJdztcbiAgICB2YXIgbWluUkcgPSBNYXRoLm1pbihyUkdCLCBnUkdCKTtcbiAgICB2YXIgclJZQiA9IHJSR0IgLSBtaW5SRztcbiAgICB2YXIgeVJZQiA9IChnUkdCICsgbWluUkcpIC8gMjtcbiAgICB2YXIgYlJZQiA9IChiUkdCICsgZ1JHQiAtIG1pblJHKSAvIDI7XG4gICAgdmFyIG4gPSBNYXRoLm1heChyUllCLCB5UllCLCBiUllCKSAvIE1hdGgubWF4KHJSR0IsIGdSR0IsIGJSR0IpO1xuICAgIHZhciBOID0gaXNOYU4obikgfHwgbiA9PT0gSW5maW5pdHkgfHwgbiA8PSAwID8gMSA6IG47XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcjogclJZQiAvIE4gKyBJYixcbiAgICAgICAgeTogeVJZQiAvIE4gKyBJYixcbiAgICAgICAgYjogYlJZQiAvIE4gKyBJYlxuICAgIH07XG59O1xuZXhwb3J0IHZhciByeWJUb1JHQiA9IGZ1bmN0aW9uIChyLCB5LCBiKSB7XG4gICAgdmFyIEl3ID0gTWF0aC5taW4ociwgeSwgYik7XG4gICAgdmFyIEliID0gTWF0aC5taW4oMjU1IC0gciwgMjU1IC0geSwgMjU1IC0gYik7XG4gICAgdmFyIHJSWUIgPSByIC0gSXc7XG4gICAgdmFyIHlSWUIgPSB5IC0gSXc7XG4gICAgdmFyIGJSWUIgPSBiIC0gSXc7XG4gICAgdmFyIG1pbllCID0gTWF0aC5taW4oeVJZQiwgYlJZQik7XG4gICAgdmFyIHJSR0IgPSByUllCICsgeVJZQiAtIG1pbllCO1xuICAgIHZhciBnUkdCID0geVJZQiArIG1pbllCO1xuICAgIHZhciBiUkdCID0gMiAqIChiUllCIC0gbWluWUIpO1xuICAgIHZhciBuID0gTWF0aC5tYXgoclJHQiwgZ1JHQiwgYlJHQikgLyBNYXRoLm1heChyUllCLCB5UllCLCBiUllCKTtcbiAgICB2YXIgTiA9IGlzTmFOKG4pIHx8IG4gPT09IEluZmluaXR5IHx8IG4gPD0gMCA/IDEgOiBuO1xuICAgIHJldHVybiB7XG4gICAgICAgIHI6IHJSR0IgLyBOICsgSWIsXG4gICAgICAgIGc6IGdSR0IgLyBOICsgSWIsXG4gICAgICAgIGI6IGJSR0IgLyBOICsgSWJcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgaHVlUllCID0gZnVuY3Rpb24gKGh1ZSwgdG9SWUIpIHtcbiAgICBpZiAoaHVlIDwgMClcbiAgICAgICAgaHVlICs9IDM2MDtcbiAgICBpZiAoaHVlID4gMzYwKVxuICAgICAgICBodWUgLT0gMzYwO1xuICAgIGlmIChodWUgPT09IDM2MCB8fCBodWUgPT09IDApXG4gICAgICAgIHJldHVybiBodWU7XG4gICAgdmFyIG1hcDEgPSBbXG4gICAgICAgIFswLCAxMjBdLFxuICAgICAgICBbMTIwLCAxODBdLFxuICAgICAgICBbMTgwLCAyNDBdLFxuICAgICAgICBbMjQwLCAzNjBdXG4gICAgXTtcbiAgICB2YXIgbWFwMiA9IFtcbiAgICAgICAgWzAsIDYwXSxcbiAgICAgICAgWzYwLCAxMjBdLFxuICAgICAgICBbMTIwLCAyNDBdLFxuICAgICAgICBbMjQwLCAzNjBdXG4gICAgXTtcbiAgICB2YXIgZnJvbSA9IHRvUllCID8gbWFwMSA6IG1hcDI7XG4gICAgdmFyIHRvID0gdG9SWUIgPyBtYXAyIDogbWFwMTtcbiAgICB2YXIgYSA9IDA7XG4gICAgdmFyIGIgPSAwO1xuICAgIHZhciBjID0gMDtcbiAgICB2YXIgZCA9IDA7XG4gICAgZnJvbS5maW5kKGZ1bmN0aW9uIChhcnIsIGluZGV4KSB7XG4gICAgICAgIGlmIChodWUgPj0gYXJyWzBdICYmIGh1ZSA8IGFyclsxXSkge1xuICAgICAgICAgICAgYSA9IGFyclswXTtcbiAgICAgICAgICAgIGIgPSBhcnJbMV07XG4gICAgICAgICAgICBjID0gdG9baW5kZXhdWzBdO1xuICAgICAgICAgICAgZCA9IHRvW2luZGV4XVsxXTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYyArIChodWUgLSBhKSAqICgoZCAtIGMpIC8gKGIgLSBhKSk7XG59O1xuIiwidmFyIF9hO1xuaW1wb3J0IHsgQ29sb3JNb2RlbCwgVEVNUExBVEVfVkFSLCBDT0xPUl9QUk9QUywgVkFMSURfQ09MT1JfT0JKRUNUUyB9IGZyb20gJyNjb25zdGFudHMnO1xuaW1wb3J0IHsgdG9IRVgsIHJvdW5kLCBnZXRPcmRlcmVkQXJyYXlTdHJpbmcgfSBmcm9tICcjaGVscGVycyc7XG52YXIgcHJlcGFyZUNvbG9yRm9yQ3NzID0gZnVuY3Rpb24gKGNvbG9yLCBpc0hleCkge1xuICAgIGlmIChpc0hleCA9PT0gdm9pZCAwKSB7IGlzSGV4ID0gZmFsc2U7IH1cbiAgICB2YXIgcHJvcHMgPSBnZXRPcmRlcmVkQXJyYXlTdHJpbmcoT2JqZWN0LmtleXMoY29sb3IpKTtcbiAgICB2YXIgbW9kZWwgPSBWQUxJRF9DT0xPUl9PQkpFQ1RTW3Byb3BzXTtcbiAgICB2YXIga2V5cyA9IENPTE9SX1BST1BTW21vZGVsXTtcbiAgICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGNvbG9yW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoaXNIZXgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0b0hFWChyb3VuZCh2YWx1ZSwgMCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKTtcbn07XG52YXIgZ2V0UmVzdWx0RnJvbVRlbXBsYXRlID0gZnVuY3Rpb24gKHRlbXBsYXRlLCB2YXJzKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoVEVNUExBVEVfVkFSLCBmdW5jdGlvbiAoX19tYXRjaCwgaW5kZXhTdHIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gK2luZGV4U3RyIC0gMTtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHZhcnNbaW5kZXhdKTtcbiAgICB9KTtcbn07XG5leHBvcnQgdmFyIENTUyA9IChfYSA9IHt9LFxuICAgIF9hW0NvbG9yTW9kZWwuSEVYXSA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICB2YXIgdmFsdWVzID0gcHJlcGFyZUNvbG9yRm9yQ3NzKGNvbG9yLCB0cnVlKTtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gdmFsdWVzLmxlbmd0aCA9PT0gNFxuICAgICAgICAgICAgPyAnI3sxfXsyfXszfXs0fSdcbiAgICAgICAgICAgIDogJyN7MX17Mn17M30nO1xuICAgICAgICByZXR1cm4gZ2V0UmVzdWx0RnJvbVRlbXBsYXRlKHRlbXBsYXRlLCB2YWx1ZXMpO1xuICAgIH0sXG4gICAgX2FbQ29sb3JNb2RlbC5SR0JdID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHZhciB2YWx1ZXMgPSBwcmVwYXJlQ29sb3JGb3JDc3MoY29sb3IpO1xuICAgICAgICB2YXIgdGVtcGxhdGUgPSB2YWx1ZXMubGVuZ3RoID09PSA0XG4gICAgICAgICAgICA/ICdyZ2JhKHsxfSx7Mn0sezN9LHs0fSknXG4gICAgICAgICAgICA6ICdyZ2IoezF9LHsyfSx7M30pJztcbiAgICAgICAgcmV0dXJuIGdldFJlc3VsdEZyb21UZW1wbGF0ZSh0ZW1wbGF0ZSwgdmFsdWVzKTtcbiAgICB9LFxuICAgIF9hW0NvbG9yTW9kZWwuSFNMXSA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICB2YXIgdmFsdWVzID0gcHJlcGFyZUNvbG9yRm9yQ3NzKGNvbG9yKTtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gdmFsdWVzLmxlbmd0aCA9PT0gNFxuICAgICAgICAgICAgPyAnaHNsYSh7MX0sezJ9JSx7M30lLHs0fSknXG4gICAgICAgICAgICA6ICdoc2woezF9LHsyfSUsezN9JSknO1xuICAgICAgICByZXR1cm4gZ2V0UmVzdWx0RnJvbVRlbXBsYXRlKHRlbXBsYXRlLCB2YWx1ZXMpO1xuICAgIH0sXG4gICAgX2FbQ29sb3JNb2RlbC5DTVlLXSA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICB2YXIgdmFsdWVzID0gcHJlcGFyZUNvbG9yRm9yQ3NzKGNvbG9yKTtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gdmFsdWVzLmxlbmd0aCA9PT0gNVxuICAgICAgICAgICAgPyAnY215ayh7MX0lLHsyfSUsezN9JSx7NH0lLHs1fSknXG4gICAgICAgICAgICA6ICdjbXlrKHsxfSUsezJ9JSx7M30lLHs0fSUpJztcbiAgICAgICAgcmV0dXJuIGdldFJlc3VsdEZyb21UZW1wbGF0ZSh0ZW1wbGF0ZSwgdmFsdWVzKTtcbiAgICB9LFxuICAgIF9hKTtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tLCBwYWNrKSB7XG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn07XG52YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuaW1wb3J0IHsgSEVYLCBQQ0VOVCwgQ29sb3JNb2RlbCwgTWl4LCBDb2xvcktleXdvcmRzLCBDT0xPUlJFR1MsIENPTE9SX0tFWVMsIEVSUk9SUywgSFNMX0hVRSwgVkFMSURfQ09MT1JfT0JKRUNUUyB9IGZyb20gJyNjb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0T3JkZXJlZEFycmF5U3RyaW5nLCBnZXRERUMsIGdldEhFWCwgZ2V0QmFzZTI1NU51bWJlciwgZ2V0Q01ZS051bWJlciwgaGFzUHJvcCwgcGVyY2VudCwgcGVyY2VudE51bWJlciwgcm91bmQsIG1pbm1heCwgZ3JhZGVzLCBwYXJzZU9wdGlvbnMgfSBmcm9tICcjaGVscGVycyc7XG5pbXBvcnQgeyByZ2JUb0hTTCwgaHNsVG9SR0IsIGNteWtUb1JHQiwgcmdiVG9DTVlLLCByZ2JUb1JZQiwgcnliVG9SR0IsIGh1ZVJZQiB9IGZyb20gJyNjb2xvci90cmFuc2xhdG9ycyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICcjY29sb3IvY3NzJztcbnZhciBwaTIgPSAzNjA7XG5leHBvcnQgdmFyIG5vcm1hbGl6ZUh1ZSA9IGZ1bmN0aW9uIChodWUpIHtcbiAgICBpZiAodHlwZW9mIGh1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBodWUubWF0Y2goSFNMX0hVRSk7XG4gICAgICAgIHZhciB2YWx1ZSA9ICttYXRjaGVzWzFdO1xuICAgICAgICB2YXIgdW5pdHMgPSBtYXRjaGVzWzJdO1xuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICdyYWQnOlxuICAgICAgICAgICAgICAgIGh1ZSA9IHJvdW5kKGdyYWRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndHVybic6XG4gICAgICAgICAgICAgICAgaHVlID0gcm91bmQodmFsdWUgKiAzNjApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGVnJzpcbiAgICAgICAgICAgIGNhc2UgJ2dyYWQnOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBodWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaHVlID4gMzYwIHx8IGh1ZSA8IDApIHtcbiAgICAgICAgaHVlIC09IE1hdGguZmxvb3IoaHVlIC8gcGkyKSAqIHBpMjtcbiAgICB9XG4gICAgcmV0dXJuIGh1ZTtcbn07XG5leHBvcnQgdmFyIG5vcm1hbGl6ZUFscGhhID0gZnVuY3Rpb24gKGFscGhhKSB7XG4gICAgaWYgKHR5cGVvZiBhbHBoYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKFBDRU5ULnRlc3QoYWxwaGEpKSB7XG4gICAgICAgICAgICBhbHBoYSA9IHBlcmNlbnROdW1iZXIoYWxwaGEpIC8gMTAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWxwaGEgPSArYWxwaGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChpc05hTigrYWxwaGEpIHx8IGFscGhhID4gMSkgPyAxIDogcm91bmQoYWxwaGEpO1xufTtcbnZhciBoYXJtb255ID0gZnVuY3Rpb24gKGNvbG9yLCBhbmdsZXMsIG1vZGUpIHtcbiAgICByZXR1cm4gYW5nbGVzLnJlZHVjZShmdW5jdGlvbiAoYXJyLCBudW0pIHtcbiAgICAgICAgcmV0dXJuIChfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIGFyciwgdHJ1ZSksIFtcbiAgICAgICAgICAgIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb2xvciksIHsgaDogbW9kZSA9PT0gTWl4LkFERElUSVZFXG4gICAgICAgICAgICAgICAgICAgID8gbm9ybWFsaXplSHVlKGNvbG9yLmggKyBudW0pXG4gICAgICAgICAgICAgICAgICAgIDogbm9ybWFsaXplSHVlKGh1ZVJZQihodWVSWUIoY29sb3IuaCwgZmFsc2UpICsgbnVtLCB0cnVlKSkgfSlcbiAgICAgICAgXSwgZmFsc2UpKTtcbiAgICB9LCBbX19hc3NpZ24oe30sIGNvbG9yKV0pO1xufTtcbmV4cG9ydCB2YXIgYW5hbG9nb3VzID0gZnVuY3Rpb24gKGNvbG9yLCBtb2RlKSB7IHJldHVybiBoYXJtb255KGNvbG9yLCBbMzAsIC0zMF0sIG1vZGUpOyB9O1xuZXhwb3J0IHZhciBjb21wbGVtZW50YXJ5ID0gZnVuY3Rpb24gKGNvbG9yLCBtb2RlKSB7IHJldHVybiBoYXJtb255KGNvbG9yLCBbMTgwXSwgbW9kZSk7IH07XG5leHBvcnQgdmFyIHNwbGl0Q29tcGxlbWVudGFyeSA9IGZ1bmN0aW9uIChjb2xvciwgbW9kZSkgeyByZXR1cm4gaGFybW9ueShjb2xvciwgWzE1MCwgLTE1MF0sIG1vZGUpOyB9O1xuZXhwb3J0IHZhciB0cmlhZGljID0gZnVuY3Rpb24gKGNvbG9yLCBtb2RlKSB7IHJldHVybiBoYXJtb255KGNvbG9yLCBbMTIwLCAtMTIwXSwgbW9kZSk7IH07XG5leHBvcnQgdmFyIHRldHJhZGljID0gZnVuY3Rpb24gKGNvbG9yLCBtb2RlKSB7IHJldHVybiBoYXJtb255KGNvbG9yLCBbNjAsIC0xMjAsIDE4MF0sIG1vZGUpOyB9O1xuZXhwb3J0IHZhciBzcXVhcmUgPSBmdW5jdGlvbiAoY29sb3IsIG1vZGUpIHsgcmV0dXJuIGhhcm1vbnkoY29sb3IsIFs5MCwgLTkwLCAxODBdLCBtb2RlKTsgfTtcbnZhciBnZXRDb2xvck1vZGVsRnJvbVN0cmluZyA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgIHZhciBtb2RlbDtcbiAgICBPYmplY3Qua2V5cyhDb2xvck1vZGVsKS5zb21lKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHZhciByZWcgPSBDT0xPUlJFR1NbcF07XG4gICAgICAgIGlmIChyZWcudGVzdChjb2xvcikpIHtcbiAgICAgICAgICAgIG1vZGVsID0gcDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFtb2RlbCAmJlxuICAgICAgICAhIX5DT0xPUl9LRVlTLmluZGV4T2YoY29sb3IpKSB7XG4gICAgICAgIG1vZGVsID0gQ29sb3JNb2RlbC5IRVg7XG4gICAgfVxuICAgIGlmICghbW9kZWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SUy5OT1RfQUNDRVBURURfU1RSSU5HX0lOUFVUKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsO1xufTtcbnZhciBnZXRDb2xvck1vZGVsRnJvbU9iamVjdCA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgIHZhciBtb2RlbDtcbiAgICB2YXIgaW52YWxpZCA9IGZhbHNlO1xuICAgIHZhciBwcm9wcyA9IGdldE9yZGVyZWRBcnJheVN0cmluZyhPYmplY3Qua2V5cyhjb2xvcikpO1xuICAgIGlmIChWQUxJRF9DT0xPUl9PQkpFQ1RTW3Byb3BzXSkge1xuICAgICAgICBtb2RlbCA9IFZBTElEX0NPTE9SX09CSkVDVFNbcHJvcHNdO1xuICAgIH1cbiAgICBpZiAobW9kZWwgJiYgbW9kZWwgPT09IENvbG9yTW9kZWwuUkdCKSB7XG4gICAgICAgIHZhciBoYXNJbnZhbGlkSGV4ID0gT2JqZWN0LmVudHJpZXMoY29sb3IpLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiAhSEVYLnRlc3QoXCJcIi5jb25jYXQoaXRlbVsxXSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGhhc0ludmFsaWRSZWdiID0gT2JqZWN0LmVudHJpZXMoY29sb3IpLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiAhKFBDRU5ULnRlc3QoXCJcIi5jb25jYXQoaXRlbVsxXSkpIHx8XG4gICAgICAgICAgICAgICAgKCFIRVgudGVzdChcIlwiLmNvbmNhdChpdGVtWzFdKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKCtpdGVtWzFdKSAmJlxuICAgICAgICAgICAgICAgICAgICAraXRlbVsxXSA8PSAyNTUpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChoYXNJbnZhbGlkSGV4ICYmIGhhc0ludmFsaWRSZWdiKSB7XG4gICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc0ludmFsaWRIZXgpIHtcbiAgICAgICAgICAgIG1vZGVsID0gQ29sb3JNb2RlbC5IRVg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFtb2RlbCB8fCBpbnZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUlMuTk9UX0FDQ0VQVEVEX09CSkVDVF9JTlBVVCk7XG4gICAgfVxuICAgIHJldHVybiBtb2RlbDtcbn07XG5leHBvcnQgdmFyIGdldENvbG9yTW9kZWwgPSBmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJuIHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZydcbiAgICA/IGdldENvbG9yTW9kZWxGcm9tU3RyaW5nKGNvbG9yKVxuICAgIDogZ2V0Q29sb3JNb2RlbEZyb21PYmplY3QoY29sb3IpOyB9O1xuZXhwb3J0IHZhciBnZXRSR0JPYmplY3RGcm9tU3RyaW5nID0gKF9hID0ge30sXG4gICAgX2FbQ29sb3JNb2RlbC5IRVhdID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHZhciBjb2xvclN0ciA9ICF+Q09MT1JfS0VZUy5pbmRleE9mKGNvbG9yKVxuICAgICAgICAgICAgPyBjb2xvclxuICAgICAgICAgICAgOiBDb2xvcktleXdvcmRzW2NvbG9yXTtcbiAgICAgICAgdmFyIG1hdGNoID0gY29sb3JTdHIubWF0Y2goQ09MT1JSRUdTLkhFWCk7XG4gICAgICAgIHZhciBvYmplY3QgPSB7XG4gICAgICAgICAgICByOiBnZXRERUMobWF0Y2hbMV0gfHwgbWF0Y2hbNV0pLFxuICAgICAgICAgICAgZzogZ2V0REVDKG1hdGNoWzJdIHx8IG1hdGNoWzZdKSxcbiAgICAgICAgICAgIGI6IGdldERFQyhtYXRjaFszXSB8fCBtYXRjaFs3XSlcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGEgPSBtYXRjaFs0XSB8fCBtYXRjaFs4XTtcbiAgICAgICAgaWYgKGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb2JqZWN0LmEgPSBnZXRERUMoYSkgLyAyNTU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9LFxuICAgIF9hW0NvbG9yTW9kZWwuUkdCXSA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICB2YXIgbWF0Y2ggPSBjb2xvci5tYXRjaChDT0xPUlJFR1MuUkdCKTtcbiAgICAgICAgdmFyIHIgPSBnZXRCYXNlMjU1TnVtYmVyKG1hdGNoWzFdIHx8IG1hdGNoWzVdKTtcbiAgICAgICAgdmFyIGcgPSBnZXRCYXNlMjU1TnVtYmVyKG1hdGNoWzJdIHx8IG1hdGNoWzZdKTtcbiAgICAgICAgdmFyIGIgPSBnZXRCYXNlMjU1TnVtYmVyKG1hdGNoWzNdIHx8IG1hdGNoWzddKTtcbiAgICAgICAgdmFyIGEgPSBtYXRjaFs0XSB8fCBtYXRjaFs4XTtcbiAgICAgICAgdmFyIG9iamVjdCA9IHtcbiAgICAgICAgICAgIHI6IE1hdGgubWluKHIsIDI1NSksXG4gICAgICAgICAgICBnOiBNYXRoLm1pbihnLCAyNTUpLFxuICAgICAgICAgICAgYjogTWF0aC5taW4oYiwgMjU1KVxuICAgICAgICB9O1xuICAgICAgICBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvYmplY3QuYSA9IG5vcm1hbGl6ZUFscGhhKGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfSxcbiAgICBfYVtDb2xvck1vZGVsLkhTTF0gPSBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gY29sb3IubWF0Y2goQ09MT1JSRUdTLkhTTCk7XG4gICAgICAgIHZhciBoID0gbm9ybWFsaXplSHVlKG1hdGNoWzFdIHx8IG1hdGNoWzVdKTtcbiAgICAgICAgdmFyIHMgPSBwZXJjZW50KG1hdGNoWzJdIHx8IG1hdGNoWzZdKTtcbiAgICAgICAgdmFyIGwgPSBwZXJjZW50KG1hdGNoWzNdIHx8IG1hdGNoWzddKTtcbiAgICAgICAgdmFyIGEgPSBtYXRjaFs0XSB8fCBtYXRjaFs4XTtcbiAgICAgICAgdmFyIHJnYiA9IGhzbFRvUkdCKGgsIHMsIGwpO1xuICAgICAgICBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZ2IuYSA9IG5vcm1hbGl6ZUFscGhhKGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfSxcbiAgICBfYVtDb2xvck1vZGVsLkNNWUtdID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IGNvbG9yLm1hdGNoKENPTE9SUkVHUy5DTVlLKTtcbiAgICAgICAgdmFyIGMgPSBnZXRDTVlLTnVtYmVyKG1hdGNoWzFdIHx8IG1hdGNoWzZdKTtcbiAgICAgICAgdmFyIG0gPSBnZXRDTVlLTnVtYmVyKG1hdGNoWzJdIHx8IG1hdGNoWzddKTtcbiAgICAgICAgdmFyIHkgPSBnZXRDTVlLTnVtYmVyKG1hdGNoWzNdIHx8IG1hdGNoWzhdKTtcbiAgICAgICAgdmFyIGsgPSBnZXRDTVlLTnVtYmVyKG1hdGNoWzRdIHx8IG1hdGNoWzldKTtcbiAgICAgICAgdmFyIGEgPSBtYXRjaFs1XSB8fCBtYXRjaFsxMF07XG4gICAgICAgIHZhciByZ2IgPSBjbXlrVG9SR0IoYywgbSwgeSwgayk7XG4gICAgICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJnYi5hID0gbm9ybWFsaXplQWxwaGEoYSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9LFxuICAgIF9hKTtcbmV4cG9ydCB2YXIgZ2V0UkdCT2JqZWN0RnJvbU9iamVjdCA9IChfYiA9IHt9LFxuICAgIF9iW0NvbG9yTW9kZWwuSEVYXSA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICB2YXIgb2JqZWN0ID0ge1xuICAgICAgICAgICAgcjogZ2V0QmFzZTI1NU51bWJlcihcIlwiLmNvbmNhdChjb2xvci5yKSksXG4gICAgICAgICAgICBnOiBnZXRCYXNlMjU1TnVtYmVyKFwiXCIuY29uY2F0KGNvbG9yLmcpKSxcbiAgICAgICAgICAgIGI6IGdldEJhc2UyNTVOdW1iZXIoXCJcIi5jb25jYXQoY29sb3IuYikpXG4gICAgICAgIH07XG4gICAgICAgIGlmIChoYXNQcm9wKGNvbG9yLCAnYScpKSB7XG4gICAgICAgICAgICBvYmplY3QuYSA9IE1hdGgubWluKGdldEJhc2UyNTVOdW1iZXIoXCJcIi5jb25jYXQoY29sb3IuYSksIHRydWUpLCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0sXG4gICAgX2JbQ29sb3JNb2RlbC5SR0JdID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkhFWChjb2xvcik7XG4gICAgfSxcbiAgICBfYltDb2xvck1vZGVsLkhTTF0gPSBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgdmFyIHMgPSBwZXJjZW50KFwiXCIuY29uY2F0KGNvbG9yLnMpKTtcbiAgICAgICAgdmFyIGwgPSBwZXJjZW50KFwiXCIuY29uY2F0KGNvbG9yLmwpKTtcbiAgICAgICAgdmFyIHJnYiA9IGhzbFRvUkdCKG5vcm1hbGl6ZUh1ZShjb2xvci5oKSwgcywgbCk7XG4gICAgICAgIGlmIChoYXNQcm9wKGNvbG9yLCAnYScpKSB7XG4gICAgICAgICAgICByZ2IuYSA9IG5vcm1hbGl6ZUFscGhhKGNvbG9yLmEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfSxcbiAgICBfYltDb2xvck1vZGVsLkNNWUtdID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHZhciBjID0gZ2V0Q01ZS051bWJlcihcIlwiLmNvbmNhdChjb2xvci5jKSk7XG4gICAgICAgIHZhciBtID0gZ2V0Q01ZS051bWJlcihcIlwiLmNvbmNhdChjb2xvci5tKSk7XG4gICAgICAgIHZhciB5ID0gZ2V0Q01ZS051bWJlcihcIlwiLmNvbmNhdChjb2xvci55KSk7XG4gICAgICAgIHZhciBrID0gZ2V0Q01ZS051bWJlcihcIlwiLmNvbmNhdChjb2xvci5rKSk7XG4gICAgICAgIHZhciByZ2IgPSBjbXlrVG9SR0IoYywgbSwgeSwgayk7XG4gICAgICAgIGlmIChoYXNQcm9wKGNvbG9yLCAnYScpKSB7XG4gICAgICAgICAgICByZ2IuYSA9IG5vcm1hbGl6ZUFscGhhKGNvbG9yLmEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfSxcbiAgICBfYik7XG5leHBvcnQgdmFyIGdldFJHQk9iamVjdCA9IGZ1bmN0aW9uIChjb2xvciwgbW9kZWwpIHtcbiAgICBpZiAobW9kZWwgPT09IHZvaWQgMCkgeyBtb2RlbCA9IGdldENvbG9yTW9kZWwoY29sb3IpOyB9XG4gICAgcmV0dXJuIHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBnZXRSR0JPYmplY3RGcm9tU3RyaW5nW21vZGVsXShjb2xvcilcbiAgICAgICAgOiBnZXRSR0JPYmplY3RGcm9tT2JqZWN0W21vZGVsXShjb2xvcik7XG59O1xuZXhwb3J0IHZhciB0cmFuc2xhdGVDb2xvciA9IChfYyA9IHt9LFxuICAgIF9jW0NvbG9yTW9kZWwuSEVYXSA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogZ2V0SEVYKGNvbG9yLnIpLFxuICAgICAgICAgICAgZzogZ2V0SEVYKGNvbG9yLmcpLFxuICAgICAgICAgICAgYjogZ2V0SEVYKGNvbG9yLmIpXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBfYy5IRVhBID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHZhciByZ2IgPSB0cmFuc2xhdGVDb2xvci5IRVgoY29sb3IpO1xuICAgICAgICByZ2IuYSA9IGhhc1Byb3AoY29sb3IsICdhJylcbiAgICAgICAgICAgID8gZ2V0SEVYKGNvbG9yLmEgKiAyNTUpXG4gICAgICAgICAgICA6ICcweEZGJztcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9LFxuICAgIF9jW0NvbG9yTW9kZWwuUkdCXSA9IGZ1bmN0aW9uIChjb2xvciwgZGVjaW1hbHMpIHtcbiAgICAgICAgaWYgKGhhc1Byb3AoY29sb3IsICdhJykpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb2xvci5hO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3VuZFJHQk9iamVjdChjb2xvciwgZGVjaW1hbHMpO1xuICAgIH0sXG4gICAgX2MuUkdCQSA9IGZ1bmN0aW9uIChjb2xvciwgZGVjaW1hbHMpIHtcbiAgICAgICAgY29sb3IuYSA9IGhhc1Byb3AoY29sb3IsICdhJylcbiAgICAgICAgICAgID8gcm91bmQoY29sb3IuYSlcbiAgICAgICAgICAgIDogMTtcbiAgICAgICAgcmV0dXJuIHJvdW5kUkdCT2JqZWN0KGNvbG9yLCBkZWNpbWFscyk7XG4gICAgfSxcbiAgICBfY1tDb2xvck1vZGVsLkhTTF0gPSBmdW5jdGlvbiAoY29sb3IsIGRlY2ltYWxzKSB7XG4gICAgICAgIHZhciBoc2wgPSByZ2JUb0hTTChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iKTtcbiAgICAgICAgZGVsZXRlIGhzbC5hO1xuICAgICAgICByZXR1cm4gcm91bmRIU0xPYmplY3QoaHNsLCBkZWNpbWFscyk7XG4gICAgfSxcbiAgICBfYy5IU0xBID0gZnVuY3Rpb24gKGNvbG9yLCBkZWNpbWFscykge1xuICAgICAgICB2YXIgaHNsID0gdHJhbnNsYXRlQ29sb3IuSFNMKGNvbG9yLCBkZWNpbWFscyk7XG4gICAgICAgIGhzbC5hID0gaGFzUHJvcChjb2xvciwgJ2EnKVxuICAgICAgICAgICAgPyByb3VuZChjb2xvci5hLCBkZWNpbWFscylcbiAgICAgICAgICAgIDogMTtcbiAgICAgICAgcmV0dXJuIGhzbDtcbiAgICB9LFxuICAgIF9jW0NvbG9yTW9kZWwuQ01ZS10gPSBmdW5jdGlvbiAoY29sb3IsIGRlY2ltYWxzKSB7XG4gICAgICAgIHJldHVybiByb3VuZENNWUtPYmplY3QocmdiVG9DTVlLKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpLCBkZWNpbWFscyk7XG4gICAgfSxcbiAgICBfYy5DTVlLQSA9IGZ1bmN0aW9uIChjb2xvciwgZGVjaW1hbHMpIHtcbiAgICAgICAgdmFyIGNteWsgPSB0cmFuc2xhdGVDb2xvci5DTVlLKGNvbG9yLCBkZWNpbWFscyk7XG4gICAgICAgIGNteWsuYSA9IGhhc1Byb3AoY29sb3IsICdhJylcbiAgICAgICAgICAgID8gcm91bmQoY29sb3IuYSwgZGVjaW1hbHMpXG4gICAgICAgICAgICA6IDE7XG4gICAgICAgIHJldHVybiBjbXlrO1xuICAgIH0sXG4gICAgX2MpO1xuZXhwb3J0IHZhciBibGVuZCA9IGZ1bmN0aW9uIChmcm9tLCB0bywgc3RlcHMpIHtcbiAgICB2YXIgZGl2ID0gc3RlcHMgLSAxO1xuICAgIHZhciBkaWZmUiA9ICh0by5yIC0gZnJvbS5yKSAvIGRpdjtcbiAgICB2YXIgZGlmZkcgPSAodG8uZyAtIGZyb20uZykgLyBkaXY7XG4gICAgdmFyIGRpZmZCID0gKHRvLmIgLSBmcm9tLmIpIC8gZGl2O1xuICAgIHZhciBmcm9tQSA9IG5vcm1hbGl6ZUFscGhhKGZyb20uYSk7XG4gICAgdmFyIHRvQSA9IG5vcm1hbGl6ZUFscGhhKHRvLmEpO1xuICAgIHZhciBkaWZmQSA9ICh0b0EgLSBmcm9tQSkgLyBkaXY7XG4gICAgcmV0dXJuIEFycmF5KHN0ZXBzKS5maWxsKG51bGwpLm1hcChmdW5jdGlvbiAoX19uLCBpKSB7XG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gZGl2KSB7XG4gICAgICAgICAgICByZXR1cm4gdG87XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHJvdW5kKGZyb20uciArIGRpZmZSICogaSksXG4gICAgICAgICAgICBnOiByb3VuZChmcm9tLmcgKyBkaWZmRyAqIGkpLFxuICAgICAgICAgICAgYjogcm91bmQoZnJvbS5iICsgZGlmZkIgKiBpKSxcbiAgICAgICAgICAgIGE6IHJvdW5kKGZyb21BICsgZGlmZkEgKiBpKVxuICAgICAgICB9O1xuICAgIH0pO1xufTtcbmV4cG9ydCB2YXIgZ2V0Q29sb3JNaXh0dXJlID0gZnVuY3Rpb24gKGNvbG9yLCBzdGVwcywgc2hhZGVzLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIGRlY2ltYWxzID0gcGFyc2VkT3B0aW9ucy5kZWNpbWFscztcbiAgICB2YXIgbW9kZWwgPSBnZXRDb2xvck1vZGVsKGNvbG9yKTtcbiAgICB2YXIgaXNDU1MgPSB0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnO1xuICAgIHZhciByZ2IgPSBnZXRSR0JPYmplY3QoY29sb3IsIG1vZGVsKTtcbiAgICB2YXIgaGFzQWxwaGEgPSAoKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycgJiYgaGFzUHJvcChyZ2IsICdhJykpIHx8XG4gICAgICAgICh0eXBlb2YgY29sb3IgIT09ICdzdHJpbmcnICYmIGhhc1Byb3AoY29sb3IsICdhJykpKTtcbiAgICB2YXIgaHNsID0gcmdiVG9IU0wocmdiLnIsIHJnYi5nLCByZ2IuYiwgcmdiLmEpO1xuICAgIGlmICghaGFzQWxwaGEpXG4gICAgICAgIGRlbGV0ZSBoc2wuYTtcbiAgICB2YXIgaW5jcmVtZW50ID0gc2hhZGVzXG4gICAgICAgID8gaHNsLmwgLyAoc3RlcHMgKyAxKVxuICAgICAgICA6ICgxMDAgLSBoc2wubCkgLyAoc3RlcHMgKyAxKTtcbiAgICB2YXIgaHNsTWFwID0gQXJyYXkoc3RlcHMpLmZpbGwobnVsbCkubWFwKGZ1bmN0aW9uIChfX24sIGkpIHsgcmV0dXJuIChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaHNsKSwgeyBsOiBoc2wubCArIGluY3JlbWVudCAqIChpICsgMSkgKiAoMSAtICtzaGFkZXMgKiAyKSB9KSk7IH0pO1xuICAgIHN3aXRjaCAobW9kZWwpIHtcbiAgICAgICAgY2FzZSBDb2xvck1vZGVsLkhFWDpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBoc2xNYXAubWFwKGZ1bmN0aW9uIChoc2xDb2xvcikge1xuICAgICAgICAgICAgICAgIHZhciByZ2JDb2xvciA9IGhzbFRvUkdCKGhzbENvbG9yLmgsIGhzbENvbG9yLnMsIGhzbENvbG9yLmwpO1xuICAgICAgICAgICAgICAgIGlmIChoYXNBbHBoYSlcbiAgICAgICAgICAgICAgICAgICAgcmdiQ29sb3IuYSA9IGhzbENvbG9yLmE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzQ1NTXG4gICAgICAgICAgICAgICAgICAgID8gaGFzQWxwaGFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gQ1NTLkhFWChyb3VuZFJHQk9iamVjdChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmdiQ29sb3IpLCB7IGE6IHJvdW5kKHJnYkNvbG9yLmEgKiAyNTUpIH0pLCBwYXJzZWRPcHRpb25zLmRlY2ltYWxzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogQ1NTLkhFWChyb3VuZFJHQk9iamVjdChyZ2JDb2xvciwgZGVjaW1hbHMpKVxuICAgICAgICAgICAgICAgICAgICA6IGhhc0FscGhhXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zbGF0ZUNvbG9yLkhFWEEocmdiQ29sb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRyYW5zbGF0ZUNvbG9yLkhFWChyZ2JDb2xvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBDb2xvck1vZGVsLlJHQjpcbiAgICAgICAgICAgIHJldHVybiBoc2xNYXAubWFwKGZ1bmN0aW9uIChoc2xDb2xvcikge1xuICAgICAgICAgICAgICAgIHZhciByZ2JDb2xvciA9IGhzbFRvUkdCKGhzbENvbG9yLmgsIGhzbENvbG9yLnMsIGhzbENvbG9yLmwpO1xuICAgICAgICAgICAgICAgIGlmIChoYXNBbHBoYSlcbiAgICAgICAgICAgICAgICAgICAgcmdiQ29sb3IuYSA9IGhzbENvbG9yLmE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzQ1NTXG4gICAgICAgICAgICAgICAgICAgID8gQ1NTLlJHQihyb3VuZFJHQk9iamVjdChyZ2JDb2xvciwgZGVjaW1hbHMpKVxuICAgICAgICAgICAgICAgICAgICA6IGhhc0FscGhhXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zbGF0ZUNvbG9yLlJHQkEocmdiQ29sb3IsIGRlY2ltYWxzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0cmFuc2xhdGVDb2xvci5SR0IocmdiQ29sb3IsIGRlY2ltYWxzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIENvbG9yTW9kZWwuSFNMOlxuICAgICAgICAgICAgcmV0dXJuIGhzbE1hcC5tYXAoZnVuY3Rpb24gKGhzbENvbG9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzQ1NTXG4gICAgICAgICAgICAgICAgICAgID8gQ1NTLkhTTChyb3VuZEhTTE9iamVjdChoc2xDb2xvciwgZGVjaW1hbHMpKVxuICAgICAgICAgICAgICAgICAgICA6IGhhc0FscGhhXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zbGF0ZUNvbG9yLkhTTEEoX19hc3NpZ24oX19hc3NpZ24oe30sIGhzbFRvUkdCKGhzbENvbG9yLmgsIGhzbENvbG9yLnMsIGhzbENvbG9yLmwpKSwgeyBhOiBoc2xDb2xvci5hIH0pLCBkZWNpbWFscylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuSFNMKGhzbFRvUkdCKGhzbENvbG9yLmgsIGhzbENvbG9yLnMsIGhzbENvbG9yLmwpLCBkZWNpbWFscyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuZXhwb3J0IHZhciBjb2xvckhhcm1vbnkgPSAoX2QgPSB7XG4gICAgICAgIGJ1aWxkSGFybW9ueTogZnVuY3Rpb24gKGNvbG9yLCBoYXJtb255RnVuY3Rpb24sIG1vZGUsIGRlY2ltYWxzKSB7XG4gICAgICAgICAgICB2YXIgbW9kZWwgPSBnZXRDb2xvck1vZGVsKGNvbG9yKTtcbiAgICAgICAgICAgIHZhciByZ2IgPSBnZXRSR0JPYmplY3QoY29sb3IsIG1vZGVsKTtcbiAgICAgICAgICAgIHZhciBoc2wgPSByZ2JUb0hTTChyZ2IuciwgcmdiLmcsIHJnYi5iLCByZ2IuYSk7XG4gICAgICAgICAgICB2YXIgaGFzQWxwaGEgPSAoKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycgJiYgaGFzUHJvcChyZ2IsICdhJykpIHx8XG4gICAgICAgICAgICAgICAgKHR5cGVvZiBjb2xvciAhPT0gJ3N0cmluZycgJiYgaGFzUHJvcChjb2xvciwgJ2EnKSkpO1xuICAgICAgICAgICAgdmFyIGlzQ1NTID0gdHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJztcbiAgICAgICAgICAgIHN3aXRjaCAobW9kZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIENvbG9yTW9kZWwuSEVYOlxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNBbHBoYVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLkhFWEEocm91bmRIU0xPYmplY3QoaHNsLCAwKSwgaGFybW9ueUZ1bmN0aW9uLCBtb2RlLCBpc0NTUylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5IRVgocm91bmRIU0xPYmplY3QoaHNsLCAwKSwgaGFybW9ueUZ1bmN0aW9uLCBtb2RlLCBpc0NTUyk7XG4gICAgICAgICAgICAgICAgY2FzZSBDb2xvck1vZGVsLkhTTDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0FscGhhXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuSFNMQShoc2wsIGhhcm1vbnlGdW5jdGlvbiwgbW9kZSwgaXNDU1MsIGRlY2ltYWxzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLkhTTChoc2wsIGhhcm1vbnlGdW5jdGlvbiwgbW9kZSwgaXNDU1MsIGRlY2ltYWxzKTtcbiAgICAgICAgICAgICAgICBjYXNlIENvbG9yTW9kZWwuUkdCOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzQWxwaGFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5SR0JBKGhzbCwgaGFybW9ueUZ1bmN0aW9uLCBtb2RlLCBpc0NTUywgZGVjaW1hbHMpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuUkdCKGhzbCwgaGFybW9ueUZ1bmN0aW9uLCBtb2RlLCBpc0NTUywgZGVjaW1hbHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBfZFtDb2xvck1vZGVsLkhFWF0gPSBmdW5jdGlvbiAoY29sb3IsIGhhcm1vbnlGdW5jdGlvbiwgbW9kZSwgY3NzKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGhhcm1vbnlGdW5jdGlvbihjb2xvciwgbW9kZSk7XG4gICAgICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIChjc3NcbiAgICAgICAgICAgID8gQ1NTLkhFWChoc2xUb1JHQihjLmgsIGMucywgYy5sKSlcbiAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuSEVYKGhzbFRvUkdCKGMuaCwgYy5zLCBjLmwpKSk7IH0pO1xuICAgIH0sXG4gICAgX2QuSEVYQSA9IGZ1bmN0aW9uIChjb2xvciwgaGFybW9ueUZ1bmN0aW9uLCBtb2RlLCBjc3MpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gaGFybW9ueUZ1bmN0aW9uKGNvbG9yLCBtb2RlKTtcbiAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gKGNzc1xuICAgICAgICAgICAgPyBDU1MuSEVYKF9fYXNzaWduKF9fYXNzaWduKHt9LCBoc2xUb1JHQihjLmgsIGMucywgYy5sKSksIHsgYTogbm9ybWFsaXplQWxwaGEoYy5hKSAqIDI1NSB9KSlcbiAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuSEVYQShfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaHNsVG9SR0IoYy5oLCBjLnMsIGMubCkpLCB7IGE6IG5vcm1hbGl6ZUFscGhhKGMuYSkgfSkpKTsgfSk7XG4gICAgfSxcbiAgICBfZFtDb2xvck1vZGVsLlJHQl0gPSBmdW5jdGlvbiAoY29sb3IsIGhhcm1vbnlGdW5jdGlvbiwgbW9kZSwgY3NzLCBkZWNpbWFscykge1xuICAgICAgICB2YXIgYXJyYXkgPSBoYXJtb255RnVuY3Rpb24oY29sb3IsIG1vZGUpO1xuICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5SR0Iocm91bmRSR0JPYmplY3QoaHNsVG9SR0IoYy5oLCBjLnMsIGMubCksIGRlY2ltYWxzKSlcbiAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuUkdCKGhzbFRvUkdCKGMuaCwgYy5zLCBjLmwpLCBkZWNpbWFscykpOyB9KTtcbiAgICB9LFxuICAgIF9kLlJHQkEgPSBmdW5jdGlvbiAoY29sb3IsIGhhcm1vbnlGdW5jdGlvbiwgbW9kZSwgY3NzLCBkZWNpbWFscykge1xuICAgICAgICB2YXIgYXJyYXkgPSBoYXJtb255RnVuY3Rpb24oY29sb3IsIG1vZGUpO1xuICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5SR0Iocm91bmRSR0JPYmplY3QoX19hc3NpZ24oX19hc3NpZ24oe30sIGhzbFRvUkdCKGMuaCwgYy5zLCBjLmwpKSwgeyBhOiBub3JtYWxpemVBbHBoYShjLmEpIH0pLCBkZWNpbWFscykpXG4gICAgICAgICAgICA6IHRyYW5zbGF0ZUNvbG9yLlJHQkEoX19hc3NpZ24oX19hc3NpZ24oe30sIGhzbFRvUkdCKGMuaCwgYy5zLCBjLmwpKSwgeyBhOiBub3JtYWxpemVBbHBoYShjLmEpIH0pLCBkZWNpbWFscykpOyB9KTtcbiAgICB9LFxuICAgIF9kW0NvbG9yTW9kZWwuSFNMXSA9IGZ1bmN0aW9uIChjb2xvciwgaGFybW9ueUZ1bmN0aW9uLCBtb2RlLCBjc3MsIGRlY2ltYWxzKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGhhcm1vbnlGdW5jdGlvbihjb2xvciwgbW9kZSk7XG4gICAgICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIChjc3NcbiAgICAgICAgICAgID8gQ1NTLkhTTChyb3VuZEhTTE9iamVjdCh7XG4gICAgICAgICAgICAgICAgaDogYy5oLFxuICAgICAgICAgICAgICAgIHM6IGMucyxcbiAgICAgICAgICAgICAgICBsOiBjLmxcbiAgICAgICAgICAgIH0sIGRlY2ltYWxzKSlcbiAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuSFNMKGhzbFRvUkdCKGMuaCwgYy5zLCBjLmwpLCBkZWNpbWFscykpOyB9KTtcbiAgICB9LFxuICAgIF9kLkhTTEEgPSBmdW5jdGlvbiAoY29sb3IsIGhhcm1vbnlGdW5jdGlvbiwgbW9kZSwgY3NzLCBkZWNpbWFscykge1xuICAgICAgICB2YXIgYXJyYXkgPSBoYXJtb255RnVuY3Rpb24oY29sb3IsIG1vZGUpO1xuICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5IU0wocm91bmRIU0xPYmplY3QoX19hc3NpZ24oX19hc3NpZ24oe30sIGMpLCB7IGE6IG5vcm1hbGl6ZUFscGhhKGMuYSkgfSksIGRlY2ltYWxzKSlcbiAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuSFNMQShfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaHNsVG9SR0IoYy5oLCBjLnMsIGMubCkpLCB7IGE6IG5vcm1hbGl6ZUFscGhhKGMuYSkgfSksIGRlY2ltYWxzKSk7IH0pO1xuICAgIH0sXG4gICAgX2QpO1xuZXhwb3J0IHZhciBjb2xvck1peGVyID0gKF9lID0ge1xuICAgICAgICBtaXg6IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUpIHtcbiAgICAgICAgICAgIHZhciByZ2JNYXAgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGdldENvbG9yTW9kZWwoY29sb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRSR0JPYmplY3QoY29sb3IsIG1vZGVsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJ5Yk1hcCA9IG1vZGUgPT09IE1peC5TVUJUUkFDVElWRVxuICAgICAgICAgICAgICAgID8gcmdiTWFwLm1hcChmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ5YiA9IHJnYlRvUllCKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb2xvciwgJ2EnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnliLmEgPSBjb2xvci5hO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByeWI7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVNaXgoaXRlbXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5pdGlhbCA9IG1vZGUgPT09IE1peC5BRERJVElWRVxuICAgICAgICAgICAgICAgICAgICA/IHsgcjogMCwgZzogMCwgYjogMCwgYTogMCB9XG4gICAgICAgICAgICAgICAgICAgIDogeyByOiAwLCB5OiAwLCBiOiAwLCBhOiAwIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLnJlZHVjZShmdW5jdGlvbiAobWl4LCBjb2xvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JBID0gaGFzUHJvcChjb2xvciwgJ2EnKSA/IGNvbG9yLmEgOiAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29tbW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcjogTWF0aC5taW4obWl4LnIgKyBjb2xvci5yICogY29sb3JBLCAyNTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYjogTWF0aC5taW4obWl4LmIgKyBjb2xvci5iICogY29sb3JBLCAyNTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYTogMSAtICgxIC0gY29sb3JBKSAqICgxIC0gbWl4LmEpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBtaXhHWSA9ICdnJyBpbiBtaXhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbWl4LmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbWl4Lnk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvckdZID0gJ2cnIGluIGNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbG9yLmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29sb3IueTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb24pLCAobW9kZSA9PT0gTWl4LkFERElUSVZFXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHsgZzogTWF0aC5taW4obWl4R1kgKyBjb2xvckdZICogY29sb3JBLCAyNTUpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogeyB5OiBNYXRoLm1pbihtaXhHWSArIGNvbG9yR1kgKiBjb2xvckEsIDI1NSkgfSkpO1xuICAgICAgICAgICAgICAgIH0sIGluaXRpYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG1peDtcbiAgICAgICAgICAgIGlmIChtb2RlID09PSBNaXguQURESVRJVkUpIHtcbiAgICAgICAgICAgICAgICBtaXggPSBjcmVhdGVNaXgocmdiTWFwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciByeWIgPSBjcmVhdGVNaXgocnliTWFwKTtcbiAgICAgICAgICAgICAgICBtaXggPSByeWJUb1JHQihyeWIuciwgcnliLnksIHJ5Yi5iKTtcbiAgICAgICAgICAgICAgICBtaXguYSA9IHJ5Yi5hO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByOiByb3VuZChtaXguciksXG4gICAgICAgICAgICAgICAgZzogcm91bmQobWl4LmcpLFxuICAgICAgICAgICAgICAgIGI6IHJvdW5kKG1peC5iKSxcbiAgICAgICAgICAgICAgICBhOiBtaW5tYXgobWl4LmEsIDAsIDEpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICBfZVtDb2xvck1vZGVsLkhFWF0gPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBjc3MpIHtcbiAgICAgICAgdmFyIG1peCA9IHRoaXMubWl4KGNvbG9ycywgbW9kZSk7XG4gICAgICAgIGRlbGV0ZSBtaXguYTtcbiAgICAgICAgcmV0dXJuIChjc3NcbiAgICAgICAgICAgID8gQ1NTLkhFWChtaXgpXG4gICAgICAgICAgICA6IHRyYW5zbGF0ZUNvbG9yLkhFWChtaXgpKTtcbiAgICB9LFxuICAgIF9lLkhFWEEgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBjc3MpIHtcbiAgICAgICAgdmFyIG1peCA9IHRoaXMubWl4KGNvbG9ycywgbW9kZSk7XG4gICAgICAgIG1peC5hID0gY3NzXG4gICAgICAgICAgICA/IG5vcm1hbGl6ZUFscGhhKG1peC5hKSAqIDI1NVxuICAgICAgICAgICAgOiBub3JtYWxpemVBbHBoYShtaXguYSk7XG4gICAgICAgIHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5IRVgobWl4KVxuICAgICAgICAgICAgOiB0cmFuc2xhdGVDb2xvci5IRVhBKG1peCkpO1xuICAgIH0sXG4gICAgX2VbQ29sb3JNb2RlbC5SR0JdID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgY3NzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBkZWNpbWFscyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zKS5kZWNpbWFscztcbiAgICAgICAgdmFyIG1peCA9IHRoaXMubWl4KGNvbG9ycywgbW9kZSk7XG4gICAgICAgIGRlbGV0ZSBtaXguYTtcbiAgICAgICAgcmV0dXJuIChjc3NcbiAgICAgICAgICAgID8gQ1NTLlJHQihtaXgpXG4gICAgICAgICAgICA6IHRyYW5zbGF0ZUNvbG9yLlJHQihtaXgsIGRlY2ltYWxzKSk7XG4gICAgfSxcbiAgICBfZS5SR0JBID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgY3NzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBkZWNpbWFscyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zKS5kZWNpbWFscztcbiAgICAgICAgdmFyIG1peCA9IHRoaXMubWl4KGNvbG9ycywgbW9kZSk7XG4gICAgICAgIHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5SR0IobWl4KVxuICAgICAgICAgICAgOiB0cmFuc2xhdGVDb2xvci5SR0JBKG1peCwgZGVjaW1hbHMpKTtcbiAgICB9LFxuICAgIF9lW0NvbG9yTW9kZWwuSFNMXSA9IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUsIGNzcywgb3B0aW9ucykge1xuICAgICAgICB2YXIgZGVjaW1hbHMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucykuZGVjaW1hbHM7XG4gICAgICAgIHZhciBtaXggPSB0aGlzLm1peChjb2xvcnMsIG1vZGUpO1xuICAgICAgICB2YXIgaHNsID0gcmdiVG9IU0wobWl4LnIsIG1peC5nLCBtaXguYik7XG4gICAgICAgIGRlbGV0ZSBtaXguYTtcbiAgICAgICAgZGVsZXRlIGhzbC5hO1xuICAgICAgICByZXR1cm4gKGNzc1xuICAgICAgICAgICAgPyBDU1MuSFNMKGhzbClcbiAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuSFNMKG1peCwgZGVjaW1hbHMpKTtcbiAgICB9LFxuICAgIF9lLkhTTEEgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBjc3MsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGRlY2ltYWxzID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpLmRlY2ltYWxzO1xuICAgICAgICB2YXIgbWl4ID0gdGhpcy5taXgoY29sb3JzLCBtb2RlKTtcbiAgICAgICAgdmFyIGhzbCA9IHJnYlRvSFNMKG1peC5yLCBtaXguZywgbWl4LmIsIG1peC5hKTtcbiAgICAgICAgcmV0dXJuIChjc3NcbiAgICAgICAgICAgID8gQ1NTLkhTTChoc2wpXG4gICAgICAgICAgICA6IHRyYW5zbGF0ZUNvbG9yLkhTTEEobWl4LCBkZWNpbWFscykpO1xuICAgIH0sXG4gICAgX2UpO1xuZXhwb3J0IHZhciByb3VuZFJHQk9iamVjdCA9IGZ1bmN0aW9uIChjb2xvciwgZGVjaW1hbHMpIHtcbiAgICByZXR1cm4gX19hc3NpZ24oeyByOiByb3VuZChjb2xvci5yLCBkZWNpbWFscyksIGc6IHJvdW5kKGNvbG9yLmcsIGRlY2ltYWxzKSwgYjogcm91bmQoY29sb3IuYiwgZGVjaW1hbHMpIH0sIChoYXNQcm9wKGNvbG9yLCAnYScpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgYTogcm91bmQoY29sb3IuYSwgZGVjaW1hbHMpXG4gICAgICAgIH1cbiAgICAgICAgOiB7fSkpO1xufTtcbmV4cG9ydCB2YXIgcm91bmRIU0xPYmplY3QgPSBmdW5jdGlvbiAoY29sb3IsIGRlY2ltYWxzKSB7XG4gICAgcmV0dXJuIF9fYXNzaWduKHsgaDogcm91bmQoY29sb3IuaCwgZGVjaW1hbHMpLCBzOiByb3VuZChjb2xvci5zLCBkZWNpbWFscyksIGw6IHJvdW5kKGNvbG9yLmwsIGRlY2ltYWxzKSB9LCAoaGFzUHJvcChjb2xvciwgJ2EnKVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGE6IHJvdW5kKGNvbG9yLmEsIGRlY2ltYWxzKVxuICAgICAgICB9XG4gICAgICAgIDoge30pKTtcbn07XG5leHBvcnQgdmFyIHJvdW5kQ01ZS09iamVjdCA9IGZ1bmN0aW9uIChjb2xvciwgZGVjaW1hbHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjOiByb3VuZChjb2xvci5jLCBkZWNpbWFscyksXG4gICAgICAgIG06IHJvdW5kKGNvbG9yLm0sIGRlY2ltYWxzKSxcbiAgICAgICAgeTogcm91bmQoY29sb3IueSwgZGVjaW1hbHMpLFxuICAgICAgICBrOiByb3VuZChjb2xvci5rLCBkZWNpbWFscylcbiAgICB9O1xufTtcbiIsInZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5pbXBvcnQgeyBIYXJtb255LCBNaXgsIERFRkFVTFRfQkxFTkRfU1RFUFMgfSBmcm9tICcjY29uc3RhbnRzJztcbmltcG9ydCB7IHJnYlRvSFNMLCBoc2xUb1JHQiwgcmdiVG9DTVlLLCBjbXlrVG9SR0IgfSBmcm9tICcjY29sb3IvdHJhbnNsYXRvcnMnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnI2NvbG9yL3V0aWxzJztcbmltcG9ydCB7IENTUyB9IGZyb20gJyNjb2xvci9jc3MnO1xuaW1wb3J0IHsgcm91bmQsIG1pbm1heCwgcGFyc2VPcHRpb25zIH0gZnJvbSAnI2hlbHBlcnMnO1xudmFyIGdldENvbG9yUmV0dXJuID0gZnVuY3Rpb24gKGNvbG9yLCBtb2RlbCwgb3B0aW9ucywgdHJhbnNsYXRlRnVuY3Rpb24pIHtcbiAgICB2YXIgZGVjaW1hbHMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucykuZGVjaW1hbHM7XG4gICAgdmFyIHJnYk9iamVjdCA9IHV0aWxzLmdldFJHQk9iamVjdChjb2xvciwgbW9kZWwpO1xuICAgIHJldHVybiB0cmFuc2xhdGVGdW5jdGlvbihyZ2JPYmplY3QsIGRlY2ltYWxzKTtcbn07XG52YXIgZ2V0QmxlbmRSZXR1cm4gPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zLCB0cmFuc2xhdGVGdW5jdGlvbikge1xuICAgIHZhciBkZWNpbWFscyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zKS5kZWNpbWFscztcbiAgICBpZiAoc3RlcHMgPCAxKVxuICAgICAgICBzdGVwcyA9IERFRkFVTFRfQkxFTkRfU1RFUFM7XG4gICAgdmFyIGZyb21SR0JPYmplY3QgPSB1dGlscy5nZXRSR0JPYmplY3QoZnJvbSk7XG4gICAgdmFyIHRvUkdCT2JqZWN0ID0gdXRpbHMuZ2V0UkdCT2JqZWN0KHRvKTtcbiAgICB2YXIgYmxlbmRBcnJheSA9IHV0aWxzLmJsZW5kKGZyb21SR0JPYmplY3QsIHRvUkdCT2JqZWN0LCBzdGVwcyk7XG4gICAgcmV0dXJuIGJsZW5kQXJyYXkubWFwKGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRlRnVuY3Rpb24oY29sb3IsIGRlY2ltYWxzKTtcbiAgICB9KTtcbn07XG52YXIgZ2V0SGFybW9ueVJldHVybiA9IGZ1bmN0aW9uIChoYXJtb255LCBjb2xvciwgb3B0aW9ucywgbW9kZSkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgZGVjaW1hbHMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucykuZGVjaW1hbHM7XG4gICAgcmV0dXJuIChfYSA9IHt9LFxuICAgICAgICBfYVtIYXJtb255LkFOQUxPR09VU10gPSB1dGlscy5jb2xvckhhcm1vbnkuYnVpbGRIYXJtb255KGNvbG9yLCB1dGlscy5hbmFsb2dvdXMsIG1vZGUsIGRlY2ltYWxzKSxcbiAgICAgICAgX2FbSGFybW9ueS5DT01QTEVNRU5UQVJZXSA9IHV0aWxzLmNvbG9ySGFybW9ueS5idWlsZEhhcm1vbnkoY29sb3IsIHV0aWxzLmNvbXBsZW1lbnRhcnksIG1vZGUsIGRlY2ltYWxzKSxcbiAgICAgICAgX2FbSGFybW9ueS5TUExJVF9DT01QTEVNRU5UQVJZXSA9IHV0aWxzLmNvbG9ySGFybW9ueS5idWlsZEhhcm1vbnkoY29sb3IsIHV0aWxzLnNwbGl0Q29tcGxlbWVudGFyeSwgbW9kZSwgZGVjaW1hbHMpLFxuICAgICAgICBfYVtIYXJtb255LlRSSUFESUNdID0gdXRpbHMuY29sb3JIYXJtb255LmJ1aWxkSGFybW9ueShjb2xvciwgdXRpbHMudHJpYWRpYywgbW9kZSwgZGVjaW1hbHMpLFxuICAgICAgICBfYVtIYXJtb255LlRFVFJBRElDXSA9IHV0aWxzLmNvbG9ySGFybW9ueS5idWlsZEhhcm1vbnkoY29sb3IsIHV0aWxzLnRldHJhZGljLCBtb2RlLCBkZWNpbWFscyksXG4gICAgICAgIF9hW0hhcm1vbnkuU1FVQVJFXSA9IHV0aWxzLmNvbG9ySGFybW9ueS5idWlsZEhhcm1vbnkoY29sb3IsIHV0aWxzLnNxdWFyZSwgbW9kZSwgZGVjaW1hbHMpLFxuICAgICAgICBfYSlbaGFybW9ueV07XG59O1xudmFyIENvbG9yVHJhbnNsYXRvciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29sb3JUcmFuc2xhdG9yKGNvbG9yLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHRoaXMucmdiID0gdXRpbHMuZ2V0UkdCT2JqZWN0KGNvbG9yKTtcbiAgICAgICAgdGhpcy51cGRhdGVIU0woKTtcbiAgICAgICAgdGhpcy51cGRhdGVDTVlLKCk7XG4gICAgfVxuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUudXBkYXRlUkdCID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJnYiA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBoc2xUb1JHQih0aGlzLmhzbC5oLCB0aGlzLmhzbC5zLCB0aGlzLmhzbC5sKSksIHsgYTogdGhpcy5oc2wuYSB9KTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUudXBkYXRlUkdCRnJvbUNNWUsgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmdiID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGNteWtUb1JHQih0aGlzLmNteWsuYywgdGhpcy5jbXlrLm0sIHRoaXMuY215ay55LCB0aGlzLmNteWsuaykpLCB7IGE6IHRoaXMucmdiLmEgfSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLnVwZGF0ZUhTTCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5oc2wgPSByZ2JUb0hTTCh0aGlzLnJnYi5yLCB0aGlzLnJnYi5nLCB0aGlzLnJnYi5iLCB0aGlzLnJnYi5hKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUudXBkYXRlQ01ZSyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jbXlrID0gcmdiVG9DTVlLKHRoaXMucmdiLnIsIHRoaXMucmdiLmcsIHRoaXMucmdiLmIpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS51cGRhdGVSR0JBbmRDTVlLID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVJHQigpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNNWUsoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLnVwZGF0ZUhTTEFuZENNWUsgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSFNMKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ01ZSygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUudXBkYXRlUkdCQW5kSFNMID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVJHQkZyb21DTVlLKCk7XG4gICAgICAgIHRoaXMudXBkYXRlSFNMKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLl9vcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRIID0gZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgdGhpcy5oc2wuaCA9IHV0aWxzLm5vcm1hbGl6ZUh1ZShoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlUkdCQW5kQ01ZSygpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRTID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgdGhpcy5oc2wucyA9IG1pbm1heChzLCAwLCAxMDApO1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVSR0JBbmRDTVlLKCk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLnNldEwgPSBmdW5jdGlvbiAobCkge1xuICAgICAgICB0aGlzLmhzbC5sID0gbWlubWF4KGwsIDAsIDEwMCk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVJHQkFuZENNWUsoKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUuc2V0UiA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIHRoaXMucmdiLnIgPSBtaW5tYXgociwgMCwgMjU1KTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlSFNMQW5kQ01ZSygpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRHID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgICAgdGhpcy5yZ2IuZyA9IG1pbm1heChnLCAwLCAyNTUpO1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVIU0xBbmRDTVlLKCk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLnNldEIgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICB0aGlzLnJnYi5iID0gbWlubWF4KGIsIDAsIDI1NSk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUhTTEFuZENNWUsoKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUuc2V0QSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHRoaXMuaHNsLmEgPSB0aGlzLnJnYi5hID0gbWlubWF4KGEsIDAsIDEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUuc2V0QyA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHRoaXMuY215ay5jID0gbWlubWF4KGMsIDAsIDEwMCk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVJHQkFuZEhTTCgpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRNID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgdGhpcy5jbXlrLm0gPSBtaW5tYXgobSwgMCwgMTAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlUkdCQW5kSFNMKCk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLnNldFkgPSBmdW5jdGlvbiAoeSkge1xuICAgICAgICB0aGlzLmNteWsueSA9IG1pbm1heCh5LCAwLCAxMDApO1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVSR0JBbmRIU0woKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUuc2V0SyA9IGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHRoaXMuY215ay5rID0gbWlubWF4KGssIDAsIDEwMCk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVJHQkFuZEhTTCgpO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwib3B0aW9uc1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJIXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQodGhpcy5oc2wuaCwgdGhpcy5vcHRpb25zLmRlY2ltYWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIlNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZCh0aGlzLmhzbC5zLCB0aGlzLm9wdGlvbnMuZGVjaW1hbHMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiTFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kKHRoaXMuaHNsLmwsIHRoaXMub3B0aW9ucy5kZWNpbWFscyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJSXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQodGhpcy5yZ2IuciwgdGhpcy5vcHRpb25zLmRlY2ltYWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkdcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZCh0aGlzLnJnYi5nLCB0aGlzLm9wdGlvbnMuZGVjaW1hbHMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiQlwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kKHRoaXMucmdiLmIsIHRoaXMub3B0aW9ucy5kZWNpbWFscyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJBXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQodGhpcy5oc2wuYSwgdGhpcy5vcHRpb25zLmRlY2ltYWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZCh0aGlzLmNteWsuYywgdGhpcy5vcHRpb25zLmRlY2ltYWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIk1cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZCh0aGlzLmNteWsubSwgdGhpcy5vcHRpb25zLmRlY2ltYWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIllcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZCh0aGlzLmNteWsueSwgdGhpcy5vcHRpb25zLmRlY2ltYWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIktcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZCh0aGlzLmNteWsuaywgdGhpcy5vcHRpb25zLmRlY2ltYWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkhFWE9iamVjdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnRyYW5zbGF0ZUNvbG9yLkhFWCh0aGlzLnJnYik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJIRVhBT2JqZWN0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMudHJhbnNsYXRlQ29sb3IuSEVYQSh0aGlzLnJnYik7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJSR0JPYmplY3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcjogdGhpcy5SLFxuICAgICAgICAgICAgICAgIGc6IHRoaXMuRyxcbiAgICAgICAgICAgICAgICBiOiB0aGlzLkJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJSR0JBT2JqZWN0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuUkdCT2JqZWN0KSwgeyBhOiB0aGlzLkEgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJIU0xPYmplY3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaDogdGhpcy5ILFxuICAgICAgICAgICAgICAgIHM6IHRoaXMuUyxcbiAgICAgICAgICAgICAgICBsOiB0aGlzLkxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJIU0xBT2JqZWN0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuSFNMT2JqZWN0KSwgeyBhOiB0aGlzLkEgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJDTVlLT2JqZWN0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGM6IHRoaXMuQyxcbiAgICAgICAgICAgICAgICBtOiB0aGlzLk0sXG4gICAgICAgICAgICAgICAgeTogdGhpcy5ZLFxuICAgICAgICAgICAgICAgIGs6IHRoaXMuS1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkNNWUtBT2JqZWN0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuQ01ZS09iamVjdCksIHsgYTogdGhpcy5BIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiSEVYXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gQ1NTLkhFWCh7XG4gICAgICAgICAgICAgICAgcjogdGhpcy5SLFxuICAgICAgICAgICAgICAgIGc6IHRoaXMuRyxcbiAgICAgICAgICAgICAgICBiOiB0aGlzLkJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiSEVYQVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIENTUy5IRVgoe1xuICAgICAgICAgICAgICAgIHI6IHRoaXMuUixcbiAgICAgICAgICAgICAgICBnOiB0aGlzLkcsXG4gICAgICAgICAgICAgICAgYjogdGhpcy5CLFxuICAgICAgICAgICAgICAgIGE6IHRoaXMuQSAqIDI1NVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJSR0JcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBDU1MuUkdCKHtcbiAgICAgICAgICAgICAgICByOiB0aGlzLlIsXG4gICAgICAgICAgICAgICAgZzogdGhpcy5HLFxuICAgICAgICAgICAgICAgIGI6IHRoaXMuQlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJSR0JBXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gQ1NTLlJHQih7XG4gICAgICAgICAgICAgICAgcjogdGhpcy5SLFxuICAgICAgICAgICAgICAgIGc6IHRoaXMuRyxcbiAgICAgICAgICAgICAgICBiOiB0aGlzLkIsXG4gICAgICAgICAgICAgICAgYTogdGhpcy5BXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkhTTFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIENTUy5IU0woe1xuICAgICAgICAgICAgICAgIGg6IHRoaXMuSCxcbiAgICAgICAgICAgICAgICBzOiB0aGlzLlMsXG4gICAgICAgICAgICAgICAgbDogdGhpcy5MXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkhTTEFcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBDU1MuSFNMKHtcbiAgICAgICAgICAgICAgICBoOiB0aGlzLkgsXG4gICAgICAgICAgICAgICAgczogdGhpcy5TLFxuICAgICAgICAgICAgICAgIGw6IHRoaXMuTCxcbiAgICAgICAgICAgICAgICBhOiB0aGlzLkFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiQ01ZS1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIENTUy5DTVlLKHtcbiAgICAgICAgICAgICAgICBjOiB0aGlzLkMsXG4gICAgICAgICAgICAgICAgbTogdGhpcy5NLFxuICAgICAgICAgICAgICAgIHk6IHRoaXMuWSxcbiAgICAgICAgICAgICAgICBrOiB0aGlzLktcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiQ01ZS0FcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBDU1MuQ01ZSyh7XG4gICAgICAgICAgICAgICAgYzogdGhpcy5DLFxuICAgICAgICAgICAgICAgIG06IHRoaXMuTSxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLlksXG4gICAgICAgICAgICAgICAgazogdGhpcy5LLFxuICAgICAgICAgICAgICAgIGE6IHRoaXMuQVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBDb2xvclRyYW5zbGF0b3IudG9IRVhPYmplY3QgPSBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgdmFyIG1vZGVsID0gdXRpbHMuZ2V0Q29sb3JNb2RlbChjb2xvcik7XG4gICAgICAgIHJldHVybiBnZXRDb2xvclJldHVybihjb2xvciwgbW9kZWwsIHsgZGVjaW1hbHM6IDAgfSwgdXRpbHMudHJhbnNsYXRlQ29sb3IuSEVYKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b0hFWCA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICByZXR1cm4gQ1NTLkhFWChDb2xvclRyYW5zbGF0b3IudG9IRVhPYmplY3QoY29sb3IpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b0hFWEFPYmplY3QgPSBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgdmFyIG1vZGVsID0gdXRpbHMuZ2V0Q29sb3JNb2RlbChjb2xvcik7XG4gICAgICAgIHJldHVybiBnZXRDb2xvclJldHVybihjb2xvciwgbW9kZWwsIHsgZGVjaW1hbHM6IDAgfSwgdXRpbHMudHJhbnNsYXRlQ29sb3IuSEVYQSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IudG9IRVhBID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHJldHVybiBDU1MuSEVYKENvbG9yVHJhbnNsYXRvci50b0hFWEFPYmplY3QoY29sb3IpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b1JHQk9iamVjdCA9IGZ1bmN0aW9uIChjb2xvciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICB2YXIgbW9kZWwgPSB1dGlscy5nZXRDb2xvck1vZGVsKGNvbG9yKTtcbiAgICAgICAgcmV0dXJuIGdldENvbG9yUmV0dXJuKGNvbG9yLCBtb2RlbCwgb3B0aW9ucywgdXRpbHMudHJhbnNsYXRlQ29sb3IuUkdCKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b1JHQiA9IGZ1bmN0aW9uIChjb2xvciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gQ1NTLlJHQihDb2xvclRyYW5zbGF0b3IudG9SR0JPYmplY3QoY29sb3IsIG9wdGlvbnMpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b1JHQkFPYmplY3QgPSBmdW5jdGlvbiAoY29sb3IsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgdmFyIG1vZGVsID0gdXRpbHMuZ2V0Q29sb3JNb2RlbChjb2xvcik7XG4gICAgICAgIHJldHVybiBnZXRDb2xvclJldHVybihjb2xvciwgbW9kZWwsIG9wdGlvbnMsIHV0aWxzLnRyYW5zbGF0ZUNvbG9yLlJHQkEpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnRvUkdCQSA9IGZ1bmN0aW9uIChjb2xvciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gQ1NTLlJHQihDb2xvclRyYW5zbGF0b3IudG9SR0JBT2JqZWN0KGNvbG9yLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IudG9IU0xPYmplY3QgPSBmdW5jdGlvbiAoY29sb3IsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgdmFyIG1vZGVsID0gdXRpbHMuZ2V0Q29sb3JNb2RlbChjb2xvcik7XG4gICAgICAgIHJldHVybiBnZXRDb2xvclJldHVybihjb2xvciwgbW9kZWwsIG9wdGlvbnMsIHV0aWxzLnRyYW5zbGF0ZUNvbG9yLkhTTCk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IudG9IU0wgPSBmdW5jdGlvbiAoY29sb3IsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIENTUy5IU0woQ29sb3JUcmFuc2xhdG9yLnRvSFNMT2JqZWN0KGNvbG9yLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IudG9IU0xBT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9yLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHZhciBtb2RlbCA9IHV0aWxzLmdldENvbG9yTW9kZWwoY29sb3IpO1xuICAgICAgICByZXR1cm4gZ2V0Q29sb3JSZXR1cm4oY29sb3IsIG1vZGVsLCBvcHRpb25zLCB1dGlscy50cmFuc2xhdGVDb2xvci5IU0xBKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b0hTTEEgPSBmdW5jdGlvbiAoY29sb3IsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIENTUy5IU0woQ29sb3JUcmFuc2xhdG9yLnRvSFNMQU9iamVjdChjb2xvciwgb3B0aW9ucykpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnRvQ01ZS09iamVjdCA9IGZ1bmN0aW9uIChjb2xvciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICB2YXIgbW9kZWwgPSB1dGlscy5nZXRDb2xvck1vZGVsKGNvbG9yKTtcbiAgICAgICAgcmV0dXJuIGdldENvbG9yUmV0dXJuKGNvbG9yLCBtb2RlbCwgb3B0aW9ucywgdXRpbHMudHJhbnNsYXRlQ29sb3IuQ01ZSyk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IudG9DTVlLID0gZnVuY3Rpb24gKGNvbG9yLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBDU1MuQ01ZSyhDb2xvclRyYW5zbGF0b3IudG9DTVlLT2JqZWN0KGNvbG9yLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IudG9DTVlLQU9iamVjdCA9IGZ1bmN0aW9uIChjb2xvciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICB2YXIgbW9kZWwgPSB1dGlscy5nZXRDb2xvck1vZGVsKGNvbG9yKTtcbiAgICAgICAgcmV0dXJuIGdldENvbG9yUmV0dXJuKGNvbG9yLCBtb2RlbCwgb3B0aW9ucywgdXRpbHMudHJhbnNsYXRlQ29sb3IuQ01ZS0EpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnRvQ01ZS0EgPSBmdW5jdGlvbiAoY29sb3IsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIENTUy5DTVlLKENvbG9yVHJhbnNsYXRvci50b0NNWUtBT2JqZWN0KGNvbG9yLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IuZ2V0QmxlbmRIRVhPYmplY3QgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICByZXR1cm4gZ2V0QmxlbmRSZXR1cm4oZnJvbSwgdG8sIHN0ZXBzLCB7IGRlY2ltYWxzOiAwIH0sIHV0aWxzLnRyYW5zbGF0ZUNvbG9yLkhFWCk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IuZ2V0QmxlbmRIRVggPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICByZXR1cm4gQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kSEVYT2JqZWN0KGZyb20sIHRvLCBzdGVwcylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7IHJldHVybiBDU1MuSEVYKGNvbG9yKTsgfSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IuZ2V0QmxlbmRIRVhBT2JqZWN0ID0gZnVuY3Rpb24gKGZyb20sIHRvLCBzdGVwcykge1xuICAgICAgICBpZiAoc3RlcHMgPT09IHZvaWQgMCkgeyBzdGVwcyA9IERFRkFVTFRfQkxFTkRfU1RFUFM7IH1cbiAgICAgICAgcmV0dXJuIGdldEJsZW5kUmV0dXJuKGZyb20sIHRvLCBzdGVwcywgeyBkZWNpbWFsczogMCB9LCB1dGlscy50cmFuc2xhdGVDb2xvci5IRVhBKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZEhFWEEgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICByZXR1cm4gQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kSEVYQU9iamVjdChmcm9tLCB0bywgc3RlcHMpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChjb2xvcikgeyByZXR1cm4gQ1NTLkhFWChjb2xvcik7IH0pO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kUkdCT2JqZWN0ID0gZnVuY3Rpb24gKGZyb20sIHRvLCBzdGVwcywgb3B0aW9ucykge1xuICAgICAgICBpZiAoc3RlcHMgPT09IHZvaWQgMCkgeyBzdGVwcyA9IERFRkFVTFRfQkxFTkRfU1RFUFM7IH1cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIGdldEJsZW5kUmV0dXJuKGZyb20sIHRvLCBzdGVwcywgb3B0aW9ucywgdXRpbHMudHJhbnNsYXRlQ29sb3IuUkdCKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZFJHQiA9IGZ1bmN0aW9uIChmcm9tLCB0bywgc3RlcHMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHN0ZXBzID09PSB2b2lkIDApIHsgc3RlcHMgPSBERUZBVUxUX0JMRU5EX1NURVBTOyB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBDb2xvclRyYW5zbGF0b3IuZ2V0QmxlbmRSR0JPYmplY3QoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJuIENTUy5SR0IoY29sb3IpOyB9KTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZFJHQkFPYmplY3QgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gZ2V0QmxlbmRSZXR1cm4oZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zLCB1dGlscy50cmFuc2xhdGVDb2xvci5SR0JBKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZFJHQkEgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kUkdCQU9iamVjdChmcm9tLCB0bywgc3RlcHMsIG9wdGlvbnMpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChjb2xvcikgeyByZXR1cm4gQ1NTLlJHQihjb2xvcik7IH0pO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kSFNMT2JqZWN0ID0gZnVuY3Rpb24gKGZyb20sIHRvLCBzdGVwcywgb3B0aW9ucykge1xuICAgICAgICBpZiAoc3RlcHMgPT09IHZvaWQgMCkgeyBzdGVwcyA9IERFRkFVTFRfQkxFTkRfU1RFUFM7IH1cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIGdldEJsZW5kUmV0dXJuKGZyb20sIHRvLCBzdGVwcywgb3B0aW9ucywgdXRpbHMudHJhbnNsYXRlQ29sb3IuSFNMKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZEhTTCA9IGZ1bmN0aW9uIChmcm9tLCB0bywgc3RlcHMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHN0ZXBzID09PSB2b2lkIDApIHsgc3RlcHMgPSBERUZBVUxUX0JMRU5EX1NURVBTOyB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBDb2xvclRyYW5zbGF0b3IuZ2V0QmxlbmRIU0xPYmplY3QoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJuIENTUy5IU0woY29sb3IpOyB9KTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZEhTTEFPYmplY3QgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gZ2V0QmxlbmRSZXR1cm4oZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zLCB1dGlscy50cmFuc2xhdGVDb2xvci5IU0xBKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZEhTTEEgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kSFNMQU9iamVjdChmcm9tLCB0bywgc3RlcHMsIG9wdGlvbnMpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChjb2xvcikgeyByZXR1cm4gQ1NTLkhTTChjb2xvcik7IH0pO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldE1peEhFWE9iamVjdCA9IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUpIHtcbiAgICAgICAgaWYgKG1vZGUgPT09IHZvaWQgMCkgeyBtb2RlID0gTWl4LkFERElUSVZFOyB9XG4gICAgICAgIHJldHVybiB1dGlscy5jb2xvck1peGVyLkhFWChjb2xvcnMsIG1vZGUsIGZhbHNlKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIRVggPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlKSB7XG4gICAgICAgIGlmIChtb2RlID09PSB2b2lkIDApIHsgbW9kZSA9IE1peC5BRERJVElWRTsgfVxuICAgICAgICByZXR1cm4gdXRpbHMuY29sb3JNaXhlci5IRVgoY29sb3JzLCBtb2RlLCB0cnVlKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIRVhBT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSkge1xuICAgICAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSB7IG1vZGUgPSBNaXguQURESVRJVkU7IH1cbiAgICAgICAgcmV0dXJuIHV0aWxzLmNvbG9yTWl4ZXIuSEVYQShjb2xvcnMsIG1vZGUsIGZhbHNlKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIRVhBID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSkge1xuICAgICAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSB7IG1vZGUgPSBNaXguQURESVRJVkU7IH1cbiAgICAgICAgcmV0dXJuIHV0aWxzLmNvbG9yTWl4ZXIuSEVYQShjb2xvcnMsIG1vZGUsIHRydWUpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldE1peFJHQk9iamVjdCA9IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG1vZGUgPT09IHZvaWQgMCkgeyBtb2RlID0gTWl4LkFERElUSVZFOyB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiB1dGlscy5jb2xvck1peGVyLlJHQihjb2xvcnMsIG1vZGUsIGZhbHNlLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhSR0IgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChtb2RlID09PSB2b2lkIDApIHsgbW9kZSA9IE1peC5BRERJVElWRTsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gdXRpbHMuY29sb3JNaXhlci5SR0IoY29sb3JzLCBtb2RlLCB0cnVlLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhSR0JBT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSB7IG1vZGUgPSBNaXguQURESVRJVkU7IH1cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIHV0aWxzLmNvbG9yTWl4ZXIuUkdCQShjb2xvcnMsIG1vZGUsIGZhbHNlLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhSR0JBID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSB7IG1vZGUgPSBNaXguQURESVRJVkU7IH1cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIHV0aWxzLmNvbG9yTWl4ZXIuUkdCQShjb2xvcnMsIG1vZGUsIHRydWUsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldE1peEhTTE9iamVjdCA9IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG1vZGUgPT09IHZvaWQgMCkgeyBtb2RlID0gTWl4LkFERElUSVZFOyB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiB1dGlscy5jb2xvck1peGVyLkhTTChjb2xvcnMsIG1vZGUsIGZhbHNlLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIU0wgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChtb2RlID09PSB2b2lkIDApIHsgbW9kZSA9IE1peC5BRERJVElWRTsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gdXRpbHMuY29sb3JNaXhlci5IU0woY29sb3JzLCBtb2RlLCB0cnVlLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIU0xBT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSB7IG1vZGUgPSBNaXguQURESVRJVkU7IH1cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIHV0aWxzLmNvbG9yTWl4ZXIuSFNMQShjb2xvcnMsIG1vZGUsIGZhbHNlLCBvcHRpb25zKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIU0xBID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSB7IG1vZGUgPSBNaXguQURESVRJVkU7IH1cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIHV0aWxzLmNvbG9yTWl4ZXIuSFNMQShjb2xvcnMsIG1vZGUsIHRydWUsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldFNoYWRlcyA9IGZ1bmN0aW9uIChjb2xvciwgc2hhZGVzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiB1dGlscy5nZXRDb2xvck1peHR1cmUoY29sb3IsIHNoYWRlcywgdHJ1ZSwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IuZ2V0VGludHMgPSBmdW5jdGlvbiAoY29sb3IsIHRpbnRzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiB1dGlscy5nZXRDb2xvck1peHR1cmUoY29sb3IsIHRpbnRzLCBmYWxzZSwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IuZ2V0SGFybW9ueSA9IGZ1bmN0aW9uIChjb2xvciwgaGFybW9ueSwgbW9kZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAoaGFybW9ueSA9PT0gdm9pZCAwKSB7IGhhcm1vbnkgPSBIYXJtb255LkNPTVBMRU1FTlRBUlk7IH1cbiAgICAgICAgaWYgKG1vZGUgPT09IHZvaWQgMCkgeyBtb2RlID0gTWl4LkFERElUSVZFOyB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBnZXRIYXJtb255UmV0dXJuKGhhcm1vbnksIGNvbG9yLCBvcHRpb25zLCBtb2RlKTtcbiAgICB9O1xuICAgIHJldHVybiBDb2xvclRyYW5zbGF0b3I7XG59KCkpO1xuZXhwb3J0IHsgQ29sb3JUcmFuc2xhdG9yIH07XG5leHBvcnQgeyBIYXJtb255LCBNaXggfTtcbiIsImltcG9ydCAnLi9zdHlsZXMuc2Nzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChDb2xvclRyYW5zbGF0b3IpID0+IHtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGNvbG9yID0gbmV3IENvbG9yVHJhbnNsYXRvcignaHNsKDE4MCwxMDAlLDUwJSknLCB7IGRlY2ltYWxzOiAwIH0pO1xuXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgMTA7IHJvdysrKSB7XG5cbiAgICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgMTA7IGNvbCsrKSB7XG5cbiAgICAgICAgICAgIGNvbG9yXG4gICAgICAgICAgICAgICAgLnNldFMocm93ICogMTApXG4gICAgICAgICAgICAgICAgLnNldEwoY29sICogNSArIDMwKTtcblxuICAgICAgICAgICAgY29uc3QgYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGJveC5jbGFzc0xpc3QuYWRkKCdib3gnKTtcbiAgICAgICAgICAgIGJveC5zdHlsZS5iYWNrZ3JvdW5kID0gY29sb3IuSEVYO1xuXG4gICAgICAgICAgICBib3guaW5uZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBgUjoke2NvbG9yLlJ9XG4gICAgICAgICAgICAgICAgIEc6JHtjb2xvci5HfVxuICAgICAgICAgICAgICAgICBCOiR7Y29sb3IuQn1gO1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGJveCk7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZXI7XG5cbn07IiwiaW1wb3J0ICcuL3N0eWxlcy5zY3NzJztcblxuZXhwb3J0IGRlZmF1bHQgKENvbG9yVHJhbnNsYXRvcikgPT4ge1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgY29sb3IgPSBuZXcgQ29sb3JUcmFuc2xhdG9yKHsgcjogMjU1LCBnOiAwLCBiOiAwIH0pO1xuICAgIGNvbnN0IGh1ZSA9IFswLCAzMCwgNjAsIDEyMCwgMjQwLCAyODAsIDMyMCwgMF07XG4gICAgbGV0IHJhaW5ib3c7XG5cbiAgICBmb3IgKGxldCByID0gMDsgciA8IGh1ZS5sZW5ndGg7IHIrKykge1xuXG4gICAgICAgIGNvbG9yLnNldEgoaHVlW3JdKTtcblxuICAgICAgICBjb25zdCBib3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgICBib3cuY2xhc3NMaXN0LmFkZCgncmFpbmJvdycpO1xuICAgICAgICBib3cuc3R5bGUuYmFja2dyb3VuZCA9IGNvbG9yLkhFWDtcblxuICAgICAgICBpZiAocmFpbmJvdykge1xuICAgICAgICAgICAgcmFpbmJvdy5hcHBlbmRDaGlsZChib3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGJvdyk7XG4gICAgICAgIH1cblxuICAgICAgICByYWluYm93ID0gYm93O1xuICAgIH1cblxuICAgIHJhaW5ib3cuc3R5bGUuYmFja2dyb3VuZCA9ICcjMzMzJztcblxuICAgIHJldHVybiBjb250YWluZXI7XG5cbn07IiwiaW1wb3J0ICcuL3N0eWxlcy5zY3NzJztcblxuZXhwb3J0IGRlZmF1bHQgKENvbG9yVHJhbnNsYXRvcikgPT4ge1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgaHNsID0geyBoOiAwLCBzOiAnOTAlJywgbDogJzUwJScgfTtcbiAgICBjb25zdCBodWUgPSBbdW5kZWZpbmVkLCA1NSwgMzAsIDAsIDI5MCwgMjIwLCAxMzBdO1xuICAgIGNvbnN0IHRvdGFsID0gaHVlLmxlbmd0aDtcblxuICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRvdGFsOyByb3crKykge1xuXG4gICAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IHRvdGFsOyBjb2wrKykge1xuXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0b3RhbCAtIHJvdyArIGNvbDtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSB0b3RhbCkge1xuICAgICAgICAgICAgICAgIGluZGV4IC09IHRvdGFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaHNsLmggPSBodWVbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgcmdiID0gaHVlW2luZGV4XSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyAnI0ZGRidcbiAgICAgICAgICAgICAgICA6IENvbG9yVHJhbnNsYXRvci50b0hFWChoc2wpO1xuICAgICAgICAgICAgY29uc3QgYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGJveC5jbGFzc0xpc3QuYWRkKCdmbGFnJyk7XG4gICAgICAgICAgICBib3guc3R5bGUuYmFja2dyb3VuZCA9IHJnYjtcblxuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGJveCk7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZXI7XG5cbn07IiwiaW1wb3J0ICcuL3N0eWxlcy5zY3NzJztcblxuZXhwb3J0IGRlZmF1bHQgKENvbG9yVHJhbnNsYXRvcikgPT4ge1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgY29sb3JzID0gW1xuICAgICAgICAncmVkJyxcbiAgICAgICAgJ2xpbWUnLFxuICAgICAgICAnYmx1ZScsXG4gICAgICAgICdhcXVhJyxcbiAgICAgICAgJ3llbGxvdycsXG4gICAgICAgICdmdWNoc2lhJ1xuICAgIF07XG4gICAgY29uc3QgdG90YWwgPSBjb2xvcnMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdG90YWw7IHJvdysrKSB7XG5cbiAgICAgICAgY29uc3QgaHNsID0gQ29sb3JUcmFuc2xhdG9yLnRvSFNMT2JqZWN0KGNvbG9yc1tyb3ddLCB7IGRlY2ltYWxzOiAwIH0pO1xuICAgICAgICBjb25zdCBzdGVwID0gaHNsLnMgLyAodG90YWwgLSAxKTtcblxuICAgICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCB0b3RhbDsgY29sKyspIHtcblxuICAgICAgICAgICAgY29uc3QgcmdiID0gQ29sb3JUcmFuc2xhdG9yLnRvSEVYKGhzbCwgeyBkZWNpbWFsczogMCB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNteWsgPSBDb2xvclRyYW5zbGF0b3IudG9DTVlLT2JqZWN0KGhzbCwgeyBkZWNpbWFsczogMCB9KTtcblxuICAgICAgICAgICAgY29uc3QgYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBib3guY2xhc3NMaXN0LmFkZCgnYm94Jyk7XG4gICAgICAgICAgICBib3guc3R5bGUuYmFja2dyb3VuZCA9IHJnYjtcbiAgICAgICAgICAgIGJveC5pbm5lclRleHQgPSBgQzoke2NteWsuY31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTToke2NteWsubX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWToke2NteWsueX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSzoke2NteWsua31gO1xuXG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYm94KTtcblxuICAgICAgICAgICAgaHNsLnMgLT0gc3RlcDtcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcblxufTsiLCJpbXBvcnQgJy4vc3R5bGVzLnNjc3MnO1xuXG5leHBvcnQgZGVmYXVsdCAoQ29sb3JUcmFuc2xhdG9yKSA9PiB7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCByb3dzID0gMTE7XG4gICAgY29uc3QgbXVsdCA9IDM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuXG4gICAgICAgIGNvbnN0IGJsZW5kcyA9IENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZEhFWCgnI0ZGMDAwMCcsICcjRkZGRjAwJywgbXVsdCArIGkgKiBtdWx0KTtcblxuICAgICAgICBibGVuZHMuZm9yRWFjaCgoYmxlbmQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGJveC5jbGFzc0xpc3QuYWRkKCdib3gnLCBgZmlsZSR7aX1gKTtcbiAgICAgICAgICAgIGJveC5zdHlsZS5iYWNrZ3JvdW5kID0gYmxlbmQ7XG4gICAgICAgICAgICBib3guaW5uZXJUZXh0ID0gaW5kZXggKyAxO1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGJveCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcblxufTsiLCJpbXBvcnQgJy4vc3R5bGVzLnNjc3MnO1xuXG5leHBvcnQgZGVmYXVsdCAoQ29sb3JUcmFuc2xhdG9yKSA9PiB7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgIGNvbnN0IGNvbG9ycyA9IFsnI0YwMCcsICcjRkY4MDAwJywgJyNGRjAnLCAnIzBGMCcsICcjMDBGJywgJyNBQTAwRkYnLCAnI0ZGMDBBQSddO1xuXG4gICAgY29uc3QgY3JlYXRlQm94ID0gKGNvbG9yLCB0eXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBib3guY2xhc3NMaXN0LmFkZCgnYm94Jyk7XG4gICAgICAgIGJveC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjtcbiAgICAgICAgaWYgKHR5cGUpIGJveC5kYXRhc2V0LnR5cGUgPSB0eXBlO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYm94KTtcbiAgICB9O1xuXG4gICAgY29sb3JzLmZvckVhY2goKGNvbG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHNoYWRlcyA9IENvbG9yVHJhbnNsYXRvci5nZXRTaGFkZXMoY29sb3IsIDMpLnJldmVyc2UoKTtcbiAgICAgICAgY29uc3QgdGludHMgPSBDb2xvclRyYW5zbGF0b3IuZ2V0VGludHMoY29sb3IsIDMpO1xuICAgICAgICBzaGFkZXMuZm9yRWFjaCgoc2hhZGUpID0+IGNyZWF0ZUJveChzaGFkZSwgJ3NoYWRlJykpO1xuICAgICAgICBjcmVhdGVCb3goY29sb3IpO1xuICAgICAgICB0aW50cy5mb3JFYWNoKCh0aW50KSA9PiBjcmVhdGVCb3godGludCwgJ3RpbnQnKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29udGFpbmVyO1xuXG59OyIsImltcG9ydCAnLi9zdHlsZXMuc2Nzcyc7XG5cblxuZXhwb3J0IGRlZmF1bHQgKENvbG9yVHJhbnNsYXRvcikgPT4ge1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICBjb25zdCBtaXhlcyA9IFtcbiAgICAgICAgJyNGRjAwMDAnLFxuICAgICAgICAnIzAwRkYwMCcsXG4gICAgICAgICcjMDAwMEZGJyxcbiAgICAgICAgWzEsIDNdLFxuICAgICAgICBbMSwgMl0sXG4gICAgICAgIFsyLCAzXSxcbiAgICAgICAgWzEsIDIsIDNdXG4gICAgXTtcblxuICAgIGNvbnN0IGZpbGxQbGFuZXMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBsYW5lcyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcjcGxhbmVzIHBhdGgnKTtcbiAgICAgICAgcGxhbmVzLmZvckVhY2goKHBsYW5lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbG9yID0gJyNDQ0NDQ0MnO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtaXhlc1tpbmRleF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29sb3IgPSBtaXhlc1tpbmRleF07XG4gICAgICAgICAgICB9IGVsc2UgaWYobWl4ZXNbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3JzID0gbWl4ZXNbaW5kZXhdLm1hcCgoaSkgPT4gbWl4ZXNbaSAtIDFdKTtcbiAgICAgICAgICAgICAgICBjb2xvciA9IG1peGVzW2luZGV4XSA9IENvbG9yVHJhbnNsYXRvci5nZXRNaXhIRVgoY29sb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBsYW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsIGNvbG9yKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZldGNoKCdpbWFnZXMvY29sb3ItbWl4ZXMuc3ZnJylcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC50ZXh0KCkpXG4gICAgICAgIC50aGVuKChzdmdDb2RlKSA9PiB7XG4gICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gc3ZnQ29kZTtcbiAgICAgICAgICAgIGZpbGxQbGFuZXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY29udGFpbmVyO1xuXG59OyIsImltcG9ydCAnLi9zdHlsZXMuc2Nzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChDb2xvclRyYW5zbGF0b3IsIHsgTWl4IH0pID0+IHtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgY29uc3QgbWl4ZXMgPSBbXG4gICAgICAgICcjRkYwMDAwJyxcbiAgICAgICAgJyNGRkZGMDAnLFxuICAgICAgICAnIzAwMDBGRicsXG4gICAgICAgIFsxLCAzXSxcbiAgICAgICAgWzEsIDJdLFxuICAgICAgICBbMiwgM10sXG4gICAgICAgIFsxLCAyLCAzXVxuICAgIF07XG5cbiAgICBjb25zdCBmaWxsUGxhbmVzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBwbGFuZXMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnI3BsYW5lcyBwYXRoJyk7XG4gICAgICAgIHBsYW5lcy5mb3JFYWNoKChwbGFuZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCBjb2xvciA9ICcjQ0NDQ0NDJztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWl4ZXNbaW5kZXhdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbG9yID0gbWl4ZXNbaW5kZXhdO1xuICAgICAgICAgICAgfSBlbHNlIGlmKG1peGVzW2luZGV4XSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9ycyA9IG1peGVzW2luZGV4XS5tYXAoKGkpID0+IG1peGVzW2kgLSAxXSk7XG4gICAgICAgICAgICAgICAgY29sb3IgPSBtaXhlc1tpbmRleF0gPSBDb2xvclRyYW5zbGF0b3IuZ2V0TWl4SEVYKGNvbG9ycywgTWl4LlNVQlRSQUNUSVZFKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBsYW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsIGNvbG9yKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZldGNoKCdpbWFnZXMvY29sb3ItbWl4ZXMuc3ZnJylcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC50ZXh0KCkpXG4gICAgICAgIC50aGVuKChzdmdDb2RlKSA9PiB7XG4gICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gc3ZnQ29kZTtcbiAgICAgICAgICAgIGZpbGxQbGFuZXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gY29udGFpbmVyO1xuXG59OyIsImltcG9ydCAnLi9zdHlsZXMuc2Nzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChDb2xvclRyYW5zbGF0b3IsIHsgSGFybW9ueSB9KSA9PiB7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgIGNvbnN0IGhhcm1vbmllcyA9IFtcbiAgICAgICAgeyBsYWJlbDogJ0NvbXBsZW1lbnRhcnknLCAgICAgICB2YWx1ZTogSGFybW9ueS5DT01QTEVNRU5UQVJZIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTcGxpdCBDb21wbGVtZW50YXJ5JywgdmFsdWU6IEhhcm1vbnkuU1BMSVRfQ09NUExFTUVOVEFSWSB9LFxuICAgICAgICB7IGxhYmVsOiAnQW5hbG9nb3VzJywgICAgICAgICAgIHZhbHVlOiBIYXJtb255LkFOQUxPR09VUyB9LFxuICAgICAgICB7IGxhYmVsOiAnVHJpYWRpYycsICAgICAgICAgICAgIHZhbHVlOiBIYXJtb255LlRSSUFESUMgfSxcbiAgICAgICAgeyBsYWJlbDogJ1RldHJhZGljJywgICAgICAgICAgICB2YWx1ZTogSGFybW9ueS5URVRSQURJQyB9LFxuICAgICAgICB7IGxhYmVsOiAnU3F1YXJlJywgICAgICAgICAgICAgIHZhbHVlOiBIYXJtb255LlNRVUFSRSB9XG4gICAgXTtcblxuICAgIGNvbnN0IGJhc2VDb2xvciA9ICcjRjAwJztcblxuICAgIGNvbnN0IGNyZWF0ZUVsZW1lbnQgPSAoY2xhc3NOYW1lLCBwYXJlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRpdi5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChkaXYpO1xuICAgICAgICByZXR1cm4gZGl2O1xuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVIYXJtb255ID0gKGl0ZW0pID0+IHtcblxuICAgICAgICBjb25zdCB3cmFwcGVyID0gY3JlYXRlRWxlbWVudCgnd3JhcHBlcicsIGNvbnRhaW5lcik7XG4gICAgICAgIGNvbnN0IHdoZWVsID0gY3JlYXRlRWxlbWVudCgnd2hlZWwnLCB3cmFwcGVyKTtcbiAgICAgICAgY29uc3QgaGFybW9ueSA9IGNyZWF0ZUVsZW1lbnQoJ2hhcm1vbnknLCB3cmFwcGVyKTtcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnbGFiZWwnLCB3cmFwcGVyKS5pbm5lclRleHQgPSBpdGVtLmxhYmVsO1xuXG4gICAgICAgIGZldGNoKCdpbWFnZXMvd2hlZWwtYWRkaXRpdmUuc3ZnJylcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiByZXN1bHQudGV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oKHN2Z0NvZGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXJtb255Q29sb3JzID0gQ29sb3JUcmFuc2xhdG9yLmdldEhhcm1vbnkoYmFzZUNvbG9yLCBpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RvciA9ICdwYXRoJyArIGhhcm1vbnlDb2xvcnMubWFwKChjb2xvcikgPT4gYDpub3QoW2ZpbGw9XCIke2NvbG9yfVwiXSlgKS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICB3aGVlbC5pbm5lckhUTUwgPSBzdmdDb2RlO1xuICAgICAgICAgICAgICAgIGhhcm1vbnlDb2xvcnMuZm9yRWFjaCgoaGV4KSA9PiBjcmVhdGVFbGVtZW50KCdib3gnLCBoYXJtb255KS5zdHlsZS5iYWNrZ3JvdW5kID0gaGV4KTtcbiAgICAgICAgICAgICAgICB3aGVlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKS5mb3JFYWNoKChwYXRoKSA9PiBwYXRoLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5JywgJzAuMjUnKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgIH07XG5cbiAgICBoYXJtb25pZXMuZm9yRWFjaCgoaXRlbSkgPT4gY3JlYXRlSGFybW9ueShpdGVtKSk7XG5cbiAgICByZXR1cm4gY29udGFpbmVyO1xuXG59OyIsImltcG9ydCAnLi9zdHlsZXMuc2Nzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChDb2xvclRyYW5zbGF0b3IsIHsgSGFybW9ueSwgTWl4IH0pID0+IHtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgY29uc3QgaGFybW9uaWVzID0gW1xuICAgICAgICB7IGxhYmVsOiAnQ29tcGxlbWVudGFyeScsICAgICAgIHZhbHVlOiBIYXJtb255LkNPTVBMRU1FTlRBUlkgfSxcbiAgICAgICAgeyBsYWJlbDogJ1NwbGl0IENvbXBsZW1lbnRhcnknLCB2YWx1ZTogSGFybW9ueS5TUExJVF9DT01QTEVNRU5UQVJZIH0sXG4gICAgICAgIHsgbGFiZWw6ICdBbmFsb2dvdXMnLCAgICAgICAgICAgdmFsdWU6IEhhcm1vbnkuQU5BTE9HT1VTIH0sXG4gICAgICAgIHsgbGFiZWw6ICdUcmlhZGljJywgICAgICAgICAgICAgdmFsdWU6IEhhcm1vbnkuVFJJQURJQyB9LFxuICAgICAgICB7IGxhYmVsOiAnVGV0cmFkaWMnLCAgICAgICAgICAgIHZhbHVlOiBIYXJtb255LlRFVFJBRElDIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTcXVhcmUnLCAgICAgICAgICAgICAgdmFsdWU6IEhhcm1vbnkuU1FVQVJFIH1cbiAgICBdO1xuXG4gICAgY29uc3QgYmFzZUNvbG9yID0gJyNGMDAnO1xuXG4gICAgY29uc3QgY3JlYXRlRWxlbWVudCA9IChjbGFzc05hbWUsIHBhcmVudCkgPT4ge1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgIHJldHVybiBkaXY7XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZUhhcm1vbnkgPSAoaXRlbSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBjcmVhdGVFbGVtZW50KCd3cmFwcGVyJywgY29udGFpbmVyKTtcbiAgICAgICAgY29uc3Qgd2hlZWwgPSBjcmVhdGVFbGVtZW50KCd3aGVlbCcsIHdyYXBwZXIpO1xuICAgICAgICBjb25zdCBoYXJtb255ID0gY3JlYXRlRWxlbWVudCgnaGFybW9ueScsIHdyYXBwZXIpO1xuICAgICAgICBjcmVhdGVFbGVtZW50KCdsYWJlbCcsIHdyYXBwZXIpLmlubmVyVGV4dCA9IGl0ZW0ubGFiZWw7XG5cbiAgICAgICAgZmV0Y2goJ2ltYWdlcy93aGVlbC1zdWJ0cmFjdGl2ZS5zdmcnKVxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC50ZXh0KCkpXG4gICAgICAgICAgICAudGhlbigoc3ZnQ29kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhcm1vbnlDb2xvcnMgPSBDb2xvclRyYW5zbGF0b3IuZ2V0SGFybW9ueShiYXNlQ29sb3IsIGl0ZW0udmFsdWUsIE1peC5TVUJUUkFDVElWRSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSAncGF0aCcgKyBoYXJtb255Q29sb3JzLm1hcCgoY29sb3IpID0+IGA6bm90KFtmaWxsPVwiJHtjb2xvcn1cIl0pYCkuam9pbignJyk7XG4gICAgICAgICAgICAgICAgd2hlZWwuaW5uZXJIVE1MID0gc3ZnQ29kZTtcbiAgICAgICAgICAgICAgICBoYXJtb255Q29sb3JzLmZvckVhY2goKGhleCkgPT4gY3JlYXRlRWxlbWVudCgnYm94JywgaGFybW9ueSkuc3R5bGUuYmFja2dyb3VuZCA9IGhleCk7XG4gICAgICAgICAgICAgICAgd2hlZWwucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikuZm9yRWFjaCgocGF0aCkgPT4gcGF0aC5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjI1JykpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICB9O1xuXG4gICAgaGFybW9uaWVzLmZvckVhY2goKGl0ZW0pID0+IGNyZWF0ZUhhcm1vbnkoaXRlbSkpO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcblxufTsiLCJpbXBvcnQgJy4uLy4uL25vZGVfbW9kdWxlcy9nb29nbGUtY29kZS1wcmV0dGlmeS9iaW4vcnVuX3ByZXR0aWZ5Lm1pbic7XG5pbXBvcnQgJy4uLy4uL25vZGVfbW9kdWxlcy9nb29nbGUtY29kZS1wcmV0dGlmeS9iaW4vcHJldHRpZnkubWluLmNzcyc7XG5pbXBvcnQgJy4uLy4uL25vZGVfbW9kdWxlcy9nb29nbGUtY29kZS1wcmV0dGlmeS9zdHlsZXMvZGVzZXJ0LmNzcyc7XG5pbXBvcnQgJ3doYXR3Zy1mZXRjaCc7XG5pbXBvcnQgJy4vc3R5bGVzLnNjc3MnO1xuaW1wb3J0IHsgQ29sb3JUcmFuc2xhdG9yLCBIYXJtb255LCBNaXggfSBmcm9tICcuLi8nO1xuaW1wb3J0IGRlbW8xIGZyb20gJy4vZGVtbzEnO1xuaW1wb3J0IGRlbW8yIGZyb20gJy4vZGVtbzInO1xuaW1wb3J0IGRlbW8zIGZyb20gJy4vZGVtbzMnO1xuaW1wb3J0IGRlbW80IGZyb20gJy4vZGVtbzQnO1xuaW1wb3J0IGRlbW81IGZyb20gJy4vZGVtbzUnO1xuaW1wb3J0IGRlbW82IGZyb20gJy4vZGVtbzYnO1xuaW1wb3J0IGRlbW83IGZyb20gJy4vZGVtbzcnO1xuaW1wb3J0IGRlbW84IGZyb20gJy4vZGVtbzgnO1xuaW1wb3J0IGRlbW85IGZyb20gJy4vZGVtbzknO1xuaW1wb3J0IGRlbW8xMCBmcm9tICcuL2RlbW8xMCc7XG5cbmNvbnN0IGZ1bmN0aW9Ub1N0cmluZyA9IChmbikgPT4ge1xuICAgIGNvbnN0IGFydGljbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhcnRpY2xlJyk7XG4gICAgY29uc3QgcHJlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgYXJ0aWNsZS5jbGFzc0xpc3QuYWRkKCdmdW5jdGlvbi1jb250YWluZXInKTtcbiAgICBwcmUuY2xhc3NMaXN0LmFkZCgncHJldHR5cHJpbnQnKTtcbiAgICBhcnRpY2xlLmFwcGVuZENoaWxkKHByZSk7XG4gICAgcHJlLmlubmVySFRNTCA9IGZuLnRvU3RyaW5nKCkucmVwbGFjZSgnKENvbG9yVHJhbnNsYXRvciknLCAnKCknKTtcbiAgICByZXR1cm4gYXJ0aWNsZTtcbn07XG5cbmNvbnN0IGRlbW9zID0gbmV3IE1hcChbXG4gICAgWydkZW1vMScsIGRlbW8xXSxcbiAgICBbJ2RlbW8yJywgZGVtbzJdLFxuICAgIFsnZGVtbzMnLCBkZW1vM10sXG4gICAgWydkZW1vNCcsIGRlbW80XSxcbiAgICBbJ2RlbW81JywgZGVtbzVdLFxuICAgIFsnZGVtbzYnLCBkZW1vNl0sXG4gICAgWydkZW1vNycsIGRlbW83XSxcbiAgICBbJ2RlbW84JywgZGVtbzhdLFxuICAgIFsnZGVtbzknLCBkZW1vOV0sXG4gICAgWydkZW1vMTAnLCBkZW1vMTBdLFxuXSk7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgZGVtb3MuZm9yRWFjaCgobW9kdWxlLCBkaXYpID0+IHtcbiAgICAgICAgY29uc3QgZGVtbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdik7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2RlbW8tY29udGFpbmVyJyk7XG4gICAgICAgIHdyYXBwZXIuY2xhc3NMaXN0LmFkZCgnZGVtby13cmFwcGVyJyk7XG5cbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChtb2R1bGUoQ29sb3JUcmFuc2xhdG9yLCB7IEhhcm1vbnksIE1peCB9KSk7XG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcbiAgICAgICAgZGVtby5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICBkZW1vLmFwcGVuZENoaWxkKGZ1bmN0aW9Ub1N0cmluZyhtb2R1bGUpKTtcbiAgICB9KTtcbn0pOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///779\n')}},__webpack_module_cache__={};function __webpack_require__(I){var g=__webpack_module_cache__[I];if(void 0!==g)return g.exports;var C=__webpack_module_cache__[I]={exports:{}};return __webpack_modules__[I](C,C.exports,__webpack_require__),C.exports}__webpack_require__.r=I=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(I,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(I,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__(779),__webpack_export_target__=window;for(var i in __webpack_exports__)__webpack_export_target__[i]=__webpack_exports__[i];__webpack_exports__.__esModule&&Object.defineProperty(__webpack_export_target__,"__esModule",{value:!0})})(); \ No newline at end of file +(()=>{var __webpack_modules__={538:(module,exports)=>{eval('var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!function(){var r=null;\n(function(){function X(e){function j(){try{J.doScroll("left")}catch(e){P(j,50);return}w("poll")}function w(j){if(!(j.type=="readystatechange"&&x.readyState!="complete")&&((j.type=="load"?n:x)[z](i+j.type,w,!1),!m&&(m=!0)))e.call(n,j.type||j)}var Y=x.addEventListener,m=!1,C=!0,t=Y?"addEventListener":"attachEvent",z=Y?"removeEventListener":"detachEvent",i=Y?"":"on";if(x.readyState=="complete")e.call(n,"lazy");else{if(x.createEventObject&&J.doScroll){try{C=!n.frameElement}catch(A){}C&&j()}x[t](i+"DOMContentLoaded",\nw,!1);x[t](i+"readystatechange",w,!1);n[t](i+"load",w,!1)}}function Q(){S&&X(function(){var e=K.length;$(e?function(){for(var j=0;j=0;){var M=A[m],T=M.src.match(/^[^#?]*\\/run_prettify\\.js(\\?[^#]*)?(?:#.*)?$/);if(T){z=T[1]||"";M.parentNode.removeChild(M);break}}var S=!0,D=\n[],N=[],K=[];z.replace(/[&?]([^&=]+)=([^&]+)/g,function(e,j,w){w=decodeURIComponent(w);j=decodeURIComponent(j);j=="autorun"?S=!/^[0fn]/i.test(w):j=="lang"?D.push(w):j=="skin"?N.push(w):j=="callback"&&K.push(w)});m=0;for(z=D.length;m122||(o<65||k>90||f.push([Math.max(65,k)|32,Math.min(o,90)|32]),o<97||k>122||f.push([Math.max(97,k)&-33,Math.min(o,122)&-33]))}}f.sort(function(f,a){return f[0]-\na[0]||a[1]-f[1]});b=[];g=[];for(a=0;ak[0]&&(k[1]+1>k[0]&&c.push("-"),c.push(h(k[1])));c.push("]");return c.join("")}function e(f){for(var a=f.source.match(/\\[(?:[^\\\\\\]]|\\\\[\\S\\s])*]|\\\\u[\\dA-Fa-f]{4}|\\\\x[\\dA-Fa-f]{2}|\\\\\\d+|\\\\[^\\dux]|\\(\\?[!:=]|[()^]|[^()[\\\\^]+/g),c=a.length,d=[],g=0,k=0;g=2&&f==="["?a[g]=b(o):f!=="\\\\"&&(a[g]=o.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var j=0,F=!1,l=!1,I=0,c=a.length;I=5&&"lang-"===y.substring(0,5))&&!(u&&typeof u[1]==="string"))g=!1,y="src";g||(m[B]=y)}k=c;c+=B.length;if(g){g=u[1];var o=B.indexOf(g),H=o+g.length;u[2]&&(H=B.length-u[2].length,o=H-g.length);y=y.substring(5);n(l+k,B.substring(0,o),h,j);n(l+k+o,g,A(y,\ng),j);n(l+k+H,B.substring(H),h,j)}else j.push(l+k,y)}a.g=j}var b={},e;(function(){for(var h=a.concat(d),l=[],i={},c=0,p=h.length;c=0;)b[q.charAt(f)]=m;m=m[1];q=""+m;i.hasOwnProperty(q)||(l.push(m),i[q]=r)}l.push(/[\\S\\s]/);e=j(l)})();var i=d.length;return h}function t(a){var d=[],h=[];a.tripleQuotedStrings?d.push(["str",/^(?:\'\'\'(?:[^\'\\\\]|\\\\[\\S\\s]|\'\'?(?=[^\']))*(?:\'\'\'|$)|"""(?:[^"\\\\]|\\\\[\\S\\s]|""?(?=[^"]))*(?:"""|$)|\'(?:[^\'\\\\]|\\\\[\\S\\s])*(?:\'|$)|"(?:[^"\\\\]|\\\\[\\S\\s])*(?:"|$))/,\nr,"\'\\""]):a.multiLineStrings?d.push(["str",/^(?:\'(?:[^\'\\\\]|\\\\[\\S\\s])*(?:\'|$)|"(?:[^"\\\\]|\\\\[\\S\\s])*(?:"|$)|`(?:[^\\\\`]|\\\\[\\S\\s])*(?:`|$))/,r,"\'\\"`"]):d.push(["str",/^(?:\'(?:[^\\n\\r\'\\\\]|\\\\.)*(?:\'|$)|"(?:[^\\n\\r"\\\\]|\\\\.)*(?:"|$))/,r,"\\"\'"]);a.verbatimStrings&&h.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,r]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,r,"#"]):d.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\\b|[^\\n\\r]*)/,\nr,"#"]),h.push(["str",/^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h(?:h|pp|\\+\\+)?|[a-z]\\w*)>/,r])):d.push(["com",/^#[^\\n\\r]*/,r,"#"]));a.cStyleComments&&(h.push(["com",/^\\/\\/[^\\n\\r]*/,r]),h.push(["com",/^\\/\\*[\\S\\s]*?(?:\\*\\/|$)/,r]));if(b=a.regexLiterals){var e=(b=b>1?"":"\\n\\r")?".":"[\\\\S\\\\s]";h.push(["lang-regex",RegExp("^(?:^^\\\\.?|[+-]|[!=]=?=?|\\\\#|%=?|&&?=?|\\\\(|\\\\*=?|[+\\\\-]=|->|\\\\/=?|::?|<>?>?=?|,|;|\\\\?|@|\\\\[|~|{|\\\\^\\\\^?=?|\\\\|\\\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\\\s*("+\n("/(?=[^/*"+b+"])(?:[^/\\\\x5B\\\\x5C"+b+"]|\\\\x5C"+e+"|\\\\x5B(?:[^\\\\x5C\\\\x5D"+b+"]|\\\\x5C"+e+")*(?:\\\\x5D|$))+/")+")")])}(b=a.types)&&h.push(["typ",b]);b=(""+a.keywords).replace(/^ | $/g,"");b.length&&h.push(["kwd",RegExp("^(?:"+b.replace(/[\\s,]+/g,"|")+")\\\\b"),r]);d.push(["pln",/^\\s+/,r," \\r\\n\\t\\u00a0"]);b="^.[^\\\\s\\\\w.$@\'\\"`/\\\\\\\\]*";a.regexLiterals&&(b+="(?!s*/)");h.push(["lit",/^@[$_a-z][\\w$@]*/i,r],["typ",/^(?:[@_]?[A-Z]+[a-z][\\w$@]*|\\w+_t\\b)/,r],["pln",/^[$_a-z][\\w$@]*/i,r],["lit",/^(?:0x[\\da-f]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+-]?\\d+)?)[a-z]*/i,\nr,"0123456789"],["pln",/^\\\\[\\S\\s]?/,r],["pun",RegExp(b),r]);return C(d,h)}function z(a,d,h){function b(a){var c=a.nodeType;if(c==1&&!j.test(a.className))if("br"===a.nodeName)e(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&h){var d=a.nodeValue,i=d.match(m);if(i)c=d.substring(0,i.index),a.nodeValue=c,(d=d.substring(i.index+i[0].length))&&a.parentNode.insertBefore(l.createTextNode(d),a.nextSibling),e(a),c||a.parentNode.removeChild(a)}}\nfunction e(a){function b(a,c){var d=c?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),h=a.nextSibling;f.appendChild(d);for(var e=h;e;e=h)h=e.nextSibling,f.appendChild(e)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var j=/(?:^|\\s)nocode(?:\\s|$)/,m=/\\r\\n?|\\n/,l=a.ownerDocument,i=l.createElement("li");a.firstChild;)i.appendChild(a.firstChild);for(var c=[i],p=0;p=0;){var b=d[h];U.hasOwnProperty(b)?V.console&&console.warn("cannot override language handler %s",b):U[b]=a}}function A(a,d){if(!a||!U.hasOwnProperty(a))a=/^\\s*=o&&(b+=2);h>=H&&(t+=2)}}finally{if(g)g.style.display=k}}catch(v){V.console&&console.log(v&&v.stack||v)}}var V=window,G=["break,continue,do,else,for,if,return,while"],O=[[G,"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],\n"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],J=[O,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],K=[O,"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"],\nL=[K,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],O=[O,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],M=[G,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],\nN=[G,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],R=[G,"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use"],G=[G,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],Q=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\\d*)\\b/,\nS=/\\S/,T=t({keywords:[J,L,O,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",M,N,G],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),U={};i(T,["default-code"]);i(C([],[["pln",/^[^]*(?:>|$)/],["com",/^<\\!--[\\S\\s]*?(?:--\\>|$)/],["lang-",/^<\\?([\\S\\s]+?)(?:\\?>|$)/],["lang-",/^<%([\\S\\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",\n/^]*>([\\S\\s]+?)<\\/xmp\\b[^>]*>/i],["lang-js",/^]*>([\\S\\s]*?)(<\\/script\\b[^>]*>)/i],["lang-css",/^]*>([\\S\\s]*?)(<\\/style\\b[^>]*>)/i],["lang-in.tag",/^(<\\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);i(C([["pln",/^\\s+/,r," \\t\\r\\n"],["atv",/^(?:"[^"]*"?|\'[^\']*\'?)/,r,"\\"\'"]],[["tag",/^^<\\/?[a-z](?:[\\w-.:]*\\w)?|\\/?>$/i],["atn",/^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i],["lang-uq.val",/^=\\s*([^\\s"\'>]*(?:[^\\s"\'/>]|\\/(?=\\s)))/],["pun",/^[/<->]+/],\n["lang-js",/^on\\w+\\s*=\\s*"([^"]+)"/i],["lang-js",/^on\\w+\\s*=\\s*\'([^\']+)\'/i],["lang-js",/^on\\w+\\s*=\\s*([^\\s"\'>]+)/i],["lang-css",/^style\\s*=\\s*"([^"]+)"/i],["lang-css",/^style\\s*=\\s*\'([^\']+)\'/i],["lang-css",/^style\\s*=\\s*([^\\s"\'>]+)/i]]),["in.tag"]);i(C([],[["atv",/^[\\S\\s]+/]]),["uq.val"]);i(t({keywords:J,hashComments:!0,cStyleComments:!0,types:Q}),["c","cc","cpp","cxx","cyc","m"]);i(t({keywords:"null,true,false"}),["json"]);i(t({keywords:L,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:Q}),\n["cs"]);i(t({keywords:K,cStyleComments:!0}),["java"]);i(t({keywords:G,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]);i(t({keywords:M,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py","python"]);i(t({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),["perl","pl","pm"]);i(t({keywords:N,\nhashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]);i(t({keywords:O,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]);i(t({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);i(t({keywords:R,cStyleComments:!0,multilineStrings:!0}),["rc","rs","rust"]);\ni(C([],[["str",/^[\\S\\s]+/]]),["regex"]);var X=V.PR={createSimpleLexer:C,registerLangHandler:i,sourceDecorator:t,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:function(a,d,e){var b=document.createElement("div");b.innerHTML="
"+a+"
";b=b.firstChild;e&&z(b,e,!0);D({h:d,j:e,c:b,i:1});return b.innerHTML},\nprettyPrint:e=e=function(a,d){function e(){for(var b=V.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;p{"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: ./node_modules/google-code-prettify/bin/run_prettify.min.js\nvar run_prettify_min = __webpack_require__(538);\n;// CONCATENATED MODULE: ./node_modules/whatwg-fetch/fetch.js\nvar global =\n (typeof globalThis !== \'undefined\' && globalThis) ||\n (typeof self !== \'undefined\' && self) ||\n (typeof global !== \'undefined\' && global)\n\nvar support = {\n searchParams: \'URLSearchParams\' in global,\n iterable: \'Symbol\' in global && \'iterator\' in Symbol,\n blob:\n \'FileReader\' in global &&\n \'Blob\' in global &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: \'FormData\' in global,\n arrayBuffer: \'ArrayBuffer\' in global\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n \'[object Int8Array]\',\n \'[object Uint8Array]\',\n \'[object Uint8ClampedArray]\',\n \'[object Int16Array]\',\n \'[object Uint16Array]\',\n \'[object Int32Array]\',\n \'[object Uint32Array]\',\n \'[object Float32Array]\',\n \'[object Float64Array]\'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== \'string\') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&\'*+.^_`|~!]/i.test(name) || name === \'\') {\n throw new TypeError(\'Invalid character in header field name: "\' + name + \'"\')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== \'string\') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nfunction Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + \', \' + value : value\n}\n\nHeaders.prototype[\'delete\'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError(\'Already read\'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join(\'\')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n this.bodyUsed = this.bodyUsed\n this._bodyInit = body\n if (!body) {\n this._bodyText = \'\'\n } else if (typeof body === \'string\') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can\'t handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get(\'content-type\')) {\n if (typeof body === \'string\') {\n this.headers.set(\'content-type\', \'text/plain;charset=UTF-8\')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set(\'content-type\', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set(\'content-type\', \'application/x-www-form-urlencoded;charset=UTF-8\')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error(\'could not read FormData body as blob\')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this)\n if (isConsumed) {\n return isConsumed\n }\n if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error(\'could not read FormData body as text\')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = [\'DELETE\', \'GET\', \'HEAD\', \'OPTIONS\', \'POST\', \'PUT\']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nfunction Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError(\'Please use the "new" operator, this DOM object constructor cannot be called as a function.\')\n }\n\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError(\'Already read\')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || \'same-origin\'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || \'GET\')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal\n this.referrer = null\n\n if ((this.method === \'GET\' || this.method === \'HEAD\') && body) {\n throw new TypeError(\'Body not allowed for GET or HEAD requests\')\n }\n this._initBody(body)\n\n if (this.method === \'GET\' || this.method === \'HEAD\') {\n if (options.cache === \'no-store\' || options.cache === \'no-cache\') {\n // Search for a \'_\' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, \'$1_=\' + new Date().getTime())\n } else {\n // Otherwise add a new \'_\' parameter to the end with the current time\n var reQueryString = /\\?/\n this.url += (reQueryString.test(this.url) ? \'&\' : \'?\') + \'_=\' + new Date().getTime()\n }\n }\n }\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split(\'&\')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split(\'=\')\n var name = split.shift().replace(/\\+/g, \' \')\n var value = split.join(\'=\').replace(/\\+/g, \' \')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, \' \')\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split(\'\\r\')\n .map(function(header) {\n return header.indexOf(\'\\n\') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(\':\')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(\':\').trim()\n headers.append(key, value)\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nfunction Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError(\'Please use the "new" operator, this DOM object constructor cannot be called as a function.\')\n }\n if (!options) {\n options = {}\n }\n\n this.type = \'default\'\n this.status = options.status === undefined ? 200 : options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText === undefined ? \'\' : \'\' + options.statusText\n this.headers = new Headers(options.headers)\n this.url = options.url || \'\'\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 0, statusText: \'\'})\n response.type = \'error\'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError(\'Invalid status code\')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nvar DOMException = global.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nfunction fetch_fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException(\'Aborted\', \'AbortError\'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || \'\')\n }\n options.url = \'responseURL\' in xhr ? xhr.responseURL : options.headers.get(\'X-Request-URL\')\n var body = \'response\' in xhr ? xhr.response : xhr.responseText\n setTimeout(function() {\n resolve(new Response(body, options))\n }, 0)\n }\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError(\'Network request failed\'))\n }, 0)\n }\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError(\'Network request failed\'))\n }, 0)\n }\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new DOMException(\'Aborted\', \'AbortError\'))\n }, 0)\n }\n\n function fixUrl(url) {\n try {\n return url === \'\' && global.location.href ? global.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true)\n\n if (request.credentials === \'include\') {\n xhr.withCredentials = true\n } else if (request.credentials === \'omit\') {\n xhr.withCredentials = false\n }\n\n if (\'responseType\' in xhr) {\n if (support.blob) {\n xhr.responseType = \'blob\'\n } else if (\n support.arrayBuffer &&\n request.headers.get(\'Content-Type\') &&\n request.headers.get(\'Content-Type\').indexOf(\'application/octet-stream\') !== -1\n ) {\n xhr.responseType = \'arraybuffer\'\n }\n }\n\n if (init && typeof init.headers === \'object\' && !(init.headers instanceof Headers)) {\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n })\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n }\n\n if (request.signal) {\n request.signal.addEventListener(\'abort\', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener(\'abort\', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === \'undefined\' ? null : request._bodyInit)\n })\n}\n\nfetch_fetch.polyfill = true\n\nif (!global.fetch) {\n global.fetch = fetch_fetch\n global.Headers = Headers\n global.Request = Request\n global.Response = Response\n}\n\n;// CONCATENATED MODULE: ./src/constants/numbers.ts\nvar MAX_DECIMALS = 6;\nvar DEFAULT_BLEND_STEPS = 5;\n\n;// CONCATENATED MODULE: ./src/constants/enums.ts\nvar ColorModel;\n(function (ColorModel) {\n ColorModel["HEX"] = "HEX";\n ColorModel["RGB"] = "RGB";\n ColorModel["HSL"] = "HSL";\n ColorModel["CMYK"] = "CMYK";\n})(ColorModel || (ColorModel = {}));\nvar Harmony;\n(function (Harmony) {\n Harmony["ANALOGOUS"] = "ANALOGOUS";\n Harmony["COMPLEMENTARY"] = "COMPLEMENTARY";\n Harmony["SPLIT_COMPLEMENTARY"] = "SPLIT_COMPLEMENTARY";\n Harmony["TRIADIC"] = "TRIADIC";\n Harmony["TETRADIC"] = "TETRADIC";\n Harmony["SQUARE"] = "SQUARE";\n})(Harmony || (Harmony = {}));\nvar Mix;\n(function (Mix) {\n Mix["ADDITIVE"] = "ADDITIVE";\n Mix["SUBTRACTIVE"] = "SUBTRACTIVE";\n})(Mix || (Mix = {}));\nvar ColorKeywords;\n(function (ColorKeywords) {\n ColorKeywords["black"] = "#000000";\n ColorKeywords["silver"] = "#C0C0C0";\n ColorKeywords["gray"] = "#808080";\n ColorKeywords["white"] = "#FFFFFF";\n ColorKeywords["maroon"] = "#800000";\n ColorKeywords["red"] = "#FF0000";\n ColorKeywords["purple"] = "#800080";\n ColorKeywords["fuchsia"] = "#FF00FF";\n ColorKeywords["green"] = "#008000";\n ColorKeywords["lime"] = "#00FF00";\n ColorKeywords["olive"] = "#808000";\n ColorKeywords["yellow"] = "#FFFF00";\n ColorKeywords["navy"] = "#000080";\n ColorKeywords["blue"] = "#0000FF";\n ColorKeywords["teal"] = "#008080";\n ColorKeywords["aqua"] = "#00FFFF";\n ColorKeywords["orange"] = "#FFA500";\n ColorKeywords["aliceblue"] = "#F0F8FF";\n ColorKeywords["antiquewhite"] = "#FAEBD7";\n ColorKeywords["aquamarine"] = "#7FFFD4";\n ColorKeywords["azure"] = "#F0FFFF";\n ColorKeywords["beige"] = "#F5F5DC";\n ColorKeywords["bisque"] = "#FFE4C4";\n ColorKeywords["blanchedalmond"] = "#FFEBCD";\n ColorKeywords["blueviolet"] = "#8A2BE2";\n ColorKeywords["brown"] = "#A52A2A";\n ColorKeywords["burlywood"] = "#DEB887";\n ColorKeywords["cadetblue"] = "#5F9EA0";\n ColorKeywords["chartreuse"] = "#7FFF00";\n ColorKeywords["chocolate"] = "#D2691E";\n ColorKeywords["coral"] = "#FF7F50";\n ColorKeywords["cornflowerblue"] = "#6495ED";\n ColorKeywords["cornsilk"] = "#FFF8DC";\n ColorKeywords["crimson"] = "#DC143C";\n ColorKeywords["cyan"] = "#00FFFF";\n ColorKeywords["darkblue"] = "#00008B";\n ColorKeywords["darkcyan"] = "#008B8B";\n ColorKeywords["darkgoldenrod"] = "#B8860B";\n ColorKeywords["darkgray"] = "#A9A9A9";\n ColorKeywords["darkgreen"] = "#006400";\n ColorKeywords["darkgrey"] = "#A9A9A9";\n ColorKeywords["darkkhaki"] = "#BDB76B";\n ColorKeywords["darkmagenta"] = "#8B008B";\n ColorKeywords["darkolivegreen"] = "#556B2F";\n ColorKeywords["darkorange"] = "#FF8C00";\n ColorKeywords["darkorchid"] = "#9932CC";\n ColorKeywords["darkred"] = "#8B0000";\n ColorKeywords["darksalmon"] = "#E9967A";\n ColorKeywords["darkseagreen"] = "#8FBC8F";\n ColorKeywords["darkslateblue"] = "#483D8B";\n ColorKeywords["darkslategray"] = "#2F4F4F";\n ColorKeywords["darkslategrey"] = "#2F4F4F";\n ColorKeywords["darkturquoise"] = "#00CED1";\n ColorKeywords["darkviolet"] = "#9400D3";\n ColorKeywords["deeppink"] = "#FF1493";\n ColorKeywords["deepskyblue"] = "#00BFFF";\n ColorKeywords["dimgray"] = "#696969";\n ColorKeywords["dimgrey"] = "#696969";\n ColorKeywords["dodgerblue"] = "#1E90FF";\n ColorKeywords["firebrick"] = "#B22222";\n ColorKeywords["floralwhite"] = "#FFFAF0";\n ColorKeywords["forestgreen"] = "#228B22";\n ColorKeywords["gainsboro"] = "#DCDCDC";\n ColorKeywords["ghostwhite"] = "#F8F8FF";\n ColorKeywords["gold"] = "#FFD700";\n ColorKeywords["goldenrod"] = "#DAA520";\n ColorKeywords["greenyellow"] = "#ADFF2F";\n ColorKeywords["grey"] = "#808080";\n ColorKeywords["honeydew"] = "#F0FFF0";\n ColorKeywords["hotpink"] = "#FF69B4";\n ColorKeywords["indianred"] = "#CD5C5C";\n ColorKeywords["indigo"] = "#4B0082";\n ColorKeywords["ivory"] = "#FFFFF0";\n ColorKeywords["khaki"] = "#F0E68C";\n ColorKeywords["lavender"] = "#E6E6FA";\n ColorKeywords["lavenderblush"] = "#FFF0F5";\n ColorKeywords["lawngreen"] = "#7CFC00";\n ColorKeywords["lemonchiffon"] = "#FFFACD";\n ColorKeywords["lightblue"] = "#ADD8E6";\n ColorKeywords["lightcoral"] = "#F08080";\n ColorKeywords["lightcyan"] = "#E0FFFF";\n ColorKeywords["lightgoldenrodyellow"] = "#FAFAD2";\n ColorKeywords["lightgray"] = "#D3D3D3";\n ColorKeywords["lightgreen"] = "#90EE90";\n ColorKeywords["lightgrey"] = "#D3D3D3";\n ColorKeywords["lightpink"] = "#FFB6C1";\n ColorKeywords["lightsalmon"] = "#FFA07A";\n ColorKeywords["lightseagreen"] = "#20B2AA";\n ColorKeywords["lightskyblue"] = "#87CEFA";\n ColorKeywords["lightslategray"] = "#778899";\n ColorKeywords["lightslategrey"] = "#778899";\n ColorKeywords["lightsteelblue"] = "#B0C4DE";\n ColorKeywords["lightyellow"] = "#FFFFE0";\n ColorKeywords["limegreen"] = "#32CD32";\n ColorKeywords["linen"] = "#FAF0E6";\n ColorKeywords["magenta"] = "#FF00FF";\n ColorKeywords["mediumaquamarine"] = "#66CDAA";\n ColorKeywords["mediumblue"] = "#0000CD";\n ColorKeywords["mediumorchid"] = "#BA55D3";\n ColorKeywords["mediumpurple"] = "#9370DB";\n ColorKeywords["mediumseagreen"] = "#3CB371";\n ColorKeywords["mediumslateblue"] = "#7B68EE";\n ColorKeywords["mediumspringgreen"] = "#00FA9A";\n ColorKeywords["mediumturquoise"] = "#48D1CC";\n ColorKeywords["mediumvioletred"] = "#C71585";\n ColorKeywords["midnightblue"] = "#191970";\n ColorKeywords["mintcream"] = "#F5FFFA";\n ColorKeywords["mistyrose"] = "#FFE4E1";\n ColorKeywords["moccasin"] = "#FFE4B5";\n ColorKeywords["navajowhite"] = "#FFDEAD";\n ColorKeywords["oldlace"] = "#FDF5E6";\n ColorKeywords["olivedrab"] = "#6B8E23";\n ColorKeywords["orangered"] = "#FF4500";\n ColorKeywords["orchid"] = "#DA70D6";\n ColorKeywords["palegoldenrod"] = "#EEE8AA";\n ColorKeywords["palegreen"] = "#98FB98";\n ColorKeywords["paleturquoise"] = "#AFEEEE";\n ColorKeywords["palevioletred"] = "#DB7093";\n ColorKeywords["papayawhip"] = "#FFEFD5";\n ColorKeywords["peachpuff"] = "#FFDAB9";\n ColorKeywords["peru"] = "#CD853F";\n ColorKeywords["pink"] = "#FFC0CB";\n ColorKeywords["plum"] = "#DDA0DD";\n ColorKeywords["powderblue"] = "#B0E0E6";\n ColorKeywords["rosybrown"] = "#BC8F8F";\n ColorKeywords["royalblue"] = "#4169E1";\n ColorKeywords["saddlebrown"] = "#8B4513";\n ColorKeywords["salmon"] = "#FA8072";\n ColorKeywords["sandybrown"] = "#F4A460";\n ColorKeywords["seagreen"] = "#2E8B57";\n ColorKeywords["seashell"] = "#FFF5EE";\n ColorKeywords["sienna"] = "#A0522D";\n ColorKeywords["skyblue"] = "#87CEEB";\n ColorKeywords["slateblue"] = "#6A5ACD";\n ColorKeywords["slategray"] = "#708090";\n ColorKeywords["slategrey"] = "#708090";\n ColorKeywords["snow"] = "#FFFAFA";\n ColorKeywords["springgreen"] = "#00FF7F";\n ColorKeywords["steelblue"] = "#4682B4";\n ColorKeywords["tan"] = "#D2B48C";\n ColorKeywords["thistle"] = "#D8BFD8";\n ColorKeywords["tomato"] = "#FF6347";\n ColorKeywords["turquoise"] = "#40E0D0";\n ColorKeywords["violet"] = "#EE82EE";\n ColorKeywords["wheat"] = "#F5DEB3";\n ColorKeywords["whitesmoke"] = "#F5F5F5";\n ColorKeywords["yellowgreen"] = "#9ACD32";\n ColorKeywords["rebeccapurple"] = "#663399";\n})(ColorKeywords || (ColorKeywords = {}));\nvar COLOR_KEYS = Object.keys(ColorKeywords);\nvar COLOR_PROPS = {\n HEX: [\'r\', \'g\', \'b\', \'a\'],\n RGB: [\'r\', \'g\', \'b\', \'a\'],\n HSL: [\'h\', \'s\', \'l\', \'a\'],\n CMYK: [\'c\', \'m\', \'y\', \'k\', \'a\']\n};\nvar VALID_COLOR_OBJECTS = {\n BGR: ColorModel.RGB,\n ABGR: ColorModel.RGB,\n HLS: ColorModel.HSL,\n AHLS: ColorModel.HSL,\n CKMY: ColorModel.CMYK,\n ACKMY: ColorModel.CMYK\n};\n\n;// CONCATENATED MODULE: ./src/constants/regexps.ts\nvar _a;\n\nvar COLORREGS = (_a = {},\n _a[ColorModel.HEX] = /^#(?:([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])?|([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?)$/i,\n _a[ColorModel.RGB] = /^rgba?\\s*\\(\\s*(?:((?:\\d*\\.)?\\d+%?)\\s*,\\s*((?:\\d*\\.)?\\d+%?)\\s*,\\s*((?:\\d*\\.)?\\d+%?)(?:\\s*,\\s*((?:\\d*\\.)?\\d+))?|((?:\\d*\\.)?\\d+%?)\\s*((?:\\d*\\.)?\\d+%?)\\s*((?:\\d*\\.)?\\d+%?)(?:\\s*\\/\\s*((?:\\d*\\.)?\\d+%?))?)\\s*\\)$/,\n _a[ColorModel.HSL] = /^hsla?\\s*\\(\\s*(?:(-?(?:\\d*\\.)?\\d+(?:deg|grad|rad|turn)?)\\s*,\\s*((?:\\d*\\.)?\\d+)%\\s*,\\s*((?:\\d*\\.)?\\d+)%(?:\\s*,\\s*((?:\\d*\\.)?\\d+))?|(-?(?:\\d*\\.)?\\d+(?:deg|grad|rad|turn)?)\\s*((?:\\d*\\.)?\\d+)%\\s*((?:\\d*\\.)?\\d+)%(?:\\s*\\/\\s*((?:\\d*\\.)?\\d+%?))?)\\s*\\)$/,\n _a[ColorModel.CMYK] = /^(?:device-cmyk|cmyk)\\s*\\(\\s*(?:((?:\\d*\\.)?\\d+%?)\\s*,\\s*((?:\\d*\\.)?\\d+%?)\\s*,\\s*((?:\\d*\\.)?\\d+%?)\\s*,\\s*((?:\\d*\\.)?\\d+%?)(?:\\s*,\\s*((?:\\d*\\.)?\\d+))?|((?:\\d*\\.)?\\d+%?)\\s*((?:\\d*\\.)?\\d+%?)\\s*((?:\\d*\\.)?\\d+%?)\\s*((?:\\d*\\.)?\\d+%?)(?:\\s*\\/\\s*((?:\\d*\\.)?\\d+%?))?)\\s*\\)$/,\n _a);\nvar HSL_HUE = /^(-?(?:\\d*\\.)?\\d+)((?:deg|grad|rad|turn)?)$/;\nvar PCENT = /^(\\d+(?:\\.\\d+)?|\\.\\d+)%$/;\nvar HEX = /^0x([a-f\\d]{1,2})$/i;\nvar TEMPLATE_VAR = /\\{(\\d+)\\}/g;\n\n;// CONCATENATED MODULE: ./src/constants/errors.ts\nvar ERRORS = {\n NOT_ACCEPTED_STRING_INPUT: \'The provided string color doesn\\\'t have a correct format\',\n NOT_ACCEPTED_OBJECT_INPUT: \'The provided color object doesn\\\'t have the proper keys or format\'\n};\n\n;// CONCATENATED MODULE: ./src/constants/options.ts\n\nvar DEFAULT_OPTIONS = {\n decimals: MAX_DECIMALS,\n legacyCSS: false\n};\n\n;// CONCATENATED MODULE: ./src/constants/index.ts\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./src/helpers/index.ts\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar hasProp = function (obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); };\nvar percentNumber = function (percent) {\n return +"".concat(percent).replace(PCENT, \'$1\');\n};\nvar percent = function (percent) { return PCENT.test("".concat(percent))\n ? percentNumber(percent)\n : Math.min(+percent, 100); };\nvar getDEC = function (hex) {\n if (hex.length === 1) {\n hex += hex;\n }\n return parseInt(hex, 16);\n};\nvar getHEX = function (number) {\n var hex = round(number, 0).toString(16).toUpperCase();\n if (hex.length === 1) {\n return "0x0".concat(hex);\n }\n return "0x".concat(hex);\n};\nvar toHEX = function (h) {\n var hex = round(h, 0).toString(16).toUpperCase();\n if (hex.length === 1) {\n hex = "0".concat(hex);\n }\n return hex;\n};\nvar getBase255Number = function (color, alpha) {\n if (alpha === void 0) { alpha = false; }\n if (!alpha && PCENT.test(color)) {\n return Math.min(255 * percentNumber(color) / 100, 255);\n }\n if (HEX.test(color)) {\n if (color.length === 3) {\n color += color.slice(-1);\n }\n return alpha\n ? round(color) / 255\n : round(color);\n }\n return Math.min(+color, alpha ? 1 : 255);\n};\nvar getCMYKNumber = function (color) { return Math.min(PCENT.test(color) ? percentNumber(color) / 100 : +color, 1); };\nvar getOrderedArrayString = function (keys) { return __spreadArray([], keys, true).sort().join(\'\').toUpperCase(); };\nvar round = function (value, decimals) {\n if (decimals === void 0) { decimals = MAX_DECIMALS; }\n var exp = Math.pow(10, decimals);\n return Math.round(+value * exp) / exp;\n};\nvar minmax = function (n, min, max) { return Math.max(min, Math.min(n, max)); };\nvar grades = function (radian) { return radian * 180 / Math.PI; };\nvar parseOptions = function (options) { return (__assign(__assign({}, DEFAULT_OPTIONS), options)); };\nvar getOptionsFromColorInput = function (options) {\n var colors = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n colors[_i - 1] = arguments[_i];\n }\n var cssColors = colors.filter(function (color) { return typeof color === \'string\'; });\n var allLegacy = cssColors.every(function (color) {\n return color.includes(\',\');\n });\n return {\n decimals: typeof options.decimals === \'number\'\n ? options.decimals\n : DEFAULT_OPTIONS.decimals,\n legacyCSS: typeof options.legacyCSS === \'boolean\'\n ? options.legacyCSS\n : Boolean(cssColors.length && allLegacy) || DEFAULT_OPTIONS.legacyCSS\n };\n};\n\n;// CONCATENATED MODULE: ./src/color/translators.ts\n\nvar hueToRGB = function (t1, t2, hue) {\n if (hue < 0) {\n hue += 6;\n }\n if (hue >= 6) {\n hue -= 6;\n }\n if (hue < 1) {\n return round(((t2 - t1) * hue + t1) * 255);\n }\n else if (hue < 3) {\n return round(t2 * 255);\n }\n else if (hue < 4) {\n return round(((t2 - t1) * (4 - hue) + t1) * 255);\n }\n else {\n return round(t1 * 255);\n }\n};\nvar hslToRGB = function (h, s, l) {\n h /= 60;\n s /= 100;\n l /= 100;\n var t2 = (l <= .5)\n ? l * (s + 1)\n : l + s - (l * s);\n var t1 = l * 2 - t2;\n var r = hueToRGB(t1, t2, h + 2);\n var g = hueToRGB(t1, t2, h);\n var b = hueToRGB(t1, t2, h - 2);\n return { r: r, g: g, b: b };\n};\nvar cmykToRGB = function (c, m, y, k) {\n k = 1 - k;\n var r = round(255 * (1 - c) * k);\n var g = round(255 * (1 - m) * k);\n var b = round(255 * (1 - y) * k);\n return { r: r, g: g, b: b };\n};\nvar rgbToCMYK = function (r, g, b) {\n r /= 255;\n g /= 255;\n b /= 255;\n var k = 1 - Math.max(r, g, b);\n var k1 = 1 - k;\n var c = k1 && (k1 - r) / k1;\n var m = k1 && (k1 - g) / k1;\n var y = k1 && (k1 - b) / k1;\n return {\n c: round(c * 100),\n m: round(m * 100),\n y: round(y * 100),\n k: round(k * 100)\n };\n};\nvar rgbToHSL = function (r, g, b, a) {\n if (a === void 0) { a = 1; }\n r /= 255;\n g /= 255;\n b /= 255;\n a = Math.min(a, 1);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h = 0;\n var s = 0;\n var l = (max + min) / 2;\n if (d !== 0) {\n switch (max) {\n case r:\n h = ((g - b) / d) % 6;\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h = round(h * 60);\n if (h < 0) {\n h += 360;\n }\n s = d / (1 - Math.abs(2 * l - 1));\n }\n return {\n h: h,\n s: round(s * 100),\n l: round(l * 100),\n a: a\n };\n};\nvar rgbToRYB = function (r, g, b) {\n var Iw = Math.min(r, g, b);\n var Ib = Math.min(255 - r, 255 - g, 255 - b);\n var rRGB = r - Iw;\n var gRGB = g - Iw;\n var bRGB = b - Iw;\n var minRG = Math.min(rRGB, gRGB);\n var rRYB = rRGB - minRG;\n var yRYB = (gRGB + minRG) / 2;\n var bRYB = (bRGB + gRGB - minRG) / 2;\n var n = Math.max(rRYB, yRYB, bRYB) / Math.max(rRGB, gRGB, bRGB);\n var N = isNaN(n) || n === Infinity || n <= 0 ? 1 : n;\n return {\n r: rRYB / N + Ib,\n y: yRYB / N + Ib,\n b: bRYB / N + Ib\n };\n};\nvar rybToRGB = function (r, y, b) {\n var Iw = Math.min(r, y, b);\n var Ib = Math.min(255 - r, 255 - y, 255 - b);\n var rRYB = r - Iw;\n var yRYB = y - Iw;\n var bRYB = b - Iw;\n var minYB = Math.min(yRYB, bRYB);\n var rRGB = rRYB + yRYB - minYB;\n var gRGB = yRYB + minYB;\n var bRGB = 2 * (bRYB - minYB);\n var n = Math.max(rRGB, gRGB, bRGB) / Math.max(rRYB, yRYB, bRYB);\n var N = isNaN(n) || n === Infinity || n <= 0 ? 1 : n;\n return {\n r: rRGB / N + Ib,\n g: gRGB / N + Ib,\n b: bRGB / N + Ib\n };\n};\nvar hueRYB = function (hue, toRYB) {\n if (hue < 0)\n hue += 360;\n if (hue > 360)\n hue -= 360;\n if (hue === 360 || hue === 0)\n return hue;\n var map1 = [\n [0, 120],\n [120, 180],\n [180, 240],\n [240, 360]\n ];\n var map2 = [\n [0, 60],\n [60, 120],\n [120, 240],\n [240, 360]\n ];\n var from = toRYB ? map1 : map2;\n var to = toRYB ? map2 : map1;\n var a = 0;\n var b = 0;\n var c = 0;\n var d = 0;\n from.find(function (arr, index) {\n if (hue >= arr[0] && hue < arr[1]) {\n a = arr[0];\n b = arr[1];\n c = to[index][0];\n d = to[index][1];\n return true;\n }\n return false;\n });\n return c + (hue - a) * ((d - c) / (b - a));\n};\n\n;// CONCATENATED MODULE: ./src/color/css.ts\nvar css_a;\n\n\nvar prepareColorForCss = function (color, isHex) {\n if (isHex === void 0) { isHex = false; }\n var props = getOrderedArrayString(Object.keys(color));\n var model = VALID_COLOR_OBJECTS[props];\n var keys = COLOR_PROPS[model];\n return keys.reduce(function (result, key) {\n var value = color[key];\n if (typeof value !== \'undefined\') {\n if (isHex) {\n result.push(toHEX(round(value, 0)));\n }\n else {\n result.push(value);\n }\n }\n return result;\n }, []);\n};\nvar getResultFromTemplate = function (template, vars) {\n return template.replace(TEMPLATE_VAR, function (__match, indexStr) {\n var index = +indexStr - 1;\n return "".concat(vars[index]);\n });\n};\nvar CSS = (css_a = {},\n css_a[ColorModel.HEX] = function (color) {\n var values = prepareColorForCss(color, true);\n var template = values.length === 4\n ? \'#{1}{2}{3}{4}\'\n : \'#{1}{2}{3}\';\n return getResultFromTemplate(template, values);\n },\n css_a[ColorModel.RGB] = function (color, options) {\n var legacyCSS = options.legacyCSS;\n var values = prepareColorForCss(color);\n var template = legacyCSS\n ? (values.length === 4\n ? \'rgba({1},{2},{3},{4})\'\n : \'rgb({1},{2},{3})\')\n : (values.length === 4\n ? \'rgb({1} {2} {3} / {4})\'\n : \'rgb({1} {2} {3})\');\n return getResultFromTemplate(template, values);\n },\n css_a[ColorModel.HSL] = function (color, options) {\n var legacyCSS = options.legacyCSS;\n var values = prepareColorForCss(color);\n var template = legacyCSS\n ? (values.length === 4\n ? \'hsla({1},{2}%,{3}%,{4})\'\n : \'hsl({1},{2}%,{3}%)\')\n : (values.length === 4\n ? \'hsl({1} {2}% {3}% / {4})\'\n : \'hsl({1} {2}% {3}%)\');\n return getResultFromTemplate(template, values);\n },\n css_a[ColorModel.CMYK] = function (color, options) {\n var legacyCSS = options.legacyCSS;\n var values = prepareColorForCss(color);\n var template = legacyCSS\n ? (values.length === 5\n ? \'device-cmyk({1}%,{2}%,{3}%,{4}%,{5})\'\n : \'device-cmyk({1}%,{2}%,{3}%,{4}%)\')\n : (values.length === 5\n ? \'device-cmyk({1}% {2}% {3}% {4}% / {5})\'\n : \'device-cmyk({1}% {2}% {3}% {4}%)\');\n return getResultFromTemplate(template, values);\n },\n css_a);\n\n;// CONCATENATED MODULE: ./src/color/utils.ts\nvar utils_assign = (undefined && undefined.__assign) || function () {\n utils_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return utils_assign.apply(this, arguments);\n};\nvar utils_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar utils_a, _b, _c, _d, _e;\n\n\n\n\nvar pi2 = 360;\nvar normalizeHue = function (hue) {\n if (typeof hue === \'string\') {\n var matches = hue.match(HSL_HUE);\n var value = +matches[1];\n var units = matches[2];\n switch (units) {\n case \'rad\':\n hue = round(grades(value));\n break;\n case \'turn\':\n hue = round(value * 360);\n break;\n case \'deg\':\n case \'grad\':\n default:\n hue = value;\n }\n }\n if (hue > 360 || hue < 0) {\n hue -= Math.floor(hue / pi2) * pi2;\n }\n return hue;\n};\nvar normalizeAlpha = function (alpha) {\n if (typeof alpha === \'string\') {\n if (PCENT.test(alpha)) {\n alpha = percentNumber(alpha) / 100;\n }\n else {\n alpha = +alpha;\n }\n }\n return (isNaN(+alpha) || alpha > 1) ? 1 : round(alpha);\n};\nvar harmony = function (color, angles, mode) {\n return angles.reduce(function (arr, num) {\n return (utils_spreadArray(utils_spreadArray([], arr, true), [\n utils_assign(utils_assign({}, color), { h: mode === Mix.ADDITIVE\n ? normalizeHue(color.h + num)\n : normalizeHue(hueRYB(hueRYB(color.h, false) + num, true)) })\n ], false));\n }, [utils_assign({}, color)]);\n};\nvar analogous = function (color, mode) { return harmony(color, [30, -30], mode); };\nvar complementary = function (color, mode) { return harmony(color, [180], mode); };\nvar splitComplementary = function (color, mode) { return harmony(color, [150, -150], mode); };\nvar triadic = function (color, mode) { return harmony(color, [120, -120], mode); };\nvar tetradic = function (color, mode) { return harmony(color, [60, -120, 180], mode); };\nvar square = function (color, mode) { return harmony(color, [90, -90, 180], mode); };\nvar getColorModelFromString = function (color) {\n var model;\n Object.keys(ColorModel).some(function (p) {\n var reg = COLORREGS[p];\n if (reg.test(color)) {\n model = p;\n return true;\n }\n });\n if (!model &&\n !!~COLOR_KEYS.indexOf(color)) {\n model = ColorModel.HEX;\n }\n if (!model) {\n throw new Error(ERRORS.NOT_ACCEPTED_STRING_INPUT);\n }\n return model;\n};\nvar getColorModelFromObject = function (color) {\n var model;\n var invalid = false;\n var props = getOrderedArrayString(Object.keys(color));\n if (VALID_COLOR_OBJECTS[props]) {\n model = VALID_COLOR_OBJECTS[props];\n }\n if (model && model === ColorModel.RGB) {\n var hasInvalidHex = Object.entries(color).some(function (item) {\n return !HEX.test("".concat(item[1]));\n });\n var hasInvalidRegb = Object.entries(color).some(function (item) {\n return !(PCENT.test("".concat(item[1])) ||\n (!HEX.test("".concat(item[1])) &&\n !isNaN(+item[1]) &&\n +item[1] <= 255));\n });\n if (hasInvalidHex && hasInvalidRegb) {\n invalid = true;\n }\n if (!hasInvalidHex) {\n model = ColorModel.HEX;\n }\n }\n if (!model || invalid) {\n throw new Error(ERRORS.NOT_ACCEPTED_OBJECT_INPUT);\n }\n return model;\n};\nvar getColorModel = function (color) { return typeof color === \'string\'\n ? getColorModelFromString(color)\n : getColorModelFromObject(color); };\nvar getRGBObjectFromString = (utils_a = {},\n utils_a[ColorModel.HEX] = function (color) {\n var colorStr = !~COLOR_KEYS.indexOf(color)\n ? color\n : ColorKeywords[color];\n var match = colorStr.match(COLORREGS.HEX);\n var object = {\n r: getDEC(match[1] || match[5]),\n g: getDEC(match[2] || match[6]),\n b: getDEC(match[3] || match[7])\n };\n var a = match[4] || match[8];\n if (a !== undefined) {\n object.a = getDEC(a) / 255;\n }\n return object;\n },\n utils_a[ColorModel.RGB] = function (color) {\n var match = color.match(COLORREGS.RGB);\n var r = getBase255Number(match[1] || match[5]);\n var g = getBase255Number(match[2] || match[6]);\n var b = getBase255Number(match[3] || match[7]);\n var a = match[4] || match[8];\n var object = {\n r: Math.min(r, 255),\n g: Math.min(g, 255),\n b: Math.min(b, 255)\n };\n if (a !== undefined) {\n object.a = normalizeAlpha(a);\n }\n return object;\n },\n utils_a[ColorModel.HSL] = function (color) {\n var match = color.match(COLORREGS.HSL);\n var h = normalizeHue(match[1] || match[5]);\n var s = percent(match[2] || match[6]);\n var l = percent(match[3] || match[7]);\n var a = match[4] || match[8];\n var rgb = hslToRGB(h, s, l);\n if (a !== undefined) {\n rgb.a = normalizeAlpha(a);\n }\n return rgb;\n },\n utils_a[ColorModel.CMYK] = function (color) {\n var match = color.match(COLORREGS.CMYK);\n var c = getCMYKNumber(match[1] || match[6]);\n var m = getCMYKNumber(match[2] || match[7]);\n var y = getCMYKNumber(match[3] || match[8]);\n var k = getCMYKNumber(match[4] || match[9]);\n var a = match[5] || match[10];\n var rgb = cmykToRGB(c, m, y, k);\n if (a !== undefined) {\n rgb.a = normalizeAlpha(a);\n }\n return rgb;\n },\n utils_a);\nvar getRGBObjectFromObject = (_b = {},\n _b[ColorModel.HEX] = function (color) {\n var object = {\n r: getBase255Number("".concat(color.r)),\n g: getBase255Number("".concat(color.g)),\n b: getBase255Number("".concat(color.b))\n };\n if (hasProp(color, \'a\')) {\n object.a = Math.min(getBase255Number("".concat(color.a), true), 1);\n }\n return object;\n },\n _b[ColorModel.RGB] = function (color) {\n return this.HEX(color);\n },\n _b[ColorModel.HSL] = function (color) {\n var s = percent("".concat(color.s));\n var l = percent("".concat(color.l));\n var rgb = hslToRGB(normalizeHue(color.h), s, l);\n if (hasProp(color, \'a\')) {\n rgb.a = normalizeAlpha(color.a);\n }\n return rgb;\n },\n _b[ColorModel.CMYK] = function (color) {\n var c = getCMYKNumber("".concat(color.c));\n var m = getCMYKNumber("".concat(color.m));\n var y = getCMYKNumber("".concat(color.y));\n var k = getCMYKNumber("".concat(color.k));\n var rgb = cmykToRGB(c, m, y, k);\n if (hasProp(color, \'a\')) {\n rgb.a = normalizeAlpha(color.a);\n }\n return rgb;\n },\n _b);\nvar getRGBObject = function (color, model) {\n if (model === void 0) { model = getColorModel(color); }\n return typeof color === \'string\'\n ? getRGBObjectFromString[model](color)\n : getRGBObjectFromObject[model](color);\n};\nvar translateColor = (_c = {},\n _c[ColorModel.HEX] = function (color) {\n return {\n r: getHEX(color.r),\n g: getHEX(color.g),\n b: getHEX(color.b)\n };\n },\n _c.HEXA = function (color) {\n var rgb = translateColor.HEX(color);\n rgb.a = hasProp(color, \'a\')\n ? getHEX(color.a * 255)\n : \'0xFF\';\n return rgb;\n },\n _c[ColorModel.RGB] = function (color, decimals) {\n if (hasProp(color, \'a\')) {\n delete color.a;\n }\n return roundRGBObject(color, decimals);\n },\n _c.RGBA = function (color, decimals) {\n color.a = hasProp(color, \'a\')\n ? round(color.a)\n : 1;\n return roundRGBObject(color, decimals);\n },\n _c[ColorModel.HSL] = function (color, decimals) {\n var hsl = rgbToHSL(color.r, color.g, color.b);\n delete hsl.a;\n return roundHSLObject(hsl, decimals);\n },\n _c.HSLA = function (color, decimals) {\n var hsl = translateColor.HSL(color, decimals);\n hsl.a = hasProp(color, \'a\')\n ? round(color.a, decimals)\n : 1;\n return hsl;\n },\n _c[ColorModel.CMYK] = function (color, decimals) {\n return roundCMYKObject(rgbToCMYK(color.r, color.g, color.b), decimals);\n },\n _c.CMYKA = function (color, decimals) {\n var cmyk = translateColor.CMYK(color, decimals);\n cmyk.a = hasProp(color, \'a\')\n ? round(color.a, decimals)\n : 1;\n return cmyk;\n },\n _c);\nvar blend = function (from, to, steps) {\n var div = steps - 1;\n var diffR = (to.r - from.r) / div;\n var diffG = (to.g - from.g) / div;\n var diffB = (to.b - from.b) / div;\n var fromA = normalizeAlpha(from.a);\n var toA = normalizeAlpha(to.a);\n var diffA = (toA - fromA) / div;\n return Array(steps).fill(null).map(function (__n, i) {\n if (i === 0) {\n return from;\n }\n if (i === div) {\n return to;\n }\n return {\n r: round(from.r + diffR * i),\n g: round(from.g + diffG * i),\n b: round(from.b + diffB * i),\n a: round(fromA + diffA * i)\n };\n });\n};\nvar getColorMixture = function (color, steps, shades, options) {\n var decimals = options.decimals;\n var model = getColorModel(color);\n var isCSS = typeof color === \'string\';\n var rgb = getRGBObject(color, model);\n var hasAlpha = ((typeof color === \'string\' && hasProp(rgb, \'a\')) ||\n (typeof color !== \'string\' && hasProp(color, \'a\')));\n var hsl = rgbToHSL(rgb.r, rgb.g, rgb.b, rgb.a);\n if (!hasAlpha)\n delete hsl.a;\n var increment = shades\n ? hsl.l / (steps + 1)\n : (100 - hsl.l) / (steps + 1);\n var hslMap = Array(steps).fill(null).map(function (__n, i) { return (utils_assign(utils_assign({}, hsl), { l: hsl.l + increment * (i + 1) * (1 - +shades * 2) })); });\n switch (model) {\n case ColorModel.HEX:\n default:\n return hslMap.map(function (hslColor) {\n var rgbColor = hslToRGB(hslColor.h, hslColor.s, hslColor.l);\n if (hasAlpha)\n rgbColor.a = hslColor.a;\n return isCSS\n ? hasAlpha\n ? CSS.HEX(roundRGBObject(utils_assign(utils_assign({}, rgbColor), { a: round(rgbColor.a * 255) }), decimals))\n : CSS.HEX(roundRGBObject(rgbColor, decimals))\n : hasAlpha\n ? translateColor.HEXA(rgbColor)\n : translateColor.HEX(rgbColor);\n });\n case ColorModel.RGB:\n return hslMap.map(function (hslColor) {\n var rgbColor = hslToRGB(hslColor.h, hslColor.s, hslColor.l);\n if (hasAlpha)\n rgbColor.a = hslColor.a;\n return isCSS\n ? CSS.RGB(roundRGBObject(rgbColor, decimals), options)\n : hasAlpha\n ? translateColor.RGBA(rgbColor, decimals)\n : translateColor.RGB(rgbColor, decimals);\n });\n case ColorModel.HSL:\n return hslMap.map(function (hslColor) {\n return isCSS\n ? CSS.HSL(roundHSLObject(hslColor, decimals), options)\n : hasAlpha\n ? translateColor.HSLA(utils_assign(utils_assign({}, hslToRGB(hslColor.h, hslColor.s, hslColor.l)), { a: hslColor.a }), decimals)\n : translateColor.HSL(hslToRGB(hslColor.h, hslColor.s, hslColor.l), decimals);\n });\n }\n};\nvar colorHarmony = (_d = {\n buildHarmony: function (color, harmonyFunction, mode, options) {\n var model = getColorModel(color);\n var rgb = getRGBObject(color, model);\n var hsl = rgbToHSL(rgb.r, rgb.g, rgb.b, rgb.a);\n var hasAlpha = ((typeof color === \'string\' && hasProp(rgb, \'a\')) ||\n (typeof color !== \'string\' && hasProp(color, \'a\')));\n var isCSS = typeof color === \'string\';\n switch (model) {\n case ColorModel.HEX:\n default:\n return hasAlpha\n ? this.HEXA(roundHSLObject(hsl, 0), harmonyFunction, mode, isCSS)\n : this.HEX(roundHSLObject(hsl, 0), harmonyFunction, mode, isCSS);\n case ColorModel.HSL:\n return hasAlpha\n ? this.HSLA(hsl, harmonyFunction, mode, isCSS, options)\n : this.HSL(hsl, harmonyFunction, mode, isCSS, options);\n case ColorModel.RGB:\n return hasAlpha\n ? this.RGBA(hsl, harmonyFunction, mode, isCSS, options)\n : this.RGB(hsl, harmonyFunction, mode, isCSS, options);\n }\n }\n },\n _d[ColorModel.HEX] = function (color, harmonyFunction, mode, css) {\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.HEX(hslToRGB(c.h, c.s, c.l))\n : translateColor.HEX(hslToRGB(c.h, c.s, c.l))); });\n },\n _d.HEXA = function (color, harmonyFunction, mode, css) {\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.HEX(utils_assign(utils_assign({}, hslToRGB(c.h, c.s, c.l)), { a: normalizeAlpha(c.a) * 255 }))\n : translateColor.HEXA(utils_assign(utils_assign({}, hslToRGB(c.h, c.s, c.l)), { a: normalizeAlpha(c.a) }))); });\n },\n _d[ColorModel.RGB] = function (color, harmonyFunction, mode, css, options) {\n var decimals = options.decimals;\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.RGB(roundRGBObject(hslToRGB(c.h, c.s, c.l), decimals), options)\n : translateColor.RGB(hslToRGB(c.h, c.s, c.l), decimals)); });\n },\n _d.RGBA = function (color, harmonyFunction, mode, css, options) {\n var decimals = options.decimals;\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.RGB(roundRGBObject(utils_assign(utils_assign({}, hslToRGB(c.h, c.s, c.l)), { a: normalizeAlpha(c.a) }), decimals), options)\n : translateColor.RGBA(utils_assign(utils_assign({}, hslToRGB(c.h, c.s, c.l)), { a: normalizeAlpha(c.a) }), decimals)); });\n },\n _d[ColorModel.HSL] = function (color, harmonyFunction, mode, css, options) {\n var decimals = options.decimals;\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.HSL(roundHSLObject({\n h: c.h,\n s: c.s,\n l: c.l\n }, decimals), options)\n : translateColor.HSL(hslToRGB(c.h, c.s, c.l), decimals)); });\n },\n _d.HSLA = function (color, harmonyFunction, mode, css, options) {\n var decimals = options.decimals;\n var array = harmonyFunction(color, mode);\n return array.map(function (c) { return (css\n ? CSS.HSL(roundHSLObject(utils_assign(utils_assign({}, c), { a: normalizeAlpha(c.a) }), decimals), options)\n : translateColor.HSLA(utils_assign(utils_assign({}, hslToRGB(c.h, c.s, c.l)), { a: normalizeAlpha(c.a) }), decimals)); });\n },\n _d);\nvar colorMixer = (_e = {\n mix: function (colors, mode) {\n var rgbMap = colors.map(function (color) {\n var model = getColorModel(color);\n return getRGBObject(color, model);\n });\n var rybMap = mode === Mix.SUBTRACTIVE\n ? rgbMap.map(function (color) {\n var ryb = rgbToRYB(color.r, color.g, color.b);\n if (hasProp(color, \'a\')) {\n ryb.a = color.a;\n }\n return ryb;\n })\n : null;\n function createMix(items) {\n var initial = mode === Mix.ADDITIVE\n ? { r: 0, g: 0, b: 0, a: 0 }\n : { r: 0, y: 0, b: 0, a: 0 };\n return items.reduce(function (mix, color) {\n var colorA = hasProp(color, \'a\') ? color.a : 1;\n var common = {\n r: Math.min(mix.r + color.r * colorA, 255),\n b: Math.min(mix.b + color.b * colorA, 255),\n a: 1 - (1 - colorA) * (1 - mix.a)\n };\n var mixGY = \'g\' in mix\n ? mix.g\n : mix.y;\n var colorGY = \'g\' in color\n ? color.g\n : color.y;\n return utils_assign(utils_assign({}, common), (mode === Mix.ADDITIVE\n ? { g: Math.min(mixGY + colorGY * colorA, 255) }\n : { y: Math.min(mixGY + colorGY * colorA, 255) }));\n }, initial);\n }\n var mix;\n if (mode === Mix.ADDITIVE) {\n mix = createMix(rgbMap);\n }\n else {\n var ryb = createMix(rybMap);\n mix = rybToRGB(ryb.r, ryb.y, ryb.b);\n mix.a = ryb.a;\n }\n return {\n r: round(mix.r),\n g: round(mix.g),\n b: round(mix.b),\n a: minmax(mix.a, 0, 1)\n };\n }\n },\n _e[ColorModel.HEX] = function (colors, mode, css) {\n var mix = this.mix(colors, mode);\n delete mix.a;\n return (css\n ? CSS.HEX(mix)\n : translateColor.HEX(mix));\n },\n _e.HEXA = function (colors, mode, css) {\n var mix = this.mix(colors, mode);\n mix.a = css\n ? normalizeAlpha(mix.a) * 255\n : normalizeAlpha(mix.a);\n return (css\n ? CSS.HEX(mix)\n : translateColor.HEXA(mix));\n },\n _e[ColorModel.RGB] = function (colors, mode, css, options) {\n var decimals = options.decimals;\n var mix = this.mix(colors, mode);\n delete mix.a;\n return (css\n ? CSS.RGB(mix, options)\n : translateColor.RGB(mix, decimals));\n },\n _e.RGBA = function (colors, mode, css, options) {\n var decimals = options.decimals;\n var mix = this.mix(colors, mode);\n return (css\n ? CSS.RGB(mix, options)\n : translateColor.RGBA(mix, decimals));\n },\n _e[ColorModel.HSL] = function (colors, mode, css, options) {\n var decimals = options.decimals;\n var mix = this.mix(colors, mode);\n var hsl = rgbToHSL(mix.r, mix.g, mix.b);\n delete mix.a;\n delete hsl.a;\n return (css\n ? CSS.HSL(hsl, options)\n : translateColor.HSL(mix, decimals));\n },\n _e.HSLA = function (colors, mode, css, options) {\n var decimals = options.decimals;\n var mix = this.mix(colors, mode);\n var hsl = rgbToHSL(mix.r, mix.g, mix.b, mix.a);\n return (css\n ? CSS.HSL(hsl, options)\n : translateColor.HSLA(mix, decimals));\n },\n _e);\nvar roundRGBObject = function (color, decimals) {\n return utils_assign({ r: round(color.r, decimals), g: round(color.g, decimals), b: round(color.b, decimals) }, (hasProp(color, \'a\')\n ? {\n a: round(color.a, decimals)\n }\n : {}));\n};\nvar roundHSLObject = function (color, decimals) {\n return utils_assign({ h: round(color.h, decimals), s: round(color.s, decimals), l: round(color.l, decimals) }, (hasProp(color, \'a\')\n ? {\n a: round(color.a, decimals)\n }\n : {}));\n};\nvar roundCMYKObject = function (color, decimals) {\n return {\n c: round(color.c, decimals),\n m: round(color.m, decimals),\n y: round(color.y, decimals),\n k: round(color.k, decimals)\n };\n};\n\n;// CONCATENATED MODULE: ./src/index.ts\nvar src_assign = (undefined && undefined.__assign) || function () {\n src_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return src_assign.apply(this, arguments);\n};\nvar src_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\n\n\nvar getColorReturn = function (color, model, options, translateFunction) {\n var decimals = parseOptions(options).decimals;\n var rgbObject = getRGBObject(color, model);\n return translateFunction(rgbObject, decimals);\n};\nvar getBlendReturn = function (from, to, steps, options, translateFunction) {\n var decimals = parseOptions(options).decimals;\n if (steps < 1)\n steps = DEFAULT_BLEND_STEPS;\n var fromRGBObject = getRGBObject(from);\n var toRGBObject = getRGBObject(to);\n var blendArray = blend(fromRGBObject, toRGBObject, steps);\n return blendArray.map(function (color) {\n return translateFunction(color, decimals);\n });\n};\nvar getHarmonyReturn = function (harmony, color, mode, options) {\n var _a;\n return (_a = {},\n _a[Harmony.ANALOGOUS] = colorHarmony.buildHarmony(color, analogous, mode, options),\n _a[Harmony.COMPLEMENTARY] = colorHarmony.buildHarmony(color, complementary, mode, options),\n _a[Harmony.SPLIT_COMPLEMENTARY] = colorHarmony.buildHarmony(color, splitComplementary, mode, options),\n _a[Harmony.TRIADIC] = colorHarmony.buildHarmony(color, triadic, mode, options),\n _a[Harmony.TETRADIC] = colorHarmony.buildHarmony(color, tetradic, mode, options),\n _a[Harmony.SQUARE] = colorHarmony.buildHarmony(color, square, mode, options),\n _a)[harmony];\n};\nvar ColorTranslator = (function () {\n function ColorTranslator(color, options) {\n if (options === void 0) { options = {}; }\n this._options = parseOptions(options);\n this.rgb = getRGBObject(color);\n this.updateHSL();\n this.updateCMYK();\n }\n ColorTranslator.prototype.updateRGB = function () {\n this.rgb = src_assign(src_assign({}, hslToRGB(this.hsl.h, this.hsl.s, this.hsl.l)), { a: this.hsl.a });\n };\n ColorTranslator.prototype.updateRGBFromCMYK = function () {\n this.rgb = src_assign(src_assign({}, cmykToRGB(this.cmyk.c, this.cmyk.m, this.cmyk.y, this.cmyk.k)), { a: this.rgb.a });\n };\n ColorTranslator.prototype.updateHSL = function () {\n this.hsl = rgbToHSL(this.rgb.r, this.rgb.g, this.rgb.b, this.rgb.a);\n };\n ColorTranslator.prototype.updateCMYK = function () {\n this.cmyk = rgbToCMYK(this.rgb.r, this.rgb.g, this.rgb.b);\n };\n ColorTranslator.prototype.updateRGBAndCMYK = function () {\n this.updateRGB();\n this.updateCMYK();\n return this;\n };\n ColorTranslator.prototype.updateHSLAndCMYK = function () {\n this.updateHSL();\n this.updateCMYK();\n return this;\n };\n ColorTranslator.prototype.updateRGBAndHSL = function () {\n this.updateRGBFromCMYK();\n this.updateHSL();\n return this;\n };\n ColorTranslator.prototype.setOptions = function (options) {\n if (options === void 0) { options = {}; }\n this._options = src_assign(src_assign({}, this._options), options);\n return this;\n };\n ColorTranslator.prototype.setH = function (h) {\n this.hsl.h = normalizeHue(h);\n return this.updateRGBAndCMYK();\n };\n ColorTranslator.prototype.setS = function (s) {\n this.hsl.s = minmax(s, 0, 100);\n return this.updateRGBAndCMYK();\n };\n ColorTranslator.prototype.setL = function (l) {\n this.hsl.l = minmax(l, 0, 100);\n return this.updateRGBAndCMYK();\n };\n ColorTranslator.prototype.setR = function (r) {\n this.rgb.r = minmax(r, 0, 255);\n return this.updateHSLAndCMYK();\n };\n ColorTranslator.prototype.setG = function (g) {\n this.rgb.g = minmax(g, 0, 255);\n return this.updateHSLAndCMYK();\n };\n ColorTranslator.prototype.setB = function (b) {\n this.rgb.b = minmax(b, 0, 255);\n return this.updateHSLAndCMYK();\n };\n ColorTranslator.prototype.setA = function (a) {\n this.hsl.a = this.rgb.a = minmax(a, 0, 1);\n return this;\n };\n ColorTranslator.prototype.setC = function (c) {\n this.cmyk.c = minmax(c, 0, 100);\n return this.updateRGBAndHSL();\n };\n ColorTranslator.prototype.setM = function (m) {\n this.cmyk.m = minmax(m, 0, 100);\n return this.updateRGBAndHSL();\n };\n ColorTranslator.prototype.setY = function (y) {\n this.cmyk.y = minmax(y, 0, 100);\n return this.updateRGBAndHSL();\n };\n ColorTranslator.prototype.setK = function (k) {\n this.cmyk.k = minmax(k, 0, 100);\n return this.updateRGBAndHSL();\n };\n Object.defineProperty(ColorTranslator.prototype, "options", {\n get: function () {\n return this._options;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "H", {\n get: function () {\n return round(this.hsl.h, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "S", {\n get: function () {\n return round(this.hsl.s, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "L", {\n get: function () {\n return round(this.hsl.l, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "R", {\n get: function () {\n return round(this.rgb.r, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "G", {\n get: function () {\n return round(this.rgb.g, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "B", {\n get: function () {\n return round(this.rgb.b, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "A", {\n get: function () {\n return round(this.hsl.a, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "C", {\n get: function () {\n return round(this.cmyk.c, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "M", {\n get: function () {\n return round(this.cmyk.m, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "Y", {\n get: function () {\n return round(this.cmyk.y, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "K", {\n get: function () {\n return round(this.cmyk.k, this.options.decimals);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HEXObject", {\n get: function () {\n return translateColor.HEX(this.rgb);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HEXAObject", {\n get: function () {\n return translateColor.HEXA(this.rgb);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "RGBObject", {\n get: function () {\n return {\n r: this.R,\n g: this.G,\n b: this.B\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "RGBAObject", {\n get: function () {\n return src_assign(src_assign({}, this.RGBObject), { a: this.A });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HSLObject", {\n get: function () {\n return {\n h: this.H,\n s: this.S,\n l: this.L\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HSLAObject", {\n get: function () {\n return src_assign(src_assign({}, this.HSLObject), { a: this.A });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "CMYKObject", {\n get: function () {\n return {\n c: this.C,\n m: this.M,\n y: this.Y,\n k: this.K\n };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "CMYKAObject", {\n get: function () {\n return src_assign(src_assign({}, this.CMYKObject), { a: this.A });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HEX", {\n get: function () {\n return CSS.HEX({\n r: this.R,\n g: this.G,\n b: this.B\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HEXA", {\n get: function () {\n return CSS.HEX({\n r: this.R,\n g: this.G,\n b: this.B,\n a: this.A * 255\n });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "RGB", {\n get: function () {\n return CSS.RGB({\n r: this.R,\n g: this.G,\n b: this.B\n }, this.options);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "RGBA", {\n get: function () {\n return CSS.RGB({\n r: this.R,\n g: this.G,\n b: this.B,\n a: this.A\n }, this.options);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HSL", {\n get: function () {\n return CSS.HSL({\n h: this.H,\n s: this.S,\n l: this.L\n }, this.options);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "HSLA", {\n get: function () {\n return CSS.HSL({\n h: this.H,\n s: this.S,\n l: this.L,\n a: this.A\n }, this.options);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "CMYK", {\n get: function () {\n return CSS.CMYK({\n c: this.C,\n m: this.M,\n y: this.Y,\n k: this.K\n }, this.options);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ColorTranslator.prototype, "CMYKA", {\n get: function () {\n return CSS.CMYK({\n c: this.C,\n m: this.M,\n y: this.Y,\n k: this.K,\n a: this.A\n }, this.options);\n },\n enumerable: false,\n configurable: true\n });\n ColorTranslator.toHEXObject = function (color) {\n var model = getColorModel(color);\n return getColorReturn(color, model, { decimals: 0 }, translateColor.HEX);\n };\n ColorTranslator.toHEX = function (color) {\n return CSS.HEX(ColorTranslator.toHEXObject(color));\n };\n ColorTranslator.toHEXAObject = function (color) {\n var model = getColorModel(color);\n return getColorReturn(color, model, { decimals: 0 }, translateColor.HEXA);\n };\n ColorTranslator.toHEXA = function (color) {\n return CSS.HEX(ColorTranslator.toHEXAObject(color));\n };\n ColorTranslator.toRGBObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.RGB);\n };\n ColorTranslator.toRGB = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.RGB(ColorTranslator.toRGBObject(color, options), getOptionsFromColorInput(options, color));\n };\n ColorTranslator.toRGBAObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.RGBA);\n };\n ColorTranslator.toRGBA = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.RGB(ColorTranslator.toRGBAObject(color, options), getOptionsFromColorInput(options, color));\n };\n ColorTranslator.toHSLObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.HSL);\n };\n ColorTranslator.toHSL = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.HSL(ColorTranslator.toHSLObject(color, options), getOptionsFromColorInput(options, color));\n };\n ColorTranslator.toHSLAObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.HSLA);\n };\n ColorTranslator.toHSLA = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.HSL(ColorTranslator.toHSLAObject(color, options), getOptionsFromColorInput(options, color));\n };\n ColorTranslator.toCMYKObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.CMYK);\n };\n ColorTranslator.toCMYK = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.CMYK(ColorTranslator.toCMYKObject(color, options), getOptionsFromColorInput(options, color));\n };\n ColorTranslator.toCMYKAObject = function (color, options) {\n if (options === void 0) { options = {}; }\n var model = getColorModel(color);\n return getColorReturn(color, model, options, translateColor.CMYKA);\n };\n ColorTranslator.toCMYKA = function (color, options) {\n if (options === void 0) { options = {}; }\n return CSS.CMYK(ColorTranslator.toCMYKAObject(color, options), getOptionsFromColorInput(options, color));\n };\n ColorTranslator.getBlendHEXObject = function (from, to, steps) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n return getBlendReturn(from, to, steps, { decimals: 0 }, translateColor.HEX);\n };\n ColorTranslator.getBlendHEX = function (from, to, steps) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n return ColorTranslator.getBlendHEXObject(from, to, steps)\n .map(function (color) { return CSS.HEX(color); });\n };\n ColorTranslator.getBlendHEXAObject = function (from, to, steps) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n return getBlendReturn(from, to, steps, { decimals: 0 }, translateColor.HEXA);\n };\n ColorTranslator.getBlendHEXA = function (from, to, steps) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n return ColorTranslator.getBlendHEXAObject(from, to, steps)\n .map(function (color) { return CSS.HEX(color); });\n };\n ColorTranslator.getBlendRGBObject = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return getBlendReturn(from, to, steps, options, translateColor.RGB);\n };\n ColorTranslator.getBlendRGB = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return ColorTranslator.getBlendRGBObject(from, to, steps, options)\n .map(function (color) {\n return CSS.RGB(color, getOptionsFromColorInput(options, from, to));\n });\n };\n ColorTranslator.getBlendRGBAObject = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return getBlendReturn(from, to, steps, options, translateColor.RGBA);\n };\n ColorTranslator.getBlendRGBA = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return ColorTranslator.getBlendRGBAObject(from, to, steps, options)\n .map(function (color) {\n return CSS.RGB(color, getOptionsFromColorInput(options, from, to));\n });\n };\n ColorTranslator.getBlendHSLObject = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return getBlendReturn(from, to, steps, options, translateColor.HSL);\n };\n ColorTranslator.getBlendHSL = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return ColorTranslator.getBlendHSLObject(from, to, steps, options)\n .map(function (color) {\n return CSS.HSL(color, getOptionsFromColorInput(options, from, to));\n });\n };\n ColorTranslator.getBlendHSLAObject = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return getBlendReturn(from, to, steps, options, translateColor.HSLA);\n };\n ColorTranslator.getBlendHSLA = function (from, to, steps, options) {\n if (steps === void 0) { steps = DEFAULT_BLEND_STEPS; }\n if (options === void 0) { options = {}; }\n return ColorTranslator.getBlendHSLAObject(from, to, steps, options)\n .map(function (color) {\n return CSS.HSL(color, getOptionsFromColorInput(options, from, to));\n });\n };\n ColorTranslator.getMixHEXObject = function (colors, mode) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n return colorMixer.HEX(colors, mode, false);\n };\n ColorTranslator.getMixHEX = function (colors, mode) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n return colorMixer.HEX(colors, mode, true);\n };\n ColorTranslator.getMixHEXAObject = function (colors, mode) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n return colorMixer.HEXA(colors, mode, false);\n };\n ColorTranslator.getMixHEXA = function (colors, mode) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n return colorMixer.HEXA(colors, mode, true);\n };\n ColorTranslator.getMixRGBObject = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.RGB(colors, mode, false, parseOptions(options));\n };\n ColorTranslator.getMixRGB = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.RGB(colors, mode, true, getOptionsFromColorInput.apply(void 0, src_spreadArray([options], colors, false)));\n };\n ColorTranslator.getMixRGBAObject = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.RGBA(colors, mode, false, parseOptions(options));\n };\n ColorTranslator.getMixRGBA = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.RGBA(colors, mode, true, getOptionsFromColorInput.apply(void 0, src_spreadArray([options], colors, false)));\n };\n ColorTranslator.getMixHSLObject = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.HSL(colors, mode, false, parseOptions(options));\n };\n ColorTranslator.getMixHSL = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.HSL(colors, mode, true, getOptionsFromColorInput.apply(void 0, src_spreadArray([options], colors, false)));\n };\n ColorTranslator.getMixHSLAObject = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.HSLA(colors, mode, false, parseOptions(options));\n };\n ColorTranslator.getMixHSLA = function (colors, mode, options) {\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return colorMixer.HSLA(colors, mode, true, getOptionsFromColorInput.apply(void 0, src_spreadArray([options], colors, false)));\n };\n ColorTranslator.getShades = function (color, shades, options) {\n if (options === void 0) { options = {}; }\n return getColorMixture(color, shades, true, getOptionsFromColorInput(options, color));\n };\n ColorTranslator.getTints = function (color, tints, options) {\n if (options === void 0) { options = {}; }\n return getColorMixture(color, tints, false, getOptionsFromColorInput(options, color));\n };\n ColorTranslator.getHarmony = function (color, harmony, mode, options) {\n if (harmony === void 0) { harmony = Harmony.COMPLEMENTARY; }\n if (mode === void 0) { mode = Mix.ADDITIVE; }\n if (options === void 0) { options = {}; }\n return getHarmonyReturn(harmony, color, mode, getOptionsFromColorInput(options, color));\n };\n return ColorTranslator;\n}());\n\n\n\n;// CONCATENATED MODULE: ./src/@demo/demo1/index.js\n\n\n/* harmony default export */ const demo1 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n const color = new ColorTranslator(\'hsl(180,100%,50%)\', { decimals: 0 });\n\n for (let row = 0; row < 10; row++) {\n\n for (let col = 0; col < 10; col++) {\n\n color\n .setS(row * 10)\n .setL(col * 5 + 30);\n\n const box = document.createElement(\'div\');\n\n box.classList.add(\'box\');\n box.style.background = color.HEX;\n\n box.innerText =\n `R:${color.R}\n G:${color.G}\n B:${color.B}`;\n container.appendChild(box);\n\n }\n }\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo2/index.js\n\n\n/* harmony default export */ const demo2 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n const color = new ColorTranslator({ r: 255, g: 0, b: 0 });\n const hue = [0, 30, 60, 120, 240, 280, 320, 0];\n let rainbow;\n\n for (let r = 0; r < hue.length; r++) {\n\n color.setH(hue[r]);\n\n const bow = document.createElement(\'div\');\n\n bow.classList.add(\'rainbow\');\n bow.style.background = color.HEX;\n\n if (rainbow) {\n rainbow.appendChild(bow);\n } else {\n container.appendChild(bow);\n }\n\n rainbow = bow;\n }\n\n rainbow.style.background = \'#333\';\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo3/index.js\n\n\n/* harmony default export */ const demo3 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n const hsl = { h: 0, s: \'90%\', l: \'50%\' };\n const hue = [undefined, 55, 30, 0, 290, 220, 130];\n const total = hue.length;\n\n for (let row = 0; row < total; row++) {\n\n for (let col = 0; col < total; col++) {\n\n let index = total - row + col;\n if (index >= total) {\n index -= total;\n }\n hsl.h = hue[index];\n const rgb = hue[index] === undefined\n ? \'#FFF\'\n : ColorTranslator.toHEX(hsl);\n const box = document.createElement(\'div\');\n\n box.classList.add(\'flag\');\n box.style.background = rgb;\n\n container.appendChild(box);\n\n }\n }\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo4/index.js\n\n\n/* harmony default export */ const demo4 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n const colors = [\n \'red\',\n \'lime\',\n \'blue\',\n \'aqua\',\n \'yellow\',\n \'fuchsia\'\n ];\n const total = colors.length;\n\n for (let row = 0; row < total; row++) {\n\n const hsl = ColorTranslator.toHSLObject(colors[row], { decimals: 0 });\n const step = hsl.s / (total - 1);\n\n for (let col = 0; col < total; col++) {\n\n const rgb = ColorTranslator.toHEX(hsl, { decimals: 0 });\n const cmyk = ColorTranslator.toCMYKObject(hsl, { decimals: 0 });\n\n const box = document.createElement(\'div\');\n box.classList.add(\'box\');\n box.style.background = rgb;\n box.innerText = `C:${cmyk.c}\n M:${cmyk.m}\n Y:${cmyk.y}\n K:${cmyk.k}`;\n\n container.appendChild(box);\n\n hsl.s -= step;\n\n }\n }\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo5/index.js\n\n\n/* harmony default export */ const demo5 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n const rows = 11;\n const mult = 3;\n\n for (let i = 0; i < rows; i++) {\n\n const blends = ColorTranslator.getBlendHEX(\'#FF0000\', \'#FFFF00\', mult + i * mult);\n\n blends.forEach((blend, index) => {\n const box = document.createElement(\'div\');\n box.classList.add(\'box\', `file${i}`);\n box.style.background = blend;\n box.innerText = index + 1;\n container.appendChild(box);\n });\n\n }\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo6/index.js\n\n\n/* harmony default export */ const demo6 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n\n const colors = [\'#F00\', \'#FF8000\', \'#FF0\', \'#0F0\', \'#00F\', \'#AA00FF\', \'#FF00AA\'];\n\n const createBox = (color, type) => {\n const box = document.createElement(\'div\');\n box.classList.add(\'box\');\n box.style.backgroundColor = color;\n if (type) box.dataset.type = type;\n container.appendChild(box);\n };\n\n colors.forEach((color) => {\n const shades = ColorTranslator.getShades(color, 3).reverse();\n const tints = ColorTranslator.getTints(color, 3);\n shades.forEach((shade) => createBox(shade, \'shade\'));\n createBox(color);\n tints.forEach((tint) => createBox(tint, \'tint\'));\n });\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo7/index.js\n\n\n\n/* harmony default export */ const demo7 = ((ColorTranslator) => {\n\n const container = document.createElement(\'div\');\n\n const mixes = [\n \'#FF0000\',\n \'#00FF00\',\n \'#0000FF\',\n [1, 3],\n [1, 2],\n [2, 3],\n [1, 2, 3]\n ];\n\n const fillPlanes = () => {\n const planes = container.querySelectorAll(\'#planes path\');\n planes.forEach((plane, index) => {\n let color = \'#CCCCCC\';\n if (typeof mixes[index] === \'string\') {\n color = mixes[index];\n } else if(mixes[index]) {\n const colors = mixes[index].map((i) => mixes[i - 1]);\n color = mixes[index] = ColorTranslator.getMixHEX(colors);\n }\n plane.setAttribute(\'fill\', color);\n });\n };\n\n fetch(\'images/color-mixes.svg\')\n .then(result => result.text())\n .then((svgCode) => {\n container.innerHTML = svgCode;\n fillPlanes();\n });\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo8/index.js\n\n\n/* harmony default export */ const demo8 = ((ColorTranslator, { Mix }) => {\n\n const container = document.createElement(\'div\');\n\n const mixes = [\n \'#FF0000\',\n \'#FFFF00\',\n \'#0000FF\',\n [1, 3],\n [1, 2],\n [2, 3],\n [1, 2, 3]\n ];\n\n const fillPlanes = () => {\n const planes = container.querySelectorAll(\'#planes path\');\n planes.forEach((plane, index) => {\n let color = \'#CCCCCC\';\n if (typeof mixes[index] === \'string\') {\n color = mixes[index];\n } else if(mixes[index]) {\n const colors = mixes[index].map((i) => mixes[i - 1]);\n color = mixes[index] = ColorTranslator.getMixHEX(colors, Mix.SUBTRACTIVE);\n }\n plane.setAttribute(\'fill\', color);\n });\n };\n\n fetch(\'images/color-mixes.svg\')\n .then(result => result.text())\n .then((svgCode) => {\n container.innerHTML = svgCode;\n fillPlanes();\n });\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo9/index.js\n\n\n/* harmony default export */ const demo9 = ((ColorTranslator, { Harmony }) => {\n\n const container = document.createElement(\'div\');\n\n const harmonies = [\n { label: \'Complementary\', value: Harmony.COMPLEMENTARY },\n { label: \'Split Complementary\', value: Harmony.SPLIT_COMPLEMENTARY },\n { label: \'Analogous\', value: Harmony.ANALOGOUS },\n { label: \'Triadic\', value: Harmony.TRIADIC },\n { label: \'Tetradic\', value: Harmony.TETRADIC },\n { label: \'Square\', value: Harmony.SQUARE }\n ];\n\n const baseColor = \'#F00\';\n\n const createElement = (className, parent) => {\n const div = document.createElement(\'div\');\n div.classList.add(className);\n parent.appendChild(div);\n return div;\n };\n\n const createHarmony = (item) => {\n\n const wrapper = createElement(\'wrapper\', container);\n const wheel = createElement(\'wheel\', wrapper);\n const harmony = createElement(\'harmony\', wrapper);\n createElement(\'label\', wrapper).innerText = item.label;\n\n fetch(\'images/wheel-additive.svg\')\n .then(result => result.text())\n .then((svgCode) => {\n const harmonyColors = ColorTranslator.getHarmony(baseColor, item.value);\n const selector = \'path\' + harmonyColors.map((color) => `:not([fill="${color}"])`).join(\'\');\n wheel.innerHTML = svgCode;\n harmonyColors.forEach((hex) => createElement(\'box\', harmony).style.background = hex);\n wheel.querySelectorAll(selector).forEach((path) => path.setAttribute(\'fill-opacity\', \'0.25\'));\n });\n\n };\n\n harmonies.forEach((item) => createHarmony(item));\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo10/index.js\n\n\n/* harmony default export */ const demo10 = ((ColorTranslator, { Harmony, Mix }) => {\n\n const container = document.createElement(\'div\');\n\n const harmonies = [\n { label: \'Complementary\', value: Harmony.COMPLEMENTARY },\n { label: \'Split Complementary\', value: Harmony.SPLIT_COMPLEMENTARY },\n { label: \'Analogous\', value: Harmony.ANALOGOUS },\n { label: \'Triadic\', value: Harmony.TRIADIC },\n { label: \'Tetradic\', value: Harmony.TETRADIC },\n { label: \'Square\', value: Harmony.SQUARE }\n ];\n\n const baseColor = \'#F00\';\n\n const createElement = (className, parent) => {\n const div = document.createElement(\'div\');\n div.classList.add(className);\n parent.appendChild(div);\n return div;\n };\n\n const createHarmony = (item) => {\n\n const wrapper = createElement(\'wrapper\', container);\n const wheel = createElement(\'wheel\', wrapper);\n const harmony = createElement(\'harmony\', wrapper);\n createElement(\'label\', wrapper).innerText = item.label;\n\n fetch(\'images/wheel-subtractive.svg\')\n .then(result => result.text())\n .then((svgCode) => {\n const harmonyColors = ColorTranslator.getHarmony(baseColor, item.value, Mix.SUBTRACTIVE);\n const selector = \'path\' + harmonyColors.map((color) => `:not([fill="${color}"])`).join(\'\');\n wheel.innerHTML = svgCode;\n harmonyColors.forEach((hex) => createElement(\'box\', harmony).style.background = hex);\n wheel.querySelectorAll(selector).forEach((path) => path.setAttribute(\'fill-opacity\', \'0.25\'));\n });\n\n };\n\n harmonies.forEach((item) => createHarmony(item));\n\n return container;\n\n});\n;// CONCATENATED MODULE: ./src/@demo/demo.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst functioToString = (fn) => {\n const article = document.createElement(\'article\');\n const pre = document.createElement(\'pre\');\n article.classList.add(\'function-container\');\n pre.classList.add(\'prettyprint\');\n article.appendChild(pre);\n pre.innerHTML = fn.toString().replace(\'(ColorTranslator)\', \'()\');\n return article;\n};\n\nconst demos = new Map([\n [\'demo1\', demo1],\n [\'demo2\', demo2],\n [\'demo3\', demo3],\n [\'demo4\', demo4],\n [\'demo5\', demo5],\n [\'demo6\', demo6],\n [\'demo7\', demo7],\n [\'demo8\', demo8],\n [\'demo9\', demo9],\n [\'demo10\', demo10],\n]);\n\ndocument.addEventListener(\'DOMContentLoaded\', () => {\n demos.forEach((module, div) => {\n const demo = document.getElementById(div);\n const container = document.createElement(\'div\');\n const wrapper = document.createElement(\'div\');\n\n container.classList.add(\'demo-container\');\n wrapper.classList.add(\'demo-wrapper\');\n\n wrapper.appendChild(module(ColorTranslator, { Harmony: Harmony, Mix: Mix }));\n container.appendChild(wrapper);\n demo.appendChild(container);\n demo.appendChild(functioToString(module));\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc5LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLGlCQUFpQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JELFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUiw0RUFBNEU7QUFDNUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLHFDQUFxQywwQkFBMEI7QUFDL0Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QiwwQkFBMEIsZUFBZTtBQUN0RTs7QUFFTztBQUNQO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPLFNBQVMsV0FBSztBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7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QUFxQixNQUFNO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixNQUFNO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxNQUFNO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixNQUFNO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixNQUFNO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixNQUFNO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixNQUFNO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLEtBQUs7QUFDeEIsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixLQUFLO0FBQ3hCLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsS0FBSztBQUN4QixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLEtBQUs7QUFDeEIsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixLQUFLO0FBQ3hCLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsS0FBSztBQUN4QixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLEtBQUs7QUFDeEIsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixLQUFLO0FBQ3hCLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsS0FBSztBQUN4QixTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLEtBQUs7QUFDeEIsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixLQUFLO0FBQ3hCLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsY0FBb0I7QUFDdkMsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixjQUFvQjtBQUN2QyxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsVUFBUSxDQUFDLFVBQVEsR0FBRyxxQkFBcUIsV0FBVztBQUN2RSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsVUFBUSxDQUFDLFVBQVEsR0FBRyxxQkFBcUIsV0FBVztBQUN2RSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixVQUFRLENBQUMsVUFBUSxHQUFHLHNCQUFzQixXQUFXO0FBQ3hFLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsR0FBRztBQUN0QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxtQkFBbUIsR0FBRztBQUN0QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG1CQUFtQixHQUFHO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFD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QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0U7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWMsS0FBSztBQUNuQixjQUFjLEtBQUs7QUFDbkIsY0FBYyxLQUFLO0FBQ25CLGNBQWMsS0FBSztBQUNuQixjQUFjLEtBQUs7QUFDbkIsY0FBYyxLQUFLO0FBQ25CLGNBQWMsS0FBSztBQUNuQixjQUFjLEtBQUs7QUFDbkIsY0FBYyxLQUFLO0FBQ25CLGVBQWUsTUFBTTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUNBQW1DLGVBQWUsSUFBSSxPQUFPLGNBQUssT0FBRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2NvbG9ydHJhbnNsYXRvci8uL25vZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanM/NmQ5MyIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvY29uc3RhbnRzL251bWJlcnMudHM/ZDU1OSIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvY29uc3RhbnRzL2VudW1zLnRzP2Y1Y2EiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL2NvbnN0YW50cy9yZWdleHBzLnRzP2NmZjgiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL2NvbnN0YW50cy9lcnJvcnMudHM/N2E0ZCIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvY29uc3RhbnRzL29wdGlvbnMudHM/NWEzNSIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvY29uc3RhbnRzL2luZGV4LnRzPzcwMmEiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL2hlbHBlcnMvaW5kZXgudHM/NzhhMSIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvY29sb3IvdHJhbnNsYXRvcnMudHM/OWY3MCIsIndlYnBhY2s6Ly9jb2xvcnRyYW5zbGF0b3IvLi9zcmMvY29sb3IvY3NzLnRzPzZiMTIiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL2NvbG9yL3V0aWxzLnRzPzY5ZjMiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL2luZGV4LnRzP2U5NGUiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL0BkZW1vL2RlbW8xL2luZGV4LmpzPzM5NjUiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL0BkZW1vL2RlbW8yL2luZGV4LmpzP2Q4ZGMiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL0BkZW1vL2RlbW8zL2luZGV4LmpzP2QzODYiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL0BkZW1vL2RlbW80L2luZGV4LmpzPzYxOWYiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL0BkZW1vL2RlbW81L2luZGV4LmpzP2Q4Y2MiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL0BkZW1vL2RlbW82L2luZGV4LmpzPzNhMzIiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL0BkZW1vL2RlbW83L2luZGV4LmpzPzgzNDMiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL0BkZW1vL2RlbW84L2luZGV4LmpzPzc3MjUiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL0BkZW1vL2RlbW85L2luZGV4LmpzPzg1MzIiLCJ3ZWJwYWNrOi8vY29sb3J0cmFuc2xhdG9yLy4vc3JjL0BkZW1vL2RlbW8xMC9pbmRleC5qcz80ZjY3Iiwid2VicGFjazovL2NvbG9ydHJhbnNsYXRvci8uL3NyYy9AZGVtby9kZW1vLmpzPzliN2QiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9XG4gICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmKSB8fFxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnbG9iYWwsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnbG9iYWwgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gIGJsb2I6XG4gICAgJ0ZpbGVSZWFkZXInIGluIGdsb2JhbCAmJlxuICAgICdCbG9iJyBpbiBnbG9iYWwgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGdsb2JhbCxcbiAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gZ2xvYmFsXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgIH0sIHRoaXMpXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWVcbn1cblxuSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgfVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChuYW1lKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpdGVtcy5wdXNoKHZhbHVlKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbmlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICB9IGVsc2Uge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgfVxufVxuXG5mdW5jdGlvbiBCb2R5KCkge1xuICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAvKlxuICAgICAgZmV0Y2gtbW9jayB3cmFwcyB0aGUgUmVzcG9uc2Ugb2JqZWN0IGluIGFuIEVTNiBQcm94eSB0b1xuICAgICAgcHJvdmlkZSB1c2VmdWwgdGVzdCBoYXJuZXNzIGZlYXR1cmVzIHN1Y2ggYXMgZmx1c2guIEhvd2V2ZXIsIG9uXG4gICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgdGhlIHByb3h5LXBvbGx5ZmlsbCBpcyB1bmFibGUgdG8gcHJveHkgYW4gYXR0cmlidXRlIHVubGVzcyBpdCBleGlzdHNcbiAgICAgIG9uIHRoZSBvYmplY3QgYmVmb3JlIHRoZSBQcm94eSBpcyBjcmVhdGVkLiBUaGlzIGNoYW5nZSBlbnN1cmVzXG4gICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgIHNlbWFudGljIG9mIHNldHRpbmcgUmVxdWVzdC5ib2R5VXNlZCBpbiB0aGUgY29uc3RydWN0b3IgYmVmb3JlXG4gICAgICBfaW5pdEJvZHkgaXMgY2FsbGVkLlxuICAgICovXG4gICAgdGhpcy5ib2R5VXNlZCA9IHRoaXMuYm9keVVzZWRcbiAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWxcbiAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICB9XG4gIHRoaXMuX2luaXRCb2R5KGJvZHkpXG5cbiAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgLy8gU2VhcmNoIGZvciBhICdfJyBwYXJhbWV0ZXIgaW4gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgdmFyIHJlUGFyYW1TZWFyY2ggPSAvKFs/Jl0pXz1bXiZdKi9cbiAgICAgIGlmIChyZVBhcmFtU2VhcmNoLnRlc3QodGhpcy51cmwpKSB7XG4gICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLnVybC5yZXBsYWNlKHJlUGFyYW1TZWFyY2gsICckMV89JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBhIG5ldyAnXycgcGFyYW1ldGVyIHRvIHRoZSBlbmQgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy9cbiAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxufVxuXG5mdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gIGJvZHlcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcmJylcbiAgICAuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGZvcm1cbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJylcbiAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9pc3N1ZXMvNzQ4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy83NTFcbiAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgIC5zcGxpdCgnXFxyJylcbiAgICAubWFwKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICB9KVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gaGVhZGVyc1xufVxuXG5Cb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzXG4gIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgdGhpcy5zdGF0dXNUZXh0ID0gb3B0aW9ucy5zdGF0dXNUZXh0ID09PSB1bmRlZmluZWQgPyAnJyA6ICcnICsgb3B0aW9ucy5zdGF0dXNUZXh0XG4gIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbn1cblxuQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgIHVybDogdGhpcy51cmxcbiAgfSlcbn1cblxuUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbnZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5SZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbn1cblxuZXhwb3J0IHZhciBET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGdsb2JhbC5sb2NhdGlvbi5ocmVmID8gZ2xvYmFsLmxvY2F0aW9uLmhyZWYgOiB1cmxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCBmaXhVcmwocmVxdWVzdC51cmwpLCB0cnVlKVxuXG4gICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhocikge1xuICAgICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdXBwb3J0LmFycmF5QnVmZmVyICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG5cbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgfSlcbn1cblxuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7XG4gIGdsb2JhbC5mZXRjaCA9IGZldGNoXG4gIGdsb2JhbC5IZWFkZXJzID0gSGVhZGVyc1xuICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZ2xvYmFsLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCB2YXIgTUFYX0RFQ0lNQUxTID0gNjtcbmV4cG9ydCB2YXIgREVGQVVMVF9CTEVORF9TVEVQUyA9IDU7XG4iLCJleHBvcnQgdmFyIENvbG9yTW9kZWw7XG4oZnVuY3Rpb24gKENvbG9yTW9kZWwpIHtcbiAgICBDb2xvck1vZGVsW1wiSEVYXCJdID0gXCJIRVhcIjtcbiAgICBDb2xvck1vZGVsW1wiUkdCXCJdID0gXCJSR0JcIjtcbiAgICBDb2xvck1vZGVsW1wiSFNMXCJdID0gXCJIU0xcIjtcbiAgICBDb2xvck1vZGVsW1wiQ01ZS1wiXSA9IFwiQ01ZS1wiO1xufSkoQ29sb3JNb2RlbCB8fCAoQ29sb3JNb2RlbCA9IHt9KSk7XG5leHBvcnQgdmFyIEhhcm1vbnk7XG4oZnVuY3Rpb24gKEhhcm1vbnkpIHtcbiAgICBIYXJtb255W1wiQU5BTE9HT1VTXCJdID0gXCJBTkFMT0dPVVNcIjtcbiAgICBIYXJtb255W1wiQ09NUExFTUVOVEFSWVwiXSA9IFwiQ09NUExFTUVOVEFSWVwiO1xuICAgIEhhcm1vbnlbXCJTUExJVF9DT01QTEVNRU5UQVJZXCJdID0gXCJTUExJVF9DT01QTEVNRU5UQVJZXCI7XG4gICAgSGFybW9ueVtcIlRSSUFESUNcIl0gPSBcIlRSSUFESUNcIjtcbiAgICBIYXJtb255W1wiVEVUUkFESUNcIl0gPSBcIlRFVFJBRElDXCI7XG4gICAgSGFybW9ueVtcIlNRVUFSRVwiXSA9IFwiU1FVQVJFXCI7XG59KShIYXJtb255IHx8IChIYXJtb255ID0ge30pKTtcbmV4cG9ydCB2YXIgTWl4O1xuKGZ1bmN0aW9uIChNaXgpIHtcbiAgICBNaXhbXCJBRERJVElWRVwiXSA9IFwiQURESVRJVkVcIjtcbiAgICBNaXhbXCJTVUJUUkFDVElWRVwiXSA9IFwiU1VCVFJBQ1RJVkVcIjtcbn0pKE1peCB8fCAoTWl4ID0ge30pKTtcbmV4cG9ydCB2YXIgQ29sb3JLZXl3b3JkcztcbihmdW5jdGlvbiAoQ29sb3JLZXl3b3Jkcykge1xuICAgIENvbG9yS2V5d29yZHNbXCJibGFja1wiXSA9IFwiIzAwMDAwMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJzaWx2ZXJcIl0gPSBcIiNDMEMwQzBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZ3JheVwiXSA9IFwiIzgwODA4MFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJ3aGl0ZVwiXSA9IFwiI0ZGRkZGRlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJtYXJvb25cIl0gPSBcIiM4MDAwMDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wicmVkXCJdID0gXCIjRkYwMDAwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInB1cnBsZVwiXSA9IFwiIzgwMDA4MFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJmdWNoc2lhXCJdID0gXCIjRkYwMEZGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImdyZWVuXCJdID0gXCIjMDA4MDAwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxpbWVcIl0gPSBcIiMwMEZGMDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wib2xpdmVcIl0gPSBcIiM4MDgwMDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wieWVsbG93XCJdID0gXCIjRkZGRjAwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm5hdnlcIl0gPSBcIiMwMDAwODBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiYmx1ZVwiXSA9IFwiIzAwMDBGRlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJ0ZWFsXCJdID0gXCIjMDA4MDgwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImFxdWFcIl0gPSBcIiMwMEZGRkZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wib3JhbmdlXCJdID0gXCIjRkZBNTAwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImFsaWNlYmx1ZVwiXSA9IFwiI0YwRjhGRlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJhbnRpcXVld2hpdGVcIl0gPSBcIiNGQUVCRDdcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiYXF1YW1hcmluZVwiXSA9IFwiIzdGRkZENFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJhenVyZVwiXSA9IFwiI0YwRkZGRlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJiZWlnZVwiXSA9IFwiI0Y1RjVEQ1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJiaXNxdWVcIl0gPSBcIiNGRkU0QzRcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiYmxhbmNoZWRhbG1vbmRcIl0gPSBcIiNGRkVCQ0RcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiYmx1ZXZpb2xldFwiXSA9IFwiIzhBMkJFMlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJicm93blwiXSA9IFwiI0E1MkEyQVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJidXJseXdvb2RcIl0gPSBcIiNERUI4ODdcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiY2FkZXRibHVlXCJdID0gXCIjNUY5RUEwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImNoYXJ0cmV1c2VcIl0gPSBcIiM3RkZGMDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiY2hvY29sYXRlXCJdID0gXCIjRDI2OTFFXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImNvcmFsXCJdID0gXCIjRkY3RjUwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImNvcm5mbG93ZXJibHVlXCJdID0gXCIjNjQ5NUVEXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImNvcm5zaWxrXCJdID0gXCIjRkZGOERDXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImNyaW1zb25cIl0gPSBcIiNEQzE0M0NcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiY3lhblwiXSA9IFwiIzAwRkZGRlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrYmx1ZVwiXSA9IFwiIzAwMDA4QlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrY3lhblwiXSA9IFwiIzAwOEI4QlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrZ29sZGVucm9kXCJdID0gXCIjQjg4NjBCXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtncmF5XCJdID0gXCIjQTlBOUE5XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtncmVlblwiXSA9IFwiIzAwNjQwMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrZ3JleVwiXSA9IFwiI0E5QTlBOVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJra2hha2lcIl0gPSBcIiNCREI3NkJcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGFya21hZ2VudGFcIl0gPSBcIiM4QjAwOEJcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGFya29saXZlZ3JlZW5cIl0gPSBcIiM1NTZCMkZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGFya29yYW5nZVwiXSA9IFwiI0ZGOEMwMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrb3JjaGlkXCJdID0gXCIjOTkzMkNDXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtyZWRcIl0gPSBcIiM4QjAwMDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGFya3NhbG1vblwiXSA9IFwiI0U5OTY3QVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrc2VhZ3JlZW5cIl0gPSBcIiM4RkJDOEZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGFya3NsYXRlYmx1ZVwiXSA9IFwiIzQ4M0Q4QlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrc2xhdGVncmF5XCJdID0gXCIjMkY0RjRGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRhcmtzbGF0ZWdyZXlcIl0gPSBcIiMyRjRGNEZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGFya3R1cnF1b2lzZVwiXSA9IFwiIzAwQ0VEMVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkYXJrdmlvbGV0XCJdID0gXCIjOTQwMEQzXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRlZXBwaW5rXCJdID0gXCIjRkYxNDkzXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRlZXBza3libHVlXCJdID0gXCIjMDBCRkZGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImRpbWdyYXlcIl0gPSBcIiM2OTY5NjlcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZGltZ3JleVwiXSA9IFwiIzY5Njk2OVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJkb2RnZXJibHVlXCJdID0gXCIjMUU5MEZGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImZpcmVicmlja1wiXSA9IFwiI0IyMjIyMlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJmbG9yYWx3aGl0ZVwiXSA9IFwiI0ZGRkFGMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJmb3Jlc3RncmVlblwiXSA9IFwiIzIyOEIyMlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJnYWluc2Jvcm9cIl0gPSBcIiNEQ0RDRENcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiZ2hvc3R3aGl0ZVwiXSA9IFwiI0Y4RjhGRlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJnb2xkXCJdID0gXCIjRkZENzAwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImdvbGRlbnJvZFwiXSA9IFwiI0RBQTUyMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJncmVlbnllbGxvd1wiXSA9IFwiI0FERkYyRlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJncmV5XCJdID0gXCIjODA4MDgwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImhvbmV5ZGV3XCJdID0gXCIjRjBGRkYwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImhvdHBpbmtcIl0gPSBcIiNGRjY5QjRcIjtcbiAgICBDb2xvcktleXdvcmRzW1wiaW5kaWFucmVkXCJdID0gXCIjQ0Q1QzVDXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImluZGlnb1wiXSA9IFwiIzRCMDA4MlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJpdm9yeVwiXSA9IFwiI0ZGRkZGMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJraGFraVwiXSA9IFwiI0YwRTY4Q1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsYXZlbmRlclwiXSA9IFwiI0U2RTZGQVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsYXZlbmRlcmJsdXNoXCJdID0gXCIjRkZGMEY1XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxhd25ncmVlblwiXSA9IFwiIzdDRkMwMFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsZW1vbmNoaWZmb25cIl0gPSBcIiNGRkZBQ0RcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHRibHVlXCJdID0gXCIjQUREOEU2XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxpZ2h0Y29yYWxcIl0gPSBcIiNGMDgwODBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHRjeWFuXCJdID0gXCIjRTBGRkZGXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxpZ2h0Z29sZGVucm9keWVsbG93XCJdID0gXCIjRkFGQUQyXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxpZ2h0Z3JheVwiXSA9IFwiI0QzRDNEM1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaWdodGdyZWVuXCJdID0gXCIjOTBFRTkwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxpZ2h0Z3JleVwiXSA9IFwiI0QzRDNEM1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaWdodHBpbmtcIl0gPSBcIiNGRkI2QzFcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHRzYWxtb25cIl0gPSBcIiNGRkEwN0FcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHRzZWFncmVlblwiXSA9IFwiIzIwQjJBQVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJsaWdodHNreWJsdWVcIl0gPSBcIiM4N0NFRkFcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHRzbGF0ZWdyYXlcIl0gPSBcIiM3Nzg4OTlcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHRzbGF0ZWdyZXlcIl0gPSBcIiM3Nzg4OTlcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHRzdGVlbGJsdWVcIl0gPSBcIiNCMEM0REVcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGlnaHR5ZWxsb3dcIl0gPSBcIiNGRkZGRTBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibGltZWdyZWVuXCJdID0gXCIjMzJDRDMyXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcImxpbmVuXCJdID0gXCIjRkFGMEU2XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm1hZ2VudGFcIl0gPSBcIiNGRjAwRkZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibWVkaXVtYXF1YW1hcmluZVwiXSA9IFwiIzY2Q0RBQVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJtZWRpdW1ibHVlXCJdID0gXCIjMDAwMENEXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm1lZGl1bW9yY2hpZFwiXSA9IFwiI0JBNTVEM1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJtZWRpdW1wdXJwbGVcIl0gPSBcIiM5MzcwREJcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibWVkaXVtc2VhZ3JlZW5cIl0gPSBcIiMzQ0IzNzFcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibWVkaXVtc2xhdGVibHVlXCJdID0gXCIjN0I2OEVFXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm1lZGl1bXNwcmluZ2dyZWVuXCJdID0gXCIjMDBGQTlBXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm1lZGl1bXR1cnF1b2lzZVwiXSA9IFwiIzQ4RDFDQ1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJtZWRpdW12aW9sZXRyZWRcIl0gPSBcIiNDNzE1ODVcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibWlkbmlnaHRibHVlXCJdID0gXCIjMTkxOTcwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm1pbnRjcmVhbVwiXSA9IFwiI0Y1RkZGQVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJtaXN0eXJvc2VcIl0gPSBcIiNGRkU0RTFcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibW9jY2FzaW5cIl0gPSBcIiNGRkU0QjVcIjtcbiAgICBDb2xvcktleXdvcmRzW1wibmF2YWpvd2hpdGVcIl0gPSBcIiNGRkRFQURcIjtcbiAgICBDb2xvcktleXdvcmRzW1wib2xkbGFjZVwiXSA9IFwiI0ZERjVFNlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJvbGl2ZWRyYWJcIl0gPSBcIiM2QjhFMjNcIjtcbiAgICBDb2xvcktleXdvcmRzW1wib3JhbmdlcmVkXCJdID0gXCIjRkY0NTAwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIm9yY2hpZFwiXSA9IFwiI0RBNzBENlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJwYWxlZ29sZGVucm9kXCJdID0gXCIjRUVFOEFBXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInBhbGVncmVlblwiXSA9IFwiIzk4RkI5OFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJwYWxldHVycXVvaXNlXCJdID0gXCIjQUZFRUVFXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInBhbGV2aW9sZXRyZWRcIl0gPSBcIiNEQjcwOTNcIjtcbiAgICBDb2xvcktleXdvcmRzW1wicGFwYXlhd2hpcFwiXSA9IFwiI0ZGRUZENVwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJwZWFjaHB1ZmZcIl0gPSBcIiNGRkRBQjlcIjtcbiAgICBDb2xvcktleXdvcmRzW1wicGVydVwiXSA9IFwiI0NEODUzRlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJwaW5rXCJdID0gXCIjRkZDMENCXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInBsdW1cIl0gPSBcIiNEREEwRERcIjtcbiAgICBDb2xvcktleXdvcmRzW1wicG93ZGVyYmx1ZVwiXSA9IFwiI0IwRTBFNlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJyb3N5YnJvd25cIl0gPSBcIiNCQzhGOEZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wicm95YWxibHVlXCJdID0gXCIjNDE2OUUxXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInNhZGRsZWJyb3duXCJdID0gXCIjOEI0NTEzXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInNhbG1vblwiXSA9IFwiI0ZBODA3MlwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJzYW5keWJyb3duXCJdID0gXCIjRjRBNDYwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInNlYWdyZWVuXCJdID0gXCIjMkU4QjU3XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInNlYXNoZWxsXCJdID0gXCIjRkZGNUVFXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInNpZW5uYVwiXSA9IFwiI0EwNTIyRFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJza3libHVlXCJdID0gXCIjODdDRUVCXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInNsYXRlYmx1ZVwiXSA9IFwiIzZBNUFDRFwiO1xuICAgIENvbG9yS2V5d29yZHNbXCJzbGF0ZWdyYXlcIl0gPSBcIiM3MDgwOTBcIjtcbiAgICBDb2xvcktleXdvcmRzW1wic2xhdGVncmV5XCJdID0gXCIjNzA4MDkwXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInNub3dcIl0gPSBcIiNGRkZBRkFcIjtcbiAgICBDb2xvcktleXdvcmRzW1wic3ByaW5nZ3JlZW5cIl0gPSBcIiMwMEZGN0ZcIjtcbiAgICBDb2xvcktleXdvcmRzW1wic3RlZWxibHVlXCJdID0gXCIjNDY4MkI0XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInRhblwiXSA9IFwiI0QyQjQ4Q1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJ0aGlzdGxlXCJdID0gXCIjRDhCRkQ4XCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcInRvbWF0b1wiXSA9IFwiI0ZGNjM0N1wiO1xuICAgIENvbG9yS2V5d29yZHNbXCJ0dXJxdW9pc2VcIl0gPSBcIiM0MEUwRDBcIjtcbiAgICBDb2xvcktleXdvcmRzW1widmlvbGV0XCJdID0gXCIjRUU4MkVFXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIndoZWF0XCJdID0gXCIjRjVERUIzXCI7XG4gICAgQ29sb3JLZXl3b3Jkc1tcIndoaXRlc21va2VcIl0gPSBcIiNGNUY1RjVcIjtcbiAgICBDb2xvcktleXdvcmRzW1wieWVsbG93Z3JlZW5cIl0gPSBcIiM5QUNEMzJcIjtcbiAgICBDb2xvcktleXdvcmRzW1wicmViZWNjYXB1cnBsZVwiXSA9IFwiIzY2MzM5OVwiO1xufSkoQ29sb3JLZXl3b3JkcyB8fCAoQ29sb3JLZXl3b3JkcyA9IHt9KSk7XG5leHBvcnQgdmFyIENPTE9SX0tFWVMgPSBPYmplY3Qua2V5cyhDb2xvcktleXdvcmRzKTtcbmV4cG9ydCB2YXIgQ09MT1JfUFJPUFMgPSB7XG4gICAgSEVYOiBbJ3InLCAnZycsICdiJywgJ2EnXSxcbiAgICBSR0I6IFsncicsICdnJywgJ2InLCAnYSddLFxuICAgIEhTTDogWydoJywgJ3MnLCAnbCcsICdhJ10sXG4gICAgQ01ZSzogWydjJywgJ20nLCAneScsICdrJywgJ2EnXVxufTtcbmV4cG9ydCB2YXIgVkFMSURfQ09MT1JfT0JKRUNUUyA9IHtcbiAgICBCR1I6IENvbG9yTW9kZWwuUkdCLFxuICAgIEFCR1I6IENvbG9yTW9kZWwuUkdCLFxuICAgIEhMUzogQ29sb3JNb2RlbC5IU0wsXG4gICAgQUhMUzogQ29sb3JNb2RlbC5IU0wsXG4gICAgQ0tNWTogQ29sb3JNb2RlbC5DTVlLLFxuICAgIEFDS01ZOiBDb2xvck1vZGVsLkNNWUtcbn07XG4iLCJ2YXIgX2E7XG5pbXBvcnQgeyBDb2xvck1vZGVsIH0gZnJvbSAnLi9lbnVtcyc7XG5leHBvcnQgdmFyIENPTE9SUkVHUyA9IChfYSA9IHt9LFxuICAgIF9hW0NvbG9yTW9kZWwuSEVYXSA9IC9eIyg/OihbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSk/fChbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSk/KSQvaSxcbiAgICBfYVtDb2xvck1vZGVsLlJHQl0gPSAvXnJnYmE/XFxzKlxcKFxccyooPzooKD86XFxkKlxcLik/XFxkKyU/KVxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCslPykoPzpcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKykpP3woKD86XFxkKlxcLik/XFxkKyU/KVxccyooKD86XFxkKlxcLik/XFxkKyU/KVxccyooKD86XFxkKlxcLik/XFxkKyU/KSg/OlxccypcXC9cXHMqKCg/OlxcZCpcXC4pP1xcZCslPykpPylcXHMqXFwpJC8sXG4gICAgX2FbQ29sb3JNb2RlbC5IU0xdID0gL15oc2xhP1xccypcXChcXHMqKD86KC0/KD86XFxkKlxcLik/XFxkKyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCspJVxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrKSUoPzpcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKykpP3woLT8oPzpcXGQqXFwuKT9cXGQrKD86ZGVnfGdyYWR8cmFkfHR1cm4pPylcXHMqKCg/OlxcZCpcXC4pP1xcZCspJVxccyooKD86XFxkKlxcLik/XFxkKyklKD86XFxzKlxcL1xccyooKD86XFxkKlxcLik/XFxkKyU/KSk/KVxccypcXCkkLyxcbiAgICBfYVtDb2xvck1vZGVsLkNNWUtdID0gL14oPzpkZXZpY2UtY215a3xjbXlrKVxccypcXChcXHMqKD86KCg/OlxcZCpcXC4pP1xcZCslPylcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKyU/KVxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCslPykoPzpcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKykpP3woKD86XFxkKlxcLik/XFxkKyU/KVxccyooKD86XFxkKlxcLik/XFxkKyU/KVxccyooKD86XFxkKlxcLik/XFxkKyU/KVxccyooKD86XFxkKlxcLik/XFxkKyU/KSg/OlxccypcXC9cXHMqKCg/OlxcZCpcXC4pP1xcZCslPykpPylcXHMqXFwpJC8sXG4gICAgX2EpO1xuZXhwb3J0IHZhciBIU0xfSFVFID0gL14oLT8oPzpcXGQqXFwuKT9cXGQrKSgoPzpkZWd8Z3JhZHxyYWR8dHVybik/KSQvO1xuZXhwb3J0IHZhciBQQ0VOVCA9IC9eKFxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKyklJC87XG5leHBvcnQgdmFyIEhFWCA9IC9eMHgoW2EtZlxcZF17MSwyfSkkL2k7XG5leHBvcnQgdmFyIFRFTVBMQVRFX1ZBUiA9IC9cXHsoXFxkKylcXH0vZztcbiIsImV4cG9ydCB2YXIgRVJST1JTID0ge1xuICAgIE5PVF9BQ0NFUFRFRF9TVFJJTkdfSU5QVVQ6ICdUaGUgcHJvdmlkZWQgc3RyaW5nIGNvbG9yIGRvZXNuXFwndCBoYXZlIGEgY29ycmVjdCBmb3JtYXQnLFxuICAgIE5PVF9BQ0NFUFRFRF9PQkpFQ1RfSU5QVVQ6ICdUaGUgcHJvdmlkZWQgY29sb3Igb2JqZWN0IGRvZXNuXFwndCBoYXZlIHRoZSBwcm9wZXIga2V5cyBvciBmb3JtYXQnXG59O1xuIiwiaW1wb3J0IHsgTUFYX0RFQ0lNQUxTIH0gZnJvbSAnLi9udW1iZXJzJztcbmV4cG9ydCB2YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGRlY2ltYWxzOiBNQVhfREVDSU1BTFMsXG4gICAgbGVnYWN5Q1NTOiBmYWxzZVxufTtcbiIsImV4cG9ydCAqIGZyb20gJy4vbnVtYmVycyc7XG5leHBvcnQgKiBmcm9tICcuL2VudW1zJztcbmV4cG9ydCAqIGZyb20gJy4vcmVnZXhwcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycyc7XG5leHBvcnQgKiBmcm9tICcuL29wdGlvbnMnO1xuIiwidmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbmltcG9ydCB7IFBDRU5ULCBIRVgsIE1BWF9ERUNJTUFMUywgREVGQVVMVF9PUFRJT05TIH0gZnJvbSAnI2NvbnN0YW50cyc7XG5leHBvcnQgdmFyIGhhc1Byb3AgPSBmdW5jdGlvbiAob2JqLCBwcm9wKSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTsgfTtcbmV4cG9ydCB2YXIgcGVyY2VudE51bWJlciA9IGZ1bmN0aW9uIChwZXJjZW50KSB7XG4gICAgcmV0dXJuICtcIlwiLmNvbmNhdChwZXJjZW50KS5yZXBsYWNlKFBDRU5ULCAnJDEnKTtcbn07XG5leHBvcnQgdmFyIHBlcmNlbnQgPSBmdW5jdGlvbiAocGVyY2VudCkgeyByZXR1cm4gUENFTlQudGVzdChcIlwiLmNvbmNhdChwZXJjZW50KSlcbiAgICA/IHBlcmNlbnROdW1iZXIocGVyY2VudClcbiAgICA6IE1hdGgubWluKCtwZXJjZW50LCAxMDApOyB9O1xuZXhwb3J0IHZhciBnZXRERUMgPSBmdW5jdGlvbiAoaGV4KSB7XG4gICAgaWYgKGhleC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaGV4ICs9IGhleDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KGhleCwgMTYpO1xufTtcbmV4cG9ydCB2YXIgZ2V0SEVYID0gZnVuY3Rpb24gKG51bWJlcikge1xuICAgIHZhciBoZXggPSByb3VuZChudW1iZXIsIDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChoZXgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBcIjB4MFwiLmNvbmNhdChoZXgpO1xuICAgIH1cbiAgICByZXR1cm4gXCIweFwiLmNvbmNhdChoZXgpO1xufTtcbmV4cG9ydCB2YXIgdG9IRVggPSBmdW5jdGlvbiAoaCkge1xuICAgIHZhciBoZXggPSByb3VuZChoLCAwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBoZXggPSBcIjBcIi5jb25jYXQoaGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGhleDtcbn07XG5leHBvcnQgdmFyIGdldEJhc2UyNTVOdW1iZXIgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKSB7XG4gICAgaWYgKGFscGhhID09PSB2b2lkIDApIHsgYWxwaGEgPSBmYWxzZTsgfVxuICAgIGlmICghYWxwaGEgJiYgUENFTlQudGVzdChjb2xvcikpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKDI1NSAqIHBlcmNlbnROdW1iZXIoY29sb3IpIC8gMTAwLCAyNTUpO1xuICAgIH1cbiAgICBpZiAoSEVYLnRlc3QoY29sb3IpKSB7XG4gICAgICAgIGlmIChjb2xvci5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGNvbG9yICs9IGNvbG9yLnNsaWNlKC0xKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxwaGFcbiAgICAgICAgICAgID8gcm91bmQoY29sb3IpIC8gMjU1XG4gICAgICAgICAgICA6IHJvdW5kKGNvbG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgubWluKCtjb2xvciwgYWxwaGEgPyAxIDogMjU1KTtcbn07XG5leHBvcnQgdmFyIGdldENNWUtOdW1iZXIgPSBmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJuIE1hdGgubWluKFBDRU5ULnRlc3QoY29sb3IpID8gcGVyY2VudE51bWJlcihjb2xvcikgLyAxMDAgOiArY29sb3IsIDEpOyB9O1xuZXhwb3J0IHZhciBnZXRPcmRlcmVkQXJyYXlTdHJpbmcgPSBmdW5jdGlvbiAoa2V5cykgeyByZXR1cm4gX19zcHJlYWRBcnJheShbXSwga2V5cywgdHJ1ZSkuc29ydCgpLmpvaW4oJycpLnRvVXBwZXJDYXNlKCk7IH07XG5leHBvcnQgdmFyIHJvdW5kID0gZnVuY3Rpb24gKHZhbHVlLCBkZWNpbWFscykge1xuICAgIGlmIChkZWNpbWFscyA9PT0gdm9pZCAwKSB7IGRlY2ltYWxzID0gTUFYX0RFQ0lNQUxTOyB9XG4gICAgdmFyIGV4cCA9IE1hdGgucG93KDEwLCBkZWNpbWFscyk7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoK3ZhbHVlICogZXhwKSAvIGV4cDtcbn07XG5leHBvcnQgdmFyIG1pbm1heCA9IGZ1bmN0aW9uIChuLCBtaW4sIG1heCkgeyByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihuLCBtYXgpKTsgfTtcbmV4cG9ydCB2YXIgZ3JhZGVzID0gZnVuY3Rpb24gKHJhZGlhbikgeyByZXR1cm4gcmFkaWFuICogMTgwIC8gTWF0aC5QSTsgfTtcbmV4cG9ydCB2YXIgcGFyc2VPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsgcmV0dXJuIChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TKSwgb3B0aW9ucykpOyB9O1xuZXhwb3J0IHZhciBnZXRPcHRpb25zRnJvbUNvbG9ySW5wdXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBjb2xvcnMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBjb2xvcnNbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBjc3NDb2xvcnMgPSBjb2xvcnMuZmlsdGVyKGZ1bmN0aW9uIChjb2xvcikgeyByZXR1cm4gdHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJzsgfSk7XG4gICAgdmFyIGFsbExlZ2FjeSA9IGNzc0NvbG9ycy5ldmVyeShmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgcmV0dXJuIGNvbG9yLmluY2x1ZGVzKCcsJyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaW1hbHM6IHR5cGVvZiBvcHRpb25zLmRlY2ltYWxzID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRpb25zLmRlY2ltYWxzXG4gICAgICAgICAgICA6IERFRkFVTFRfT1BUSU9OUy5kZWNpbWFscyxcbiAgICAgICAgbGVnYWN5Q1NTOiB0eXBlb2Ygb3B0aW9ucy5sZWdhY3lDU1MgPT09ICdib29sZWFuJ1xuICAgICAgICAgICAgPyBvcHRpb25zLmxlZ2FjeUNTU1xuICAgICAgICAgICAgOiBCb29sZWFuKGNzc0NvbG9ycy5sZW5ndGggJiYgYWxsTGVnYWN5KSB8fCBERUZBVUxUX09QVElPTlMubGVnYWN5Q1NTXG4gICAgfTtcbn07XG4iLCJpbXBvcnQgeyByb3VuZCB9IGZyb20gJyNoZWxwZXJzJztcbmV4cG9ydCB2YXIgaHVlVG9SR0IgPSBmdW5jdGlvbiAodDEsIHQyLCBodWUpIHtcbiAgICBpZiAoaHVlIDwgMCkge1xuICAgICAgICBodWUgKz0gNjtcbiAgICB9XG4gICAgaWYgKGh1ZSA+PSA2KSB7XG4gICAgICAgIGh1ZSAtPSA2O1xuICAgIH1cbiAgICBpZiAoaHVlIDwgMSkge1xuICAgICAgICByZXR1cm4gcm91bmQoKCh0MiAtIHQxKSAqIGh1ZSArIHQxKSAqIDI1NSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGh1ZSA8IDMpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKHQyICogMjU1KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaHVlIDwgNCkge1xuICAgICAgICByZXR1cm4gcm91bmQoKCh0MiAtIHQxKSAqICg0IC0gaHVlKSArIHQxKSAqIDI1NSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcm91bmQodDEgKiAyNTUpO1xuICAgIH1cbn07XG5leHBvcnQgdmFyIGhzbFRvUkdCID0gZnVuY3Rpb24gKGgsIHMsIGwpIHtcbiAgICBoIC89IDYwO1xuICAgIHMgLz0gMTAwO1xuICAgIGwgLz0gMTAwO1xuICAgIHZhciB0MiA9IChsIDw9IC41KVxuICAgICAgICA/IGwgKiAocyArIDEpXG4gICAgICAgIDogbCArIHMgLSAobCAqIHMpO1xuICAgIHZhciB0MSA9IGwgKiAyIC0gdDI7XG4gICAgdmFyIHIgPSBodWVUb1JHQih0MSwgdDIsIGggKyAyKTtcbiAgICB2YXIgZyA9IGh1ZVRvUkdCKHQxLCB0MiwgaCk7XG4gICAgdmFyIGIgPSBodWVUb1JHQih0MSwgdDIsIGggLSAyKTtcbiAgICByZXR1cm4geyByOiByLCBnOiBnLCBiOiBiIH07XG59O1xuZXhwb3J0IHZhciBjbXlrVG9SR0IgPSBmdW5jdGlvbiAoYywgbSwgeSwgaykge1xuICAgIGsgPSAxIC0gaztcbiAgICB2YXIgciA9IHJvdW5kKDI1NSAqICgxIC0gYykgKiBrKTtcbiAgICB2YXIgZyA9IHJvdW5kKDI1NSAqICgxIC0gbSkgKiBrKTtcbiAgICB2YXIgYiA9IHJvdW5kKDI1NSAqICgxIC0geSkgKiBrKTtcbiAgICByZXR1cm4geyByOiByLCBnOiBnLCBiOiBiIH07XG59O1xuZXhwb3J0IHZhciByZ2JUb0NNWUsgPSBmdW5jdGlvbiAociwgZywgYikge1xuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuICAgIHZhciBrID0gMSAtIE1hdGgubWF4KHIsIGcsIGIpO1xuICAgIHZhciBrMSA9IDEgLSBrO1xuICAgIHZhciBjID0gazEgJiYgKGsxIC0gcikgLyBrMTtcbiAgICB2YXIgbSA9IGsxICYmIChrMSAtIGcpIC8gazE7XG4gICAgdmFyIHkgPSBrMSAmJiAoazEgLSBiKSAvIGsxO1xuICAgIHJldHVybiB7XG4gICAgICAgIGM6IHJvdW5kKGMgKiAxMDApLFxuICAgICAgICBtOiByb3VuZChtICogMTAwKSxcbiAgICAgICAgeTogcm91bmQoeSAqIDEwMCksXG4gICAgICAgIGs6IHJvdW5kKGsgKiAxMDApXG4gICAgfTtcbn07XG5leHBvcnQgdmFyIHJnYlRvSFNMID0gZnVuY3Rpb24gKHIsIGcsIGIsIGEpIHtcbiAgICBpZiAoYSA9PT0gdm9pZCAwKSB7IGEgPSAxOyB9XG4gICAgciAvPSAyNTU7XG4gICAgZyAvPSAyNTU7XG4gICAgYiAvPSAyNTU7XG4gICAgYSA9IE1hdGgubWluKGEsIDEpO1xuICAgIHZhciBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcbiAgICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gICAgdmFyIGQgPSBtYXggLSBtaW47XG4gICAgdmFyIGggPSAwO1xuICAgIHZhciBzID0gMDtcbiAgICB2YXIgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgICBpZiAoZCAhPT0gMCkge1xuICAgICAgICBzd2l0Y2ggKG1heCkge1xuICAgICAgICAgICAgY2FzZSByOlxuICAgICAgICAgICAgICAgIGggPSAoKGcgLSBiKSAvIGQpICUgNjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgZzpcbiAgICAgICAgICAgICAgICBoID0gKGIgLSByKSAvIGQgKyAyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBiOlxuICAgICAgICAgICAgICAgIGggPSAociAtIGcpIC8gZCArIDQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaCA9IHJvdW5kKGggKiA2MCk7XG4gICAgICAgIGlmIChoIDwgMCkge1xuICAgICAgICAgICAgaCArPSAzNjA7XG4gICAgICAgIH1cbiAgICAgICAgcyA9IGQgLyAoMSAtIE1hdGguYWJzKDIgKiBsIC0gMSkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBoOiBoLFxuICAgICAgICBzOiByb3VuZChzICogMTAwKSxcbiAgICAgICAgbDogcm91bmQobCAqIDEwMCksXG4gICAgICAgIGE6IGFcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgcmdiVG9SWUIgPSBmdW5jdGlvbiAociwgZywgYikge1xuICAgIHZhciBJdyA9IE1hdGgubWluKHIsIGcsIGIpO1xuICAgIHZhciBJYiA9IE1hdGgubWluKDI1NSAtIHIsIDI1NSAtIGcsIDI1NSAtIGIpO1xuICAgIHZhciByUkdCID0gciAtIEl3O1xuICAgIHZhciBnUkdCID0gZyAtIEl3O1xuICAgIHZhciBiUkdCID0gYiAtIEl3O1xuICAgIHZhciBtaW5SRyA9IE1hdGgubWluKHJSR0IsIGdSR0IpO1xuICAgIHZhciByUllCID0gclJHQiAtIG1pblJHO1xuICAgIHZhciB5UllCID0gKGdSR0IgKyBtaW5SRykgLyAyO1xuICAgIHZhciBiUllCID0gKGJSR0IgKyBnUkdCIC0gbWluUkcpIC8gMjtcbiAgICB2YXIgbiA9IE1hdGgubWF4KHJSWUIsIHlSWUIsIGJSWUIpIC8gTWF0aC5tYXgoclJHQiwgZ1JHQiwgYlJHQik7XG4gICAgdmFyIE4gPSBpc05hTihuKSB8fCBuID09PSBJbmZpbml0eSB8fCBuIDw9IDAgPyAxIDogbjtcbiAgICByZXR1cm4ge1xuICAgICAgICByOiByUllCIC8gTiArIEliLFxuICAgICAgICB5OiB5UllCIC8gTiArIEliLFxuICAgICAgICBiOiBiUllCIC8gTiArIEliXG4gICAgfTtcbn07XG5leHBvcnQgdmFyIHJ5YlRvUkdCID0gZnVuY3Rpb24gKHIsIHksIGIpIHtcbiAgICB2YXIgSXcgPSBNYXRoLm1pbihyLCB5LCBiKTtcbiAgICB2YXIgSWIgPSBNYXRoLm1pbigyNTUgLSByLCAyNTUgLSB5LCAyNTUgLSBiKTtcbiAgICB2YXIgclJZQiA9IHIgLSBJdztcbiAgICB2YXIgeVJZQiA9IHkgLSBJdztcbiAgICB2YXIgYlJZQiA9IGIgLSBJdztcbiAgICB2YXIgbWluWUIgPSBNYXRoLm1pbih5UllCLCBiUllCKTtcbiAgICB2YXIgclJHQiA9IHJSWUIgKyB5UllCIC0gbWluWUI7XG4gICAgdmFyIGdSR0IgPSB5UllCICsgbWluWUI7XG4gICAgdmFyIGJSR0IgPSAyICogKGJSWUIgLSBtaW5ZQik7XG4gICAgdmFyIG4gPSBNYXRoLm1heChyUkdCLCBnUkdCLCBiUkdCKSAvIE1hdGgubWF4KHJSWUIsIHlSWUIsIGJSWUIpO1xuICAgIHZhciBOID0gaXNOYU4obikgfHwgbiA9PT0gSW5maW5pdHkgfHwgbiA8PSAwID8gMSA6IG47XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcjogclJHQiAvIE4gKyBJYixcbiAgICAgICAgZzogZ1JHQiAvIE4gKyBJYixcbiAgICAgICAgYjogYlJHQiAvIE4gKyBJYlxuICAgIH07XG59O1xuZXhwb3J0IHZhciBodWVSWUIgPSBmdW5jdGlvbiAoaHVlLCB0b1JZQikge1xuICAgIGlmIChodWUgPCAwKVxuICAgICAgICBodWUgKz0gMzYwO1xuICAgIGlmIChodWUgPiAzNjApXG4gICAgICAgIGh1ZSAtPSAzNjA7XG4gICAgaWYgKGh1ZSA9PT0gMzYwIHx8IGh1ZSA9PT0gMClcbiAgICAgICAgcmV0dXJuIGh1ZTtcbiAgICB2YXIgbWFwMSA9IFtcbiAgICAgICAgWzAsIDEyMF0sXG4gICAgICAgIFsxMjAsIDE4MF0sXG4gICAgICAgIFsxODAsIDI0MF0sXG4gICAgICAgIFsyNDAsIDM2MF1cbiAgICBdO1xuICAgIHZhciBtYXAyID0gW1xuICAgICAgICBbMCwgNjBdLFxuICAgICAgICBbNjAsIDEyMF0sXG4gICAgICAgIFsxMjAsIDI0MF0sXG4gICAgICAgIFsyNDAsIDM2MF1cbiAgICBdO1xuICAgIHZhciBmcm9tID0gdG9SWUIgPyBtYXAxIDogbWFwMjtcbiAgICB2YXIgdG8gPSB0b1JZQiA/IG1hcDIgOiBtYXAxO1xuICAgIHZhciBhID0gMDtcbiAgICB2YXIgYiA9IDA7XG4gICAgdmFyIGMgPSAwO1xuICAgIHZhciBkID0gMDtcbiAgICBmcm9tLmZpbmQoZnVuY3Rpb24gKGFyciwgaW5kZXgpIHtcbiAgICAgICAgaWYgKGh1ZSA+PSBhcnJbMF0gJiYgaHVlIDwgYXJyWzFdKSB7XG4gICAgICAgICAgICBhID0gYXJyWzBdO1xuICAgICAgICAgICAgYiA9IGFyclsxXTtcbiAgICAgICAgICAgIGMgPSB0b1tpbmRleF1bMF07XG4gICAgICAgICAgICBkID0gdG9baW5kZXhdWzFdO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIHJldHVybiBjICsgKGh1ZSAtIGEpICogKChkIC0gYykgLyAoYiAtIGEpKTtcbn07XG4iLCJ2YXIgX2E7XG5pbXBvcnQgeyBDb2xvck1vZGVsLCBURU1QTEFURV9WQVIsIENPTE9SX1BST1BTLCBWQUxJRF9DT0xPUl9PQkpFQ1RTIH0gZnJvbSAnI2NvbnN0YW50cyc7XG5pbXBvcnQgeyB0b0hFWCwgcm91bmQsIGdldE9yZGVyZWRBcnJheVN0cmluZyB9IGZyb20gJyNoZWxwZXJzJztcbnZhciBwcmVwYXJlQ29sb3JGb3JDc3MgPSBmdW5jdGlvbiAoY29sb3IsIGlzSGV4KSB7XG4gICAgaWYgKGlzSGV4ID09PSB2b2lkIDApIHsgaXNIZXggPSBmYWxzZTsgfVxuICAgIHZhciBwcm9wcyA9IGdldE9yZGVyZWRBcnJheVN0cmluZyhPYmplY3Qua2V5cyhjb2xvcikpO1xuICAgIHZhciBtb2RlbCA9IFZBTElEX0NPTE9SX09CSkVDVFNbcHJvcHNdO1xuICAgIHZhciBrZXlzID0gQ09MT1JfUFJPUFNbbW9kZWxdO1xuICAgIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gY29sb3Jba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChpc0hleCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRvSEVYKHJvdW5kKHZhbHVlLCAwKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgW10pO1xufTtcbnZhciBnZXRSZXN1bHRGcm9tVGVtcGxhdGUgPSBmdW5jdGlvbiAodGVtcGxhdGUsIHZhcnMpIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZShURU1QTEFURV9WQVIsIGZ1bmN0aW9uIChfX21hdGNoLCBpbmRleFN0cikge1xuICAgICAgICB2YXIgaW5kZXggPSAraW5kZXhTdHIgLSAxO1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodmFyc1tpbmRleF0pO1xuICAgIH0pO1xufTtcbmV4cG9ydCB2YXIgQ1NTID0gKF9hID0ge30sXG4gICAgX2FbQ29sb3JNb2RlbC5IRVhdID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHZhciB2YWx1ZXMgPSBwcmVwYXJlQ29sb3JGb3JDc3MoY29sb3IsIHRydWUpO1xuICAgICAgICB2YXIgdGVtcGxhdGUgPSB2YWx1ZXMubGVuZ3RoID09PSA0XG4gICAgICAgICAgICA/ICcjezF9ezJ9ezN9ezR9J1xuICAgICAgICAgICAgOiAnI3sxfXsyfXszfSc7XG4gICAgICAgIHJldHVybiBnZXRSZXN1bHRGcm9tVGVtcGxhdGUodGVtcGxhdGUsIHZhbHVlcyk7XG4gICAgfSxcbiAgICBfYVtDb2xvck1vZGVsLlJHQl0gPSBmdW5jdGlvbiAoY29sb3IsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGxlZ2FjeUNTUyA9IG9wdGlvbnMubGVnYWN5Q1NTO1xuICAgICAgICB2YXIgdmFsdWVzID0gcHJlcGFyZUNvbG9yRm9yQ3NzKGNvbG9yKTtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gbGVnYWN5Q1NTXG4gICAgICAgICAgICA/ICh2YWx1ZXMubGVuZ3RoID09PSA0XG4gICAgICAgICAgICAgICAgPyAncmdiYSh7MX0sezJ9LHszfSx7NH0pJ1xuICAgICAgICAgICAgICAgIDogJ3JnYih7MX0sezJ9LHszfSknKVxuICAgICAgICAgICAgOiAodmFsdWVzLmxlbmd0aCA9PT0gNFxuICAgICAgICAgICAgICAgID8gJ3JnYih7MX0gezJ9IHszfSAvIHs0fSknXG4gICAgICAgICAgICAgICAgOiAncmdiKHsxfSB7Mn0gezN9KScpO1xuICAgICAgICByZXR1cm4gZ2V0UmVzdWx0RnJvbVRlbXBsYXRlKHRlbXBsYXRlLCB2YWx1ZXMpO1xuICAgIH0sXG4gICAgX2FbQ29sb3JNb2RlbC5IU0xdID0gZnVuY3Rpb24gKGNvbG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBsZWdhY3lDU1MgPSBvcHRpb25zLmxlZ2FjeUNTUztcbiAgICAgICAgdmFyIHZhbHVlcyA9IHByZXBhcmVDb2xvckZvckNzcyhjb2xvcik7XG4gICAgICAgIHZhciB0ZW1wbGF0ZSA9IGxlZ2FjeUNTU1xuICAgICAgICAgICAgPyAodmFsdWVzLmxlbmd0aCA9PT0gNFxuICAgICAgICAgICAgICAgID8gJ2hzbGEoezF9LHsyfSUsezN9JSx7NH0pJ1xuICAgICAgICAgICAgICAgIDogJ2hzbCh7MX0sezJ9JSx7M30lKScpXG4gICAgICAgICAgICA6ICh2YWx1ZXMubGVuZ3RoID09PSA0XG4gICAgICAgICAgICAgICAgPyAnaHNsKHsxfSB7Mn0lIHszfSUgLyB7NH0pJ1xuICAgICAgICAgICAgICAgIDogJ2hzbCh7MX0gezJ9JSB7M30lKScpO1xuICAgICAgICByZXR1cm4gZ2V0UmVzdWx0RnJvbVRlbXBsYXRlKHRlbXBsYXRlLCB2YWx1ZXMpO1xuICAgIH0sXG4gICAgX2FbQ29sb3JNb2RlbC5DTVlLXSA9IGZ1bmN0aW9uIChjb2xvciwgb3B0aW9ucykge1xuICAgICAgICB2YXIgbGVnYWN5Q1NTID0gb3B0aW9ucy5sZWdhY3lDU1M7XG4gICAgICAgIHZhciB2YWx1ZXMgPSBwcmVwYXJlQ29sb3JGb3JDc3MoY29sb3IpO1xuICAgICAgICB2YXIgdGVtcGxhdGUgPSBsZWdhY3lDU1NcbiAgICAgICAgICAgID8gKHZhbHVlcy5sZW5ndGggPT09IDVcbiAgICAgICAgICAgICAgICA/ICdkZXZpY2UtY215ayh7MX0lLHsyfSUsezN9JSx7NH0lLHs1fSknXG4gICAgICAgICAgICAgICAgOiAnZGV2aWNlLWNteWsoezF9JSx7Mn0lLHszfSUsezR9JSknKVxuICAgICAgICAgICAgOiAodmFsdWVzLmxlbmd0aCA9PT0gNVxuICAgICAgICAgICAgICAgID8gJ2RldmljZS1jbXlrKHsxfSUgezJ9JSB7M30lIHs0fSUgLyB7NX0pJ1xuICAgICAgICAgICAgICAgIDogJ2RldmljZS1jbXlrKHsxfSUgezJ9JSB7M30lIHs0fSUpJyk7XG4gICAgICAgIHJldHVybiBnZXRSZXN1bHRGcm9tVGVtcGxhdGUodGVtcGxhdGUsIHZhbHVlcyk7XG4gICAgfSxcbiAgICBfYSk7XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbmltcG9ydCB7IEhFWCwgUENFTlQsIENvbG9yTW9kZWwsIE1peCwgQ29sb3JLZXl3b3JkcywgQ09MT1JSRUdTLCBDT0xPUl9LRVlTLCBFUlJPUlMsIEhTTF9IVUUsIFZBTElEX0NPTE9SX09CSkVDVFMgfSBmcm9tICcjY29uc3RhbnRzJztcbmltcG9ydCB7IGdldE9yZGVyZWRBcnJheVN0cmluZywgZ2V0REVDLCBnZXRIRVgsIGdldEJhc2UyNTVOdW1iZXIsIGdldENNWUtOdW1iZXIsIGhhc1Byb3AsIHBlcmNlbnQsIHBlcmNlbnROdW1iZXIsIHJvdW5kLCBtaW5tYXgsIGdyYWRlcyB9IGZyb20gJyNoZWxwZXJzJztcbmltcG9ydCB7IHJnYlRvSFNMLCBoc2xUb1JHQiwgY215a1RvUkdCLCByZ2JUb0NNWUssIHJnYlRvUllCLCByeWJUb1JHQiwgaHVlUllCIH0gZnJvbSAnI2NvbG9yL3RyYW5zbGF0b3JzJztcbmltcG9ydCB7IENTUyB9IGZyb20gJyNjb2xvci9jc3MnO1xudmFyIHBpMiA9IDM2MDtcbmV4cG9ydCB2YXIgbm9ybWFsaXplSHVlID0gZnVuY3Rpb24gKGh1ZSkge1xuICAgIGlmICh0eXBlb2YgaHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IGh1ZS5tYXRjaChIU0xfSFVFKTtcbiAgICAgICAgdmFyIHZhbHVlID0gK21hdGNoZXNbMV07XG4gICAgICAgIHZhciB1bml0cyA9IG1hdGNoZXNbMl07XG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3JhZCc6XG4gICAgICAgICAgICAgICAgaHVlID0gcm91bmQoZ3JhZGVzKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0dXJuJzpcbiAgICAgICAgICAgICAgICBodWUgPSByb3VuZCh2YWx1ZSAqIDM2MCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkZWcnOlxuICAgICAgICAgICAgY2FzZSAnZ3JhZCc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGh1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChodWUgPiAzNjAgfHwgaHVlIDwgMCkge1xuICAgICAgICBodWUgLT0gTWF0aC5mbG9vcihodWUgLyBwaTIpICogcGkyO1xuICAgIH1cbiAgICByZXR1cm4gaHVlO1xufTtcbmV4cG9ydCB2YXIgbm9ybWFsaXplQWxwaGEgPSBmdW5jdGlvbiAoYWxwaGEpIHtcbiAgICBpZiAodHlwZW9mIGFscGhhID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoUENFTlQudGVzdChhbHBoYSkpIHtcbiAgICAgICAgICAgIGFscGhhID0gcGVyY2VudE51bWJlcihhbHBoYSkgLyAxMDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhbHBoYSA9ICthbHBoYTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKGlzTmFOKCthbHBoYSkgfHwgYWxwaGEgPiAxKSA/IDEgOiByb3VuZChhbHBoYSk7XG59O1xudmFyIGhhcm1vbnkgPSBmdW5jdGlvbiAoY29sb3IsIGFuZ2xlcywgbW9kZSkge1xuICAgIHJldHVybiBhbmdsZXMucmVkdWNlKGZ1bmN0aW9uIChhcnIsIG51bSkge1xuICAgICAgICByZXR1cm4gKF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgYXJyLCB0cnVlKSwgW1xuICAgICAgICAgICAgX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbG9yKSwgeyBoOiBtb2RlID09PSBNaXguQURESVRJVkVcbiAgICAgICAgICAgICAgICAgICAgPyBub3JtYWxpemVIdWUoY29sb3IuaCArIG51bSlcbiAgICAgICAgICAgICAgICAgICAgOiBub3JtYWxpemVIdWUoaHVlUllCKGh1ZVJZQihjb2xvci5oLCBmYWxzZSkgKyBudW0sIHRydWUpKSB9KVxuICAgICAgICBdLCBmYWxzZSkpO1xuICAgIH0sIFtfX2Fzc2lnbih7fSwgY29sb3IpXSk7XG59O1xuZXhwb3J0IHZhciBhbmFsb2dvdXMgPSBmdW5jdGlvbiAoY29sb3IsIG1vZGUpIHsgcmV0dXJuIGhhcm1vbnkoY29sb3IsIFszMCwgLTMwXSwgbW9kZSk7IH07XG5leHBvcnQgdmFyIGNvbXBsZW1lbnRhcnkgPSBmdW5jdGlvbiAoY29sb3IsIG1vZGUpIHsgcmV0dXJuIGhhcm1vbnkoY29sb3IsIFsxODBdLCBtb2RlKTsgfTtcbmV4cG9ydCB2YXIgc3BsaXRDb21wbGVtZW50YXJ5ID0gZnVuY3Rpb24gKGNvbG9yLCBtb2RlKSB7IHJldHVybiBoYXJtb255KGNvbG9yLCBbMTUwLCAtMTUwXSwgbW9kZSk7IH07XG5leHBvcnQgdmFyIHRyaWFkaWMgPSBmdW5jdGlvbiAoY29sb3IsIG1vZGUpIHsgcmV0dXJuIGhhcm1vbnkoY29sb3IsIFsxMjAsIC0xMjBdLCBtb2RlKTsgfTtcbmV4cG9ydCB2YXIgdGV0cmFkaWMgPSBmdW5jdGlvbiAoY29sb3IsIG1vZGUpIHsgcmV0dXJuIGhhcm1vbnkoY29sb3IsIFs2MCwgLTEyMCwgMTgwXSwgbW9kZSk7IH07XG5leHBvcnQgdmFyIHNxdWFyZSA9IGZ1bmN0aW9uIChjb2xvciwgbW9kZSkgeyByZXR1cm4gaGFybW9ueShjb2xvciwgWzkwLCAtOTAsIDE4MF0sIG1vZGUpOyB9O1xudmFyIGdldENvbG9yTW9kZWxGcm9tU3RyaW5nID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgdmFyIG1vZGVsO1xuICAgIE9iamVjdC5rZXlzKENvbG9yTW9kZWwpLnNvbWUoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgdmFyIHJlZyA9IENPTE9SUkVHU1twXTtcbiAgICAgICAgaWYgKHJlZy50ZXN0KGNvbG9yKSkge1xuICAgICAgICAgICAgbW9kZWwgPSBwO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIW1vZGVsICYmXG4gICAgICAgICEhfkNPTE9SX0tFWVMuaW5kZXhPZihjb2xvcikpIHtcbiAgICAgICAgbW9kZWwgPSBDb2xvck1vZGVsLkhFWDtcbiAgICB9XG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JTLk5PVF9BQ0NFUFRFRF9TVFJJTkdfSU5QVVQpO1xuICAgIH1cbiAgICByZXR1cm4gbW9kZWw7XG59O1xudmFyIGdldENvbG9yTW9kZWxGcm9tT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgdmFyIG1vZGVsO1xuICAgIHZhciBpbnZhbGlkID0gZmFsc2U7XG4gICAgdmFyIHByb3BzID0gZ2V0T3JkZXJlZEFycmF5U3RyaW5nKE9iamVjdC5rZXlzKGNvbG9yKSk7XG4gICAgaWYgKFZBTElEX0NPTE9SX09CSkVDVFNbcHJvcHNdKSB7XG4gICAgICAgIG1vZGVsID0gVkFMSURfQ09MT1JfT0JKRUNUU1twcm9wc107XG4gICAgfVxuICAgIGlmIChtb2RlbCAmJiBtb2RlbCA9PT0gQ29sb3JNb2RlbC5SR0IpIHtcbiAgICAgICAgdmFyIGhhc0ludmFsaWRIZXggPSBPYmplY3QuZW50cmllcyhjb2xvcikuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuICFIRVgudGVzdChcIlwiLmNvbmNhdChpdGVtWzFdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgaGFzSW52YWxpZFJlZ2IgPSBPYmplY3QuZW50cmllcyhjb2xvcikuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuICEoUENFTlQudGVzdChcIlwiLmNvbmNhdChpdGVtWzFdKSkgfHxcbiAgICAgICAgICAgICAgICAoIUhFWC50ZXN0KFwiXCIuY29uY2F0KGl0ZW1bMV0pKSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNOYU4oK2l0ZW1bMV0pICYmXG4gICAgICAgICAgICAgICAgICAgICtpdGVtWzFdIDw9IDI1NSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGhhc0ludmFsaWRIZXggJiYgaGFzSW52YWxpZFJlZ2IpIHtcbiAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaGFzSW52YWxpZEhleCkge1xuICAgICAgICAgICAgbW9kZWwgPSBDb2xvck1vZGVsLkhFWDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1vZGVsIHx8IGludmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SUy5OT1RfQUNDRVBURURfT0JKRUNUX0lOUFVUKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsO1xufTtcbmV4cG9ydCB2YXIgZ2V0Q29sb3JNb2RlbCA9IGZ1bmN0aW9uIChjb2xvcikgeyByZXR1cm4gdHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJ1xuICAgID8gZ2V0Q29sb3JNb2RlbEZyb21TdHJpbmcoY29sb3IpXG4gICAgOiBnZXRDb2xvck1vZGVsRnJvbU9iamVjdChjb2xvcik7IH07XG5leHBvcnQgdmFyIGdldFJHQk9iamVjdEZyb21TdHJpbmcgPSAoX2EgPSB7fSxcbiAgICBfYVtDb2xvck1vZGVsLkhFWF0gPSBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgdmFyIGNvbG9yU3RyID0gIX5DT0xPUl9LRVlTLmluZGV4T2YoY29sb3IpXG4gICAgICAgICAgICA/IGNvbG9yXG4gICAgICAgICAgICA6IENvbG9yS2V5d29yZHNbY29sb3JdO1xuICAgICAgICB2YXIgbWF0Y2ggPSBjb2xvclN0ci5tYXRjaChDT0xPUlJFR1MuSEVYKTtcbiAgICAgICAgdmFyIG9iamVjdCA9IHtcbiAgICAgICAgICAgIHI6IGdldERFQyhtYXRjaFsxXSB8fCBtYXRjaFs1XSksXG4gICAgICAgICAgICBnOiBnZXRERUMobWF0Y2hbMl0gfHwgbWF0Y2hbNl0pLFxuICAgICAgICAgICAgYjogZ2V0REVDKG1hdGNoWzNdIHx8IG1hdGNoWzddKVxuICAgICAgICB9O1xuICAgICAgICB2YXIgYSA9IG1hdGNoWzRdIHx8IG1hdGNoWzhdO1xuICAgICAgICBpZiAoYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvYmplY3QuYSA9IGdldERFQyhhKSAvIDI1NTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0sXG4gICAgX2FbQ29sb3JNb2RlbC5SR0JdID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IGNvbG9yLm1hdGNoKENPTE9SUkVHUy5SR0IpO1xuICAgICAgICB2YXIgciA9IGdldEJhc2UyNTVOdW1iZXIobWF0Y2hbMV0gfHwgbWF0Y2hbNV0pO1xuICAgICAgICB2YXIgZyA9IGdldEJhc2UyNTVOdW1iZXIobWF0Y2hbMl0gfHwgbWF0Y2hbNl0pO1xuICAgICAgICB2YXIgYiA9IGdldEJhc2UyNTVOdW1iZXIobWF0Y2hbM10gfHwgbWF0Y2hbN10pO1xuICAgICAgICB2YXIgYSA9IG1hdGNoWzRdIHx8IG1hdGNoWzhdO1xuICAgICAgICB2YXIgb2JqZWN0ID0ge1xuICAgICAgICAgICAgcjogTWF0aC5taW4ociwgMjU1KSxcbiAgICAgICAgICAgIGc6IE1hdGgubWluKGcsIDI1NSksXG4gICAgICAgICAgICBiOiBNYXRoLm1pbihiLCAyNTUpXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9iamVjdC5hID0gbm9ybWFsaXplQWxwaGEoYSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9LFxuICAgIF9hW0NvbG9yTW9kZWwuSFNMXSA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICB2YXIgbWF0Y2ggPSBjb2xvci5tYXRjaChDT0xPUlJFR1MuSFNMKTtcbiAgICAgICAgdmFyIGggPSBub3JtYWxpemVIdWUobWF0Y2hbMV0gfHwgbWF0Y2hbNV0pO1xuICAgICAgICB2YXIgcyA9IHBlcmNlbnQobWF0Y2hbMl0gfHwgbWF0Y2hbNl0pO1xuICAgICAgICB2YXIgbCA9IHBlcmNlbnQobWF0Y2hbM10gfHwgbWF0Y2hbN10pO1xuICAgICAgICB2YXIgYSA9IG1hdGNoWzRdIHx8IG1hdGNoWzhdO1xuICAgICAgICB2YXIgcmdiID0gaHNsVG9SR0IoaCwgcywgbCk7XG4gICAgICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJnYi5hID0gbm9ybWFsaXplQWxwaGEoYSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9LFxuICAgIF9hW0NvbG9yTW9kZWwuQ01ZS10gPSBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gY29sb3IubWF0Y2goQ09MT1JSRUdTLkNNWUspO1xuICAgICAgICB2YXIgYyA9IGdldENNWUtOdW1iZXIobWF0Y2hbMV0gfHwgbWF0Y2hbNl0pO1xuICAgICAgICB2YXIgbSA9IGdldENNWUtOdW1iZXIobWF0Y2hbMl0gfHwgbWF0Y2hbN10pO1xuICAgICAgICB2YXIgeSA9IGdldENNWUtOdW1iZXIobWF0Y2hbM10gfHwgbWF0Y2hbOF0pO1xuICAgICAgICB2YXIgayA9IGdldENNWUtOdW1iZXIobWF0Y2hbNF0gfHwgbWF0Y2hbOV0pO1xuICAgICAgICB2YXIgYSA9IG1hdGNoWzVdIHx8IG1hdGNoWzEwXTtcbiAgICAgICAgdmFyIHJnYiA9IGNteWtUb1JHQihjLCBtLCB5LCBrKTtcbiAgICAgICAgaWYgKGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmdiLmEgPSBub3JtYWxpemVBbHBoYShhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH0sXG4gICAgX2EpO1xuZXhwb3J0IHZhciBnZXRSR0JPYmplY3RGcm9tT2JqZWN0ID0gKF9iID0ge30sXG4gICAgX2JbQ29sb3JNb2RlbC5IRVhdID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHZhciBvYmplY3QgPSB7XG4gICAgICAgICAgICByOiBnZXRCYXNlMjU1TnVtYmVyKFwiXCIuY29uY2F0KGNvbG9yLnIpKSxcbiAgICAgICAgICAgIGc6IGdldEJhc2UyNTVOdW1iZXIoXCJcIi5jb25jYXQoY29sb3IuZykpLFxuICAgICAgICAgICAgYjogZ2V0QmFzZTI1NU51bWJlcihcIlwiLmNvbmNhdChjb2xvci5iKSlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGhhc1Byb3AoY29sb3IsICdhJykpIHtcbiAgICAgICAgICAgIG9iamVjdC5hID0gTWF0aC5taW4oZ2V0QmFzZTI1NU51bWJlcihcIlwiLmNvbmNhdChjb2xvci5hKSwgdHJ1ZSksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfSxcbiAgICBfYltDb2xvck1vZGVsLlJHQl0gPSBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuSEVYKGNvbG9yKTtcbiAgICB9LFxuICAgIF9iW0NvbG9yTW9kZWwuSFNMXSA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICB2YXIgcyA9IHBlcmNlbnQoXCJcIi5jb25jYXQoY29sb3IucykpO1xuICAgICAgICB2YXIgbCA9IHBlcmNlbnQoXCJcIi5jb25jYXQoY29sb3IubCkpO1xuICAgICAgICB2YXIgcmdiID0gaHNsVG9SR0Iobm9ybWFsaXplSHVlKGNvbG9yLmgpLCBzLCBsKTtcbiAgICAgICAgaWYgKGhhc1Byb3AoY29sb3IsICdhJykpIHtcbiAgICAgICAgICAgIHJnYi5hID0gbm9ybWFsaXplQWxwaGEoY29sb3IuYSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9LFxuICAgIF9iW0NvbG9yTW9kZWwuQ01ZS10gPSBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgdmFyIGMgPSBnZXRDTVlLTnVtYmVyKFwiXCIuY29uY2F0KGNvbG9yLmMpKTtcbiAgICAgICAgdmFyIG0gPSBnZXRDTVlLTnVtYmVyKFwiXCIuY29uY2F0KGNvbG9yLm0pKTtcbiAgICAgICAgdmFyIHkgPSBnZXRDTVlLTnVtYmVyKFwiXCIuY29uY2F0KGNvbG9yLnkpKTtcbiAgICAgICAgdmFyIGsgPSBnZXRDTVlLTnVtYmVyKFwiXCIuY29uY2F0KGNvbG9yLmspKTtcbiAgICAgICAgdmFyIHJnYiA9IGNteWtUb1JHQihjLCBtLCB5LCBrKTtcbiAgICAgICAgaWYgKGhhc1Byb3AoY29sb3IsICdhJykpIHtcbiAgICAgICAgICAgIHJnYi5hID0gbm9ybWFsaXplQWxwaGEoY29sb3IuYSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9LFxuICAgIF9iKTtcbmV4cG9ydCB2YXIgZ2V0UkdCT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9yLCBtb2RlbCkge1xuICAgIGlmIChtb2RlbCA9PT0gdm9pZCAwKSB7IG1vZGVsID0gZ2V0Q29sb3JNb2RlbChjb2xvcik7IH1cbiAgICByZXR1cm4gdHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGdldFJHQk9iamVjdEZyb21TdHJpbmdbbW9kZWxdKGNvbG9yKVxuICAgICAgICA6IGdldFJHQk9iamVjdEZyb21PYmplY3RbbW9kZWxdKGNvbG9yKTtcbn07XG5leHBvcnQgdmFyIHRyYW5zbGF0ZUNvbG9yID0gKF9jID0ge30sXG4gICAgX2NbQ29sb3JNb2RlbC5IRVhdID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByOiBnZXRIRVgoY29sb3IuciksXG4gICAgICAgICAgICBnOiBnZXRIRVgoY29sb3IuZyksXG4gICAgICAgICAgICBiOiBnZXRIRVgoY29sb3IuYilcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIF9jLkhFWEEgPSBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgdmFyIHJnYiA9IHRyYW5zbGF0ZUNvbG9yLkhFWChjb2xvcik7XG4gICAgICAgIHJnYi5hID0gaGFzUHJvcChjb2xvciwgJ2EnKVxuICAgICAgICAgICAgPyBnZXRIRVgoY29sb3IuYSAqIDI1NSlcbiAgICAgICAgICAgIDogJzB4RkYnO1xuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH0sXG4gICAgX2NbQ29sb3JNb2RlbC5SR0JdID0gZnVuY3Rpb24gKGNvbG9yLCBkZWNpbWFscykge1xuICAgICAgICBpZiAoaGFzUHJvcChjb2xvciwgJ2EnKSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbG9yLmE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdW5kUkdCT2JqZWN0KGNvbG9yLCBkZWNpbWFscyk7XG4gICAgfSxcbiAgICBfYy5SR0JBID0gZnVuY3Rpb24gKGNvbG9yLCBkZWNpbWFscykge1xuICAgICAgICBjb2xvci5hID0gaGFzUHJvcChjb2xvciwgJ2EnKVxuICAgICAgICAgICAgPyByb3VuZChjb2xvci5hKVxuICAgICAgICAgICAgOiAxO1xuICAgICAgICByZXR1cm4gcm91bmRSR0JPYmplY3QoY29sb3IsIGRlY2ltYWxzKTtcbiAgICB9LFxuICAgIF9jW0NvbG9yTW9kZWwuSFNMXSA9IGZ1bmN0aW9uIChjb2xvciwgZGVjaW1hbHMpIHtcbiAgICAgICAgdmFyIGhzbCA9IHJnYlRvSFNMKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuICAgICAgICBkZWxldGUgaHNsLmE7XG4gICAgICAgIHJldHVybiByb3VuZEhTTE9iamVjdChoc2wsIGRlY2ltYWxzKTtcbiAgICB9LFxuICAgIF9jLkhTTEEgPSBmdW5jdGlvbiAoY29sb3IsIGRlY2ltYWxzKSB7XG4gICAgICAgIHZhciBoc2wgPSB0cmFuc2xhdGVDb2xvci5IU0woY29sb3IsIGRlY2ltYWxzKTtcbiAgICAgICAgaHNsLmEgPSBoYXNQcm9wKGNvbG9yLCAnYScpXG4gICAgICAgICAgICA/IHJvdW5kKGNvbG9yLmEsIGRlY2ltYWxzKVxuICAgICAgICAgICAgOiAxO1xuICAgICAgICByZXR1cm4gaHNsO1xuICAgIH0sXG4gICAgX2NbQ29sb3JNb2RlbC5DTVlLXSA9IGZ1bmN0aW9uIChjb2xvciwgZGVjaW1hbHMpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kQ01ZS09iamVjdChyZ2JUb0NNWUsoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiksIGRlY2ltYWxzKTtcbiAgICB9LFxuICAgIF9jLkNNWUtBID0gZnVuY3Rpb24gKGNvbG9yLCBkZWNpbWFscykge1xuICAgICAgICB2YXIgY215ayA9IHRyYW5zbGF0ZUNvbG9yLkNNWUsoY29sb3IsIGRlY2ltYWxzKTtcbiAgICAgICAgY215ay5hID0gaGFzUHJvcChjb2xvciwgJ2EnKVxuICAgICAgICAgICAgPyByb3VuZChjb2xvci5hLCBkZWNpbWFscylcbiAgICAgICAgICAgIDogMTtcbiAgICAgICAgcmV0dXJuIGNteWs7XG4gICAgfSxcbiAgICBfYyk7XG5leHBvcnQgdmFyIGJsZW5kID0gZnVuY3Rpb24gKGZyb20sIHRvLCBzdGVwcykge1xuICAgIHZhciBkaXYgPSBzdGVwcyAtIDE7XG4gICAgdmFyIGRpZmZSID0gKHRvLnIgLSBmcm9tLnIpIC8gZGl2O1xuICAgIHZhciBkaWZmRyA9ICh0by5nIC0gZnJvbS5nKSAvIGRpdjtcbiAgICB2YXIgZGlmZkIgPSAodG8uYiAtIGZyb20uYikgLyBkaXY7XG4gICAgdmFyIGZyb21BID0gbm9ybWFsaXplQWxwaGEoZnJvbS5hKTtcbiAgICB2YXIgdG9BID0gbm9ybWFsaXplQWxwaGEodG8uYSk7XG4gICAgdmFyIGRpZmZBID0gKHRvQSAtIGZyb21BKSAvIGRpdjtcbiAgICByZXR1cm4gQXJyYXkoc3RlcHMpLmZpbGwobnVsbCkubWFwKGZ1bmN0aW9uIChfX24sIGkpIHtcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpID09PSBkaXYpIHtcbiAgICAgICAgICAgIHJldHVybiB0bztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcjogcm91bmQoZnJvbS5yICsgZGlmZlIgKiBpKSxcbiAgICAgICAgICAgIGc6IHJvdW5kKGZyb20uZyArIGRpZmZHICogaSksXG4gICAgICAgICAgICBiOiByb3VuZChmcm9tLmIgKyBkaWZmQiAqIGkpLFxuICAgICAgICAgICAgYTogcm91bmQoZnJvbUEgKyBkaWZmQSAqIGkpXG4gICAgICAgIH07XG4gICAgfSk7XG59O1xuZXhwb3J0IHZhciBnZXRDb2xvck1peHR1cmUgPSBmdW5jdGlvbiAoY29sb3IsIHN0ZXBzLCBzaGFkZXMsIG9wdGlvbnMpIHtcbiAgICB2YXIgZGVjaW1hbHMgPSBvcHRpb25zLmRlY2ltYWxzO1xuICAgIHZhciBtb2RlbCA9IGdldENvbG9yTW9kZWwoY29sb3IpO1xuICAgIHZhciBpc0NTUyA9IHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZyc7XG4gICAgdmFyIHJnYiA9IGdldFJHQk9iamVjdChjb2xvciwgbW9kZWwpO1xuICAgIHZhciBoYXNBbHBoYSA9ICgodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJyAmJiBoYXNQcm9wKHJnYiwgJ2EnKSkgfHxcbiAgICAgICAgKHR5cGVvZiBjb2xvciAhPT0gJ3N0cmluZycgJiYgaGFzUHJvcChjb2xvciwgJ2EnKSkpO1xuICAgIHZhciBoc2wgPSByZ2JUb0hTTChyZ2IuciwgcmdiLmcsIHJnYi5iLCByZ2IuYSk7XG4gICAgaWYgKCFoYXNBbHBoYSlcbiAgICAgICAgZGVsZXRlIGhzbC5hO1xuICAgIHZhciBpbmNyZW1lbnQgPSBzaGFkZXNcbiAgICAgICAgPyBoc2wubCAvIChzdGVwcyArIDEpXG4gICAgICAgIDogKDEwMCAtIGhzbC5sKSAvIChzdGVwcyArIDEpO1xuICAgIHZhciBoc2xNYXAgPSBBcnJheShzdGVwcykuZmlsbChudWxsKS5tYXAoZnVuY3Rpb24gKF9fbiwgaSkgeyByZXR1cm4gKF9fYXNzaWduKF9fYXNzaWduKHt9LCBoc2wpLCB7IGw6IGhzbC5sICsgaW5jcmVtZW50ICogKGkgKyAxKSAqICgxIC0gK3NoYWRlcyAqIDIpIH0pKTsgfSk7XG4gICAgc3dpdGNoIChtb2RlbCkge1xuICAgICAgICBjYXNlIENvbG9yTW9kZWwuSEVYOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGhzbE1hcC5tYXAoZnVuY3Rpb24gKGhzbENvbG9yKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJnYkNvbG9yID0gaHNsVG9SR0IoaHNsQ29sb3IuaCwgaHNsQ29sb3IucywgaHNsQ29sb3IubCk7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0FscGhhKVxuICAgICAgICAgICAgICAgICAgICByZ2JDb2xvci5hID0gaHNsQ29sb3IuYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNDU1NcbiAgICAgICAgICAgICAgICAgICAgPyBoYXNBbHBoYVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBDU1MuSEVYKHJvdW5kUkdCT2JqZWN0KF9fYXNzaWduKF9fYXNzaWduKHt9LCByZ2JDb2xvciksIHsgYTogcm91bmQocmdiQ29sb3IuYSAqIDI1NSkgfSksIGRlY2ltYWxzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogQ1NTLkhFWChyb3VuZFJHQk9iamVjdChyZ2JDb2xvciwgZGVjaW1hbHMpKVxuICAgICAgICAgICAgICAgICAgICA6IGhhc0FscGhhXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zbGF0ZUNvbG9yLkhFWEEocmdiQ29sb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRyYW5zbGF0ZUNvbG9yLkhFWChyZ2JDb2xvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBDb2xvck1vZGVsLlJHQjpcbiAgICAgICAgICAgIHJldHVybiBoc2xNYXAubWFwKGZ1bmN0aW9uIChoc2xDb2xvcikge1xuICAgICAgICAgICAgICAgIHZhciByZ2JDb2xvciA9IGhzbFRvUkdCKGhzbENvbG9yLmgsIGhzbENvbG9yLnMsIGhzbENvbG9yLmwpO1xuICAgICAgICAgICAgICAgIGlmIChoYXNBbHBoYSlcbiAgICAgICAgICAgICAgICAgICAgcmdiQ29sb3IuYSA9IGhzbENvbG9yLmE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzQ1NTXG4gICAgICAgICAgICAgICAgICAgID8gQ1NTLlJHQihyb3VuZFJHQk9iamVjdChyZ2JDb2xvciwgZGVjaW1hbHMpLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICA6IGhhc0FscGhhXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zbGF0ZUNvbG9yLlJHQkEocmdiQ29sb3IsIGRlY2ltYWxzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0cmFuc2xhdGVDb2xvci5SR0IocmdiQ29sb3IsIGRlY2ltYWxzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIENvbG9yTW9kZWwuSFNMOlxuICAgICAgICAgICAgcmV0dXJuIGhzbE1hcC5tYXAoZnVuY3Rpb24gKGhzbENvbG9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzQ1NTXG4gICAgICAgICAgICAgICAgICAgID8gQ1NTLkhTTChyb3VuZEhTTE9iamVjdChoc2xDb2xvciwgZGVjaW1hbHMpLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICA6IGhhc0FscGhhXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zbGF0ZUNvbG9yLkhTTEEoX19hc3NpZ24oX19hc3NpZ24oe30sIGhzbFRvUkdCKGhzbENvbG9yLmgsIGhzbENvbG9yLnMsIGhzbENvbG9yLmwpKSwgeyBhOiBoc2xDb2xvci5hIH0pLCBkZWNpbWFscylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuSFNMKGhzbFRvUkdCKGhzbENvbG9yLmgsIGhzbENvbG9yLnMsIGhzbENvbG9yLmwpLCBkZWNpbWFscyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59O1xuZXhwb3J0IHZhciBjb2xvckhhcm1vbnkgPSAoX2QgPSB7XG4gICAgICAgIGJ1aWxkSGFybW9ueTogZnVuY3Rpb24gKGNvbG9yLCBoYXJtb255RnVuY3Rpb24sIG1vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBtb2RlbCA9IGdldENvbG9yTW9kZWwoY29sb3IpO1xuICAgICAgICAgICAgdmFyIHJnYiA9IGdldFJHQk9iamVjdChjb2xvciwgbW9kZWwpO1xuICAgICAgICAgICAgdmFyIGhzbCA9IHJnYlRvSFNMKHJnYi5yLCByZ2IuZywgcmdiLmIsIHJnYi5hKTtcbiAgICAgICAgICAgIHZhciBoYXNBbHBoYSA9ICgodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJyAmJiBoYXNQcm9wKHJnYiwgJ2EnKSkgfHxcbiAgICAgICAgICAgICAgICAodHlwZW9mIGNvbG9yICE9PSAnc3RyaW5nJyAmJiBoYXNQcm9wKGNvbG9yLCAnYScpKSk7XG4gICAgICAgICAgICB2YXIgaXNDU1MgPSB0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnO1xuICAgICAgICAgICAgc3dpdGNoIChtb2RlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgQ29sb3JNb2RlbC5IRVg6XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0FscGhhXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuSEVYQShyb3VuZEhTTE9iamVjdChoc2wsIDApLCBoYXJtb255RnVuY3Rpb24sIG1vZGUsIGlzQ1NTKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLkhFWChyb3VuZEhTTE9iamVjdChoc2wsIDApLCBoYXJtb255RnVuY3Rpb24sIG1vZGUsIGlzQ1NTKTtcbiAgICAgICAgICAgICAgICBjYXNlIENvbG9yTW9kZWwuSFNMOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzQWxwaGFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5IU0xBKGhzbCwgaGFybW9ueUZ1bmN0aW9uLCBtb2RlLCBpc0NTUywgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5IU0woaHNsLCBoYXJtb255RnVuY3Rpb24sIG1vZGUsIGlzQ1NTLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBjYXNlIENvbG9yTW9kZWwuUkdCOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzQWxwaGFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5SR0JBKGhzbCwgaGFybW9ueUZ1bmN0aW9uLCBtb2RlLCBpc0NTUywgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5SR0IoaHNsLCBoYXJtb255RnVuY3Rpb24sIG1vZGUsIGlzQ1NTLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgX2RbQ29sb3JNb2RlbC5IRVhdID0gZnVuY3Rpb24gKGNvbG9yLCBoYXJtb255RnVuY3Rpb24sIG1vZGUsIGNzcykge1xuICAgICAgICB2YXIgYXJyYXkgPSBoYXJtb255RnVuY3Rpb24oY29sb3IsIG1vZGUpO1xuICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5IRVgoaHNsVG9SR0IoYy5oLCBjLnMsIGMubCkpXG4gICAgICAgICAgICA6IHRyYW5zbGF0ZUNvbG9yLkhFWChoc2xUb1JHQihjLmgsIGMucywgYy5sKSkpOyB9KTtcbiAgICB9LFxuICAgIF9kLkhFWEEgPSBmdW5jdGlvbiAoY29sb3IsIGhhcm1vbnlGdW5jdGlvbiwgbW9kZSwgY3NzKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGhhcm1vbnlGdW5jdGlvbihjb2xvciwgbW9kZSk7XG4gICAgICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIChjc3NcbiAgICAgICAgICAgID8gQ1NTLkhFWChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaHNsVG9SR0IoYy5oLCBjLnMsIGMubCkpLCB7IGE6IG5vcm1hbGl6ZUFscGhhKGMuYSkgKiAyNTUgfSkpXG4gICAgICAgICAgICA6IHRyYW5zbGF0ZUNvbG9yLkhFWEEoX19hc3NpZ24oX19hc3NpZ24oe30sIGhzbFRvUkdCKGMuaCwgYy5zLCBjLmwpKSwgeyBhOiBub3JtYWxpemVBbHBoYShjLmEpIH0pKSk7IH0pO1xuICAgIH0sXG4gICAgX2RbQ29sb3JNb2RlbC5SR0JdID0gZnVuY3Rpb24gKGNvbG9yLCBoYXJtb255RnVuY3Rpb24sIG1vZGUsIGNzcywgb3B0aW9ucykge1xuICAgICAgICB2YXIgZGVjaW1hbHMgPSBvcHRpb25zLmRlY2ltYWxzO1xuICAgICAgICB2YXIgYXJyYXkgPSBoYXJtb255RnVuY3Rpb24oY29sb3IsIG1vZGUpO1xuICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5SR0Iocm91bmRSR0JPYmplY3QoaHNsVG9SR0IoYy5oLCBjLnMsIGMubCksIGRlY2ltYWxzKSwgb3B0aW9ucylcbiAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuUkdCKGhzbFRvUkdCKGMuaCwgYy5zLCBjLmwpLCBkZWNpbWFscykpOyB9KTtcbiAgICB9LFxuICAgIF9kLlJHQkEgPSBmdW5jdGlvbiAoY29sb3IsIGhhcm1vbnlGdW5jdGlvbiwgbW9kZSwgY3NzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBkZWNpbWFscyA9IG9wdGlvbnMuZGVjaW1hbHM7XG4gICAgICAgIHZhciBhcnJheSA9IGhhcm1vbnlGdW5jdGlvbihjb2xvciwgbW9kZSk7XG4gICAgICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIChjc3NcbiAgICAgICAgICAgID8gQ1NTLlJHQihyb3VuZFJHQk9iamVjdChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaHNsVG9SR0IoYy5oLCBjLnMsIGMubCkpLCB7IGE6IG5vcm1hbGl6ZUFscGhhKGMuYSkgfSksIGRlY2ltYWxzKSwgb3B0aW9ucylcbiAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuUkdCQShfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaHNsVG9SR0IoYy5oLCBjLnMsIGMubCkpLCB7IGE6IG5vcm1hbGl6ZUFscGhhKGMuYSkgfSksIGRlY2ltYWxzKSk7IH0pO1xuICAgIH0sXG4gICAgX2RbQ29sb3JNb2RlbC5IU0xdID0gZnVuY3Rpb24gKGNvbG9yLCBoYXJtb255RnVuY3Rpb24sIG1vZGUsIGNzcywgb3B0aW9ucykge1xuICAgICAgICB2YXIgZGVjaW1hbHMgPSBvcHRpb25zLmRlY2ltYWxzO1xuICAgICAgICB2YXIgYXJyYXkgPSBoYXJtb255RnVuY3Rpb24oY29sb3IsIG1vZGUpO1xuICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5IU0wocm91bmRIU0xPYmplY3Qoe1xuICAgICAgICAgICAgICAgIGg6IGMuaCxcbiAgICAgICAgICAgICAgICBzOiBjLnMsXG4gICAgICAgICAgICAgICAgbDogYy5sXG4gICAgICAgICAgICB9LCBkZWNpbWFscyksIG9wdGlvbnMpXG4gICAgICAgICAgICA6IHRyYW5zbGF0ZUNvbG9yLkhTTChoc2xUb1JHQihjLmgsIGMucywgYy5sKSwgZGVjaW1hbHMpKTsgfSk7XG4gICAgfSxcbiAgICBfZC5IU0xBID0gZnVuY3Rpb24gKGNvbG9yLCBoYXJtb255RnVuY3Rpb24sIG1vZGUsIGNzcywgb3B0aW9ucykge1xuICAgICAgICB2YXIgZGVjaW1hbHMgPSBvcHRpb25zLmRlY2ltYWxzO1xuICAgICAgICB2YXIgYXJyYXkgPSBoYXJtb255RnVuY3Rpb24oY29sb3IsIG1vZGUpO1xuICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5IU0wocm91bmRIU0xPYmplY3QoX19hc3NpZ24oX19hc3NpZ24oe30sIGMpLCB7IGE6IG5vcm1hbGl6ZUFscGhhKGMuYSkgfSksIGRlY2ltYWxzKSwgb3B0aW9ucylcbiAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuSFNMQShfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaHNsVG9SR0IoYy5oLCBjLnMsIGMubCkpLCB7IGE6IG5vcm1hbGl6ZUFscGhhKGMuYSkgfSksIGRlY2ltYWxzKSk7IH0pO1xuICAgIH0sXG4gICAgX2QpO1xuZXhwb3J0IHZhciBjb2xvck1peGVyID0gKF9lID0ge1xuICAgICAgICBtaXg6IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUpIHtcbiAgICAgICAgICAgIHZhciByZ2JNYXAgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IGdldENvbG9yTW9kZWwoY29sb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRSR0JPYmplY3QoY29sb3IsIG1vZGVsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIHJ5Yk1hcCA9IG1vZGUgPT09IE1peC5TVUJUUkFDVElWRVxuICAgICAgICAgICAgICAgID8gcmdiTWFwLm1hcChmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ5YiA9IHJnYlRvUllCKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb2xvciwgJ2EnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnliLmEgPSBjb2xvci5hO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByeWI7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVNaXgoaXRlbXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5pdGlhbCA9IG1vZGUgPT09IE1peC5BRERJVElWRVxuICAgICAgICAgICAgICAgICAgICA/IHsgcjogMCwgZzogMCwgYjogMCwgYTogMCB9XG4gICAgICAgICAgICAgICAgICAgIDogeyByOiAwLCB5OiAwLCBiOiAwLCBhOiAwIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLnJlZHVjZShmdW5jdGlvbiAobWl4LCBjb2xvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JBID0gaGFzUHJvcChjb2xvciwgJ2EnKSA/IGNvbG9yLmEgOiAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29tbW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcjogTWF0aC5taW4obWl4LnIgKyBjb2xvci5yICogY29sb3JBLCAyNTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYjogTWF0aC5taW4obWl4LmIgKyBjb2xvci5iICogY29sb3JBLCAyNTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYTogMSAtICgxIC0gY29sb3JBKSAqICgxIC0gbWl4LmEpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBtaXhHWSA9ICdnJyBpbiBtaXhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbWl4LmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbWl4Lnk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvckdZID0gJ2cnIGluIGNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbG9yLmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29sb3IueTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb24pLCAobW9kZSA9PT0gTWl4LkFERElUSVZFXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHsgZzogTWF0aC5taW4obWl4R1kgKyBjb2xvckdZICogY29sb3JBLCAyNTUpIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogeyB5OiBNYXRoLm1pbihtaXhHWSArIGNvbG9yR1kgKiBjb2xvckEsIDI1NSkgfSkpO1xuICAgICAgICAgICAgICAgIH0sIGluaXRpYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG1peDtcbiAgICAgICAgICAgIGlmIChtb2RlID09PSBNaXguQURESVRJVkUpIHtcbiAgICAgICAgICAgICAgICBtaXggPSBjcmVhdGVNaXgocmdiTWFwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciByeWIgPSBjcmVhdGVNaXgocnliTWFwKTtcbiAgICAgICAgICAgICAgICBtaXggPSByeWJUb1JHQihyeWIuciwgcnliLnksIHJ5Yi5iKTtcbiAgICAgICAgICAgICAgICBtaXguYSA9IHJ5Yi5hO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByOiByb3VuZChtaXguciksXG4gICAgICAgICAgICAgICAgZzogcm91bmQobWl4LmcpLFxuICAgICAgICAgICAgICAgIGI6IHJvdW5kKG1peC5iKSxcbiAgICAgICAgICAgICAgICBhOiBtaW5tYXgobWl4LmEsIDAsIDEpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSxcbiAgICBfZVtDb2xvck1vZGVsLkhFWF0gPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBjc3MpIHtcbiAgICAgICAgdmFyIG1peCA9IHRoaXMubWl4KGNvbG9ycywgbW9kZSk7XG4gICAgICAgIGRlbGV0ZSBtaXguYTtcbiAgICAgICAgcmV0dXJuIChjc3NcbiAgICAgICAgICAgID8gQ1NTLkhFWChtaXgpXG4gICAgICAgICAgICA6IHRyYW5zbGF0ZUNvbG9yLkhFWChtaXgpKTtcbiAgICB9LFxuICAgIF9lLkhFWEEgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBjc3MpIHtcbiAgICAgICAgdmFyIG1peCA9IHRoaXMubWl4KGNvbG9ycywgbW9kZSk7XG4gICAgICAgIG1peC5hID0gY3NzXG4gICAgICAgICAgICA/IG5vcm1hbGl6ZUFscGhhKG1peC5hKSAqIDI1NVxuICAgICAgICAgICAgOiBub3JtYWxpemVBbHBoYShtaXguYSk7XG4gICAgICAgIHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5IRVgobWl4KVxuICAgICAgICAgICAgOiB0cmFuc2xhdGVDb2xvci5IRVhBKG1peCkpO1xuICAgIH0sXG4gICAgX2VbQ29sb3JNb2RlbC5SR0JdID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgY3NzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBkZWNpbWFscyA9IG9wdGlvbnMuZGVjaW1hbHM7XG4gICAgICAgIHZhciBtaXggPSB0aGlzLm1peChjb2xvcnMsIG1vZGUpO1xuICAgICAgICBkZWxldGUgbWl4LmE7XG4gICAgICAgIHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5SR0IobWl4LCBvcHRpb25zKVxuICAgICAgICAgICAgOiB0cmFuc2xhdGVDb2xvci5SR0IobWl4LCBkZWNpbWFscykpO1xuICAgIH0sXG4gICAgX2UuUkdCQSA9IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUsIGNzcywgb3B0aW9ucykge1xuICAgICAgICB2YXIgZGVjaW1hbHMgPSBvcHRpb25zLmRlY2ltYWxzO1xuICAgICAgICB2YXIgbWl4ID0gdGhpcy5taXgoY29sb3JzLCBtb2RlKTtcbiAgICAgICAgcmV0dXJuIChjc3NcbiAgICAgICAgICAgID8gQ1NTLlJHQihtaXgsIG9wdGlvbnMpXG4gICAgICAgICAgICA6IHRyYW5zbGF0ZUNvbG9yLlJHQkEobWl4LCBkZWNpbWFscykpO1xuICAgIH0sXG4gICAgX2VbQ29sb3JNb2RlbC5IU0xdID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgY3NzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBkZWNpbWFscyA9IG9wdGlvbnMuZGVjaW1hbHM7XG4gICAgICAgIHZhciBtaXggPSB0aGlzLm1peChjb2xvcnMsIG1vZGUpO1xuICAgICAgICB2YXIgaHNsID0gcmdiVG9IU0wobWl4LnIsIG1peC5nLCBtaXguYik7XG4gICAgICAgIGRlbGV0ZSBtaXguYTtcbiAgICAgICAgZGVsZXRlIGhzbC5hO1xuICAgICAgICByZXR1cm4gKGNzc1xuICAgICAgICAgICAgPyBDU1MuSFNMKGhzbCwgb3B0aW9ucylcbiAgICAgICAgICAgIDogdHJhbnNsYXRlQ29sb3IuSFNMKG1peCwgZGVjaW1hbHMpKTtcbiAgICB9LFxuICAgIF9lLkhTTEEgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBjc3MsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGRlY2ltYWxzID0gb3B0aW9ucy5kZWNpbWFscztcbiAgICAgICAgdmFyIG1peCA9IHRoaXMubWl4KGNvbG9ycywgbW9kZSk7XG4gICAgICAgIHZhciBoc2wgPSByZ2JUb0hTTChtaXguciwgbWl4LmcsIG1peC5iLCBtaXguYSk7XG4gICAgICAgIHJldHVybiAoY3NzXG4gICAgICAgICAgICA/IENTUy5IU0woaHNsLCBvcHRpb25zKVxuICAgICAgICAgICAgOiB0cmFuc2xhdGVDb2xvci5IU0xBKG1peCwgZGVjaW1hbHMpKTtcbiAgICB9LFxuICAgIF9lKTtcbmV4cG9ydCB2YXIgcm91bmRSR0JPYmplY3QgPSBmdW5jdGlvbiAoY29sb3IsIGRlY2ltYWxzKSB7XG4gICAgcmV0dXJuIF9fYXNzaWduKHsgcjogcm91bmQoY29sb3IuciwgZGVjaW1hbHMpLCBnOiByb3VuZChjb2xvci5nLCBkZWNpbWFscyksIGI6IHJvdW5kKGNvbG9yLmIsIGRlY2ltYWxzKSB9LCAoaGFzUHJvcChjb2xvciwgJ2EnKVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGE6IHJvdW5kKGNvbG9yLmEsIGRlY2ltYWxzKVxuICAgICAgICB9XG4gICAgICAgIDoge30pKTtcbn07XG5leHBvcnQgdmFyIHJvdW5kSFNMT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9yLCBkZWNpbWFscykge1xuICAgIHJldHVybiBfX2Fzc2lnbih7IGg6IHJvdW5kKGNvbG9yLmgsIGRlY2ltYWxzKSwgczogcm91bmQoY29sb3IucywgZGVjaW1hbHMpLCBsOiByb3VuZChjb2xvci5sLCBkZWNpbWFscykgfSwgKGhhc1Byb3AoY29sb3IsICdhJylcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBhOiByb3VuZChjb2xvci5hLCBkZWNpbWFscylcbiAgICAgICAgfVxuICAgICAgICA6IHt9KSk7XG59O1xuZXhwb3J0IHZhciByb3VuZENNWUtPYmplY3QgPSBmdW5jdGlvbiAoY29sb3IsIGRlY2ltYWxzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYzogcm91bmQoY29sb3IuYywgZGVjaW1hbHMpLFxuICAgICAgICBtOiByb3VuZChjb2xvci5tLCBkZWNpbWFscyksXG4gICAgICAgIHk6IHJvdW5kKGNvbG9yLnksIGRlY2ltYWxzKSxcbiAgICAgICAgazogcm91bmQoY29sb3IuaywgZGVjaW1hbHMpXG4gICAgfTtcbn07XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuaW1wb3J0IHsgSGFybW9ueSwgTWl4LCBERUZBVUxUX0JMRU5EX1NURVBTIH0gZnJvbSAnI2NvbnN0YW50cyc7XG5pbXBvcnQgeyByZ2JUb0hTTCwgaHNsVG9SR0IsIHJnYlRvQ01ZSywgY215a1RvUkdCIH0gZnJvbSAnI2NvbG9yL3RyYW5zbGF0b3JzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJyNjb2xvci91dGlscyc7XG5pbXBvcnQgeyBDU1MgfSBmcm9tICcjY29sb3IvY3NzJztcbmltcG9ydCB7IHJvdW5kLCBtaW5tYXgsIHBhcnNlT3B0aW9ucywgZ2V0T3B0aW9uc0Zyb21Db2xvcklucHV0IH0gZnJvbSAnI2hlbHBlcnMnO1xudmFyIGdldENvbG9yUmV0dXJuID0gZnVuY3Rpb24gKGNvbG9yLCBtb2RlbCwgb3B0aW9ucywgdHJhbnNsYXRlRnVuY3Rpb24pIHtcbiAgICB2YXIgZGVjaW1hbHMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucykuZGVjaW1hbHM7XG4gICAgdmFyIHJnYk9iamVjdCA9IHV0aWxzLmdldFJHQk9iamVjdChjb2xvciwgbW9kZWwpO1xuICAgIHJldHVybiB0cmFuc2xhdGVGdW5jdGlvbihyZ2JPYmplY3QsIGRlY2ltYWxzKTtcbn07XG52YXIgZ2V0QmxlbmRSZXR1cm4gPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zLCB0cmFuc2xhdGVGdW5jdGlvbikge1xuICAgIHZhciBkZWNpbWFscyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zKS5kZWNpbWFscztcbiAgICBpZiAoc3RlcHMgPCAxKVxuICAgICAgICBzdGVwcyA9IERFRkFVTFRfQkxFTkRfU1RFUFM7XG4gICAgdmFyIGZyb21SR0JPYmplY3QgPSB1dGlscy5nZXRSR0JPYmplY3QoZnJvbSk7XG4gICAgdmFyIHRvUkdCT2JqZWN0ID0gdXRpbHMuZ2V0UkdCT2JqZWN0KHRvKTtcbiAgICB2YXIgYmxlbmRBcnJheSA9IHV0aWxzLmJsZW5kKGZyb21SR0JPYmplY3QsIHRvUkdCT2JqZWN0LCBzdGVwcyk7XG4gICAgcmV0dXJuIGJsZW5kQXJyYXkubWFwKGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRlRnVuY3Rpb24oY29sb3IsIGRlY2ltYWxzKTtcbiAgICB9KTtcbn07XG52YXIgZ2V0SGFybW9ueVJldHVybiA9IGZ1bmN0aW9uIChoYXJtb255LCBjb2xvciwgbW9kZSwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0ge30sXG4gICAgICAgIF9hW0hhcm1vbnkuQU5BTE9HT1VTXSA9IHV0aWxzLmNvbG9ySGFybW9ueS5idWlsZEhhcm1vbnkoY29sb3IsIHV0aWxzLmFuYWxvZ291cywgbW9kZSwgb3B0aW9ucyksXG4gICAgICAgIF9hW0hhcm1vbnkuQ09NUExFTUVOVEFSWV0gPSB1dGlscy5jb2xvckhhcm1vbnkuYnVpbGRIYXJtb255KGNvbG9yLCB1dGlscy5jb21wbGVtZW50YXJ5LCBtb2RlLCBvcHRpb25zKSxcbiAgICAgICAgX2FbSGFybW9ueS5TUExJVF9DT01QTEVNRU5UQVJZXSA9IHV0aWxzLmNvbG9ySGFybW9ueS5idWlsZEhhcm1vbnkoY29sb3IsIHV0aWxzLnNwbGl0Q29tcGxlbWVudGFyeSwgbW9kZSwgb3B0aW9ucyksXG4gICAgICAgIF9hW0hhcm1vbnkuVFJJQURJQ10gPSB1dGlscy5jb2xvckhhcm1vbnkuYnVpbGRIYXJtb255KGNvbG9yLCB1dGlscy50cmlhZGljLCBtb2RlLCBvcHRpb25zKSxcbiAgICAgICAgX2FbSGFybW9ueS5URVRSQURJQ10gPSB1dGlscy5jb2xvckhhcm1vbnkuYnVpbGRIYXJtb255KGNvbG9yLCB1dGlscy50ZXRyYWRpYywgbW9kZSwgb3B0aW9ucyksXG4gICAgICAgIF9hW0hhcm1vbnkuU1FVQVJFXSA9IHV0aWxzLmNvbG9ySGFybW9ueS5idWlsZEhhcm1vbnkoY29sb3IsIHV0aWxzLnNxdWFyZSwgbW9kZSwgb3B0aW9ucyksXG4gICAgICAgIF9hKVtoYXJtb255XTtcbn07XG52YXIgQ29sb3JUcmFuc2xhdG9yID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb2xvclRyYW5zbGF0b3IoY29sb3IsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5yZ2IgPSB1dGlscy5nZXRSR0JPYmplY3QoY29sb3IpO1xuICAgICAgICB0aGlzLnVwZGF0ZUhTTCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNNWUsoKTtcbiAgICB9XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS51cGRhdGVSR0IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmdiID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGhzbFRvUkdCKHRoaXMuaHNsLmgsIHRoaXMuaHNsLnMsIHRoaXMuaHNsLmwpKSwgeyBhOiB0aGlzLmhzbC5hIH0pO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS51cGRhdGVSR0JGcm9tQ01ZSyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZ2IgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY215a1RvUkdCKHRoaXMuY215ay5jLCB0aGlzLmNteWsubSwgdGhpcy5jbXlrLnksIHRoaXMuY215ay5rKSksIHsgYTogdGhpcy5yZ2IuYSB9KTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUudXBkYXRlSFNMID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmhzbCA9IHJnYlRvSFNMKHRoaXMucmdiLnIsIHRoaXMucmdiLmcsIHRoaXMucmdiLmIsIHRoaXMucmdiLmEpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS51cGRhdGVDTVlLID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNteWsgPSByZ2JUb0NNWUsodGhpcy5yZ2IuciwgdGhpcy5yZ2IuZywgdGhpcy5yZ2IuYik7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLnVwZGF0ZVJHQkFuZENNWUsgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUkdCKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ01ZSygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUudXBkYXRlSFNMQW5kQ01ZSyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVIU0woKTtcbiAgICAgICAgdGhpcy51cGRhdGVDTVlLKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS51cGRhdGVSR0JBbmRIU0wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUkdCRnJvbUNNWUsoKTtcbiAgICAgICAgdGhpcy51cGRhdGVIU0woKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICB0aGlzLl9vcHRpb25zID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuX29wdGlvbnMpLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLnNldEggPSBmdW5jdGlvbiAoaCkge1xuICAgICAgICB0aGlzLmhzbC5oID0gdXRpbHMubm9ybWFsaXplSHVlKGgpO1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVSR0JBbmRDTVlLKCk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLnNldFMgPSBmdW5jdGlvbiAocykge1xuICAgICAgICB0aGlzLmhzbC5zID0gbWlubWF4KHMsIDAsIDEwMCk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVJHQkFuZENNWUsoKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUuc2V0TCA9IGZ1bmN0aW9uIChsKSB7XG4gICAgICAgIHRoaXMuaHNsLmwgPSBtaW5tYXgobCwgMCwgMTAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlUkdCQW5kQ01ZSygpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRSID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgdGhpcy5yZ2IuciA9IG1pbm1heChyLCAwLCAyNTUpO1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVIU0xBbmRDTVlLKCk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLnNldEcgPSBmdW5jdGlvbiAoZykge1xuICAgICAgICB0aGlzLnJnYi5nID0gbWlubWF4KGcsIDAsIDI1NSk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUhTTEFuZENNWUsoKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUuc2V0QiA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHRoaXMucmdiLmIgPSBtaW5tYXgoYiwgMCwgMjU1KTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlSFNMQW5kQ01ZSygpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRBID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgdGhpcy5oc2wuYSA9IHRoaXMucmdiLmEgPSBtaW5tYXgoYSwgMCwgMSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRDID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgdGhpcy5jbXlrLmMgPSBtaW5tYXgoYywgMCwgMTAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlUkdCQW5kSFNMKCk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLnNldE0gPSBmdW5jdGlvbiAobSkge1xuICAgICAgICB0aGlzLmNteWsubSA9IG1pbm1heChtLCAwLCAxMDApO1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVSR0JBbmRIU0woKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUuc2V0WSA9IGZ1bmN0aW9uICh5KSB7XG4gICAgICAgIHRoaXMuY215ay55ID0gbWlubWF4KHksIDAsIDEwMCk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVJHQkFuZEhTTCgpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRLID0gZnVuY3Rpb24gKGspIHtcbiAgICAgICAgdGhpcy5jbXlrLmsgPSBtaW5tYXgoaywgMCwgMTAwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlUkdCQW5kSFNMKCk7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJvcHRpb25zXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZCh0aGlzLmhzbC5oLCB0aGlzLm9wdGlvbnMuZGVjaW1hbHMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiU1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kKHRoaXMuaHNsLnMsIHRoaXMub3B0aW9ucy5kZWNpbWFscyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJMXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQodGhpcy5oc2wubCwgdGhpcy5vcHRpb25zLmRlY2ltYWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIlJcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZCh0aGlzLnJnYi5yLCB0aGlzLm9wdGlvbnMuZGVjaW1hbHMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiR1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kKHRoaXMucmdiLmcsIHRoaXMub3B0aW9ucy5kZWNpbWFscyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJCXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQodGhpcy5yZ2IuYiwgdGhpcy5vcHRpb25zLmRlY2ltYWxzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkFcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZCh0aGlzLmhzbC5hLCB0aGlzLm9wdGlvbnMuZGVjaW1hbHMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiQ1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kKHRoaXMuY215ay5jLCB0aGlzLm9wdGlvbnMuZGVjaW1hbHMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiTVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kKHRoaXMuY215ay5tLCB0aGlzLm9wdGlvbnMuZGVjaW1hbHMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiWVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kKHRoaXMuY215ay55LCB0aGlzLm9wdGlvbnMuZGVjaW1hbHMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiS1wiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kKHRoaXMuY215ay5rLCB0aGlzLm9wdGlvbnMuZGVjaW1hbHMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiSEVYT2JqZWN0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMudHJhbnNsYXRlQ29sb3IuSEVYKHRoaXMucmdiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkhFWEFPYmplY3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy50cmFuc2xhdGVDb2xvci5IRVhBKHRoaXMucmdiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIlJHQk9iamVjdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByOiB0aGlzLlIsXG4gICAgICAgICAgICAgICAgZzogdGhpcy5HLFxuICAgICAgICAgICAgICAgIGI6IHRoaXMuQlxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIlJHQkFPYmplY3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5SR0JPYmplY3QpLCB7IGE6IHRoaXMuQSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkhTTE9iamVjdFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoOiB0aGlzLkgsXG4gICAgICAgICAgICAgICAgczogdGhpcy5TLFxuICAgICAgICAgICAgICAgIGw6IHRoaXMuTFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkhTTEFPYmplY3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5IU0xPYmplY3QpLCB7IGE6IHRoaXMuQSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkNNWUtPYmplY3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYzogdGhpcy5DLFxuICAgICAgICAgICAgICAgIG06IHRoaXMuTSxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLlksXG4gICAgICAgICAgICAgICAgazogdGhpcy5LXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiQ01ZS0FPYmplY3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGhpcy5DTVlLT2JqZWN0KSwgeyBhOiB0aGlzLkEgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJIRVhcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBDU1MuSEVYKHtcbiAgICAgICAgICAgICAgICByOiB0aGlzLlIsXG4gICAgICAgICAgICAgICAgZzogdGhpcy5HLFxuICAgICAgICAgICAgICAgIGI6IHRoaXMuQlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29sb3JUcmFuc2xhdG9yLnByb3RvdHlwZSwgXCJIRVhBXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gQ1NTLkhFWCh7XG4gICAgICAgICAgICAgICAgcjogdGhpcy5SLFxuICAgICAgICAgICAgICAgIGc6IHRoaXMuRyxcbiAgICAgICAgICAgICAgICBiOiB0aGlzLkIsXG4gICAgICAgICAgICAgICAgYTogdGhpcy5BICogMjU1XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIlJHQlwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIENTUy5SR0Ioe1xuICAgICAgICAgICAgICAgIHI6IHRoaXMuUixcbiAgICAgICAgICAgICAgICBnOiB0aGlzLkcsXG4gICAgICAgICAgICAgICAgYjogdGhpcy5CXG4gICAgICAgICAgICB9LCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiUkdCQVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIENTUy5SR0Ioe1xuICAgICAgICAgICAgICAgIHI6IHRoaXMuUixcbiAgICAgICAgICAgICAgICBnOiB0aGlzLkcsXG4gICAgICAgICAgICAgICAgYjogdGhpcy5CLFxuICAgICAgICAgICAgICAgIGE6IHRoaXMuQVxuICAgICAgICAgICAgfSwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkhTTFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIENTUy5IU0woe1xuICAgICAgICAgICAgICAgIGg6IHRoaXMuSCxcbiAgICAgICAgICAgICAgICBzOiB0aGlzLlMsXG4gICAgICAgICAgICAgICAgbDogdGhpcy5MXG4gICAgICAgICAgICB9LCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiSFNMQVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIENTUy5IU0woe1xuICAgICAgICAgICAgICAgIGg6IHRoaXMuSCxcbiAgICAgICAgICAgICAgICBzOiB0aGlzLlMsXG4gICAgICAgICAgICAgICAgbDogdGhpcy5MLFxuICAgICAgICAgICAgICAgIGE6IHRoaXMuQVxuICAgICAgICAgICAgfSwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb2xvclRyYW5zbGF0b3IucHJvdG90eXBlLCBcIkNNWUtcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBDU1MuQ01ZSyh7XG4gICAgICAgICAgICAgICAgYzogdGhpcy5DLFxuICAgICAgICAgICAgICAgIG06IHRoaXMuTSxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLlksXG4gICAgICAgICAgICAgICAgazogdGhpcy5LXG4gICAgICAgICAgICB9LCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbG9yVHJhbnNsYXRvci5wcm90b3R5cGUsIFwiQ01ZS0FcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBDU1MuQ01ZSyh7XG4gICAgICAgICAgICAgICAgYzogdGhpcy5DLFxuICAgICAgICAgICAgICAgIG06IHRoaXMuTSxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLlksXG4gICAgICAgICAgICAgICAgazogdGhpcy5LLFxuICAgICAgICAgICAgICAgIGE6IHRoaXMuQVxuICAgICAgICAgICAgfSwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIENvbG9yVHJhbnNsYXRvci50b0hFWE9iamVjdCA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICB2YXIgbW9kZWwgPSB1dGlscy5nZXRDb2xvck1vZGVsKGNvbG9yKTtcbiAgICAgICAgcmV0dXJuIGdldENvbG9yUmV0dXJuKGNvbG9yLCBtb2RlbCwgeyBkZWNpbWFsczogMCB9LCB1dGlscy50cmFuc2xhdGVDb2xvci5IRVgpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnRvSEVYID0gZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgIHJldHVybiBDU1MuSEVYKENvbG9yVHJhbnNsYXRvci50b0hFWE9iamVjdChjb2xvcikpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnRvSEVYQU9iamVjdCA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICB2YXIgbW9kZWwgPSB1dGlscy5nZXRDb2xvck1vZGVsKGNvbG9yKTtcbiAgICAgICAgcmV0dXJuIGdldENvbG9yUmV0dXJuKGNvbG9yLCBtb2RlbCwgeyBkZWNpbWFsczogMCB9LCB1dGlscy50cmFuc2xhdGVDb2xvci5IRVhBKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b0hFWEEgPSBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgcmV0dXJuIENTUy5IRVgoQ29sb3JUcmFuc2xhdG9yLnRvSEVYQU9iamVjdChjb2xvcikpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnRvUkdCT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9yLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHZhciBtb2RlbCA9IHV0aWxzLmdldENvbG9yTW9kZWwoY29sb3IpO1xuICAgICAgICByZXR1cm4gZ2V0Q29sb3JSZXR1cm4oY29sb3IsIG1vZGVsLCBvcHRpb25zLCB1dGlscy50cmFuc2xhdGVDb2xvci5SR0IpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnRvUkdCID0gZnVuY3Rpb24gKGNvbG9yLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBDU1MuUkdCKENvbG9yVHJhbnNsYXRvci50b1JHQk9iamVjdChjb2xvciwgb3B0aW9ucyksIGdldE9wdGlvbnNGcm9tQ29sb3JJbnB1dChvcHRpb25zLCBjb2xvcikpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnRvUkdCQU9iamVjdCA9IGZ1bmN0aW9uIChjb2xvciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICB2YXIgbW9kZWwgPSB1dGlscy5nZXRDb2xvck1vZGVsKGNvbG9yKTtcbiAgICAgICAgcmV0dXJuIGdldENvbG9yUmV0dXJuKGNvbG9yLCBtb2RlbCwgb3B0aW9ucywgdXRpbHMudHJhbnNsYXRlQ29sb3IuUkdCQSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IudG9SR0JBID0gZnVuY3Rpb24gKGNvbG9yLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBDU1MuUkdCKENvbG9yVHJhbnNsYXRvci50b1JHQkFPYmplY3QoY29sb3IsIG9wdGlvbnMpLCBnZXRPcHRpb25zRnJvbUNvbG9ySW5wdXQob3B0aW9ucywgY29sb3IpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b0hTTE9iamVjdCA9IGZ1bmN0aW9uIChjb2xvciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICB2YXIgbW9kZWwgPSB1dGlscy5nZXRDb2xvck1vZGVsKGNvbG9yKTtcbiAgICAgICAgcmV0dXJuIGdldENvbG9yUmV0dXJuKGNvbG9yLCBtb2RlbCwgb3B0aW9ucywgdXRpbHMudHJhbnNsYXRlQ29sb3IuSFNMKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b0hTTCA9IGZ1bmN0aW9uIChjb2xvciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gQ1NTLkhTTChDb2xvclRyYW5zbGF0b3IudG9IU0xPYmplY3QoY29sb3IsIG9wdGlvbnMpLCBnZXRPcHRpb25zRnJvbUNvbG9ySW5wdXQob3B0aW9ucywgY29sb3IpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b0hTTEFPYmplY3QgPSBmdW5jdGlvbiAoY29sb3IsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgdmFyIG1vZGVsID0gdXRpbHMuZ2V0Q29sb3JNb2RlbChjb2xvcik7XG4gICAgICAgIHJldHVybiBnZXRDb2xvclJldHVybihjb2xvciwgbW9kZWwsIG9wdGlvbnMsIHV0aWxzLnRyYW5zbGF0ZUNvbG9yLkhTTEEpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLnRvSFNMQSA9IGZ1bmN0aW9uIChjb2xvciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gQ1NTLkhTTChDb2xvclRyYW5zbGF0b3IudG9IU0xBT2JqZWN0KGNvbG9yLCBvcHRpb25zKSwgZ2V0T3B0aW9uc0Zyb21Db2xvcklucHV0KG9wdGlvbnMsIGNvbG9yKSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IudG9DTVlLT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9yLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHZhciBtb2RlbCA9IHV0aWxzLmdldENvbG9yTW9kZWwoY29sb3IpO1xuICAgICAgICByZXR1cm4gZ2V0Q29sb3JSZXR1cm4oY29sb3IsIG1vZGVsLCBvcHRpb25zLCB1dGlscy50cmFuc2xhdGVDb2xvci5DTVlLKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b0NNWUsgPSBmdW5jdGlvbiAoY29sb3IsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIENTUy5DTVlLKENvbG9yVHJhbnNsYXRvci50b0NNWUtPYmplY3QoY29sb3IsIG9wdGlvbnMpLCBnZXRPcHRpb25zRnJvbUNvbG9ySW5wdXQob3B0aW9ucywgY29sb3IpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci50b0NNWUtBT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9yLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHZhciBtb2RlbCA9IHV0aWxzLmdldENvbG9yTW9kZWwoY29sb3IpO1xuICAgICAgICByZXR1cm4gZ2V0Q29sb3JSZXR1cm4oY29sb3IsIG1vZGVsLCBvcHRpb25zLCB1dGlscy50cmFuc2xhdGVDb2xvci5DTVlLQSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IudG9DTVlLQSA9IGZ1bmN0aW9uIChjb2xvciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gQ1NTLkNNWUsoQ29sb3JUcmFuc2xhdG9yLnRvQ01ZS0FPYmplY3QoY29sb3IsIG9wdGlvbnMpLCBnZXRPcHRpb25zRnJvbUNvbG9ySW5wdXQob3B0aW9ucywgY29sb3IpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZEhFWE9iamVjdCA9IGZ1bmN0aW9uIChmcm9tLCB0bywgc3RlcHMpIHtcbiAgICAgICAgaWYgKHN0ZXBzID09PSB2b2lkIDApIHsgc3RlcHMgPSBERUZBVUxUX0JMRU5EX1NURVBTOyB9XG4gICAgICAgIHJldHVybiBnZXRCbGVuZFJldHVybihmcm9tLCB0bywgc3RlcHMsIHsgZGVjaW1hbHM6IDAgfSwgdXRpbHMudHJhbnNsYXRlQ29sb3IuSEVYKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZEhFWCA9IGZ1bmN0aW9uIChmcm9tLCB0bywgc3RlcHMpIHtcbiAgICAgICAgaWYgKHN0ZXBzID09PSB2b2lkIDApIHsgc3RlcHMgPSBERUZBVUxUX0JMRU5EX1NURVBTOyB9XG4gICAgICAgIHJldHVybiBDb2xvclRyYW5zbGF0b3IuZ2V0QmxlbmRIRVhPYmplY3QoZnJvbSwgdG8sIHN0ZXBzKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJuIENTUy5IRVgoY29sb3IpOyB9KTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZEhFWEFPYmplY3QgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICByZXR1cm4gZ2V0QmxlbmRSZXR1cm4oZnJvbSwgdG8sIHN0ZXBzLCB7IGRlY2ltYWxzOiAwIH0sIHV0aWxzLnRyYW5zbGF0ZUNvbG9yLkhFWEEpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kSEVYQSA9IGZ1bmN0aW9uIChmcm9tLCB0bywgc3RlcHMpIHtcbiAgICAgICAgaWYgKHN0ZXBzID09PSB2b2lkIDApIHsgc3RlcHMgPSBERUZBVUxUX0JMRU5EX1NURVBTOyB9XG4gICAgICAgIHJldHVybiBDb2xvclRyYW5zbGF0b3IuZ2V0QmxlbmRIRVhBT2JqZWN0KGZyb20sIHRvLCBzdGVwcylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7IHJldHVybiBDU1MuSEVYKGNvbG9yKTsgfSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IuZ2V0QmxlbmRSR0JPYmplY3QgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gZ2V0QmxlbmRSZXR1cm4oZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zLCB1dGlscy50cmFuc2xhdGVDb2xvci5SR0IpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kUkdCID0gZnVuY3Rpb24gKGZyb20sIHRvLCBzdGVwcywgb3B0aW9ucykge1xuICAgICAgICBpZiAoc3RlcHMgPT09IHZvaWQgMCkgeyBzdGVwcyA9IERFRkFVTFRfQkxFTkRfU1RFUFM7IH1cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZFJHQk9iamVjdChmcm9tLCB0bywgc3RlcHMsIG9wdGlvbnMpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuIENTUy5SR0IoY29sb3IsIGdldE9wdGlvbnNGcm9tQ29sb3JJbnB1dChvcHRpb25zLCBmcm9tLCB0bykpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZFJHQkFPYmplY3QgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gZ2V0QmxlbmRSZXR1cm4oZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zLCB1dGlscy50cmFuc2xhdGVDb2xvci5SR0JBKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZFJHQkEgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kUkdCQU9iamVjdChmcm9tLCB0bywgc3RlcHMsIG9wdGlvbnMpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChjb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuIENTUy5SR0IoY29sb3IsIGdldE9wdGlvbnNGcm9tQ29sb3JJbnB1dChvcHRpb25zLCBmcm9tLCB0bykpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRCbGVuZEhTTE9iamVjdCA9IGZ1bmN0aW9uIChmcm9tLCB0bywgc3RlcHMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHN0ZXBzID09PSB2b2lkIDApIHsgc3RlcHMgPSBERUZBVUxUX0JMRU5EX1NURVBTOyB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBnZXRCbGVuZFJldHVybihmcm9tLCB0bywgc3RlcHMsIG9wdGlvbnMsIHV0aWxzLnRyYW5zbGF0ZUNvbG9yLkhTTCk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IuZ2V0QmxlbmRIU0wgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHN0ZXBzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChzdGVwcyA9PT0gdm9pZCAwKSB7IHN0ZXBzID0gREVGQVVMVF9CTEVORF9TVEVQUzsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kSFNMT2JqZWN0KGZyb20sIHRvLCBzdGVwcywgb3B0aW9ucylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gQ1NTLkhTTChjb2xvciwgZ2V0T3B0aW9uc0Zyb21Db2xvcklucHV0KG9wdGlvbnMsIGZyb20sIHRvKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kSFNMQU9iamVjdCA9IGZ1bmN0aW9uIChmcm9tLCB0bywgc3RlcHMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHN0ZXBzID09PSB2b2lkIDApIHsgc3RlcHMgPSBERUZBVUxUX0JMRU5EX1NURVBTOyB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBnZXRCbGVuZFJldHVybihmcm9tLCB0bywgc3RlcHMsIG9wdGlvbnMsIHV0aWxzLnRyYW5zbGF0ZUNvbG9yLkhTTEEpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kSFNMQSA9IGZ1bmN0aW9uIChmcm9tLCB0bywgc3RlcHMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHN0ZXBzID09PSB2b2lkIDApIHsgc3RlcHMgPSBERUZBVUxUX0JMRU5EX1NURVBTOyB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiBDb2xvclRyYW5zbGF0b3IuZ2V0QmxlbmRIU0xBT2JqZWN0KGZyb20sIHRvLCBzdGVwcywgb3B0aW9ucylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gQ1NTLkhTTChjb2xvciwgZ2V0T3B0aW9uc0Zyb21Db2xvcklucHV0KG9wdGlvbnMsIGZyb20sIHRvKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldE1peEhFWE9iamVjdCA9IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUpIHtcbiAgICAgICAgaWYgKG1vZGUgPT09IHZvaWQgMCkgeyBtb2RlID0gTWl4LkFERElUSVZFOyB9XG4gICAgICAgIHJldHVybiB1dGlscy5jb2xvck1peGVyLkhFWChjb2xvcnMsIG1vZGUsIGZhbHNlKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIRVggPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlKSB7XG4gICAgICAgIGlmIChtb2RlID09PSB2b2lkIDApIHsgbW9kZSA9IE1peC5BRERJVElWRTsgfVxuICAgICAgICByZXR1cm4gdXRpbHMuY29sb3JNaXhlci5IRVgoY29sb3JzLCBtb2RlLCB0cnVlKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIRVhBT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSkge1xuICAgICAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSB7IG1vZGUgPSBNaXguQURESVRJVkU7IH1cbiAgICAgICAgcmV0dXJuIHV0aWxzLmNvbG9yTWl4ZXIuSEVYQShjb2xvcnMsIG1vZGUsIGZhbHNlKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIRVhBID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSkge1xuICAgICAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSB7IG1vZGUgPSBNaXguQURESVRJVkU7IH1cbiAgICAgICAgcmV0dXJuIHV0aWxzLmNvbG9yTWl4ZXIuSEVYQShjb2xvcnMsIG1vZGUsIHRydWUpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldE1peFJHQk9iamVjdCA9IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG1vZGUgPT09IHZvaWQgMCkgeyBtb2RlID0gTWl4LkFERElUSVZFOyB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiB1dGlscy5jb2xvck1peGVyLlJHQihjb2xvcnMsIG1vZGUsIGZhbHNlLCBwYXJzZU9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldE1peFJHQiA9IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG1vZGUgPT09IHZvaWQgMCkgeyBtb2RlID0gTWl4LkFERElUSVZFOyB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiB1dGlscy5jb2xvck1peGVyLlJHQihjb2xvcnMsIG1vZGUsIHRydWUsIGdldE9wdGlvbnNGcm9tQ29sb3JJbnB1dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW29wdGlvbnNdLCBjb2xvcnMsIGZhbHNlKSkpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldE1peFJHQkFPYmplY3QgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChtb2RlID09PSB2b2lkIDApIHsgbW9kZSA9IE1peC5BRERJVElWRTsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gdXRpbHMuY29sb3JNaXhlci5SR0JBKGNvbG9ycywgbW9kZSwgZmFsc2UsIHBhcnNlT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IuZ2V0TWl4UkdCQSA9IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG1vZGUgPT09IHZvaWQgMCkgeyBtb2RlID0gTWl4LkFERElUSVZFOyB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgICAgIHJldHVybiB1dGlscy5jb2xvck1peGVyLlJHQkEoY29sb3JzLCBtb2RlLCB0cnVlLCBnZXRPcHRpb25zRnJvbUNvbG9ySW5wdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtvcHRpb25zXSwgY29sb3JzLCBmYWxzZSkpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIU0xPYmplY3QgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChtb2RlID09PSB2b2lkIDApIHsgbW9kZSA9IE1peC5BRERJVElWRTsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gdXRpbHMuY29sb3JNaXhlci5IU0woY29sb3JzLCBtb2RlLCBmYWxzZSwgcGFyc2VPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIU0wgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChtb2RlID09PSB2b2lkIDApIHsgbW9kZSA9IE1peC5BRERJVElWRTsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gdXRpbHMuY29sb3JNaXhlci5IU0woY29sb3JzLCBtb2RlLCB0cnVlLCBnZXRPcHRpb25zRnJvbUNvbG9ySW5wdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtvcHRpb25zXSwgY29sb3JzLCBmYWxzZSkpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRNaXhIU0xBT2JqZWN0ID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSB7IG1vZGUgPSBNaXguQURESVRJVkU7IH1cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIHV0aWxzLmNvbG9yTWl4ZXIuSFNMQShjb2xvcnMsIG1vZGUsIGZhbHNlLCBwYXJzZU9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG4gICAgQ29sb3JUcmFuc2xhdG9yLmdldE1peEhTTEEgPSBmdW5jdGlvbiAoY29sb3JzLCBtb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChtb2RlID09PSB2b2lkIDApIHsgbW9kZSA9IE1peC5BRERJVElWRTsgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICByZXR1cm4gdXRpbHMuY29sb3JNaXhlci5IU0xBKGNvbG9ycywgbW9kZSwgdHJ1ZSwgZ2V0T3B0aW9uc0Zyb21Db2xvcklucHV0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbb3B0aW9uc10sIGNvbG9ycywgZmFsc2UpKSk7XG4gICAgfTtcbiAgICBDb2xvclRyYW5zbGF0b3IuZ2V0U2hhZGVzID0gZnVuY3Rpb24gKGNvbG9yLCBzaGFkZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIHV0aWxzLmdldENvbG9yTWl4dHVyZShjb2xvciwgc2hhZGVzLCB0cnVlLCBnZXRPcHRpb25zRnJvbUNvbG9ySW5wdXQob3B0aW9ucywgY29sb3IpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRUaW50cyA9IGZ1bmN0aW9uIChjb2xvciwgdGludHMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIHV0aWxzLmdldENvbG9yTWl4dHVyZShjb2xvciwgdGludHMsIGZhbHNlLCBnZXRPcHRpb25zRnJvbUNvbG9ySW5wdXQob3B0aW9ucywgY29sb3IpKTtcbiAgICB9O1xuICAgIENvbG9yVHJhbnNsYXRvci5nZXRIYXJtb255ID0gZnVuY3Rpb24gKGNvbG9yLCBoYXJtb255LCBtb2RlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChoYXJtb255ID09PSB2b2lkIDApIHsgaGFybW9ueSA9IEhhcm1vbnkuQ09NUExFTUVOVEFSWTsgfVxuICAgICAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSB7IG1vZGUgPSBNaXguQURESVRJVkU7IH1cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICAgICAgcmV0dXJuIGdldEhhcm1vbnlSZXR1cm4oaGFybW9ueSwgY29sb3IsIG1vZGUsIGdldE9wdGlvbnNGcm9tQ29sb3JJbnB1dChvcHRpb25zLCBjb2xvcikpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbG9yVHJhbnNsYXRvcjtcbn0oKSk7XG5leHBvcnQgeyBDb2xvclRyYW5zbGF0b3IgfTtcbmV4cG9ydCB7IEhhcm1vbnksIE1peCB9O1xuIiwiaW1wb3J0ICcuL3N0eWxlcy5zY3NzJztcblxuZXhwb3J0IGRlZmF1bHQgKENvbG9yVHJhbnNsYXRvcikgPT4ge1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgY29sb3IgPSBuZXcgQ29sb3JUcmFuc2xhdG9yKCdoc2woMTgwLDEwMCUsNTAlKScsIHsgZGVjaW1hbHM6IDAgfSk7XG5cbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCAxMDsgcm93KyspIHtcblxuICAgICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCAxMDsgY29sKyspIHtcblxuICAgICAgICAgICAgY29sb3JcbiAgICAgICAgICAgICAgICAuc2V0Uyhyb3cgKiAxMClcbiAgICAgICAgICAgICAgICAuc2V0TChjb2wgKiA1ICsgMzApO1xuXG4gICAgICAgICAgICBjb25zdCBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgICAgICAgYm94LmNsYXNzTGlzdC5hZGQoJ2JveCcpO1xuICAgICAgICAgICAgYm94LnN0eWxlLmJhY2tncm91bmQgPSBjb2xvci5IRVg7XG5cbiAgICAgICAgICAgIGJveC5pbm5lclRleHQgPVxuICAgICAgICAgICAgICAgIGBSOiR7Y29sb3IuUn1cbiAgICAgICAgICAgICAgICAgRzoke2NvbG9yLkd9XG4gICAgICAgICAgICAgICAgIEI6JHtjb2xvci5CfWA7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYm94KTtcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcblxufTsiLCJpbXBvcnQgJy4vc3R5bGVzLnNjc3MnO1xuXG5leHBvcnQgZGVmYXVsdCAoQ29sb3JUcmFuc2xhdG9yKSA9PiB7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBjb2xvciA9IG5ldyBDb2xvclRyYW5zbGF0b3IoeyByOiAyNTUsIGc6IDAsIGI6IDAgfSk7XG4gICAgY29uc3QgaHVlID0gWzAsIDMwLCA2MCwgMTIwLCAyNDAsIDI4MCwgMzIwLCAwXTtcbiAgICBsZXQgcmFpbmJvdztcblxuICAgIGZvciAobGV0IHIgPSAwOyByIDwgaHVlLmxlbmd0aDsgcisrKSB7XG5cbiAgICAgICAgY29sb3Iuc2V0SChodWVbcl0pO1xuXG4gICAgICAgIGNvbnN0IGJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICAgIGJvdy5jbGFzc0xpc3QuYWRkKCdyYWluYm93Jyk7XG4gICAgICAgIGJvdy5zdHlsZS5iYWNrZ3JvdW5kID0gY29sb3IuSEVYO1xuXG4gICAgICAgIGlmIChyYWluYm93KSB7XG4gICAgICAgICAgICByYWluYm93LmFwcGVuZENoaWxkKGJvdyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJhaW5ib3cgPSBib3c7XG4gICAgfVxuXG4gICAgcmFpbmJvdy5zdHlsZS5iYWNrZ3JvdW5kID0gJyMzMzMnO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcblxufTsiLCJpbXBvcnQgJy4vc3R5bGVzLnNjc3MnO1xuXG5leHBvcnQgZGVmYXVsdCAoQ29sb3JUcmFuc2xhdG9yKSA9PiB7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBoc2wgPSB7IGg6IDAsIHM6ICc5MCUnLCBsOiAnNTAlJyB9O1xuICAgIGNvbnN0IGh1ZSA9IFt1bmRlZmluZWQsIDU1LCAzMCwgMCwgMjkwLCAyMjAsIDEzMF07XG4gICAgY29uc3QgdG90YWwgPSBodWUubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdG90YWw7IHJvdysrKSB7XG5cbiAgICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgdG90YWw7IGNvbCsrKSB7XG5cbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRvdGFsIC0gcm93ICsgY29sO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggLT0gdG90YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoc2wuaCA9IGh1ZVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCByZ2IgPSBodWVbaW5kZXhdID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/ICcjRkZGJ1xuICAgICAgICAgICAgICAgIDogQ29sb3JUcmFuc2xhdG9yLnRvSEVYKGhzbCk7XG4gICAgICAgICAgICBjb25zdCBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgICAgICAgYm94LmNsYXNzTGlzdC5hZGQoJ2ZsYWcnKTtcbiAgICAgICAgICAgIGJveC5zdHlsZS5iYWNrZ3JvdW5kID0gcmdiO1xuXG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYm94KTtcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcblxufTsiLCJpbXBvcnQgJy4vc3R5bGVzLnNjc3MnO1xuXG5leHBvcnQgZGVmYXVsdCAoQ29sb3JUcmFuc2xhdG9yKSA9PiB7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBjb2xvcnMgPSBbXG4gICAgICAgICdyZWQnLFxuICAgICAgICAnbGltZScsXG4gICAgICAgICdibHVlJyxcbiAgICAgICAgJ2FxdWEnLFxuICAgICAgICAneWVsbG93JyxcbiAgICAgICAgJ2Z1Y2hzaWEnXG4gICAgXTtcbiAgICBjb25zdCB0b3RhbCA9IGNvbG9ycy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0b3RhbDsgcm93KyspIHtcblxuICAgICAgICBjb25zdCBoc2wgPSBDb2xvclRyYW5zbGF0b3IudG9IU0xPYmplY3QoY29sb3JzW3Jvd10sIHsgZGVjaW1hbHM6IDAgfSk7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBoc2wucyAvICh0b3RhbCAtIDEpO1xuXG4gICAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IHRvdGFsOyBjb2wrKykge1xuXG4gICAgICAgICAgICBjb25zdCByZ2IgPSBDb2xvclRyYW5zbGF0b3IudG9IRVgoaHNsLCB7IGRlY2ltYWxzOiAwIH0pO1xuICAgICAgICAgICAgY29uc3QgY215ayA9IENvbG9yVHJhbnNsYXRvci50b0NNWUtPYmplY3QoaHNsLCB7IGRlY2ltYWxzOiAwIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGJveC5jbGFzc0xpc3QuYWRkKCdib3gnKTtcbiAgICAgICAgICAgIGJveC5zdHlsZS5iYWNrZ3JvdW5kID0gcmdiO1xuICAgICAgICAgICAgYm94LmlubmVyVGV4dCA9IGBDOiR7Y215ay5jfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNOiR7Y215ay5tfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZOiR7Y215ay55fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLOiR7Y215ay5rfWA7XG5cbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChib3gpO1xuXG4gICAgICAgICAgICBoc2wucyAtPSBzdGVwO1xuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udGFpbmVyO1xuXG59OyIsImltcG9ydCAnLi9zdHlsZXMuc2Nzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChDb2xvclRyYW5zbGF0b3IpID0+IHtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IHJvd3MgPSAxMTtcbiAgICBjb25zdCBtdWx0ID0gMztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG5cbiAgICAgICAgY29uc3QgYmxlbmRzID0gQ29sb3JUcmFuc2xhdG9yLmdldEJsZW5kSEVYKCcjRkYwMDAwJywgJyNGRkZGMDAnLCBtdWx0ICsgaSAqIG11bHQpO1xuXG4gICAgICAgIGJsZW5kcy5mb3JFYWNoKChibGVuZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgYm94LmNsYXNzTGlzdC5hZGQoJ2JveCcsIGBmaWxlJHtpfWApO1xuICAgICAgICAgICAgYm94LnN0eWxlLmJhY2tncm91bmQgPSBibGVuZDtcbiAgICAgICAgICAgIGJveC5pbm5lclRleHQgPSBpbmRleCArIDE7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYm94KTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICByZXR1cm4gY29udGFpbmVyO1xuXG59OyIsImltcG9ydCAnLi9zdHlsZXMuc2Nzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChDb2xvclRyYW5zbGF0b3IpID0+IHtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgY29uc3QgY29sb3JzID0gWycjRjAwJywgJyNGRjgwMDAnLCAnI0ZGMCcsICcjMEYwJywgJyMwMEYnLCAnI0FBMDBGRicsICcjRkYwMEFBJ107XG5cbiAgICBjb25zdCBjcmVhdGVCb3ggPSAoY29sb3IsIHR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGJveC5jbGFzc0xpc3QuYWRkKCdib3gnKTtcbiAgICAgICAgYm94LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuICAgICAgICBpZiAodHlwZSkgYm94LmRhdGFzZXQudHlwZSA9IHR5cGU7XG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChib3gpO1xuICAgIH07XG5cbiAgICBjb2xvcnMuZm9yRWFjaCgoY29sb3IpID0+IHtcbiAgICAgICAgY29uc3Qgc2hhZGVzID0gQ29sb3JUcmFuc2xhdG9yLmdldFNoYWRlcyhjb2xvciwgMykucmV2ZXJzZSgpO1xuICAgICAgICBjb25zdCB0aW50cyA9IENvbG9yVHJhbnNsYXRvci5nZXRUaW50cyhjb2xvciwgMyk7XG4gICAgICAgIHNoYWRlcy5mb3JFYWNoKChzaGFkZSkgPT4gY3JlYXRlQm94KHNoYWRlLCAnc2hhZGUnKSk7XG4gICAgICAgIGNyZWF0ZUJveChjb2xvcik7XG4gICAgICAgIHRpbnRzLmZvckVhY2goKHRpbnQpID0+IGNyZWF0ZUJveCh0aW50LCAndGludCcpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb250YWluZXI7XG5cbn07IiwiaW1wb3J0ICcuL3N0eWxlcy5zY3NzJztcblxuXG5leHBvcnQgZGVmYXVsdCAoQ29sb3JUcmFuc2xhdG9yKSA9PiB7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgIGNvbnN0IG1peGVzID0gW1xuICAgICAgICAnI0ZGMDAwMCcsXG4gICAgICAgICcjMDBGRjAwJyxcbiAgICAgICAgJyMwMDAwRkYnLFxuICAgICAgICBbMSwgM10sXG4gICAgICAgIFsxLCAyXSxcbiAgICAgICAgWzIsIDNdLFxuICAgICAgICBbMSwgMiwgM11cbiAgICBdO1xuXG4gICAgY29uc3QgZmlsbFBsYW5lcyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcGxhbmVzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJyNwbGFuZXMgcGF0aCcpO1xuICAgICAgICBwbGFuZXMuZm9yRWFjaCgocGxhbmUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBsZXQgY29sb3IgPSAnI0NDQ0NDQyc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1peGVzW2luZGV4XSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjb2xvciA9IG1peGVzW2luZGV4XTtcbiAgICAgICAgICAgIH0gZWxzZSBpZihtaXhlc1tpbmRleF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xvcnMgPSBtaXhlc1tpbmRleF0ubWFwKChpKSA9PiBtaXhlc1tpIC0gMV0pO1xuICAgICAgICAgICAgICAgIGNvbG9yID0gbWl4ZXNbaW5kZXhdID0gQ29sb3JUcmFuc2xhdG9yLmdldE1peEhFWChjb2xvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGxhbmUuc2V0QXR0cmlidXRlKCdmaWxsJywgY29sb3IpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZmV0Y2goJ2ltYWdlcy9jb2xvci1taXhlcy5zdmcnKVxuICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LnRleHQoKSlcbiAgICAgICAgLnRoZW4oKHN2Z0NvZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBzdmdDb2RlO1xuICAgICAgICAgICAgZmlsbFBsYW5lcygpO1xuICAgICAgICB9KTtcblxuICAgIHJldHVybiBjb250YWluZXI7XG5cbn07IiwiaW1wb3J0ICcuL3N0eWxlcy5zY3NzJztcblxuZXhwb3J0IGRlZmF1bHQgKENvbG9yVHJhbnNsYXRvciwgeyBNaXggfSkgPT4ge1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICBjb25zdCBtaXhlcyA9IFtcbiAgICAgICAgJyNGRjAwMDAnLFxuICAgICAgICAnI0ZGRkYwMCcsXG4gICAgICAgICcjMDAwMEZGJyxcbiAgICAgICAgWzEsIDNdLFxuICAgICAgICBbMSwgMl0sXG4gICAgICAgIFsyLCAzXSxcbiAgICAgICAgWzEsIDIsIDNdXG4gICAgXTtcblxuICAgIGNvbnN0IGZpbGxQbGFuZXMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBsYW5lcyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcjcGxhbmVzIHBhdGgnKTtcbiAgICAgICAgcGxhbmVzLmZvckVhY2goKHBsYW5lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbG9yID0gJyNDQ0NDQ0MnO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtaXhlc1tpbmRleF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29sb3IgPSBtaXhlc1tpbmRleF07XG4gICAgICAgICAgICB9IGVsc2UgaWYobWl4ZXNbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3JzID0gbWl4ZXNbaW5kZXhdLm1hcCgoaSkgPT4gbWl4ZXNbaSAtIDFdKTtcbiAgICAgICAgICAgICAgICBjb2xvciA9IG1peGVzW2luZGV4XSA9IENvbG9yVHJhbnNsYXRvci5nZXRNaXhIRVgoY29sb3JzLCBNaXguU1VCVFJBQ1RJVkUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGxhbmUuc2V0QXR0cmlidXRlKCdmaWxsJywgY29sb3IpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZmV0Y2goJ2ltYWdlcy9jb2xvci1taXhlcy5zdmcnKVxuICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LnRleHQoKSlcbiAgICAgICAgLnRoZW4oKHN2Z0NvZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBzdmdDb2RlO1xuICAgICAgICAgICAgZmlsbFBsYW5lcygpO1xuICAgICAgICB9KTtcblxuICAgIHJldHVybiBjb250YWluZXI7XG5cbn07IiwiaW1wb3J0ICcuL3N0eWxlcy5zY3NzJztcblxuZXhwb3J0IGRlZmF1bHQgKENvbG9yVHJhbnNsYXRvciwgeyBIYXJtb255IH0pID0+IHtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgY29uc3QgaGFybW9uaWVzID0gW1xuICAgICAgICB7IGxhYmVsOiAnQ29tcGxlbWVudGFyeScsICAgICAgIHZhbHVlOiBIYXJtb255LkNPTVBMRU1FTlRBUlkgfSxcbiAgICAgICAgeyBsYWJlbDogJ1NwbGl0IENvbXBsZW1lbnRhcnknLCB2YWx1ZTogSGFybW9ueS5TUExJVF9DT01QTEVNRU5UQVJZIH0sXG4gICAgICAgIHsgbGFiZWw6ICdBbmFsb2dvdXMnLCAgICAgICAgICAgdmFsdWU6IEhhcm1vbnkuQU5BTE9HT1VTIH0sXG4gICAgICAgIHsgbGFiZWw6ICdUcmlhZGljJywgICAgICAgICAgICAgdmFsdWU6IEhhcm1vbnkuVFJJQURJQyB9LFxuICAgICAgICB7IGxhYmVsOiAnVGV0cmFkaWMnLCAgICAgICAgICAgIHZhbHVlOiBIYXJtb255LlRFVFJBRElDIH0sXG4gICAgICAgIHsgbGFiZWw6ICdTcXVhcmUnLCAgICAgICAgICAgICAgdmFsdWU6IEhhcm1vbnkuU1FVQVJFIH1cbiAgICBdO1xuXG4gICAgY29uc3QgYmFzZUNvbG9yID0gJyNGMDAnO1xuXG4gICAgY29uc3QgY3JlYXRlRWxlbWVudCA9IChjbGFzc05hbWUsIHBhcmVudCkgPT4ge1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgIHJldHVybiBkaXY7XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZUhhcm1vbnkgPSAoaXRlbSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBjcmVhdGVFbGVtZW50KCd3cmFwcGVyJywgY29udGFpbmVyKTtcbiAgICAgICAgY29uc3Qgd2hlZWwgPSBjcmVhdGVFbGVtZW50KCd3aGVlbCcsIHdyYXBwZXIpO1xuICAgICAgICBjb25zdCBoYXJtb255ID0gY3JlYXRlRWxlbWVudCgnaGFybW9ueScsIHdyYXBwZXIpO1xuICAgICAgICBjcmVhdGVFbGVtZW50KCdsYWJlbCcsIHdyYXBwZXIpLmlubmVyVGV4dCA9IGl0ZW0ubGFiZWw7XG5cbiAgICAgICAgZmV0Y2goJ2ltYWdlcy93aGVlbC1hZGRpdGl2ZS5zdmcnKVxuICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHJlc3VsdC50ZXh0KCkpXG4gICAgICAgICAgICAudGhlbigoc3ZnQ29kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhcm1vbnlDb2xvcnMgPSBDb2xvclRyYW5zbGF0b3IuZ2V0SGFybW9ueShiYXNlQ29sb3IsIGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gJ3BhdGgnICsgaGFybW9ueUNvbG9ycy5tYXAoKGNvbG9yKSA9PiBgOm5vdChbZmlsbD1cIiR7Y29sb3J9XCJdKWApLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgIHdoZWVsLmlubmVySFRNTCA9IHN2Z0NvZGU7XG4gICAgICAgICAgICAgICAgaGFybW9ueUNvbG9ycy5mb3JFYWNoKChoZXgpID0+IGNyZWF0ZUVsZW1lbnQoJ2JveCcsIGhhcm1vbnkpLnN0eWxlLmJhY2tncm91bmQgPSBoZXgpO1xuICAgICAgICAgICAgICAgIHdoZWVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpLmZvckVhY2goKHBhdGgpID0+IHBhdGguc2V0QXR0cmlidXRlKCdmaWxsLW9wYWNpdHknLCAnMC4yNScpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgfTtcblxuICAgIGhhcm1vbmllcy5mb3JFYWNoKChpdGVtKSA9PiBjcmVhdGVIYXJtb255KGl0ZW0pKTtcblxuICAgIHJldHVybiBjb250YWluZXI7XG5cbn07IiwiaW1wb3J0ICcuL3N0eWxlcy5zY3NzJztcblxuZXhwb3J0IGRlZmF1bHQgKENvbG9yVHJhbnNsYXRvciwgeyBIYXJtb255LCBNaXggfSkgPT4ge1xuXG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICBjb25zdCBoYXJtb25pZXMgPSBbXG4gICAgICAgIHsgbGFiZWw6ICdDb21wbGVtZW50YXJ5JywgICAgICAgdmFsdWU6IEhhcm1vbnkuQ09NUExFTUVOVEFSWSB9LFxuICAgICAgICB7IGxhYmVsOiAnU3BsaXQgQ29tcGxlbWVudGFyeScsIHZhbHVlOiBIYXJtb255LlNQTElUX0NPTVBMRU1FTlRBUlkgfSxcbiAgICAgICAgeyBsYWJlbDogJ0FuYWxvZ291cycsICAgICAgICAgICB2YWx1ZTogSGFybW9ueS5BTkFMT0dPVVMgfSxcbiAgICAgICAgeyBsYWJlbDogJ1RyaWFkaWMnLCAgICAgICAgICAgICB2YWx1ZTogSGFybW9ueS5UUklBRElDIH0sXG4gICAgICAgIHsgbGFiZWw6ICdUZXRyYWRpYycsICAgICAgICAgICAgdmFsdWU6IEhhcm1vbnkuVEVUUkFESUMgfSxcbiAgICAgICAgeyBsYWJlbDogJ1NxdWFyZScsICAgICAgICAgICAgICB2YWx1ZTogSGFybW9ueS5TUVVBUkUgfVxuICAgIF07XG5cbiAgICBjb25zdCBiYXNlQ29sb3IgPSAnI0YwMCc7XG5cbiAgICBjb25zdCBjcmVhdGVFbGVtZW50ID0gKGNsYXNzTmFtZSwgcGFyZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXYuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgcmV0dXJuIGRpdjtcbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlSGFybW9ueSA9IChpdGVtKSA9PiB7XG5cbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoJ3dyYXBwZXInLCBjb250YWluZXIpO1xuICAgICAgICBjb25zdCB3aGVlbCA9IGNyZWF0ZUVsZW1lbnQoJ3doZWVsJywgd3JhcHBlcik7XG4gICAgICAgIGNvbnN0IGhhcm1vbnkgPSBjcmVhdGVFbGVtZW50KCdoYXJtb255Jywgd3JhcHBlcik7XG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2xhYmVsJywgd3JhcHBlcikuaW5uZXJUZXh0ID0gaXRlbS5sYWJlbDtcblxuICAgICAgICBmZXRjaCgnaW1hZ2VzL3doZWVsLXN1YnRyYWN0aXZlLnN2ZycpXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gcmVzdWx0LnRleHQoKSlcbiAgICAgICAgICAgIC50aGVuKChzdmdDb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFybW9ueUNvbG9ycyA9IENvbG9yVHJhbnNsYXRvci5nZXRIYXJtb255KGJhc2VDb2xvciwgaXRlbS52YWx1ZSwgTWl4LlNVQlRSQUNUSVZFKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RvciA9ICdwYXRoJyArIGhhcm1vbnlDb2xvcnMubWFwKChjb2xvcikgPT4gYDpub3QoW2ZpbGw9XCIke2NvbG9yfVwiXSlgKS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICB3aGVlbC5pbm5lckhUTUwgPSBzdmdDb2RlO1xuICAgICAgICAgICAgICAgIGhhcm1vbnlDb2xvcnMuZm9yRWFjaCgoaGV4KSA9PiBjcmVhdGVFbGVtZW50KCdib3gnLCBoYXJtb255KS5zdHlsZS5iYWNrZ3JvdW5kID0gaGV4KTtcbiAgICAgICAgICAgICAgICB3aGVlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKS5mb3JFYWNoKChwYXRoKSA9PiBwYXRoLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5JywgJzAuMjUnKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgIH07XG5cbiAgICBoYXJtb25pZXMuZm9yRWFjaCgoaXRlbSkgPT4gY3JlYXRlSGFybW9ueShpdGVtKSk7XG5cbiAgICByZXR1cm4gY29udGFpbmVyO1xuXG59OyIsImltcG9ydCAnLi4vLi4vbm9kZV9tb2R1bGVzL2dvb2dsZS1jb2RlLXByZXR0aWZ5L2Jpbi9ydW5fcHJldHRpZnkubWluJztcbmltcG9ydCAnLi4vLi4vbm9kZV9tb2R1bGVzL2dvb2dsZS1jb2RlLXByZXR0aWZ5L2Jpbi9wcmV0dGlmeS5taW4uY3NzJztcbmltcG9ydCAnLi4vLi4vbm9kZV9tb2R1bGVzL2dvb2dsZS1jb2RlLXByZXR0aWZ5L3N0eWxlcy9kZXNlcnQuY3NzJztcbmltcG9ydCAnd2hhdHdnLWZldGNoJztcbmltcG9ydCAnLi9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgeyBDb2xvclRyYW5zbGF0b3IsIEhhcm1vbnksIE1peCB9IGZyb20gJy4uLyc7XG5pbXBvcnQgZGVtbzEgZnJvbSAnLi9kZW1vMSc7XG5pbXBvcnQgZGVtbzIgZnJvbSAnLi9kZW1vMic7XG5pbXBvcnQgZGVtbzMgZnJvbSAnLi9kZW1vMyc7XG5pbXBvcnQgZGVtbzQgZnJvbSAnLi9kZW1vNCc7XG5pbXBvcnQgZGVtbzUgZnJvbSAnLi9kZW1vNSc7XG5pbXBvcnQgZGVtbzYgZnJvbSAnLi9kZW1vNic7XG5pbXBvcnQgZGVtbzcgZnJvbSAnLi9kZW1vNyc7XG5pbXBvcnQgZGVtbzggZnJvbSAnLi9kZW1vOCc7XG5pbXBvcnQgZGVtbzkgZnJvbSAnLi9kZW1vOSc7XG5pbXBvcnQgZGVtbzEwIGZyb20gJy4vZGVtbzEwJztcblxuY29uc3QgZnVuY3Rpb1RvU3RyaW5nID0gKGZuKSA9PiB7XG4gICAgY29uc3QgYXJ0aWNsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2FydGljbGUnKTtcbiAgICBjb25zdCBwcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICBhcnRpY2xlLmNsYXNzTGlzdC5hZGQoJ2Z1bmN0aW9uLWNvbnRhaW5lcicpO1xuICAgIHByZS5jbGFzc0xpc3QuYWRkKCdwcmV0dHlwcmludCcpO1xuICAgIGFydGljbGUuYXBwZW5kQ2hpbGQocHJlKTtcbiAgICBwcmUuaW5uZXJIVE1MID0gZm4udG9TdHJpbmcoKS5yZXBsYWNlKCcoQ29sb3JUcmFuc2xhdG9yKScsICcoKScpO1xuICAgIHJldHVybiBhcnRpY2xlO1xufTtcblxuY29uc3QgZGVtb3MgPSBuZXcgTWFwKFtcbiAgICBbJ2RlbW8xJywgZGVtbzFdLFxuICAgIFsnZGVtbzInLCBkZW1vMl0sXG4gICAgWydkZW1vMycsIGRlbW8zXSxcbiAgICBbJ2RlbW80JywgZGVtbzRdLFxuICAgIFsnZGVtbzUnLCBkZW1vNV0sXG4gICAgWydkZW1vNicsIGRlbW82XSxcbiAgICBbJ2RlbW83JywgZGVtbzddLFxuICAgIFsnZGVtbzgnLCBkZW1vOF0sXG4gICAgWydkZW1vOScsIGRlbW85XSxcbiAgICBbJ2RlbW8xMCcsIGRlbW8xMF0sXG5dKTtcblxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICBkZW1vcy5mb3JFYWNoKChtb2R1bGUsIGRpdikgPT4ge1xuICAgICAgICBjb25zdCBkZW1vID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2KTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnZGVtby1jb250YWluZXInKTtcbiAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKCdkZW1vLXdyYXBwZXInKTtcblxuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKG1vZHVsZShDb2xvclRyYW5zbGF0b3IsIHsgSGFybW9ueSwgTWl4IH0pKTtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuICAgICAgICBkZW1vLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgIGRlbW8uYXBwZW5kQ2hpbGQoZnVuY3Rpb1RvU3RyaW5nKG1vZHVsZSkpO1xuICAgIH0pO1xufSk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///779\n')}},__webpack_module_cache__={};function __webpack_require__(I){var g=__webpack_module_cache__[I];if(void 0!==g)return g.exports;var C=__webpack_module_cache__[I]={exports:{}};return __webpack_modules__[I](C,C.exports,__webpack_require__),C.exports}__webpack_require__.r=I=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(I,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(I,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__(779),__webpack_export_target__=window;for(var i in __webpack_exports__)__webpack_export_target__[i]=__webpack_exports__[i];__webpack_exports__.__esModule&&Object.defineProperty(__webpack_export_target__,"__esModule",{value:!0})})(); \ No newline at end of file diff --git a/src/@types/index.ts b/src/@types/index.ts index 2b1823f..ce0cf9f 100644 --- a/src/@types/index.ts +++ b/src/@types/index.ts @@ -77,6 +77,7 @@ export interface ObjectProps { export interface Options { decimals: number; + legacyCSS: boolean; } export type InputOptions = Partial; \ No newline at end of file diff --git a/src/color/css.ts b/src/color/css.ts index fba90e7..1296f13 100644 --- a/src/color/css.ts +++ b/src/color/css.ts @@ -4,7 +4,8 @@ import { HSLObject, CMYKObject, Color, - NumberOrString + NumberOrString, + Options } from '@types'; import { ColorModel, @@ -54,25 +55,52 @@ export const CSS = { : '#{1}{2}{3}'; return getResultFromTemplate(template, values); }, - [ColorModel.RGB]: (color: RGBObject): string => { + [ColorModel.RGB]: (color: RGBObject, options: Options): string => { + const { legacyCSS } = options; const values = prepareColorForCss(color); - const template = values.length === 4 - ? 'rgba({1},{2},{3},{4})' - : 'rgb({1},{2},{3})'; + const template = legacyCSS + ? ( + values.length === 4 + ? 'rgba({1},{2},{3},{4})' + : 'rgb({1},{2},{3})' + ) + : ( + values.length === 4 + ? 'rgb({1} {2} {3} / {4})' + : 'rgb({1} {2} {3})' + ); return getResultFromTemplate(template, values); }, - [ColorModel.HSL]: (color: HSLObject): string => { + [ColorModel.HSL]: (color: HSLObject, options: Options): string => { + const { legacyCSS } = options; const values = prepareColorForCss(color); - const template = values.length === 4 - ? 'hsla({1},{2}%,{3}%,{4})' - : 'hsl({1},{2}%,{3}%)'; + const template = legacyCSS + ? ( + values.length === 4 + ? 'hsla({1},{2}%,{3}%,{4})' + : 'hsl({1},{2}%,{3}%)' + ) + : ( + values.length === 4 + ? 'hsl({1} {2}% {3}% / {4})' + : 'hsl({1} {2}% {3}%)' + ); return getResultFromTemplate(template, values); }, - [ColorModel.CMYK]: (color: CMYKObject): string => { + [ColorModel.CMYK]: (color: CMYKObject, options: Options): string => { + const { legacyCSS } = options; const values = prepareColorForCss(color); - const template = values.length === 5 - ? 'cmyk({1}%,{2}%,{3}%,{4}%,{5})' - : 'cmyk({1}%,{2}%,{3}%,{4}%)'; + const template = legacyCSS + ? ( + values.length === 5 + ? 'device-cmyk({1}%,{2}%,{3}%,{4}%,{5})' + : 'device-cmyk({1}%,{2}%,{3}%,{4}%)' + ) + : ( + values.length === 5 + ? 'device-cmyk({1}% {2}% {3}% {4}% / {5})' + : 'device-cmyk({1}% {2}% {3}% {4}%)' + ); return getResultFromTemplate(template, values); } }; \ No newline at end of file diff --git a/src/color/utils.ts b/src/color/utils.ts index d36a261..51d51be 100644 --- a/src/color/utils.ts +++ b/src/color/utils.ts @@ -15,8 +15,7 @@ import { HSLOutput, HEXOutput, ColorOutput, - Options, - InputOptions + Options } from '@types'; import { HEX, @@ -41,8 +40,7 @@ import { percentNumber, round, minmax, - grades, - parseOptions + grades } from '#helpers'; import { rgbToHSL, @@ -384,9 +382,13 @@ export const blend = (from: RGBObject, to: RGBObject, steps: number): RGBObject[ }; //---Shades -export const getColorMixture = (color: ColorInputWithoutCMYK, steps: number, shades: boolean, options: Partial): ColorOutput[] => { - const parsedOptions = parseOptions(options); - const { decimals } = parsedOptions; +export const getColorMixture = ( + color: ColorInputWithoutCMYK, + steps: number, + shades: boolean, + options: Options +): ColorOutput[] => { + const { decimals } = options; const model = getColorModel(color); const isCSS = typeof color === 'string'; const rgb = getRGBObject(color, model); @@ -417,7 +419,7 @@ export const getColorMixture = (color: ColorInputWithoutCMYK, steps: number, sha ...rgbColor, a: round(rgbColor.a * 255) }, - parsedOptions.decimals + decimals ) ) : CSS.HEX( @@ -433,7 +435,8 @@ export const getColorMixture = (color: ColorInputWithoutCMYK, steps: number, sha if (hasAlpha) rgbColor.a = hslColor.a; return isCSS ? CSS.RGB( - roundRGBObject(rgbColor, decimals) + roundRGBObject(rgbColor, decimals), + options ) : hasAlpha ? translateColor.RGBA(rgbColor, decimals) @@ -443,7 +446,8 @@ export const getColorMixture = (color: ColorInputWithoutCMYK, steps: number, sha return hslMap.map((hslColor: HSLObject): HSLOutput => { return isCSS ? CSS.HSL( - roundHSLObject(hslColor, decimals) + roundHSLObject(hslColor, decimals), + options ) : hasAlpha ? translateColor.HSLA( @@ -465,7 +469,12 @@ export const getColorMixture = (color: ColorInputWithoutCMYK, steps: number, sha //---Harmony export const colorHarmony = { - buildHarmony(color: ColorInputWithoutCMYK, harmonyFunction: HarmonyFunction, mode: Mix, decimals: number): ColorOutput[] { + buildHarmony( + color: ColorInputWithoutCMYK, + harmonyFunction: HarmonyFunction, + mode: Mix, + options: Options + ): ColorOutput[] { const model = getColorModel(color); const rgb = getRGBObject(color, model); const hsl = rgbToHSL(rgb.r, rgb.g, rgb.b, rgb.a); @@ -492,12 +501,12 @@ export const colorHarmony = { ); case ColorModel.HSL: return hasAlpha - ? this.HSLA(hsl, harmonyFunction, mode, isCSS, decimals) - : this.HSL(hsl, harmonyFunction, mode, isCSS, decimals); + ? this.HSLA(hsl, harmonyFunction, mode, isCSS, options) + : this.HSL(hsl, harmonyFunction, mode, isCSS, options); case ColorModel.RGB: return hasAlpha - ? this.RGBA(hsl, harmonyFunction, mode, isCSS, decimals) - : this.RGB(hsl, harmonyFunction, mode, isCSS, decimals); + ? this.RGBA(hsl, harmonyFunction, mode, isCSS, options) + : this.RGB(hsl, harmonyFunction, mode, isCSS, options); } }, @@ -550,8 +559,9 @@ export const colorHarmony = { harmonyFunction: HarmonyFunction, mode: Mix, css: boolean, - decimals: number + options: Options ): RGBOutput[] { + const { decimals } = options; const array = harmonyFunction(color, mode); return array.map( (c: HSLObject): RGBOutput => ( @@ -560,7 +570,8 @@ export const colorHarmony = { roundRGBObject( hslToRGB(c.h, c.s, c.l), decimals - ) + ), + options ) : translateColor.RGB( hslToRGB(c.h, c.s, c.l), @@ -575,8 +586,9 @@ export const colorHarmony = { harmonyFunction: HarmonyFunction, mode: Mix, css: boolean, - decimals: number + options: Options ): RGBOutput[] { + const { decimals } = options; const array = harmonyFunction(color, mode); return array.map( (c: HSLObject): RGBOutput => ( @@ -588,7 +600,8 @@ export const colorHarmony = { a: normalizeAlpha(c.a) }, decimals - ) + ), + options ) : translateColor.RGBA( { @@ -606,8 +619,9 @@ export const colorHarmony = { harmonyFunction: HarmonyFunction, mode: Mix, css: boolean, - decimals: number + options: Options ): HSLOutput[] { + const { decimals } = options; const array = harmonyFunction(color, mode); return array.map( (c: HSLObject): HSLOutput => ( @@ -620,7 +634,8 @@ export const colorHarmony = { l: c.l }, decimals - ) + ), + options ) : translateColor.HSL( hslToRGB(c.h, c.s, c.l), @@ -635,8 +650,9 @@ export const colorHarmony = { harmonyFunction: HarmonyFunction, mode: Mix, css: boolean, - decimals: number + options: Options ): HSLOutput[] { + const { decimals } = options; const array = harmonyFunction(color, mode); return array.map( (c: HSLObject): HSLOutput => ( @@ -648,7 +664,8 @@ export const colorHarmony = { a: normalizeAlpha(c.a) }, decimals - ) + ), + options ) : translateColor.HSLA( { @@ -759,14 +776,14 @@ export const colorMixer = { colors: ColorInput[], mode: Mix, css: CSS, - options: InputOptions + options: Options ): R { - const { decimals } = parseOptions(options); + const { decimals } = options; const mix = this.mix(colors, mode); delete mix.a; return ( css - ? CSS.RGB(mix) + ? CSS.RGB(mix, options) : translateColor.RGB(mix, decimals) ) as R; }, @@ -774,13 +791,13 @@ export const colorMixer = { colors: ColorInput[], mode: Mix, css: CSS, - options: InputOptions + options: Options ): R { - const { decimals } = parseOptions(options); + const { decimals } = options; const mix = this.mix(colors, mode); return ( css - ? CSS.RGB(mix) + ? CSS.RGB(mix, options) : translateColor.RGBA(mix, decimals) ) as R; }, @@ -788,16 +805,16 @@ export const colorMixer = { colors: ColorInput[], mode: Mix, css: CSS, - options: InputOptions + options: Options ): R { - const { decimals } = parseOptions(options); + const { decimals } = options; const mix = this.mix(colors, mode); const hsl = rgbToHSL(mix.r, mix.g, mix.b); delete mix.a; delete hsl.a; return ( css - ? CSS.HSL(hsl) + ? CSS.HSL(hsl, options) : translateColor.HSL(mix, decimals) ) as R; }, @@ -805,14 +822,14 @@ export const colorMixer = { colors: ColorInput[], mode: Mix, css: CSS, - options: InputOptions + options: Options ): R { - const { decimals } = parseOptions(options); + const { decimals } = options; const mix = this.mix(colors, mode); const hsl = rgbToHSL(mix.r, mix.g, mix.b, mix.a); return ( css - ? CSS.HSL(hsl) + ? CSS.HSL(hsl, options) : translateColor.HSLA(mix, decimals) ) as R; } diff --git a/src/constants/options.ts b/src/constants/options.ts index 76cb8bb..00f252f 100644 --- a/src/constants/options.ts +++ b/src/constants/options.ts @@ -2,5 +2,6 @@ import { Options } from '@types'; import { MAX_DECIMALS } from './numbers'; export const DEFAULT_OPTIONS: Options = { - decimals: MAX_DECIMALS + decimals: MAX_DECIMALS, + legacyCSS: false }; \ No newline at end of file diff --git a/src/helpers/index.ts b/src/helpers/index.ts index 569edb6..2f93c9a 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -1,4 +1,9 @@ -import { NumberOrString, Options } from '@types'; +import { + Options, + InputOptions, + NumberOrString, + ColorInput +} from '@types'; import { PCENT, HEX, @@ -79,4 +84,19 @@ export const grades = (radian: number): number => radian * 180 / Math.PI; export const parseOptions = (options: Partial): Options => ({ ...DEFAULT_OPTIONS, ...options -}); \ No newline at end of file +}); + +export const getOptionsFromColorInput = (options: InputOptions, ...colors: ColorInput[]): Options => { + const cssColors = colors.filter((color: ColorInput): boolean => typeof color === 'string') as string[]; + const allLegacy = cssColors.every((color: string): boolean => { + return color.includes(','); + }); + return { + decimals: typeof options.decimals === 'number' + ? options.decimals + : DEFAULT_OPTIONS.decimals, + legacyCSS: typeof options.legacyCSS === 'boolean' + ? options.legacyCSS + : Boolean(cssColors.length && allLegacy) || DEFAULT_OPTIONS.legacyCSS + }; +}; \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index b53940d..d6a3937 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,7 +25,12 @@ import { } from '#color/translators'; import * as utils from '#color/utils'; import { CSS } from '#color/css'; -import { round, minmax, parseOptions } from '#helpers'; +import { + round, + minmax, + parseOptions, + getOptionsFromColorInput +} from '#helpers'; const getColorReturn = ( color: ColorInput, @@ -58,17 +63,16 @@ const getBlendReturn = ( const getHarmonyReturn = ( harmony: Harmony, color: ColorInputWithoutCMYK, - options: InputOptions, - mode?: Mix, + mode: Mix, + options: Options, ): ColorOutput[] => { - const { decimals } = parseOptions(options); return ({ - [Harmony.ANALOGOUS]: utils.colorHarmony.buildHarmony(color, utils.analogous, mode, decimals), - [Harmony.COMPLEMENTARY]: utils.colorHarmony.buildHarmony(color, utils.complementary, mode, decimals), - [Harmony.SPLIT_COMPLEMENTARY]: utils.colorHarmony.buildHarmony(color, utils.splitComplementary, mode, decimals), - [Harmony.TRIADIC]: utils.colorHarmony.buildHarmony(color, utils.triadic, mode, decimals), - [Harmony.TETRADIC]: utils.colorHarmony.buildHarmony(color, utils.tetradic, mode, decimals), - [Harmony.SQUARE]: utils.colorHarmony.buildHarmony(color, utils.square, mode, decimals) + [Harmony.ANALOGOUS]: utils.colorHarmony.buildHarmony(color, utils.analogous, mode, options), + [Harmony.COMPLEMENTARY]: utils.colorHarmony.buildHarmony(color, utils.complementary, mode, options), + [Harmony.SPLIT_COMPLEMENTARY]: utils.colorHarmony.buildHarmony(color, utils.splitComplementary, mode, options), + [Harmony.TRIADIC]: utils.colorHarmony.buildHarmony(color, utils.triadic, mode, options), + [Harmony.TETRADIC]: utils.colorHarmony.buildHarmony(color, utils.tetradic, mode, options), + [Harmony.SQUARE]: utils.colorHarmony.buildHarmony(color, utils.square, mode, options) })[harmony]; }; @@ -318,56 +322,74 @@ export class ColorTranslator { } public get RGB(): string { - return CSS.RGB({ - r: this.R, - g: this.G, - b: this.B - }); + return CSS.RGB( + { + r: this.R, + g: this.G, + b: this.B + }, + this.options + ); } public get RGBA(): string { - return CSS.RGB({ - r: this.R, - g: this.G, - b: this.B, - a: this.A - }); + return CSS.RGB( + { + r: this.R, + g: this.G, + b: this.B, + a: this.A + }, + this.options + ); } public get HSL(): string { - return CSS.HSL({ - h: this.H, - s: this.S, - l: this.L - }); + return CSS.HSL( + { + h: this.H, + s: this.S, + l: this.L + }, + this.options + ); } public get HSLA(): string { - return CSS.HSL({ - h: this.H, - s: this.S, - l: this.L, - a: this.A - }); + return CSS.HSL( + { + h: this.H, + s: this.S, + l: this.L, + a: this.A + }, + this.options + ); } public get CMYK(): string { - return CSS.CMYK({ - c: this.C, - m: this.M, - y: this.Y, - k: this.K - }); + return CSS.CMYK( + { + c: this.C, + m: this.M, + y: this.Y, + k: this.K + }, + this.options + ); } public get CMYKA(): string { - return CSS.CMYK({ - c: this.C, - m: this.M, - y: this.Y, - k: this.K, - a: this.A - }); + return CSS.CMYK( + { + c: this.C, + m: this.M, + y: this.Y, + k: this.K, + a: this.A + }, + this.options + ); } // Color Conversion Static Methods @@ -415,7 +437,8 @@ export class ColorTranslator { public static toRGB(color: ColorInput, options: InputOptions = {}): string { return CSS.RGB( - ColorTranslator.toRGBObject(color, options) + ColorTranslator.toRGBObject(color, options), + getOptionsFromColorInput(options, color) ); } @@ -431,7 +454,8 @@ export class ColorTranslator { public static toRGBA(color: ColorInput, options: InputOptions = {}): string { return CSS.RGB( - ColorTranslator.toRGBAObject(color, options) + ColorTranslator.toRGBAObject(color, options), + getOptionsFromColorInput(options, color) ); } @@ -447,7 +471,8 @@ export class ColorTranslator { public static toHSL(color: ColorInput, options: InputOptions = {}): string { return CSS.HSL( - ColorTranslator.toHSLObject(color, options) + ColorTranslator.toHSLObject(color, options), + getOptionsFromColorInput(options, color) ); } @@ -463,7 +488,8 @@ export class ColorTranslator { public static toHSLA(color: ColorInput, options: InputOptions = {}): string { return CSS.HSL( - ColorTranslator.toHSLAObject(color, options) + ColorTranslator.toHSLAObject(color, options), + getOptionsFromColorInput(options, color) ); } @@ -479,7 +505,8 @@ export class ColorTranslator { public static toCMYK(color: ColorInput, options: InputOptions = {}): string { return CSS.CMYK( - ColorTranslator.toCMYKObject(color, options) + ColorTranslator.toCMYKObject(color, options), + getOptionsFromColorInput(options, color) ); } @@ -495,7 +522,8 @@ export class ColorTranslator { public static toCMYKA(color: ColorInput, options: InputOptions = {}): string { return CSS.CMYK( - ColorTranslator.toCMYKAObject(color, options) + ColorTranslator.toCMYKAObject(color, options), + getOptionsFromColorInput(options, color) ); } @@ -568,7 +596,12 @@ export class ColorTranslator { options: InputOptions = {} ): string[] { return ColorTranslator.getBlendRGBObject(from, to, steps, options) - .map((color: RGBObject): string => CSS.RGB(color)); + .map((color: RGBObject): string => { + return CSS.RGB( + color, + getOptionsFromColorInput(options, from, to) + ); + }); } public static getBlendRGBAObject( @@ -593,7 +626,12 @@ export class ColorTranslator { options: InputOptions = {} ): string[] { return ColorTranslator.getBlendRGBAObject(from, to, steps, options) - .map((color: RGBObject): string => CSS.RGB(color)); + .map((color: RGBObject): string => { + return CSS.RGB( + color, + getOptionsFromColorInput(options, from, to) + ); + }); } public static getBlendHSLObject( @@ -618,7 +656,12 @@ export class ColorTranslator { options: InputOptions = {} ): string[] { return ColorTranslator.getBlendHSLObject(from, to, steps, options) - .map((color: HSLObject) => CSS.HSL(color)); + .map((color: HSLObject) => { + return CSS.HSL( + color, + getOptionsFromColorInput(options, from, to) + ); + }); } public static getBlendHSLAObject( @@ -643,7 +686,12 @@ export class ColorTranslator { options: InputOptions = {} ): string[] { return ColorTranslator.getBlendHSLAObject(from, to, steps, options) - .map((color: HSLObject): string => CSS.HSL(color)); + .map((color: HSLObject): string => { + return CSS.HSL( + color, + getOptionsFromColorInput(options, from, to) + ); + }); } // Color Mix Static Methods @@ -668,7 +716,12 @@ export class ColorTranslator { mode: Mix = Mix.ADDITIVE, options: InputOptions = {} ): RGBObject { - return utils.colorMixer.RGB(colors, mode, false, options); + return utils.colorMixer.RGB( + colors, + mode, + false, + parseOptions(options) + ); } public static getMixRGB( @@ -676,7 +729,12 @@ export class ColorTranslator { mode: Mix = Mix.ADDITIVE, options: InputOptions = {} ): string { - return utils.colorMixer.RGB(colors, mode, true, options); + return utils.colorMixer.RGB( + colors, + mode, + true, + getOptionsFromColorInput(options, ...colors) + ); } public static getMixRGBAObject( @@ -684,7 +742,12 @@ export class ColorTranslator { mode: Mix = Mix.ADDITIVE, options: InputOptions = {} ): RGBObject { - return utils.colorMixer.RGBA(colors, mode, false, options); + return utils.colorMixer.RGBA( + colors, + mode, + false, + parseOptions(options) + ); } public static getMixRGBA( @@ -692,7 +755,12 @@ export class ColorTranslator { mode: Mix = Mix.ADDITIVE, options: InputOptions = {} ): string { - return utils.colorMixer.RGBA(colors, mode, true, options); + return utils.colorMixer.RGBA( + colors, + mode, + true, + getOptionsFromColorInput(options, ...colors) + ); } public static getMixHSLObject( @@ -700,7 +768,12 @@ export class ColorTranslator { mode: Mix = Mix.ADDITIVE, options: InputOptions = {} ): HSLObject { - return utils.colorMixer.HSL(colors, mode, false, options); + return utils.colorMixer.HSL( + colors, + mode, + false, + parseOptions(options) + ); } public static getMixHSL( @@ -708,7 +781,12 @@ export class ColorTranslator { mode: Mix = Mix.ADDITIVE, options: InputOptions = {} ): string { - return utils.colorMixer.HSL(colors, mode, true, options); + return utils.colorMixer.HSL( + colors, + mode, + true, + getOptionsFromColorInput(options, ...colors) + ); } public static getMixHSLAObject( @@ -716,7 +794,12 @@ export class ColorTranslator { mode: Mix = Mix.ADDITIVE, options: InputOptions = {} ): HSLObject { - return utils.colorMixer.HSLA(colors, mode, false, options); + return utils.colorMixer.HSLA( + colors, + mode, + false, + parseOptions(options) + ); } public static getMixHSLA( @@ -724,7 +807,12 @@ export class ColorTranslator { mode: Mix = Mix.ADDITIVE, options: InputOptions = {} ): string { - return utils.colorMixer.HSLA(colors, mode, true, options); + return utils.colorMixer.HSLA( + colors, + mode, + true, + getOptionsFromColorInput(options, ...colors) + ); } // Get shades static method @@ -733,7 +821,12 @@ export class ColorTranslator { public static getShades(color: RGBObject, shades: number, options?: InputOptions): RGBObject[]; public static getShades(color: HSLObjectGeneric, shades: number, options?: InputOptions): HSLObject[]; public static getShades(color: ColorInputWithoutCMYK, shades: number, options = {}): ColorOutput[] { - return utils.getColorMixture(color, shades, true, options); + return utils.getColorMixture( + color, + shades, + true, + getOptionsFromColorInput(options, color) + ); } // Get tints static method @@ -742,7 +835,12 @@ export class ColorTranslator { public static getTints(color: RGBObject, tints: number, options?: InputOptions): RGBObject[]; public static getTints(color: HSLObjectGeneric, tints: number, options?: InputOptions): HSLObject[]; public static getTints(color: ColorInputWithoutCMYK, tints: number, options = {}): ColorOutput[] { - return utils.getColorMixture(color, tints, false, options); + return utils.getColorMixture( + color, + tints, + false, + getOptionsFromColorInput(options, color) + ); } // Color Harmony Static Method @@ -751,7 +849,12 @@ export class ColorTranslator { public static getHarmony(color: RGBObject, harmony?: Harmony, mode?: Mix, options?: InputOptions): RGBObject[]; public static getHarmony(color: HSLObjectGeneric, harmony?: Harmony, mode?: Mix, options?: InputOptions): HSLObject[]; public static getHarmony(color: ColorInputWithoutCMYK, harmony: Harmony = Harmony.COMPLEMENTARY, mode: Mix = Mix.ADDITIVE, options = {}): ColorOutput[] { - return getHarmonyReturn(harmony, color, options, mode); + return getHarmonyReturn( + harmony, + color, + mode, + getOptionsFromColorInput(options, color) + ); } } diff --git a/tests/__snapshots__/blending.test.ts.snap b/tests/__snapshots__/blending.test.ts.snap index 1e39c1a..d21d56e 100644 --- a/tests/__snapshots__/blending.test.ts.snap +++ b/tests/__snapshots__/blending.test.ts.snap @@ -2,41 +2,41 @@ exports[`ColorTranslator blending tests Blending with decimals snapshots 1`] = ` [ - "rgb(255,0,0)", - "rgb(191.25,0,63.75)", - "rgb(127.5,0,127.5)", - "rgb(63.75,0,191.25)", - "rgb(0,0,255)", + "rgb(255 0 0)", + "rgb(191.25 0 63.75)", + "rgb(127.5 0 127.5)", + "rgb(63.75 0 191.25)", + "rgb(0 0 255)", ] `; exports[`ColorTranslator blending tests Blending with decimals snapshots 2`] = ` [ - "rgba(255,0,0,1)", - "rgba(191.25,0,63.75,1)", - "rgba(127.5,0,127.5,1)", - "rgba(63.75,0,191.25,1)", - "rgba(0,0,255,1)", + "rgb(255 0 0 / 1)", + "rgb(191.25 0 63.75 / 1)", + "rgb(127.5 0 127.5 / 1)", + "rgb(63.75 0 191.25 / 1)", + "rgb(0 0 255 / 1)", ] `; exports[`ColorTranslator blending tests Blending with decimals snapshots 3`] = ` [ - "hsl(0,100%,50%)", - "hsl(340,100%,37.5%)", - "hsl(300,100%,25%)", - "hsl(260,100%,37.5%)", - "hsl(240,100%,50%)", + "hsl(0 100% 50%)", + "hsl(340 100% 37.5%)", + "hsl(300 100% 25%)", + "hsl(260 100% 37.5%)", + "hsl(240 100% 50%)", ] `; exports[`ColorTranslator blending tests Blending with decimals snapshots 4`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(340,100%,37.5%,1)", - "hsla(300,100%,25%,1)", - "hsla(260,100%,37.5%,1)", - "hsla(240,100%,50%,1)", + "hsl(0 100% 50% / 1)", + "hsl(340 100% 37.5% / 1)", + "hsl(300 100% 25% / 1)", + "hsl(260 100% 37.5% / 1)", + "hsl(240 100% 50% / 1)", ] `; diff --git a/tests/__snapshots__/harmony.test.ts.snap b/tests/__snapshots__/harmony.test.ts.snap index 504b393..fd0bd8a 100644 --- a/tests/__snapshots__/harmony.test.ts.snap +++ b/tests/__snapshots__/harmony.test.ts.snap @@ -1,198 +1,198 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0,100%,50%)" 1`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50% / 1)" 1`] = ` [ - "hsl(0,100%,50%)", - "hsl(30,100%,50%)", - "hsl(330,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(30 100% 50% / 1)", + "hsl(330 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0,100%,50%)" 2`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50% / 1)" 2`] = ` [ - "hsl(0,100%,50%)", - "hsl(180,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(180 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0,100%,50%)" 3`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50% / 1)" 3`] = ` [ - "hsl(0,100%,50%)", - "hsl(150,100%,50%)", - "hsl(210,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(150 100% 50% / 1)", + "hsl(210 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0,100%,50%)" 4`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50% / 1)" 4`] = ` [ - "hsl(0,100%,50%)", - "hsl(120,100%,50%)", - "hsl(240,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(120 100% 50% / 1)", + "hsl(240 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0,100%,50%)" 5`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50% / 1)" 5`] = ` [ - "hsl(0,100%,50%)", - "hsl(60,100%,50%)", - "hsl(240,100%,50%)", - "hsl(180,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(60 100% 50% / 1)", + "hsl(240 100% 50% / 1)", + "hsl(180 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0,100%,50%)" 6`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50% / 1)" 6`] = ` [ - "hsl(0,100%,50%)", - "hsl(90,100%,50%)", - "hsl(270,100%,50%)", - "hsl(180,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(90 100% 50% / 1)", + "hsl(270 100% 50% / 1)", + "hsl(180 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsla(0,100%,50%,1)" 1`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50%)" 1`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(30,100%,50%,1)", - "hsla(330,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(30 100% 50%)", + "hsl(330 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsla(0,100%,50%,1)" 2`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50%)" 2`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(180,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(180 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsla(0,100%,50%,1)" 3`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50%)" 3`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(150,100%,50%,1)", - "hsla(210,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(150 100% 50%)", + "hsl(210 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsla(0,100%,50%,1)" 4`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50%)" 4`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(120,100%,50%,1)", - "hsla(240,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(120 100% 50%)", + "hsl(240 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsla(0,100%,50%,1)" 5`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50%)" 5`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(60,100%,50%,1)", - "hsla(240,100%,50%,1)", - "hsla(180,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(60 100% 50%)", + "hsl(240 100% 50%)", + "hsl(180 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsla(0,100%,50%,1)" 6`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "hsl(0 100% 50%)" 6`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(90,100%,50%,1)", - "hsla(270,100%,50%,1)", - "hsla(180,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(90 100% 50%)", + "hsl(270 100% 50%)", + "hsl(180 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255,0,0)" 1`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0 / 1)" 1`] = ` [ - "rgb(255,0,0)", - "rgb(255,127.5,0)", - "rgb(255,0,127.5)", + "rgb(255 0 0 / 1)", + "rgb(255 127.5 0 / 1)", + "rgb(255 0 127.5 / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255,0,0)" 2`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0 / 1)" 2`] = ` [ - "rgb(255,0,0)", - "rgb(0,255,255)", + "rgb(255 0 0 / 1)", + "rgb(0 255 255 / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255,0,0)" 3`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0 / 1)" 3`] = ` [ - "rgb(255,0,0)", - "rgb(0,255,127.5)", - "rgb(0,127.5,255)", + "rgb(255 0 0 / 1)", + "rgb(0 255 127.5 / 1)", + "rgb(0 127.5 255 / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255,0,0)" 4`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0 / 1)" 4`] = ` [ - "rgb(255,0,0)", - "rgb(0,255,0)", - "rgb(0,0,255)", + "rgb(255 0 0 / 1)", + "rgb(0 255 0 / 1)", + "rgb(0 0 255 / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255,0,0)" 5`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0 / 1)" 5`] = ` [ - "rgb(255,0,0)", - "rgb(255,255,0)", - "rgb(0,0,255)", - "rgb(0,255,255)", + "rgb(255 0 0 / 1)", + "rgb(255 255 0 / 1)", + "rgb(0 0 255 / 1)", + "rgb(0 255 255 / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255,0,0)" 6`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0 / 1)" 6`] = ` [ - "rgb(255,0,0)", - "rgb(127.5,255,0)", - "rgb(127.5,0,255)", - "rgb(0,255,255)", + "rgb(255 0 0 / 1)", + "rgb(127.5 255 0 / 1)", + "rgb(127.5 0 255 / 1)", + "rgb(0 255 255 / 1)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgba(255,0,0,1)" 1`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0)" 1`] = ` [ - "rgba(255,0,0,1)", - "rgba(255,127.5,0,1)", - "rgba(255,0,127.5,1)", + "rgb(255 0 0)", + "rgb(255 127.5 0)", + "rgb(255 0 127.5)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgba(255,0,0,1)" 2`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0)" 2`] = ` [ - "rgba(255,0,0,1)", - "rgba(0,255,255,1)", + "rgb(255 0 0)", + "rgb(0 255 255)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgba(255,0,0,1)" 3`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0)" 3`] = ` [ - "rgba(255,0,0,1)", - "rgba(0,255,127.5,1)", - "rgba(0,127.5,255,1)", + "rgb(255 0 0)", + "rgb(0 255 127.5)", + "rgb(0 127.5 255)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgba(255,0,0,1)" 4`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0)" 4`] = ` [ - "rgba(255,0,0,1)", - "rgba(0,255,0,1)", - "rgba(0,0,255,1)", + "rgb(255 0 0)", + "rgb(0 255 0)", + "rgb(0 0 255)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgba(255,0,0,1)" 5`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0)" 5`] = ` [ - "rgba(255,0,0,1)", - "rgba(255,255,0,1)", - "rgba(0,0,255,1)", - "rgba(0,255,255,1)", + "rgb(255 0 0)", + "rgb(255 255 0)", + "rgb(0 0 255)", + "rgb(0 255 255)", ] `; -exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgba(255,0,0,1)" 6`] = ` +exports[`ColorTranslator harmony tests Additive Harmony with decimals for "rgb(255 0 0)" 6`] = ` [ - "rgba(255,0,0,1)", - "rgba(127.5,255,0,1)", - "rgba(127.5,0,255,1)", - "rgba(0,255,255,1)", + "rgb(255 0 0)", + "rgb(127.5 255 0)", + "rgb(127.5 0 255)", + "rgb(0 255 255)", ] `; @@ -734,199 +734,751 @@ exports[`ColorTranslator harmony tests Additive Harmony with decimals for {"r":2 ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0,100%,50%)" 1`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50% / 1)" 1`] = ` [ - "hsl(0,100%,50%)", - "hsl(15,100%,50%)", - "hsl(330,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(180 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0,100%,50%)" 2`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50% / 1)" 2`] = ` [ - "hsl(0,100%,50%)", - "hsl(120,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(180 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0,100%,50%)" 3`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50% / 1)" 3`] = ` [ - "hsl(0,100%,50%)", - "hsl(90,100%,50%)", - "hsl(180,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(180 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0,100%,50%)" 4`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50% / 1)" 4`] = ` [ - "hsl(0,100%,50%)", - "hsl(60,100%,50%)", - "hsl(240,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(180 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0,100%,50%)" 5`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50% / 1)" 5`] = ` [ - "hsl(0,100%,50%)", - "hsl(30,100%,50%)", - "hsl(240,100%,50%)", - "hsl(120,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(180 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0,100%,50%)" 6`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50% / 1)" 6`] = ` [ - "hsl(0,100%,50%)", - "hsl(45,100%,50%)", - "hsl(270,100%,50%)", - "hsl(120,100%,50%)", + "hsl(0 100% 50% / 1)", + "hsl(180 100% 50% / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsla(0,100%,50%,1)" 1`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50%)" 1`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(15,100%,50%,1)", - "hsla(330,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(180 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsla(0,100%,50%,1)" 2`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50%)" 2`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(120,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(180 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsla(0,100%,50%,1)" 3`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50%)" 3`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(90,100%,50%,1)", - "hsla(180,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(180 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsla(0,100%,50%,1)" 4`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50%)" 4`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(60,100%,50%,1)", - "hsla(240,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(180 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsla(0,100%,50%,1)" 5`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50%)" 5`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(30,100%,50%,1)", - "hsla(240,100%,50%,1)", - "hsla(120,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(180 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsla(0,100%,50%,1)" 6`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "hsl(0 100% 50%)" 6`] = ` [ - "hsla(0,100%,50%,1)", - "hsla(45,100%,50%,1)", - "hsla(270,100%,50%,1)", - "hsla(120,100%,50%,1)", + "hsl(0 100% 50%)", + "hsl(180 100% 50%)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255,0,0)" 1`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0 / 1)" 1`] = ` [ - "rgb(255,0,0)", - "rgb(255,63.75,0)", - "rgb(255,0,127.5)", + "rgb(255 0 0 / 1)", + "rgb(0 255 255 / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255,0,0)" 2`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0 / 1)" 2`] = ` [ - "rgb(255,0,0)", - "rgb(0,255,0)", + "rgb(255 0 0 / 1)", + "rgb(0 255 255 / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255,0,0)" 3`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0 / 1)" 3`] = ` [ - "rgb(255,0,0)", - "rgb(127.5,255,0)", - "rgb(0,255,255)", + "rgb(255 0 0 / 1)", + "rgb(0 255 255 / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255,0,0)" 4`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0 / 1)" 4`] = ` [ - "rgb(255,0,0)", - "rgb(255,255,0)", - "rgb(0,0,255)", + "rgb(255 0 0 / 1)", + "rgb(0 255 255 / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255,0,0)" 5`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0 / 1)" 5`] = ` [ - "rgb(255,0,0)", - "rgb(255,127.5,0)", - "rgb(0,0,255)", - "rgb(0,255,0)", + "rgb(255 0 0 / 1)", + "rgb(0 255 255 / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255,0,0)" 6`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0 / 1)" 6`] = ` [ - "rgb(255,0,0)", - "rgb(255,191.25,0)", - "rgb(127.5,0,255)", - "rgb(0,255,0)", + "rgb(255 0 0 / 1)", + "rgb(0 255 255 / 1)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgba(255,0,0,1)" 1`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0)" 1`] = ` [ - "rgba(255,0,0,1)", - "rgba(255,63.75,0,1)", - "rgba(255,0,127.5,1)", + "rgb(255 0 0)", + "rgb(0 255 255)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgba(255,0,0,1)" 2`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0)" 2`] = ` [ - "rgba(255,0,0,1)", - "rgba(0,255,0,1)", + "rgb(255 0 0)", + "rgb(0 255 255)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgba(255,0,0,1)" 3`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0)" 3`] = ` [ - "rgba(255,0,0,1)", - "rgba(127.5,255,0,1)", - "rgba(0,255,255,1)", + "rgb(255 0 0)", + "rgb(0 255 255)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgba(255,0,0,1)" 4`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0)" 4`] = ` [ - "rgba(255,0,0,1)", - "rgba(255,255,0,1)", - "rgba(0,0,255,1)", + "rgb(255 0 0)", + "rgb(0 255 255)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgba(255,0,0,1)" 5`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0)" 5`] = ` [ - "rgba(255,0,0,1)", - "rgba(255,127.5,0,1)", - "rgba(0,0,255,1)", - "rgba(0,255,0,1)", + "rgb(255 0 0)", + "rgb(0 255 255)", ] `; -exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgba(255,0,0,1)" 6`] = ` +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for "rgb(255 0 0)" 6`] = ` [ - "rgba(255,0,0,1)", - "rgba(255,191.25,0,1)", - "rgba(127.5,0,255,1)", - "rgba(0,255,0,1)", + "rgb(255 0 0)", + "rgb(0 255 255)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50,"a":1} 1`] = ` +[ + { + "a": 1, + "h": 0, + "l": 50, + "s": 100, + }, + { + "a": 1, + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50,"a":1} 2`] = ` +[ + { + "a": 1, + "h": 0, + "l": 50, + "s": 100, + }, + { + "a": 1, + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50,"a":1} 3`] = ` +[ + { + "a": 1, + "h": 0, + "l": 50, + "s": 100, + }, + { + "a": 1, + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50,"a":1} 4`] = ` +[ + { + "a": 1, + "h": 0, + "l": 50, + "s": 100, + }, + { + "a": 1, + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50,"a":1} 5`] = ` +[ + { + "a": 1, + "h": 0, + "l": 50, + "s": 100, + }, + { + "a": 1, + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50,"a":1} 6`] = ` +[ + { + "a": 1, + "h": 0, + "l": 50, + "s": 100, + }, + { + "a": 1, + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50} 1`] = ` +[ + { + "h": 0, + "l": 50, + "s": 100, + }, + { + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50} 2`] = ` +[ + { + "h": 0, + "l": 50, + "s": 100, + }, + { + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50} 3`] = ` +[ + { + "h": 0, + "l": 50, + "s": 100, + }, + { + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50} 4`] = ` +[ + { + "h": 0, + "l": 50, + "s": 100, + }, + { + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50} 5`] = ` +[ + { + "h": 0, + "l": 50, + "s": 100, + }, + { + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"h":0,"s":100,"l":50} 6`] = ` +[ + { + "h": 0, + "l": 50, + "s": 100, + }, + { + "h": 180, + "l": 50, + "s": 100, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0,"a":1} 1`] = ` +[ + { + "a": 1, + "b": 0, + "g": 0, + "r": 255, + }, + { + "a": 1, + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0,"a":1} 2`] = ` +[ + { + "a": 1, + "b": 0, + "g": 0, + "r": 255, + }, + { + "a": 1, + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0,"a":1} 3`] = ` +[ + { + "a": 1, + "b": 0, + "g": 0, + "r": 255, + }, + { + "a": 1, + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0,"a":1} 4`] = ` +[ + { + "a": 1, + "b": 0, + "g": 0, + "r": 255, + }, + { + "a": 1, + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0,"a":1} 5`] = ` +[ + { + "a": 1, + "b": 0, + "g": 0, + "r": 255, + }, + { + "a": 1, + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0,"a":1} 6`] = ` +[ + { + "a": 1, + "b": 0, + "g": 0, + "r": 255, + }, + { + "a": 1, + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0} 1`] = ` +[ + { + "b": 0, + "g": 0, + "r": 255, + }, + { + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0} 2`] = ` +[ + { + "b": 0, + "g": 0, + "r": 255, + }, + { + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0} 3`] = ` +[ + { + "b": 0, + "g": 0, + "r": 255, + }, + { + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0} 4`] = ` +[ + { + "b": 0, + "g": 0, + "r": 255, + }, + { + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0} 5`] = ` +[ + { + "b": 0, + "g": 0, + "r": 255, + }, + { + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals and auto legacyCSS for {"r":255,"g":0,"b":0} 6`] = ` +[ + { + "b": 0, + "g": 0, + "r": 255, + }, + { + "b": 255, + "g": 255, + "r": 0, + }, +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50% / 1)" 1`] = ` +[ + "hsl(0 100% 50% / 1)", + "hsl(15 100% 50% / 1)", + "hsl(330 100% 50% / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50% / 1)" 2`] = ` +[ + "hsl(0 100% 50% / 1)", + "hsl(120 100% 50% / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50% / 1)" 3`] = ` +[ + "hsl(0 100% 50% / 1)", + "hsl(90 100% 50% / 1)", + "hsl(180 100% 50% / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50% / 1)" 4`] = ` +[ + "hsl(0 100% 50% / 1)", + "hsl(60 100% 50% / 1)", + "hsl(240 100% 50% / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50% / 1)" 5`] = ` +[ + "hsl(0 100% 50% / 1)", + "hsl(30 100% 50% / 1)", + "hsl(240 100% 50% / 1)", + "hsl(120 100% 50% / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50% / 1)" 6`] = ` +[ + "hsl(0 100% 50% / 1)", + "hsl(45 100% 50% / 1)", + "hsl(270 100% 50% / 1)", + "hsl(120 100% 50% / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50%)" 1`] = ` +[ + "hsl(0 100% 50%)", + "hsl(15 100% 50%)", + "hsl(330 100% 50%)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50%)" 2`] = ` +[ + "hsl(0 100% 50%)", + "hsl(120 100% 50%)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50%)" 3`] = ` +[ + "hsl(0 100% 50%)", + "hsl(90 100% 50%)", + "hsl(180 100% 50%)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50%)" 4`] = ` +[ + "hsl(0 100% 50%)", + "hsl(60 100% 50%)", + "hsl(240 100% 50%)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50%)" 5`] = ` +[ + "hsl(0 100% 50%)", + "hsl(30 100% 50%)", + "hsl(240 100% 50%)", + "hsl(120 100% 50%)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "hsl(0 100% 50%)" 6`] = ` +[ + "hsl(0 100% 50%)", + "hsl(45 100% 50%)", + "hsl(270 100% 50%)", + "hsl(120 100% 50%)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0 / 1)" 1`] = ` +[ + "rgb(255 0 0 / 1)", + "rgb(255 63.75 0 / 1)", + "rgb(255 0 127.5 / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0 / 1)" 2`] = ` +[ + "rgb(255 0 0 / 1)", + "rgb(0 255 0 / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0 / 1)" 3`] = ` +[ + "rgb(255 0 0 / 1)", + "rgb(127.5 255 0 / 1)", + "rgb(0 255 255 / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0 / 1)" 4`] = ` +[ + "rgb(255 0 0 / 1)", + "rgb(255 255 0 / 1)", + "rgb(0 0 255 / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0 / 1)" 5`] = ` +[ + "rgb(255 0 0 / 1)", + "rgb(255 127.5 0 / 1)", + "rgb(0 0 255 / 1)", + "rgb(0 255 0 / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0 / 1)" 6`] = ` +[ + "rgb(255 0 0 / 1)", + "rgb(255 191.25 0 / 1)", + "rgb(127.5 0 255 / 1)", + "rgb(0 255 0 / 1)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0)" 1`] = ` +[ + "rgb(255 0 0)", + "rgb(255 63.75 0)", + "rgb(255 0 127.5)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0)" 2`] = ` +[ + "rgb(255 0 0)", + "rgb(0 255 0)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0)" 3`] = ` +[ + "rgb(255 0 0)", + "rgb(127.5 255 0)", + "rgb(0 255 255)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0)" 4`] = ` +[ + "rgb(255 0 0)", + "rgb(255 255 0)", + "rgb(0 0 255)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0)" 5`] = ` +[ + "rgb(255 0 0)", + "rgb(255 127.5 0)", + "rgb(0 0 255)", + "rgb(0 255 0)", +] +`; + +exports[`ColorTranslator harmony tests Subtractive Harmony with decimals for "rgb(255 0 0)" 6`] = ` +[ + "rgb(255 0 0)", + "rgb(255 191.25 0)", + "rgb(127.5 0 255)", + "rgb(0 255 0)", ] `; diff --git a/tests/__snapshots__/hsl.test.ts.snap b/tests/__snapshots__/hsl.test.ts.snap index 7818ead..cdb846d 100644 --- a/tests/__snapshots__/hsl.test.ts.snap +++ b/tests/__snapshots__/hsl.test.ts.snap @@ -1,57 +1,57 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`HSL tests for hsl(0,0%,0%) HSL with percentages {"h":0,"s":"0%","l":"0%"} 1`] = `"rgb(0,0,0)"`; +exports[`HSL tests for hsl(0 0% 0%) HSL with percentages {"h":0,"s":"0%","l":"0%"} 1`] = `"rgb(0 0 0)"`; -exports[`HSL tests for hsl(0,0%,0%) HSL with percentages {"h":0,"s":"0%","l":"0%"} 2`] = `"hsl(0,0%,0%)"`; +exports[`HSL tests for hsl(0 0% 0%) HSL with percentages {"h":0,"s":"0%","l":"0%"} 2`] = `"hsl(0 0% 0%)"`; -exports[`HSL tests for hsl(0,0%,0%) HSLA with percentages {"h":0,"s":"0%","l":"0%","a":1} 1`] = `"rgba(0,0,0,1)"`; +exports[`HSL tests for hsl(0 0% 0%) HSLA with percentages {"h":0,"s":"0%","l":"0%","a":1} 1`] = `"rgb(0 0 0 / 1)"`; -exports[`HSL tests for hsl(0,0%,0%) HSLA with percentages {"h":0,"s":"0%","l":"0%","a":1} 2`] = `"hsla(0,0%,0%,1)"`; +exports[`HSL tests for hsl(0 0% 0%) HSLA with percentages {"h":0,"s":"0%","l":"0%","a":1} 2`] = `"hsl(0 0% 0% / 1)"`; -exports[`HSL tests for hsl(0,0%,50%) HSL with percentages {"h":0,"s":"0%","l":"50%"} 1`] = `"rgb(127.5,127.5,127.5)"`; +exports[`HSL tests for hsl(0 0% 50%) HSL with percentages {"h":0,"s":"0%","l":"50%"} 1`] = `"rgb(127.5 127.5 127.5)"`; -exports[`HSL tests for hsl(0,0%,50%) HSL with percentages {"h":0,"s":"0%","l":"50%"} 2`] = `"hsl(0,0%,50%)"`; +exports[`HSL tests for hsl(0 0% 50%) HSL with percentages {"h":0,"s":"0%","l":"50%"} 2`] = `"hsl(0 0% 50%)"`; -exports[`HSL tests for hsl(0,0%,50%) HSLA with percentages {"h":0,"s":"0%","l":"50%","a":1} 1`] = `"rgba(127.5,127.5,127.5,1)"`; +exports[`HSL tests for hsl(0 0% 50%) HSLA with percentages {"h":0,"s":"0%","l":"50%","a":1} 1`] = `"rgb(127.5 127.5 127.5 / 1)"`; -exports[`HSL tests for hsl(0,0%,50%) HSLA with percentages {"h":0,"s":"0%","l":"50%","a":1} 2`] = `"hsla(0,0%,50%,1)"`; +exports[`HSL tests for hsl(0 0% 50%) HSLA with percentages {"h":0,"s":"0%","l":"50%","a":1} 2`] = `"hsl(0 0% 50% / 1)"`; -exports[`HSL tests for hsl(0,0%,100%) HSL with percentages {"h":0,"s":"0%","l":"100%"} 1`] = `"rgb(255,255,255)"`; +exports[`HSL tests for hsl(0 0% 100%) HSL with percentages {"h":0,"s":"0%","l":"100%"} 1`] = `"rgb(255 255 255)"`; -exports[`HSL tests for hsl(0,0%,100%) HSL with percentages {"h":0,"s":"0%","l":"100%"} 2`] = `"hsl(0,0%,100%)"`; +exports[`HSL tests for hsl(0 0% 100%) HSL with percentages {"h":0,"s":"0%","l":"100%"} 2`] = `"hsl(0 0% 100%)"`; -exports[`HSL tests for hsl(0,0%,100%) HSLA with percentages {"h":0,"s":"0%","l":"100%","a":1} 1`] = `"rgba(255,255,255,1)"`; +exports[`HSL tests for hsl(0 0% 100%) HSLA with percentages {"h":0,"s":"0%","l":"100%","a":1} 1`] = `"rgb(255 255 255 / 1)"`; -exports[`HSL tests for hsl(0,0%,100%) HSLA with percentages {"h":0,"s":"0%","l":"100%","a":1} 2`] = `"hsla(0,0%,100%,1)"`; +exports[`HSL tests for hsl(0 0% 100%) HSLA with percentages {"h":0,"s":"0%","l":"100%","a":1} 2`] = `"hsl(0 0% 100% / 1)"`; -exports[`HSL tests for hsl(0,100%,50%) HSL with percentages {"h":0,"s":"100%","l":"50%"} 1`] = `"rgb(255,0,0)"`; +exports[`HSL tests for hsl(0 100% 50%) HSL with percentages {"h":0,"s":"100%","l":"50%"} 1`] = `"rgb(255 0 0)"`; -exports[`HSL tests for hsl(0,100%,50%) HSL with percentages {"h":0,"s":"100%","l":"50%"} 2`] = `"hsl(0,100%,50%)"`; +exports[`HSL tests for hsl(0 100% 50%) HSL with percentages {"h":0,"s":"100%","l":"50%"} 2`] = `"hsl(0 100% 50%)"`; -exports[`HSL tests for hsl(0,100%,50%) HSLA with percentages {"h":0,"s":"100%","l":"50%","a":1} 1`] = `"rgba(255,0,0,1)"`; +exports[`HSL tests for hsl(0 100% 50%) HSLA with percentages {"h":0,"s":"100%","l":"50%","a":1} 1`] = `"rgb(255 0 0 / 1)"`; -exports[`HSL tests for hsl(0,100%,50%) HSLA with percentages {"h":0,"s":"100%","l":"50%","a":1} 2`] = `"hsla(0,100%,50%,1)"`; +exports[`HSL tests for hsl(0 100% 50%) HSLA with percentages {"h":0,"s":"100%","l":"50%","a":1} 2`] = `"hsl(0 100% 50% / 1)"`; -exports[`HSL tests for hsl(120,100%,50%) HSL with percentages {"h":120,"s":"100%","l":"50%"} 1`] = `"rgb(0,255,0)"`; +exports[`HSL tests for hsl(120 100% 50%) HSL with percentages {"h":120,"s":"100%","l":"50%"} 1`] = `"rgb(0 255 0)"`; -exports[`HSL tests for hsl(120,100%,50%) HSL with percentages {"h":120,"s":"100%","l":"50%"} 2`] = `"hsl(120,100%,50%)"`; +exports[`HSL tests for hsl(120 100% 50%) HSL with percentages {"h":120,"s":"100%","l":"50%"} 2`] = `"hsl(120 100% 50%)"`; -exports[`HSL tests for hsl(120,100%,50%) HSLA with percentages {"h":120,"s":"100%","l":"50%","a":1} 1`] = `"rgba(0,255,0,1)"`; +exports[`HSL tests for hsl(120 100% 50%) HSLA with percentages {"h":120,"s":"100%","l":"50%","a":1} 1`] = `"rgb(0 255 0 / 1)"`; -exports[`HSL tests for hsl(120,100%,50%) HSLA with percentages {"h":120,"s":"100%","l":"50%","a":1} 2`] = `"hsla(120,100%,50%,1)"`; +exports[`HSL tests for hsl(120 100% 50%) HSLA with percentages {"h":120,"s":"100%","l":"50%","a":1} 2`] = `"hsl(120 100% 50% / 1)"`; -exports[`HSL tests for hsl(240,100%,50%) HSL with percentages {"h":240,"s":"100%","l":"50%"} 1`] = `"rgb(0,0,255)"`; +exports[`HSL tests for hsl(240 100% 50%) HSL with percentages {"h":240,"s":"100%","l":"50%"} 1`] = `"rgb(0 0 255)"`; -exports[`HSL tests for hsl(240,100%,50%) HSL with percentages {"h":240,"s":"100%","l":"50%"} 2`] = `"hsl(240,100%,50%)"`; +exports[`HSL tests for hsl(240 100% 50%) HSL with percentages {"h":240,"s":"100%","l":"50%"} 2`] = `"hsl(240 100% 50%)"`; -exports[`HSL tests for hsl(240,100%,50%) HSLA with percentages {"h":240,"s":"100%","l":"50%","a":1} 1`] = `"rgba(0,0,255,1)"`; +exports[`HSL tests for hsl(240 100% 50%) HSLA with percentages {"h":240,"s":"100%","l":"50%","a":1} 1`] = `"rgb(0 0 255 / 1)"`; -exports[`HSL tests for hsl(240,100%,50%) HSLA with percentages {"h":240,"s":"100%","l":"50%","a":1} 2`] = `"hsla(240,100%,50%,1)"`; +exports[`HSL tests for hsl(240 100% 50%) HSLA with percentages {"h":240,"s":"100%","l":"50%","a":1} 2`] = `"hsl(240 100% 50% / 1)"`; -exports[`HSL tests for hsl(300,100%,50%) HSL with percentages {"h":300,"s":"100%","l":"50%"} 1`] = `"rgb(255,0,255)"`; +exports[`HSL tests for hsl(300 100% 50%) HSL with percentages {"h":300,"s":"100%","l":"50%"} 1`] = `"rgb(255 0 255)"`; -exports[`HSL tests for hsl(300,100%,50%) HSL with percentages {"h":300,"s":"100%","l":"50%"} 2`] = `"hsl(300,100%,50%)"`; +exports[`HSL tests for hsl(300 100% 50%) HSL with percentages {"h":300,"s":"100%","l":"50%"} 2`] = `"hsl(300 100% 50%)"`; -exports[`HSL tests for hsl(300,100%,50%) HSLA with percentages {"h":300,"s":"100%","l":"50%","a":1} 1`] = `"rgba(255,0,255,1)"`; +exports[`HSL tests for hsl(300 100% 50%) HSLA with percentages {"h":300,"s":"100%","l":"50%","a":1} 1`] = `"rgb(255 0 255 / 1)"`; -exports[`HSL tests for hsl(300,100%,50%) HSLA with percentages {"h":300,"s":"100%","l":"50%","a":1} 2`] = `"hsla(300,100%,50%,1)"`; +exports[`HSL tests for hsl(300 100% 50%) HSLA with percentages {"h":300,"s":"100%","l":"50%","a":1} 2`] = `"hsl(300 100% 50% / 1)"`; diff --git a/tests/__snapshots__/shades-tints.test.ts.snap b/tests/__snapshots__/shades-tints.test.ts.snap index 11b47b6..0a7a6f4 100644 --- a/tests/__snapshots__/shades-tints.test.ts.snap +++ b/tests/__snapshots__/shades-tints.test.ts.snap @@ -1,42 +1,42 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ColorTranslator shades and tints tests Shades tests from "hsl(0,100%,50%)" with decimals 1`] = ` +exports[`ColorTranslator shades and tints tests Shades tests from "hsl(0 100% 50% / 1)" with decimals 1`] = ` [ - "hsl(0,100%,42%)", - "hsl(0,100%,33%)", - "hsl(0,100%,25%)", - "hsl(0,100%,17%)", - "hsl(0,100%,8%)", + "hsl(0 100% 42% / 1)", + "hsl(0 100% 33% / 1)", + "hsl(0 100% 25% / 1)", + "hsl(0 100% 17% / 1)", + "hsl(0 100% 8% / 1)", ] `; -exports[`ColorTranslator shades and tints tests Shades tests from "hsla(0,100%,50%,1)" with decimals 1`] = ` +exports[`ColorTranslator shades and tints tests Shades tests from "hsl(0 100% 50%)" with decimals 1`] = ` [ - "hsla(0,100%,42%,1)", - "hsla(0,100%,33%,1)", - "hsla(0,100%,25%,1)", - "hsla(0,100%,17%,1)", - "hsla(0,100%,8%,1)", + "hsl(0 100% 42%)", + "hsl(0 100% 33%)", + "hsl(0 100% 25%)", + "hsl(0 100% 17%)", + "hsl(0 100% 8%)", ] `; -exports[`ColorTranslator shades and tints tests Shades tests from "rgb(255,0,0)" with decimals 1`] = ` +exports[`ColorTranslator shades and tints tests Shades tests from "rgb(255 0 0 / 1)" with decimals 1`] = ` [ - "rgb(213,0,0)", - "rgb(170,0,0)", - "rgb(128,0,0)", - "rgb(85,0,0)", - "rgb(43,0,0)", + "rgb(213 0 0 / 1)", + "rgb(170 0 0 / 1)", + "rgb(128 0 0 / 1)", + "rgb(85 0 0 / 1)", + "rgb(43 0 0 / 1)", ] `; -exports[`ColorTranslator shades and tints tests Shades tests from "rgba(255,0,0,1)" with decimals 1`] = ` +exports[`ColorTranslator shades and tints tests Shades tests from "rgb(255 0 0)" with decimals 1`] = ` [ - "rgba(213,0,0,1)", - "rgba(170,0,0,1)", - "rgba(128,0,0,1)", - "rgba(85,0,0,1)", - "rgba(43,0,0,1)", + "rgb(213 0 0)", + "rgb(170 0 0)", + "rgb(128 0 0)", + "rgb(85 0 0)", + "rgb(43 0 0)", ] `; diff --git a/tests/__snapshots__/static-color-conversion.test.ts.snap b/tests/__snapshots__/static-color-conversion.test.ts.snap index 6cc37dd..76829c3 100644 --- a/tests/__snapshots__/static-color-conversion.test.ts.snap +++ b/tests/__snapshots__/static-color-conversion.test.ts.snap @@ -1,8 +1,12 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ColorTranslator static CMYK color conversion for "#000" toCMYK method with decimals from "#000" 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for "#000" toCMYK method with decimals and auto legacyCSS from "#000" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "#000" toCMYKA method with decimals from "#000" 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "#000" toCMYK method with decimals from "#000" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for "#000" toCMYKA method with decimals and auto legacyCSS from "#000" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "#000" toCMYKA method with decimals from "#000" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; exports[`ColorTranslator static CMYK color conversion for "#000" toCMYKAObject method with decimals from "#000" 1`] = ` { @@ -23,9 +27,13 @@ exports[`ColorTranslator static CMYK color conversion for "#000" toCMYKObject me } `; -exports[`ColorTranslator static CMYK color conversion for "#00F" toCMYK method with decimals from "#00F" 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "#00F" toCMYK method with decimals and auto legacyCSS from "#00F" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "#00F" toCMYK method with decimals from "#00F" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "#00F" toCMYKA method with decimals and auto legacyCSS from "#00F" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "#00F" toCMYKA method with decimals from "#00F" 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "#00F" toCMYKA method with decimals from "#00F" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for "#00F" toCMYKAObject method with decimals from "#00F" 1`] = ` { @@ -46,9 +54,13 @@ exports[`ColorTranslator static CMYK color conversion for "#00F" toCMYKObject me } `; -exports[`ColorTranslator static CMYK color conversion for "#0F0" toCMYK method with decimals from "#0F0" 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "#0F0" toCMYK method with decimals and auto legacyCSS from "#0F0" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "#0F0" toCMYKA method with decimals from "#0F0" 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "#0F0" toCMYK method with decimals from "#0F0" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "#0F0" toCMYKA method with decimals and auto legacyCSS from "#0F0" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "#0F0" toCMYKA method with decimals from "#0F0" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for "#0F0" toCMYKAObject method with decimals from "#0F0" 1`] = ` { @@ -69,9 +81,13 @@ exports[`ColorTranslator static CMYK color conversion for "#0F0" toCMYKObject me } `; -exports[`ColorTranslator static CMYK color conversion for "#0FF" toCMYK method with decimals from "#0FF" 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "#0FF" toCMYK method with decimals and auto legacyCSS from "#0FF" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "#0FF" toCMYK method with decimals from "#0FF" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "#0FF" toCMYKA method with decimals from "#0FF" 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "#0FF" toCMYKA method with decimals and auto legacyCSS from "#0FF" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "#0FF" toCMYKA method with decimals from "#0FF" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for "#0FF" toCMYKAObject method with decimals from "#0FF" 1`] = ` { @@ -92,9 +108,13 @@ exports[`ColorTranslator static CMYK color conversion for "#0FF" toCMYKObject me } `; -exports[`ColorTranslator static CMYK color conversion for "#F00" toCMYK method with decimals from "#F00" 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "#F00" toCMYK method with decimals and auto legacyCSS from "#F00" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "#F00" toCMYK method with decimals from "#F00" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "#F00" toCMYKA method with decimals from "#F00" 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "#F00" toCMYKA method with decimals and auto legacyCSS from "#F00" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "#F00" toCMYKA method with decimals from "#F00" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for "#F00" toCMYKAObject method with decimals from "#F00" 1`] = ` { @@ -115,9 +135,13 @@ exports[`ColorTranslator static CMYK color conversion for "#F00" toCMYKObject me } `; -exports[`ColorTranslator static CMYK color conversion for "#F0F" toCMYK method with decimals from "#F0F" 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "#F0F" toCMYK method with decimals and auto legacyCSS from "#F0F" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "#F0F" toCMYK method with decimals from "#F0F" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "#F0F" toCMYKA method with decimals from "#F0F" 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "#F0F" toCMYKA method with decimals and auto legacyCSS from "#F0F" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "#F0F" toCMYKA method with decimals from "#F0F" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for "#F0F" toCMYKAObject method with decimals from "#F0F" 1`] = ` { @@ -138,9 +162,13 @@ exports[`ColorTranslator static CMYK color conversion for "#F0F" toCMYKObject me } `; -exports[`ColorTranslator static CMYK color conversion for "#FF0" toCMYK method with decimals from "#FF0" 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "#FF0" toCMYK method with decimals and auto legacyCSS from "#FF0" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "#FF0" toCMYK method with decimals from "#FF0" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "#FF0" toCMYKA method with decimals and auto legacyCSS from "#FF0" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "#FF0" toCMYKA method with decimals from "#FF0" 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "#FF0" toCMYKA method with decimals from "#FF0" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for "#FF0" toCMYKAObject method with decimals from "#FF0" 1`] = ` { @@ -161,11 +189,15 @@ exports[`ColorTranslator static CMYK color conversion for "#FF0" toCMYKObject me } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 1)" toCMYK method with decimals from "cmyk(0 0 0 1 / 1)" 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 0 0 1 / 1)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 1)" toCMYKA method with decimals from "cmyk(0 0 0 1 / 1)" 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 1)" toCMYK method with decimals from "device-cmyk(0 0 0 1 / 1)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 1)" toCMYKAObject method with decimals from "cmyk(0 0 0 1 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 0 0 1 / 1)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 1)" toCMYKA method with decimals from "device-cmyk(0 0 0 1 / 1)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 1)" toCMYKAObject method with decimals from "device-cmyk(0 0 0 1 / 1)" 1`] = ` { "a": 1, "c": 0, @@ -175,7 +207,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 1)" toCMYKObject method with decimals from "cmyk(0 0 0 1 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 1)" toCMYKObject method with decimals from "device-cmyk(0 0 0 1 / 1)" 1`] = ` { "c": 0, "k": 100, @@ -184,11 +216,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 100%)" toCMYK method with decimals from "cmyk(0 0 0 1 / 100%)" 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 0 0 1 / 100%)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 100%)" toCMYK method with decimals from "device-cmyk(0 0 0 1 / 100%)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 0 0 1 / 100%)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 100%)" toCMYKA method with decimals from "cmyk(0 0 0 1 / 100%)" 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 100%)" toCMYKA method with decimals from "device-cmyk(0 0 0 1 / 100%)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 100%)" toCMYKAObject method with decimals from "cmyk(0 0 0 1 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 100%)" toCMYKAObject method with decimals from "device-cmyk(0 0 0 1 / 100%)" 1`] = ` { "a": 1, "c": 0, @@ -198,7 +234,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 100%)" toCMYKObject method with decimals from "cmyk(0 0 0 1 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1 / 100%)" toCMYKObject method with decimals from "device-cmyk(0 0 0 1 / 100%)" 1`] = ` { "c": 0, "k": 100, @@ -207,11 +243,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1)" toCMYK method with decimals from "cmyk(0 0 0 1)" 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 0 0 1)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1)" toCMYKA method with decimals from "cmyk(0 0 0 1)" 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1)" toCMYK method with decimals from "device-cmyk(0 0 0 1)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1)" toCMYKAObject method with decimals from "cmyk(0 0 0 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 0 0 1)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1)" toCMYKA method with decimals from "device-cmyk(0 0 0 1)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1)" toCMYKAObject method with decimals from "device-cmyk(0 0 0 1)" 1`] = ` { "a": 1, "c": 0, @@ -221,7 +261,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1)" toCMYKObject method with decimals from "cmyk(0 0 0 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 0 1)" toCMYKObject method with decimals from "device-cmyk(0 0 0 1)" 1`] = ` { "c": 0, "k": 100, @@ -230,11 +270,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 0 1)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 1)" toCMYK method with decimals from "cmyk(0 0 1 0 / 1)" 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 0 1 0 / 1)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 1)" toCMYK method with decimals from "device-cmyk(0 0 1 0 / 1)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 1)" toCMYKA method with decimals from "cmyk(0 0 1 0 / 1)" 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 0 1 0 / 1)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 1)" toCMYKAObject method with decimals from "cmyk(0 0 1 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 1)" toCMYKA method with decimals from "device-cmyk(0 0 1 0 / 1)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 1)" toCMYKAObject method with decimals from "device-cmyk(0 0 1 0 / 1)" 1`] = ` { "a": 1, "c": 0, @@ -244,7 +288,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 1)" toCMYKObject method with decimals from "cmyk(0 0 1 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 1)" toCMYKObject method with decimals from "device-cmyk(0 0 1 0 / 1)" 1`] = ` { "c": 0, "k": 0, @@ -253,11 +297,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 100%)" toCMYK method with decimals from "cmyk(0 0 1 0 / 100%)" 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 0 1 0 / 100%)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 100%)" toCMYK method with decimals from "device-cmyk(0 0 1 0 / 100%)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 100%)" toCMYKA method with decimals from "cmyk(0 0 1 0 / 100%)" 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 0 1 0 / 100%)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 100%)" toCMYKAObject method with decimals from "cmyk(0 0 1 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 100%)" toCMYKA method with decimals from "device-cmyk(0 0 1 0 / 100%)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 100%)" toCMYKAObject method with decimals from "device-cmyk(0 0 1 0 / 100%)" 1`] = ` { "a": 1, "c": 0, @@ -267,7 +315,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 100%)" toCMYKObject method with decimals from "cmyk(0 0 1 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0 / 100%)" toCMYKObject method with decimals from "device-cmyk(0 0 1 0 / 100%)" 1`] = ` { "c": 0, "k": 0, @@ -276,11 +324,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0)" toCMYK method with decimals from "cmyk(0 0 1 0)" 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 0 1 0)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0)" toCMYK method with decimals from "device-cmyk(0 0 1 0)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0)" toCMYKA method with decimals from "cmyk(0 0 1 0)" 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 0 1 0)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0)" toCMYKAObject method with decimals from "cmyk(0 0 1 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0)" toCMYKA method with decimals from "device-cmyk(0 0 1 0)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0)" toCMYKAObject method with decimals from "device-cmyk(0 0 1 0)" 1`] = ` { "a": 1, "c": 0, @@ -290,7 +342,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0)" toCMYKObject method with decimals from "cmyk(0 0 1 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 0 1 0)" toCMYKObject method with decimals from "device-cmyk(0 0 1 0)" 1`] = ` { "c": 0, "k": 0, @@ -299,11 +351,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 0 1 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 1)" toCMYK method with decimals from "cmyk(0 1 0 0 / 1)" 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 1 0 0 / 1)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 1)" toCMYK method with decimals from "device-cmyk(0 1 0 0 / 1)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 1 0 0 / 1)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 1)" toCMYKA method with decimals from "cmyk(0 1 0 0 / 1)" 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 1)" toCMYKA method with decimals from "device-cmyk(0 1 0 0 / 1)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 1)" toCMYKAObject method with decimals from "cmyk(0 1 0 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 1)" toCMYKAObject method with decimals from "device-cmyk(0 1 0 0 / 1)" 1`] = ` { "a": 1, "c": 0, @@ -313,7 +369,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 1)" toCMYKObject method with decimals from "cmyk(0 1 0 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 1)" toCMYKObject method with decimals from "device-cmyk(0 1 0 0 / 1)" 1`] = ` { "c": 0, "k": 0, @@ -322,11 +378,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 100%)" toCMYK method with decimals from "cmyk(0 1 0 0 / 100%)" 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 1 0 0 / 100%)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 100%)" toCMYKA method with decimals from "cmyk(0 1 0 0 / 100%)" 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 100%)" toCMYK method with decimals from "device-cmyk(0 1 0 0 / 100%)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 100%)" toCMYKAObject method with decimals from "cmyk(0 1 0 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 1 0 0 / 100%)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 100%)" toCMYKA method with decimals from "device-cmyk(0 1 0 0 / 100%)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 100%)" toCMYKAObject method with decimals from "device-cmyk(0 1 0 0 / 100%)" 1`] = ` { "a": 1, "c": 0, @@ -336,7 +396,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 100%)" toCMYKObject method with decimals from "cmyk(0 1 0 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0 / 100%)" toCMYKObject method with decimals from "device-cmyk(0 1 0 0 / 100%)" 1`] = ` { "c": 0, "k": 0, @@ -345,11 +405,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0)" toCMYK method with decimals from "cmyk(0 1 0 0)" 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 1 0 0)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0)" toCMYK method with decimals from "device-cmyk(0 1 0 0)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 1 0 0)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0)" toCMYKA method with decimals from "cmyk(0 1 0 0)" 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0)" toCMYKA method with decimals from "device-cmyk(0 1 0 0)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0)" toCMYKAObject method with decimals from "cmyk(0 1 0 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0)" toCMYKAObject method with decimals from "device-cmyk(0 1 0 0)" 1`] = ` { "a": 1, "c": 0, @@ -359,7 +423,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0)" toCMYKObject method with decimals from "cmyk(0 1 0 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 0 0)" toCMYKObject method with decimals from "device-cmyk(0 1 0 0)" 1`] = ` { "c": 0, "k": 0, @@ -368,11 +432,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 0 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 1)" toCMYK method with decimals from "cmyk(0 1 1 0 / 1)" 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 1 1 0 / 1)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 1)" toCMYKA method with decimals from "cmyk(0 1 1 0 / 1)" 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 1)" toCMYK method with decimals from "device-cmyk(0 1 1 0 / 1)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 1)" toCMYKAObject method with decimals from "cmyk(0 1 1 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 1 1 0 / 1)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 1)" toCMYKA method with decimals from "device-cmyk(0 1 1 0 / 1)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 1)" toCMYKAObject method with decimals from "device-cmyk(0 1 1 0 / 1)" 1`] = ` { "a": 1, "c": 0, @@ -382,7 +450,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 1)" toCMYKObject method with decimals from "cmyk(0 1 1 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 1)" toCMYKObject method with decimals from "device-cmyk(0 1 1 0 / 1)" 1`] = ` { "c": 0, "k": 0, @@ -391,11 +459,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 100%)" toCMYK method with decimals from "cmyk(0 1 1 0 / 100%)" 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 1 1 0 / 100%)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 100%)" toCMYK method with decimals from "device-cmyk(0 1 1 0 / 100%)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 100%)" toCMYKA method with decimals from "cmyk(0 1 1 0 / 100%)" 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 1 1 0 / 100%)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 100%)" toCMYKAObject method with decimals from "cmyk(0 1 1 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 100%)" toCMYKA method with decimals from "device-cmyk(0 1 1 0 / 100%)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 100%)" toCMYKAObject method with decimals from "device-cmyk(0 1 1 0 / 100%)" 1`] = ` { "a": 1, "c": 0, @@ -405,7 +477,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 100%)" toCMYKObject method with decimals from "cmyk(0 1 1 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0 / 100%)" toCMYKObject method with decimals from "device-cmyk(0 1 1 0 / 100%)" 1`] = ` { "c": 0, "k": 0, @@ -414,11 +486,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0)" toCMYK method with decimals from "cmyk(0 1 1 0)" 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0 1 1 0)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0)" toCMYK method with decimals from "device-cmyk(0 1 1 0)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0)" toCMYKA method with decimals from "cmyk(0 1 1 0)" 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0 1 1 0)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0)" toCMYKAObject method with decimals from "cmyk(0 1 1 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0)" toCMYKA method with decimals from "device-cmyk(0 1 1 0)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0)" toCMYKAObject method with decimals from "device-cmyk(0 1 1 0)" 1`] = ` { "a": 1, "c": 0, @@ -428,7 +504,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0)" toCMYKObject method with decimals from "cmyk(0 1 1 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0 1 1 0)" toCMYKObject method with decimals from "device-cmyk(0 1 1 0)" 1`] = ` { "c": 0, "k": 0, @@ -437,11 +513,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0 1 1 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / 1)" toCMYK method with decimals from "cmyk(0% 0% 0% 100% / 1)" 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 0% 0% 100% / 1)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 1)" toCMYK method with decimals from "device-cmyk(0% 0% 0% 100% / 1)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / 1)" toCMYKA method with decimals from "cmyk(0% 0% 0% 100% / 1)" 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 0% 0% 100% / 1)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / 1)" toCMYKAObject method with decimals from "cmyk(0% 0% 0% 100% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 1)" toCMYKA method with decimals from "device-cmyk(0% 0% 0% 100% / 1)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 1)" toCMYKAObject method with decimals from "device-cmyk(0% 0% 0% 100% / 1)" 1`] = ` { "a": 1, "c": 0, @@ -451,7 +531,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / 1)" toCMYKObject method with decimals from "cmyk(0% 0% 0% 100% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 1)" toCMYKObject method with decimals from "device-cmyk(0% 0% 0% 100% / 1)" 1`] = ` { "c": 0, "k": 100, @@ -460,11 +540,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / 100%)" toCMYK method with decimals from "cmyk(0% 0% 0% 100% / 100%)" 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 0% 0% 100% / 100%)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 100%)" toCMYK method with decimals from "device-cmyk(0% 0% 0% 100% / 100%)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 0% 0% 100% / 100%)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / 100%)" toCMYKA method with decimals from "cmyk(0% 0% 0% 100% / 100%)" 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 100%)" toCMYKA method with decimals from "device-cmyk(0% 0% 0% 100% / 100%)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / 100%)" toCMYKAObject method with decimals from "cmyk(0% 0% 0% 100% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 100%)" toCMYKAObject method with decimals from "device-cmyk(0% 0% 0% 100% / 100%)" 1`] = ` { "a": 1, "c": 0, @@ -474,7 +558,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / 100%)" toCMYKObject method with decimals from "cmyk(0% 0% 0% 100% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100% / 100%)" toCMYKObject method with decimals from "device-cmyk(0% 0% 0% 100% / 100%)" 1`] = ` { "c": 0, "k": 100, @@ -483,11 +567,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100%)" toCMYK method with decimals from "cmyk(0% 0% 0% 100%)" 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 0% 0% 100%)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100%)" toCMYKA method with decimals from "cmyk(0% 0% 0% 100%)" 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100%)" toCMYK method with decimals from "device-cmyk(0% 0% 0% 100%)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100%)" toCMYKAObject method with decimals from "cmyk(0% 0% 0% 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 0% 0% 100%)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100%)" toCMYKA method with decimals from "device-cmyk(0% 0% 0% 100%)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100%)" toCMYKAObject method with decimals from "device-cmyk(0% 0% 0% 100%)" 1`] = ` { "a": 1, "c": 0, @@ -497,7 +585,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100%)" toCMYKObject method with decimals from "cmyk(0% 0% 0% 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 0% 100%)" toCMYKObject method with decimals from "device-cmyk(0% 0% 0% 100%)" 1`] = ` { "c": 0, "k": 100, @@ -506,11 +594,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 0% 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / 1)" toCMYK method with decimals from "cmyk(0% 0% 100% 0% / 1)" 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 0% 100% 0% / 1)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 1)" toCMYK method with decimals from "device-cmyk(0% 0% 100% 0% / 1)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 0% 100% 0% / 1)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / 1)" toCMYKA method with decimals from "cmyk(0% 0% 100% 0% / 1)" 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 1)" toCMYKA method with decimals from "device-cmyk(0% 0% 100% 0% / 1)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / 1)" toCMYKAObject method with decimals from "cmyk(0% 0% 100% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 1)" toCMYKAObject method with decimals from "device-cmyk(0% 0% 100% 0% / 1)" 1`] = ` { "a": 1, "c": 0, @@ -520,7 +612,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / 1)" toCMYKObject method with decimals from "cmyk(0% 0% 100% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 1)" toCMYKObject method with decimals from "device-cmyk(0% 0% 100% 0% / 1)" 1`] = ` { "c": 0, "k": 0, @@ -529,11 +621,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / 100%)" toCMYK method with decimals from "cmyk(0% 0% 100% 0% / 100%)" 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 0% 100% 0% / 100%)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / 100%)" toCMYKA method with decimals from "cmyk(0% 0% 100% 0% / 100%)" 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 100%)" toCMYK method with decimals from "device-cmyk(0% 0% 100% 0% / 100%)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / 100%)" toCMYKAObject method with decimals from "cmyk(0% 0% 100% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 0% 100% 0% / 100%)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 100%)" toCMYKA method with decimals from "device-cmyk(0% 0% 100% 0% / 100%)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 100%)" toCMYKAObject method with decimals from "device-cmyk(0% 0% 100% 0% / 100%)" 1`] = ` { "a": 1, "c": 0, @@ -543,7 +639,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / 100%)" toCMYKObject method with decimals from "cmyk(0% 0% 100% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0% / 100%)" toCMYKObject method with decimals from "device-cmyk(0% 0% 100% 0% / 100%)" 1`] = ` { "c": 0, "k": 0, @@ -552,11 +648,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0%)" toCMYK method with decimals from "cmyk(0% 0% 100% 0%)" 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 0% 100% 0%)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0%)" toCMYK method with decimals from "device-cmyk(0% 0% 100% 0%)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0%)" toCMYKA method with decimals from "cmyk(0% 0% 100% 0%)" 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 0% 100% 0%)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0%)" toCMYKAObject method with decimals from "cmyk(0% 0% 100% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0%)" toCMYKA method with decimals from "device-cmyk(0% 0% 100% 0%)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0%)" toCMYKAObject method with decimals from "device-cmyk(0% 0% 100% 0%)" 1`] = ` { "a": 1, "c": 0, @@ -566,7 +666,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0%)" toCMYKObject method with decimals from "cmyk(0% 0% 100% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 0% 100% 0%)" toCMYKObject method with decimals from "device-cmyk(0% 0% 100% 0%)" 1`] = ` { "c": 0, "k": 0, @@ -575,11 +675,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 0% 100% 0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / 1)" toCMYK method with decimals from "cmyk(0% 100% 0% 0% / 1)" 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 100% 0% 0% / 1)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 1)" toCMYK method with decimals from "device-cmyk(0% 100% 0% 0% / 1)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / 1)" toCMYKA method with decimals from "cmyk(0% 100% 0% 0% / 1)" 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 100% 0% 0% / 1)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / 1)" toCMYKAObject method with decimals from "cmyk(0% 100% 0% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 1)" toCMYKA method with decimals from "device-cmyk(0% 100% 0% 0% / 1)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 1)" toCMYKAObject method with decimals from "device-cmyk(0% 100% 0% 0% / 1)" 1`] = ` { "a": 1, "c": 0, @@ -589,7 +693,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / 1)" toCMYKObject method with decimals from "cmyk(0% 100% 0% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 1)" toCMYKObject method with decimals from "device-cmyk(0% 100% 0% 0% / 1)" 1`] = ` { "c": 0, "k": 0, @@ -598,11 +702,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / 100%)" toCMYK method with decimals from "cmyk(0% 100% 0% 0% / 100%)" 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 100% 0% 0% / 100%)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 100%)" toCMYK method with decimals from "device-cmyk(0% 100% 0% 0% / 100%)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / 100%)" toCMYKA method with decimals from "cmyk(0% 100% 0% 0% / 100%)" 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 100% 0% 0% / 100%)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / 100%)" toCMYKAObject method with decimals from "cmyk(0% 100% 0% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 100%)" toCMYKA method with decimals from "device-cmyk(0% 100% 0% 0% / 100%)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 100%)" toCMYKAObject method with decimals from "device-cmyk(0% 100% 0% 0% / 100%)" 1`] = ` { "a": 1, "c": 0, @@ -612,7 +720,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / 100%)" toCMYKObject method with decimals from "cmyk(0% 100% 0% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0% / 100%)" toCMYKObject method with decimals from "device-cmyk(0% 100% 0% 0% / 100%)" 1`] = ` { "c": 0, "k": 0, @@ -621,11 +729,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0%)" toCMYK method with decimals from "cmyk(0% 100% 0% 0%)" 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 100% 0% 0%)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0%)" toCMYK method with decimals from "device-cmyk(0% 100% 0% 0%)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 100% 0% 0%)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0%)" toCMYKA method with decimals from "cmyk(0% 100% 0% 0%)" 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0%)" toCMYKA method with decimals from "device-cmyk(0% 100% 0% 0%)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0%)" toCMYKAObject method with decimals from "cmyk(0% 100% 0% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0%)" toCMYKAObject method with decimals from "device-cmyk(0% 100% 0% 0%)" 1`] = ` { "a": 1, "c": 0, @@ -635,7 +747,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0%)" toCMYKObject method with decimals from "cmyk(0% 100% 0% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 0% 0%)" toCMYKObject method with decimals from "device-cmyk(0% 100% 0% 0%)" 1`] = ` { "c": 0, "k": 0, @@ -644,11 +756,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 0% 0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% / 1)" toCMYK method with decimals from "cmyk(0% 100% 100% 0% / 1)" 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 100% 100% 0% / 1)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% / 1)" toCMYKA method with decimals from "cmyk(0% 100% 100% 0% / 1)" 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 1)" toCMYK method with decimals from "device-cmyk(0% 100% 100% 0% / 1)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% / 1)" toCMYKAObject method with decimals from "cmyk(0% 100% 100% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 100% 100% 0% / 1)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 1)" toCMYKA method with decimals from "device-cmyk(0% 100% 100% 0% / 1)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 1)" toCMYKAObject method with decimals from "device-cmyk(0% 100% 100% 0% / 1)" 1`] = ` { "a": 1, "c": 0, @@ -658,7 +774,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% / 1)" toCMYKObject method with decimals from "cmyk(0% 100% 100% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 1)" toCMYKObject method with decimals from "device-cmyk(0% 100% 100% 0% / 1)" 1`] = ` { "c": 0, "k": 0, @@ -667,11 +783,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% / 100%)" toCMYK method with decimals from "cmyk(0% 100% 100% 0% / 100%)" 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 100% 100% 0% / 100%)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 100%)" toCMYK method with decimals from "device-cmyk(0% 100% 100% 0% / 100%)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 100% 100% 0% / 100%)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% / 100%)" toCMYKA method with decimals from "cmyk(0% 100% 100% 0% / 100%)" 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 100%)" toCMYKA method with decimals from "device-cmyk(0% 100% 100% 0% / 100%)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% / 100%)" toCMYKAObject method with decimals from "cmyk(0% 100% 100% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 100%)" toCMYKAObject method with decimals from "device-cmyk(0% 100% 100% 0% / 100%)" 1`] = ` { "a": 1, "c": 0, @@ -681,7 +801,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% / 100%)" toCMYKObject method with decimals from "cmyk(0% 100% 100% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0% / 100%)" toCMYKObject method with decimals from "device-cmyk(0% 100% 100% 0% / 100%)" 1`] = ` { "c": 0, "k": 0, @@ -690,11 +810,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0%)" toCMYK method with decimals from "cmyk(0% 100% 100% 0%)" 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0% 100% 100% 0%)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0%)" toCMYKA method with decimals from "cmyk(0% 100% 100% 0%)" 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0%)" toCMYK method with decimals from "device-cmyk(0% 100% 100% 0%)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0%)" toCMYKAObject method with decimals from "cmyk(0% 100% 100% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0% 100% 100% 0%)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0%)" toCMYKA method with decimals from "device-cmyk(0% 100% 100% 0%)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0%)" toCMYKAObject method with decimals from "device-cmyk(0% 100% 100% 0%)" 1`] = ` { "a": 1, "c": 0, @@ -704,7 +828,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0%)" toCMYKObject method with decimals from "cmyk(0% 100% 100% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0% 100% 100% 0%)" toCMYKObject method with decimals from "device-cmyk(0% 100% 100% 0%)" 1`] = ` { "c": 0, "k": 0, @@ -713,11 +837,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0% 100% 100% 0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%)" toCMYK method with decimals from "cmyk(0%,0%,0%,100%)" 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0%,0%,0%,100%)" 1`] = `"device-cmyk(0%,0%,0%,100%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%)" toCMYK method with decimals from "device-cmyk(0%,0%,0%,100%)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%)" toCMYKA method with decimals from "cmyk(0%,0%,0%,100%)" 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0%,0%,0%,100%)" 1`] = `"device-cmyk(0%,0%,0%,100%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%)" toCMYKAObject method with decimals from "cmyk(0%,0%,0%,100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%)" toCMYKA method with decimals from "device-cmyk(0%,0%,0%,100%)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%)" toCMYKAObject method with decimals from "device-cmyk(0%,0%,0%,100%)" 1`] = ` { "a": 1, "c": 0, @@ -727,7 +855,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%)" toCMYKObject method with decimals from "cmyk(0%,0%,0%,100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%)" toCMYKObject method with decimals from "device-cmyk(0%,0%,0%,100%)" 1`] = ` { "c": 0, "k": 100, @@ -736,11 +864,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%,1)" toCMYK method with decimals from "cmyk(0%,0%,0%,100%,1)" 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0%,0%,0%,100%,1)" 1`] = `"device-cmyk(0%,0%,0%,100%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%,1)" toCMYK method with decimals from "device-cmyk(0%,0%,0%,100%,1)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%,1)" toCMYKA method with decimals from "cmyk(0%,0%,0%,100%,1)" 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0%,0%,0%,100%,1)" 1`] = `"device-cmyk(0%,0%,0%,100%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%,1)" toCMYKAObject method with decimals from "cmyk(0%,0%,0%,100%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%,1)" toCMYKA method with decimals from "device-cmyk(0%,0%,0%,100%,1)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%,1)" toCMYKAObject method with decimals from "device-cmyk(0%,0%,0%,100%,1)" 1`] = ` { "a": 1, "c": 0, @@ -750,7 +882,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%,1) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%,1)" toCMYKObject method with decimals from "cmyk(0%,0%,0%,100%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,0%,100%,1)" toCMYKObject method with decimals from "device-cmyk(0%,0%,0%,100%,1)" 1`] = ` { "c": 0, "k": 100, @@ -759,11 +891,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,0%,100%,1) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%)" toCMYK method with decimals from "cmyk(0%,0%,100%,0%)" 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0%,0%,100%,0%)" 1`] = `"device-cmyk(0%,0%,100%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%)" toCMYK method with decimals from "device-cmyk(0%,0%,100%,0%)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%)" toCMYKA method with decimals from "cmyk(0%,0%,100%,0%)" 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0%,0%,100%,0%)" 1`] = `"device-cmyk(0%,0%,100%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%)" toCMYKAObject method with decimals from "cmyk(0%,0%,100%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%)" toCMYKA method with decimals from "device-cmyk(0%,0%,100%,0%)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%)" toCMYKAObject method with decimals from "device-cmyk(0%,0%,100%,0%)" 1`] = ` { "a": 1, "c": 0, @@ -773,7 +909,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%)" toCMYKObject method with decimals from "cmyk(0%,0%,100%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%)" toCMYKObject method with decimals from "device-cmyk(0%,0%,100%,0%)" 1`] = ` { "c": 0, "k": 0, @@ -782,11 +918,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%,1)" toCMYK method with decimals from "cmyk(0%,0%,100%,0%,1)" 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0%,0%,100%,0%,1)" 1`] = `"device-cmyk(0%,0%,100%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%,1)" toCMYK method with decimals from "device-cmyk(0%,0%,100%,0%,1)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0%,0%,100%,0%,1)" 1`] = `"device-cmyk(0%,0%,100%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%,1)" toCMYKA method with decimals from "cmyk(0%,0%,100%,0%,1)" 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%,1)" toCMYKA method with decimals from "device-cmyk(0%,0%,100%,0%,1)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%,1)" toCMYKAObject method with decimals from "cmyk(0%,0%,100%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%,1)" toCMYKAObject method with decimals from "device-cmyk(0%,0%,100%,0%,1)" 1`] = ` { "a": 1, "c": 0, @@ -796,7 +936,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%,1) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%,1)" toCMYKObject method with decimals from "cmyk(0%,0%,100%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,0%,100%,0%,1)" toCMYKObject method with decimals from "device-cmyk(0%,0%,100%,0%,1)" 1`] = ` { "c": 0, "k": 0, @@ -805,11 +945,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,0%,100%,0%,1) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%)" toCMYK method with decimals from "cmyk(0%,100%,0%,0%)" 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0%,100%,0%,0%)" 1`] = `"device-cmyk(0%,100%,0%,0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%)" toCMYKA method with decimals from "cmyk(0%,100%,0%,0%)" 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%)" toCMYK method with decimals from "device-cmyk(0%,100%,0%,0%)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%)" toCMYKAObject method with decimals from "cmyk(0%,100%,0%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0%,100%,0%,0%)" 1`] = `"device-cmyk(0%,100%,0%,0%,1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%)" toCMYKA method with decimals from "device-cmyk(0%,100%,0%,0%)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%)" toCMYKAObject method with decimals from "device-cmyk(0%,100%,0%,0%)" 1`] = ` { "a": 1, "c": 0, @@ -819,7 +963,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%)" toCMYKObject method with decimals from "cmyk(0%,100%,0%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%)" toCMYKObject method with decimals from "device-cmyk(0%,100%,0%,0%)" 1`] = ` { "c": 0, "k": 0, @@ -828,11 +972,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%,1)" toCMYK method with decimals from "cmyk(0%,100%,0%,0%,1)" 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0%,100%,0%,0%,1)" 1`] = `"device-cmyk(0%,100%,0%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%,1)" toCMYK method with decimals from "device-cmyk(0%,100%,0%,0%,1)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0%,100%,0%,0%,1)" 1`] = `"device-cmyk(0%,100%,0%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%,1)" toCMYKA method with decimals from "cmyk(0%,100%,0%,0%,1)" 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%,1)" toCMYKA method with decimals from "device-cmyk(0%,100%,0%,0%,1)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%,1)" toCMYKAObject method with decimals from "cmyk(0%,100%,0%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%,1)" toCMYKAObject method with decimals from "device-cmyk(0%,100%,0%,0%,1)" 1`] = ` { "a": 1, "c": 0, @@ -842,7 +990,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%,1) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%,1)" toCMYKObject method with decimals from "cmyk(0%,100%,0%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,0%,0%,1)" toCMYKObject method with decimals from "device-cmyk(0%,100%,0%,0%,1)" 1`] = ` { "c": 0, "k": 0, @@ -851,11 +999,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,0%,0%,1) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%)" toCMYK method with decimals from "cmyk(0%,100%,100%,0%)" 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0%,100%,100%,0%)" 1`] = `"device-cmyk(0%,100%,100%,0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%)" toCMYKA method with decimals from "cmyk(0%,100%,100%,0%)" 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%)" toCMYK method with decimals from "device-cmyk(0%,100%,100%,0%)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%)" toCMYKAObject method with decimals from "cmyk(0%,100%,100%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0%,100%,100%,0%)" 1`] = `"device-cmyk(0%,100%,100%,0%,1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%)" toCMYKA method with decimals from "device-cmyk(0%,100%,100%,0%)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%)" toCMYKAObject method with decimals from "device-cmyk(0%,100%,100%,0%)" 1`] = ` { "a": 1, "c": 0, @@ -865,7 +1017,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%)" toCMYKObject method with decimals from "cmyk(0%,100%,100%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%)" toCMYKObject method with decimals from "device-cmyk(0%,100%,100%,0%)" 1`] = ` { "c": 0, "k": 0, @@ -874,11 +1026,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%,1)" toCMYK method with decimals from "cmyk(0%,100%,100%,0%,1)" 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0%,100%,100%,0%,1)" 1`] = `"device-cmyk(0%,100%,100%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%,1)" toCMYK method with decimals from "device-cmyk(0%,100%,100%,0%,1)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%,1)" toCMYKA method with decimals from "cmyk(0%,100%,100%,0%,1)" 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0%,100%,100%,0%,1)" 1`] = `"device-cmyk(0%,100%,100%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%,1)" toCMYKAObject method with decimals from "cmyk(0%,100%,100%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%,1)" toCMYKA method with decimals from "device-cmyk(0%,100%,100%,0%,1)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%,1)" toCMYKAObject method with decimals from "device-cmyk(0%,100%,100%,0%,1)" 1`] = ` { "a": 1, "c": 0, @@ -888,7 +1044,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%, } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%,1)" toCMYKObject method with decimals from "cmyk(0%,100%,100%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0%,100%,100%,0%,1)" toCMYKObject method with decimals from "device-cmyk(0%,100%,100%,0%,1)" 1`] = ` { "c": 0, "k": 0, @@ -897,11 +1053,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0%,100%,100%,0%, } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1)" toCMYK method with decimals from "cmyk(0,0,0,1)" 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0,0,0,1)" 1`] = `"device-cmyk(0%,0%,0%,100%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1)" toCMYK method with decimals from "device-cmyk(0,0,0,1)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1)" toCMYKA method with decimals from "cmyk(0,0,0,1)" 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0,0,0,1)" 1`] = `"device-cmyk(0%,0%,0%,100%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1)" toCMYKAObject method with decimals from "cmyk(0,0,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1)" toCMYKA method with decimals from "device-cmyk(0,0,0,1)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1)" toCMYKAObject method with decimals from "device-cmyk(0,0,0,1)" 1`] = ` { "a": 1, "c": 0, @@ -911,7 +1071,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1)" toCMYKObject method with decimals from "cmyk(0,0,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1)" toCMYKObject method with decimals from "device-cmyk(0,0,0,1)" 1`] = ` { "c": 0, "k": 100, @@ -920,11 +1080,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1,1)" toCMYK method with decimals from "cmyk(0,0,0,1,1)" 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0,0,0,1,1)" 1`] = `"device-cmyk(0%,0%,0%,100%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1,1)" toCMYK method with decimals from "device-cmyk(0,0,0,1,1)" 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1,1)" toCMYKA method with decimals from "cmyk(0,0,0,1,1)" 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0,0,0,1,1)" 1`] = `"device-cmyk(0%,0%,0%,100%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1,1)" toCMYKAObject method with decimals from "cmyk(0,0,0,1,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1,1)" toCMYKA method with decimals from "device-cmyk(0,0,0,1,1)" 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1,1)" toCMYKAObject method with decimals from "device-cmyk(0,0,0,1,1)" 1`] = ` { "a": 1, "c": 0, @@ -934,7 +1098,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1,1)" toCMYKObject method with decimals from "cmyk(0,0,0,1,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,0,1,1)" toCMYKObject method with decimals from "device-cmyk(0,0,0,1,1)" 1`] = ` { "c": 0, "k": 100, @@ -943,11 +1107,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,0,1,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0)" toCMYK method with decimals from "cmyk(0,0,1,0)" 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0,0,1,0)" 1`] = `"device-cmyk(0%,0%,100%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0)" toCMYK method with decimals from "device-cmyk(0,0,1,0)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0,0,1,0)" 1`] = `"device-cmyk(0%,0%,100%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0)" toCMYKA method with decimals from "cmyk(0,0,1,0)" 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0)" toCMYKA method with decimals from "device-cmyk(0,0,1,0)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0)" toCMYKAObject method with decimals from "cmyk(0,0,1,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0)" toCMYKAObject method with decimals from "device-cmyk(0,0,1,0)" 1`] = ` { "a": 1, "c": 0, @@ -957,7 +1125,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0)" toCMYKObject method with decimals from "cmyk(0,0,1,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0)" toCMYKObject method with decimals from "device-cmyk(0,0,1,0)" 1`] = ` { "c": 0, "k": 0, @@ -966,11 +1134,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0,1)" toCMYK method with decimals from "cmyk(0,0,1,0,1)" 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0,0,1,0,1)" 1`] = `"device-cmyk(0%,0%,100%,0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0,1)" toCMYKA method with decimals from "cmyk(0,0,1,0,1)" 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0,1)" toCMYK method with decimals from "device-cmyk(0,0,1,0,1)" 1`] = `"device-cmyk(0% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0,1)" toCMYKAObject method with decimals from "cmyk(0,0,1,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0,0,1,0,1)" 1`] = `"device-cmyk(0%,0%,100%,0%,1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0,1)" toCMYKA method with decimals from "device-cmyk(0,0,1,0,1)" 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0,1)" toCMYKAObject method with decimals from "device-cmyk(0,0,1,0,1)" 1`] = ` { "a": 1, "c": 0, @@ -980,7 +1152,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0,1)" toCMYKObject method with decimals from "cmyk(0,0,1,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,0,1,0,1)" toCMYKObject method with decimals from "device-cmyk(0,0,1,0,1)" 1`] = ` { "c": 0, "k": 0, @@ -989,11 +1161,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,0,1,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0)" toCMYK method with decimals from "cmyk(0,1,0,0)" 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0,1,0,0)" 1`] = `"device-cmyk(0%,100%,0%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0)" toCMYK method with decimals from "device-cmyk(0,1,0,0)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0,1,0,0)" 1`] = `"device-cmyk(0%,100%,0%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0)" toCMYKA method with decimals from "cmyk(0,1,0,0)" 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0)" toCMYKA method with decimals from "device-cmyk(0,1,0,0)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0)" toCMYKAObject method with decimals from "cmyk(0,1,0,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0)" toCMYKAObject method with decimals from "device-cmyk(0,1,0,0)" 1`] = ` { "a": 1, "c": 0, @@ -1003,7 +1179,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0)" toCMYKObject method with decimals from "cmyk(0,1,0,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0)" toCMYKObject method with decimals from "device-cmyk(0,1,0,0)" 1`] = ` { "c": 0, "k": 0, @@ -1012,11 +1188,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0,1)" toCMYK method with decimals from "cmyk(0,1,0,0,1)" 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0,1,0,0,1)" 1`] = `"device-cmyk(0%,100%,0%,0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0,1)" toCMYKA method with decimals from "cmyk(0,1,0,0,1)" 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0,1)" toCMYK method with decimals from "device-cmyk(0,1,0,0,1)" 1`] = `"device-cmyk(0% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0,1)" toCMYKAObject method with decimals from "cmyk(0,1,0,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0,1,0,0,1)" 1`] = `"device-cmyk(0%,100%,0%,0%,1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0,1)" toCMYKA method with decimals from "device-cmyk(0,1,0,0,1)" 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0,1)" toCMYKAObject method with decimals from "device-cmyk(0,1,0,0,1)" 1`] = ` { "a": 1, "c": 0, @@ -1026,7 +1206,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0,1)" toCMYKObject method with decimals from "cmyk(0,1,0,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,0,0,1)" toCMYKObject method with decimals from "device-cmyk(0,1,0,0,1)" 1`] = ` { "c": 0, "k": 0, @@ -1035,11 +1215,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,0,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0)" toCMYK method with decimals from "cmyk(0,1,1,0)" 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0,1,1,0)" 1`] = `"device-cmyk(0%,100%,100%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0)" toCMYK method with decimals from "device-cmyk(0,1,1,0)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0)" toCMYKA method with decimals from "cmyk(0,1,1,0)" 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0,1,1,0)" 1`] = `"device-cmyk(0%,100%,100%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0)" toCMYKAObject method with decimals from "cmyk(0,1,1,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0)" toCMYKA method with decimals from "device-cmyk(0,1,1,0)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0)" toCMYKAObject method with decimals from "device-cmyk(0,1,1,0)" 1`] = ` { "a": 1, "c": 0, @@ -1049,7 +1233,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0)" toCMYKObject method with decimals from "cmyk(0,1,1,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0)" toCMYKObject method with decimals from "device-cmyk(0,1,1,0)" 1`] = ` { "c": 0, "k": 0, @@ -1058,11 +1242,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0,1)" toCMYK method with decimals from "cmyk(0,1,1,0,1)" 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(0,1,1,0,1)" 1`] = `"device-cmyk(0%,100%,100%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0,1)" toCMYK method with decimals from "device-cmyk(0,1,1,0,1)" 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0,1)" toCMYKA method with decimals from "cmyk(0,1,1,0,1)" 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(0,1,1,0,1)" 1`] = `"device-cmyk(0%,100%,100%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0,1)" toCMYKAObject method with decimals from "cmyk(0,1,1,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0,1)" toCMYKA method with decimals from "device-cmyk(0,1,1,0,1)" 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0,1)" toCMYKAObject method with decimals from "device-cmyk(0,1,1,0,1)" 1`] = ` { "a": 1, "c": 0, @@ -1072,7 +1260,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0,1)" toCMYKObject method with decimals from "cmyk(0,1,1,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(0,1,1,0,1)" toCMYKObject method with decimals from "device-cmyk(0,1,1,0,1)" 1`] = ` { "c": 0, "k": 0, @@ -1081,11 +1269,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(0,1,1,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 1)" toCMYK method with decimals from "cmyk(1 0 0 0 / 1)" 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1 0 0 0 / 1)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 1)" toCMYK method with decimals from "device-cmyk(1 0 0 0 / 1)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 1)" toCMYKA method with decimals from "cmyk(1 0 0 0 / 1)" 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1 0 0 0 / 1)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 1)" toCMYKAObject method with decimals from "cmyk(1 0 0 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 1)" toCMYKA method with decimals from "device-cmyk(1 0 0 0 / 1)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 1)" toCMYKAObject method with decimals from "device-cmyk(1 0 0 0 / 1)" 1`] = ` { "a": 1, "c": 100, @@ -1095,7 +1287,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 1)" toCMYKObject method with decimals from "cmyk(1 0 0 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 1)" toCMYKObject method with decimals from "device-cmyk(1 0 0 0 / 1)" 1`] = ` { "c": 100, "k": 0, @@ -1104,11 +1296,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 100%)" toCMYK method with decimals from "cmyk(1 0 0 0 / 100%)" 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1 0 0 0 / 100%)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 100%)" toCMYK method with decimals from "device-cmyk(1 0 0 0 / 100%)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1 0 0 0 / 100%)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 100%)" toCMYKA method with decimals from "cmyk(1 0 0 0 / 100%)" 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 100%)" toCMYKA method with decimals from "device-cmyk(1 0 0 0 / 100%)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 100%)" toCMYKAObject method with decimals from "cmyk(1 0 0 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 100%)" toCMYKAObject method with decimals from "device-cmyk(1 0 0 0 / 100%)" 1`] = ` { "a": 1, "c": 100, @@ -1118,7 +1314,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 100%)" toCMYKObject method with decimals from "cmyk(1 0 0 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0 / 100%)" toCMYKObject method with decimals from "device-cmyk(1 0 0 0 / 100%)" 1`] = ` { "c": 100, "k": 0, @@ -1127,11 +1323,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0)" toCMYK method with decimals from "cmyk(1 0 0 0)" 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1 0 0 0)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0)" toCMYKA method with decimals from "cmyk(1 0 0 0)" 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0)" toCMYK method with decimals from "device-cmyk(1 0 0 0)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0)" toCMYKAObject method with decimals from "cmyk(1 0 0 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1 0 0 0)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0)" toCMYKA method with decimals from "device-cmyk(1 0 0 0)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0)" toCMYKAObject method with decimals from "device-cmyk(1 0 0 0)" 1`] = ` { "a": 1, "c": 100, @@ -1141,7 +1341,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0)" toCMYKObject method with decimals from "cmyk(1 0 0 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 0 0)" toCMYKObject method with decimals from "device-cmyk(1 0 0 0)" 1`] = ` { "c": 100, "k": 0, @@ -1150,11 +1350,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 0 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 1)" toCMYK method with decimals from "cmyk(1 0 1 0 / 1)" 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1 0 1 0 / 1)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 1)" toCMYK method with decimals from "device-cmyk(1 0 1 0 / 1)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1 0 1 0 / 1)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 1)" toCMYKA method with decimals from "cmyk(1 0 1 0 / 1)" 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 1)" toCMYKA method with decimals from "device-cmyk(1 0 1 0 / 1)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 1)" toCMYKAObject method with decimals from "cmyk(1 0 1 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 1)" toCMYKAObject method with decimals from "device-cmyk(1 0 1 0 / 1)" 1`] = ` { "a": 1, "c": 100, @@ -1164,7 +1368,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 1)" toCMYKObject method with decimals from "cmyk(1 0 1 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 1)" toCMYKObject method with decimals from "device-cmyk(1 0 1 0 / 1)" 1`] = ` { "c": 100, "k": 0, @@ -1173,11 +1377,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 100%)" toCMYK method with decimals from "cmyk(1 0 1 0 / 100%)" 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1 0 1 0 / 100%)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 100%)" toCMYKA method with decimals from "cmyk(1 0 1 0 / 100%)" 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 100%)" toCMYK method with decimals from "device-cmyk(1 0 1 0 / 100%)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 100%)" toCMYKAObject method with decimals from "cmyk(1 0 1 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1 0 1 0 / 100%)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 100%)" toCMYKA method with decimals from "device-cmyk(1 0 1 0 / 100%)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 100%)" toCMYKAObject method with decimals from "device-cmyk(1 0 1 0 / 100%)" 1`] = ` { "a": 1, "c": 100, @@ -1187,7 +1395,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 100%)" toCMYKObject method with decimals from "cmyk(1 0 1 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0 / 100%)" toCMYKObject method with decimals from "device-cmyk(1 0 1 0 / 100%)" 1`] = ` { "c": 100, "k": 0, @@ -1196,11 +1404,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0)" toCMYK method with decimals from "cmyk(1 0 1 0)" 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1 0 1 0)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0)" toCMYK method with decimals from "device-cmyk(1 0 1 0)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0)" toCMYKA method with decimals from "cmyk(1 0 1 0)" 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1 0 1 0)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0)" toCMYKAObject method with decimals from "cmyk(1 0 1 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0)" toCMYKA method with decimals from "device-cmyk(1 0 1 0)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0)" toCMYKAObject method with decimals from "device-cmyk(1 0 1 0)" 1`] = ` { "a": 1, "c": 100, @@ -1210,7 +1422,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0)" toCMYKObject method with decimals from "cmyk(1 0 1 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 0 1 0)" toCMYKObject method with decimals from "device-cmyk(1 0 1 0)" 1`] = ` { "c": 100, "k": 0, @@ -1219,11 +1431,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 0 1 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 1)" toCMYK method with decimals from "cmyk(1 1 0 0 / 1)" 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1 1 0 0 / 1)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 1)" toCMYK method with decimals from "device-cmyk(1 1 0 0 / 1)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 1)" toCMYKA method with decimals from "cmyk(1 1 0 0 / 1)" 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1 1 0 0 / 1)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 1)" toCMYKAObject method with decimals from "cmyk(1 1 0 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 1)" toCMYKA method with decimals from "device-cmyk(1 1 0 0 / 1)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 1)" toCMYKAObject method with decimals from "device-cmyk(1 1 0 0 / 1)" 1`] = ` { "a": 1, "c": 100, @@ -1233,7 +1449,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 1)" toCMYKObject method with decimals from "cmyk(1 1 0 0 / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 1)" toCMYKObject method with decimals from "device-cmyk(1 1 0 0 / 1)" 1`] = ` { "c": 100, "k": 0, @@ -1242,11 +1458,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 1)" to } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 100%)" toCMYK method with decimals from "cmyk(1 1 0 0 / 100%)" 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1 1 0 0 / 100%)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 100%)" toCMYK method with decimals from "device-cmyk(1 1 0 0 / 100%)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 100%)" toCMYKA method with decimals from "cmyk(1 1 0 0 / 100%)" 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1 1 0 0 / 100%)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 100%)" toCMYKAObject method with decimals from "cmyk(1 1 0 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 100%)" toCMYKA method with decimals from "device-cmyk(1 1 0 0 / 100%)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 100%)" toCMYKAObject method with decimals from "device-cmyk(1 1 0 0 / 100%)" 1`] = ` { "a": 1, "c": 100, @@ -1256,7 +1476,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 100%)" toCMYKObject method with decimals from "cmyk(1 1 0 0 / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0 / 100%)" toCMYKObject method with decimals from "device-cmyk(1 1 0 0 / 100%)" 1`] = ` { "c": 100, "k": 0, @@ -1265,11 +1485,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0 / 100%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0)" toCMYK method with decimals from "cmyk(1 1 0 0)" 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1 1 0 0)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0)" toCMYK method with decimals from "device-cmyk(1 1 0 0)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1 1 0 0)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0)" toCMYKA method with decimals from "cmyk(1 1 0 0)" 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0)" toCMYKA method with decimals from "device-cmyk(1 1 0 0)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0)" toCMYKAObject method with decimals from "cmyk(1 1 0 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0)" toCMYKAObject method with decimals from "device-cmyk(1 1 0 0)" 1`] = ` { "a": 1, "c": 100, @@ -1279,7 +1503,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0)" toCMYKObject method with decimals from "cmyk(1 1 0 0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1 1 0 0)" toCMYKObject method with decimals from "device-cmyk(1 1 0 0)" 1`] = ` { "c": 100, "k": 0, @@ -1288,11 +1512,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1 1 0 0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0)" toCMYK method with decimals from "cmyk(1,0,0,0)" 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1,0,0,0)" 1`] = `"device-cmyk(100%,0%,0%,0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0)" toCMYKA method with decimals from "cmyk(1,0,0,0)" 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0)" toCMYK method with decimals from "device-cmyk(1,0,0,0)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0)" toCMYKAObject method with decimals from "cmyk(1,0,0,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1,0,0,0)" 1`] = `"device-cmyk(100%,0%,0%,0%,1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0)" toCMYKA method with decimals from "device-cmyk(1,0,0,0)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0)" toCMYKAObject method with decimals from "device-cmyk(1,0,0,0)" 1`] = ` { "a": 1, "c": 100, @@ -1302,7 +1530,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0)" toCMYKObject method with decimals from "cmyk(1,0,0,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0)" toCMYKObject method with decimals from "device-cmyk(1,0,0,0)" 1`] = ` { "c": 100, "k": 0, @@ -1311,11 +1539,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0,1)" toCMYK method with decimals from "cmyk(1,0,0,0,1)" 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1,0,0,0,1)" 1`] = `"device-cmyk(100%,0%,0%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0,1)" toCMYK method with decimals from "device-cmyk(1,0,0,0,1)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1,0,0,0,1)" 1`] = `"device-cmyk(100%,0%,0%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0,1)" toCMYKA method with decimals from "cmyk(1,0,0,0,1)" 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0,1)" toCMYKA method with decimals from "device-cmyk(1,0,0,0,1)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0,1)" toCMYKAObject method with decimals from "cmyk(1,0,0,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0,1)" toCMYKAObject method with decimals from "device-cmyk(1,0,0,0,1)" 1`] = ` { "a": 1, "c": 100, @@ -1325,7 +1557,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0,1)" toCMYKObject method with decimals from "cmyk(1,0,0,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,0,0,1)" toCMYKObject method with decimals from "device-cmyk(1,0,0,0,1)" 1`] = ` { "c": 100, "k": 0, @@ -1334,11 +1566,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,0,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0)" toCMYK method with decimals from "cmyk(1,0,1,0)" 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1,0,1,0)" 1`] = `"device-cmyk(100%,0%,100%,0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0)" toCMYKA method with decimals from "cmyk(1,0,1,0)" 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0)" toCMYK method with decimals from "device-cmyk(1,0,1,0)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0)" toCMYKAObject method with decimals from "cmyk(1,0,1,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1,0,1,0)" 1`] = `"device-cmyk(100%,0%,100%,0%,1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0)" toCMYKA method with decimals from "device-cmyk(1,0,1,0)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0)" toCMYKAObject method with decimals from "device-cmyk(1,0,1,0)" 1`] = ` { "a": 1, "c": 100, @@ -1348,7 +1584,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0)" toCMYKObject method with decimals from "cmyk(1,0,1,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0)" toCMYKObject method with decimals from "device-cmyk(1,0,1,0)" 1`] = ` { "c": 100, "k": 0, @@ -1357,11 +1593,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0,1)" toCMYK method with decimals from "cmyk(1,0,1,0,1)" 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1,0,1,0,1)" 1`] = `"device-cmyk(100%,0%,100%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0,1)" toCMYK method with decimals from "device-cmyk(1,0,1,0,1)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0,1)" toCMYKA method with decimals from "cmyk(1,0,1,0,1)" 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1,0,1,0,1)" 1`] = `"device-cmyk(100%,0%,100%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0,1)" toCMYKAObject method with decimals from "cmyk(1,0,1,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0,1)" toCMYKA method with decimals from "device-cmyk(1,0,1,0,1)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0,1)" toCMYKAObject method with decimals from "device-cmyk(1,0,1,0,1)" 1`] = ` { "a": 1, "c": 100, @@ -1371,7 +1611,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0,1)" toCMYKObject method with decimals from "cmyk(1,0,1,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,0,1,0,1)" toCMYKObject method with decimals from "device-cmyk(1,0,1,0,1)" 1`] = ` { "c": 100, "k": 0, @@ -1380,11 +1620,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,0,1,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0)" toCMYK method with decimals from "cmyk(1,1,0,0)" 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1,1,0,0)" 1`] = `"device-cmyk(100%,100%,0%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0)" toCMYK method with decimals from "device-cmyk(1,1,0,0)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0)" toCMYKA method with decimals from "cmyk(1,1,0,0)" 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1,1,0,0)" 1`] = `"device-cmyk(100%,100%,0%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0)" toCMYKAObject method with decimals from "cmyk(1,1,0,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0)" toCMYKA method with decimals from "device-cmyk(1,1,0,0)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0)" toCMYKAObject method with decimals from "device-cmyk(1,1,0,0)" 1`] = ` { "a": 1, "c": 100, @@ -1394,7 +1638,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0)" toCMYKObject method with decimals from "cmyk(1,1,0,0)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0)" toCMYKObject method with decimals from "device-cmyk(1,1,0,0)" 1`] = ` { "c": 100, "k": 0, @@ -1403,11 +1647,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0)" toCMYK } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0,1)" toCMYK method with decimals from "cmyk(1,1,0,0,1)" 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(1,1,0,0,1)" 1`] = `"device-cmyk(100%,100%,0%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0,1)" toCMYK method with decimals from "device-cmyk(1,1,0,0,1)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0,1)" toCMYKA method with decimals from "cmyk(1,1,0,0,1)" 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(1,1,0,0,1)" 1`] = `"device-cmyk(100%,100%,0%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0,1)" toCMYKAObject method with decimals from "cmyk(1,1,0,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0,1)" toCMYKA method with decimals from "device-cmyk(1,1,0,0,1)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0,1)" toCMYKAObject method with decimals from "device-cmyk(1,1,0,0,1)" 1`] = ` { "a": 1, "c": 100, @@ -1417,7 +1665,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0,1)" toCMYKObject method with decimals from "cmyk(1,1,0,0,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(1,1,0,0,1)" toCMYKObject method with decimals from "device-cmyk(1,1,0,0,1)" 1`] = ` { "c": 100, "k": 0, @@ -1426,11 +1674,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(1,1,0,0,1)" toCM } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / 1)" toCMYK method with decimals from "cmyk(100% 0% 0% 0% / 1)" 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100% 0% 0% 0% / 1)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 1)" toCMYK method with decimals from "device-cmyk(100% 0% 0% 0% / 1)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100% 0% 0% 0% / 1)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / 1)" toCMYKA method with decimals from "cmyk(100% 0% 0% 0% / 1)" 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 1)" toCMYKA method with decimals from "device-cmyk(100% 0% 0% 0% / 1)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / 1)" toCMYKAObject method with decimals from "cmyk(100% 0% 0% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 1)" toCMYKAObject method with decimals from "device-cmyk(100% 0% 0% 0% / 1)" 1`] = ` { "a": 1, "c": 100, @@ -1440,7 +1692,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / 1)" toCMYKObject method with decimals from "cmyk(100% 0% 0% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 1)" toCMYKObject method with decimals from "device-cmyk(100% 0% 0% 0% / 1)" 1`] = ` { "c": 100, "k": 0, @@ -1449,11 +1701,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / 100%)" toCMYK method with decimals from "cmyk(100% 0% 0% 0% / 100%)" 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100% 0% 0% 0% / 100%)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / 100%)" toCMYKA method with decimals from "cmyk(100% 0% 0% 0% / 100%)" 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 100%)" toCMYK method with decimals from "device-cmyk(100% 0% 0% 0% / 100%)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / 100%)" toCMYKAObject method with decimals from "cmyk(100% 0% 0% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100% 0% 0% 0% / 100%)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 100%)" toCMYKA method with decimals from "device-cmyk(100% 0% 0% 0% / 100%)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 100%)" toCMYKAObject method with decimals from "device-cmyk(100% 0% 0% 0% / 100%)" 1`] = ` { "a": 1, "c": 100, @@ -1463,7 +1719,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / 100%)" toCMYKObject method with decimals from "cmyk(100% 0% 0% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0% / 100%)" toCMYKObject method with decimals from "device-cmyk(100% 0% 0% 0% / 100%)" 1`] = ` { "c": 100, "k": 0, @@ -1472,11 +1728,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0% / } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0%)" toCMYK method with decimals from "cmyk(100% 0% 0% 0%)" 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100% 0% 0% 0%)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0%)" toCMYK method with decimals from "device-cmyk(100% 0% 0% 0%)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100% 0% 0% 0%)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0%)" toCMYKA method with decimals from "cmyk(100% 0% 0% 0%)" 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0%)" toCMYKA method with decimals from "device-cmyk(100% 0% 0% 0%)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0%)" toCMYKAObject method with decimals from "cmyk(100% 0% 0% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0%)" toCMYKAObject method with decimals from "device-cmyk(100% 0% 0% 0%)" 1`] = ` { "a": 1, "c": 100, @@ -1486,7 +1746,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0%)" toCMYKObject method with decimals from "cmyk(100% 0% 0% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 0% 0%)" toCMYKObject method with decimals from "device-cmyk(100% 0% 0% 0%)" 1`] = ` { "c": 100, "k": 0, @@ -1495,11 +1755,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 0% 0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% / 1)" toCMYK method with decimals from "cmyk(100% 0% 100% 0% / 1)" 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100% 0% 100% 0% / 1)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% / 1)" toCMYKA method with decimals from "cmyk(100% 0% 100% 0% / 1)" 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 1)" toCMYK method with decimals from "device-cmyk(100% 0% 100% 0% / 1)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% / 1)" toCMYKAObject method with decimals from "cmyk(100% 0% 100% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100% 0% 100% 0% / 1)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 1)" toCMYKA method with decimals from "device-cmyk(100% 0% 100% 0% / 1)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 1)" toCMYKAObject method with decimals from "device-cmyk(100% 0% 100% 0% / 1)" 1`] = ` { "a": 1, "c": 100, @@ -1509,7 +1773,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% / 1)" toCMYKObject method with decimals from "cmyk(100% 0% 100% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 1)" toCMYKObject method with decimals from "device-cmyk(100% 0% 100% 0% / 1)" 1`] = ` { "c": 100, "k": 0, @@ -1518,11 +1782,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% / 100%)" toCMYK method with decimals from "cmyk(100% 0% 100% 0% / 100%)" 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100% 0% 100% 0% / 100%)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 100%)" toCMYK method with decimals from "device-cmyk(100% 0% 100% 0% / 100%)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% / 100%)" toCMYKA method with decimals from "cmyk(100% 0% 100% 0% / 100%)" 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100% 0% 100% 0% / 100%)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% / 100%)" toCMYKAObject method with decimals from "cmyk(100% 0% 100% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 100%)" toCMYKA method with decimals from "device-cmyk(100% 0% 100% 0% / 100%)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 100%)" toCMYKAObject method with decimals from "device-cmyk(100% 0% 100% 0% / 100%)" 1`] = ` { "a": 1, "c": 100, @@ -1532,7 +1800,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% / 100%)" toCMYKObject method with decimals from "cmyk(100% 0% 100% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0% / 100%)" toCMYKObject method with decimals from "device-cmyk(100% 0% 100% 0% / 100%)" 1`] = ` { "c": 100, "k": 0, @@ -1541,11 +1809,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0%)" toCMYK method with decimals from "cmyk(100% 0% 100% 0%)" 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100% 0% 100% 0%)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0%)" toCMYK method with decimals from "device-cmyk(100% 0% 100% 0%)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0%)" toCMYKA method with decimals from "cmyk(100% 0% 100% 0%)" 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100% 0% 100% 0%)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0%)" toCMYKAObject method with decimals from "cmyk(100% 0% 100% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0%)" toCMYKA method with decimals from "device-cmyk(100% 0% 100% 0%)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0%)" toCMYKAObject method with decimals from "device-cmyk(100% 0% 100% 0%)" 1`] = ` { "a": 1, "c": 100, @@ -1555,7 +1827,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0%)" toCMYKObject method with decimals from "cmyk(100% 0% 100% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 0% 100% 0%)" toCMYKObject method with decimals from "device-cmyk(100% 0% 100% 0%)" 1`] = ` { "c": 100, "k": 0, @@ -1564,11 +1836,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 0% 100% 0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% / 1)" toCMYK method with decimals from "cmyk(100% 100% 0% 0% / 1)" 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100% 100% 0% 0% / 1)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 1)" toCMYK method with decimals from "device-cmyk(100% 100% 0% 0% / 1)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% / 1)" toCMYKA method with decimals from "cmyk(100% 100% 0% 0% / 1)" 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100% 100% 0% 0% / 1)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% / 1)" toCMYKAObject method with decimals from "cmyk(100% 100% 0% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 1)" toCMYKA method with decimals from "device-cmyk(100% 100% 0% 0% / 1)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 1)" toCMYKAObject method with decimals from "device-cmyk(100% 100% 0% 0% / 1)" 1`] = ` { "a": 1, "c": 100, @@ -1578,7 +1854,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% / 1)" toCMYKObject method with decimals from "cmyk(100% 100% 0% 0% / 1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 1)" toCMYKObject method with decimals from "device-cmyk(100% 100% 0% 0% / 1)" 1`] = ` { "c": 100, "k": 0, @@ -1587,11 +1863,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% / 100%)" toCMYK method with decimals from "cmyk(100% 100% 0% 0% / 100%)" 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 100%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100% 100% 0% 0% / 100%)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 100%)" toCMYK method with decimals from "device-cmyk(100% 100% 0% 0% / 100%)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 100%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100% 100% 0% 0% / 100%)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% / 100%)" toCMYKA method with decimals from "cmyk(100% 100% 0% 0% / 100%)" 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 100%)" toCMYKA method with decimals from "device-cmyk(100% 100% 0% 0% / 100%)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% / 100%)" toCMYKAObject method with decimals from "cmyk(100% 100% 0% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 100%)" toCMYKAObject method with decimals from "device-cmyk(100% 100% 0% 0% / 100%)" 1`] = ` { "a": 1, "c": 100, @@ -1601,7 +1881,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% / 100%)" toCMYKObject method with decimals from "cmyk(100% 100% 0% 0% / 100%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0% / 100%)" toCMYKObject method with decimals from "device-cmyk(100% 100% 0% 0% / 100%)" 1`] = ` { "c": 100, "k": 0, @@ -1610,11 +1890,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0% } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0%)" toCMYK method with decimals from "cmyk(100% 100% 0% 0%)" 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100% 100% 0% 0%)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0%)" toCMYKA method with decimals from "cmyk(100% 100% 0% 0%)" 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0%)" toCMYK method with decimals from "device-cmyk(100% 100% 0% 0%)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0%)" toCMYKAObject method with decimals from "cmyk(100% 100% 0% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100% 100% 0% 0%)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0%)" toCMYKA method with decimals from "device-cmyk(100% 100% 0% 0%)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0%)" toCMYKAObject method with decimals from "device-cmyk(100% 100% 0% 0%)" 1`] = ` { "a": 1, "c": 100, @@ -1624,7 +1908,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0%)" toCMYKObject method with decimals from "cmyk(100% 100% 0% 0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100% 100% 0% 0%)" toCMYKObject method with decimals from "device-cmyk(100% 100% 0% 0%)" 1`] = ` { "c": 100, "k": 0, @@ -1633,11 +1917,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100% 100% 0% 0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%)" toCMYK method with decimals from "cmyk(100%,0%,0%,0%)" 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100%,0%,0%,0%)" 1`] = `"device-cmyk(100%,0%,0%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%)" toCMYK method with decimals from "device-cmyk(100%,0%,0%,0%)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100%,0%,0%,0%)" 1`] = `"device-cmyk(100%,0%,0%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%)" toCMYKA method with decimals from "cmyk(100%,0%,0%,0%)" 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%)" toCMYKA method with decimals from "device-cmyk(100%,0%,0%,0%)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%)" toCMYKAObject method with decimals from "cmyk(100%,0%,0%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%)" toCMYKAObject method with decimals from "device-cmyk(100%,0%,0%,0%)" 1`] = ` { "a": 1, "c": 100, @@ -1647,7 +1935,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%)" toCMYKObject method with decimals from "cmyk(100%,0%,0%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%)" toCMYKObject method with decimals from "device-cmyk(100%,0%,0%,0%)" 1`] = ` { "c": 100, "k": 0, @@ -1656,11 +1944,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%)" } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%,1)" toCMYK method with decimals from "cmyk(100%,0%,0%,0%,1)" 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100%,0%,0%,0%,1)" 1`] = `"device-cmyk(100%,0%,0%,0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%,1)" toCMYKA method with decimals from "cmyk(100%,0%,0%,0%,1)" 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%,1)" toCMYK method with decimals from "device-cmyk(100%,0%,0%,0%,1)" 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%,1)" toCMYKAObject method with decimals from "cmyk(100%,0%,0%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100%,0%,0%,0%,1)" 1`] = `"device-cmyk(100%,0%,0%,0%,1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%,1)" toCMYKA method with decimals from "device-cmyk(100%,0%,0%,0%,1)" 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%,1)" toCMYKAObject method with decimals from "device-cmyk(100%,0%,0%,0%,1)" 1`] = ` { "a": 1, "c": 100, @@ -1670,7 +1962,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%,1) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%,1)" toCMYKObject method with decimals from "cmyk(100%,0%,0%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,0%,0%,1)" toCMYKObject method with decimals from "device-cmyk(100%,0%,0%,0%,1)" 1`] = ` { "c": 100, "k": 0, @@ -1679,11 +1971,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,0%,0%,1) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%)" toCMYK method with decimals from "cmyk(100%,0%,100%,0%)" 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100%,0%,100%,0%)" 1`] = `"device-cmyk(100%,0%,100%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%)" toCMYK method with decimals from "device-cmyk(100%,0%,100%,0%)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%)" toCMYKA method with decimals from "cmyk(100%,0%,100%,0%)" 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100%,0%,100%,0%)" 1`] = `"device-cmyk(100%,0%,100%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%)" toCMYKAObject method with decimals from "cmyk(100%,0%,100%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%)" toCMYKA method with decimals from "device-cmyk(100%,0%,100%,0%)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%)" toCMYKAObject method with decimals from "device-cmyk(100%,0%,100%,0%)" 1`] = ` { "a": 1, "c": 100, @@ -1693,7 +1989,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%)" toCMYKObject method with decimals from "cmyk(100%,0%,100%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%)" toCMYKObject method with decimals from "device-cmyk(100%,0%,100%,0%)" 1`] = ` { "c": 100, "k": 0, @@ -1702,11 +1998,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%,1)" toCMYK method with decimals from "cmyk(100%,0%,100%,0%,1)" 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100%,0%,100%,0%,1)" 1`] = `"device-cmyk(100%,0%,100%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%,1)" toCMYK method with decimals from "device-cmyk(100%,0%,100%,0%,1)" 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%,1)" toCMYKA method with decimals from "cmyk(100%,0%,100%,0%,1)" 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100%,0%,100%,0%,1)" 1`] = `"device-cmyk(100%,0%,100%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%,1)" toCMYKAObject method with decimals from "cmyk(100%,0%,100%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%,1)" toCMYKA method with decimals from "device-cmyk(100%,0%,100%,0%,1)" 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%,1)" toCMYKAObject method with decimals from "device-cmyk(100%,0%,100%,0%,1)" 1`] = ` { "a": 1, "c": 100, @@ -1716,7 +2016,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%, } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%,1)" toCMYKObject method with decimals from "cmyk(100%,0%,100%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,0%,100%,0%,1)" toCMYKObject method with decimals from "device-cmyk(100%,0%,100%,0%,1)" 1`] = ` { "c": 100, "k": 0, @@ -1725,11 +2025,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,0%,100%,0%, } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%)" toCMYK method with decimals from "cmyk(100%,100%,0%,0%)" 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100%,100%,0%,0%)" 1`] = `"device-cmyk(100%,100%,0%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%)" toCMYK method with decimals from "device-cmyk(100%,100%,0%,0%)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%)" toCMYKA method with decimals from "cmyk(100%,100%,0%,0%)" 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100%,100%,0%,0%)" 1`] = `"device-cmyk(100%,100%,0%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%)" toCMYKAObject method with decimals from "cmyk(100%,100%,0%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%)" toCMYKA method with decimals from "device-cmyk(100%,100%,0%,0%)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%)" toCMYKAObject method with decimals from "device-cmyk(100%,100%,0%,0%)" 1`] = ` { "a": 1, "c": 100, @@ -1739,7 +2043,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%)" toCMYKObject method with decimals from "cmyk(100%,100%,0%,0%)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%)" toCMYKObject method with decimals from "device-cmyk(100%,100%,0%,0%)" 1`] = ` { "c": 100, "k": 0, @@ -1748,11 +2052,15 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%) } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%,1)" toCMYK method with decimals from "cmyk(100%,100%,0%,0%,1)" 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%,1)" toCMYK method with decimals and auto legacyCSS from "device-cmyk(100%,100%,0%,0%,1)" 1`] = `"device-cmyk(100%,100%,0%,0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%,1)" toCMYK method with decimals from "device-cmyk(100%,100%,0%,0%,1)" 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%,1)" toCMYKA method with decimals and auto legacyCSS from "device-cmyk(100%,100%,0%,0%,1)" 1`] = `"device-cmyk(100%,100%,0%,0%,1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%,1)" toCMYKA method with decimals from "cmyk(100%,100%,0%,0%,1)" 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%,1)" toCMYKA method with decimals from "device-cmyk(100%,100%,0%,0%,1)" 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%,1)" toCMYKAObject method with decimals from "cmyk(100%,100%,0%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%,1)" toCMYKAObject method with decimals from "device-cmyk(100%,100%,0%,0%,1)" 1`] = ` { "a": 1, "c": 100, @@ -1762,7 +2070,7 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%, } `; -exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%,1)" toCMYKObject method with decimals from "cmyk(100%,100%,0%,0%,1)" 1`] = ` +exports[`ColorTranslator static CMYK color conversion for "device-cmyk(100%,100%,0%,0%,1)" toCMYKObject method with decimals from "device-cmyk(100%,100%,0%,0%,1)" 1`] = ` { "c": 100, "k": 0, @@ -1771,9 +2079,13 @@ exports[`ColorTranslator static CMYK color conversion for "cmyk(100%,100%,0%,0%, } `; -exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"0%","k":"100%"} toCMYK method with decimals from {"c":"0%","m":"0%","y":"0%","k":"100%"} 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"0%","k":"100%"} toCMYK method with decimals and auto legacyCSS from {"c":"0%","m":"0%","y":"0%","k":"100%"} 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"0%","k":"100%"} toCMYKA method with decimals from {"c":"0%","m":"0%","y":"0%","k":"100%"} 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"0%","k":"100%"} toCMYK method with decimals from {"c":"0%","m":"0%","y":"0%","k":"100%"} 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"0%","k":"100%"} toCMYKA method with decimals and auto legacyCSS from {"c":"0%","m":"0%","y":"0%","k":"100%"} 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"0%","k":"100%"} toCMYKA method with decimals from {"c":"0%","m":"0%","y":"0%","k":"100%"} 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"0%","k":"100%"} toCMYKAObject method with decimals from {"c":"0%","m":"0%","y":"0%","k":"100%"} 1`] = ` { @@ -1794,9 +2106,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"100%","k":"0%"} toCMYK method with decimals from {"c":"0%","m":"0%","y":"100%","k":"0%"} 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"100%","k":"0%"} toCMYK method with decimals and auto legacyCSS from {"c":"0%","m":"0%","y":"100%","k":"0%"} 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"100%","k":"0%"} toCMYK method with decimals from {"c":"0%","m":"0%","y":"100%","k":"0%"} 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"100%","k":"0%"} toCMYKA method with decimals and auto legacyCSS from {"c":"0%","m":"0%","y":"100%","k":"0%"} 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"100%","k":"0%"} toCMYKA method with decimals from {"c":"0%","m":"0%","y":"100%","k":"0%"} 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"100%","k":"0%"} toCMYKA method with decimals from {"c":"0%","m":"0%","y":"100%","k":"0%"} 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y":"100%","k":"0%"} toCMYKAObject method with decimals from {"c":"0%","m":"0%","y":"100%","k":"0%"} 1`] = ` { @@ -1817,9 +2133,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"0%","y" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"0%","k":"0%"} toCMYK method with decimals from {"c":"0%","m":"100%","y":"0%","k":"0%"} 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"0%","k":"0%"} toCMYK method with decimals and auto legacyCSS from {"c":"0%","m":"100%","y":"0%","k":"0%"} 1`] = `"device-cmyk(0% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"0%","k":"0%"} toCMYKA method with decimals from {"c":"0%","m":"100%","y":"0%","k":"0%"} 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"0%","k":"0%"} toCMYK method with decimals from {"c":"0%","m":"100%","y":"0%","k":"0%"} 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"0%","k":"0%"} toCMYKA method with decimals and auto legacyCSS from {"c":"0%","m":"100%","y":"0%","k":"0%"} 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"0%","k":"0%"} toCMYKA method with decimals from {"c":"0%","m":"100%","y":"0%","k":"0%"} 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"0%","k":"0%"} toCMYKAObject method with decimals from {"c":"0%","m":"100%","y":"0%","k":"0%"} 1`] = ` { @@ -1840,9 +2160,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%"," } `; -exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"100%","k":"0%"} toCMYK method with decimals from {"c":"0%","m":"100%","y":"100%","k":"0%"} 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"100%","k":"0%"} toCMYK method with decimals and auto legacyCSS from {"c":"0%","m":"100%","y":"100%","k":"0%"} 1`] = `"device-cmyk(0% 100% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"100%","k":"0%"} toCMYK method with decimals from {"c":"0%","m":"100%","y":"100%","k":"0%"} 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"100%","k":"0%"} toCMYKA method with decimals from {"c":"0%","m":"100%","y":"100%","k":"0%"} 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"100%","k":"0%"} toCMYKA method with decimals and auto legacyCSS from {"c":"0%","m":"100%","y":"100%","k":"0%"} 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"100%","k":"0%"} toCMYKA method with decimals from {"c":"0%","m":"100%","y":"100%","k":"0%"} 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%","y":"100%","k":"0%"} toCMYKAObject method with decimals from {"c":"0%","m":"100%","y":"100%","k":"0%"} 1`] = ` { @@ -1863,9 +2187,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":"0%","m":"100%"," } `; -exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"0%","k":"0%"} toCMYK method with decimals from {"c":"100%","m":"0%","y":"0%","k":"0%"} 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"0%","k":"0%"} toCMYK method with decimals and auto legacyCSS from {"c":"100%","m":"0%","y":"0%","k":"0%"} 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"0%","k":"0%"} toCMYK method with decimals from {"c":"100%","m":"0%","y":"0%","k":"0%"} 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"0%","k":"0%"} toCMYKA method with decimals from {"c":"100%","m":"0%","y":"0%","k":"0%"} 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"0%","k":"0%"} toCMYKA method with decimals and auto legacyCSS from {"c":"100%","m":"0%","y":"0%","k":"0%"} 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"0%","k":"0%"} toCMYKA method with decimals from {"c":"100%","m":"0%","y":"0%","k":"0%"} 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"0%","k":"0%"} toCMYKAObject method with decimals from {"c":"100%","m":"0%","y":"0%","k":"0%"} 1`] = ` { @@ -1886,9 +2214,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%"," } `; -exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"100%","k":"0%"} toCMYK method with decimals from {"c":"100%","m":"0%","y":"100%","k":"0%"} 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"100%","k":"0%"} toCMYK method with decimals and auto legacyCSS from {"c":"100%","m":"0%","y":"100%","k":"0%"} 1`] = `"device-cmyk(100% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"100%","k":"0%"} toCMYK method with decimals from {"c":"100%","m":"0%","y":"100%","k":"0%"} 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"100%","k":"0%"} toCMYKA method with decimals from {"c":"100%","m":"0%","y":"100%","k":"0%"} 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"100%","k":"0%"} toCMYKA method with decimals and auto legacyCSS from {"c":"100%","m":"0%","y":"100%","k":"0%"} 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"100%","k":"0%"} toCMYKA method with decimals from {"c":"100%","m":"0%","y":"100%","k":"0%"} 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%","y":"100%","k":"0%"} toCMYKAObject method with decimals from {"c":"100%","m":"0%","y":"100%","k":"0%"} 1`] = ` { @@ -1909,9 +2241,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"0%"," } `; -exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"100%","y":"0%","k":"0%"} toCMYK method with decimals from {"c":"100%","m":"100%","y":"0%","k":"0%"} 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"100%","y":"0%","k":"0%"} toCMYK method with decimals and auto legacyCSS from {"c":"100%","m":"100%","y":"0%","k":"0%"} 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"100%","y":"0%","k":"0%"} toCMYK method with decimals from {"c":"100%","m":"100%","y":"0%","k":"0%"} 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"100%","y":"0%","k":"0%"} toCMYKA method with decimals and auto legacyCSS from {"c":"100%","m":"100%","y":"0%","k":"0%"} 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"100%","y":"0%","k":"0%"} toCMYKA method with decimals from {"c":"100%","m":"100%","y":"0%","k":"0%"} 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"100%","y":"0%","k":"0%"} toCMYKA method with decimals from {"c":"100%","m":"100%","y":"0%","k":"0%"} 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"100%","y":"0%","k":"0%"} toCMYKAObject method with decimals from {"c":"100%","m":"100%","y":"0%","k":"0%"} 1`] = ` { @@ -1932,9 +2268,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":"100%","m":"100%" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1,"a":1} toCMYK method with decimals from {"c":0,"m":0,"y":0,"k":1,"a":1} 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":0,"y":0,"k":1,"a":1} 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1,"a":1} toCMYKA method with decimals from {"c":0,"m":0,"y":0,"k":1,"a":1} 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1,"a":1} toCMYK method with decimals from {"c":0,"m":0,"y":0,"k":1,"a":1} 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":0,"y":0,"k":1,"a":1} 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1,"a":1} toCMYKA method with decimals from {"c":0,"m":0,"y":0,"k":1,"a":1} 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1,"a":1} toCMYKAObject method with decimals from {"c":0,"m":0,"y":0,"k":1,"a":1} 1`] = ` { @@ -1955,9 +2295,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1} toCMYK method with decimals from {"c":0,"m":0,"y":0,"k":1} 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":0,"y":0,"k":1} 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1} toCMYK method with decimals from {"c":0,"m":0,"y":0,"k":1} 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":0,"y":0,"k":1} 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1} toCMYKA method with decimals from {"c":0,"m":0,"y":0,"k":1} 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1} toCMYKA method with decimals from {"c":0,"m":0,"y":0,"k":1} 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":1} toCMYKAObject method with decimals from {"c":0,"m":0,"y":0,"k":1} 1`] = ` { @@ -1978,9 +2322,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100,"a":1} toCMYK method with decimals from {"c":0,"m":0,"y":0,"k":100,"a":1} 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":0,"y":0,"k":100,"a":1} 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100,"a":1} toCMYKA method with decimals from {"c":0,"m":0,"y":0,"k":100,"a":1} 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100,"a":1} toCMYK method with decimals from {"c":0,"m":0,"y":0,"k":100,"a":1} 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":0,"y":0,"k":100,"a":1} 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100,"a":1} toCMYKA method with decimals from {"c":0,"m":0,"y":0,"k":100,"a":1} 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100,"a":1} toCMYKAObject method with decimals from {"c":0,"m":0,"y":0,"k":100,"a":1} 1`] = ` { @@ -2001,9 +2349,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100} toCMYK method with decimals from {"c":0,"m":0,"y":0,"k":100} 1`] = `"cmyk(0%,0%,0%,100%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":0,"y":0,"k":100} 1`] = `"device-cmyk(0% 0% 0% 100%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100} toCMYK method with decimals from {"c":0,"m":0,"y":0,"k":100} 1`] = `"device-cmyk(0% 0% 0% 100%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100} toCMYKA method with decimals from {"c":0,"m":0,"y":0,"k":100} 1`] = `"cmyk(0%,0%,0%,100%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":0,"y":0,"k":100} 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100} toCMYKA method with decimals from {"c":0,"m":0,"y":0,"k":100} 1`] = `"device-cmyk(0% 0% 0% 100% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k":100} toCMYKAObject method with decimals from {"c":0,"m":0,"y":0,"k":100} 1`] = ` { @@ -2024,9 +2376,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":0,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":0,"y":1,"k":0,"a":1} 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":0,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":0,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(0% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":0,"y":1,"k":0,"a":1} 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":0,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":0,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0,"a":1} toCMYKAObject method with decimals from {"c":0,"m":0,"y":1,"k":0,"a":1} 1`] = ` { @@ -2047,9 +2403,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0} toCMYK method with decimals from {"c":0,"m":0,"y":1,"k":0} 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":0,"y":1,"k":0} 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0} toCMYK method with decimals from {"c":0,"m":0,"y":1,"k":0} 1`] = `"device-cmyk(0% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0} toCMYKA method with decimals from {"c":0,"m":0,"y":1,"k":0} 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":0,"y":1,"k":0} 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0} toCMYKA method with decimals from {"c":0,"m":0,"y":1,"k":0} 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k":0} toCMYKAObject method with decimals from {"c":0,"m":0,"y":1,"k":0} 1`] = ` { @@ -2070,9 +2430,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":1,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":0,"y":100,"k":0,"a":1} 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":0,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":0,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":0,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":0,"y":100,"k":0,"a":1} 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":0,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0,"a":1} toCMYKAObject method with decimals from {"c":0,"m":0,"y":100,"k":0,"a":1} 1`] = ` { @@ -2093,9 +2457,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100," } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0} toCMYK method with decimals from {"c":0,"m":0,"y":100,"k":0} 1`] = `"cmyk(0%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":0,"y":100,"k":0} 1`] = `"device-cmyk(0% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0} toCMYKA method with decimals from {"c":0,"m":0,"y":100,"k":0} 1`] = `"cmyk(0%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0} toCMYK method with decimals from {"c":0,"m":0,"y":100,"k":0} 1`] = `"device-cmyk(0% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":0,"y":100,"k":0} 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0} toCMYKA method with decimals from {"c":0,"m":0,"y":100,"k":0} 1`] = `"device-cmyk(0% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100,"k":0} toCMYKAObject method with decimals from {"c":0,"m":0,"y":100,"k":0} 1`] = ` { @@ -2116,9 +2484,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":0,"y":100," } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":1,"y":0,"k":0,"a":1} 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":1,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":1,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":1,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":1,"y":0,"k":0,"a":1} 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":1,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0,"a":1} toCMYKAObject method with decimals from {"c":0,"m":1,"y":0,"k":0,"a":1} 1`] = ` { @@ -2139,9 +2511,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0} toCMYK method with decimals from {"c":0,"m":1,"y":0,"k":0} 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":1,"y":0,"k":0} 1`] = `"device-cmyk(0% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0} toCMYKA method with decimals from {"c":0,"m":1,"y":0,"k":0} 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0} toCMYK method with decimals from {"c":0,"m":1,"y":0,"k":0} 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":1,"y":0,"k":0} 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0} toCMYKA method with decimals from {"c":0,"m":1,"y":0,"k":0} 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k":0} toCMYKAObject method with decimals from {"c":0,"m":1,"y":0,"k":0} 1`] = ` { @@ -2162,9 +2538,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":0,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":1,"y":1,"k":0,"a":1} 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":1,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":1,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":1,"y":1,"k":0,"a":1} 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":1,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":1,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0,"a":1} toCMYKAObject method with decimals from {"c":0,"m":1,"y":1,"k":0,"a":1} 1`] = ` { @@ -2185,9 +2565,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0} toCMYK method with decimals from {"c":0,"m":1,"y":1,"k":0} 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":1,"y":1,"k":0} 1`] = `"device-cmyk(0% 100% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0} toCMYK method with decimals from {"c":0,"m":1,"y":1,"k":0} 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0} toCMYKA method with decimals from {"c":0,"m":1,"y":1,"k":0} 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":1,"y":1,"k":0} 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0} toCMYKA method with decimals from {"c":0,"m":1,"y":1,"k":0} 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k":0} toCMYKAObject method with decimals from {"c":0,"m":1,"y":1,"k":0} 1`] = ` { @@ -2208,9 +2592,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":1,"y":1,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":100,"y":0,"k":0,"a":1} 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":100,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":100,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":100,"y":0,"k":0,"a":1} 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":100,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":100,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0,"a":1} toCMYKAObject method with decimals from {"c":0,"m":100,"y":0,"k":0,"a":1} 1`] = ` { @@ -2231,9 +2619,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0," } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0} toCMYK method with decimals from {"c":0,"m":100,"y":0,"k":0} 1`] = `"cmyk(0%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":100,"y":0,"k":0} 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0} toCMYK method with decimals from {"c":0,"m":100,"y":0,"k":0} 1`] = `"device-cmyk(0% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":100,"y":0,"k":0} 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0} toCMYKA method with decimals from {"c":0,"m":100,"y":0,"k":0} 1`] = `"cmyk(0%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0} toCMYKA method with decimals from {"c":0,"m":100,"y":0,"k":0} 1`] = `"device-cmyk(0% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0,"k":0} toCMYKAObject method with decimals from {"c":0,"m":100,"y":0,"k":0} 1`] = ` { @@ -2254,9 +2646,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":0," } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":100,"y":100,"k":0,"a":1} 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":100,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":100,"y":100,"k":0,"a":1} 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0,"a":1} toCMYK method with decimals from {"c":0,"m":100,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":100,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0,"a":1} toCMYKA method with decimals from {"c":0,"m":100,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0,"a":1} toCMYKAObject method with decimals from {"c":0,"m":100,"y":100,"k":0,"a":1} 1`] = ` { @@ -2277,9 +2673,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100 } `; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0} toCMYK method with decimals from {"c":0,"m":100,"y":100,"k":0} 1`] = `"cmyk(0%,100%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":0,"m":100,"y":100,"k":0} 1`] = `"device-cmyk(0% 100% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0} toCMYK method with decimals from {"c":0,"m":100,"y":100,"k":0} 1`] = `"device-cmyk(0% 100% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":0,"m":100,"y":100,"k":0} 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0} toCMYKA method with decimals from {"c":0,"m":100,"y":100,"k":0} 1`] = `"cmyk(0%,100%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0} toCMYKA method with decimals from {"c":0,"m":100,"y":100,"k":0} 1`] = `"device-cmyk(0% 100% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100,"k":0} toCMYKAObject method with decimals from {"c":0,"m":100,"y":100,"k":0} 1`] = ` { @@ -2300,9 +2700,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":0,"m":100,"y":100 } `; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":1,"m":0,"y":0,"k":0,"a":1} 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":1,"m":0,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":1,"m":0,"y":0,"k":0,"a":1} 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":1,"m":0,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":1,"m":0,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":1,"m":0,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0,"a":1} toCMYKAObject method with decimals from {"c":1,"m":0,"y":0,"k":0,"a":1} 1`] = ` { @@ -2323,9 +2727,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0} toCMYK method with decimals from {"c":1,"m":0,"y":0,"k":0} 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":1,"m":0,"y":0,"k":0} 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0} toCMYK method with decimals from {"c":1,"m":0,"y":0,"k":0} 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0} toCMYKA method with decimals from {"c":1,"m":0,"y":0,"k":0} 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":1,"m":0,"y":0,"k":0} 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0} toCMYKA method with decimals from {"c":1,"m":0,"y":0,"k":0} 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k":0} toCMYKAObject method with decimals from {"c":1,"m":0,"y":0,"k":0} 1`] = ` { @@ -2346,9 +2754,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":0,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0,"a":1} toCMYK method with decimals from {"c":1,"m":0,"y":1,"k":0,"a":1} 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":1,"m":0,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0,"a":1} toCMYK method with decimals from {"c":1,"m":0,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0,"a":1} toCMYKA method with decimals from {"c":1,"m":0,"y":1,"k":0,"a":1} 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":1,"m":0,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0,"a":1} toCMYKA method with decimals from {"c":1,"m":0,"y":1,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0,"a":1} toCMYKAObject method with decimals from {"c":1,"m":0,"y":1,"k":0,"a":1} 1`] = ` { @@ -2369,9 +2781,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0} toCMYK method with decimals from {"c":1,"m":0,"y":1,"k":0} 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":1,"m":0,"y":1,"k":0} 1`] = `"device-cmyk(100% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0} toCMYK method with decimals from {"c":1,"m":0,"y":1,"k":0} 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0} toCMYKA method with decimals from {"c":1,"m":0,"y":1,"k":0} 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":1,"m":0,"y":1,"k":0} 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0} toCMYKA method with decimals from {"c":1,"m":0,"y":1,"k":0} 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k":0} toCMYKAObject method with decimals from {"c":1,"m":0,"y":1,"k":0} 1`] = ` { @@ -2392,9 +2808,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":0,"y":1,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":1,"m":1,"y":0,"k":0,"a":1} 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":1,"m":1,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":1,"m":1,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":1,"m":1,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":1,"m":1,"y":0,"k":0,"a":1} 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":1,"m":1,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0,"a":1} toCMYKAObject method with decimals from {"c":1,"m":1,"y":0,"k":0,"a":1} 1`] = ` { @@ -2415,9 +2835,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0} toCMYK method with decimals from {"c":1,"m":1,"y":0,"k":0} 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":1,"m":1,"y":0,"k":0} 1`] = `"device-cmyk(100% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0} toCMYKA method with decimals from {"c":1,"m":1,"y":0,"k":0} 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0} toCMYK method with decimals from {"c":1,"m":1,"y":0,"k":0} 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":1,"m":1,"y":0,"k":0} 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0} toCMYKA method with decimals from {"c":1,"m":1,"y":0,"k":0} 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k":0} toCMYKAObject method with decimals from {"c":1,"m":1,"y":0,"k":0} 1`] = ` { @@ -2438,9 +2862,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":1,"m":1,"y":0,"k" } `; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":100,"m":0,"y":0,"k":0,"a":1} 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":100,"m":0,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":100,"m":0,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":100,"m":0,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":100,"m":0,"y":0,"k":0,"a":1} 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":100,"m":0,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0,"a":1} toCMYKAObject method with decimals from {"c":100,"m":0,"y":0,"k":0,"a":1} 1`] = ` { @@ -2461,9 +2889,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0," } `; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0} toCMYK method with decimals from {"c":100,"m":0,"y":0,"k":0} 1`] = `"cmyk(100%,0%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":100,"m":0,"y":0,"k":0} 1`] = `"device-cmyk(100% 0% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0} toCMYKA method with decimals from {"c":100,"m":0,"y":0,"k":0} 1`] = `"cmyk(100%,0%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0} toCMYK method with decimals from {"c":100,"m":0,"y":0,"k":0} 1`] = `"device-cmyk(100% 0% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":100,"m":0,"y":0,"k":0} 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0} toCMYKA method with decimals from {"c":100,"m":0,"y":0,"k":0} 1`] = `"device-cmyk(100% 0% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0,"k":0} toCMYKAObject method with decimals from {"c":100,"m":0,"y":0,"k":0} 1`] = ` { @@ -2484,9 +2916,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":0," } `; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0,"a":1} toCMYK method with decimals from {"c":100,"m":0,"y":100,"k":0,"a":1} 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":100,"m":0,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0,"a":1} toCMYK method with decimals from {"c":100,"m":0,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0,"a":1} toCMYKA method with decimals from {"c":100,"m":0,"y":100,"k":0,"a":1} 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":100,"m":0,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0,"a":1} toCMYKA method with decimals from {"c":100,"m":0,"y":100,"k":0,"a":1} 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0,"a":1} toCMYKAObject method with decimals from {"c":100,"m":0,"y":100,"k":0,"a":1} 1`] = ` { @@ -2507,9 +2943,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100 } `; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0} toCMYK method with decimals from {"c":100,"m":0,"y":100,"k":0} 1`] = `"cmyk(100%,0%,100%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":100,"m":0,"y":100,"k":0} 1`] = `"device-cmyk(100% 0% 100% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0} toCMYK method with decimals from {"c":100,"m":0,"y":100,"k":0} 1`] = `"device-cmyk(100% 0% 100% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0} toCMYKA method with decimals from {"c":100,"m":0,"y":100,"k":0} 1`] = `"cmyk(100%,0%,100%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":100,"m":0,"y":100,"k":0} 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0} toCMYKA method with decimals from {"c":100,"m":0,"y":100,"k":0} 1`] = `"device-cmyk(100% 0% 100% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100,"k":0} toCMYKAObject method with decimals from {"c":100,"m":0,"y":100,"k":0} 1`] = ` { @@ -2530,9 +2970,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":0,"y":100 } `; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":100,"m":100,"y":0,"k":0,"a":1} 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0,"a":1} toCMYK method with decimals and auto legacyCSS from {"c":100,"m":100,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0,"a":1} toCMYK method with decimals from {"c":100,"m":100,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 100% 0% 0%)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":100,"m":100,"y":0,"k":0,"a":1} 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0,"a":1} toCMYKA method with decimals and auto legacyCSS from {"c":100,"m":100,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0,"a":1} toCMYKA method with decimals from {"c":100,"m":100,"y":0,"k":0,"a":1} 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0,"a":1} toCMYKAObject method with decimals from {"c":100,"m":100,"y":0,"k":0,"a":1} 1`] = ` { @@ -2553,9 +2997,13 @@ exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0 } `; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0} toCMYK method with decimals from {"c":100,"m":100,"y":0,"k":0} 1`] = `"cmyk(100%,100%,0%,0%)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0} toCMYK method with decimals and auto legacyCSS from {"c":100,"m":100,"y":0,"k":0} 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0} toCMYK method with decimals from {"c":100,"m":100,"y":0,"k":0} 1`] = `"device-cmyk(100% 100% 0% 0%)"`; + +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0} toCMYKA method with decimals and auto legacyCSS from {"c":100,"m":100,"y":0,"k":0} 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; -exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0} toCMYKA method with decimals from {"c":100,"m":100,"y":0,"k":0} 1`] = `"cmyk(100%,100%,0%,0%,1)"`; +exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0} toCMYKA method with decimals from {"c":100,"m":100,"y":0,"k":0} 1`] = `"device-cmyk(100% 100% 0% 0% / 1)"`; exports[`ColorTranslator static CMYK color conversion for {"c":100,"m":100,"y":0,"k":0} toCMYKAObject method with decimals from {"c":100,"m":100,"y":0,"k":0} 1`] = ` { diff --git a/tests/color-mixing.test.ts b/tests/color-mixing.test.ts index f8213b7..b589480 100644 --- a/tests/color-mixing.test.ts +++ b/tests/color-mixing.test.ts @@ -87,4 +87,19 @@ describe('Strong additive colors mixing', (): void => { it('Black with White', (): void => { expect(ColorTranslator.getMixHEX(['#000000', '#FFFFFF'], Mix.SUBTRACTIVE)).toBe('#000000'); }); +}); + +describe('legacyCSS auto detection', (): void => { + it('All colors legacy, output should be legacy', () => { + expect(ColorTranslator.getMixRGB(['rgb(0,0,0)', 'rgb(0,0,0)'])).toBe('rgb(0,0,0)'); + }); + it('Only one color is legacy, output should be non-legacy', () => { + expect(ColorTranslator.getMixRGBA(['rgb(0,0,0)', 'rgb(0 0 0)'])).toBe('rgb(0 0 0 / 1)'); + }); + it('No way to detect if the color is legacy, output should be non-legacy', () => { + expect(ColorTranslator.getMixRGB(['#000', '#000000'])).toBe('rgb(0 0 0)'); + }); + it('Only one color is css and it is legacy, output should be legacy', () => { + expect(ColorTranslator.getMixHSLA([{r: 0, g: 0, b: 0}, 'rgba(0,0,0)'])).toBe('hsla(0,0%,0%,1)'); + }); }); \ No newline at end of file diff --git a/tests/harmony.test.ts b/tests/harmony.test.ts index 33ea5c4..549724d 100644 --- a/tests/harmony.test.ts +++ b/tests/harmony.test.ts @@ -46,24 +46,25 @@ describe('ColorTranslator harmony tests', (): void => { hexColorFunctions.forEach((fn): void => { + const options = { decimals: 0, legacyCSS: false }; const color = fn(base) as string & HEXObject & RGBObject & HSLObjectGeneric; const additiveResult = additive_results.map(colors => colors.map(color => fn(color))); const subtractiveResult = subtractive_results.map(colors => colors.map(color => fn(color))); it(`Additive Harmony deep equals: ${harmony} for ${color} => ${JSON.stringify(additiveResult[index])}`, (): void => { const colors = harmony === Harmony.COMPLEMENTARY - ? ColorTranslator.getHarmony(color) - : ColorTranslator.getHarmony(color, Harmony[harmony as Harmony]); + ? ColorTranslator.getHarmony(color, Harmony.COMPLEMENTARY, Mix.ADDITIVE, options) + : ColorTranslator.getHarmony(color, Harmony[harmony as Harmony], Mix.ADDITIVE, options); expect(colors).toMatchObject(additiveResult[index]); }); it(`Subtractive Harmony deep equals: ${harmony} for ${color} => ${JSON.stringify(subtractiveResult[index])}`, (): void => { - const colors = ColorTranslator.getHarmony(color, Harmony[harmony as Harmony], Mix.SUBTRACTIVE); + const colors = ColorTranslator.getHarmony(color, Harmony[harmony as Harmony], Mix.SUBTRACTIVE, options); expect(colors).toMatchObject(subtractiveResult[index]); }); it('Additive Complementary > 360º', (): void => { - const colors = ColorTranslator.getHarmony('#0000FF', Harmony.COMPLEMENTARY, Mix.SUBTRACTIVE); + const colors = ColorTranslator.getHarmony('#0000FF', Harmony.COMPLEMENTARY, Mix.SUBTRACTIVE, options); expect(colors[1]).toBe('#FF8000'); }); @@ -71,7 +72,8 @@ describe('ColorTranslator harmony tests', (): void => { colorFunctions.forEach((fn): void => { - const options = { decimals: 0 }; + const optionsWithDecimals = { legacyCSS: false }; + const options = { ...optionsWithDecimals, decimals: 0 }; const color = fn(base, options) as string & HEXObject & RGBObject & HSLObjectGeneric; const additiveResult = additive_results.map(colors => colors.map(color => fn(color, options))); const subtractiveResult = subtractive_results.map(colors => colors.map(color => fn(color, options))); @@ -82,7 +84,7 @@ describe('ColorTranslator harmony tests', (): void => { }); it(`Additive Harmony with decimals for ${JSON.stringify(color)}`, (): void => { - const colors = ColorTranslator.getHarmony(color, Harmony[harmony as Harmony], Mix.ADDITIVE); + const colors = ColorTranslator.getHarmony(color, Harmony[harmony as Harmony]); expect(colors).toMatchSnapshot(); }); @@ -91,6 +93,11 @@ describe('ColorTranslator harmony tests', (): void => { expect(colors).toMatchObject(subtractiveResult[index]); }); + it(`Subtractive Harmony with decimals and auto legacyCSS for ${JSON.stringify(color)}`, (): void => { + const colors = ColorTranslator.getHarmony(color); + expect(colors).toMatchSnapshot(); + }); + it(`Subtractive Harmony with decimals for ${JSON.stringify(color)}`, (): void => { const colors = ColorTranslator.getHarmony(color, Harmony[harmony as Harmony], Mix.SUBTRACTIVE); expect(colors).toMatchSnapshot(); diff --git a/tests/hex3.test.ts b/tests/hex3.test.ts index 7e466d2..e1a4985 100644 --- a/tests/hex3.test.ts +++ b/tests/hex3.test.ts @@ -13,9 +13,13 @@ HEX3.forEach((item: HexProps): void => { describe(`ColorTranslator dynamic test for the HEX3 color: ${JSON.stringify(item[prop])}`, (): void => { + const options = { legacyCSS: true }; + it('CSS RGB', (): void => { expect(ColorTranslator.toRGB(item[prop])).toBe(item.rgb); expect(ColorTranslator.toRGB(item.keyword)).toBe(item.rgb); + expect(ColorTranslator.toRGB(item[prop], options)).toBe(item.rgbLegacy); + expect(ColorTranslator.toRGB(item.keyword, options)).toBe(item.rgbLegacy); }); it('Object RGB', (): void => { @@ -26,6 +30,8 @@ HEX3.forEach((item: HexProps): void => { it('CSS RGBA', (): void => { expect(ColorTranslator.toRGBA(item[prop])).toBe(item.rgba); expect(ColorTranslator.toRGBA(item.keyword)).toBe(item.rgba); + expect(ColorTranslator.toRGBA(item[prop], options)).toBe(item.rgbaLegacy); + expect(ColorTranslator.toRGBA(item.keyword, options)).toBe(item.rgbaLegacy); }); it('Object RGBA', (): void => { @@ -36,6 +42,8 @@ HEX3.forEach((item: HexProps): void => { it('CSS HSL', (): void => { expect(ColorTranslator.toHSL(item[prop])).toBe(item.hsl); expect(ColorTranslator.toHSL(item.keyword)).toBe(item.hsl); + expect(ColorTranslator.toHSL(item[prop], options)).toBe(item.hslLegacy); + expect(ColorTranslator.toHSL(item.keyword, options)).toBe(item.hslLegacy); }); it('Object HSL', (): void => { @@ -46,6 +54,8 @@ HEX3.forEach((item: HexProps): void => { it('CSS HSLA', (): void => { expect(ColorTranslator.toHSLA(item[prop])).toBe(item.hsla); expect(ColorTranslator.toHSLA(item.keyword)).toBe(item.hsla); + expect(ColorTranslator.toHSLA(item[prop], options)).toBe(item.hslaLegacy); + expect(ColorTranslator.toHSLA(item.keyword, options)).toBe(item.hslaLegacy); }); it('Object HSLA', (): void => { diff --git a/tests/hsl.test.ts b/tests/hsl.test.ts index a4fb2f8..2d5fb43 100644 --- a/tests/hsl.test.ts +++ b/tests/hsl.test.ts @@ -24,13 +24,16 @@ COLORS.forEach((item): void => { return `${start}${Math.round(+number / 360 * 10000) / 10000}turn${end}`; }); const options = { decimals: 0 }; + const legacyOptions = { ...options, legacyCSS: true }; it(`HSL with percentages ${JSON.stringify(hslPercentages)}`, (): void => { expect(ColorTranslator.toRGB(hslPercentages, options)).toBe(item.rgb); + expect(ColorTranslator.toRGB(hslPercentages, legacyOptions)).toBe(item.rgbLegacy); expect(ColorTranslator.toRGBObject(hslPercentages, options)).toMatchObject(item.rgbObject); expect(ColorTranslator.toHSL(hslPercentages, options)).toBe(item.hsl); + expect(ColorTranslator.toHSL(hslPercentages, legacyOptions)).toBe(item.hslLegacy); expect(ColorTranslator.toHSLObject(hslPercentages, options)).toMatchObject(item.hslObject); expect(ColorTranslator.toRGB(hslPercentages)).toMatchSnapshot(); @@ -41,9 +44,11 @@ COLORS.forEach((item): void => { it(`HSLA with percentages ${JSON.stringify(hslaPercentages)}`, (): void => { expect(ColorTranslator.toRGBA(hslaPercentages, options)).toBe(item.rgba); + expect(ColorTranslator.toRGBA(hslaPercentages, legacyOptions)).toBe(item.rgbaLegacy); expect(ColorTranslator.toRGBAObject(hslaPercentages, options)).toMatchObject(item.rgbaObject); expect(ColorTranslator.toHSLA(hslaPercentages, options)).toBe(item.hsla); + expect(ColorTranslator.toHSLA(hslaPercentages, legacyOptions)).toBe(item.hslaLegacy); expect(ColorTranslator.toHSLAObject(hslaPercentages, options)).toMatchObject(item.hslaObject); expect(ColorTranslator.toRGBA(hslPercentages)).toMatchSnapshot(); @@ -54,9 +59,11 @@ COLORS.forEach((item): void => { it(`HSL big hue ${JSON.stringify(hslBigHue)}`, (): void => { expect(ColorTranslator.toRGB(hslBigHue, options)).toBe(item.rgb); + expect(ColorTranslator.toRGB(hslBigHue, legacyOptions)).toBe(item.rgbLegacy); expect(ColorTranslator.toRGBObject(hslBigHue, options)).toMatchObject(item.rgbObject); expect(ColorTranslator.toHSL(hslBigHue, options)).toBe(item.hsl); + expect(ColorTranslator.toHSL(hslBigHue, legacyOptions)).toBe(item.hslLegacy); expect(ColorTranslator.toHSLObject(hslBigHue, options)).toMatchObject(item.hslObject); }); @@ -64,9 +71,11 @@ COLORS.forEach((item): void => { it(`HSLA big hue ${JSON.stringify(hslaBigHue)}`, (): void => { expect(ColorTranslator.toRGBA(hslaBigHue, options)).toBe(item.rgba); + expect(ColorTranslator.toRGBA(hslaBigHue, legacyOptions)).toBe(item.rgbaLegacy); expect(ColorTranslator.toRGBAObject(hslaBigHue, options)).toMatchObject(item.rgbaObject); expect(ColorTranslator.toHSLA(hslaBigHue, options)).toBe(item.hsla); + expect(ColorTranslator.toHSLA(hslaBigHue, legacyOptions)).toBe(item.hslaLegacy); expect(ColorTranslator.toHSLAObject(hslaBigHue, options)).toMatchObject(item.hslaObject); }); @@ -74,9 +83,11 @@ COLORS.forEach((item): void => { it(`HSL low hue ${JSON.stringify(hslLowHue)}`, (): void => { expect(ColorTranslator.toRGB(hslLowHue, options)).toBe(item.rgb); + expect(ColorTranslator.toRGB(hslLowHue, legacyOptions)).toBe(item.rgbLegacy); expect(ColorTranslator.toRGBObject(hslLowHue, options)).toMatchObject(item.rgbObject); expect(ColorTranslator.toHSL(hslLowHue, options)).toBe(item.hsl); + expect(ColorTranslator.toHSL(hslLowHue, legacyOptions)).toBe(item.hslLegacy); expect(ColorTranslator.toHSLObject(hslLowHue, options)).toMatchObject(item.hslObject); }); @@ -84,9 +95,11 @@ COLORS.forEach((item): void => { it(`HSLA low hue ${JSON.stringify(hslaLowHue)}`, (): void => { expect(ColorTranslator.toRGBA(hslaLowHue, options)).toBe(item.rgba); + expect(ColorTranslator.toRGBA(hslaLowHue, legacyOptions)).toBe(item.rgbaLegacy); expect(ColorTranslator.toRGBAObject(hslaLowHue, options)).toMatchObject(item.rgbaObject); expect(ColorTranslator.toHSLA(hslaLowHue, options)).toBe(item.hsla); + expect(ColorTranslator.toHSLA(hslaLowHue, legacyOptions)).toBe(item.hslaLegacy); expect(ColorTranslator.toHSLAObject(hslaLowHue, options)).toMatchObject(item.hslaObject); }); @@ -94,9 +107,11 @@ COLORS.forEach((item): void => { it(`Hue in deg ${hslDeg}`, () => { expect(ColorTranslator.toRGB(hslDeg, options)).toBe(item.rgb); + expect(ColorTranslator.toRGB(hslDeg, legacyOptions)).toBe(item.rgbLegacy); expect(ColorTranslator.toRGBObject(hslDeg, options)).toMatchObject(item.rgbObject); expect(ColorTranslator.toHSL(hslDeg, options)).toBe(item.hsl); + expect(ColorTranslator.toHSL(hslDeg, legacyOptions)).toBe(item.hslLegacy); expect(ColorTranslator.toHSLObject(hslDeg, options)).toMatchObject(item.hslObject); }); @@ -104,9 +119,11 @@ COLORS.forEach((item): void => { it(`Hue in grad ${hslGrad}`, () => { expect(ColorTranslator.toRGB(hslGrad, options)).toBe(item.rgb); + expect(ColorTranslator.toRGB(hslGrad, legacyOptions)).toBe(item.rgbLegacy); expect(ColorTranslator.toRGBObject(hslGrad, options)).toMatchObject(item.rgbObject); expect(ColorTranslator.toHSL(hslGrad, options)).toBe(item.hsl); + expect(ColorTranslator.toHSL(hslGrad, legacyOptions)).toBe(item.hslLegacy); expect(ColorTranslator.toHSLObject(hslGrad, options)).toMatchObject(item.hslObject); }); @@ -114,9 +131,11 @@ COLORS.forEach((item): void => { it(`Hue in rad ${hslRadians}`, () => { expect(ColorTranslator.toRGB(hslRadians, options)).toBe(item.rgb); + expect(ColorTranslator.toRGB(hslRadians, legacyOptions)).toBe(item.rgbLegacy); expect(ColorTranslator.toRGBObject(hslRadians, options)).toMatchObject(item.rgbObject); expect(ColorTranslator.toHSL(hslRadians, options)).toBe(item.hsl); + expect(ColorTranslator.toHSL(hslRadians, legacyOptions)).toBe(item.hslLegacy); expect(ColorTranslator.toHSLObject(hslRadians, options)).toMatchObject(item.hslObject); }); @@ -124,9 +143,11 @@ COLORS.forEach((item): void => { it(`Hue in turn ${hslTurns}`, () => { expect(ColorTranslator.toRGB(hslTurns, options)).toBe(item.rgb); + expect(ColorTranslator.toRGB(hslTurns, legacyOptions)).toBe(item.rgbLegacy); expect(ColorTranslator.toRGBObject(hslTurns, options)).toMatchObject(item.rgbObject); expect(ColorTranslator.toHSL(hslTurns, options)).toBe(item.hsl); + expect(ColorTranslator.toHSL(hslTurns, legacyOptions)).toBe(item.hslLegacy); expect(ColorTranslator.toHSLObject(hslTurns, options)).toMatchObject(item.hslObject); }); diff --git a/tests/instance-get-properties.test.ts b/tests/instance-get-properties.test.ts index fb17159..43a51b6 100644 --- a/tests/instance-get-properties.test.ts +++ b/tests/instance-get-properties.test.ts @@ -2,10 +2,12 @@ import { ColorTranslator } from '../src'; import { COLORS, CMYK_COLORS } from './tests.constants'; const options = { decimals: 0 }; +const legacyOptions = { ...options, legacyCSS: true }; COLORS.forEach((color): void => { let instance: ColorTranslator; + let legacyInstance: ColorTranslator; Object.values(color).forEach((colorValue) => { @@ -14,6 +16,7 @@ COLORS.forEach((color): void => { describe(`ColorTranslator instance properties for ${colorValueStr}`, () => { instance = new ColorTranslator(colorValue, options); + legacyInstance = new ColorTranslator(colorValue, legacyOptions); // HEX it(`HEX property => ${color.hex}`, () => { @@ -38,11 +41,13 @@ COLORS.forEach((color): void => { // RGB it(`RGB property => ${color.rgb}`, () => { expect(instance.RGB).toBe(color.rgb); + expect(legacyInstance.RGB).toBe(color.rgbLegacy); }); // RGBA it(`RGBA property => ${color.rgba}`, () => { expect(instance.RGBA).toBe(color.rgba); + expect(legacyInstance.RGBA).toBe(color.rgbaLegacy); }); // RGBObject @@ -58,11 +63,13 @@ COLORS.forEach((color): void => { // HSL it(`HSL property => ${color.hsl}`, () => { expect(instance.HSL).toBe(color.hsl); + expect(legacyInstance.HSL).toBe(color.hslLegacy); }); // HSLA it(`HSLA property => ${color.hsla}`, () => { expect(instance.HSLA).toBe(color.hsla); + expect(legacyInstance.HSLA).toBe(color.hslaLegacy); }); // HSLObject @@ -119,6 +126,7 @@ COLORS.forEach((color): void => { CMYK_COLORS.forEach((color) => { let instance: ColorTranslator; + let legacyInstance: ColorTranslator; Object.values(color).forEach((colorValue) => { @@ -127,15 +135,18 @@ CMYK_COLORS.forEach((color) => { describe(`ColorTranslator CMYK instance properties ${colorValueStr}`, () => { instance = new ColorTranslator(colorValue, options); + legacyInstance = new ColorTranslator(colorValue, legacyOptions); // CMYK it(`CMYK property => ${color.cmyk}`, () => { expect(instance.CMYK).toBe(color.cmyk); + expect(legacyInstance.CMYK).toBe(color.cmykLegacy); }); // CMYKA it(`CMYKA property => ${color.cmykWithAlpha}`, () => { expect(instance.CMYKA).toBe(color.cmykWithAlpha); + expect(legacyInstance.CMYKA).toBe(color.cmykLegacyWithAlpha); }); // CMYKObject diff --git a/tests/instance-set-properties.test.ts b/tests/instance-set-properties.test.ts index ee6d150..3abdf9d 100644 --- a/tests/instance-set-properties.test.ts +++ b/tests/instance-set-properties.test.ts @@ -256,7 +256,7 @@ describe('ColorTranslator set CMYK instance properties', () => { const instance = new ColorTranslator(TEST_CMYK_COLORS.red.rgb); instance.setK(100); expect(instance.K).toBe(100); - expect(instance.CMYK).toBe('cmyk(0%,100%,100%,100%)'); + expect(instance.CMYK).toBe('device-cmyk(0% 100% 100% 100%)'); }); }); \ No newline at end of file diff --git a/tests/shades-tints.test.ts b/tests/shades-tints.test.ts index 5319a33..38a0cb3 100644 --- a/tests/shades-tints.test.ts +++ b/tests/shades-tints.test.ts @@ -52,7 +52,7 @@ describe('ColorTranslator shades and tints tests', (): void => { }); colorFunctions.forEach((fn): void => { - const options = { decimals: 0 }; + const options = { decimals: 0, legacyCSS: false }; const input = fn(base, options) as string & HEXObject & RGBObject & HSLObjectGeneric; const alpha = '80'; const inputWithAlpha = fn(base + alpha, options) as string & HEXObject & RGBObject & HSLObjectGeneric; diff --git a/tests/static-color-conversion.test.ts b/tests/static-color-conversion.test.ts index bfb3604..300da77 100644 --- a/tests/static-color-conversion.test.ts +++ b/tests/static-color-conversion.test.ts @@ -1,7 +1,9 @@ import { ColorTranslator } from '../src'; import { COLORS, CMYK_COLORS } from './tests.constants'; -const options = { decimals: 0 }; +const optionsNoLegacy = { legacyCSS: false }; +const optionsNoDecimals = { decimals: 0 }; +const options = { ...optionsNoLegacy, ...optionsNoDecimals }; COLORS.forEach((color): void => { @@ -71,6 +73,28 @@ COLORS.forEach((color): void => { }); +COLORS.forEach((color): void => { + + describe('ColorTranslator static color conversion with auto legacyCSS detection', () => { + + it('Non legacy conversion', () => { + expect(ColorTranslator.toRGB(color.hex)).toBe(color.rgb); + expect(ColorTranslator.toRGBA(color.hexObject)).toBe(color.rgba); + expect(ColorTranslator.toHSL(color.rgb, optionsNoDecimals)).toBe(color.hsl); + expect(ColorTranslator.toHSLA(color.rgbObject, optionsNoDecimals)).toBe(color.hsla); + }); + + it('Legacy conversion', () => { + expect(ColorTranslator.toRGB(color.hslLegacy, optionsNoDecimals)).toBe(color.rgbLegacy); + expect(ColorTranslator.toRGBA(color.hslaLegacy, optionsNoDecimals)).toBe(color.rgbaLegacy); + expect(ColorTranslator.toHSL(color.rgbaLegacy, optionsNoDecimals)).toBe(color.hslLegacy); + expect(ColorTranslator.toHSLA(color.rgbLegacy, optionsNoDecimals)).toBe(color.hslaLegacy); + }); + + }); + +}); + CMYK_COLORS.forEach((color) => { Object.values(color).forEach((colorValue) => { @@ -98,6 +122,10 @@ CMYK_COLORS.forEach((color) => { }); it(`toCMYK method with decimals from ${colorValueStr}`, () => { + expect(ColorTranslator.toCMYK(colorValue, optionsNoLegacy)).toMatchSnapshot(); + }); + + it(`toCMYK method with decimals and auto legacyCSS from ${colorValueStr}`, () => { expect(ColorTranslator.toCMYK(colorValue)).toMatchSnapshot(); }); @@ -106,6 +134,10 @@ CMYK_COLORS.forEach((color) => { }); it(`toCMYKA method with decimals from ${colorValueStr}`, () => { + expect(ColorTranslator.toCMYKA(colorValue, optionsNoLegacy)).toMatchSnapshot(); + }); + + it(`toCMYKA method with decimals and auto legacyCSS from ${colorValueStr}`, () => { expect(ColorTranslator.toCMYKA(colorValue)).toMatchSnapshot(); }); diff --git a/tests/tests.constants.ts b/tests/tests.constants.ts index 9af72cb..3a6d8d8 100644 --- a/tests/tests.constants.ts +++ b/tests/tests.constants.ts @@ -1,190 +1,148 @@ export const COLORS = [ { keyword: 'red', - rgb: 'rgb(255,0,0)', - rgbWithAlpha: 'rgb(255,0,0,1)', - rgbSpaces: 'rgb(255 0 0)', - rgbSpacesWithAlpha: 'rgb(255 0 0 / 1)', - rgbSpacesWithAlphaInPercentage: 'rgb(255 0 0 / 100%)', - rgba: 'rgba(255,0,0,1)', - rgbaSpaces: 'rgba(255 0 0 / 1)', - rgbaSpacesInPercentage: 'rgba(255 0 0 / 100%)', + rgbLegacy: 'rgb(255,0,0)', + rgb: 'rgb(255 0 0)', + rgbaLegacy: 'rgba(255,0,0,1)', + rgba: 'rgb(255 0 0 / 1)', + rgbaInPercentage: 'rgb(100% 0% 0% / 100%)', rgbObject: { r: 255, g: 0, b: 0 }, rgbaObject: { r: 255, g: 0, b: 0, a: 1 }, hex: '#FF0000', hexObject: { r: '0xFF', g: '0x00', b: '0x00' }, hexa: '#FF0000FF', hexaObject: { r: '0xFF', g: '0x00', b: '0x00', a: '0xFF' }, - hsl: 'hsl(0,100%,50%)', - hslWithAlpha: 'hsl(0,100%,50%,1)', - hslSpaces: 'hsl(0 100% 50%)', - hslSpacesWithAlpha: 'hsl(0 100% 50% / 1)', - hslSpacesWithAlphaInPercentage: 'hsl(0 100% 50% / 100%)', - hsla: 'hsla(0,100%,50%,1)', - hslaSpaces: 'hsla(0 100% 50% / 1)', - hslaSpacesInPercentages: 'hsla(0 100% 50% / 100%)', + hslLegacy: 'hsl(0,100%,50%)', + hsl: 'hsl(0 100% 50%)', + hslaLegacy: 'hsla(0,100%,50%,1)', + hsla: 'hsl(0 100% 50% / 1)', + hslaInPercentages: 'hsl(0 100% 50% / 100%)', hslObject: { h: 0, s: 100, l: 50 }, hslaObject: { h: 0, s: 100, l: 50, a: 1 } }, { keyword: 'lime', - rgb: 'rgb(0,255,0)', - rgbWithAlpha: 'rgb(0,255,0,1)', - rgbSpaces: 'rgb(0 255 0)', - rgbSpacesWithAlpha: 'rgb(0 255 0 / 1)', - rgbSpacesWithAlphaInPercentage: 'rgb(0 255 0 / 100%)', - rgba: 'rgba(0,255,0,1)', - rgbaSpaces: 'rgb(0 255 0 / 1)', - rgbaSpacesInPercentage: 'rgb(0 255 0 / 100%)', + rgbLegacy: 'rgb(0,255,0)', + rgb: 'rgb(0 255 0)', + rgbaLegacy: 'rgba(0,255,0,1)', + rgba: 'rgb(0 255 0 / 1)', + rgbaInPercentage: 'rgb(0% 100% 0% / 100%)', rgbObject: { r: 0, g: 255, b: 0 }, rgbaObject: { r: 0, g: 255, b: 0, a: 1 }, hex: '#00FF00', hexObject: { r: '0x00', g: '0xFF', b: '0x00' }, hexa: '#00FF00FF', hexaObject: { r: '0x00', g: '0xFF', b: '0x00', a: '0xFF' }, - hsl: 'hsl(120,100%,50%)', - hslWithAlpha: 'hsl(120,100%,50%,1)', - hslSpaces: 'hsl(120 100% 50%)', - hslSpacesWithAlpha: 'hsl(120 100% 50% / 1)', - hslSpacesWithAlphaInPercentage: 'hsl(120 100% 50% / 100%)', - hsla: 'hsla(120,100%,50%,1)', - hslaSpaces: 'hsla(120 100% 50% / 1)', - hslaSpacesInPercentages: 'hsla(120 100% 50% / 100%)', + hslLegacy: 'hsl(120,100%,50%)', + hsl: 'hsl(120 100% 50%)', + hslaLegacy: 'hsla(120,100%,50%,1)', + hsla: 'hsl(120 100% 50% / 1)', + hslaInPercentages: 'hsl(120 100% 50% / 100%)', hslObject: { h: 120, s: 100, l: 50 }, hslaObject: { h: 120, s: 100, l: 50, a: 1 } }, { keyword: 'blue', - rgb: 'rgb(0,0,255)', - rgbWithAlpha: 'rgb(0,0,255,1)', - rgbSpaces: 'rgb(0 0 255)', - rgbSpacesWithAlpha: 'rgb(0 0 255 / 1)', - rgbSpacesWithAlphaInPercentage: 'rgb(0 0 255 / 100%)', - rgba: 'rgba(0,0,255,1)', - rgbaSpaces: 'rgba(0 0 255 / 1)', - rgbaSpacesInPercentage: 'rgba(0 0 255 / 100%)', + rgbLegacy: 'rgb(0,0,255)', + rgb: 'rgb(0 0 255)', + rgbaLegacy: 'rgba(0,0,255,1)', + rgba: 'rgb(0 0 255 / 1)', + rgbaInPercentage: 'rgb(0% 0% 100% / 100%)', rgbObject: { r: 0, g: 0, b: 255 }, rgbaObject: { r: 0, g: 0, b: 255, a: 1 }, hex: '#0000FF', hexObject: { r: '0x00', g: '0x00', b: '0xFF' }, hexa: '#0000FFFF', hexaObject: { r: '0x00', g: '0x00', b: '0xFF', a: '0xFF' }, - hsl: 'hsl(240,100%,50%)', - hslWithAlpha: 'hsl(240,100%,50%,1)', - hslSpaces: 'hsl(240 100% 50%)', - hslSpacesWithAlpha: 'hsl(240 100% 50% / 1)', - hslSpacesWithAlphaInPercentage: 'hsl(240 100% 50% / 100%)', - hsla: 'hsla(240,100%,50%,1)', - hslaSpaces: 'hsla(240 100% 50% / 1)', - hslaSpacesInPercentages: 'hsla(240 100% 50% / 100%)', + hslLegacy: 'hsl(240,100%,50%)', + hsl: 'hsl(240 100% 50%)', + hslaLegacy: 'hsla(240,100%,50%,1)', + hsla: 'hsl(240 100% 50% / 1)', + hslaInPercentages: 'hsl(240 100% 50% / 100%)', hslObject: { h: 240, s: 100, l: 50 }, hslaObject: { h: 240, s: 100, l: 50, a: 1 } }, { keyword: 'magenta', - rgb: 'rgb(255,0,255)', - rgbWithAlpha: 'rgb(255,0,255,1)', - rgbSpaces: 'rgb(255 0 255)', - rgbSpacesWithAlpha: 'rgb(255 0 255 / 1)', - rgbSpacesWithAlphaInPercentage: 'rgb(255 0 255 / 100%)', - rgba: 'rgba(255,0,255,1)', - rgbaSpaces: 'rgba(255 0 255 / 1)', - rgbaSpacesInPercentage: 'rgba(255 0 255 / 100%)', + rgbLegacy: 'rgb(255,0,255)', + rgb: 'rgb(255 0 255)', + rgbaLegacy: 'rgba(255,0,255,1)', + rgba: 'rgb(255 0 255 / 1)', + rgbaInPercentage: 'rgb(100% 0% 100% / 100%)', rgbObject: { r: 255, g: 0, b: 255 }, rgbaObject: { r: 255, g: 0, b: 255, a: 1 }, hex: '#FF00FF', hexObject: { r: '0xFF', g: '0x00', b: '0xFF' }, hexa: '#FF00FFFF', hexaObject: { r: '0xFF', g: '0x00', b: '0xFF', a: '0xFF' }, - hsl: 'hsl(300,100%,50%)', - hslWithAlpha: 'hsl(300,100%,50%,1)', - hslSpaces: 'hsl(300 100% 50%)', - hslSpacesWithAlpha: 'hsl(300 100% 50% / 1)', - hslSpacesWithAlphaInPercentage: 'hsl(300 100% 50% / 100%)', - hsla: 'hsla(300,100%,50%,1)', - hslaSpaces: 'hsla(300 100% 50% / 1)', - hslaSpacesInPercentages: 'hsla(300 100% 50% / 100%)', + hslLegacy: 'hsl(300,100%,50%)', + hsl: 'hsl(300 100% 50%)', + hslaLegacy: 'hsla(300,100%,50%,1)', + hsla: 'hsl(300 100% 50% / 1)', + hslaInPercentages: 'hsl(300 100% 50% / 100%)', hslObject: { h: 300, s: 100, l: 50 }, hslaObject: { h: 300, s: 100, l: 50, a: 1 } }, { keyword: 'white', - rgb: 'rgb(255,255,255)', - rgbWithAlpha: 'rgb(255,255,255,1)', - rgbSpaces: 'rgb(255 255 255)', - rgbSpacesWithAlpha: 'rgb(255 255 255 / 1)', - rgbSpacesWithAlphaInPercentage: 'rgb(255 255 255 / 100%)', - rgba: 'rgba(255,255,255,1)', - rgbaSpaces: 'rgba(255 255 255 / 1)', - rgbaSpacesInPercentage: 'rgba(255 255 255 / 100%)', + rgbLegacy: 'rgb(255,255,255)', + rgb: 'rgb(255 255 255)', + rgbaLegacy: 'rgba(255,255,255,1)', + rgba: 'rgb(255 255 255 / 1)', + rgbaInPercentage: 'rgb(100% 100% 100% / 100%)', rgbObject: { r: 255, g: 255, b: 255 }, rgbaObject: { r: 255, g: 255, b: 255, a: 1 }, hex: '#FFFFFF', hexObject: { r: '0xFF', g: '0xFF', b: '0xFF' }, hexa: '#FFFFFFFF', hexaObject: { r: '0xFF', g: '0xFF', b: '0xFF', a: '0xFF' }, - hsl: 'hsl(0,0%,100%)', - hslWithAlpha: 'hsl(0,0%,100%,1)', - hslSpaces: 'hsl(0 0% 100%)', - hslSpacesWithAlpha: 'hsl(0 0% 100% / 1)', - hslSpacesWithAlphaInPercentage: 'hsl(0 0% 100% / 100%)', - hsla: 'hsla(0,0%,100%,1)', - hslaSpaces: 'hsla(0 0% 100% / 1)', - hslaSpacesInPercentages: 'hsla(0 0% 100% / 100%)', + hslLegacy: 'hsl(0,0%,100%)', + hsl: 'hsl(0 0% 100%)', + hslaLegacy: 'hsla(0,0%,100%,1)', + hsla: 'hsl(0 0% 100% / 1)', + hslaInPercentages: 'hsl(0 0% 100% / 100%)', hslObject: { h: 0, s: 0, l: 100 }, hslaObject: { h: 0, s: 0, l: 100, a: 1 } }, { keyword: 'black', - rgb: 'rgb(0,0,0)', - rgbWithAlpha: 'rgb(0,0,0,1)', - rgbSpaces: 'rgb(0 0 0)', - rgbSpacesWithAlpha: 'rgb(0 0 0 / 1)', - rgbSpacesWithAlphaInPercentage: 'rgb(0 0 0 / 100%)', - rgba: 'rgba(0,0,0,1)', - rgbaSpaces: 'rgb(0 0 0 / 1)', - rgbaSpacesInPercentage: 'rgb(0 0 0 / 100%)', + rgbLegacy: 'rgb(0,0,0)', + rgb: 'rgb(0 0 0)', + rgbaLegacy: 'rgba(0,0,0,1)', + rgba: 'rgb(0 0 0 / 1)', + rgbaInPercentage: 'rgb(0% 0% 0% / 100%)', rgbObject: { r: 0, g: 0, b: 0 }, rgbaObject: { r: 0, g: 0, b: 0, a: 1 }, hex: '#000000', hexObject: { r: '0x00', g: '0x00', b: '0x00' }, hexa: '#000000FF', hexaObject: { r: '0x00', g: '0x00', b: '0x00', a: '0xFF' }, - hsl: 'hsl(0,0%,0%)', - hslWithAlpha: 'hsl(0,0%,0%,1)', - hslSpaces: 'hsl(0 0% 0%)', - hslSpacesWithAlpha: 'hsl(0 0% 0% / 1)', - hslSpacesWithAlphaInPercentage: 'hsl(0 0% 0% / 100%)', - hsla: 'hsla(0,0%,0%,1)', - hslaSpaces: 'hsla(0 0% 0% / 1)', - hslaSpacesInPercentages: 'hsla(0 0% 0% / 100%)', + hslLegacy: 'hsl(0,0%,0%)', + hsl: 'hsl(0 0% 0%)', + hslaLegacy: 'hsla(0,0%,0%,1)', + hsla: 'hsl(0 0% 0% / 1)', + hslaInPercentages: 'hsl(0 0% 0% / 100%)', hslObject: { h: 0, s: 0, l: 0 }, hslaObject: { h: 0, s: 0, l: 0, a: 1 } }, { keyword: 'gray', - rgb: 'rgb(128,128,128)', - rgbWithAlpha: 'rgb(128,128,128,1)', - rgbSpaces: 'rgb(128 128 128)', - rgbSpacesWithAlpha: 'rgb(128 128 128 / 1)', - rgbSpacesWithAlphaInPercentage: 'rgb(128 128 128 / 100%)', - rgba: 'rgba(128,128,128,1)', - rgbaSpaces: 'rgb(128 128 128 / 1)', - rgbaSpacesInPercentage: 'rgb(128 128 128 / 100%)', + rgbLegacy: 'rgb(128,128,128)', + rgb: 'rgb(128 128 128)', + rgbaLegacy: 'rgba(128,128,128,1)', + rgba: 'rgb(128 128 128 / 1)', + rgbaInPercentage: 'rgb(50% 50% 50% / 100%)', rgbObject: { r: 128, g: 128, b: 128 }, rgbaObject: { r: 128, g: 128, b: 128, a: 1 }, hex: '#808080', hexObject: { r: '0x80', g: '0x80', b: '0x80' }, hexa: '#808080FF', hexaObject: { r: '0x80', g: '0x80', b: '0x80', a: '0xFF' }, - hsl: 'hsl(0,0%,50%)', - hslWithAlpha: 'hsl(0,0%,50%,1)', - hslSpaces: 'hsl(0 0% 50%)', - hslSpacesWithAlpha: 'hsl(0 0% 50% / 1)', - hslSpacesWithAlphaInPercentage: 'hsl(0 0% 50% / 100%)', - hsla: 'hsla(0,0%,50%,1)', - hslaSpaces: 'hsla(0 0% 50% / 1)', - hslaSpacesInPercentages: 'hsla(0 0% 50% / 100%)', + hslLegacy: 'hsl(0,0%,50%)', + hsl: 'hsl(0 0% 50%)', + hslaLegacy: 'hsla(0,0%,50%,1)', + hsla: 'hsl(0 0% 50% / 1)', + hslaInPercentages: 'hsl(0 0% 50% / 100%)', hslObject: { h: 0, s: 0, l: 50 }, hslaObject: { h: 0, s: 0, l: 50, a: 1 } } @@ -198,16 +156,22 @@ export const HEX3 = [ hexa: '#F00F', hexaObject: { r: '0xF', g: '0x0', b: '0x0', a: '0xF' }, hexObjectPercent: { r: '100%', g: '0%', b: '0%' }, - rgbPercent: 'rgb(100%,0%,0%)', - rgbaPercent: 'rgba(100%,0%,0%,1)', + rgbPercentLegacy: 'rgb(100%,0%,0%)', + rgbPercent: 'rgb(100% 0% 0%)', + rgbaPercentLegacy: 'rgba(100%,0%,0%,1)', + rgbaPercent: 'rgb(100% 0% 0% / 1)', - rgb: 'rgb(255,0,0)', + rgbLegacy: 'rgb(255,0,0)', + rgb: 'rgb(255 0 0)', rgbObject: { r: 255, g: 0, b: 0 }, - rgba: 'rgba(255,0,0,1)', + rgbaLegacy: 'rgba(255,0,0,1)', + rgba: 'rgb(255 0 0 / 1)', rgbaObject: { r: 255, g: 0, b: 0, a: 1 }, - hsl: 'hsl(0,100%,50%)', + hslLegacy: 'hsl(0,100%,50%)', + hsl: 'hsl(0 100% 50%)', hslObject: { h: 0, s: 100, l: 50 }, - hsla: 'hsla(0,100%,50%,1)', + hslaLegacy: 'hsla(0,100%,50%,1)', + hsla: 'hsl(0 100% 50% / 1)', hslaObject: { h: 0, s: 100, l: 50, a: 1 } }, { @@ -217,16 +181,22 @@ export const HEX3 = [ hexa: '#0F0F', hexaObject: { r: '0x0', g: '0xF', b: '0x0', a: '0xF' }, hexObjectPercent: { r: '0%', g: '100%', b: '0%' }, - rgbPercent: 'rgb(0%,100%,0%)', - rgbaPercent: 'rgba(0%,100%,0%,1)', + rgbPercentLegacy: 'rgb(0%,100%,0%)', + rgbPercent: 'rgb(0% 100% 0%)', + rgbaPercentLegacy: 'rgba(0%,100%,0%,1)', + rgbaPercent: 'rgb(0% 100% 0% / 1)', - rgb: 'rgb(0,255,0)', + rgbLegacy: 'rgb(0,255,0)', + rgb: 'rgb(0 255 0)', rgbObject: { r: 0, g: 255, b: 0 }, - rgba: 'rgba(0,255,0,1)', + rgbaLegacy: 'rgba(0,255,0,1)', + rgba: 'rgb(0 255 0 / 1)', rgbaObject: { r: 0, g: 255, b: 0, a: 1 }, - hsl: 'hsl(120,100%,50%)', + hslLegacy: 'hsl(120,100%,50%)', + hsl: 'hsl(120 100% 50%)', hslObject: { h: 120, s: 100, l: 50 }, - hsla: 'hsla(120,100%,50%,1)', + hslaLegacy: 'hsla(120,100%,50%,1)', + hsla: 'hsl(120 100% 50% / 1)', hslaObject: { h: 120, s: 100, l: 50, a: 1 } }, { @@ -236,16 +206,22 @@ export const HEX3 = [ hexa: '#00FF', hexaObject: { r: '0x0', g: '0x0', b: '0xF', a: '0xF' }, hexObjectPercent: { r: '0%', g: '0%', b: '100%' }, - rgbPercent: 'rgb(0%,0%,100%)', - rgbaPercent: 'rgba(0%,0%,100%,1)', + rgbPercentLegacy: 'rgb(0%,0%,100%)', + rgbPercent: 'rgb(0% 0% 100%)', + rgbaPercentLegacy: 'rgba(0%,0%,100%,1)', + rgbaPercent: 'rgb(0% 0% 100% / 1)', - rgb: 'rgb(0,0,255)', + rgbLegacy: 'rgb(0,0,255)', + rgb: 'rgb(0 0 255)', rgbObject: { r: 0, g: 0, b: 255 }, - rgba: 'rgba(0,0,255,1)', + rgbaLegacy: 'rgba(0,0,255,1)', + rgba: 'rgb(0 0 255 / 1)', rgbaObject: { r: 0, g: 0, b: 255, a: 1 }, - hsl: 'hsl(240,100%,50%)', + hslLegacy: 'hsl(240,100%,50%)', + hsl: 'hsl(240 100% 50%)', hslObject: { h: 240, s: 100, l: 50 }, - hsla: 'hsla(240,100%,50%,1)', + hslaLegacy: 'hsla(240,100%,50%,1)', + hsla: 'hsl(240 100% 50% / 1)', hslaObject: { h: 240, s: 100, l: 50, a: 1 } }, { @@ -255,16 +231,22 @@ export const HEX3 = [ hexa: '#F0FF', hexaObject: { r: '0xF', g: '0x0', b: '0xF', a: '0xF' }, hexObjectPercent: { r: '100%', g: '0%', b: '100%' }, - rgbPercent: 'rgb(100%,0%,100%)', - rgbaPercent: 'rgba(100%,0%,100%,1)', + rgbPercentLegacy: 'rgb(100%,0%,100%)', + rgbPercent: 'rgb(100% 0% 100%)', + rgbaPercentLegacy: 'rgba(100%,0%,100%,1)', + rgbaPercent: 'rgb(100% 0% 100% / 1)', - rgb: 'rgb(255,0,255)', + rgbLegacy: 'rgb(255,0,255)', + rgb: 'rgb(255 0 255)', rgbObject: { r: 255, g: 0, b: 255 }, - rgba: 'rgba(255,0,255,1)', + rgbaLegacy: 'rgba(255,0,255,1)', + rgba: 'rgb(255 0 255 / 1)', rgbaObject: { r: 255, g: 0, b: 255, a: 1 }, - hsl: 'hsl(300,100%,50%)', + hslLegacy: 'hsl(300,100%,50%)', + hsl: 'hsl(300 100% 50%)', hslObject: { h: 300, s: 100, l: 50 }, - hsla: 'hsla(300,100%,50%,1)', + hslaLegacy: 'hsla(300,100%,50%,1)', + hsla: 'hsl(300 100% 50% / 1)', hslaObject: { h: 300, s: 100, l: 50, a: 1 } }, { @@ -274,16 +256,22 @@ export const HEX3 = [ hexa: '#FFFF', hexaObject: { r: '0xF', g: '0xF', b: '0xF', a: '0xF' }, hexObjectPercent: { r: '100%', g: '100%', b: '100%' }, - rgbPercent: 'rgb(100%,100%,100%)', - rgbaPercent: 'rgba(100%,100%,100%,1)', + rgbPercentLegacy: 'rgb(100%,100%,100%)', + rgbPercent: 'rgb(100% 100% 100%)', + rgbaPercentLegacy: 'rgba(100%,100%,100%,1)', + rgbaPercent: 'rgb(100% 100% 100% / 1)', - rgb: 'rgb(255,255,255)', + rgbLegacy: 'rgb(255,255,255)', + rgb: 'rgb(255 255 255)', rgbObject: { r: 255, g: 255, b: 255 }, - rgba: 'rgba(255,255,255,1)', + rgbaLegacy: 'rgba(255,255,255,1)', + rgba: 'rgb(255 255 255 / 1)', rgbaObject: { r: 255, g: 255, b: 255, a: 1 }, - hsl: 'hsl(0,0%,100%)', + hslLegacy: 'hsl(0,0%,100%)', + hsl: 'hsl(0 0% 100%)', hslObject: { h: 0, s: 0, l: 100 }, - hsla: 'hsla(0,0%,100%,1)', + hslaLegacy: 'hsla(0,0%,100%,1)', + hsla: 'hsl(0 0% 100% / 1)', hslaObject: { h: 0, s: 0, l: 100, a: 1 } }, { @@ -293,16 +281,22 @@ export const HEX3 = [ hexa: '#000F', hexaObject: { r: '0x0', g: '0x0', b: '0x0', a: '0xF' }, hexObjectPercent: { r: '0%', g: '0%', b: '0%' }, - rgbPercent: 'rgb(0%,0%,0%)', - rgbaPercent: 'rgba(0%,0%,0%,1)', + rgbPercentLegacy: 'rgb(0%,0%,0%)', + rgbPercent: 'rgb(0% 0% 0%)', + rgbaPercentLegacy: 'rgba(0%,0%,0%,1)', + rgbaPercent: 'rgb(0% 0% 0% / 1)', - rgb: 'rgb(0,0,0)', + rgbLegacy: 'rgb(0,0,0)', + rgb: 'rgb(0 0 0)', rgbObject: { r: 0, g: 0, b: 0 }, - rgba: 'rgba(0,0,0,1)', + rgbaLegacy: 'rgba(0,0,0,1)', + rgba: 'rgb(0 0 0 / 1)', rgbaObject: { r: 0, g: 0, b: 0, a: 1 }, - hsl: 'hsl(0,0%,0%)', + hslLegacy: 'hsl(0,0%,0%)', + hsl: 'hsl(0 0% 0%)', hslObject: { h: 0, s: 0, l: 0 }, - hsla: 'hsla(0,0%,0%,1)', + hslaLegacy: 'hsla(0,0%,0%,1)', + hsla: 'hsl(0 0% 0% / 1)', hslaObject: { h: 0, s: 0, l: 0, a: 1 } } ]; @@ -310,16 +304,16 @@ export const HEX3 = [ export const CMYK_COLORS = [ { rgb: '#F00', - cmyk: 'cmyk(0%,100%,100%,0%)', - cmykSpaces: 'cmyk(0% 100% 100% 0%)', - cmykWithAlpha: 'cmyk(0%,100%,100%,0%,1)', - cmykSpacesWithAlpha: 'cmyk(0% 100% 100% 0% / 1)', - cmykSpacesWithAlphaInPercentages: 'cmyk(0% 100% 100% 0% / 100%)', - cmykint: 'cmyk(0,1,1,0)', - cmykintSpaces: 'cmyk(0 1 1 0)', - cmykintWithAlpha: 'cmyk(0,1,1,0,1)', - cmykintSpacesWithAlpha: 'cmyk(0 1 1 0 / 1)', - cmykintSpacesWithAlphaInPercentages: 'cmyk(0 1 1 0 / 100%)', + cmykLegacy: 'device-cmyk(0%,100%,100%,0%)', + cmyk: 'device-cmyk(0% 100% 100% 0%)', + cmykLegacyWithAlpha: 'device-cmyk(0%,100%,100%,0%,1)', + cmykWithAlpha: 'device-cmyk(0% 100% 100% 0% / 1)', + cmykWithAlphaInPercentages: 'device-cmyk(0% 100% 100% 0% / 100%)', + cmykintLegacy: 'device-cmyk(0,1,1,0)', + cmykint: 'device-cmyk(0 1 1 0)', + cmykintLegacyWithAlpha: 'device-cmyk(0,1,1,0,1)', + cmykintWithAlpha: 'device-cmyk(0 1 1 0 / 1)', + cmykintWithAlphaInPercentages: 'device-cmyk(0 1 1 0 / 100%)', cmykObject: {c: '0%', m: '100%', y: '100%', k: '0%'}, cmykIntObject: {c: 0, m: 1, y: 1, k: 0}, cmykIntObjectWithAlpha: {c: 0, m: 1, y: 1, k: 0, a: 1}, @@ -328,16 +322,16 @@ export const CMYK_COLORS = [ }, { rgb: '#0F0', - cmyk: 'cmyk(100%,0%,100%,0%)', - cmykSpaces: 'cmyk(100% 0% 100% 0%)', - cmykWithAlpha: 'cmyk(100%,0%,100%,0%,1)', - cmykSpacesWithAlpha: 'cmyk(100% 0% 100% 0% / 1)', - cmykSpacesWithAlphaInPercentages: 'cmyk(100% 0% 100% 0% / 100%)', - cmykint: 'cmyk(1,0,1,0)', - cmykintSpaces: 'cmyk(1 0 1 0)', - cmykintWithAlpha: 'cmyk(1,0,1,0,1)', - cmykintSpacesWithAlpha: 'cmyk(1 0 1 0 / 1)', - cmykintSpacesWithAlphaInPercentages: 'cmyk(1 0 1 0 / 100%)', + cmykLegacy: 'device-cmyk(100%,0%,100%,0%)', + cmyk: 'device-cmyk(100% 0% 100% 0%)', + cmykLegacyWithAlpha: 'device-cmyk(100%,0%,100%,0%,1)', + cmykWithAlpha: 'device-cmyk(100% 0% 100% 0% / 1)', + cmykWithAlphaInPercentages: 'device-cmyk(100% 0% 100% 0% / 100%)', + cmykintLegacy: 'device-cmyk(1,0,1,0)', + cmykint: 'device-cmyk(1 0 1 0)', + cmykintLegacyWithAlpha: 'device-cmyk(1,0,1,0,1)', + cmykintWithAlpha: 'device-cmyk(1 0 1 0 / 1)', + cmykintWithAlphaInPercentages: 'device-cmyk(1 0 1 0 / 100%)', cmykObject: {c: '100%', m: '0%', y: '100%', k: '0%'}, cmykIntObject: {c: 1, m: 0, y: 1, k: 0}, cmykIntObjectWithAlpha: {c: 1, m: 0, y: 1, k: 0, a: 1}, @@ -346,16 +340,16 @@ export const CMYK_COLORS = [ }, { rgb: '#00F', - cmyk: 'cmyk(100%,100%,0%,0%)', - cmykSpaces: 'cmyk(100% 100% 0% 0%)', - cmykWithAlpha: 'cmyk(100%,100%,0%,0%,1)', - cmykSpacesWithAlpha: 'cmyk(100% 100% 0% 0% / 1)', - cmykSpacesWithAlphaInPercentages: 'cmyk(100% 100% 0% 0% / 100%)', - cmykint: 'cmyk(1,1,0,0)', - cmykintSpaces: 'cmyk(1 1 0 0)', - cmykintWithAlpha: 'cmyk(1,1,0,0,1)', - cmykintSpacesWithAlpha: 'cmyk(1 1 0 0 / 1)', - cmykintSpacesWithAlphaInPercentages: 'cmyk(1 1 0 0 / 100%)', + cmykLegacy: 'device-cmyk(100%,100%,0%,0%)', + cmyk: 'device-cmyk(100% 100% 0% 0%)', + cmykLegacyWithAlpha: 'device-cmyk(100%,100%,0%,0%,1)', + cmykWithAlpha: 'device-cmyk(100% 100% 0% 0% / 1)', + cmykWithAlphaInPercentages: 'device-cmyk(100% 100% 0% 0% / 100%)', + cmykintLegacy: 'device-cmyk(1,1,0,0)', + cmykint: 'device-cmyk(1 1 0 0)', + cmykintLegacyWithAlpha: 'device-cmyk(1,1,0,0,1)', + cmykintWithAlpha: 'device-cmyk(1 1 0 0 / 1)', + cmykintWithAlphaInPercentages: 'device-cmyk(1 1 0 0 / 100%)', cmykObject: {c: '100%', m: '100%', y: '0%', k: '0%'}, cmykIntObject: {c: 1, m: 1, y: 0, k: 0}, cmykIntObjectWithAlpha: {c: 1, m: 1, y: 0, k: 0, a: 1}, @@ -364,16 +358,16 @@ export const CMYK_COLORS = [ }, { rgb: '#0FF', - cmyk: 'cmyk(100%,0%,0%,0%)', - cmykSpaces: 'cmyk(100% 0% 0% 0%)', - cmykWithAlpha: 'cmyk(100%,0%,0%,0%,1)', - cmykSpacesWithAlpha: 'cmyk(100% 0% 0% 0% / 1)', - cmykSpacesWithAlphaInPercentages: 'cmyk(100% 0% 0% 0% / 100%)', - cmykint: 'cmyk(1,0,0,0)', - cmykintSpaces: 'cmyk(1 0 0 0)', - cmykintWithAlpha: 'cmyk(1,0,0,0,1)', - cmykintSpacesWithAlpha: 'cmyk(1 0 0 0 / 1)', - cmykintSpacesWithAlphaInPercentages: 'cmyk(1 0 0 0 / 100%)', + cmykLegacy: 'device-cmyk(100%,0%,0%,0%)', + cmyk: 'device-cmyk(100% 0% 0% 0%)', + cmykLegacyWithAlpha: 'device-cmyk(100%,0%,0%,0%,1)', + cmykWithAlpha: 'device-cmyk(100% 0% 0% 0% / 1)', + cmykWithAlphaInPercentages: 'device-cmyk(100% 0% 0% 0% / 100%)', + cmykintLegacy: 'device-cmyk(1,0,0,0)', + cmykint: 'device-cmyk(1 0 0 0)', + cmykintLegacyWithAlpha: 'device-cmyk(1,0,0,0,1)', + cmykintWithAlpha: 'device-cmyk(1 0 0 0 / 1)', + cmykintWithAlphaInPercentages: 'device-cmyk(1 0 0 0 / 100%)', cmykObject: {c: '100%', m: '0%', y: '0%', k: '0%'}, cmykIntObject: {c: 1, m: 0, y: 0, k: 0}, cmykIntObjectWithAlpha: {c: 1, m: 0, y: 0, k: 0, a: 1}, @@ -382,16 +376,16 @@ export const CMYK_COLORS = [ }, { rgb: '#FF0', - cmyk: 'cmyk(0%,0%,100%,0%)', - cmykSpaces: 'cmyk(0% 0% 100% 0%)', - cmykWithAlpha: 'cmyk(0%,0%,100%,0%,1)', - cmykSpacesWithAlpha: 'cmyk(0% 0% 100% 0% / 1)', - cmykSpacesWithAlphaInPercentages: 'cmyk(0% 0% 100% 0% / 100%)', - cmykint: 'cmyk(0,0,1,0)', - cmykintSpaces: 'cmyk(0 0 1 0)', - cmykintWithAlpha: 'cmyk(0,0,1,0,1)', - cmykintSpacesWithAlpha: 'cmyk(0 0 1 0 / 1)', - cmykintSpacesWithAlphaInPercentages: 'cmyk(0 0 1 0 / 100%)', + cmykLegacy: 'device-cmyk(0%,0%,100%,0%)', + cmyk: 'device-cmyk(0% 0% 100% 0%)', + cmykLegacyWithAlpha: 'device-cmyk(0%,0%,100%,0%,1)', + cmykWithAlpha: 'device-cmyk(0% 0% 100% 0% / 1)', + cmykWithAlphaInPercentages: 'device-cmyk(0% 0% 100% 0% / 100%)', + cmykintLegacy: 'device-cmyk(0,0,1,0)', + cmykint: 'device-cmyk(0 0 1 0)', + cmykintLegacyWithAlpha: 'device-cmyk(0,0,1,0,1)', + cmykintWithAlpha: 'device-cmyk(0 0 1 0 / 1)', + cmykintWithAlphaInPercentages: 'device-cmyk(0 0 1 0 / 100%)', cmykObject: {c: '0%', m: '0%', y: '100%', k: '0%'}, cmykIntObject: {c: 0, m: 0, y: 1, k: 0}, cmykIntObjectWithAlpha: {c: 0, m: 0, y: 1, k: 0, a: 1}, @@ -400,16 +394,16 @@ export const CMYK_COLORS = [ }, { rgb: '#F0F', - cmyk: 'cmyk(0%,100%,0%,0%)', - cmykSpaces: 'cmyk(0% 100% 0% 0%)', - cmykWithAlpha: 'cmyk(0%,100%,0%,0%,1)', - cmykSpacesWithAlpha: 'cmyk(0% 100% 0% 0% / 1)', - cmykSpacesWithAlphaInPercentages: 'cmyk(0% 100% 0% 0% / 100%)', - cmykint: 'cmyk(0,1,0,0)', - cmykintSpaces: 'cmyk(0 1 0 0)', - cmykintWithAlpha: 'cmyk(0,1,0,0,1)', - cmykintSpacesWithAlpha: 'cmyk(0 1 0 0 / 1)', - cmykintSpacesWithAlphaInPercentages: 'cmyk(0 1 0 0 / 100%)', + cmykLegacy: 'device-cmyk(0%,100%,0%,0%)', + cmyk: 'device-cmyk(0% 100% 0% 0%)', + cmykLegacyWithAlpha: 'device-cmyk(0%,100%,0%,0%,1)', + cmykWithAlpha: 'device-cmyk(0% 100% 0% 0% / 1)', + cmykWithAlphaInPercentages: 'device-cmyk(0% 100% 0% 0% / 100%)', + cmykintLegacy: 'device-cmyk(0,1,0,0)', + cmykint: 'device-cmyk(0 1 0 0)', + cmykintLegacyWithAlpha: 'device-cmyk(0,1,0,0,1)', + cmykintWithAlpha: 'device-cmyk(0 1 0 0 / 1)', + cmykintWithAlphaInPercentages: 'device-cmyk(0 1 0 0 / 100%)', cmykObject: {c: '0%', m: '100%', y: '0%', k: '0%'}, cmykIntObject: {c: 0, m: 1, y: 0, k: 0}, cmykIntObjectWithAlpha: {c: 0, m: 1, y: 0, k: 0, a: 1}, @@ -418,16 +412,16 @@ export const CMYK_COLORS = [ }, { rgb: '#000', - cmyk: 'cmyk(0%,0%,0%,100%)', - cmykSpaces: 'cmyk(0% 0% 0% 100%)', - cmykWithAlpha: 'cmyk(0%,0%,0%,100%,1)', - cmykSpacesWithAlpha: 'cmyk(0% 0% 0% 100% / 1)', - cmykSpacesWithAlphaInPercentages: 'cmyk(0% 0% 0% 100% / 100%)', - cmykint: 'cmyk(0,0,0,1)', - cmykintSpaces: 'cmyk(0 0 0 1)', - cmykintWithAlpha: 'cmyk(0,0,0,1,1)', - cmykintSpacesWithAlpha: 'cmyk(0 0 0 1 / 1)', - cmykintSpacesWithAlphaInPercentages: 'cmyk(0 0 0 1 / 100%)', + cmykLegacy: 'device-cmyk(0%,0%,0%,100%)', + cmyk: 'device-cmyk(0% 0% 0% 100%)', + cmykLegacyWithAlpha: 'device-cmyk(0%,0%,0%,100%,1)', + cmykWithAlpha: 'device-cmyk(0% 0% 0% 100% / 1)', + cmykWithAlphaInPercentages: 'device-cmyk(0% 0% 0% 100% / 100%)', + cmykintLegacy: 'device-cmyk(0,0,0,1)', + cmykint: 'device-cmyk(0 0 0 1)', + cmykintLegacyWithAlpha: 'device-cmyk(0,0,0,1,1)', + cmykintWithAlpha: 'device-cmyk(0 0 0 1 / 1)', + cmykintWithAlphaInPercentages: 'device-cmyk(0 0 0 1 / 100%)', cmykObject: {c: '0%', m: '0%', y: '0%', k: '100%'}, cmykIntObject: {c: 0, m: 0, y: 0, k: 1}, cmykIntObjectWithAlpha: {c: 0, m: 0, y: 0, k: 1, a: 1},