@touchtech/baselayer-ui 8.3.17 → 8.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/styles.css +5 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see index.js.LICENSE.txt */
|
|
2
|
-
(()=>{var e={3349:(e,t,n)=>{"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,{Z:()=>r})},2122:(e,t,n)=>{"use strict";function r(){return r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},1788:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.d(t,{Z:()=>r})},9756:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},5348:(e,t,n)=>{"use strict";n.r(t),n.d(t,{useOutsideClick:()=>a,usePromise:()=>l,useSWRHooksConfig:()=>Y,useToggle:()=>J});var r=n(6689),o={capture:!0};function a(e){var t=(0,r.useRef)();return(0,r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n,o),document.addEventListener("touchend",n,o),function(){document.removeEventListener("mouseup",n,o),document.removeEventListener("touchend",n,o)}}),[e]),t}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function l(){var e=this,t=i((0,r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],o=t[1],a=(0,r.useRef)(!1);(0,r.useEffect)((function(){return a.current=!1,function(){a.current=!0}}),[]);var l=(0,r.useCallback)((function(t){return n=e,r=void 0,l=function(){var e,n;return function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(l){return function(u){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,r=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==l[0]&&2!==l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([l,u])}}}(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),o({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===a.current&&o({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===a.current&&o({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))},new((i=void 0)||(i=Promise))((function(e,t){function o(e){try{u(l.next(e))}catch(e){t(e)}}function a(e){try{u(l.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(e){e(n)}))).then(o,a)}u((l=l.apply(n,r||[])).next())}));var n,r,i,l}),[a]);return[n,l]}Object.create,Object.create;var u=n(1688);const s=new WeakMap,c={},d={},f=()=>{},p=f(),v=Object,h=e=>e===p,m=e=>"function"==typeof e,_=(e,t)=>({...e,...t}),g="undefined",b=typeof window!=g,y=typeof document!=g,O=(e,t)=>{const n=s.get(e);return[()=>e.get(t)||c,r=>{if(!h(t)){const o=e.get(t);t in d||(d[t]=o),n[5](t,_(o,r),o||c)}},n[6],()=>!h(t)&&t in d?d[t]:e.get(t)||c]},w=new WeakMap;let E=0;const M=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let o,a;if(v(e)!==e||r||n==RegExp)o=r?e.toJSON():"symbol"==t?e.toString():"string"==t?JSON.stringify(e):""+e;else{if(o=w.get(e),o)return o;if(o=++E+"~",w.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=M(e[a])+",";w.set(e,o)}if(n==v){o="#";const t=v.keys(e).sort();for(;!h(a=t.pop());)h(e[a])||(o+=a+":"+M(e[a])+",");w.set(e,o)}}return o};let S=!0;const[x,C]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[f,f],P={isOnline:()=>S,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},j={initFocus:e=>(y&&document.addEventListener("visibilitychange",e),x("focus",e),()=>{y&&document.removeEventListener("visibilitychange",e),C("focus",e)}),initReconnect:e=>{const t=()=>{S=!0,e()},n=()=>{S=!1};return x("online",t),x("offline",n),()=>{C("online",t),C("offline",n)}}},I=!r.useId,k=!b||"Deno"in window,D=k?r.useEffect:r.useLayoutEffect,R="undefined"!=typeof navigator&&navigator.connection,N=!k&&R&&(["slow-2g","2g"].includes(R.effectiveType)||R.saveData),L=e=>{if(m(e))try{e=e()}catch(t){e=""}const t=e;return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?M(e):"",t]};let T=0;const z=()=>++T,A=2;var H=A;async function B(...e){const[t,n,r,o]=e,a=_({populateCache:!0,throwOnError:!0},"boolean"==typeof o?{revalidate:o}:o||{});let i=a.populateCache;const l=a.rollbackOnError;let u=a.optimisticData;const c=!1!==a.revalidate,d=e=>"function"==typeof l?l(e):!1!==l,f=a.throwOnError;if(m(n)){const e=n,r=[],o=t.keys();for(let n=o.next();!n.done;n=o.next()){const o=n.value;!/^\$(inf|sub)\$/.test(o)&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(v))}return v(n);async function v(n){const[o]=L(n);if(!o)return;const[a,l]=O(t,o),[v,_,g]=s.get(t),b=v[o],y=()=>c&&(delete g[o],b&&b[0])?b[0](A).then((()=>a().data)):a().data;if(e.length<3)return y();let w,E=r;const M=z();_[o]=[M,0];const S=!h(u),x=a(),C=x.data,P=x._c,j=h(P)?C:P;if(S&&(u=m(u)?u(j):u,l({data:u,_c:j})),m(E))try{E=E(j)}catch(e){w=e}if(E&&m(E.then)){if(E=await E.catch((e=>{w=e})),M!==_[o][0]){if(w)throw w;return E}w&&S&&d(w)&&(i=!0,E=j,l({data:E,_c:p}))}i&&(w||(m(i)&&(E=i(E,j)),l({data:E,_c:p}))),_[o][1]=z();const I=await y();if(l({_c:p}),!w)return i?I:E;if(f)throw w}}const F=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},V=(e,t)=>{if(!s.has(e)){const n=_(j,t),r={},o=B.bind(p,e);let a=f;const i={},l=(e,t)=>{const n=i[e]||[];return i[e]=n,n.push(t),()=>n.splice(n.indexOf(t),1)},u=(t,n,r)=>{e.set(t,n);const o=i[t];if(o)for(const e of o)e(n,r)},c=()=>{if(!s.has(e)&&(s.set(e,[r,{},{},{},o,u,l]),!k)){const t=n.initFocus(setTimeout.bind(p,F.bind(p,r,0))),o=n.initReconnect(setTimeout.bind(p,F.bind(p,r,1)));a=()=>{t&&t(),o&&o(),s.delete(e)}}};return c(),[e,o,c,a]}return[e,s.get(e)[4]]},[W,G]=V(new Map),U=_({onLoadingSlow:f,onSuccess:f,onError:f,onErrorRetry:(e,t,n,r,o)=>{const a=n.errorRetryCount,i=o.retryCount,l=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!h(a)&&i>a||setTimeout(r,l,o)},onDiscarded:f,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:N?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:N?5e3:3e3,compare:(e,t)=>M(e)==M(t),isPaused:()=>!1,cache:W,mutate:G,fallback:{}},P),Z=(0,r.createContext)({}),K=b&&window.__SWR_DEVTOOLS_USE__,q=K?window.__SWR_DEVTOOLS_USE__:[],Q=()=>_(U,(0,r.useContext)(Z));q.concat((e=>(t,n,r)=>e(t,n&&((...e)=>{const r=L(t)[0],[,,,o]=s.get(W),a=o[r];return a?(delete o[r],a):n(...e)}),r)));K&&(window.__SWR_DEVTOOLS_REACT__=r);const X={dedupe:!0};function Y(){var e=Q();return(0,r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function J(e){void 0===e&&(e=!1);var t=i((0,r.useState)(e),2),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(e){o("boolean"==typeof e?e:function(e){return!e})}),[])]}v.defineProperty((e=>{const{value:t}=e,n=(0,r.useContext)(Z),o=m(t),a=(0,r.useMemo)((()=>o?t(n):t),[o,n,t]),i=(0,r.useMemo)((()=>o?a:((e,t)=>{const n=_(e,t);if(t){const{use:r,fallback:o}=e,{use:a,fallback:i}=t;r&&a&&(n.use=r.concat(a)),o&&i&&(n.fallback=_(o,i))}return n})(n,a)),[o,n,a]),l=a&&a.provider,u=(0,r.useRef)(p);l&&!u.current&&(u.current=V(l(i.cache||W),a));const s=u.current;return s&&(i.cache=s[0],i.mutate=s[1]),D((()=>{if(s)return s[2]&&s[2](),s[3]}),[]),(0,r.createElement)(Z.Provider,_(e,{value:i}))}),"defaultValue",{value:U})},7659:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=Array.isArray;function o(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,a=0;a<e.length;a++)""!==(n=o(e[a]))&&(t+=(t&&" ")+n);else for(var a in e)e.hasOwnProperty(a)&&e[a]&&(t+=(t&&" ")+a);return t}},5580:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"umKAZmLkARLzX3gnuKkp",left:"u1l5AJGbUiP6RVFIKxOI",small:"hxZpK9CpBK1wR0W0v4SD",large:"o9DYmt4xfLaImiVzI9dQ",xlarge:"qmEVxSZS5kfL3aVbee1n",inverted:"CNOZHLd9XbokzOW6LYBP",rounded:"jJCAzw2SyaH4tIWXrAlR",rightOffset:"KGCu7aPjQy_aFNjHWNuw",leftOffset:"dDHYyGzXNi773FAl13GX",noShadow:"lQF1YcUqM0OHvPSlSwl_",noBorder:"sEo25Eiv6zs1D_x5q8Vy",transparent:"vm3cmANNuYlaQM5Yqz9G",stretchHorizontally:"Pikfzj7zYg2IntdJymuK",stretchVertically:"oSgV5cwX6inkSbCG98w8",noPadding:"gSZrGR1xqm8Q1iRUfGga",content:"pYLUj9noAqT8WytjDOOb"}},3391:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"Unj4rp1Dy71ACruzXl75",left:"EXWMRvveRvQifixzTH02",small:"_U0znUk5QTAzPnS2gaLC",medium:"aH8u4s2MtYc5y4vyubDw",large:"c306yV78al_eGwBSkmFm",xlarge:"xvA1meUmE28AEOpjsWc9",inverted:"WB77YIDOSwJoX68NjlUG",rounded:"k2nJCsENNgCz2Hlsj_bG",rightOffset:"jAe5EVE37OrKYvkXdc1s",leftOffset:"DgbtB6G4LoBDd04P_MzO",noShadow:"KpQI95_f8nHvk7G2J6h8",transparent:"L8PnxUQogzgFMMT7QI4d",stretchHorizontally:"JulaxSccoGmqtgTNJmk9",stretchVertically:"zTYr9W7g2SqbVjPFAokG",noPadding:"UHzTm51kVyll52_S7sGB",noBorder:"hRP1XYfuJ49TsYU_cO5A",disabled:"lwWITPhM9TMo585Dsaw8",content:"MyT_PufJdEvsZE3hSW8P"}},7941:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={checkbox:"sy8lKVWP56AlOR7ys_9A",small:"XjfpcuPtguFZvKrxxt7y",medium:"tLP3dZWepXH3HKg17sOH",large:"Wgp9qHWDrQi9fmcxQIVK",xlarge:"lUA6tpLkWcGFgnoqCFvu"}},4560:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorSwatch:"PvbeBm4SMtMqlQNTyQjQ",small:"S7E3EPy_AWQukEexuvTf",large:"a1FsItKPQEOBeTqBCuDl",xlarge:"sFhgQEN_UOL3ZxOAR1Ie",selected:"aUx2uSBSs14VqwPqjvlQ",srOnly:"JIQmeZdd9TFl5I_gifPi"}},7855:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ZZVHcX45XCblmDab9ewZ",modalHeader:"xTX1XJfCSUsrh_yLlZoi",modalContent:"Te6jHdlyjsQXmnTs9ban",noPadding:"Lz_gwSwP3QCN5zYzFsEi",modalButtonsContainer:"Gh1uvxMfEgPTdt66Qis2",modalButtons:"Iaw34FkMJqjrGQ58BGfx"}},2838:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawer:"U3dCzqTyynyzBn2mFkmW",visible:"sTcJdQUaZPOeseD_2fe0",drawerPaper:"I3Z0jA85NrYHJ1wDZHWb",drawerPaperEnter:"MWLbaUZIM1JbDLE3H0_Q",drawerPaperEnterActive:"reBHfkDZXiKwiRvYTfHu",drawerPaperEnterDone:"J5dmw7woKvwgujgbB0qV",drawerPaperExit:"rm7jH2Sq7wf2d9IlSevk",drawerPaperExitActive:"nbeoVr9VpIXAH1GWfphC",drawerPaperExitDone:"sgNb6nOhF35lWQE9jQKE",drawerPaperContent:"CsqC6wvlLYDsKBsZ0GdT",drawerOverlay:"e34gBjx3k3bRYPZlf9wZ",noOverlay:"b3ucNpEtNq2OrQKwvqqw"}},8930:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerContent:"gF1_WnOrrPKWEQoXJmgf"}},6282:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerFooter:"nk69HulhPkeFsEMuZOrB"}},713:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerHeader:"vdwkPIGxzELdYhmiZPq2",drawerHeaderClose:"uz4NM_XvNZaqxVZYvSYA",drawerHeaderCloseIcon:"ZdNjx6DpeWEI2pAVL18t"}},6114:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={input:"KWk7oZ8tvPfQicgQYlVa",label:"e6zrx7UOP_BSoMM3GrjQ",small:"ihSnDQg0ygxcVLIySJkM",large:"FpwhbD7HXx_uFT3l01wb",xlarge:"YVds4u_DfWSG1r0SAGnS",inverted:"CKynoLhiLd6KzAYi5NtG",rounded:"v72mzJumFSiDOOE1MnXH",noShadow:"EoewJEDbGdteJ_NRfS5F",noBorder:"cb7l4xvcNnHNlQZmLjkb",noPadding:"vcOwDYuGF2etoPfyFDX5",transparent:"l08khaXIUOcruBFHws7X",stretchHorizontally:"I0xvJbB0LNT0S15jTMWW",stretchVertically:"X6fqUcVH1BlCRJBiiJii"}},7800:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"j1mfiYEGolTRmbBmGKlQ",row:"EGaKvmqM2SawiFrW8Ctu",column:"NMi0MT1b7rp1Zjye8UVA",fixed:"g0j3kkQr_AjCKFd94S1s",plain:"Fr1q7WnF1nFnnbfgpaRz",transparent:"udRZe9H0bKUHXjOwG1Fn",top:"uYiKw6VvDEkhjZHzvo7e",topEdge:"tRbEcYjE3KncsNwTbvVM",topOnEdge:"LGunG37X1_HReuw3qzua",right:"lw27rGVlo34axCxw3QHi",rightEdge:"PZItvleFIIj0Jx2MikRE",rightOnEdge:"KNuGaDPq9rmXfgmO3pcb",bottom:"dn1uh1tasGxDGqmU18HN",bottomEdge:"eD0UCrBRpsRTPPwwIoVg",bottomOnEdge:"IrhH5gfyGsQ6kdcP94RQ",left:"D5fGHnAGCMR4Ltb9y4Hr",leftEdge:"_AtAd2tr7t1kXusRbXSz",leftOnEdge:"_8C9dd0X_JXY4uHzw5Nj",horizontalCenter:"QDks8ovt9RVcFWeEB8wb",verticalCenter:"CVuQRE652GH2VJn8zOTs"}},7060:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={icon:"fp_BLJ2FW4Oyyb0bHiD4",small:"zsVDNfNRkos0Q5uv9FR9",medium:"eSlil3evPtPBswWF80C5",large:"T7ULyq1yE9AVXEMknV4G",xlarge:"QPAceVQdZ6QIQ2Qvijwg",inverted:"mFTGbhLa4NlUO16nvJrk"}},2844:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"Wcemyr2Gr8ZCGc6Bjbqw",small:"T_pa8CcpL1GvuDsdvsqq",medium:"nLLErjOgfa5b2sOeZrQ5",large:"Q71NFBHrSxQLQE4AGD2h",xlarge:"EbBiyF1rg6wRaxSMK8so",rounded:"tLjuwRSsIiLJGVsrarbd",topOffset:"d4KLpI79CuSU6gkPPInA",rightOffset:"G7hJZoYv8qIrNmFCygME",bottomOffset:"DZs3AvGkVdOvJfLeJ8Gh",leftOffset:"wEEnWRcvuvomh_OLO5iq",inverted:"K9WGCFpUadO9WIXwFaj_",noShadow:"eAQJ10kEkPmDxMGvlYzy",noBorder:"OlENR9ntuWYLGOKKKrGR",transparent:"KOcsPrivr94rxnfHVlfe"}},6299:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"gUSTy3_Np1mGJHW1N3gx",small:"IYuVzh1HBzgoTCi2WQ_p",medium:"JNg3_bCEfIvi4geEcsS3",large:"n61saxA20_EwMgt9Gw4s",xlarge:"gqGnvnH9X6mGvzwl4aGz",rounded:"DkzuqhEaiMR3XMs1M1If",topOffset:"sGnvevvsxBZUaXrpZQpI",rightOffset:"hgY3ZpkyD70p7E8rn3bi",bottomOffset:"ROoQY6OaRnQzDOfX_QDF",leftOffset:"Kevm582e3gXPJE3ODopa",inverted:"OOznCbAbjOLc4_bCEqfy",noShadow:"xrHxfce034dgYNEknlVM",noBorder:"eHt_RIq8JGoYHc4iCoeg",transparent:"nfgqtSgfrtrGFDWfZonQ",disabled:"I_nhJ9u6pTD_2SF3ql_l"}},1513:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"rO5W6DQk4NtoWrwmKMWg",hasOverlay:"llvnmI8K13g9PTBiCNz3",overlay:"GVk2j8wV1t3gY5uXQ4qI",image:"gXjYqKe9w3NgYurYwUQp",cover:"_l7ONOWayr8tyuGiyUsc",contain:"SYjOb8lAhmDbdylFIQY9",stretchHorizontally:"HkrozSfllTFlkkbqxXWh",stretchVertically:"xyHXhhHEYXMYeavWZw_N"}},8197:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menu:"xQ9Bfk0X1HmZgihCutZV",open:"utv9FYOU7Q0JNnZW1ejv",entrance:"yYKjcCvD2L94FpPgOigQ",header:"wNL86s9zGFi8XK11KloR",footer:"mu4Jev1c4KcifeF8Mzqg",noBorder:"EaPSjL1nXsz7TCx11Lrf"}},2752:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"kYh7DKYqH6jdLXd7PdJw",menuContainer:"QleAO3ymTliU6ZNBQxfg",top:"axfcrjSH4lvujzrsk2Qp",right:"LtVltW3BPZ5gNXVxxkrP",left:"PRb5f8XcMZOcY5ufPMdq",bottom:"__MZ5OoiIrVidFXbQfju"}},754:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={overlay:"j0h9hd_glvI9xdOnaauY",noOverlay:"SL48SzZufKgdMiGY3YTN",modal:"hTXcZevGyyI0AcvprXVJ",transparent:"ibqloG1HxHx3stdkVZSj",noShadow:"IEo5vEeftvLpmwi0VyjD",modalButton:"FoPfC3j7cIg2BYfzqQGE"}},3733:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4"}},186:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={header:"WSYYBAz53dhquIOZPWBP",label:"b55hyZ0oHl0s4Ot9OhwM",expanded:"N3AzO5kZlh4HAPknnYzq"}},8054:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"SmCi4xOxEsLti61GoYk4",selected:"_4rJtCOZpnf3xn8pmFvCQ",checkboxContainer:"MSXZF7xcC5aoqHlqpI0g",checkbox:"NJjq9_gAedDRrOE_XWE1",label:"vwmDLc96D9tXgWqs4IKz"}},4822:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"e3yXJBrYTW4sVZKY2NFm",selectAllContainer:"czHLa4L3tRCJDCiDB6Az",checkbox:"iKqjWUd96zSp9xmocXzk",checkboxContainer:"axih9EnuzK1fwhqYDVRA",label:"q5Ws9hr8ZMX7fSvDK_qn",noOptions:"ovKvB5H8EoFznuMqUujl",searchKeyword:"TwcVaRDz8cokIK9D9DxJ"}},2396:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ",iconSearchContainer:"Z5LPx47ybEKeX29XBYBC",resetButton:"hjT9ZXvmvc5QUruwz8El"}},7917:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ETGbXTdYAp0G40TJPLnK",disabled:"nECgGdXOspUrQWHjzwkg",header:"XAoJhxTApcR9lGegyp9A",active:"ebemztZEWIV4_6AsKPQH",content:"rRDWv2qqwSrBy3evZ7Dw",noOptions:"fLP4x4IxnyiWhp5BP5sT",searchContainer:"yOECDJeDVT5z5YaXpeJn",iconButton:"aVKp3H3JWraBf7G5UdaP",expanded:"BrxrtD3aMX7IU52rA220"}},6884:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={placeholder:"ddlRidnIzYhQC9DGpgIt",active:"shHsEJGtbz4cmA6x1G1l",tagWrapper:"BGEShc7qu2fk9DZE2RUs",selectedOption:"ma9BIjuGCQeKF44sgucT",selectedOptions:"nRpAwv97CesqQbDLcet9"}},6684:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",content:"o_21r_EjLKB3xhgGy74s",closeButton:"ZZPRZLUq9MQyifD8x2jH",disabled:"uCLz0vbNnQZFX8kVuUiG"}},9067:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"gwYKRPpGdIMVXkiN0H9B",scrollable:"ovdjwhr21awv2AgiQEd2",tagInput:"avImGs3XcLeDLGhxD8bw",disabled:"yT8Pp8TUvP7sQSGeGLNJ",textInput:"ZiNNf2oLVjExxp9RT2s_",small:"LemMUTseigxHbmIYVVTc",medium:"PUHJdM7ZEb3LFReM1_Ug",large:"j9mk52hGhoFwjw4FWHQ9",xlarge:"EiWqeFqQXE9LHUh1vxpX",noBorder:"O6WsOpUZoZeThUb_ViXn"}},7792:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={textInput:"NPZrksCpnXVJSq_snHjR",small:"jQGriQJSa04zsoG1a2u9",medium:"lVoY9Dp17HOBinMj0Q7o",large:"QlUaPbX8EaIi7rZ4Fb8o",xlarge:"rYPOM9fNtVLdPFyWKkGE",noBorder:"KDTINsHdolYReSbLcooH"}},9220:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},8907:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tooltip:"Km6UUy0jpqM0LA2eXccc",absolute:"e50zEjtfQK00lf_884OY",fixed:"jqxT4McOeUDDnGseZkBL",left:"yBv1lwDHpexxO3DPpd1v",right:"v852ExxmQ6AtSQF2sX8A",top:"iV2yzPizoou9omW811hg",bottom:"VmmE8ENsCkzbwLpL3XJg"}},6504:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"yY9HV40ITTWgAV8qLw1w",hasOverlay:"zub5bqdVXm4NFxpI4HBf",video:"MVCDVjfgmHE7QemcYxGl",cover:"V4nEcm179vZe2MLgRVaM",contain:"u2_MfeCjMSl_aBNJn5nL",stretchHorizontally:"ljfsYs8BQqleKzbLkkad",stretchVertically:"HJtRqbAFLOnXVyGz8iFU",overlay:"ALHhOHAeLlBDy1DpYqiv"}},1914:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Hint=void 0;var l=i(n(6689)),u=n(2394);t.Hint=function(e){var t,n,o=l.default.Children.only(e.children);if("input"!==(null===(n=null===(t=o.type)||void 0===t?void 0:t.toString())||void 0===n?void 0:n.toLowerCase()))throw new TypeError("react-autocomplete-hint: 'Hint' only accepts an 'input' element as child.");var a=e.options,i=e.disableHint,s=e.allowTabFill,c=e.allowEnterFill,d=e.onFill,f=e.onHint,p=e.valueModifier,v=o.props,h=l.useRef(null),m=l.useRef(null),_=l.useRef(null),g=l.useState(""),b=g[0],y=g[1],O=l.useState(""),w=O[0],E=O[1],M=l.useState(""),S=M[0],x=M[1],C=l.useState(),P=C[0],j=C[1],I=l.useState(),k=I[0],D=I[1];l.useEffect((function(){if("object"==typeof a[0]){var e=u.getFirstDuplicateOption(a);e&&console.warn('react-autocomplete-hint: "'+e+'" occurs more than once and may cause errors. Options should not contain duplicate values!')}}),[a]),l.useEffect((function(){if(!i){var e=h.current&&window.getComputedStyle(h.current);e&&L(m,_,e)}}));var R=function(e){E(e);var t,n=function(e){if(e&&""!==e)return"string"==typeof a[0]?a.filter((function(t){return t.toLowerCase()!==e.toLowerCase()&&t.toLowerCase().startsWith(e.toLowerCase())})).sort()[0]:a.filter((function(t){return t.label.toLowerCase()!==e.toLowerCase()&&t.label.toLowerCase().startsWith(e.toLowerCase())})).sort((function(e,t){return u.sortAsc(e.label,t.label)}))[0]}(e);t=n?"string"==typeof n?n.slice(e.length):n.label.slice(e.length):"",x(t),j(n),f&&f(n)},N=function(){if(""!==S&&k){var e=b+S;k.target.value=e,v.onChange&&v.onChange(k),R(""),d&&d(P),y(e)}},L=function(e,t,n){var r,o;(null===(r=null==e?void 0:e.current)||void 0===r?void 0:r.style)&&(e.current.style.fontFamily=n.fontFamily,e.current.style.fontSize=n.fontSize,e.current.style.width=n.width,e.current.style.height=n.height,e.current.style.lineHeight=n.lineHeight,e.current.style.boxSizing=n.boxSizing,e.current.style.margin=u.interpolateStyle(n,"margin"),e.current.style.padding=u.interpolateStyle(n,"padding"),e.current.style.borderStyle=u.interpolateStyle(n,"border","style"),e.current.style.borderWidth=u.interpolateStyle(n,"border","width")),(null===(o=null==t?void 0:t.current)||void 0===o?void 0:o.style)&&(t.current.style.fontFamily=n.fontFamily,t.current.style.fontSize=n.fontSize,t.current.style.lineHeight=n.lineHeight)},T=l.cloneElement(o).ref,z=l.cloneElement(o,r(r({},v),{onChange:function(e){D(e),e.persist(),y(e.target.value);var t=p?p(e.target.value):e.target.value;R(t),v.onChange&&v.onChange(e)},onBlur:function(e){(null==_?void 0:_.current)!==e.relatedTarget&&(R(""),v.onBlur&&v.onBlur(e))},onFocus:function(e){R(e.target.value),v.onFocus&&v.onFocus(e)},onKeyDown:function(e){var t=null===e.currentTarget.selectionEnd||e.currentTarget.selectionEnd===e.currentTarget.value.length;t&&"ArrowRight"===e.key?N():(t&&s&&"Tab"===e.key&&""!==S||t&&c&&"Enter"===e.key&&""!==S)&&(e.preventDefault(),N()),v.onKeyDown&&v.onKeyDown(e)},ref:T&&"string"!=typeof T?u.mergeRefs(T,h):h}));return l.default.createElement("div",{className:"rah-input-wrapper",style:{position:"relative"}},i?o:l.default.createElement(l.default.Fragment,null,z,l.default.createElement("span",{className:"rah-hint-wrapper",ref:m,style:{display:"flex",pointerEvents:"none",backgroundColor:"transparent",borderColor:"transparent",boxShadow:"none",color:"rgba(0, 0, 0, 0.35)",position:"absolute",top:0,left:0}},l.default.createElement("span",{className:"rah-text-filler",style:{visibility:"hidden",pointerEvents:"none",whiteSpace:"pre"}},w),l.default.createElement("input",{className:"rah-hint",ref:_,onClick:function(e){var t,n=e.currentTarget.selectionEnd||0;0!==n?S&&""!==S&&(N(),setTimeout((function(){var e,t;null===(e=h.current)||void 0===e||e.focus();var r=w.length+n;null===(t=h.current)||void 0===t||t.setSelectionRange(r,r)}),0)):null===(t=h.current)||void 0===t||t.focus()},style:{pointerEvents:S&&""!==S?"visible":"none",background:"transparent",width:"100%",outline:"none",border:"none",boxShadow:"none",padding:0,margin:0,color:"rgba(0, 0, 0, 0.30)",caretColor:"transparent"},defaultValue:S,tabIndex:-1}))))}},2394:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getFirstDuplicateOption=t.sortAsc=t.interpolateStyle=t.mergeRefs=void 0,t.mergeRefs=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.filter(Boolean);return function(e){for(var t=0,r=n;t<r.length;t++){var o=r[t];"function"==typeof o?o(e):o&&(o.current=e)}}},t.interpolateStyle=function(e,t,n){return void 0===n&&(n=""),n&&(n=n.replace(n[0],n[0].toUpperCase())),["Top","Right","Bottom","Left"].map((function(r){return e[t+r+n]})).join(" ")},t.sortAsc=function(e,t){return e>t?1:e<t?-1:0},t.getFirstDuplicateOption=function(e){for(var t={},n=0;n<e.length;n++){if(t[e[n].label])return e[n].label;t[e[n].label]=!0}return null}},5172:(e,t,n)=>{"use strict";n.r(t),n.d(t,{isHotkeyPressed:()=>D,useHotkeys:()=>k,useIsHotkeyPressed:()=>P});var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function o(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function a(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var l={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},u={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},s={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},d={},f=1;f<20;f++)l["f".concat(f)]=111+f;var p=[],v=!1,h="all",m=[],_=function(e){return l[e.toLowerCase()]||u[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function g(e){h=e||"all"}function b(){return h||"all"}var y=function(e){var t=e.key,n=e.scope,r=e.method,o=e.splitKey,l=void 0===o?"+":o;i(t).forEach((function(e){var t=e.split(l),o=t.length,i=t[o-1],s="*"===i?"*":_(i);if(d[s]){n||(n=b());var c=o>1?a(u,t):[];d[s]=d[s].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,o=!0,a=0;a<n.length;a++)-1===r.indexOf(n[a])&&(o=!1);return o}(e.mods,c))}))}}))};function O(e,t,n,r){var o;if(t.element===r&&(t.scope===n||"all"===t.scope)){for(var a in o=t.mods.length>0,c)Object.prototype.hasOwnProperty.call(c,a)&&(!c[a]&&t.mods.indexOf(+a)>-1||c[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[91])&&!o&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function w(e,t){var n=d["*"],r=e.keyCode||e.which||e.charCode;if(E.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===p.indexOf(r)&&229!==r&&p.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=s[t];e[t]&&-1===p.indexOf(n)?p.push(n):!e[t]&&p.indexOf(n)>-1?p.splice(p.indexOf(n),1):"metaKey"===t&&e[t]&&3===p.length&&(e.ctrlKey||e.shiftKey||e.altKey||(p=p.slice(p.indexOf(n))))})),r in c){for(var o in c[r]=!0,u)u[o]===r&&(E[o]=!0);if(!n)return}for(var a in c)Object.prototype.hasOwnProperty.call(c,a)&&(c[a]=e[s[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===p.indexOf(17)&&p.push(17),-1===p.indexOf(18)&&p.push(18),c[17]=!0,c[18]=!0);var i=b();if(n)for(var l=0;l<n.length;l++)n[l].scope===i&&("keydown"===e.type&&n[l].keydown||"keyup"===e.type&&n[l].keyup)&&O(e,n[l],i,t);if(r in d)for(var f=0;f<d[r].length;f++)if(("keydown"===e.type&&d[r][f].keydown||"keyup"===e.type&&d[r][f].keyup)&&d[r][f].key){for(var v=d[r][f],h=v.splitKey,m=v.key.split(h),g=[],y=0;y<m.length;y++)g.push(_(m[y]));g.sort().join("")===p.sort().join("")&&O(e,v,i,t)}}}function E(e,t,n){p=[];var r=i(e),l=[],s="all",f=document,h=0,g=!1,b=!0,y="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(s=t.scope),t.element&&(f=t.element),t.keyup&&(g=t.keyup),void 0!==t.keydown&&(b=t.keydown),void 0!==t.capture&&(O=t.capture),"string"==typeof t.splitKey&&(y=t.splitKey)),"string"==typeof t&&(s=t);h<r.length;h++)l=[],(e=r[h].split(y)).length>1&&(l=a(u,e)),(e="*"===(e=e[e.length-1])?"*":_(e))in d||(d[e]=[]),d[e].push({keyup:g,keydown:b,scope:s,mods:l,shortcut:r[h],method:n,key:r[h],splitKey:y,element:f});void 0!==f&&!function(e){return m.indexOf(e)>-1}(f)&&window&&(m.push(f),o(f,"keydown",(function(e){w(e,f)}),O),v||(v=!0,o(window,"focus",(function(){p=[]}),O)),o(f,"keyup",(function(e){w(e,f),function(e){var t=e.keyCode||e.which||e.charCode,n=p.indexOf(t);if(n>=0&&p.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&p.splice(0,p.length),93!==t&&224!==t||(t=91),t in c)for(var r in c[t]=!1,u)u[r]===t&&(E[r]=!1)}(e)}),O))}var M={setScope:g,getScope:b,deleteScope:function(e,t){var n,r;for(var o in e||(e=b()),d)if(Object.prototype.hasOwnProperty.call(d,o))for(n=d[o],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;b()===e&&g(t||"all")},getPressedKeyCodes:function(){return p.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=_(e)),-1!==p.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},trigger:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(d).forEach((function(n){var r=d[n].find((function(n){return n.scope===t&&n.shortcut===e}));r&&r.method&&r.method()}))},unbind:function(e){if(void 0===e)Object.keys(d).forEach((function(e){return delete d[e]}));else if(Array.isArray(e))e.forEach((function(e){e.key&&y(e)}));else if("object"==typeof e)e.key&&y(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=n[0],a=n[1];"function"==typeof o&&(a=o,o=""),y({key:e,scope:o,method:a,splitKey:"+"})}},keyMap:l,modifier:u,modifierMap:s};for(var S in M)Object.prototype.hasOwnProperty.call(M,S)&&(E[S]=M[S]);if("undefined"!=typeof window){var x=window.hotkeys;E.noConflict=function(e){return e&&window.hotkeys===E&&(window.hotkeys=x),E},window.hotkeys=E}var C=n(6689);function P(){return E.isPressed}E.filter=function(){return!0};var j=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},I=function(e){return j(e,["INPUT","TEXTAREA","SELECT"])};function k(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var o=n||{},a=o.enableOnTags,i=o.filter,l=o.keyup,u=o.keydown,s=o.filterPreventDefault,c=void 0===s||s,d=o.enabled,f=void 0===d||d,p=o.enableOnContentEditable,v=void 0!==p&&p,h=(0,C.useRef)(null),m=(0,C.useCallback)((function(e,n){var r,o;return i&&!i(e)?!c:!!(I(e)&&!j(e,a)||null!=(r=e.target)&&r.isContentEditable&&!v)||!!(null===h.current||document.activeElement===h.current||null!=(o=h.current)&&o.contains(document.activeElement))&&(t(e,n),!0)}),r?[h,a,i].concat(r):[h,a,i]);return(0,C.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),E(e,n||{},m),function(){return E.unbind(e,m)};E.unbind(e,m)}),[m,e,f]),h}var D=E.isPressed},8744:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CSSTransition:()=>M,ReplaceTransition:()=>R,SwitchTransition:()=>V,Transition:()=>O,TransitionGroup:()=>k,config:()=>d});var r=n(2122),o=n(9756),a=n(1788);function i(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}var l=n(6689),u=n.n(l),s=n(6405),c=n.n(s);const d={disabled:!1},f=u().createContext(null);var p=function(e){return e.scrollTop},v="unmounted",h="exited",m="entering",_="entered",g="exiting",b=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,a=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?a?(o=h,r.appearStatus=m):o=_:o=t.unmountOnExit||t.mountOnEnter?v:h,r.state={status:o},r.nextCallback=null,r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===v?{status:h}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==m&&n!==_&&(t=m):n!==m&&n!==_||(t=g)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===m){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:c().findDOMNode(this);n&&p(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===h&&this.setState({status:v})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[c().findDOMNode(this),r],a=o[0],i=o[1],l=this.getTimeouts(),u=r?l.appear:l.enter;!e&&!n||d.disabled?this.safeSetState({status:_},(function(){t.props.onEntered(a)})):(this.props.onEnter(a,i),this.safeSetState({status:m},(function(){t.props.onEntering(a,i),t.onTransitionEnd(u,(function(){t.safeSetState({status:_},(function(){t.props.onEntered(a,i)}))}))})))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:c().findDOMNode(this);t&&!d.disabled?(this.props.onExit(r),this.safeSetState({status:g},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:h},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:h},(function(){e.props.onExited(r)}))},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:c().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=o[0],i=o[1];this.props.addEndListener(a,i)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===v)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,(0,o.Z)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return u().createElement(f.Provider,{value:null},"function"==typeof n?n(e,r):u().cloneElement(u().Children.only(n),r))},t}(u().Component);function y(){}b.contextType=f,b.propTypes={},b.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:y,onEntering:y,onEntered:y,onExit:y,onExiting:y,onExited:y},b.UNMOUNTED=v,b.EXITED=h,b.ENTERING=m,b.ENTERED=_,b.EXITING=g;const O=b;var w=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=i(n.className,r):n.setAttribute("class",i(n.className&&n.className.baseVal||"",r)));var n,r}))},E=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1];t.removeClasses(o,"exit"),t.addClass(o,a?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1]?"appear":"enter";t.addClass(o,a,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1]?"appear":"enter";t.removeClasses(o,a),t.addClass(o,a,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}(0,a.Z)(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&p(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r}))}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,a=n.done;this.appliedClasses[t]={},r&&w(e,r),o&&w(e,o),a&&w(e,a)},n.render=function(){var e=this.props,t=(e.classNames,(0,o.Z)(e,["classNames"]));return u().createElement(O,(0,r.Z)({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(u().Component);E.defaultProps={classNames:""},E.propTypes={};const M=E;var S=n(3349);function x(e,t){var n=Object.create(null);return e&&l.Children.map(e,(function(e){return e})).forEach((function(e){n[e.key]=function(e){return t&&(0,l.isValidElement)(e)?t(e):e}(e)})),n}function C(e,t,n){return null!=n[t]?n[t]:e.props[t]}function P(e,t,n){var r=x(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),a=[];for(var i in e)i in t?a.length&&(o[i]=a,a=[]):a.push(i);var l={};for(var u in t){if(o[u])for(r=0;r<o[u].length;r++){var s=o[u][r];l[o[u][r]]=n(s)}l[u]=n(u)}for(r=0;r<a.length;r++)l[a[r]]=n(a[r]);return l}(t,r);return Object.keys(o).forEach((function(a){var i=o[a];if((0,l.isValidElement)(i)){var u=a in t,s=a in r,c=t[a],d=(0,l.isValidElement)(c)&&!c.props.in;!s||u&&!d?s||!u||d?s&&u&&(0,l.isValidElement)(c)&&(o[a]=(0,l.cloneElement)(i,{onExited:n.bind(null,i),in:c.props.in,exit:C(i,"exit",e),enter:C(i,"enter",e)})):o[a]=(0,l.cloneElement)(i,{in:!1}):o[a]=(0,l.cloneElement)(i,{onExited:n.bind(null,i),in:!0,exit:C(i,"exit",e),enter:C(i,"enter",e)})}})),o}var j=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},I=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind((0,S.Z)(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}(0,a.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o=t.children,a=t.handleExited;return{children:t.firstRender?(n=e,r=a,x(n.children,(function(e){return(0,l.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:C(e,"appear",n),enter:C(e,"enter",n),exit:C(e,"exit",n)})}))):P(e,o,a),firstRender:!1}},n.handleExited=function(e,t){var n=x(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=(0,r.Z)({},t.children);return delete n[e.key],{children:n}})))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=(0,o.Z)(e,["component","childFactory"]),a=this.state.contextValue,i=j(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?u().createElement(f.Provider,{value:a},i):u().createElement(f.Provider,{value:a},u().createElement(t,r,i))},t}(u().Component);I.propTypes={},I.defaultProps={component:"div",childFactory:function(e){return e}};const k=I;var D=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}(0,a.Z)(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,o=this.props.children,a=u().Children.toArray(o)[t];if(a.props[e]&&(r=a.props)[e].apply(r,n),this.props[e]){var i=a.props.nodeRef?void 0:c().findDOMNode(this);this.props[e](i)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=(0,o.Z)(e,["children","in"]),a=u().Children.toArray(t),i=a[0],l=a[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,u().createElement(k,r,n?u().cloneElement(i,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):u().cloneElement(l,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(u().Component);D.propTypes={};const R=D;var N,L,T="out-in",z="in-out",A=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},H=((N={})[T]=function(e){var t=e.current,n=e.changeState;return u().cloneElement(t,{in:!1,onExited:A(t,"onExited",(function(){n(m,null)}))})},N[z]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,u().cloneElement(r,{in:!0,onEntered:A(r,"onEntered",(function(){n(m)}))})]},N),B=((L={})[T]=function(e){var t=e.children,n=e.changeState;return u().cloneElement(t,{in:!0,onEntered:A(t,"onEntered",(function(){n(_,u().cloneElement(t,{in:!0}))}))})},L[z]=function(e){var t=e.current,n=e.children,r=e.changeState;return[u().cloneElement(t,{in:!1,onExited:A(t,"onExited",(function(){r(_,u().cloneElement(n,{in:!0}))}))}),u().cloneElement(n,{in:!0})]},L),F=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).state={status:_,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}(0,a.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===m&&e.mode===z?{status:m}:!t.current||((n=t.current)===(r=e.children)||u().isValidElement(n)&&u().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:u().cloneElement(e.children,{in:!0})}:{status:g};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,o=this.state,a=o.status,i=o.current,l={children:n,current:i,changeState:this.changeState,status:a};switch(a){case m:e=B[r](l);break;case g:e=H[r](l);break;case _:e=i}return u().createElement(f.Provider,{value:{isMounting:!this.appeared}},e)},t}(u().Component);F.propTypes={},F.defaultProps={mode:T};const V=F},5691:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r=n(6689),o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},i=function(e){function t(){var e,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var o=arguments.length,i=Array(o),l=0;l<o;l++)i[l]=arguments[l];return n=r=a(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),r._lastRenderedStartIndex=-1,r._lastRenderedStopIndex=-1,r._memoizedUnloadedRanges=[],r._onItemsRendered=function(e){var t=e.visibleStartIndex,n=e.visibleStopIndex;r._lastRenderedStartIndex=t,r._lastRenderedStopIndex=n,r._ensureRowsLoaded(t,n)},r._setRef=function(e){r._listRef=e},a(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),o(t,[{key:"resetloadMoreItemsCache",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,a=n.minimumBatchSize,i=void 0===a?10:a,l=n.threshold,u=void 0===l?15:l,s=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.stopIndex,a=[],i=null,l=null,u=e.startIndex;u<=o;u++)t(u)?null!==l&&(a.push(i,l),i=l=null):(l=u,null===i&&(i=u));if(null!==l){for(var s=Math.min(Math.max(l,i+r-1),n-1),c=l+1;c<=s&&!t(c);c++)l=c;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var d=a[0]-1;if(t(d))break;a[0]=d}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==s.length||this._memoizedUnloadedRanges.some((function(e,t){return s[t]!==e})))&&(this._memoizedUnloadedRanges=s,this._loadUnloadedRanges(s))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],a=e[r+1],i=n(o,a);null!=i&&i.then((function(){if(!((e={lastRenderedStartIndex:t._lastRenderedStartIndex,lastRenderedStopIndex:t._lastRenderedStopIndex,startIndex:o,stopIndex:a}).startIndex>e.lastRenderedStopIndex||e.stopIndex<e.lastRenderedStartIndex)){if(null==t._listRef)return;"function"==typeof t._listRef.resetAfterIndex?t._listRef.resetAfterIndex(o,!0):("function"==typeof t._listRef._getItemStyleCache&&t._listRef._getItemStyleCache(-1),t._listRef.forceUpdate())}var e}))},o=0;o<e.length;o+=2)r(o)}}]),t}(r.PureComponent);const l=i},4356:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FixedSizeGrid:()=>A,FixedSizeList:()=>H,VariableSizeGrid:()=>j,VariableSizeList:()=>z,areEqual:()=>W,shouldComponentUpdate:()=>G});var r=n(2122),o=n(3349),a=n(1788),i=Number.isNaN||function(e){return"number"==typeof e&&e!=e};function l(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(!((r=e[n])===(o=t[n])||i(r)&&i(o)))return!1;var r,o;return!0}const u=function(e,t){var n;void 0===t&&(t=l);var r,o=[],a=!1;return function(){for(var i=[],l=0;l<arguments.length;l++)i[l]=arguments[l];return a&&n===this&&t(i,o)||(r=e.apply(this,i),a=!0,n=this,o=i),r}};var s=n(6689),c=n(9756),d="object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()};function f(e){cancelAnimationFrame(e.id)}function p(e,t){var n=d(),r={id:requestAnimationFrame((function o(){d()-n>=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var v=-1;function h(e){if(void 0===e&&(e=!1),-1===v||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),v=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return v}var m=null;function _(e){if(void 0===e&&(e=!1),null===m||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?m="positive-descending":(t.scrollLeft=1,m=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),m}return m}var g=150,b=function(e){var t=e.columnIndex;return e.data,e.rowIndex+":"+t};function y(e){var t,n=e.getColumnOffset,i=e.getColumnStartIndexForOffset,l=e.getColumnStopIndexForStartIndex,c=e.getColumnWidth,d=e.getEstimatedTotalHeight,v=e.getEstimatedTotalWidth,m=e.getOffsetForColumnAndAlignment,y=e.getOffsetForRowAndAlignment,w=e.getRowHeight,E=e.getRowOffset,M=e.getRowStartIndexForOffset,S=e.getRowStopIndexForStartIndex,x=e.initInstanceProps,C=e.shouldResetStyleCacheOnItemSizeChange,P=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=x(r.props,(0,o.Z)(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:(0,o.Z)(r),isScrolling:!1,horizontalScrollDirection:"forward",scrollLeft:"number"==typeof r.props.initialScrollLeft?r.props.initialScrollLeft:0,scrollTop:"number"==typeof r.props.initialScrollTop?r.props.initialScrollTop:0,scrollUpdateWasRequested:!1,verticalScrollDirection:"forward"},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o,a,i,l,u){return r.props.onItemsRendered({overscanColumnStartIndex:e,overscanColumnStopIndex:t,overscanRowStartIndex:n,overscanRowStopIndex:o,visibleColumnStartIndex:a,visibleColumnStopIndex:i,visibleRowStartIndex:l,visibleRowStopIndex:u})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n,o,a){return r.props.onScroll({horizontalScrollDirection:n,scrollLeft:e,scrollTop:t,verticalScrollDirection:o,scrollUpdateWasRequested:a})})),r._getItemStyle=void 0,r._getItemStyle=function(e,t){var o,a=r.props,i=a.columnWidth,l=a.direction,u=a.rowHeight,s=r._getItemStyleCache(C&&i,C&&l,C&&u),d=e+":"+t;if(s.hasOwnProperty(d))o=s[d];else{var f=n(r.props,t,r._instanceProps),p="rtl"===l;s[d]=o={position:"absolute",left:p?void 0:f,right:p?f:void 0,top:E(r.props,e,r._instanceProps),height:w(r.props,e,r._instanceProps),width:c(r.props,t,r._instanceProps)}}return o},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScroll=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.clientWidth,a=t.scrollLeft,i=t.scrollTop,l=t.scrollHeight,u=t.scrollWidth;r.setState((function(e){if(e.scrollLeft===a&&e.scrollTop===i)return null;var t=r.props.direction,s=a;if("rtl"===t)switch(_()){case"negative":s=-a;break;case"positive-descending":s=u-o-a}s=Math.max(0,Math.min(s,u-o));var c=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:s,scrollTop:c,verticalScrollDirection:e.scrollTop<i?"forward":"backward",scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,g)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1)}))},r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),P(e),null};var j=t.prototype;return j.scrollTo=function(e){var t=e.scrollLeft,n=e.scrollTop;void 0!==t&&(t=Math.max(0,t)),void 0!==n&&(n=Math.max(0,n)),this.setState((function(e){return void 0===t&&(t=e.scrollLeft),void 0===n&&(n=e.scrollTop),e.scrollLeft===t&&e.scrollTop===n?null:{horizontalScrollDirection:e.scrollLeft<t?"forward":"backward",scrollLeft:t,scrollTop:n,scrollUpdateWasRequested:!0,verticalScrollDirection:e.scrollTop<n?"forward":"backward"}}),this._resetIsScrollingDebounced)},j.scrollToItem=function(e){var t=e.align,n=void 0===t?"auto":t,r=e.columnIndex,o=e.rowIndex,a=this.props,i=a.columnCount,l=a.height,u=a.rowCount,s=a.width,c=this.state,f=c.scrollLeft,p=c.scrollTop,_=h();void 0!==r&&(r=Math.max(0,Math.min(r,i-1))),void 0!==o&&(o=Math.max(0,Math.min(o,u-1)));var g=d(this.props,this._instanceProps),b=v(this.props,this._instanceProps)>s?_:0,O=g>l?_:0;this.scrollTo({scrollLeft:void 0!==r?m(this.props,r,n,f,this._instanceProps,O):f,scrollTop:void 0!==o?y(this.props,o,n,p,this._instanceProps,b):p})},j.componentDidMount=function(){var e=this.props,t=e.initialScrollLeft,n=e.initialScrollTop;if(null!=this._outerRef){var r=this._outerRef;"number"==typeof t&&(r.scrollLeft=t),"number"==typeof n&&(r.scrollTop=n)}this._callPropsCallbacks()},j.componentDidUpdate=function(){var e=this.props.direction,t=this.state,n=t.scrollLeft,r=t.scrollTop;if(t.scrollUpdateWasRequested&&null!=this._outerRef){var o=this._outerRef;if("rtl"===e)switch(_()){case"negative":o.scrollLeft=-n;break;case"positive-ascending":o.scrollLeft=n;break;default:var a=o.clientWidth,i=o.scrollWidth;o.scrollLeft=i-a-n}else o.scrollLeft=Math.max(0,n);o.scrollTop=Math.max(0,r)}this._callPropsCallbacks()},j.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},j.render=function(){var e=this.props,t=e.children,n=e.className,o=e.columnCount,a=e.direction,i=e.height,l=e.innerRef,u=e.innerElementType,c=e.innerTagName,f=e.itemData,p=e.itemKey,h=void 0===p?b:p,m=e.outerElementType,_=e.outerTagName,g=e.rowCount,y=e.style,O=e.useIsScrolling,w=e.width,E=this.state.isScrolling,M=this._getHorizontalRangeToRender(),S=M[0],x=M[1],C=this._getVerticalRangeToRender(),P=C[0],j=C[1],I=[];if(o>0&&g)for(var k=P;k<=j;k++)for(var D=S;D<=x;D++)I.push((0,s.createElement)(t,{columnIndex:D,data:f,isScrolling:O?E:void 0,key:h({columnIndex:D,data:f,rowIndex:k}),rowIndex:k,style:this._getItemStyle(k,D)}));var R=d(this.props,this._instanceProps),N=v(this.props,this._instanceProps);return(0,s.createElement)(m||_||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},y)},(0,s.createElement)(u||c||"div",{children:I,ref:l,style:{height:R,pointerEvents:E?"none":void 0,width:N}}))},j._callPropsCallbacks=function(){var e=this.props,t=e.columnCount,n=e.onItemsRendered,r=e.onScroll,o=e.rowCount;if("function"==typeof n&&t>0&&o>0){var a=this._getHorizontalRangeToRender(),i=a[0],l=a[1],u=a[2],s=a[3],c=this._getVerticalRangeToRender(),d=c[0],f=c[1],p=c[2],v=c[3];this._callOnItemsRendered(i,l,d,f,u,s,p,v)}if("function"==typeof r){var h=this.state,m=h.horizontalScrollDirection,_=h.scrollLeft,g=h.scrollTop,b=h.scrollUpdateWasRequested,y=h.verticalScrollDirection;this._callOnScroll(_,g,m,y,b)}},j._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,s=u.horizontalScrollDirection,c=u.isScrolling,d=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var p=i(this.props,d,this._instanceProps),v=l(this.props,p,d,this._instanceProps),h=c&&"backward"!==s?1:Math.max(1,f),m=c&&"forward"!==s?1:Math.max(1,f);return[Math.max(0,p-h),Math.max(0,Math.min(t-1,v+m)),p,v]},j._getVerticalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanCount,r=e.overscanRowCount,o=e.overscanRowsCount,a=e.rowCount,i=this.state,l=i.isScrolling,u=i.verticalScrollDirection,s=i.scrollTop,c=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var d=M(this.props,s,this._instanceProps),f=S(this.props,d,s,this._instanceProps),p=l&&"backward"!==u?1:Math.max(1,c),v=l&&"forward"!==u?1:Math.max(1,c);return[Math.max(0,d-p),Math.max(0,Math.min(a-1,f+v)),d,f]},t}(s.PureComponent)).defaultProps={direction:"ltr",itemData:void 0,useIsScrolling:!1},t}var O=function(e,t){e.children,e.direction,e.height,e.innerTagName,e.outerTagName,e.overscanColumnsCount,e.overscanCount,e.overscanRowsCount,e.width,t.instance},w=function(e,t){var n=e.rowCount,r=t.rowMetadataMap,o=t.estimatedRowHeight,a=t.lastMeasuredRowIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},E=function(e,t){var n=e.columnCount,r=t.columnMetadataMap,o=t.estimatedColumnWidth,a=t.lastMeasuredColumnIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},M=function(e,t,n,r){var o,a,i;if("column"===e?(o=r.columnMetadataMap,a=t.columnWidth,i=r.lastMeasuredColumnIndex):(o=r.rowMetadataMap,a=t.rowHeight,i=r.lastMeasuredRowIndex),n>i){var l=0;if(i>=0){var u=o[i];l=u.offset+u.size}for(var s=i+1;s<=n;s++){var c=a(s);o[s]={offset:l,size:c},l+=c}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},S=function(e,t,n,r){var o,a;return"column"===e?(o=n.columnMetadataMap,a=n.lastMeasuredColumnIndex):(o=n.rowMetadataMap,a=n.lastMeasuredRowIndex),(a>0?o[a].offset:0)>=r?x(e,t,n,a,0,r):C(e,t,n,Math.max(0,a),r)},x=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=M(e,t,i,n).offset;if(l===a)return i;l<a?o=i+1:l>a&&(r=i-1)}return o>0?o-1:0},C=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&M(e,t,r,n).offset<o;)r+=i,i*=2;return x(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},P=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=M(e,t,n,a),s="column"===e?E(t,a):w(t,a),c=Math.max(0,Math.min(s-l,u.offset)),d=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=d-l&&o<=c+l?"auto":"center"),r){case"start":return c;case"end":return d;case"center":return Math.round(d+(c-d)/2);default:return o>=d&&o<=c?o:d>c||o<d?d:c}},j=y({getColumnOffset:function(e,t,n){return M("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return S("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=M("column",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=M("column",e,s,r).size;return s},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:E,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return P("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return P("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return M("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return S("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=M("row",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=M("row",e,s,r).size;return s},initInstanceProps:function(e,t){var n=e,r={columnMetadataMap:{},estimatedColumnWidth:n.estimatedColumnWidth||50,estimatedRowHeight:n.estimatedRowHeight||50,lastMeasuredColumnIndex:-1,lastMeasuredRowIndex:-1,rowMetadataMap:{}};return t.resetAfterColumnIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({columnIndex:e,shouldForceUpdate:n})},t.resetAfterRowIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({rowIndex:e,shouldForceUpdate:n})},t.resetAfterIndices=function(e){var n=e.columnIndex,o=e.rowIndex,a=e.shouldForceUpdate,i=void 0===a||a;"number"==typeof n&&(r.lastMeasuredColumnIndex=Math.min(r.lastMeasuredColumnIndex,n-1)),"number"==typeof o&&(r.lastMeasuredRowIndex=Math.min(r.lastMeasuredRowIndex,o-1)),t._getItemStyleCache(-1),i&&t.forceUpdate()},r},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.columnWidth,e.rowHeight}}),I=150,k=function(e,t){return e};function D(e){var t,n=e.getItemOffset,i=e.getEstimatedTotalSize,l=e.getItemSize,c=e.getOffsetForIndexAndAlignment,d=e.getStartIndexForOffset,v=e.getStopIndexForStartIndex,m=e.initInstanceProps,g=e.shouldResetStyleCacheOnItemSizeChange,b=e.validateProps;return t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=m(r.props,(0,o.Z)(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:(0,o.Z)(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"==typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,a=o.direction,i=o.itemSize,u=o.layout,s=r._getItemStyleCache(g&&i,g&&u,g&&a);if(s.hasOwnProperty(e))t=s[e];else{var c=n(r.props,e,r._instanceProps),d=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,p="rtl"===a,v=f?c:0;s[e]=t={position:"absolute",left:p?void 0:v,right:p?v:void 0,top:f?0:c,height:f?"100%":d,width:f?d:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,a=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,i=o;if("rtl"===t)switch(_()){case"negative":i=-o;break;case"positive-descending":i=a-n-o}return i=Math.max(0,Math.min(i,a-n)),{isScrolling:!0,scrollDirection:e.scrollOffset<o?"forward":"backward",scrollOffset:i,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._onScrollVertical=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.scrollHeight,a=t.scrollTop;r.setState((function(e){if(e.scrollOffset===a)return null;var t=Math.max(0,Math.min(a,o-n));return{isScrolling:!0,scrollDirection:e.scrollOffset<t?"forward":"backward",scrollOffset:t,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,I)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1,null)}))},r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return R(e,t),b(e),null};var y=t.prototype;return y.scrollTo=function(e){e=Math.max(0,e),this.setState((function(t){return t.scrollOffset===e?null:{scrollDirection:t.scrollOffset<e?"forward":"backward",scrollOffset:e,scrollUpdateWasRequested:!0}}),this._resetIsScrollingDebounced)},y.scrollToItem=function(e,t){void 0===t&&(t="auto");var n=this.props,r=n.itemCount,o=n.layout,a=this.state.scrollOffset;e=Math.max(0,Math.min(e,r-1));var i=0;if(this._outerRef){var l=this._outerRef;i="vertical"===o?l.scrollWidth>l.clientWidth?h():0:l.scrollHeight>l.clientHeight?h():0}this.scrollTo(c(this.props,e,t,a,this._instanceProps,i))},y.componentDidMount=function(){var e=this.props,t=e.direction,n=e.initialScrollOffset,r=e.layout;if("number"==typeof n&&null!=this._outerRef){var o=this._outerRef;"horizontal"===t||"horizontal"===r?o.scrollLeft=n:o.scrollTop=n}this._callPropsCallbacks()},y.componentDidUpdate=function(){var e=this.props,t=e.direction,n=e.layout,r=this.state,o=r.scrollOffset;if(r.scrollUpdateWasRequested&&null!=this._outerRef){var a=this._outerRef;if("horizontal"===t||"horizontal"===n)if("rtl"===t)switch(_()){case"negative":a.scrollLeft=-o;break;case"positive-ascending":a.scrollLeft=o;break;default:var i=a.clientWidth,l=a.scrollWidth;a.scrollLeft=l-i-o}else a.scrollLeft=o;else a.scrollTop=o}this._callPropsCallbacks()},y.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},y.render=function(){var e=this.props,t=e.children,n=e.className,o=e.direction,a=e.height,l=e.innerRef,u=e.innerElementType,c=e.innerTagName,d=e.itemCount,f=e.itemData,p=e.itemKey,v=void 0===p?k:p,h=e.layout,m=e.outerElementType,_=e.outerTagName,g=e.style,b=e.useIsScrolling,y=e.width,O=this.state.isScrolling,w="horizontal"===o||"horizontal"===h,E=w?this._onScrollHorizontal:this._onScrollVertical,M=this._getRangeToRender(),S=M[0],x=M[1],C=[];if(d>0)for(var P=S;P<=x;P++)C.push((0,s.createElement)(t,{data:f,key:v(P,f),index:P,isScrolling:b?O:void 0,style:this._getItemStyle(P)}));var j=i(this.props,this._instanceProps);return(0,s.createElement)(m||_||"div",{className:n,onScroll:E,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:a,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},g)},(0,s.createElement)(u||c||"div",{children:C,ref:l,style:{height:w?"100%":j,pointerEvents:O?"none":void 0,width:w?j:"100%"}}))},y._callPropsCallbacks=function(){if("function"==typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"==typeof this.props.onScroll){var a=this.state,i=a.scrollDirection,l=a.scrollOffset,u=a.scrollUpdateWasRequested;this._callOnScroll(i,l,u)}},y._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,a=r.scrollDirection,i=r.scrollOffset;if(0===t)return[0,0,0,0];var l=d(this.props,i,this._instanceProps),u=v(this.props,l,i,this._instanceProps),s=o&&"backward"!==a?1:Math.max(1,n),c=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-s),Math.max(0,Math.min(t-1,u+c)),l,u]},t}(s.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var R=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},N=function(e,t,n){var r=e.itemSize,o=n.itemMetadataMap,a=n.lastMeasuredIndex;if(t>a){var i=0;if(a>=0){var l=o[a];i=l.offset+l.size}for(var u=a+1;u<=t;u++){var s=r(u);o[u]={offset:i,size:s},i+=s}n.lastMeasuredIndex=t}return o[t]},L=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=N(e,a,t).offset;if(i===o)return a;i<o?r=a+1:i>o&&(n=a-1)}return r>0?r-1:0},T=function(e,t){var n=e.itemCount,r=t.itemMetadataMap,o=t.estimatedItemSize,a=t.lastMeasuredIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},z=D({getItemOffset:function(e,t,n){return N(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:T,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,s=e.width,c="horizontal"===i||"horizontal"===u?s:l,d=N(e,t,o),f=T(e,o),p=Math.max(0,Math.min(f-c,d.offset)),v=Math.max(0,d.offset-c+d.size+a);switch("smart"===n&&(n=r>=v-c&&r<=p+c?"auto":"center"),n){case"start":return p;case"end":return v;case"center":return Math.round(v+(p-v)/2);default:return r>=v&&r<=p?r:r<v?v:p}},getStartIndexForOffset:function(e,t,n){return function(e,t,n){var r=t.itemMetadataMap,o=t.lastMeasuredIndex;return(o>0?r[o].offset:0)>=n?L(e,t,o,0,n):function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&N(e,n,t).offset<r;)n+=a,a*=2;return L(e,t,Math.min(n,o-1),Math.floor(n/2),r)}(e,t,Math.max(0,o),n)}(e,n,t)},getStopIndexForStartIndex:function(e,t,n,r){for(var o=e.direction,a=e.height,i=e.itemCount,l=e.layout,u=e.width,s="horizontal"===o||"horizontal"===l?u:a,c=N(e,t,r),d=n+s,f=c.offset+c.size,p=t;p<i-1&&f<d;)p++,f+=N(e,p,r).size;return p},initInstanceProps:function(e,t){var n={itemMetadataMap:{},estimatedItemSize:e.estimatedItemSize||50,lastMeasuredIndex:-1};return t.resetAfterIndex=function(e,r){void 0===r&&(r=!0),n.lastMeasuredIndex=Math.min(n.lastMeasuredIndex,e-1),t._getItemStyleCache(-1),r&&t.forceUpdate()},n},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.itemSize}}),A=y({getColumnOffset:function(e,t){return t*e.columnWidth},getColumnWidth:function(e,t){return e.columnWidth},getRowOffset:function(e,t){return t*e.rowHeight},getRowHeight:function(e,t){return e.rowHeight},getEstimatedTotalHeight:function(e){var t=e.rowCount;return e.rowHeight*t},getEstimatedTotalWidth:function(e){var t=e.columnCount;return e.columnWidth*t},getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){var i=e.columnCount,l=e.columnWidth,u=e.width,s=Math.max(0,i*l-u),c=Math.min(s,t*l),d=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=d-u&&r<=c+u?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(u/2)?0:f>s+Math.floor(u/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,s=Math.max(0,u*i-l),c=Math.min(s,t*i),d=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=d-l&&r<=c+l?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(l/2)?0:f>s+Math.floor(l/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getColumnStartIndexForOffset:function(e,t){var n=e.columnWidth,r=e.columnCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getColumnStopIndexForStartIndex:function(e,t,n){var r=e.columnWidth,o=e.columnCount,a=e.width,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},getRowStartIndexForOffset:function(e,t){var n=e.rowHeight,r=e.rowCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getRowStopIndexForStartIndex:function(e,t,n){var r=e.rowHeight,o=e.rowCount,a=e.height,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.columnWidth,e.rowHeight}}),H=D({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.itemCount,s=e.itemSize,c=e.layout,d=e.width,f="horizontal"===i||"horizontal"===c?d:l,p=Math.max(0,u*s-f),v=Math.min(p,t*s),h=Math.max(0,t*s-f+s+a);switch("smart"===n&&(n=r>=h-f&&r<=v+f?"auto":"center"),n){case"start":return v;case"end":return h;case"center":var m=Math.round(h+(v-h)/2);return m<Math.ceil(f/2)?0:m>p+Math.floor(f/2)?p:m;default:return r>=h&&r<=v?r:r<h?h:v}},getStartIndexForOffset:function(e,t){var n=e.itemCount,r=e.itemSize;return Math.max(0,Math.min(n-1,Math.floor(t/r)))},getStopIndexForStartIndex:function(e,t,n){var r=e.direction,o=e.height,a=e.itemCount,i=e.itemSize,l=e.layout,u=e.width,s=t*i,c="horizontal"===r||"horizontal"===l?u:o,d=Math.ceil((c+n-s)/i);return Math.max(0,Math.min(a-1,t+d-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.itemSize}});function B(e,t){for(var n in e)if(!(n in t))return!0;for(var r in t)if(e[r]!==t[r])return!0;return!1}var F=["style"],V=["style"];function W(e,t){var n=e.style,r=(0,c.Z)(e,F),o=t.style,a=(0,c.Z)(t,V);return!B(n,o)&&!B(r,a)}function G(e,t){return!W(this.props,e)||B(this.state,t)}},7274:function(e,t){var n,r;n=function(){var e=/(auto|scroll)/,t=function(e,n){return null===e.parentNode?n:t(e.parentNode,n.concat([e]))},n=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},r=function(t){return e.test(function(e){return n(e,"overflow")+n(e,"overflow-y")+n(e,"overflow-x")}(t))};return function(e){if(e instanceof HTMLElement||e instanceof SVGElement){for(var n=t(e.parentNode,[]),o=0;o<n.length;o+=1)if(r(n[o]))return n[o];return document.scrollingElement||document.documentElement}}},void 0===(r=n.apply(t,[]))||(e.exports=r)},7237:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5580));t.default=function(e){var t,n=e.children,r=e.className,l=e.onClick,u=e.onPointerDown,s=e.containerRef,c=e.disabled,d=void 0!==c&&c,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.noShadow,_=void 0!==m&&m,g=e.noPadding,b=void 0!==g&&g,y=e.noBorder,O=void 0!==y&&y,w=e.transparent,E=void 0!==w&&w,M=e.stretchHorizontally,S=void 0!==M&&M,x=e.stretchVertically,C=void 0!==x&&x,P=e.autoFocus,j=void 0!==P&&P,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,N=e.size,L=void 0===N?"medium":N,T=e.type;return o.default.createElement("button",{ref:s,className:(0,a.default)([i.default.container,i.default[L],i.default[R],(t={},t[i.default.inverted]=p,t[i.default.rounded]=h,t[i.default.noShadow]=_,t[i.default.noPadding]=b,t[i.default.noBorder]=O,t[i.default.transparent]=E,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=C,t[i.default.leftOffset]=h&&k.includes("left"),t[i.default.rightOffset]=h&&k.includes("right"),t),r]),disabled:d,autoFocus:j,type:T,role:"button",onClick:l,onPointerDown:u},"string"!=typeof n&&Array.isArray(n)&&n.length?o.default.createElement("div",{className:i.default.content},n):n)}},9508:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var o=n(7237);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(o).default}})},289:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(3391));t.default=function(e){var t,n=e.children,r=e.inverted,l=void 0!==r&&r,u=e.className;return o.default.createElement("div",{className:(0,a.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=l,t),u])},n)}},4127:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var o=n(289);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(o).default}})},5798:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(2457));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.size,d=e.containerRef,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.transparent,_=void 0!==m&&m,g=e.noShadow,b=void 0!==g&&g,y=e.noPadding,O=void 0!==y&&y,w=e.noBorder,E=void 0!==w&&w,M=e.stretchHorizontally,S=void 0!==M&&M,x=e.stretchVertically,C=void 0!==x&&x,P=e.disabled,j=void 0!==P&&P,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,N=o(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:d,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[c],u.default[R],(t={},t[u.default.inverted]=p,t[u.default.rounded]=h,t[u.default.noShadow]=b,t[u.default.noPadding]=O,t[u.default.noBorder]=E,t[u.default.disabled]=j,t[u.default.transparent]=_,t[u.default.stretchHorizontally]=S,t[u.default.stretchVertically]=C,t[u.default.leftOffset]=h&&k.includes("left"),t[u.default.rightOffset]=h&&k.includes("right"),t),s])},N),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var o=n(5798);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(o).default}})},819:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(4115),c=i(n(7941));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,o=e.checked,a=e.disabled,i=e.name,d=e.className,f=e.indeterminate,p=e.size,v=void 0===p?"medium":p,h=e.autoFocus,m=void 0!==h&&h,_=(0,l.useCallback)((function(e){"function"==typeof n&&n(e.target.checked)}),[n]),g=l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([c.default.checkbox,d,c.default[v]]),onChange:_,placeholder:r,name:i,type:"checkbox",autoFocus:m});return t?l.default.createElement(s.Label,{value:t},g):l.default.createElement(l.default.Fragment,null,g)}},4616:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var o=n(819);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(o).default}})},5801:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(2554),l=r(n(4560));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,u=e.selectedColor,s=e.direction,c=void 0===s?"vertical":s,d=e.canToggle,f=void 0!==d&&d;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[c]])},t.map((function(e){return o.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==u?void 0:u.key),onClick:function(){f&&e.key===(null==u?void 0:u.key)?r(null):r(e)}})})))}},7429:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var o=n(5801);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(o).default}})},5324:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5057));t.default=function(e){var t,n=e.color,r=e.containerRef,l=e.isSelected,u=void 0!==l&&l,s=e.size,c=void 0===s?"medium":s,d=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:d,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var o=n(5324);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(o).default}})},4619:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(1391),l=r(n(7855));function u(e){var t,n=e.className,r=e.children,u=e.containerRef,s=e.header,c=e.isOpen,d=e.buttonsLeft,f=void 0===d?[]:d,p=e.buttonsRight,v=void 0===p?[]:p,h=e.onClose,m=void 0===h?function(){}:h,_=e.noPadding,g=void 0!==_&&_,b=e.noOverlay,y=void 0!==b&&b,O=e.noShadow,w=void 0!==O&&O,E=e.baseZIndex,M=void 0===E?1019:E;return o.default.createElement(i.Modal,{containerRef:u,isOpen:c,onClose:m,noOverlay:y,noShadow:w,baseZIndex:M},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!s&&o.default.createElement("h1",{className:l.default.modalHeader},s),o.default.createElement("div",{className:(0,a.default)([l.default.modalContent,(t={},t[l.default.noPadding]=g,t)])},r),o.default.createElement("div",{className:l.default.modalButtonsContainer},o.default.createElement("div",{className:l.default.modalButtons},f),o.default.createElement("div",{className:l.default.modalButtons},v))))}u.displayName="ConfirmationModal",t.default=u},6873:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var o=n(4619);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(o).default}})},9745:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useDrawerContext=t.DrawerContext=void 0;var o=r(n(6689));t.DrawerContext=o.default.createContext({}),t.useDrawerContext=function(){return o.default.useContext(t.DrawerContext)}},3096:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=i(n(7659)),u=a(n(6689)),s=i(n(6405)),c=i(n(2838)),d=n(8744),f=n(6790),p=n(60),v=n(5089),h=n(9745),m=n(5172),_={enter:c.default.drawerPaperEnter,enterActive:c.default.drawerPaperEnterActive,enterDone:c.default.drawerPaperEnterDone,exit:c.default.drawerPaperExit,exitActive:c.default.drawerPaperExitActive,exitDone:c.default.drawerPaperExitDone};function g(e){var t,n,r=e.open,o=e.className,a=e.style,i=e.noCloseIcon,f=void 0!==i&&i,p=e.noOverlay,v=void 0!==p&&p,g=e.children,b=e.unmountOnExit,y=void 0!==b&&b,O=e.mountOnEnter,w=void 0!==O&&O,E=e.portalContainer,M=void 0===E?document.body:E,S=e.onClose,x=e.onCloseAnimationEnd,C=(0,u.useState)(!1),P=C[0],j=C[1],I=(0,u.useState)(!1),k=I[0],D=I[1],R=(0,u.useRef)(null),N=function(e){var t,n;return null===(n=null===(t=e.current)||void 0===t?void 0:t.className.match(Object.values(_).join("|")))||void 0===n?void 0:n[0]}(R),L=(0,u.useMemo)((function(){return{onClose:S,noCloseIcon:f}}),[S,f]);(0,m.useHotkeys)("Escape",S);var T=(0,u.useCallback)((function(){j(!0),D(!0)}),[]),z=(0,u.useCallback)((function(){D(!1)}),[]),A=(0,u.useCallback)((function(){j(!1),null==x||x()}),[x]);return s.default.createPortal(u.default.createElement(d.CSSTransition,{nodeRef:R,in:r,timeout:300,classNames:_,unmountOnExit:y,mountOnEnter:w,onExited:A,onEnter:T,onExit:z},u.default.createElement(h.DrawerContext.Provider,{value:L},u.default.createElement("div",{className:(0,l.default)([c.default.drawer,o,(t={},t[c.default.visible]=P,t)])},u.default.createElement("div",{ref:R,className:(0,l.default)([c.default.drawerPaper,N]),style:a},u.default.createElement("div",{className:c.default.drawerPaperContent},g)),u.default.createElement("div",{className:(0,l.default)([c.default.drawerOverlay,(n={},n[c.default.noOverlay]=v,n[c.default.visible]=k,n)]),onClick:S})))),M)}g.Header=p.DrawerHeader,g.Content=v.DrawerContent,g.Footer=f.DrawerFooter,t.default=g},4190:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=r(n(8930));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.drawerContent,n])},t)}},5089:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerContent=void 0;var o=n(4190);Object.defineProperty(t,"DrawerContent",{enumerable:!0,get:function(){return r(o).default}})},1848:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=r(n(6282));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.drawerFooter,n])},t)}},6790:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerFooter=void 0;var o=n(1848);Object.defineProperty(t,"DrawerFooter",{enumerable:!0,get:function(){return r(o).default}})},7365:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=n(4958),l=r(n(8799)),u=r(n(713)),s=n(9745);t.default=function(e){var t=e.children,n=e.className,r=(0,s.useDrawerContext)(),c=r.onClose,d=r.noCloseIcon;return a.default.createElement("div",{className:(0,o.default)([u.default.drawerHeader,n])},!d&&a.default.createElement("div",{className:u.default.drawerHeaderClose},a.default.createElement("div",{className:u.default.drawerHeaderCloseIcon,onClick:c},a.default.createElement(i.Icon,{src:l.default,size:"xlarge"}))),t)}},60:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerHeader=void 0;var o=n(7365);Object.defineProperty(t,"DrawerHeader",{enumerable:!0,get:function(){return r(o).default}})},3212:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Drawer=void 0;var o=n(3096);Object.defineProperty(t,"Drawer",{enumerable:!0,get:function(){return r(o).default}})},943:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(6114)),u=r(n(3210));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return o.default.createElement(a.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},o.default.createElement("div",{className:l.default.container},t,o.default.createElement(i.Icon,{alt:"Dropdown",src:u.default})))}},3064:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=a(n(6689)),l=n(5348),u=n(943),s=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,c=e.selectedItem,d=e.placement,f=void 0===d?{vertical:"bottom",horizontal:"left"}:d,p=(0,i.useState)(!1),v=p[0],h=p[1],m=(0,l.useOutsideClick)((function(){return h(!1)})),_=!n||0===n.length,g=function(){return h(!v)};return i.default.createElement(s.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:_,selectedItem:c,toggleIsOpen:g}):i.default.createElement(u.Clickable,{display:o,isDisabled:_,onClick:g}),placement:f,ref:m},i.default.createElement(s.Menu,{isOpen:v},n&&n.map((function(e){return i.default.createElement(s.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},1889:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(3064);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var o=n(943);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return o.Clickable}})},2205:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8117));t.default=function(e){var t,n=e.children,r=e.accept,l=e.onChange,u=e.inputRef,s=e.multiple,c=void 0!==s&&s,d=e.disabled,f=void 0!==d&&d,p=e.inverted,v=void 0!==p&&p,h=e.noShadow,m=void 0!==h&&h,_=e.noBorder,g=void 0!==_&&_,b=e.noPadding,y=void 0!==b&&b,O=e.transparent,w=void 0!==O&&O,E=e.stretchHorizontally,M=void 0!==E&&E,S=e.stretchVertically,x=void 0!==S&&S,C=e.rounded,P=void 0!==C&&C,j=e.size,I=void 0===j?"medium":j;return o.default.createElement("label",{className:(0,a.default)([i.default.label,i.default[I],(t={},t[i.default.inverted]=v,t[i.default.rounded]=P,t[i.default.noShadow]=m,t[i.default.noBorder]=g,t[i.default.noPadding]=y,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=M,t[i.default.stretchVertically]=x,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var o=n(2205);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(o).default}})},4200:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7800));t.default=function(e){var t,n=e.className,r=e.children,l=e.containerRef,u=e.layout,s=void 0===u?"column":u,c=e.placement,d=void 0===c?{horizontal:"center",vertical:"bottom",parent:"viewport"}:c,f="center"===d.horizontal?"horizontalCenter":d.horizontal,p="center"===d.vertical?"verticalCenter":d.vertical;return o.default.createElement("div",{ref:l,"data-testid":"floating-panel",className:(0,a.default)([i.default.container,i.default[f],i.default[p],i.default[s],(t={},t[i.default.fixed]="container"!==d.parent,t),n])},r)}},6384:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var o=n(4200);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(o).default}})},6535:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7060));t.default=function(e){var t,n=e.src,r=e.alt,l=e.containerRef,u=e.size,s=void 0===u?"medium":u,c=e.inverted,d=void 0!==c&&c;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[s],(t={},t[i.default.inverted]=d,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var o=n(6535);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(o).default}})},6698:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(4958),l=r(n(2844));t.default=function(e){var t,n=e.className,r=e.containerRef,u=e.children,s=e.src,c=e.alt,d=e.offsetSides,f=void 0===d?[]:d,p=e.onClick,v=void 0===p?function(){}:p,h=e.disabled,m=void 0!==h&&h,_=e.inverted,g=void 0!==_&&_,b=e.noShadow,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,E=e.transparent,M=void 0!==E&&E,S=e.rounded,x=void 0!==S&&S,C=e.size,P=void 0===C?"medium":C,j=e.type,I=void 0===j?"button":j;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[P],(t={},t[l.default.inverted]=g,t[l.default.rounded]=x,t[l.default.noShadow]=y,t[l.default.noBorder]=w,t[l.default.transparent]=M,t[l.default.topOffset]=x&&f.includes("top"),t[l.default.rightOffset]=x&&f.includes("right"),t[l.default.bottomOffset]=x&&f.includes("bottom"),t[l.default.leftOffset]=x&&f.includes("left"),t),n]),disabled:m,onClick:v,type:I,role:"button"},o.default.createElement(i.Icon,{src:s,alt:c,size:P,inverted:g}),u)}},2847:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var o=n(6698);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(o).default}})},749:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(4958),s=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,c=e.children,d=e.className,f=e.src,p=e.alt,v=e.inverted,h=void 0!==v&&v,m=e.noShadow,_=void 0!==m&&m,g=e.noBorder,b=void 0!==g&&g,y=e.transparent,O=void 0!==y&&y,w=e.rounded,E=void 0!==w&&w,M=e.offsetSides,S=void 0===M?[]:M,x=e.disabled,C=void 0!==x&&x,P=e.size,j=void 0===P?"medium":P,I=o(e,["as","containerRef","children","className","src","alt","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:a,"data-testid":"icon-button-link",className:(0,l.default)([s.default.container,s.default[j],(t={},t[s.default.inverted]=h,t[s.default.rounded]=E,t[s.default.noShadow]=_,t[s.default.noBorder]=b,t[s.default.disabled]=C,t[s.default.transparent]=O,t[s.default.topOffset]=E&&S.includes("top"),t[s.default.rightOffset]=E&&S.includes("right"),t[s.default.bottomOffset]=E&&S.includes("bottom"),t[s.default.leftOffset]=E&&S.includes("left"),t),d])},I),i.default.createElement(u.Icon,{src:f,alt:p,size:j,inverted:h}),c)}},5860:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var o=n(749);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(o).default}})},5084:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(1513));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,l=e.srcHeight,u=e.children,s=e.containerRef,c=e.layout,d=void 0===c?"contain":c,f=e.decoding,p=void 0===f?"auto":f,v=e.loading,h=void 0===v?"eager":v,m=e.style,_=o.default.createElement("img",{className:(0,a.default)([i.default.image,i.default[d]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:l,decoding:p,loading:h,style:m});return u?o.default.createElement("div",{ref:s,className:(0,a.default)([i.default.container,i.default.hasOverlay])},_,u&&o.default.createElement("div",{className:i.default.overlay},u)):_}},3928:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var o=n(5084);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(o).default}})},6392:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8197));t.default=function(e){var t=e.className,n=e.children,r=e.value,l=e.containerRef;return o.default.createElement("label",{ref:l,className:(0,a.default)([i.default.container,t])},r,n)}},4115:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var o=n(6392);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(o).default}})},9611:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8639));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,l=e.header,u=e.headerActions;return o.default.createElement("div",{ref:r,className:(0,a.default)([i.default.container,n])},(l||u)&&o.default.createElement("div",{className:i.default.header},l&&o.default.createElement("h3",{className:i.default.headerLabel,id:l.id},l.text),u),o.default.createElement("ul",{"aria-labelledby":null==l?void 0:l.id,className:i.default.list},t))}},1332:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(9508),l=r(n(1725));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,u=e.disabled,s=void 0!==u&&u,c=e.transparent,d=void 0!==c&&c,f=e.noPadding,p=void 0!==f&&f,v=e.size,h=void 0===v?"medium":v,m=e.align,_=void 0===m?"center":m,g=e.onClick,b=void 0===g?function(){}:g;return o.default.createElement("li",{className:(0,a.default)([l.default.listViewItem])},o.default.createElement(i.Button,{onClick:b,disabled:s,inverted:r,transparent:d,noPadding:p,align:_,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(75),s=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,c=void 0!==a&&a,d=e.transparent,f=void 0!==d&&d,p=e.noPadding,v=void 0!==p&&p,h=e.align,m=void 0===h?"center":h,_=e.size,g=void 0===_?"medium":_,b=o(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,l.default)([s.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:c,transparent:f,noPadding:v,align:m,size:g,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var o=n(9611);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(o).default}});var a=n(1332);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(a).default}});var i=n(8569);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},935:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(9633),c=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,d=void 0===i||i,f=e.header,p=e.footer,v=e.smartLayout,h=void 0===v||v,m=(0,l.useContext)(s.PlacementContext),_=(0,l.useRef)(null),g=o||_;if(!m)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,l.useLayoutEffect)((function(){if(h&&g.current){var e=g.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===m.vertical?t:window.innerHeight-n;if(r<0){var o=g.current.querySelector("ul"),a=o.querySelectorAll("li,a"),i=o.clientHeight+r,l=a.length?getComputedStyle(a[0]).minHeight:0;o.style.maxHeight="calc(".concat(i,"px - ").concat(l,")")}}}),[d,m,h]),d?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:g,className:(0,u.default)([c.default.menu,(t={},t[c.default.open]=d,t),a])},l.default.createElement("div",null,f&&d&&l.default.createElement("h3",{className:c.default.header},f),l.default.createElement("ul",null,r)),p&&d&&l.default.createElement("div",{className:(0,u.default)([c.default.footer,(n={},n[c.default.noBorder]=!r,n)])},p))):null}},9633:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PlacementContext=void 0;var l=a(n(6689)),u=i(n(7659)),s=i(n(2752));t.PlacementContext=l.default.createContext(void 0),t.default=(0,l.forwardRef)((function(e,n){var r=e.children,o=e.button,a=e.className,i=e.placement,c=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([s.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return c}),[c])},l.default.createElement("div",{className:(0,u.default)([s.default.menuContainer,s.default[c.horizontal],s.default[c.vertical]])},r)))}))},9385:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(754));t.default=function(e){var t,n,r=e.children,l=e.className,u=e.onClick,s=e.noPadding,c=void 0!==s&&s,d=e.isActive,f=void 0!==d&&d;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=c,n),l]),onClick:u},r)}},9762:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(3079));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.noPadding,d=void 0!==c&&c,f=o(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,l.default)([u.default.menuLinkItem,s,(t={},t[u.default.noPadding]=d,t)])},f),a)}},3814:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var o=n(935);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(o).default}});var a=n(9633);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(a).default}});var i=n(9385);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var l=n(9762);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(l).default}})},4915:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=n(5172),s=i(n(7659)),c=i(n(9118));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,d=e.transparent,f=void 0!==d&&d,p=e.noShadow,v=void 0!==p&&p,h=e.noOverlay,m=void 0!==h&&h,_=e.onClose,g=void 0===_?function(){}:_,b=e.baseZIndex,y=void 0===b?1009:b;(0,u.useHotkeys)("Escape",g);var O=(0,l.useCallback)((function(){g()}),[g]);return a&&l.default.createElement("div",{ref:o},l.default.createElement("div",{style:{zIndex:y},className:(0,s.default)([c.default.overlay,(t={},t[c.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:y+1},className:(0,s.default)([c.default.modal,(n={},n[c.default.transparent]=f,n[c.default.noShadow]=v,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:y+2},className:c.default.modalButton},i))}},1391:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var o=n(4915);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(o).default}})},6791:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(3733)),u=r(n(4330)),s=function(e,t){return 10*e+t},c=function(e){return Math.floor(e/10)},d=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=o.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,f=e.disabled,p=void 0!==f&&f,v=function(e){return function(t){t.stopPropagation(),r(e)}},h=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return o.default.createElement(a.Button,{key:t,disabled:p,noBorder:!0,noShadow:!0,onPointerDown:v(s(n,r))},r)}));return o.default.createElement("div",{className:l.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(c(n));else if(d.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(s(n,t))}},"data-testid":"numpad"},o.default.createElement("div",{className:l.default.numbers},h,o.default.createElement(a.Button,{disabled:p,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:v(c(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(6791);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},7845:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(186));t.default=function(e){var t,n=e.children,r=e.containerRef,l=e.transparent,u=void 0!==l&&l,s=e.isFixed,c=void 0!==s&&s,d=e.onClick,f=void 0===d?function(){}:d;return o.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,a.default)([i.default.overlay,(t={},t[i.default.transparent]=u,t[i.default.fixed]=c,t)]),onClick:f},n)}},6650:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var o=n(7845);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(o).default}})},410:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(4685)),c=n(5348),d=n(3781),f=n(2847),p=i(n(3790)),v=n(2568);t.default=function(e){var t,n=e.className,r=e.label,o=e.options,a=(0,l.useContext)(v.SelectContext).showExpandedGroup,i=(0,c.useToggle)(a),h=i[0],m=i[1],_=(0,l.useCallback)((function(){m()}),[]);return l.default.createElement("div",{className:n},l.default.createElement("div",{className:s.default.header,onClick:_},l.default.createElement("div",{className:s.default.label},r),l.default.createElement(f.IconButton,{className:(0,u.default)([(t={},t[s.default.expanded]=h,t)]),src:p.default,alt:h?"Collapse":"Expand",noBorder:!0,transparent:!0})),h&&o.map((function(e){return l.default.createElement(d.Option,{key:e.value,data:e},e.label)})))}},9087:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GroupOption=void 0;var o=n(410);Object.defineProperty(t,"GroupOption",{enumerable:!0,get:function(){return r(o).default}})},1954:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(8054)),c=n(4616),d=n(2568);t.default=function(e){var t,n=e.children,r=e.className,o=e.data,a=(0,l.useContext)(d.SelectContext),i=a.multiple,f=a.selectedOptions,p=a.updateSelectedOption,v=(0,l.useMemo)((function(){return f.map((function(e){return e.value})).includes(o.value)}),[o,f]),h=(0,l.useCallback)((function(){p(o)}),[o,f]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,(t={},t[s.default.selected]=v&&!i,t),r]),onClick:h},i&&l.default.createElement("span",{className:s.default.checkboxContainer},l.default.createElement(c.Checkbox,{className:s.default.checkbox,checked:v,size:"small"})),l.default.createElement("span",{className:s.default.label},n))}},3781:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Option=void 0;var o=n(1954);Object.defineProperty(t,"Option",{enumerable:!0,get:function(){return r(o).default}})},2918:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=void 0;var s=n(5348),c=i(n(6689)),d=n(4616),f=n(9087),p=n(3781),v=n(2568),h=u(n(4822));t.isOption=function(e){return void 0!==e.value},t.default=function(e){var n=e.options,o=e.onFilter,a=e.onChange,i=(0,s.useToggle)(!1),u=i[0],m=i[1],_=(0,c.useContext)(v.SelectContext),g=_.multiple,b=_.searchKeyword,y=_.selectAll,O=_.selectedOptions,w=_.setSelectedOptions,E=n.some((function(e){return!(0,t.isOption)(e)})),M=function(e){var t=b.toLowerCase().trim();return t.length?e.filter((function(e){return o?o(e,t):e.label.toLowerCase().includes(t)})):e},S=(0,c.useMemo)((function(){return E?n.reduce((function(e,t){var n=M(t.options);return n.length?l(l([],e,!0),[r(r({},t),{options:n})],!1):e}),[]):M(n)}),[E,n,b]),x=(0,c.useMemo)((function(){return S.reduce((function(e,n){return(0,t.isOption)(n)?e+1:e+n.options.length}),0)}),[E,S,t.isOption]),C=(0,c.useMemo)((function(){return O.filter((function(e){return S.find((function(n){return(0,t.isOption)(n)?n.value===e.value:n.options.find((function(t){return t.value===e.value}))}))})).length}),[O,S]),P=(0,c.useCallback)((function(){if(u)w([]),a&&a([]);else{var e=S.map((function(e){return(0,t.isOption)(e)?e:e.options})).flat();w(e),a&&a(e.map((function(e){return e.value})))}m()}),[S,t.isOption,u,w,m]);return(0,c.useEffect)((function(){C===x?m(!0):u&&m(!1)}),[C,x,u,m]),c.default.createElement("div",{className:h.default.container},y&&g&&!!S.length&&c.default.createElement("div",{className:h.default.selectAllContainer,onClick:P},c.default.createElement("span",{className:h.default.checkboxContainer},c.default.createElement(d.Checkbox,{className:h.default.checkbox,checked:u,indeterminate:!!C&&C!==x,size:"small"})),c.default.createElement("span",{className:h.default.label},"Select All")),S.length?S.map((function(e){return(0,t.isOption)(e)?c.default.createElement(p.Option,{key:e.value,data:e},e.label):c.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})):c.default.createElement("div",{className:h.default.noOptions},"No matches for",c.default.createElement("span",{className:h.default.searchKeyword}," ".concat(b))))}},4292:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=t.OptionList=void 0;var o=n(2918);Object.defineProperty(t,"OptionList",{enumerable:!0,get:function(){return r(o).default}}),Object.defineProperty(t,"isOption",{enumerable:!0,get:function(){return o.isOption}})},2300:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(2396)),c=n(2568),d=n(1143),f=n(4958),p=i(n(5585)),v=i(n(7451)),h=n(2847);t.default=function(e){var t=e.className,n=(0,l.useContext)(c.SelectContext),r=n.searchKeyword,o=n.setSearchKeyword,a=(0,l.useCallback)((function(e){o(e)}),[r]),i=(0,l.useCallback)((function(){o("")}),[]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,t])},l.default.createElement("div",{className:s.default.iconSearchContainer},l.default.createElement(f.Icon,{src:p.default})),l.default.createElement(d.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(h.IconButton,{className:s.default.resetButton,src:v.default,alt:"Clear",onClick:i,disabled:!r,noBorder:!0,noShadow:!0,transparent:!0}))}},8947:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Search=void 0;var o=n(2300);Object.defineProperty(t,"Search",{enumerable:!0,get:function(){return r(o).default}})},4113:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(3790)),c=i(n(7917)),d=n(5348),f=n(2568),p=n(4745),v=n(8947),h=n(2847),m=n(4292),_=n(4115);t.default=function(e){var t,n,r,o=e.className,a=e.defaultValue,i=e.disabled,g=e.multiple,b=void 0!==g&&g,y=e.options,O=e.placeholder,w=e.label,E=e.selectAll,M=e.showExpandedGroup,S=e.scrollMenuIntoView,x=void 0!==S&&S,C=e.size,P=void 0===C?"medium":C,j=e.showSelectedAsTags,I=void 0!==j&&j,k=e.showSearch,D=void 0!==k&&k,R=e.width,N=e.onChange,L=e.onFilter,T=(0,d.useToggle)(!1),z=T[0],A=T[1],H=(0,d.useOutsideClick)((function(){return A(!1)})),B=(0,l.useRef)(),F=(0,l.useCallback)((function(){B.current&&B.current.scrollIntoView({behavior:"smooth",block:"nearest"})}),[]);(0,l.useLayoutEffect)((function(){if(B.current&&z&&x){var e=new ResizeObserver(F);return e.observe(B.current),function(){e.disconnect(),e=null}}}),[z,x,F]);var V=(0,l.useCallback)((function(){A()}),[]),W=(0,l.useCallback)((function(e){b||A(!1),N&&N(e)}),[N]);return l.default.createElement(f.SelectContextProvider,{defaultValue:a,multiple:b,options:y,onChange:W,selectAll:E,showExpandedGroup:M},l.default.createElement("div",{ref:H},w?l.default.createElement(_.Label,{value:w}):null,l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.disabled]=i,t),c.default[P],o]),style:{width:R}},l.default.createElement("div",{className:(0,u.default)([c.default.header,(n={},n[c.default.active]=z,n)]),onClick:V},l.default.createElement(p.Selector,{placeholder:O,showSelectedAsTags:I,isDropdownOpened:z}),l.default.createElement(h.IconButton,{className:(0,u.default)([c.default.iconButton,(r={},r[c.default.expanded]=z,r)]),src:s.default,alt:z?"Collapse":"Expand",noBorder:!0,transparent:!0})),z&&l.default.createElement("div",{className:c.default.content,ref:B},0===y.length?l.default.createElement("div",{className:c.default.noOptions},"No options available"):l.default.createElement(l.default.Fragment,null,D&&l.default.createElement("div",{className:c.default.searchContainer},l.default.createElement(v.Search,null)),l.default.createElement(m.OptionList,{options:y,onFilter:L,onChange:W}))))))}},2568:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectContextProvider=t.SelectContext=void 0;var l=a(n(6689)),u=n(4292),s={multiple:!1,selectAll:!1,showExpandedGroup:!0,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){}},c=(0,l.createContext)(s);t.SelectContext=c,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,d=void 0!==a&&a,f=e.showExpandedGroup,p=void 0===f||f,v=e.options,h=e.onChange,m=(0,l.useState)(s.selectedOptions),_=m[0],g=m[1],b=(0,l.useState)(s.searchKeyword),y=b[0],O=b[1],w=(0,l.useCallback)((function(e){var t;t=o?_.some((function(t){return t.value===e.value}))?_.filter((function(t){return t.value!==e.value})):i(i([],_,!0),[e],!1):[e],g(t),h&&h(t.map((function(e){return e.value})))}),[_,g,h]);(0,l.useEffect)((function(){if(n){var e=Array.isArray(n)?n:[n],t=[];e.length&&(t=v.reduce((function(e,t){return(0,u.isOption)(t)?i(i([],e,!0),[t],!1):i(i([],e,!0),t.options,!0)}),[]).filter((function(t){return e.includes(t.value)}))),g(t)}}),[n,v]);var E=(0,l.useMemo)((function(){return{multiple:o,selectAll:d,showExpandedGroup:p,selectedOptions:_,updateSelectedOption:w,searchKeyword:y,setSearchKeyword:O,setSelectedOptions:g}}),[d,_,g,w,y,O]);return l.default.createElement(c.Provider,{value:E},t)}},237:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(6884)),s=n(2568),c=n(2149),d=i(n(7659));t.default=function(e){var t=e.placeholder,n=e.showSelectedAsTags,r=e.isDropdownOpened,o=(0,l.useContext)(s.SelectContext),a=o.selectedOptions,i=o.multiple,f=o.updateSelectedOption,p=(0,l.useCallback)((function(e){e.stopPropagation()}),[]),v=(0,l.useCallback)((function(e,t){if(t){var n=a.find((function(e){return e.value===t}));n&&f(n)}e.stopPropagation()}),[a]),h=(0,l.useMemo)((function(){var e;return l.default.createElement("span",{className:(0,d.default)([u.default.placeholder,(e={},e[u.default.active]=r,e)])},t)}),[t,r]),m=(0,l.useMemo)((function(){return a.length?l.default.createElement(l.default.Fragment,null,a.map((function(e){var t=e.label,n=e.value;return l.default.createElement("span",{key:n,className:u.default.tagWrapper,onClick:p},l.default.createElement(c.Tag,{key:n,value:n,closable:!0,onClose:v},t))}))):h}),[a,h]),_=a.length?l.default.createElement("span",{className:u.default.selectedOptions},"".concat(t," (").concat(a.length,")")):h;return i?n?m:_:a.length?l.default.createElement("span",{className:u.default.selectedOption},a[0].label):h}},4745:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Selector=void 0;var o=n(237);Object.defineProperty(t,"Selector",{enumerable:!0,get:function(){return r(o).default}})},9929:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Select=void 0;var o=n(4113);Object.defineProperty(t,"Select",{enumerable:!0,get:function(){return r(o).default}})},1420:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=i(n(6689)),s=l(n(7659)),c=n(4356),d=l(n(5691)),f=l(n(5038)),p=l(n(8784)),v=n(2037),h=l(n(6684));t.default=function(e){var t=e.columns,n=e.dataSource,o=e.onRowClick,a=e.hasArrow,i=e.onLoadMore,l=e.page,m=e.setPage,_=e.pageSize,g=void 0===_?v.TableConfig.PAGE_SIZE:_,b=e.tableHeight,y=e.placeholder,O=e.rowHeight,w=void 0===O?v.TableConfig.ROW_HEIGHT:O,E=e.headerHeight,M=void 0===E?v.TableConfig.HEADER_HEIGHT:E,S=e.disableLazyLoader,x=e.activeRows,C=e.itemsCount,P=e.isHeaderSticky,j=void 0!==P&&P,I=e.hasVirtualScroll,k=void 0===I||I,D=e.className,R=(0,u.useState)(0),N=R[0],L=R[1],T=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,s=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(p.default,{data:s,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==x?void 0:x[s.id])}))}),[t,x,a,w,o]),z=(0,u.useCallback)((function(e){var t=e.scrollOffset;L(t)}),[]),A=(0,u.useCallback)((function(){S||n.length!==C&&(n.length<g*l||m&&i&&(m(l+1),i(l+1)))}),[S,n.length,C,g,l,m,i]),H=(0,u.useCallback)((function(e){return!S&&e<n.length-v.TableConfig.ITEMS_LOADED}),[n.length,S]);return u.default.createElement(u.default.Fragment,null,k?u.default.createElement("div",{className:(0,s.default)([h.default.container,D])},u.default.createElement("div",{className:h.default.table},u.default.createElement(f.default,{columns:t,scrollTop:N,headerHeight:M}),y&&!n.length?u.default.createElement("div",{className:h.default.placeholderContainer,style:{height:b}},y):u.default.createElement(d.default,{isItemLoaded:H,itemCount:n.length,loadMoreItems:A},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(c.FixedSizeList,{ref:r,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:z,onItemsRendered:t,className:h.default.scrollbarContainer},T)})))):u.default.createElement("div",{className:(0,s.default)([h.default.container,h.default.scrollbarContainer,D]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:N,isHeaderSticky:j,headerHeight:M}),n.map((function(e,n){return u.default.createElement(p.default,{key:n,data:e,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==x?void 0:x[null==e?void 0:e.id])})}))))}},5038:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(2212)),l=r(n(4867));t.default=function(e){var t,n,r=e.columns,u=e.scrollTop,s=e.isHeaderSticky,c=e.headerHeight;return o.default.createElement("div",{className:(0,a.default)([l.default.container,(t={},t[l.default.borderBottom]=!!u,t),(n={},n[l.default.isHeaderSticky]=s,n)]),style:{height:c}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=l(n(7659)),s=i(n(6689)),c=n(4958),d=l(n(3210)),f=l(n(2223)),p=n(2802),v=l(n(1435));t.default=function(e){var t,n=e.column,o=n.onSort,a=n.sortable,i=n.sorted,l=n.defaultSortOrder,h=n.title,m=n.width,_=n.className,g=(0,s.useState)((function(){return l||p.SortOrder.DESC})),b=g[0],y=g[1],O=(0,s.useCallback)((function(){if(!i)return o(b);var e=b===p.SortOrder.DESC?p.SortOrder.ASC:p.SortOrder.DESC;y(e),o(e)}),[o,b,i]),w=o&&a?{onClick:O}:{};return s.default.createElement("div",r({},w,{className:(0,u.default)([v.default.tableHeaderCell,_,(t={},t[v.default.sortIconVisible]=a&&i,t[v.default.sortable]=a,t)]),style:{width:m}}),h,a?s.default.createElement(c.Icon,{alt:"Sort button",size:"small",src:b===p.SortOrder.DESC?d.default:f.default}):null)}},8784:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(8605)),c=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,d=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.hasArrow]=a,t[c.default.active]=d,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(s.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4009));t.default=function(e){var t=e.item,n=e.column,r=e.rowHeight,l="string"==typeof t?t:t[n.dataIndex];return o.default.createElement("div",{className:(0,a.default)([i.default.container,n.className]),style:{height:r,width:null==n?void 0:n.width}},n.render?n.render(l):l)}},2285:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Table=void 0;var o=n(1420);Object.defineProperty(t,"Table",{enumerable:!0,get:function(){return r(o).default}})},8372:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(7451)),c=n(4958),d=i(n(5374));t.default=function(e){var t,n=e.children,r=(e.className,e.closable),o=e.value,a=e.onClose,i=e.disabled,f=e.onDelete,p=e.id,v=(0,l.useCallback)((function(e){"function"==typeof f&&f(p),"function"==typeof a&&a(e,o)}),[a,f]);return l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.disabled]=i,t)])},l.default.createElement("span",{className:d.default.content},n),r&&l.default.createElement("span",{className:d.default.closeButton,onClick:v},l.default.createElement(c.Icon,{src:s.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tag=void 0;var o=n(8372);Object.defineProperty(t,"Tag",{enumerable:!0,get:function(){return r(o).default}})},8397:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=a(n(6689)),s=l(n(7659)),c=n(1982),d=n(1914),f=n(5348),p=n(2149),v=l(n(9067));t.default=function(e){var t,n,r=e.className,o=e.onChange,a=e.placeholder,l=e.value,h=e.name,m=e.pattern,_=e.inputRef,g=e.size,b=void 0===g?"small":g,y=e.type,O=void 0===y?"text":y,w=e.autoFocus,E=void 0!==w&&w,M=e.noBorder,S=void 0!==M&&M,x=e.withScroll,C=void 0!==x&&x,P=e.inputMode,j=e.disabled,I=e.tagOptions,k=void 0===I?[]:I,D=(0,u.useState)(""),R=D[0],N=D[1],L=(0,u.useState)(),T=L[0],z=L[1];(0,u.useEffect)((function(){if(l){var e=l.map((function(e){return{id:(0,c.v4)(),label:e}}));z(e)}}),[l,z]);var A=(0,u.useCallback)((function(e){var t=e.target.value;N(t)}),[N]),H=(0,u.useCallback)((function(e){var t=T.filter((function(t){return t.id!==e}));if(z(t),o){var n=t.map((function(e){return e.label}));o(n)}}),[T,z,o]),B=(0,u.useCallback)((function(){var e=R.trim(),t=i([],T,!0);if(e.length>0){var n={id:(0,c.v4)(),label:e};t=i(i([],T,!0),[n],!1)}if(z(t),N(""),o){var r=t.map((function(e){return e.label}));o(r)}}),[T,R,z,N]),F=(0,u.useCallback)((function(e){"Enter"!==e.code&&"NumpadEnter"!==e.code||(e.preventDefault(),B())}),[B]),V=(0,f.useOutsideClick)((function(){R.trim().length>0&&B()})),W=u.default.createElement(d.Hint,{options:k,allowEnterFill:!0,allowTabFill:!0},u.default.createElement("input",{"data-testid":"input",ref:_,className:(0,s.default)([v.default.textInput,v.default[b],(t={},t[v.default.noBorder]=S,t)]),onChange:A,onKeyDown:F,pattern:m,placeholder:a,name:h,type:O,value:R,autoFocus:E,inputMode:P,disabled:j}));return u.default.createElement("div",{className:(0,s.default)([v.default.container,(n={},n[v.default.disabled]=j,n[v.default.scrollable]=C,n),r]),ref:V},null==T?void 0:T.map((function(e){var t=e.id,n=e.label;return u.default.createElement(p.Tag,{key:t,value:n,id:t,onDelete:H,closable:!0},n)})),u.default.createElement("div",{className:v.default.tagInput},W))}},2819:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TagsInput=void 0;var o=n(8397);Object.defineProperty(t,"TagsInput",{enumerable:!0,get:function(){return r(o).default}})},2506:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(4115),c=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,d=e.value,f=e.name,p=e.pattern,v=e.inputRef,h=e.size,m=void 0===h?"medium":h,_=e.type,g=void 0===_?"text":_,b=e.autoFocus,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,E=e.inputMode,M=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),S=l.default.createElement("input",{"data-testid":"input",ref:v,className:(0,u.default)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=w,t)]),onChange:M,onBlur:o,onKeyDown:a,pattern:p,placeholder:i,name:f,type:g,value:d,autoFocus:y,inputMode:E});return n?l.default.createElement(s.Label,{value:n},S):l.default.createElement(l.default.Fragment,null,S)}},1143:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var o=n(2506);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(o).default}})},7215:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(9220));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return o.default.createElement("div",{ref:n,className:a.default.toast,onClick:i,"data-testid":"toast"},t)}},2580:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4106));t.default=function(e){var t=e.children,n=e.baseZIndex;return o.default.createElement("div",{className:(0,a.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},393:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var o=n(7215);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(o).default}});var a=n(2580);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(a).default}})},127:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=n(6405),s=i(n(7274)),c=i(n(7659)),d=i(n(8907));t.default=function(e){var t=e.children,n=e.text,r=e.placement,o=e.position,a=void 0===o?"absolute":o,i=e.showTooltip,f=e.className,p=e.touchScreenHidingDelay,v=void 0===p?5e3:p,h=(0,l.useState)({left:0,top:0}),m=h[0],_=h[1],g=(0,l.useState)(!1),b=g[0],y=g[1],O=(0,l.useRef)(null),w=(0,l.useRef)(null),E=(0,l.useCallback)((function(){if(w.current){var e=w.current.getBoundingClientRect(),t=function(e,t,n){var r=n.top,o=n.left,a=n.height,i=n.width,l={top:0,left:0};switch(e){case"left":l={top:r+a/2,left:o};break;case"right":l={top:r+a/2,left:o+i};break;case"bottom":l={top:r+a,left:o+i/2};break;case"top":l={top:r,left:o+i/2}}return"absolute"===t?{top:l.top+window.scrollY,left:l.left+window.scrollX}:l}(r,a,e);_(t),y(!0)}}),[r,a]),M=(0,l.useCallback)((function(){E()}),[E]),S=(0,l.useCallback)((function(){y(!1)}),[]),x=(0,l.useCallback)((function(){O.current&&(clearTimeout(O.current),O.current=null),E()}),[E]),C=(0,l.useCallback)((function(){O.current=setTimeout((function(){y(!1),O.current=null}),v)}),[v]);return(0,l.useEffect)((function(){return function(){return O.current&&clearTimeout(O.current)}}),[]),(0,l.useEffect)((function(){if(w.current&&"absolute"===a){var e=(0,s.default)(w.current);if(e){var t=function(){return y(!1)};return e.addEventListener("scroll",t),e.addEventListener("resize",t),function(){e.removeEventListener("scroll",t),e.removeEventListener("resize",t)}}}}),[a]),l.default.createElement("span",{onTouchStart:x,onMouseEnter:M,onMouseLeave:S,onTouchEnd:C,ref:w},t,(0,u.createPortal)(l.default.createElement(l.default.Fragment,null,i&&b?l.default.createElement("div",{style:m,"data-text":n,"data-testid":"tooltip",className:(0,c.default)([d.default.tooltip,d.default[r],d.default[a],f])}):null),document.body))}},746:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tooltip=void 0;var o=n(127);Object.defineProperty(t,"Tooltip",{enumerable:!0,get:function(){return r(o).default}})},1918:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(6504));t.default=function(e){var t=e.src,n=e.type,r=e.children,l=e.containerRef,u=e.poster,s=e.muted,c=void 0===s||s,d=e.loop,f=void 0===d||d,p=e.autoPlay,v=void 0===p||p,h=e.layout,m=void 0===h?"contain":h;return r?o.default.createElement("div",{ref:l,className:(0,a.default)([i.default.container,i.default.hasOverlay])},o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:c,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&o.default.createElement("div",{className:i.default.overlay},r)):o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:c,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var o=n(1918);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(o).default}})},7297:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.TableConfig=void 0,(n=t.TableConfig||(t.TableConfig={}))[n.ROW_HEIGHT=48]="ROW_HEIGHT",n[n.HEADER_HEIGHT=32]="HEADER_HEIGHT",n[n.PAGE_SIZE=100]="PAGE_SIZE",n[n.ITEMS_LOADED=5]="ITEMS_LOADED"},2037:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(7297),t)},3607:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(9508),t),o(n(4127),t),o(n(75),t),o(n(4616),t),o(n(7429),t),o(n(2554),t),o(n(6873),t),o(n(1889),t),o(n(6086),t),o(n(6384),t),o(n(4958),t),o(n(2847),t),o(n(5860),t),o(n(3928),t),o(n(4115),t),o(n(2572),t),o(n(3814),t),o(n(1391),t),o(n(7387),t),o(n(6650),t),o(n(9929),t),o(n(2285),t),o(n(2149),t),o(n(2819),t),o(n(1143),t),o(n(393),t),o(n(746),t),o(n(6975),t),o(n(3212),t)},2802:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.SortOrder=void 0,(n=t.SortOrder||(t.SortOrder={})).ASC="asc",n.DESC="desc"},4330:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},3210:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},2223:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1 10L7.5 3L14 10' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},8799:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.398438 0.399902L19.5984 19.5999M0.398438 19.5999L19.5984 0.399902' stroke='black'/%3e %3c/svg%3e"},7451:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1.5 1.5L13.5 13.5M1.5 13.5L13.5 1.5' stroke='black'/%3e %3c/svg%3e"},5585:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M15.4685 15.4665L11.2018 11.1999M6.93516 13.3332C3.40053 13.3332 0.535156 10.4678 0.535156 6.9332C0.535156 3.39858 3.40053 0.533203 6.93516 0.533203C10.4698 0.533203 13.3352 3.39858 13.3352 6.9332C13.3352 10.4678 10.4698 13.3332 6.93516 13.3332Z' stroke='%23898891'/%3e %3c/svg%3e"},3790:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.9331 4.26758L7.99974 11.7342L1.06641 4.26758' stroke='%23898891' stroke-linecap='square'/%3e %3c/svg%3e"},3250:(e,t,n)=>{"use strict";var r=n(6689),o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,u=r.useDebugValue;function s(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,s(o)&&c({inst:o})}),[e,n,t]),i((function(){return s(o)&&c({inst:o}),e((function(){s(o)&&c({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},1982:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return u.default}});var r=f(n(3990)),o=f(n(8237)),a=f(n(5355)),i=f(n(3764)),l=f(n(6314)),u=f(n(8464)),s=f(n(6435)),c=f(n(4008)),d=f(n(8222));function f(e){return e&&e.__esModule?e:{default:e}}},4163:(e,t)=>{"use strict";function n(e){return 14+(e+64>>>9<<4)+1}function r(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function o(e,t,n,o,a,i){return r((l=r(r(t,e),r(o,i)))<<(u=a)|l>>>32-u,n);var l,u}function a(e,t,n,r,a,i,l){return o(t&n|~t&r,e,t,a,i,l)}function i(e,t,n,r,a,i,l){return o(t&r|n&~r,e,t,a,i,l)}function l(e,t,n,r,a,i,l){return o(t^n^r,e,t,a,i,l)}function u(e,t,n,r,a,i,l){return o(n^(t|~r),e,t,a,i,l)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let n=0;n<t.length;++n)e[n]=t.charCodeAt(n)}return function(e){const t=[],n=32*e.length,r="0123456789abcdef";for(let o=0;o<n;o+=8){const n=e[o>>5]>>>o%32&255,a=parseInt(r.charAt(n>>>4&15)+r.charAt(15&n),16);t.push(a)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[n(t)-1]=t;let o=1732584193,s=-271733879,c=-1732584194,d=271733878;for(let t=0;t<e.length;t+=16){const n=o,f=s,p=c,v=d;o=a(o,s,c,d,e[t],7,-680876936),d=a(d,o,s,c,e[t+1],12,-389564586),c=a(c,d,o,s,e[t+2],17,606105819),s=a(s,c,d,o,e[t+3],22,-1044525330),o=a(o,s,c,d,e[t+4],7,-176418897),d=a(d,o,s,c,e[t+5],12,1200080426),c=a(c,d,o,s,e[t+6],17,-1473231341),s=a(s,c,d,o,e[t+7],22,-45705983),o=a(o,s,c,d,e[t+8],7,1770035416),d=a(d,o,s,c,e[t+9],12,-1958414417),c=a(c,d,o,s,e[t+10],17,-42063),s=a(s,c,d,o,e[t+11],22,-1990404162),o=a(o,s,c,d,e[t+12],7,1804603682),d=a(d,o,s,c,e[t+13],12,-40341101),c=a(c,d,o,s,e[t+14],17,-1502002290),s=a(s,c,d,o,e[t+15],22,1236535329),o=i(o,s,c,d,e[t+1],5,-165796510),d=i(d,o,s,c,e[t+6],9,-1069501632),c=i(c,d,o,s,e[t+11],14,643717713),s=i(s,c,d,o,e[t],20,-373897302),o=i(o,s,c,d,e[t+5],5,-701558691),d=i(d,o,s,c,e[t+10],9,38016083),c=i(c,d,o,s,e[t+15],14,-660478335),s=i(s,c,d,o,e[t+4],20,-405537848),o=i(o,s,c,d,e[t+9],5,568446438),d=i(d,o,s,c,e[t+14],9,-1019803690),c=i(c,d,o,s,e[t+3],14,-187363961),s=i(s,c,d,o,e[t+8],20,1163531501),o=i(o,s,c,d,e[t+13],5,-1444681467),d=i(d,o,s,c,e[t+2],9,-51403784),c=i(c,d,o,s,e[t+7],14,1735328473),s=i(s,c,d,o,e[t+12],20,-1926607734),o=l(o,s,c,d,e[t+5],4,-378558),d=l(d,o,s,c,e[t+8],11,-2022574463),c=l(c,d,o,s,e[t+11],16,1839030562),s=l(s,c,d,o,e[t+14],23,-35309556),o=l(o,s,c,d,e[t+1],4,-1530992060),d=l(d,o,s,c,e[t+4],11,1272893353),c=l(c,d,o,s,e[t+7],16,-155497632),s=l(s,c,d,o,e[t+10],23,-1094730640),o=l(o,s,c,d,e[t+13],4,681279174),d=l(d,o,s,c,e[t],11,-358537222),c=l(c,d,o,s,e[t+3],16,-722521979),s=l(s,c,d,o,e[t+6],23,76029189),o=l(o,s,c,d,e[t+9],4,-640364487),d=l(d,o,s,c,e[t+12],11,-421815835),c=l(c,d,o,s,e[t+15],16,530742520),s=l(s,c,d,o,e[t+2],23,-995338651),o=u(o,s,c,d,e[t],6,-198630844),d=u(d,o,s,c,e[t+7],10,1126891415),c=u(c,d,o,s,e[t+14],15,-1416354905),s=u(s,c,d,o,e[t+5],21,-57434055),o=u(o,s,c,d,e[t+12],6,1700485571),d=u(d,o,s,c,e[t+3],10,-1894986606),c=u(c,d,o,s,e[t+10],15,-1051523),s=u(s,c,d,o,e[t+1],21,-2054922799),o=u(o,s,c,d,e[t+8],6,1873313359),d=u(d,o,s,c,e[t+15],10,-30611744),c=u(c,d,o,s,e[t+6],15,-1560198380),s=u(s,c,d,o,e[t+13],21,1309151649),o=u(o,s,c,d,e[t+4],6,-145523070),d=u(d,o,s,c,e[t+11],10,-1120210379),c=u(c,d,o,s,e[t+2],15,718787259),s=u(s,c,d,o,e[t+9],21,-343485551),o=r(o,n),s=r(s,f),c=r(c,p),d=r(d,v)}return[o,s,c,d]}(function(e){if(0===e.length)return[];const t=8*e.length,r=new Uint32Array(n(t));for(let n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))}},4790:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};t.default=n},6314:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="00000000-0000-0000-0000-000000000000"},8222:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");let t;const n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}},58:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},3319:(e,t)=>{"use strict";let n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n&&(n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!n))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(r)};const r=new Uint8Array(16)},3757:(e,t)=>{"use strict";function n(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function r(e,t){return e<<t|e>>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){const t=[1518500249,1859775393,2400959708,3395469782],o=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let n=0;n<t.length;++n)e.push(t.charCodeAt(n))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const a=e.length/4+2,i=Math.ceil(a/16),l=new Array(i);for(let t=0;t<i;++t){const n=new Uint32Array(16);for(let r=0;r<16;++r)n[r]=e[64*t+4*r]<<24|e[64*t+4*r+1]<<16|e[64*t+4*r+2]<<8|e[64*t+4*r+3];l[t]=n}l[i-1][14]=8*(e.length-1)/Math.pow(2,32),l[i-1][14]=Math.floor(l[i-1][14]),l[i-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<i;++e){const a=new Uint32Array(80);for(let t=0;t<16;++t)a[t]=l[e][t];for(let e=16;e<80;++e)a[e]=r(a[e-3]^a[e-8]^a[e-14]^a[e-16],1);let i=o[0],u=o[1],s=o[2],c=o[3],d=o[4];for(let e=0;e<80;++e){const o=Math.floor(e/20),l=r(i,5)+n(o,u,s,c)+d+t[o]+a[e]>>>0;d=c,c=s,s=r(u,30)>>>0,u=i,i=l}o[0]=o[0]+i>>>0,o[1]=o[1]+u>>>0,o[2]=o[2]+s>>>0,o[3]=o[3]+c>>>0,o[4]=o[4]+d>>>0}return[o[0]>>24&255,o[0]>>16&255,o[0]>>8&255,255&o[0],o[1]>>24&255,o[1]>>16&255,o[1]>>8&255,255&o[1],o[2]>>24&255,o[2]>>16&255,o[2]>>8&255,255&o[2],o[3]>>24&255,o[3]>>16&255,o[3]>>8&255,255&o[3],o[4]>>24&255,o[4]>>16&255,o[4]>>8&255,255&o[4]]}},4008:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.unsafeStringify=i;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};const a=[];for(let e=0;e<256;++e)a.push((e+256).toString(16).slice(1));function i(e,t=0){return(a[e[t+0]]+a[e[t+1]]+a[e[t+2]]+a[e[t+3]]+"-"+a[e[t+4]]+a[e[t+5]]+"-"+a[e[t+6]]+a[e[t+7]]+"-"+a[e[t+8]]+a[e[t+9]]+"-"+a[e[t+10]]+a[e[t+11]]+a[e[t+12]]+a[e[t+13]]+a[e[t+14]]+a[e[t+15]]).toLowerCase()}t.default=function(e,t=0){const n=i(e,t);if(!(0,o.default)(n))throw TypeError("Stringified UUID is invalid");return n}},3990:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(3319))&&r.__esModule?r:{default:r},a=n(4008);let i,l,u=0,s=0;t.default=function(e,t,n){let r=t&&n||0;const c=t||new Array(16);let d=(e=e||{}).node||i,f=void 0!==e.clockseq?e.clockseq:l;if(null==d||null==f){const t=e.random||(e.rng||o.default)();null==d&&(d=i=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==f&&(f=l=16383&(t[6]<<8|t[7]))}let p=void 0!==e.msecs?e.msecs:Date.now(),v=void 0!==e.nsecs?e.nsecs:s+1;const h=p-u+(v-s)/1e4;if(h<0&&void 0===e.clockseq&&(f=f+1&16383),(h<0||p>u)&&void 0===e.nsecs&&(v=0),v>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");u=p,s=v,l=f,p+=122192928e5;const m=(1e4*(268435455&p)+v)%4294967296;c[r++]=m>>>24&255,c[r++]=m>>>16&255,c[r++]=m>>>8&255,c[r++]=255&m;const _=p/4294967296*1e4&268435455;c[r++]=_>>>8&255,c[r++]=255&_,c[r++]=_>>>24&15|16,c[r++]=_>>>16&255,c[r++]=f>>>8|128,c[r++]=255&f;for(let e=0;e<6;++e)c[r+e]=d[e];return t||(0,a.unsafeStringify)(c)}},8237:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(4163));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v3",48,o.default);t.default=i},7925:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0,t.default=function(e,t,n){function r(e,r,i,l){var u;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n<e.length;++n)t.push(e.charCodeAt(n));return t}(e)),"string"==typeof r&&(r=(0,a.default)(r)),16!==(null===(u=r)||void 0===u?void 0:u.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let s=new Uint8Array(16+e.length);if(s.set(r),s.set(e,r.length),s=n(s),s[6]=15&s[6]|t,s[8]=63&s[8]|128,i){l=l||0;for(let e=0;e<16;++e)i[l+e]=s[e];return i}return(0,o.unsafeStringify)(s)}try{r.name=e}catch(e){}return r.DNS=i,r.URL=l,r};var r,o=n(4008),a=(r=n(8222))&&r.__esModule?r:{default:r};const i="6ba7b810-9dad-11d1-80b4-00c04fd430c8";t.DNS=i;const l="6ba7b811-9dad-11d1-80b4-00c04fd430c8";t.URL=l},5355:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(4790)),o=i(n(3319)),a=n(4008);function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){if(r.default.randomUUID&&!t&&!e)return r.default.randomUUID();const i=(e=e||{}).random||(e.rng||o.default)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=i[e];return t}return(0,a.unsafeStringify)(i)}},3764:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(3757));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v5",80,o.default);t.default=i},6435:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(58))&&r.__esModule?r:{default:r};t.default=function(e){return"string"==typeof e&&o.default.test(e)}},8464:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}},6689:e=>{"use strict";e.exports=require("react")},6405:e=>{"use strict";e.exports=require("react-dom")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r].call(a.exports,a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r=n(3607),o=exports;for(var a in r)o[a]=r[a];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJtYXBwaW5ncyI6Ijt5Q0FBZSxTQUFTQSxFQUF1QkMsR0FDN0MsUUFBYSxJQUFUQSxFQUNGLE1BQU0sSUFBSUMsZUFBZSw2REFHM0IsT0FBT0QsQ0FDVCwrQ0NOZSxTQUFTRSxJQWV0QixPQWRBQSxFQUFXQyxPQUFPQyxRQUFVLFNBQVVDLEdBQ3BDLElBQUssSUFBSUMsRUFBSSxFQUFHQSxFQUFJQyxVQUFVQyxPQUFRRixJQUFLLENBQ3pDLElBQUlHLEVBQVNGLFVBQVVELEdBRXZCLElBQUssSUFBSUksS0FBT0QsRUFDVk4sT0FBT1EsVUFBVUMsZUFBZUMsS0FBS0osRUFBUUMsS0FDL0NMLEVBQU9LLEdBQU9ELEVBQU9DLEdBRzNCLENBRUEsT0FBT0wsQ0FDVCxFQUVPSCxFQUFTWSxNQUFNQyxLQUFNUixVQUM5QiwrQ0NoQmUsU0FBU1MsRUFBZUMsRUFBVUMsR0FDL0NELEVBQVNOLFVBQVlSLE9BQU9nQixPQUFPRCxFQUFXUCxXQUM5Q00sRUFBU04sVUFBVVMsWUFBY0gsRUFDakNBLEVBQVNJLFVBQVlILENBQ3ZCLCtDQ0plLFNBQVNJLEVBQThCYixFQUFRYyxHQUM1RCxHQUFjLE1BQVZkLEVBQWdCLE1BQU8sQ0FBQyxFQUM1QixJQUVJQyxFQUFLSixFQUZMRCxFQUFTLENBQUMsRUFDVm1CLEVBQWFyQixPQUFPc0IsS0FBS2hCLEdBRzdCLElBQUtILEVBQUksRUFBR0EsRUFBSWtCLEVBQVdoQixPQUFRRixJQUNqQ0ksRUFBTWMsRUFBV2xCLEdBQ2JpQixFQUFTRyxRQUFRaEIsSUFBUSxJQUM3QkwsRUFBT0ssR0FBT0QsRUFBT0MsSUFHdkIsT0FBT0wsQ0FDVCw0SkNaSXNCLEVBQVUsQ0FDVkMsU0FBUyxHQUVFLFNBQVNDLEVBQWdCQyxHQUNwQyxJQUFJQyxHQUFNLElBQUFDLFVBZVYsT0FkQSxJQUFBQyxZQUFVLFdBQ04sSUFBSUMsRUFBYyxTQUFVQyxHQUNuQkosRUFBSUssVUFBV0wsRUFBSUssUUFBUUMsU0FBU0YsRUFBTTlCLFNBRy9DeUIsRUFBU0ssRUFDYixFQUdBLE9BRkFHLFNBQVNDLGlCQUFpQixVQUFXTCxFQUFhUCxHQUNsRFcsU0FBU0MsaUJBQWlCLFdBQVlMLEVBQWFQLEdBQzVDLFdBQ0hXLFNBQVNFLG9CQUFvQixVQUFXTixFQUFhUCxHQUNyRFcsU0FBU0Usb0JBQW9CLFdBQVlOLEVBQWFQLEVBQzFELENBQ0osR0FBRyxDQUFDRyxJQUNHQyxDQUNYLENDK0pPLFNBQVNVLEVBQU9DLEVBQUdDLEdBQ3RCLElBQUlDLEVBQXNCLG1CQUFYQyxRQUF5QkgsRUFBRUcsT0FBT0MsVUFDakQsSUFBS0YsRUFBRyxPQUFPRixFQUNmLElBQW1CSyxFQUFZQyxFQUEzQjFDLEVBQUlzQyxFQUFFL0IsS0FBSzZCLEdBQU9PLEVBQUssR0FDM0IsSUFDSSxXQUFjLElBQU5OLEdBQWdCQSxLQUFNLE1BQVFJLEVBQUl6QyxFQUFFNEMsUUFBUUMsTUFBTUYsRUFBR0csS0FBS0wsRUFBRU0sTUFDeEUsQ0FDQSxNQUFPQyxHQUFTTixFQUFJLENBQUVNLE1BQU9BLEVBQVMsQ0FDdEMsUUFDSSxJQUNRUCxJQUFNQSxFQUFFSSxPQUFTUCxFQUFJdEMsRUFBVSxTQUFJc0MsRUFBRS9CLEtBQUtQLEVBQ2xELENBQ0EsUUFBVSxHQUFJMEMsRUFBRyxNQUFNQSxFQUFFTSxLQUFPLENBQ3BDLENBQ0EsT0FBT0wsQ0FDWCxDQ2pNZSxTQUFTTSxJQUNwQixJQUFJQyxFQUFRekMsS0FDUjBDLEVBQUtoQixHQUFPLElBQUFpQixVQUFTLENBQ3JCQyxVQUFNQyxFQUNOTixXQUFPTSxFQUNQQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxXQUFXLElBQ1gsR0FBSUMsRUFBU1IsRUFBRyxHQUFJUyxFQUFZVCxFQUFHLEdBSW5DVSxHQUFlLElBQUFuQyxTQUFPLElBQzFCLElBQUFDLFlBQVUsV0FFTixPQURBa0MsRUFBYS9CLFNBQVUsRUFDaEIsV0FDSCtCLEVBQWEvQixTQUFVLENBQzNCLENBQ0osR0FBRyxJQUNILElBQUlnQyxHQUFXLElBQUFDLGNBQVksU0FBVUMsR0FBVyxPRDRGMUJDLEVDNUYyQ2YsRUQ0RmxDZ0IsT0M1RnlDLEVENEYxQkMsRUM1RjBDLFdBQ3BGLElBQUlkLEVBQU1lLEVBQ1YsT0RvR0QsU0FBcUJILEVBQVNJLEdBQ2pDLElBQXNHQyxFQUFHQyxFQUFHQyxFQUFHQyxFQUEzR0MsRUFBSSxDQUFFQyxNQUFPLEVBQUdDLEtBQU0sV0FBYSxHQUFXLEVBQVBKLEVBQUUsR0FBUSxNQUFNQSxFQUFFLEdBQUksT0FBT0EsRUFBRSxFQUFJLEVBQUdLLEtBQU0sR0FBSUMsSUFBSyxJQUNoRyxPQUFPTCxFQUFJLENBQUU3QixLQUFNbUMsRUFBSyxHQUFJLE1BQVNBLEVBQUssR0FBSSxPQUFVQSxFQUFLLElBQXdCLG1CQUFYeEMsU0FBMEJrQyxFQUFFbEMsT0FBT0MsVUFBWSxXQUFhLE9BQU8vQixJQUFNLEdBQUlnRSxFQUN2SixTQUFTTSxFQUFLMUMsR0FBSyxPQUFPLFNBQVUyQyxHQUFLLE9BQ3pDLFNBQWNDLEdBQ1YsR0FBSVgsRUFBRyxNQUFNLElBQUlZLFVBQVUsbUNBQzNCLEtBQU9ULElBQU1BLEVBQUksRUFBR1EsRUFBRyxLQUFPUCxFQUFJLElBQUtBLE9BQ25DLEdBQUlKLEVBQUksRUFBR0MsSUFBTUMsRUFBWSxFQUFSUyxFQUFHLEdBQVNWLEVBQVUsT0FBSVUsRUFBRyxHQUFLVixFQUFTLFNBQU9DLEVBQUlELEVBQVUsU0FBTUMsRUFBRWpFLEtBQUtnRSxHQUFJLEdBQUtBLEVBQUUzQixTQUFXNEIsRUFBSUEsRUFBRWpFLEtBQUtnRSxFQUFHVSxFQUFHLEtBQUtwQyxLQUFNLE9BQU8yQixFQUUzSixPQURJRCxFQUFJLEVBQUdDLElBQUdTLEVBQUssQ0FBUyxFQUFSQSxFQUFHLEdBQVFULEVBQUV6QixRQUN6QmtDLEVBQUcsSUFDUCxLQUFLLEVBQUcsS0FBSyxFQUFHVCxFQUFJUyxFQUFJLE1BQ3hCLEtBQUssRUFBYyxPQUFYUCxFQUFFQyxRQUFnQixDQUFFNUIsTUFBT2tDLEVBQUcsR0FBSXBDLE1BQU0sR0FDaEQsS0FBSyxFQUFHNkIsRUFBRUMsUUFBU0osRUFBSVUsRUFBRyxHQUFJQSxFQUFLLENBQUMsR0FBSSxTQUN4QyxLQUFLLEVBQUdBLEVBQUtQLEVBQUVJLElBQUlLLE1BQU9ULEVBQUVHLEtBQUtNLE1BQU8sU0FDeEMsUUFDSSxNQUFrQlgsR0FBWkEsRUFBSUUsRUFBRUcsTUFBWTNFLE9BQVMsR0FBS3NFLEVBQUVBLEVBQUV0RSxPQUFTLEtBQWtCLElBQVYrRSxFQUFHLElBQXNCLElBQVZBLEVBQUcsSUFBVyxDQUFFUCxFQUFJLEVBQUcsUUFBVSxDQUMzRyxHQUFjLElBQVZPLEVBQUcsTUFBY1QsR0FBTVMsRUFBRyxHQUFLVCxFQUFFLElBQU1TLEVBQUcsR0FBS1QsRUFBRSxJQUFNLENBQUVFLEVBQUVDLE1BQVFNLEVBQUcsR0FBSSxLQUFPLENBQ3JGLEdBQWMsSUFBVkEsRUFBRyxJQUFZUCxFQUFFQyxNQUFRSCxFQUFFLEdBQUksQ0FBRUUsRUFBRUMsTUFBUUgsRUFBRSxHQUFJQSxFQUFJUyxFQUFJLEtBQU8sQ0FDcEUsR0FBSVQsR0FBS0UsRUFBRUMsTUFBUUgsRUFBRSxHQUFJLENBQUVFLEVBQUVDLE1BQVFILEVBQUUsR0FBSUUsRUFBRUksSUFBSWhDLEtBQUttQyxHQUFLLEtBQU8sQ0FDOURULEVBQUUsSUFBSUUsRUFBRUksSUFBSUssTUFDaEJULEVBQUVHLEtBQUtNLE1BQU8sU0FFdEJGLEVBQUtaLEVBQUs5RCxLQUFLMEQsRUFBU1MsRUFDNUIsQ0FBRSxNQUFPaEMsR0FBS3VDLEVBQUssQ0FBQyxFQUFHdkMsR0FBSTZCLEVBQUksQ0FBRyxDQUFFLFFBQVVELEVBQUlFLEVBQUksQ0FBRyxDQUN6RCxHQUFZLEVBQVJTLEVBQUcsR0FBUSxNQUFNQSxFQUFHLEdBQUksTUFBTyxDQUFFbEMsTUFBT2tDLEVBQUcsR0FBS0EsRUFBRyxRQUFLLEVBQVFwQyxNQUFNLEVBQzlFLENBdEJnRHVDLENBQUssQ0FBQy9DLEVBQUcyQyxHQUFLLENBQUcsQ0F1QnJFLENDOUhlSyxDQUFZNUUsTUFBTSxTQUFVMEMsR0FDL0IsT0FBUUEsRUFBR3dCLE9BQ1AsS0FBSyxFQVVELE9BVEF4QixFQUFHMEIsS0FBSy9CLEtBQUssQ0FBQyxFQUFHLEVBQUcsQ0FBRSxJQUN0QmMsRUFBVSxDQUNOUCxVQUFNQyxFQUNOTixXQUFPTSxFQUNQQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxXQUFXLElBRVIsQ0FBQyxFQUFhTSxHQUN6QixLQUFLLEVBWUQsT0FYQVgsRUFBT0YsRUFBR3lCLFFBQ21CLElBQXpCZixFQUFhL0IsU0FDYjhCLEVBQVUsQ0FDTlAsS0FBTUEsRUFDTkwsV0FBT00sRUFDUEMsV0FBVyxFQUNYQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsV0FBVyxJQUdaLENBQUMsRUFBY0wsR0FDMUIsS0FBSyxFQVlELE9BWEFlLEVBQVVqQixFQUFHeUIsUUFDZ0IsSUFBekJmLEVBQWEvQixTQUNiOEIsRUFBVSxDQUNOWixNQUFPb0IsRUFDUGYsVUFBTUMsRUFDTkMsV0FBVyxFQUNYQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsV0FBVyxJQUdaLENBQUMsRUFBYSxHQUN6QixLQUFLLEVBQUcsTUFBTyxDQUFDLEdBRXhCLEdBQ0osRURrRE8sS0FGb0M0QixPQzVGcUMsS0Q4RjlEQSxFQUFJQyxXQUFVLFNBQVVDLEVBQVNDLEdBQy9DLFNBQVNDLEVBQVUzQyxHQUFTLElBQU1xQyxFQUFLakIsRUFBVXZCLEtBQUtHLEdBQVMsQ0FBRSxNQUFPTCxHQUFLK0MsRUFBTy9DLEVBQUksQ0FBRSxDQUMxRixTQUFTaUQsRUFBUzVDLEdBQVMsSUFBTXFDLEVBQUtqQixFQUFpQixNQUFFcEIsR0FBUyxDQUFFLE1BQU9MLEdBQUsrQyxFQUFPL0MsRUFBSSxDQUFFLENBQzdGLFNBQVMwQyxFQUFLekIsR0FKbEIsSUFBZVosRUFJYVksRUFBT2QsS0FBTzJDLEVBQVE3QixFQUFPWixRQUoxQ0EsRUFJeURZLEVBQU9aLE1BSmhEQSxhQUFpQnVDLEVBQUl2QyxFQUFRLElBQUl1QyxHQUFFLFNBQVVFLEdBQVdBLEVBQVF6QyxFQUFRLEtBSWpCNkMsS0FBS0YsRUFBV0MsRUFBVyxDQUM3R1AsR0FBTWpCLEVBQVlBLEVBQVUzRCxNQUFNeUQsRUFBU0MsR0FBYyxLQUFLdEIsT0FDbEUsSUFQRyxJQUFtQnFCLEVBQVNDLEVBQVlvQixFQUFHbkIsQ0NoRDFDLEdBQUcsQ0FBQ04sSUFDUixNQUFPLENBQUNGLEVBQVFHLEVBQ3BCLENEb0Y2QmpFLE9BQU9nQixPQTBHWGhCLE9BQU9nQixxQkUvUGhDLE1BQU1nRixFQUFpQixJQUFJQyxRQUVyQkMsRUFBYyxDQUFDLEVBQ2ZDLEVBQWdCLENBQUMsRUFDakJDLEVBQU8sT0FLUEMsRUFBOEJELElBQzlCRSxFQUFTdEcsT0FDVHVHLEVBQWVwQixHQUFJQSxJQUFNa0IsRUFDekJHLEVBQWNyQixHQUFnQixtQkFBTEEsRUFDekJzQixFQUFlLENBQUNDLEVBQUdDLEtBQUksSUFDbEJELEtBQ0FDLElBRUxDLEVBQWdCLFlBRWhCQyxTQUF5QkMsUUFBVUYsRUFDbkNHLFNBQTJCNUUsVUFBWXlFLEVBRXZDSSxFQUFvQixDQUFDQyxFQUFPMUcsS0FDOUIsTUFBTTJHLEVBQVFsQixFQUFlbUIsSUFBSUYsR0FDakMsTUFBTyxDQUVILElBQUlBLEVBQU1FLElBQUk1RyxJQUFRMkYsRUFFckJrQixJQUNHLElBQUtiLEVBQVloRyxHQUFNLENBQ25CLE1BQU04RyxFQUFPSixFQUFNRSxJQUFJNUcsR0FHakJBLEtBQU80RixJQUNUQSxFQUFjNUYsR0FBTzhHLEdBRXpCSCxFQUFNLEdBQUczRyxFQUFLa0csRUFBYVksRUFBTUQsR0FBT0MsR0FBUW5CLEVBQ3BELEdBR0pnQixFQUFNLEdBRU4sS0FDU1gsRUFBWWhHLElBRVRBLEtBQU80RixFQUFzQkEsRUFBYzVGLEdBRzVDMEcsRUFBTUUsSUFBSTVHLElBQVEyRixFQUVoQyxFQU9Db0IsRUFBUSxJQUFJckIsUUFFbEIsSUFBSXNCLEVBQVUsRUFTZCxNQUFNQyxFQUFjQyxJQUNoQixNQUFNQyxTQUFjRCxFQUNkeEcsRUFBY3dHLEdBQU9BLEVBQUl4RyxZQUN6QjBHLEVBQVMxRyxHQUFlMkcsS0FDOUIsSUFBSTlELEVBQ0ErRCxFQUNKLEdBQUl2QixFQUFPbUIsS0FBU0EsR0FBUUUsR0FBVTFHLEdBQWU2RyxPQThCakRoRSxFQUFTNkQsRUFBU0YsRUFBSU0sU0FBbUIsVUFBUkwsRUFBbUJELEVBQUlPLFdBQXFCLFVBQVJOLEVBQW1CTyxLQUFLQyxVQUFVVCxHQUFPLEdBQUtBLE1BOUIxRCxDQUl6RCxHQURBM0QsRUFBU3dELEVBQU1ILElBQUlNLEdBQ2YzRCxFQUFRLE9BQU9BLEVBTW5CLEdBRkFBLElBQVd5RCxFQUFVLElBQ3JCRCxFQUFNYSxJQUFJVixFQUFLM0QsR0FDWDdDLEdBQWVtSCxNQUFPLENBR3RCLElBREF0RSxFQUFTLElBQ0wrRCxFQUFRLEVBQUdBLEVBQVFKLEVBQUlwSCxPQUFRd0gsSUFDL0IvRCxHQUFVMEQsRUFBV0MsRUFBSUksSUFBVSxJQUV2Q1AsRUFBTWEsSUFBSVYsRUFBSzNELEVBQ25CLENBQ0EsR0FBSTdDLEdBQWVxRixFQUFRLENBRXZCeEMsRUFBUyxJQUNULE1BQU14QyxFQUFPZ0YsRUFBT2hGLEtBQUttRyxHQUFLWSxPQUM5QixNQUFPOUIsRUFBWXNCLEVBQVF2RyxFQUFLZ0UsUUFDdkJpQixFQUFZa0IsRUFBSUksTUFDakIvRCxHQUFVK0QsRUFBUSxJQUFNTCxFQUFXQyxFQUFJSSxJQUFVLEtBR3pEUCxFQUFNYSxJQUFJVixFQUFLM0QsRUFDbkIsQ0FDSixDQUdBLE9BQU9BLENBQU0sRUFTYixJQUFJd0UsR0FBUyxFQUNqQixNQUVPQyxFQUFlQyxHQUFrQjNCLEdBQW1CQyxPQUFPMUUsaUJBQW1CLENBQ2pGMEUsT0FBTzFFLGlCQUFpQnFHLEtBQUszQixRQUM3QkEsT0FBT3pFLG9CQUFvQm9HLEtBQUszQixTQUNoQyxDQUNBVixFQUNBQSxHQW9DRXNDLEVBQVMsQ0FDWEMsU0E1Q2EsSUFBSUwsRUE2Q2pCTSxVQXBDYyxLQUNkLE1BQU1DLEVBQWtCOUIsR0FBcUI1RSxTQUFTMEcsZ0JBQ3RELE9BQU90QyxFQUFZc0MsSUFBd0MsV0FBcEJBLENBQTRCLEdBb0NqRUMsRUFBdUIsQ0FDekJDLFVBbkNlcEgsSUFFWG9GLEdBQ0E1RSxTQUFTQyxpQkFBaUIsbUJBQW9CVCxHQUVsRDRHLEVBQWMsUUFBUzVHLEdBQ2hCLEtBQ0NvRixHQUNBNUUsU0FBU0Usb0JBQW9CLG1CQUFvQlYsR0FFckQ2RyxFQUFlLFFBQVM3RyxFQUFTLEdBMEJyQ3FILGNBdkJtQnJILElBRW5CLE1BQU1zSCxFQUFXLEtBQ2JYLEdBQVMsRUFDVDNHLEdBQVUsRUFHUnVILEVBQVksS0FDZFosR0FBUyxDQUFLLEVBSWxCLE9BRkFDLEVBQWMsU0FBVVUsR0FDeEJWLEVBQWMsVUFBV1csR0FDbEIsS0FDSFYsRUFBZSxTQUFVUyxHQUN6QlQsRUFBZSxVQUFXVSxFQUFVLENBQ3ZDLEdBV0NDLEdBQW1CLFFBQ25CQyxHQUFhdkMsR0FBbUIsU0FBVUMsT0FNMUN1QyxFQUE0QkQsRUFBWSxFQUFBdEgsVUFBWSxFQUFBd0gsZ0JBRXBEQyxFQUEyQyxvQkFBZEMsV0FBNkJBLFVBQVVDLFdBRXBFQyxHQUFrQk4sR0FBYUcsSUFBd0IsQ0FDekQsVUFDQSxNQUNGSSxTQUFTSixFQUFvQkssZ0JBQWtCTCxFQUFvQk0sVUFFL0QsRUFBYXRKLElBQ2YsR0FBSWlHLEVBQVdqRyxHQUNYLElBQ0lBLEVBQU1BLEdBQ1YsQ0FBRSxNQUFPdUosR0FFTHZKLEVBQU0sRUFDVixDQUlKLE1BQU13SixFQUFPeEosRUFHYixNQUFPLENBRFBBLEVBQW9CLGlCQUFQQSxFQUFrQkEsR0FBTzZILE1BQU00QixRQUFRekosR0FBT0EsRUFBSUYsT0FBU0UsR0FBT2lILEVBQVdqSCxHQUFPLEdBRzdGd0osRUFDSCxFQUlMLElBQUlFLEVBQWMsRUFDbEIsTUFBTUMsRUFBZSxNQUFNRCxFQUlyQkUsRUFBZSxFQUdyQixJQUFJQyxFQUlZRCxFQUloQkUsZUFBZUMsS0FBa0JQLEdBQzdCLE1BQU85QyxFQUFPc0QsRUFBTUMsRUFBT0MsR0FBU1YsRUFHOUJ2SSxFQUFVaUYsRUFBYSxDQUN6QmlFLGVBQWUsRUFDZkMsY0FBYyxHQUNFLGtCQUFWRixFQUFzQixDQUM1QkcsV0FBWUgsR0FDWkEsR0FBUyxDQUFDLEdBQ2QsSUFBSUMsRUFBZ0JsSixFQUFRa0osY0FDNUIsTUFBTUcsRUFBd0JySixFQUFRc0osZ0JBQ3RDLElBQUlDLEVBQWlCdkosRUFBUXVKLGVBQzdCLE1BQU1ILEdBQW9DLElBQXZCcEosRUFBUW9KLFdBQ3JCRSxFQUFtQjNILEdBQ21CLG1CQUExQjBILEVBQXVDQSxFQUFzQjFILElBQW1DLElBQTFCMEgsRUFFbEZGLEVBQWVuSixFQUFRbUosYUFHN0IsR0FBSW5FLEVBQVcrRCxHQUFPLENBQ2xCLE1BQU1TLEVBQVlULEVBQ1pVLEVBQWMsR0FDZEMsRUFBS2pFLEVBQU0zRixPQUNqQixJQUFJLElBQUk2SixFQUFRRCxFQUFHbkksUUFBU29JLEVBQU1uSSxLQUFNbUksRUFBUUQsRUFBR25JLE9BQU8sQ0FDdEQsTUFBTXhDLEVBQU00SyxFQUFNakksT0FFakIsaUJBQWlCa0ksS0FBSzdLLElBQVF5SyxFQUFVL0QsRUFBTUUsSUFBSTVHLEdBQUs4SyxLQUNwREosRUFBWWhJLEtBQUsxQyxFQUV6QixDQUNBLE9BQU9tRixRQUFRNEYsSUFBSUwsRUFBWU0sSUFBSUMsR0FDdkMsQ0FDQSxPQUFPQSxFQUFZakIsR0FDbkJGLGVBQWVtQixFQUFZSCxHQUV2QixNQUFPOUssR0FBTyxFQUFVOEssR0FDeEIsSUFBSzlLLEVBQUssT0FDVixNQUFPNEcsRUFBS2dCLEdBQU9uQixFQUFrQkMsRUFBTzFHLElBQ3JDa0wsRUFBb0JDLEVBQVVDLEdBQVMzRixFQUFlbUIsSUFBSUYsR0FDM0QyRSxFQUFlSCxFQUFtQmxMLEdBQ2xDc0wsRUFBa0IsSUFDaEJqQixXQUdPZSxFQUFNcEwsR0FDVHFMLEdBQWdCQSxFQUFhLElBQ3RCQSxFQUFhLEdBQUd6QixHQUFjcEUsTUFBSyxJQUFJb0IsSUFBTTNELE9BR3JEMkQsSUFBTTNELEtBR2pCLEdBQUl1RyxFQUFLMUosT0FBUyxFQUVkLE9BQU93TCxJQUVYLElBQ0kxSSxFQURBSyxFQUFPZ0gsRUFHWCxNQUFNc0IsRUFBbUI1QixJQUN6QndCLEVBQVNuTCxHQUFPLENBQ1p1TCxFQUNBLEdBRUosTUFBTUMsR0FBcUJ4RixFQUFZd0UsR0FDakM3RCxFQUFRQyxJQUlSNkUsRUFBZ0I5RSxFQUFNMUQsS0FDdEJ5SSxFQUFjL0UsRUFBTWdGLEdBQ3BCQyxFQUFnQjVGLEVBQVkwRixHQUFlRCxFQUFnQkMsRUFVakUsR0FSSUYsSUFDQWhCLEVBQWlCdkUsRUFBV3VFLEdBQWtCQSxFQUFlb0IsR0FBaUJwQixFQUU5RTVDLEVBQUksQ0FDQTNFLEtBQU11SCxFQUNObUIsR0FBSUMsS0FHUjNGLEVBQVdoRCxHQUVYLElBQ0lBLEVBQU9BLEVBQUsySSxFQUNoQixDQUFFLE1BQU9yQyxHQUVMM0csRUFBUTJHLENBQ1osQ0FHSixHQUFJdEcsR0FBUWdELEVBQVdoRCxFQUFLdUMsTUFBTyxDQVMvQixHQU5BdkMsUUFBYUEsRUFBSzRJLE9BQU90QyxJQUNyQjNHLEVBQVEyRyxDQUFHLElBS1hnQyxJQUFxQkosRUFBU25MLEdBQUssR0FBSSxDQUN2QyxHQUFJNEMsRUFBTyxNQUFNQSxFQUNqQixPQUFPSyxDQUNYLENBQVdMLEdBQVM0SSxHQUFxQmpCLEVBQWdCM0gsS0FHckR1SCxHQUFnQixFQUNoQmxILEVBQU8ySSxFQUVQaEUsRUFBSSxDQUNBM0UsT0FDQTBJLEdBQUk3RixJQUdoQixDQUVJcUUsSUFDS3ZILElBRUdxRCxFQUFXa0UsS0FDWGxILEVBQU9rSCxFQUFjbEgsRUFBTTJJLElBRy9CaEUsRUFBSSxDQUNBM0UsT0FDQTBJLEdBQUk3RixNQUtoQnFGLEVBQVNuTCxHQUFLLEdBQUsySixJQUVuQixNQUFNbUMsUUFBWVIsSUFPbEIsR0FKQTFELEVBQUksQ0FDQStELEdBQUk3RixLQUdKbEQsRUFJSixPQUFPdUgsRUFBZ0IyQixFQUFNN0ksRUFIekIsR0FBSW1ILEVBQWMsTUFBTXhILENBSWhDLENBQ0osQ0FFQSxNQUFNbUosRUFBb0IsQ0FBQ1YsRUFBY2xFLEtBQ3JDLElBQUksTUFBTW5ILEtBQU9xTCxFQUNUQSxFQUFhckwsR0FBSyxJQUFJcUwsRUFBYXJMLEdBQUssR0FBR21ILEVBQ25ELEVBRUU2RSxFQUFZLENBQUNDLEVBQVVoTCxLQU16QixJQUFLd0UsRUFBZXlHLElBQUlELEdBQVcsQ0FDL0IsTUFBTUUsRUFBT2pHLEVBQWFxQyxFQUFzQnRILEdBRzFDaUssRUFBcUIsQ0FBQyxFQUN0QmtCLEVBQVNyQyxFQUFlN0IsS0FBS3BDLEVBQVdtRyxHQUM5QyxJQUFJSSxFQUFVeEcsRUFDZCxNQUFNeUcsRUFBZ0IsQ0FBQyxFQUNqQkMsRUFBWSxDQUFDdk0sRUFBS29CLEtBQ3BCLE1BQU1vTCxFQUFPRixFQUFjdE0sSUFBUSxHQUduQyxPQUZBc00sRUFBY3RNLEdBQU93TSxFQUNyQkEsRUFBSzlKLEtBQUt0QixHQUNILElBQUlvTCxFQUFLQyxPQUFPRCxFQUFLeEwsUUFBUUksR0FBVyxFQUFFLEVBRS9Dc0wsRUFBUyxDQUFDMU0sRUFBSzJDLEVBQU9tRSxLQUN4Qm1GLEVBQVNyRSxJQUFJNUgsRUFBSzJDLEdBQ2xCLE1BQU02SixFQUFPRixFQUFjdE0sR0FDM0IsR0FBSXdNLEVBQ0EsSUFBSyxNQUFNRyxLQUFNSCxFQUNiRyxFQUFHaEssRUFBT21FLEVBRWxCLEVBRUU4RixFQUFlLEtBQ2pCLElBQUtuSCxFQUFleUcsSUFBSUQsS0FFcEJ4RyxFQUFlbUMsSUFBSXFFLEVBQVUsQ0FDekJmLEVBQ0EsQ0FBQyxFQUNELENBQUMsRUFDRCxDQUFDLEVBQ0RrQixFQUNBTSxFQUNBSCxLQUVDMUQsR0FBVyxDQU9aLE1BQU1nRSxFQUFlVixFQUFLM0QsVUFBVXNFLFdBQVc1RSxLQUFLcEMsRUFBV2lHLEVBQWtCN0QsS0FBS3BDLEVBQVdvRixFQXROakcsS0F1Tk02QixFQUFtQlosRUFBSzFELGNBQWNxRSxXQUFXNUUsS0FBS3BDLEVBQVdpRyxFQUFrQjdELEtBQUtwQyxFQUFXb0YsRUF0TnJHLEtBdU5KbUIsRUFBVSxLQUNOUSxHQUFnQkEsSUFDaEJFLEdBQW9CQSxJQUlwQnRILEVBQWV1SCxPQUFPZixFQUFTLENBRXZDLENBQ0osRUFRSixPQU5BVyxJQU1PLENBQ0hYLEVBQ0FHLEVBQ0FRLEVBQ0FQLEVBRVIsQ0FDQSxNQUFPLENBQ0hKLEVBQ0F4RyxFQUFlbUIsSUFBSXFGLEdBQVUsR0FDaEMsR0FnQkV2RixFQUFPMEYsR0FBVUosRUFBVSxJQUFJaUIsS0FFaENDLEVBQWdCaEgsRUFBYSxDQUUvQmlILGNBQWV0SCxFQUNmdUgsVUFBV3ZILEVBQ1h3SCxRQUFTeEgsRUFDVHlILGFBbkJpQixDQUFDaEosRUFBR2lKLEVBQUlDLEVBQVFuRCxFQUFZOEIsS0FDN0MsTUFBTXNCLEVBQWdCRCxFQUFPRSxnQkFDdkJDLEVBQW9CeEIsRUFBS3lCLFdBRXpCQyxNQUFjQyxLQUFLQyxTQUFXLEtBQVEsSUFBTUosRUFBb0IsRUFBSUEsRUFBb0IsS0FBT0gsRUFBT1Esb0JBQ3ZHaEksRUFBWXlILElBQWtCRSxFQUFvQkYsR0FHdkRYLFdBQVd6QyxFQUFZd0QsRUFBUzFCLEVBQUssRUFZckM4QixZQUFhcEksRUFFYnFJLG1CQUFtQixFQUNuQkMsdUJBQXVCLEVBQ3ZCQyxtQkFBbUIsRUFDbkJDLG9CQUFvQixFQUVwQkwsbUJBQW9CN0UsRUFBaUIsSUFBUSxJQUM3Q21GLHNCQUF1QixJQUN2QkMsaUJBQWtCLElBQ2xCQyxlQUFnQnJGLEVBQWlCLElBQU8sSUFFeENzRixRQXRCWSxDQUFDL0MsRUFBYWdELElBQVV6SCxFQUFXeUUsSUFBZ0J6RSxFQUFXeUgsR0F1QjFFQyxTQUFVLEtBQUksRUFDZGpJLFFBQ0EwRixTQUNBd0MsU0FBVSxDQUFDLEdBRWZ6RyxHQW1CTTBHLEdBQW1CLElBQUFDLGVBQWMsQ0FBQyxHQTBDbENDLEVBQWlCekksR0FBbUJDLE9BQU95SSxxQkFDM0NDLEVBQU1GLEVBQWlCeEksT0FBT3lJLHFCQUF1QixHQW9CckRFLEVBQWUsSUFDVmhKLEVBQWFnSCxHQUFlLElBQUFpQyxZQUFXTixJQTJCdEJJLEVBQUlHLFFBZlpDLEdBQWEsQ0FBQ0MsRUFBTUMsRUFBVS9CLElBWW5DNkIsRUFBV0MsRUFWRkMsR0FBWSxLQUFLL0YsS0FDN0IsTUFBTXhKLEVBQU0sRUFBVXNQLEdBQU0sSUFDckIsQ0FBRSxDQUFFLENBQUVFLEdBQVcvSixFQUFlbUIsSUFBSUYsR0FDckMrSSxFQUFNRCxFQUFReFAsR0FDcEIsT0FBSXlQLFVBQ09ELEVBQVF4UCxHQUNSeVAsR0FFSkYsS0FBWS9GLEVBQ3RCLEdBQ2dDZ0UsS0EzQ2pDdUIsSUFFQXhJLE9BQU9tSix1QkFBeUIsR0M3aUJ4QyxNQUFNQyxFQUFjLENBQ2hCQyxRQUFRLEdDSkcsU0FBU0MsSUFDcEIsSUFBSUMsRUFBWVosSUFFaEIsT0FEWSxJQUFBYSxVQUFRLFdBQWMsTUFBTyxDQUFHM0QsT0FBUTBELEVBQVUxRCxPQUFRMUYsTUFBT29KLEVBQVVwSixNQUFVLEdBQUcsQ0FBQ29KLEVBQVUxRCxPQUFRMEQsRUFBVXBKLE9BRXJJLENDSmUsU0FBU3NKLEVBQVVDLFFBQ1QsSUFBakJBLElBQTJCQSxHQUFlLEdBQzlDLElBQUlsTixFQUFLaEIsR0FBTyxJQUFBaUIsVUFBU2lOLEdBQWUsR0FBSXROLEVBQVFJLEVBQUcsR0FBSW1OLEVBQVduTixFQUFHLEdBV3pFLE1BQU8sQ0FBQ0osR0FWSyxJQUFBZ0IsY0FBWSxTQUFVd00sR0FFM0JELEVBRG9CLGtCQUFiQyxFQUNFQSxFQUdBLFNBQVVDLEdBQ2YsT0FBUUEsQ0FDWixFQUVSLEdBQUcsSUFFUCxDRnFja0JySyxFQUFPc0ssZ0JEK0NOQyxJQUNmLE1BQU0sTUFBRTNOLEdBQVcyTixFQUNiQyxHQUFlLElBQUFwQixZQUFXTixHQUMxQjJCLEVBQXFCdkssRUFBV3RELEdBQ2hDNkssR0FBUyxJQUFBdUMsVUFBUSxJQUFJUyxFQUFxQjdOLEVBQU00TixHQUFnQjVOLEdBQU8sQ0FDekU2TixFQUNBRCxFQUNBNU4sSUFHRThOLEdBQWlCLElBQUFWLFVBQVEsSUFBSVMsRUFBcUJoRCxFQTVCdkMsRUFBQ3JILEVBQUdDLEtBRXJCLE1BQU14QixFQUFJc0IsRUFBYUMsRUFBR0MsR0FFMUIsR0FBSUEsRUFBRyxDQUNILE1BQVE2SSxJQUFLeUIsRUFBSzlCLFNBQVUrQixHQUFReEssR0FDNUI4SSxJQUFLMkIsRUFBS2hDLFNBQVVpQyxHQUFRekssRUFDaENzSyxHQUFNRSxJQUNOaE0sRUFBRXFLLElBQU15QixFQUFHdEIsT0FBT3dCLElBRWxCRCxHQUFNRSxJQUNOak0sRUFBRWdLLFNBQVcxSSxFQUFheUssRUFBSUUsR0FFdEMsQ0FDQSxPQUFPak0sQ0FBQyxFQWN5RGtNLENBQWFQLEVBQWMvQyxJQUFTLENBQ2pHZ0QsRUFDQUQsRUFDQS9DLElBR0V2QixFQUFXdUIsR0FBVUEsRUFBT3ZCLFNBRTVCOEUsR0FBa0IsSUFBQXpQLFFBQU93RSxHQUMzQm1HLElBQWE4RSxFQUFnQnJQLFVBQzdCcVAsRUFBZ0JyUCxRQUFVc0ssRUFBVUMsRUFBU3dFLEVBQWUvSixPQUFTQSxHQUFROEcsSUFFakYsTUFBTXdELEVBQWVELEVBQWdCclAsUUFhckMsT0FYSXNQLElBQ0FQLEVBQWUvSixNQUFRc0ssRUFBYSxHQUNwQ1AsRUFBZXJFLE9BQVM0RSxFQUFhLElBR3pDbEksR0FBMEIsS0FDdEIsR0FBSWtJLEVBRUEsT0FEQUEsRUFBYSxJQUFNQSxFQUFhLEtBQ3pCQSxFQUFhLEVBQ3hCLEdBQ0QsS0FDSSxJQUFBQyxlQUFjcEMsRUFBaUJxQyxTQUFVaEwsRUFBYW9LLEVBQU8sQ0FDaEUzTixNQUFPOE4sSUFDUixHQ3BGOEMsZUFBZ0IsQ0FDakU5TixNQUFPdUssK0RHdGRYLElBQUl6RCxFQUFVNUIsTUFBTTRCLFFBRUwsU0FBUzBILEVBQUdDLEdBQ3pCLElBQUlDLEVBQU0sR0FFVixHQUFtQixpQkFBUkQsR0FBbUMsaUJBQVJBLEVBQWtCLE9BQU9BLEdBQU8sR0FFdEUsR0FBSTNILEVBQVEySCxHQUNWLElBQUssSUFBV0UsRUFBUEMsRUFBSSxFQUFRQSxFQUFJSCxFQUFJdFIsT0FBUXlSLElBQ1IsTUFBdEJELEVBQU1ILEVBQUdDLEVBQUlHLE9BQ2hCRixJQUFRQSxHQUFPLEtBQU9DLFFBSTFCLElBQUssSUFBSUMsS0FBS0gsRUFDUkEsRUFBSWxSLGVBQWVxUixJQUFNSCxFQUFJRyxLQUFJRixJQUFRQSxHQUFPLEtBQU9FLEdBRy9ELE9BQU9GLENBQ1QsNkRDbEJBLFNBQWdCLFVBQVksdUJBQXVCLEtBQU8sdUJBQXVCLE1BQVEsdUJBQXVCLE1BQVEsdUJBQXVCLE9BQVMsdUJBQXVCLFNBQVcsdUJBQXVCLFFBQVUsdUJBQXVCLFlBQWMsdUJBQXVCLFdBQWEsdUJBQXVCLFNBQVcsdUJBQXVCLFNBQVcsdUJBQXVCLFlBQWMsdUJBQXVCLG9CQUFzQix1QkFBdUIsa0JBQW9CLHVCQUF1QixVQUFZLHVCQUF1QixRQUFVLG1GQ0F6aUIsU0FBZ0IsWUFBYyx1QkFBdUIsU0FBVyxtRkNBaEUsU0FBZ0IsVUFBWSx1QkFBdUIsS0FBTyx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsU0FBVyx1QkFBdUIsUUFBVSx1QkFBdUIsWUFBYyx1QkFBdUIsV0FBYSx1QkFBdUIsU0FBVyx1QkFBdUIsWUFBYyx1QkFBdUIsb0JBQXNCLHVCQUF1QixrQkFBb0IsdUJBQXVCLFVBQVksdUJBQXVCLFNBQVcsdUJBQXVCLFNBQVcsdUJBQXVCLFFBQVUsbUZDQTNtQixTQUFnQixTQUFXLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLG1GQ0F6SixTQUFnQixZQUFjLHVCQUF1QixXQUFhLHVCQUF1QixTQUFXLG1GQ0FwRyxTQUFnQixZQUFjLHVCQUF1QixNQUFRLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLHVCQUF1QixTQUFXLHVCQUF1QixPQUFTLG1GQ0E5TCxTQUFnQixVQUFZLHVCQUF1QixZQUFjLHVCQUF1QixhQUFlLHVCQUF1QixVQUFZLHVCQUF1QixzQkFBd0IsdUJBQXVCLGFBQWUsbUZDQS9OLFNBQWdCLE9BQVMsdUJBQXVCLFFBQVUsdUJBQXVCLFlBQWMsdUJBQXVCLGlCQUFtQix1QkFBdUIsdUJBQXlCLHVCQUF1QixxQkFBdUIsdUJBQXVCLGdCQUFrQix1QkFBdUIsc0JBQXdCLHVCQUF1QixvQkFBc0IsdUJBQXVCLG1CQUFxQix1QkFBdUIsY0FBZ0IsdUJBQXVCLFVBQVksbUZDQWxlLFNBQWdCLGNBQWdCLG1GQ0FoQyxTQUFnQixhQUFlLGtGQ0EvQixTQUFnQixhQUFlLHVCQUF1QixrQkFBb0IsdUJBQXVCLHNCQUF3QixtRkNBekgsU0FBZ0IsVUFBWSxtRkNBNUIsU0FBZ0IsTUFBUSx1QkFBdUIsTUFBUSx1QkFBdUIsTUFBUSx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsU0FBVyx1QkFBdUIsUUFBVSx1QkFBdUIsU0FBVyx1QkFBdUIsU0FBVyx1QkFBdUIsVUFBWSx1QkFBdUIsWUFBYyx1QkFBdUIsb0JBQXNCLHVCQUF1QixrQkFBb0IsbUZDQTViLFNBQWdCLFVBQVksdUJBQXVCLElBQU0sdUJBQXVCLE9BQVMsdUJBQXVCLE1BQVEsdUJBQXVCLE1BQVEsdUJBQXVCLFlBQWMsdUJBQXVCLElBQU0sdUJBQXVCLFFBQVUsdUJBQXVCLFVBQVksdUJBQXVCLE1BQVEsdUJBQXVCLFVBQVksdUJBQXVCLFlBQWMsdUJBQXVCLE9BQVMsdUJBQXVCLFdBQWEsdUJBQXVCLGFBQWUsdUJBQXVCLEtBQU8sdUJBQXVCLFNBQVcsdUJBQXVCLFdBQWEsdUJBQXVCLGlCQUFtQix1QkFBdUIsZUFBaUIsbUZDQXBxQixTQUFnQixLQUFPLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLHVCQUF1QixTQUFXLG1GQ0F2TCxTQUFnQixVQUFZLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLHVCQUF1QixRQUFVLHVCQUF1QixVQUFZLHVCQUF1QixZQUFjLHVCQUF1QixhQUFlLHVCQUF1QixXQUFhLHVCQUF1QixTQUFXLHVCQUF1QixTQUFXLHVCQUF1QixTQUFXLHVCQUF1QixZQUFjLG1GQ0F4ZCxTQUFnQixVQUFZLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLHVCQUF1QixNQUFRLHVCQUF1QixPQUFTLHVCQUF1QixRQUFVLHVCQUF1QixVQUFZLHVCQUF1QixZQUFjLHVCQUF1QixhQUFlLHVCQUF1QixXQUFhLHVCQUF1QixTQUFXLHVCQUF1QixTQUFXLHVCQUF1QixTQUFXLHVCQUF1QixZQUFjLHVCQUF1QixTQUFXLG1GQ0ExZixTQUFnQixVQUFZLHVCQUF1QixXQUFhLHVCQUF1QixRQUFVLHVCQUF1QixNQUFRLHVCQUF1QixNQUFRLHVCQUF1QixRQUFVLHVCQUF1QixvQkFBc0IsdUJBQXVCLGtCQUFvQixtRkNBeFIsU0FBZ0IsVUFBWSxtRkNBNUIsU0FBZ0IsVUFBWSx1QkFBdUIsT0FBUyx1QkFBdUIsWUFBYyx1QkFBdUIsS0FBTyxtRkNBL0gsU0FBZ0IsYUFBZSxtRkNBL0IsU0FBZ0IsS0FBTyx1QkFBdUIsS0FBTyx1QkFBdUIsU0FBVyx1QkFBdUIsT0FBUyx1QkFBdUIsT0FBUyx1QkFBdUIsU0FBVyxtRkNBekwsU0FBZ0IsVUFBWSx1QkFBdUIsY0FBZ0IsdUJBQXVCLElBQU0sdUJBQXVCLE1BQVEsdUJBQXVCLEtBQU8sdUJBQXVCLE9BQVMsa0ZDQTdMLFNBQWdCLFNBQVcsdUJBQXVCLFVBQVksdUJBQXVCLE9BQVMsbUZDQTlGLFNBQWdCLGFBQWUsdUJBQXVCLFVBQVksdUJBQXVCLE9BQVMsdUJBQXVCLFNBQVcsbUZDQXBJLFNBQWdCLFFBQVUsdUJBQXVCLFVBQVksdUJBQXVCLE1BQVEsdUJBQXVCLFlBQWMsdUJBQXVCLFNBQVcsdUJBQXVCLFlBQWMsbUZDQXhNLFNBQWdCLE9BQVMsdUJBQXVCLFFBQVUsa0ZDQTFELFNBQWdCLFFBQVUsdUJBQXVCLFlBQWMsdUJBQXVCLE1BQVEsbUZDQTlGLFNBQWdCLE9BQVMsdUJBQXVCLE1BQVEsdUJBQXVCLFNBQVcsbUZDQTFGLFNBQWdCLFVBQVksdUJBQXVCLFNBQVcsd0JBQXdCLGtCQUFvQix1QkFBdUIsU0FBVyx1QkFBdUIsTUFBUSxtRkNBM0ssU0FBZ0IsVUFBWSx1QkFBdUIsbUJBQXFCLHVCQUF1QixTQUFXLHVCQUF1QixrQkFBb0IsdUJBQXVCLE1BQVEsdUJBQXVCLFVBQVksdUJBQXVCLGNBQWdCLG1GQ0E5UCxTQUFnQixVQUFZLHVCQUF1QixvQkFBc0IsdUJBQXVCLFlBQWMsbUZDQTlHLFNBQWdCLFVBQVksdUJBQXVCLFNBQVcsdUJBQXVCLE9BQVMsdUJBQXVCLE9BQVMsdUJBQXVCLFFBQVUsdUJBQXVCLFVBQVksdUJBQXVCLGdCQUFrQix1QkFBdUIsV0FBYSx1QkFBdUIsU0FBVyxtRkNBalQsU0FBZ0IsWUFBYyx1QkFBdUIsT0FBUyx1QkFBdUIsV0FBYSx1QkFBdUIsZUFBaUIsdUJBQXVCLGdCQUFrQixtRkNBbkwsU0FBZ0IsVUFBWSx1QkFBdUIsTUFBUSx1QkFBdUIscUJBQXVCLHdCQUF3QixtQkFBcUIsbUZDQXRKLFNBQWdCLFVBQVksdUJBQXVCLGVBQWlCLHVCQUF1QixhQUFlLG1GQ0ExRyxTQUFnQixnQkFBa0IsdUJBQXVCLGdCQUFrQix1QkFBdUIsU0FBVyxtRkNBN0csU0FBZ0IsVUFBWSx1QkFBdUIsT0FBUyx1QkFBdUIsU0FBVyxtRkNBOUYsU0FBZ0IsVUFBWSxtRkNBNUIsU0FBZ0IsVUFBWSx1QkFBdUIsUUFBVSx1QkFBdUIsWUFBYyx1QkFBdUIsU0FBVyxtRkNBcEksU0FBZ0IsVUFBWSx1QkFBdUIsV0FBYSx1QkFBdUIsU0FBVyx1QkFBdUIsU0FBVyx1QkFBdUIsVUFBWSx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsU0FBVyxtRkNBdlUsU0FBZ0IsVUFBWSx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsTUFBUSx1QkFBdUIsT0FBUyx1QkFBdUIsU0FBVyxtRkNBNUwsU0FBZ0IsTUFBUSx1QkFBdUIsU0FBVyxtRkNBMUQsU0FBZ0IsZUFBaUIsbUZDQWpDLFNBQWdCLFFBQVUsdUJBQXVCLFNBQVcsdUJBQXVCLE1BQVEsdUJBQXVCLEtBQU8sdUJBQXVCLE1BQVEsdUJBQXVCLElBQU0sdUJBQXVCLE9BQVMsbUZDQXJOLFNBQWdCLFVBQVksdUJBQXVCLFdBQWEsdUJBQXVCLE1BQVEsdUJBQXVCLE1BQVEsdUJBQXVCLFFBQVUsdUJBQXVCLG9CQUFzQix1QkFBdUIsa0JBQW9CLHVCQUF1QixRQUFVLDJEQ0F4UixJQUFJRyxFQUFZblIsTUFBUUEsS0FBS21SLFVBQWEsV0FTdEMsT0FSQUEsRUFBVy9SLE9BQU9DLFFBQVUsU0FBUzBFLEdBQ2pDLElBQUssSUFBSXFOLEVBQUc3UixFQUFJLEVBQUdxQyxFQUFJcEMsVUFBVUMsT0FBUUYsRUFBSXFDLEVBQUdyQyxJQUU1QyxJQUFLLElBQUk4UixLQURURCxFQUFJNVIsVUFBVUQsR0FDT0gsT0FBT1EsVUFBVUMsZUFBZUMsS0FBS3NSLEVBQUdDLEtBQ3pEdE4sRUFBRXNOLEdBQUtELEVBQUVDLElBRWpCLE9BQU90TixDQUNYLEVBQ09vTixFQUFTcFIsTUFBTUMsS0FBTVIsVUFDaEMsRUFDSThSLEVBQW1CdFIsTUFBUUEsS0FBS3NSLGtCQUFxQmxTLE9BQU9nQixPQUFTLFNBQVV1QixFQUFHRSxFQUFHcVAsRUFBR0ssUUFDN0UxTyxJQUFQME8sSUFBa0JBLEVBQUtMLEdBQzNCOVIsT0FBTzRRLGVBQWVyTyxFQUFHNFAsRUFBSSxDQUFFQyxZQUFZLEVBQU1qTCxJQUFLLFdBQWEsT0FBTzFFLEVBQUVxUCxFQUFJLEdBQ25GLEVBQUksU0FBVXZQLEVBQUdFLEVBQUdxUCxFQUFHSyxRQUNUMU8sSUFBUDBPLElBQWtCQSxFQUFLTCxHQUMzQnZQLEVBQUU0UCxHQUFNMVAsRUFBRXFQLEVBQ2IsR0FDR08sRUFBc0J6UixNQUFRQSxLQUFLeVIscUJBQXdCclMsT0FBT2dCLE9BQVMsU0FBVXVCLEVBQUc0QyxHQUN4Rm5GLE9BQU80USxlQUFlck8sRUFBRyxVQUFXLENBQUU2UCxZQUFZLEVBQU1sUCxNQUFPaUMsR0FDbEUsRUFBSSxTQUFTNUMsRUFBRzRDLEdBQ2I1QyxFQUFXLFFBQUk0QyxDQUNuQixHQUNJbU4sRUFBZ0IxUixNQUFRQSxLQUFLMFIsY0FBaUIsU0FBVUMsR0FDeEQsR0FBSUEsR0FBT0EsRUFBSUMsV0FBWSxPQUFPRCxFQUNsQyxJQUFJek8sRUFBUyxDQUFDLEVBQ2QsR0FBVyxNQUFQeU8sRUFBYSxJQUFLLElBQUlULEtBQUtTLEVBQWUsWUFBTlQsR0FBbUI5UixPQUFPUyxlQUFlQyxLQUFLNlIsRUFBS1QsSUFBSUksRUFBZ0JwTyxFQUFReU8sRUFBS1QsR0FFNUgsT0FEQU8sRUFBbUJ2TyxFQUFReU8sR0FDcEJ6TyxDQUNYLEVBQ0E5RCxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUFFdlAsT0FBTyxJQUN0RHVQLEVBQVFDLFVBQU8sRUFDZixJQUFJQyxFQUFVTCxFQUFhLEVBQVEsT0FDL0JNLEVBQVUsRUFBUSxNQUN0QkgsRUFBUUMsS0FBTyxTQUFVN0IsR0FDckIsSUFBSXZOLEVBQUl1UCxFQUNKQyxFQUFRSCxFQUFRSSxRQUFRQyxTQUFTQyxLQUFLcEMsRUFBTXFDLFVBQ2hELEdBQTRJLFdBQXZELFFBQS9FTCxFQUEyQixRQUFyQnZQLEVBQUt3UCxFQUFNcEwsWUFBeUIsSUFBUHBFLE9BQWdCLEVBQVNBLEVBQUcwRSxrQkFBK0IsSUFBUDZLLE9BQWdCLEVBQVNBLEVBQUdNLGVBQ3JILE1BQU0sSUFBSTlOLFVBQVUsNkVBRXhCLElBQUk3RCxFQUFVcVAsRUFBTXJQLFFBQVM0UixFQUFjdkMsRUFBTXVDLFlBQWFDLEVBQWV4QyxFQUFNd0MsYUFBY0MsRUFBaUJ6QyxFQUFNeUMsZUFBZ0JDLEVBQVMxQyxFQUFNMEMsT0FBUUMsRUFBUzNDLEVBQU0yQyxPQUFRQyxFQUFnQjVDLEVBQU00QyxjQUN4TUMsRUFBYVosRUFBTWpDLE1BQ25COEMsRUFBZWhCLEVBQVE5USxPQUFPLE1BQzlCK1IsRUFBaUJqQixFQUFROVEsT0FBTyxNQUNoQ2dTLEVBQVVsQixFQUFROVEsT0FBTyxNQUN6QnFLLEVBQUt5RyxFQUFRcFAsU0FBUyxJQUFLdVEsRUFBc0I1SCxFQUFHLEdBQUk2SCxFQUF5QjdILEVBQUcsR0FDcEY4SCxFQUFLckIsRUFBUXBQLFNBQVMsSUFBSzBRLEVBQU9ELEVBQUcsR0FBSUUsRUFBVUYsRUFBRyxHQUN0REcsRUFBS3hCLEVBQVFwUCxTQUFTLElBQUs2USxFQUFPRCxFQUFHLEdBQUlFLEVBQVVGLEVBQUcsR0FDdERHLEVBQUszQixFQUFRcFAsV0FBWWdSLEVBQVFELEVBQUcsR0FBSUUsRUFBV0YsRUFBRyxHQUN0REcsRUFBSzlCLEVBQVFwUCxXQUFZbVIsRUFBY0QsRUFBRyxHQUFJRSxFQUFpQkYsRUFBRyxHQUN0RTlCLEVBQVE3USxXQUFVLFdBQ2QsR0FBMEIsaUJBQWZOLEVBQVEsR0FBaUIsQ0FDaEMsSUFBSW9ULEVBQVloQyxFQUFRaUMsd0JBQXdCclQsR0FDNUNvVCxHQUNBRSxRQUFRQyxLQUFLLDZCQUFnQ0gsRUFBWSw2RkFFakUsQ0FDSixHQUFHLENBQUNwVCxJQUNKbVIsRUFBUTdRLFdBQVUsV0FDZCxJQUFJc1IsRUFBSixDQUdBLElBQUk0QixFQUFhckIsRUFBYTFSLFNBQVc2RSxPQUFPbU8saUJBQWlCdEIsRUFBYTFSLFNBQzlFK1MsR0FBY0UsRUFBVXRCLEVBQWdCQyxFQUFTbUIsRUFGakQsQ0FHSixJQUNBLElBaUJJRyxFQUFtQixTQUFVbEIsR0FDN0JDLEVBQVFELEdBQ1IsSUFDSUcsRUFEQUcsRUFuQk8sU0FBVU4sR0FDckIsR0FBS0EsR0FBaUIsS0FBVEEsRUFHYixNQUE0QixpQkFBaEJ6UyxFQUFRLEdBQ0ZBLEVBQ1Q0VCxRQUFPLFNBQVVDLEdBQUssT0FBT0EsRUFBRWxDLGdCQUFrQmMsRUFBS2QsZUFBaUJrQyxFQUFFbEMsY0FBY21DLFdBQVdyQixFQUFLZCxjQUFnQixJQUN2SDlLLE9BQU8sR0FJRTdHLEVBQ1Q0VCxRQUFPLFNBQVVDLEdBQUssT0FBT0EsRUFBRXZRLE1BQU1xTyxnQkFBa0JjLEVBQUtkLGVBQWlCa0MsRUFBRXZRLE1BQU1xTyxjQUFjbUMsV0FBV3JCLEVBQUtkLGNBQWdCLElBQ25JOUssTUFBSyxTQUFVM0IsRUFBR0MsR0FBSyxPQUFPaU0sRUFBUTJDLFFBQVE3TyxFQUFFNUIsTUFBTzZCLEVBQUU3QixNQUFRLElBQUcsRUFHakYsQ0FHZ0IwUSxDQUFTdkIsR0FNakJHLEVBSkNHLEVBR3FCLGlCQUFWQSxFQUNMQSxFQUFNa0IsTUFBTXhCLEVBQUs1VCxRQUdqQmtVLEVBQU16UCxNQUFNMlEsTUFBTXhCLEVBQUs1VCxRQU52QixHQVFYZ1UsRUFBUUQsR0FDUkksRUFBU0QsR0FDVGYsR0FBVUEsRUFBT2UsRUFDckIsRUFDSW1CLEVBQWUsV0FDZixHQUFhLEtBQVR0QixHQUFnQk0sRUFBcEIsQ0FHQSxJQUFJaUIsRUFBb0I3QixFQUFzQk0sRUFDOUNNLEVBQVl4VSxPQUFPZ0QsTUFBUXlTLEVBQzNCakMsRUFBV2tDLFVBQVlsQyxFQUFXa0MsU0FBU2xCLEdBQzNDUyxFQUFpQixJQUNqQjVCLEdBQVVBLEVBQU9nQixHQUNqQlIsRUFBdUI0QixFQU52QixDQU9KLEVBQ0lULEVBQVksU0FBVXRCLEVBQWdCQyxFQUFTbUIsR0FDL0MsSUFBSTFSLEVBQUl1UCxHQUM4RixRQUFqR3ZQLEVBQUtzUSxhQUF1RCxFQUFTQSxFQUFlM1IsZUFBNEIsSUFBUHFCLE9BQWdCLEVBQVNBLEVBQUd1UyxTQUN0SWpDLEVBQWUzUixRQUFRNFQsTUFBTUMsV0FBYWQsRUFBV2MsV0FDckRsQyxFQUFlM1IsUUFBUTRULE1BQU1FLFNBQVdmLEVBQVdlLFNBQ25EbkMsRUFBZTNSLFFBQVE0VCxNQUFNRyxNQUFRaEIsRUFBV2dCLE1BQ2hEcEMsRUFBZTNSLFFBQVE0VCxNQUFNSSxPQUFTakIsRUFBV2lCLE9BQ2pEckMsRUFBZTNSLFFBQVE0VCxNQUFNSyxXQUFhbEIsRUFBV2tCLFdBQ3JEdEMsRUFBZTNSLFFBQVE0VCxNQUFNTSxVQUFZbkIsRUFBV21CLFVBQ3BEdkMsRUFBZTNSLFFBQVE0VCxNQUFNTyxPQUFTeEQsRUFBUXlELGlCQUFpQnJCLEVBQVksVUFDM0VwQixFQUFlM1IsUUFBUTRULE1BQU1TLFFBQVUxRCxFQUFReUQsaUJBQWlCckIsRUFBWSxXQUM1RXBCLEVBQWUzUixRQUFRNFQsTUFBTVUsWUFBYzNELEVBQVF5RCxpQkFBaUJyQixFQUFZLFNBQVUsU0FDMUZwQixFQUFlM1IsUUFBUTRULE1BQU1XLFlBQWM1RCxFQUFReUQsaUJBQWlCckIsRUFBWSxTQUFVLFdBRWIsUUFBNUVuQyxFQUFLZ0IsYUFBeUMsRUFBU0EsRUFBUTVSLGVBQTRCLElBQVA0USxPQUFnQixFQUFTQSxFQUFHZ0QsU0FDakhoQyxFQUFRNVIsUUFBUTRULE1BQU1DLFdBQWFkLEVBQVdjLFdBQzlDakMsRUFBUTVSLFFBQVE0VCxNQUFNRSxTQUFXZixFQUFXZSxTQUM1Q2xDLEVBQVE1UixRQUFRNFQsTUFBTUssV0FBYWxCLEVBQVdrQixXQUV0RCxFQWdFSU8sRUFBVzlELEVBQVErRCxhQUFhNUQsR0FBT2xSLElBQ3ZDK1UsRUFBWWhFLEVBQVErRCxhQUFhNUQsRUFBT2YsRUFBU0EsRUFBUyxDQUFDLEVBQUcyQixHQUFhLENBQUVrQyxTQWhFbEUsU0FBVS9TLEdBQ3JCOFIsRUFBZTlSLEdBQ2ZBLEVBQUUrVCxVQUNGN0MsRUFBdUJsUixFQUFFM0MsT0FBT2dELE9BQ2hDLElBQUkyVCxFQUFnQnBELEVBQWdCQSxFQUFjNVEsRUFBRTNDLE9BQU9nRCxPQUFTTCxFQUFFM0MsT0FBT2dELE1BQzdFaVMsRUFBaUIwQixHQUNqQm5ELEVBQVdrQyxVQUFZbEMsRUFBV2tDLFNBQVMvUyxFQUMvQyxFQTBESWlVLE9BckRTLFNBQVVqVSxJQUVkZ1IsYUFBeUMsRUFBU0EsRUFBUTVSLFdBQWFZLEVBQUVrVSxnQkFDMUU1QixFQUFpQixJQUNqQnpCLEVBQVdvRCxRQUFVcEQsRUFBV29ELE9BQU9qVSxHQUUvQyxFQWdESW1VLFFBMURVLFNBQVVuVSxHQUNwQnNTLEVBQWlCdFMsRUFBRTNDLE9BQU9nRCxPQUMxQndRLEVBQVdzRCxTQUFXdEQsRUFBV3NELFFBQVFuVSxFQUM3QyxFQXdESW9VLFVBN0NZLFNBQVVwVSxHQUN0QixJQUFJcVUsRUFJMkQsT0FBakNyVSxFQUFFc1UsY0FBY0MsY0FDSXZVLEVBQUVzVSxjQUFjQyxlQUFpQnZVLEVBQUVzVSxjQUFjalUsTUFBTTdDLE9BR3JHNlcsR0FaUyxlQVlXclUsRUFBRXRDLElBQ3RCbVYsS0FFS3dCLEdBQW9CN0QsR0FkdkIsUUFjdUN4USxFQUFFdEMsS0FBd0IsS0FBVDZULEdBSXJEOEMsR0FBb0I1RCxHQWpCckIsVUFpQnVDelEsRUFBRXRDLEtBQTBCLEtBQVQ2VCxLQUg5RHZSLEVBQUV3VSxpQkFDRjNCLEtBTUpoQyxFQUFXdUQsV0FBYXZELEVBQVd1RCxVQUFVcFUsRUFDakQsRUF3QjBCakIsSUFBSzZVLEdBQWtDLGlCQUFmLEVBQ3hDN0QsRUFBUTBFLFVBQVViLEVBQVU5QyxHQUM1QkEsS0FDVixPQUFRaEIsRUFBUUksUUFBUXZCLGNBQWMsTUFBTyxDQUFFK0YsVUFBVyxvQkFBcUIxQixNQUFPLENBQzlFMkIsU0FBVSxhQUNUcEUsRUFDSE4sRUFDQ0gsRUFBUUksUUFBUXZCLGNBQWNtQixFQUFRSSxRQUFRMEUsU0FBVSxLQUN2RGQsRUFDQWhFLEVBQVFJLFFBQVF2QixjQUFjLE9BQVEsQ0FBRStGLFVBQVcsbUJBQW9CM1YsSUFBS2dTLEVBQWdCaUMsTUFBTyxDQUMzRjZCLFFBQVMsT0FDVEMsY0FBZSxPQUNmQyxnQkFBaUIsY0FDakJDLFlBQWEsY0FDYkMsVUFBVyxPQUNYQyxNQUFPLHNCQUNQUCxTQUFVLFdBQ1ZRLElBQUssRUFDTEMsS0FBTSxJQUVWdEYsRUFBUUksUUFBUXZCLGNBQWMsT0FBUSxDQUFFK0YsVUFBVyxrQkFBbUIxQixNQUFPLENBQ3JFcUMsV0FBWSxTQUNaUCxjQUFlLE9BQ2ZRLFdBQVksUUFDWGxFLEdBQ1R0QixFQUFRSSxRQUFRdkIsY0FBYyxRQUFTLENBQUUrRixVQUFXLFdBQVkzVixJQUFLaVMsRUFBU3VFLFFBaER4RSxTQUFVdlYsR0FDeEIsSUFBSVMsRUFDQStVLEVBQW9CeFYsRUFBRXNVLGNBQWNDLGNBQWdCLEVBRzlCLElBQXRCaUIsRUFJRWpFLEdBQWlCLEtBQVRBLElBQ1ZzQixJQUNBckksWUFBVyxXQUNQLElBQUkvSixFQUFJdVAsRUFDd0IsUUFBL0J2UCxFQUFLcVEsRUFBYTFSLGVBQTRCLElBQVBxQixHQUF5QkEsRUFBR2dWLFFBQ3BFLElBQUlDLEVBQWdCdEUsRUFBSzVULE9BQVNnWSxFQUNGLFFBQS9CeEYsRUFBS2MsRUFBYTFSLGVBQTRCLElBQVA0USxHQUF5QkEsRUFBRzJGLGtCQUFrQkQsRUFBZUEsRUFDekcsR0FBRyxJQVY2QixRQUEvQmpWLEVBQUtxUSxFQUFhMVIsZUFBNEIsSUFBUHFCLEdBQXlCQSxFQUFHZ1YsT0FZNUUsRUE4QmdIekMsTUFBTyxDQUNuRzhCLGNBQWdCdkQsR0FBaUIsS0FBVEEsRUFBdUIsVUFBVCxPQUN0Q3FFLFdBQVksY0FDWnpDLE1BQU8sT0FDUDBDLFFBQVMsT0FDVEMsT0FBUSxPQUNSYixVQUFXLE9BQ1h4QixRQUFTLEVBQ1RGLE9BQVEsRUFDUjJCLE1BQU8sc0JBQ1BhLFdBQVksZUFDYkMsYUFBY3pFLEVBQU0wRSxVQUFXLE1BQ3RELDZCQzFPQTlZLE9BQU80USxlQUFlNkIsRUFBUyxhQUFjLENBQUV2UCxPQUFPLElBQ3REdVAsRUFBUW9DLHdCQUEwQnBDLEVBQVE4QyxRQUFVOUMsRUFBUTRELGlCQUFtQjVELEVBQVE2RSxlQUFZLEVBbUJuRzdFLEVBQVE2RSxVQWxCUixXQUVJLElBREEsSUFBSXlCLEVBQU8sR0FDRkMsRUFBSyxFQUFHQSxFQUFLNVksVUFBVUMsT0FBUTJZLElBQ3BDRCxFQUFLQyxHQUFNNVksVUFBVTRZLEdBRXpCLElBQUlDLEVBQWVGLEVBQUszRCxPQUFPOEQsU0FDL0IsT0FBTyxTQUFVQyxHQUNiLElBQUssSUFBSUgsRUFBSyxFQUFHSSxFQUFpQkgsRUFBY0QsRUFBS0ksRUFBZS9ZLE9BQVEyWSxJQUFNLENBQzlFLElBQUlwWCxFQUFNd1gsRUFBZUosR0FDTixtQkFBUnBYLEVBQ1BBLEVBQUl1WCxHQUVDdlgsSUFDTEEsRUFBSUssUUFBVWtYLEVBRXRCLENBQ0osQ0FDSixFQWdCQTFHLEVBQVE0RCxpQkFYUixTQUEwQmdELEVBQVFDLEVBQU1DLEdBTXBDLFlBTGdCLElBQVpBLElBQXNCQSxFQUFVLElBRWhDQSxJQUNBQSxFQUFVQSxFQUFRQyxRQUFRRCxFQUFRLEdBQUlBLEVBQVEsR0FBR0UsZ0JBRTlDLENBQUMsTUFBTyxRQUFTLFNBQVUsUUFFN0JsTyxLQUFJLFNBQVVtTyxHQUFPLE9BQU9MLEVBQU9DLEVBQU9JLEVBQU1ILEVBQVUsSUFDMURJLEtBQUssSUFDZCxFQVdBbEgsRUFBUThDLFFBVFIsU0FBaUI3TyxFQUFHQyxHQUNoQixPQUFJRCxFQUFJQyxFQUNHLEVBRVBELEVBQUlDLEdBQ0ksRUFFTCxDQUNYLEVBWUE4TCxFQUFRb0Msd0JBVlIsU0FBaUMrRSxHQUU3QixJQURBLElBQUlDLEVBQVUsQ0FBQyxFQUNOMVosRUFBSSxFQUFHQSxFQUFJeVosRUFBTXZaLE9BQVFGLElBQUssQ0FDbkMsR0FBSTBaLEVBQVFELEVBQU16WixHQUFHMkUsT0FDakIsT0FBTzhVLEVBQU16WixHQUFHMkUsTUFFcEIrVSxFQUFRRCxFQUFNelosR0FBRzJFLFFBQVMsQ0FDOUIsQ0FDQSxPQUFPLElBQ1gsK0dDL0NBLElBQUlnVixFQUE0QixvQkFBZHRRLFdBQTRCQSxVQUFVdVEsVUFBVTVHLGNBQWM1UixRQUFRLFdBQWEsRUFFckcsU0FBU3lZLEVBQVNDLEVBQVFqWSxFQUFPa1ksRUFBUUMsR0FDbkNGLEVBQU83WCxpQkFDVDZYLEVBQU83WCxpQkFBaUJKLEVBQU9rWSxFQUFRQyxHQUM5QkYsRUFBT0csYUFDaEJILEVBQU9HLFlBQVksS0FBS3pLLE9BQU8zTixJQUFRLFdBQ3JDa1ksRUFBT3BULE9BQU85RSxNQUNoQixHQUVKLENBR0EsU0FBU3FZLEVBQVFDLEVBQVUvWixHQUd6QixJQUZBLElBQUlnYSxFQUFPaGEsRUFBSWtWLE1BQU0sRUFBR2xWLEVBQUlGLE9BQVMsR0FFNUJGLEVBQUksRUFBR0EsRUFBSW9hLEVBQUtsYSxPQUFRRixJQUMvQm9hLEVBQUtwYSxHQUFLbWEsRUFBU0MsRUFBS3BhLEdBQUdnVCxlQUc3QixPQUFPb0gsQ0FDVCxDQUdBLFNBQVNDLEVBQVFqYSxHQUNJLGlCQUFSQSxJQUFrQkEsRUFBTSxJQU9uQyxJQUpBLElBQUllLEdBRkpmLEVBQU1BLEVBQUlpWixRQUFRLE1BQU8sS0FFVmlCLE1BQU0sS0FFakI1UyxFQUFRdkcsRUFBS29aLFlBQVksSUFFdEI3UyxHQUFTLEdBQ2R2RyxFQUFLdUcsRUFBUSxJQUFNLElBQ25CdkcsRUFBSzBMLE9BQU9uRixFQUFPLEdBQ25CQSxFQUFRdkcsRUFBS29aLFlBQVksSUFHM0IsT0FBT3BaLENBQ1QsQ0FzR0EsSUF2RkEsSUFBSXFaLEVBQVUsQ0FDWkMsVUFBVyxFQUNYQyxJQUFLLEVBQ0xDLE1BQU8sR0FDUEMsTUFBTyxHQUNQQyxPQUFRLEdBQ1JDLElBQUssR0FDTEMsT0FBUSxHQUNSQyxNQUFPLEdBQ1BsRCxLQUFNLEdBQ05tRCxHQUFJLEdBQ0pDLE1BQU8sR0FDUEMsS0FBTSxHQUNOQyxJQUFLLEdBQ0xoTyxPQUFRLEdBQ1JpTyxJQUFLLEdBQ0xDLE9BQVEsR0FDUkMsS0FBTSxHQUNOQyxJQUFLLEdBQ0xDLE9BQVEsR0FDUkMsU0FBVSxHQUNWQyxTQUFVLEdBQ1ZDLE1BQU8sR0FDUEMsTUFBTyxHQUNQQyxNQUFPLEdBQ1BDLE1BQU8sR0FDUEMsTUFBTyxJQUNQQyxNQUFPLElBQ1BDLE1BQU8sSUFDUEMsTUFBTyxJQUNQQyxNQUFPLElBQ1BDLE1BQU8sSUFDUEMsYUFBYyxJQUNkQyxRQUFTLElBQ1RDLFVBQVcsSUFDWEMsYUFBYyxJQUNkQyxZQUFhLElBQ2JDLFdBQVksSUFDWixJQUFLLEdBQ0wsSUFBSyxJQUNMLElBQUssSUFDTCxJQUFLLElBQ0wsSUFBSyxJQUNMLElBQUtoRCxFQUFPLElBQU0sSUFDbEIsSUFBS0EsRUFBTyxHQUFLLElBQ2pCLElBQUtBLEVBQU8sR0FBSyxJQUNqQixJQUFNLElBQ04sSUFBSyxJQUNMLElBQUssSUFDTCxLQUFNLEtBR0ppRCxFQUFZLENBRWQsSUFBSyxHQUNMQyxNQUFPLEdBRVAsSUFBSyxHQUNMQyxJQUFLLEdBQ0xDLE9BQVEsR0FFUixJQUFLLEdBQ0xDLEtBQU0sR0FDTkMsUUFBUyxHQUVULElBQUssR0FDTEMsSUFBSyxHQUNMQyxRQUFTLElBRVBDLEVBQWMsQ0FDaEIsR0FBSSxXQUNKLEdBQUksU0FDSixHQUFJLFVBQ0osR0FBSSxVQUNKQyxTQUFVLEdBQ1ZDLFFBQVMsR0FDVEMsT0FBUSxHQUNSQyxRQUFTLElBRVBDLEVBQVEsQ0FDVixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEdBRUZDLEVBQVksQ0FBQyxFQUVSL0wsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ3RCNkksRUFBUSxJQUFJaEwsT0FBT21DLElBQU0sSUFBTUEsRUFHakMsSUFBSWdNLEVBQVksR0FFWkMsR0FBa0IsRUFFbEJDLEVBQVMsTUFFVEMsRUFBc0IsR0FHdEJDLEVBQU8sU0FBYzdJLEdBQ3ZCLE9BQU9zRixFQUFRdEYsRUFBRWxDLGdCQUFrQjRKLEVBQVUxSCxFQUFFbEMsZ0JBQWtCa0MsRUFBRW9FLGNBQWMwRSxXQUFXLEVBQzlGLEVBR0EsU0FBU0MsRUFBU0MsR0FDaEJMLEVBQVNLLEdBQVMsS0FDcEIsQ0FHQSxTQUFTQyxJQUNQLE9BQU9OLEdBQVUsS0FDbkIsQ0FzSEEsSUFBSU8sRUFBYSxTQUFvQkMsR0FDbkMsSUFBSWplLEVBQU1pZSxFQUFLamUsSUFDWDhkLEVBQVFHLEVBQUtILE1BQ2JuRSxFQUFTc0UsRUFBS3RFLE9BQ2R1RSxFQUFnQkQsRUFBS0UsU0FDckJBLE9BQTZCLElBQWxCRCxFQUEyQixJQUFNQSxFQUM3QmpFLEVBQVFqYSxHQUNkb2UsU0FBUSxTQUFVQyxHQUM3QixJQUFJQyxFQUFhRCxFQUFVbkUsTUFBTWlFLEdBQzdCSSxFQUFNRCxFQUFXeGUsT0FDakIwZSxFQUFVRixFQUFXQyxFQUFNLEdBQzNCRSxFQUFzQixNQUFaRCxFQUFrQixJQUFNYixFQUFLYSxHQUMzQyxHQUFLbEIsRUFBVW1CLEdBQWYsQ0FFS1gsSUFBT0EsRUFBUUMsS0FDcEIsSUFBSS9ELEVBQU91RSxFQUFNLEVBQUl6RSxFQUFRMEMsRUFBVzhCLEdBQWMsR0FDdERoQixFQUFVbUIsR0FBV25CLEVBQVVtQixHQUFTNUosUUFBTyxTQUFVNkosR0FHdkQsVUFEdUIvRSxHQUFTK0UsRUFBTy9FLFNBQVdBLElBQ3JCK0UsRUFBT1osUUFBVUEsR0FyUXBELFNBQXNCYSxFQUFJQyxHQUt4QixJQUpBLElBQUlDLEVBQU9GLEVBQUc3ZSxRQUFVOGUsRUFBRzllLE9BQVM2ZSxFQUFLQyxFQUNyQ0UsRUFBT0gsRUFBRzdlLFFBQVU4ZSxFQUFHOWUsT0FBUzhlLEVBQUtELEVBQ3JDSSxHQUFVLEVBRUxuZixFQUFJLEVBQUdBLEVBQUlpZixFQUFLL2UsT0FBUUYsS0FDQSxJQUEzQmtmLEVBQUs5ZCxRQUFRNmQsRUFBS2pmLE1BQVltZixHQUFVLEdBRzlDLE9BQU9BLENBQ1QsQ0EyUDZEQyxDQUFhTixFQUFPMUUsS0FBTUEsR0FDbkYsR0FSK0IsQ0FTakMsR0FDRixFQUdBLFNBQVNpRixFQUFheGQsRUFBT3lkLEVBQVNwQixFQUFPcUIsR0FLM0MsSUFBSUMsRUFKSixHQUFJRixFQUFRQyxVQUFZQSxJQU1wQkQsRUFBUXBCLFFBQVVBLEdBQTJCLFFBQWxCb0IsRUFBUXBCLE9BQWlCLENBSXRELElBQUssSUFBSTNaLEtBRlRpYixFQUFpQkYsRUFBUWxGLEtBQUtsYSxPQUFTLEVBRXpCdWQsRUFDUjVkLE9BQU9RLFVBQVVDLGVBQWVDLEtBQUtrZCxFQUFPbFosTUFDekNrWixFQUFNbFosSUFBTSthLEVBQVFsRixLQUFLaFosU0FBU21ELElBQU0sR0FBS2taLEVBQU1sWixLQUFvQyxJQUE5QithLEVBQVFsRixLQUFLaFosU0FBU21ELE1BQ2xGaWIsR0FBaUIsSUFNSyxJQUF4QkYsRUFBUWxGLEtBQUtsYSxRQUFpQnVkLEVBQU0sS0FBUUEsRUFBTSxLQUFRQSxFQUFNLEtBQVFBLEVBQU0sT0FBTytCLEdBQXVDLE1BQXJCRixFQUFRRyxXQUMxRSxJQUFuQ0gsRUFBUXZGLE9BQU9sWSxFQUFPeWQsS0FDcEJ6ZCxFQUFNcVYsZUFBZ0JyVixFQUFNcVYsaUJBQXNCclYsRUFBTTZkLGFBQWMsRUFDdEU3ZCxFQUFNOGQsaUJBQWlCOWQsRUFBTThkLGtCQUM3QjlkLEVBQU0rZCxlQUFjL2QsRUFBTStkLGNBQWUsR0FHbkQsQ0FDRixDQUdBLFNBQVM5YixFQUFTakMsRUFBTzBkLEdBQ3ZCLElBQUlNLEVBQVduQyxFQUFVLEtBQ3JCdGQsRUFBTXlCLEVBQU1nZCxTQUFXaGQsRUFBTWllLE9BQVNqZSxFQUFNa2UsU0FFaEQsR0FBS0MsRUFBUS9LLE9BQU8xVSxLQUFLRSxLQUFNb0IsR0FBL0IsQ0FzQ0EsR0FuQ1ksS0FBUnpCLEdBQXNCLE1BQVJBLElBQWFBLEVBQU0sS0FRTCxJQUE1QnVkLEVBQVV2YyxRQUFRaEIsSUFBdUIsTUFBUkEsR0FBYXVkLEVBQVU3YSxLQUFLMUMsR0FNakUsQ0FBQyxVQUFXLFNBQVUsV0FBWSxXQUFXb2UsU0FBUSxTQUFVeUIsR0FDN0QsSUFBSUMsRUFBUzlDLEVBQVk2QyxHQUVyQnBlLEVBQU1vZSxLQUEyQyxJQUEvQnRDLEVBQVV2YyxRQUFROGUsR0FDdEN2QyxFQUFVN2EsS0FBS29kLElBQ0xyZSxFQUFNb2UsSUFBWXRDLEVBQVV2YyxRQUFROGUsSUFBVyxFQUN6RHZDLEVBQVU5USxPQUFPOFEsRUFBVXZjLFFBQVE4ZSxHQUFTLEdBQ3ZCLFlBQVpELEdBQXlCcGUsRUFBTW9lLElBQWlDLElBQXJCdEMsRUFBVXpkLFNBS3hEMkIsRUFBTXliLFNBQVd6YixFQUFNd2IsVUFBWXhiLEVBQU0wYixTQUM3Q0ksRUFBWUEsRUFBVXJJLE1BQU1xSSxFQUFVdmMsUUFBUThlLEtBR3BELElBS0k5ZixLQUFPcWQsRUFBTyxDQUdoQixJQUFLLElBQUk5TCxLQUZUOEwsRUFBTXJkLElBQU8sRUFFQ3djLEVBQ1JBLEVBQVVqTCxLQUFPdlIsSUFBSzRmLEVBQVFyTyxJQUFLLEdBR3pDLElBQUtrTyxFQUFVLE1BQ2pCLENBR0EsSUFBSyxJQUFJbmQsS0FBSythLEVBQ1I1ZCxPQUFPUSxVQUFVQyxlQUFlQyxLQUFLa2QsRUFBTy9hLEtBQzlDK2EsRUFBTS9hLEdBQUtiLEVBQU11YixFQUFZMWEsS0FXN0JiLEVBQU1zZSxvQkFBc0J0ZSxFQUFNMGIsUUFBVzFiLEVBQU15YixVQUFZemIsRUFBTXNlLGlCQUFpQixlQUN6RCxJQUEzQnhDLEVBQVV2YyxRQUFRLEtBQ3BCdWMsRUFBVTdhLEtBQUssS0FHYyxJQUEzQjZhLEVBQVV2YyxRQUFRLEtBQ3BCdWMsRUFBVTdhLEtBQUssSUFHakIyYSxFQUFNLEtBQU0sRUFDWkEsRUFBTSxLQUFNLEdBSWQsSUFBSVMsRUFBUUMsSUFFWixHQUFJMEIsRUFDRixJQUFLLElBQUk3ZixFQUFJLEVBQUdBLEVBQUk2ZixFQUFTM2YsT0FBUUYsSUFDL0I2ZixFQUFTN2YsR0FBR2tlLFFBQVVBLElBQXlCLFlBQWZyYyxFQUFNMEYsTUFBc0JzWSxFQUFTN2YsR0FBR29nQixTQUEwQixVQUFmdmUsRUFBTTBGLE1BQW9Cc1ksRUFBUzdmLEdBQUdxZ0IsUUFDM0hoQixFQUFheGQsRUFBT2dlLEVBQVM3ZixHQUFJa2UsRUFBT3FCLEdBTTlDLEdBQU1uZixLQUFPc2QsRUFFYixJQUFLLElBQUk3RSxFQUFLLEVBQUdBLEVBQUs2RSxFQUFVdGQsR0FBS0YsT0FBUTJZLElBQzNDLElBQW1CLFlBQWZoWCxFQUFNMEYsTUFBc0JtVyxFQUFVdGQsR0FBS3lZLEdBQUl1SCxTQUEwQixVQUFmdmUsRUFBTTBGLE1BQW9CbVcsRUFBVXRkLEdBQUt5WSxHQUFJd0gsUUFDckczQyxFQUFVdGQsR0FBS3lZLEdBQUl6WSxJQUFLLENBTTFCLElBTEEsSUFBSTBlLEVBQVNwQixFQUFVdGQsR0FBS3lZLEdBQ3hCMEYsRUFBV08sRUFBT1AsU0FDbEIrQixFQUFjeEIsRUFBTzFlLElBQUlrYSxNQUFNaUUsR0FDL0JnQyxFQUFtQixHQUVkaGEsRUFBSSxFQUFHQSxFQUFJK1osRUFBWXBnQixPQUFRcUcsSUFDdENnYSxFQUFpQnpkLEtBQUtpYixFQUFLdUMsRUFBWS9aLEtBR3JDZ2EsRUFBaUJyWSxPQUFPc1IsS0FBSyxNQUFRbUUsRUFBVXpWLE9BQU9zUixLQUFLLEtBRTdENkYsRUFBYXhkLEVBQU9pZCxFQUFRWixFQUFPcUIsRUFFdkMsQ0F6R3lDLENBNEcvQyxDQU9BLFNBQVNTLEVBQVE1ZixFQUFLMmMsRUFBUWhELEdBQzVCNEQsRUFBWSxHQUNaLElBQUl4YyxFQUFPa1osRUFBUWphLEdBRWZnYSxFQUFPLEdBQ1A4RCxFQUFRLE1BRVJxQixFQUFVdmQsU0FFVmhDLEVBQUksRUFDSnFnQixHQUFRLEVBQ1JELEdBQVUsRUFDVjdCLEVBQVcsSUFDWGpkLEdBQVUsRUFzQmQsU0FwQmVnQyxJQUFYeVcsR0FBMEMsbUJBQVhnRCxJQUNqQ2hELEVBQVNnRCxHQUdvQyxvQkFBM0NsZCxPQUFPUSxVQUFVd0gsU0FBU3RILEtBQUt3YyxLQUM3QkEsRUFBT21CLFFBQU9BLEVBQVFuQixFQUFPbUIsT0FFN0JuQixFQUFPd0MsVUFBU0EsRUFBVXhDLEVBQU93QyxTQUVqQ3hDLEVBQU9zRCxRQUFPQSxFQUFRdEQsRUFBT3NELFlBRVYvYyxJQUFuQnlaLEVBQU9xRCxVQUF1QkEsRUFBVXJELEVBQU9xRCxjQUU1QjljLElBQW5CeVosRUFBT3piLFVBQXVCQSxFQUFVeWIsRUFBT3piLFNBRXBCLGlCQUFwQnliLEVBQU93QixXQUF1QkEsRUFBV3hCLEVBQU93QixXQUd2QyxpQkFBWHhCLElBQXFCbUIsRUFBUW5CLEdBRWpDL2MsRUFBSW1CLEVBQUtqQixPQUFRRixJQUd0Qm9hLEVBQU8sSUFGUGhhLEVBQU1lLEVBQUtuQixHQUFHc2EsTUFBTWlFLElBSVpyZSxPQUFTLElBQUdrYSxFQUFPRixFQUFRMEMsRUFBV3hjLEtBRzlDQSxFQUFjLE9BRGRBLEVBQU1BLEVBQUlBLEVBQUlGLE9BQVMsSUFDSCxJQUFNNmQsRUFBSzNkLE1BR2xCc2QsSUFBWUEsRUFBVXRkLEdBQU8sSUFFMUNzZCxFQUFVdGQsR0FBSzBDLEtBQUssQ0FDbEJ1ZCxNQUFPQSxFQUNQRCxRQUFTQSxFQUNUbEMsTUFBT0EsRUFDUDlELEtBQU1BLEVBQ05xRixTQUFVdGUsRUFBS25CLEdBQ2YrWixPQUFRQSxFQUNSM1osSUFBS2UsRUFBS25CLEdBQ1Z1ZSxTQUFVQSxFQUNWZ0IsUUFBU0EsU0FLVSxJQUFaQSxJQWxFYixTQUF1QkEsR0FDckIsT0FBT3pCLEVBQW9CMWMsUUFBUW1lLElBQVksQ0FDakQsQ0FnRXlDaUIsQ0FBY2pCLElBQVk1WSxTQUMvRG1YLEVBQW9CaGIsS0FBS3ljLEdBQ3pCMUYsRUFBUzBGLEVBQVMsV0FBVyxTQUFVN2MsR0FDckNvQixFQUFTcEIsRUFBRzZjLEVBQ2QsR0FBR2plLEdBRUVzYyxJQUNIQSxHQUFrQixFQUNsQi9ELEVBQVNsVCxPQUFRLFNBQVMsV0FDeEJnWCxFQUFZLEVBQ2QsR0FBR3JjLElBR0x1WSxFQUFTMEYsRUFBUyxTQUFTLFNBQVU3YyxHQUNuQ29CLEVBQVNwQixFQUFHNmMsR0E3VGxCLFNBQXVCMWQsR0FDckIsSUFBSXpCLEVBQU15QixFQUFNZ2QsU0FBV2hkLEVBQU1pZSxPQUFTamUsRUFBTWtlLFNBRTVDL2YsRUFBSTJkLEVBQVV2YyxRQUFRaEIsR0FlMUIsR0FaSUosR0FBSyxHQUNQMmQsRUFBVTlRLE9BQU83TSxFQUFHLEdBSWxCNkIsRUFBTXpCLEtBQW1DLFNBQTVCeUIsRUFBTXpCLElBQUk0UyxlQUN6QjJLLEVBQVU5USxPQUFPLEVBQUc4USxFQUFVemQsUUFJcEIsS0FBUkUsR0FBc0IsTUFBUkEsSUFBYUEsRUFBTSxJQUVqQ0EsS0FBT3FkLEVBR1QsSUFBSyxJQUFJOUwsS0FGVDhMLEVBQU1yZCxJQUFPLEVBRUN3YyxFQUNSQSxFQUFVakwsS0FBT3ZSLElBQUs0ZixFQUFRck8sSUFBSyxFQUc3QyxDQXFTTThPLENBQWMvZCxFQUNoQixHQUFHcEIsR0FFUCxDQWVBLElBQUlvZixFQUFPLENBQ1R6QyxTQUFVQSxFQUNWRSxTQUFVQSxFQUNWd0MsWUF4V0YsU0FBcUJ6QyxFQUFPMEMsR0FDMUIsSUFBSUMsRUFDQTdnQixFQUlKLElBQUssSUFBSUksS0FGSjhkLElBQU9BLEVBQVFDLEtBRUpULEVBQ2QsR0FBSTdkLE9BQU9RLFVBQVVDLGVBQWVDLEtBQUttZCxFQUFXdGQsR0FHbEQsSUFGQXlnQixFQUFXbkQsRUFBVXRkLEdBRWhCSixFQUFJLEVBQUdBLEVBQUk2Z0IsRUFBUzNnQixRQUNuQjJnQixFQUFTN2dCLEdBQUdrZSxRQUFVQSxFQUFPMkMsRUFBU2hVLE9BQU83TSxFQUFHLEdBQVFBLElBTTlEbWUsTUFBZUQsR0FBT0QsRUFBUzJDLEdBQVksTUFDakQsRUF1VkVFLG1CQXJZRixXQUNFLE9BQU9uRCxFQUFVckksTUFBTSxFQUN6QixFQW9ZRXlMLFVBblhGLFNBQW1CbEMsR0FLakIsTUFKdUIsaUJBQVpBLElBQ1RBLEVBQVVkLEVBQUtjLEtBR3NCLElBQWhDbEIsRUFBVXZjLFFBQVF5ZCxFQUMzQixFQThXRTVKLE9BallGLFNBQWdCcFQsR0FDZCxJQUFJOUIsRUFBUzhCLEVBQU05QixRQUFVOEIsRUFBTW1mLFdBQy9CQyxFQUFVbGhCLEVBQU9raEIsUUFDakJDLEdBQU8sRUFNWCxPQUpJbmhCLEVBQU9vaEIsb0JBQWtDLFVBQVpGLEdBQW1DLGFBQVpBLEdBQXNDLFdBQVpBLEdBQTBCbGhCLEVBQU9xaEIsWUFDakhGLEdBQU8sR0FHRkEsQ0FDVCxFQXdYRUcsUUFwQkYsU0FBaUI1QixHQUNmLElBQUl2QixFQUFRamUsVUFBVUMsT0FBUyxRQUFzQm9ELElBQWpCckQsVUFBVSxHQUFtQkEsVUFBVSxHQUFLLE1BQ2hGSixPQUFPc0IsS0FBS3VjLEdBQVdjLFNBQVEsU0FBVXBlLEdBQ3ZDLElBQUlpRCxFQUFPcWEsRUFBVXRkLEdBQUtraEIsTUFBSyxTQUFVQyxHQUN2QyxPQUFPQSxFQUFLckQsUUFBVUEsR0FBU3FELEVBQUs5QixXQUFhQSxDQUNuRCxJQUVJcGMsR0FBUUEsRUFBSzBXLFFBQ2YxVyxFQUFLMFcsUUFFVCxHQUNGLEVBVUV5SCxPQTdURixTQUFnQkMsR0FFZCxRQUF3QixJQUFiQSxFQUNUNWhCLE9BQU9zQixLQUFLdWMsR0FBV2MsU0FBUSxTQUFVcGUsR0FDdkMsY0FBY3NkLEVBQVV0ZCxFQUMxQixTQUNLLEdBQUk2SCxNQUFNNEIsUUFBUTRYLEdBRXZCQSxFQUFTakQsU0FBUSxTQUFVdlgsR0FDckJBLEVBQUs3RyxLQUFLZ2UsRUFBV25YLEVBQzNCLFNBQ0ssR0FBd0IsaUJBQWJ3YSxFQUVaQSxFQUFTcmhCLEtBQUtnZSxFQUFXcUQsUUFDeEIsR0FBd0IsaUJBQWJBLEVBQXVCLENBQ3ZDLElBQUssSUFBSUMsRUFBT3poQixVQUFVQyxPQUFRMEosRUFBTyxJQUFJM0IsTUFBTXlaLEVBQU8sRUFBSUEsRUFBTyxFQUFJLEdBQUl0WCxFQUFPLEVBQUdBLEVBQU9zWCxFQUFNdFgsSUFDbEdSLEVBQUtRLEVBQU8sR0FBS25LLFVBQVVtSyxHQUs3QixJQUFJOFQsRUFBUXRVLEVBQUssR0FDYm1RLEVBQVNuUSxFQUFLLEdBRUcsbUJBQVZzVSxJQUNUbkUsRUFBU21FLEVBQ1RBLEVBQVEsSUFHVkUsRUFBVyxDQUNUaGUsSUFBS3FoQixFQUNMdkQsTUFBT0EsRUFDUG5FLE9BQVFBLEVBQ1J3RSxTQUFVLEtBRWQsQ0FDRixFQTBSRW9ELE9BQVFuSCxFQUNSTCxTQUFVeUMsRUFDVlEsWUFBYUEsR0FHZixJQUFLLElBQUk3VyxLQUFLbWEsRUFDUjdnQixPQUFPUSxVQUFVQyxlQUFlQyxLQUFLbWdCLEVBQU1uYSxLQUM3Q3laLEVBQVF6WixHQUFLbWEsRUFBS25hLElBSXRCLEdBQXNCLG9CQUFYSSxPQUF3QixDQUNqQyxJQUFJaWIsRUFBV2piLE9BQU9xWixRQUV0QkEsRUFBUTZCLFdBQWEsU0FBVUMsR0FLN0IsT0FKSUEsR0FBUW5iLE9BQU9xWixVQUFZQSxJQUM3QnJaLE9BQU9xWixRQUFVNEIsR0FHWjVCLENBQ1QsRUFFQXJaLE9BQU9xWixRQUFVQSxDQUNuQixlQzVrQkEsU0FBUytCLElBQ1AsT0FBTy9CLEVBQVFlLFNBQ2pCLENBRUFmLEVBQVEvSyxPQUFTLFdBQ2YsT0FBTyxDQUNULEVBRUEsSUFBSStNLEVBQVksU0FBbUIzRCxFQUFNNEQsR0FDdkMsSUFBSWxpQixFQUFTc2UsRUFBS3RlLE9BQ2RtaUIsRUFBZ0JuaUIsR0FBVUEsRUFBT2toQixRQUNyQyxPQUFPbEksUUFBUW1KLEdBQWlCRCxHQUFnQkEsRUFBYXpZLFNBQVMwWSxHQUN4RSxFQUVJQyxFQUFrQyxTQUF5Q0MsR0FDN0UsT0FBT0osRUFBVUksRUFBSSxDQUFDLFFBQVMsV0FBWSxVQUM3QyxFQUVBLFNBQVNDLEVBQVdsaEIsRUFBTUssRUFBVUgsRUFBU2loQixHQUN2Q2poQixhQUFtQjRHLFFBQ3JCcWEsRUFBT2poQixFQUNQQSxPQUFVaUMsR0FHWixJQUFJaWYsRUFBUWxoQixHQUFXLENBQUMsRUFDcEI0Z0IsRUFBZU0sRUFBTU4sYUFDckJoTixFQUFTc04sRUFBTXROLE9BQ2ZvTCxFQUFRa0MsRUFBTWxDLE1BQ2RELEVBQVVtQyxFQUFNbkMsUUFDaEJvQyxFQUF3QkQsRUFBTUUscUJBQzlCQSxPQUFpRCxJQUExQkQsR0FBMENBLEVBQ2pFRSxFQUFnQkgsRUFBTUksUUFDdEJBLE9BQTRCLElBQWxCRCxHQUFrQ0EsRUFDNUNFLEVBQXdCTCxFQUFNTSx3QkFDOUJBLE9BQW9ELElBQTFCRCxHQUEyQ0EsRUFFckVuaEIsR0FBTSxJQUFBQyxRQUFPLE1BRWJvaEIsR0FBbUIsSUFBQS9lLGNBQVksU0FBVWdmLEVBQWVDLEdBQzFELElBQUlDLEVBQXVCQyxFQUUzQixPQUFJak8sSUFBV0EsRUFBTzhOLElBQ1pOLEtBSU5OLEVBQWdDWSxLQUFtQmYsRUFBVWUsRUFBZWQsSUFBbUUsT0FBakRnQixFQUF3QkYsRUFBY2hqQixTQUFtQmtqQixFQUFzQjlCLG9CQUFzQjBCLE9BSW5MLE9BQWhCcGhCLEVBQUlLLFNBQW9CRSxTQUFTbWhCLGdCQUFrQjFoQixFQUFJSyxTQUEyQyxPQUEvQm9oQixFQUFlemhCLEVBQUlLLFVBQW9Cb2hCLEVBQWFuaEIsU0FBU0MsU0FBU21oQixrQkFDM0kzaEIsRUFBU3VoQixFQUFlQyxJQUNqQixFQUlYLEdBQUdWLEVBQU8sQ0FBQzdnQixFQUFLd2dCLEVBQWNoTixHQUFRekYsT0FBTzhTLEdBQVEsQ0FBQzdnQixFQUFLd2dCLEVBQWNoTixJQWlCekUsT0FoQkEsSUFBQXRULFlBQVUsV0FDUixHQUFLZ2hCLEVBV0wsT0FMSXRDLElBQXFCLElBQVpELElBQ1gvZSxFQUFRK2UsU0FBVSxHQUdwQkosRUFBUTdlLEVBQU1FLEdBQVcsQ0FBQyxFQUFHeWhCLEdBQ3RCLFdBQ0wsT0FBTzlDLEVBQVF3QixPQUFPcmdCLEVBQU0yaEIsRUFDOUIsRUFaRTlDLEVBQVF3QixPQUFPcmdCLEVBQU0yaEIsRUFhekIsR0FBRyxDQUFDQSxFQUFrQjNoQixFQUFNd2hCLElBQ3JCbGhCLENBQ1QsQ0FFQSxJQUFJMmhCLEVBQWtCcEQsRUFBUWUsZ05DbkY5QixTQUFTc0MsRUFBaUJDLEVBQVdDLEdBQ25DLE9BQU9ELEVBQVVqSyxRQUFRLElBQUkxUixPQUFPLFVBQVk0YixFQUFnQixZQUFhLEtBQU0sTUFBTWxLLFFBQVEsT0FBUSxLQUFLQSxRQUFRLGFBQWMsR0FDdEksMkNDRkEsU0FDRW1LLFVBQVUsR0NBWixFQUFlLGtCQUFvQixNQ0Q1QixJQUFJQyxFQUFjLFNBQXFCQyxHQUM1QyxPQUFPQSxFQUFLQyxTQUNkLEVDT1dDLEVBQVksWUFDWkMsRUFBUyxTQUNUQyxFQUFXLFdBQ1hDLEVBQVUsVUFDVkMsRUFBVSxVQTZGakJDLEVBQTBCLFNBQVVDLEdBR3RDLFNBQVNELEVBQVd2VCxFQUFPeVQsR0FDekIsSUFBSWpoQixFQUVKQSxFQUFRZ2hCLEVBQWlCM2pCLEtBQUtFLEtBQU1pUSxFQUFPeVQsSUFBWTFqQixLQUN2RCxJQUdJMmpCLEVBREFDLEVBRmNGLE1BRXVCRyxXQUFhNVQsRUFBTWtLLE1BQVFsSyxFQUFNMlQsT0F1QjFFLE9BckJBbmhCLEVBQU1xaEIsYUFBZSxLQUVqQjdULEVBQU04VCxHQUNKSCxHQUNGRCxFQUFnQlAsRUFDaEIzZ0IsRUFBTXFoQixhQUFlVCxHQUVyQk0sRUFBZ0JMLEVBSWhCSyxFQURFMVQsRUFBTStULGVBQWlCL1QsRUFBTWdVLGFBQ2ZkLEVBRUFDLEVBSXBCM2dCLEVBQU02RCxNQUFRLENBQ1o0ZCxPQUFRUCxHQUVWbGhCLEVBQU0waEIsYUFBZSxLQUNkMWhCLENBQ1QsRUFoQ0EsT0FBZStnQixFQUFZQyxHQWtDM0JELEVBQVdZLHlCQUEyQixTQUFrQ3hHLEVBQU15RyxHQUc1RSxPQUZhekcsRUFBS21HLElBRUpNLEVBQVVILFNBQVdmLEVBQzFCLENBQ0xlLE9BQVFkLEdBSUwsSUFDVCxFQWtCQSxJQUFJa0IsRUFBU2QsRUFBVzVqQixVQWtQeEIsT0FoUEEwa0IsRUFBT0Msa0JBQW9CLFdBQ3pCdmtCLEtBQUt3a0IsY0FBYSxFQUFNeGtCLEtBQUs4akIsYUFDL0IsRUFFQVEsRUFBT0csbUJBQXFCLFNBQTRCQyxHQUN0RCxJQUFJQyxFQUFhLEtBRWpCLEdBQUlELElBQWMxa0IsS0FBS2lRLE1BQU8sQ0FDNUIsSUFBSWlVLEVBQVNsa0IsS0FBS3NHLE1BQU00ZCxPQUVwQmxrQixLQUFLaVEsTUFBTThULEdBQ1RHLElBQVdiLEdBQVlhLElBQVdaLElBQ3BDcUIsRUFBYXRCLEdBR1hhLElBQVdiLEdBQVlhLElBQVdaLElBQ3BDcUIsRUFBYXBCLEVBR25CLENBRUF2akIsS0FBS3drQixjQUFhLEVBQU9HLEVBQzNCLEVBRUFMLEVBQU9NLHFCQUF1QixXQUM1QjVrQixLQUFLNmtCLG9CQUNQLEVBRUFQLEVBQU9RLFlBQWMsV0FDbkIsSUFDSUMsRUFBTTVLLEVBQU95SixFQURicFcsRUFBVXhOLEtBQUtpUSxNQUFNekMsUUFXekIsT0FUQXVYLEVBQU81SyxFQUFReUosRUFBU3BXLEVBRVQsTUFBWEEsR0FBc0MsaUJBQVpBLElBQzVCdVgsRUFBT3ZYLEVBQVF1WCxLQUNmNUssRUFBUTNNLEVBQVEyTSxNQUVoQnlKLE9BQTRCL2dCLElBQW5CMkssRUFBUW9XLE9BQXVCcFcsRUFBUW9XLE9BQVN6SixHQUdwRCxDQUNMNEssS0FBTUEsRUFDTjVLLE1BQU9BLEVBQ1B5SixPQUFRQSxFQUVaLEVBRUFVLEVBQU9FLGFBQWUsU0FBc0JRLEVBQVVMLEdBS3BELFFBSmlCLElBQWJLLElBQ0ZBLEdBQVcsR0FHTSxPQUFmTCxFQUlGLEdBRkEza0IsS0FBSzZrQixxQkFFREYsSUFBZXRCLEVBQVUsQ0FDM0IsR0FBSXJqQixLQUFLaVEsTUFBTStULGVBQWlCaGtCLEtBQUtpUSxNQUFNZ1UsYUFBYyxDQUN2RCxJQUFJaEIsRUFBT2pqQixLQUFLaVEsTUFBTWdWLFFBQVVqbEIsS0FBS2lRLE1BQU1nVixRQUFRNWpCLFFBQVUsZ0JBQXFCckIsTUFJOUVpakIsR0FBTUQsRUFBWUMsRUFDeEIsQ0FFQWpqQixLQUFLa2xCLGFBQWFGLEVBQ3BCLE1BQ0VobEIsS0FBS21sQixtQkFFRW5sQixLQUFLaVEsTUFBTStULGVBQWlCaGtCLEtBQUtzRyxNQUFNNGQsU0FBV2QsR0FDM0RwakIsS0FBS29sQixTQUFTLENBQ1psQixPQUFRZixHQUdkLEVBRUFtQixFQUFPWSxhQUFlLFNBQXNCRixHQUMxQyxJQUFJSyxFQUFTcmxCLEtBRVRtYSxFQUFRbmEsS0FBS2lRLE1BQU1rSyxNQUNuQm1MLEVBQVl0bEIsS0FBSzBqQixRQUFVMWpCLEtBQUswakIsUUFBUUcsV0FBYW1CLEVBRXJEbEQsRUFBUTloQixLQUFLaVEsTUFBTWdWLFFBQVUsQ0FBQ0ssR0FBYSxDQUFDLGdCQUFxQnRsQixNQUFPc2xCLEdBQ3hFQyxFQUFZekQsRUFBTSxHQUNsQjBELEVBQWlCMUQsRUFBTSxHQUV2QjJELEVBQVd6bEIsS0FBSzhrQixjQUNoQlksRUFBZUosRUFBWUcsRUFBUzdCLE9BQVM2QixFQUFTdEwsT0FHckQ2SyxJQUFhN0ssR0FBU2hOLEVBQU80VixTQUNoQy9pQixLQUFLMmxCLGFBQWEsQ0FDaEJ6QixPQUFRWixJQUNQLFdBQ0QrQixFQUFPcFYsTUFBTTJWLFVBQVVMLEVBQ3pCLEtBSUZ2bEIsS0FBS2lRLE1BQU00VixRQUFRTixFQUFXQyxHQUM5QnhsQixLQUFLMmxCLGFBQWEsQ0FDaEJ6QixPQUFRYixJQUNQLFdBQ0RnQyxFQUFPcFYsTUFBTTZWLFdBQVdQLEVBQVdDLEdBRW5DSCxFQUFPVSxnQkFBZ0JMLEdBQWMsV0FDbkNMLEVBQU9NLGFBQWEsQ0FDbEJ6QixPQUFRWixJQUNQLFdBQ0QrQixFQUFPcFYsTUFBTTJWLFVBQVVMLEVBQVdDLEVBQ3BDLEdBQ0YsR0FDRixJQUNGLEVBRUFsQixFQUFPYSxZQUFjLFdBQ25CLElBQUlhLEVBQVNobUIsS0FFVCtrQixFQUFPL2tCLEtBQUtpUSxNQUFNOFUsS0FDbEJVLEVBQVd6bEIsS0FBSzhrQixjQUNoQlMsRUFBWXZsQixLQUFLaVEsTUFBTWdWLGFBQVVwaUIsRUFBWSxnQkFBcUI3QyxNQUVqRStrQixJQUFRNVgsRUFBTzRWLFVBU3BCL2lCLEtBQUtpUSxNQUFNZ1csT0FBT1YsR0FDbEJ2bEIsS0FBSzJsQixhQUFhLENBQ2hCekIsT0FBUVgsSUFDUCxXQUNEeUMsRUFBTy9WLE1BQU1pVyxVQUFVWCxHQUV2QlMsRUFBT0QsZ0JBQWdCTixFQUFTVixNQUFNLFdBQ3BDaUIsRUFBT0wsYUFBYSxDQUNsQnpCLE9BQVFkLElBQ1AsV0FDRDRDLEVBQU8vVixNQUFNa1csU0FBU1osRUFDeEIsR0FDRixHQUNGLEtBckJFdmxCLEtBQUsybEIsYUFBYSxDQUNoQnpCLE9BQVFkLElBQ1AsV0FDRDRDLEVBQU8vVixNQUFNa1csU0FBU1osRUFDeEIsR0FrQkosRUFFQWpCLEVBQU9PLG1CQUFxQixXQUNBLE9BQXRCN2tCLEtBQUtta0IsZUFDUG5rQixLQUFLbWtCLGFBQWFpQyxTQUNsQnBtQixLQUFLbWtCLGFBQWUsS0FFeEIsRUFFQUcsRUFBT3FCLGFBQWUsU0FBc0JVLEVBQVd0bEIsR0FJckRBLEVBQVdmLEtBQUtzbUIsZ0JBQWdCdmxCLEdBQ2hDZixLQUFLb2xCLFNBQVNpQixFQUFXdGxCLEVBQzNCLEVBRUF1akIsRUFBT2dDLGdCQUFrQixTQUF5QnZsQixHQUNoRCxJQUFJd2xCLEVBQVN2bUIsS0FFVHdtQixHQUFTLEVBY2IsT0FaQXhtQixLQUFLbWtCLGFBQWUsU0FBVS9pQixHQUN4Qm9sQixJQUNGQSxHQUFTLEVBQ1RELEVBQU9wQyxhQUFlLEtBQ3RCcGpCLEVBQVNLLEdBRWIsRUFFQXBCLEtBQUtta0IsYUFBYWlDLE9BQVMsV0FDekJJLEdBQVMsQ0FDWCxFQUVPeG1CLEtBQUtta0IsWUFDZCxFQUVBRyxFQUFPeUIsZ0JBQWtCLFNBQXlCdlksRUFBU3FSLEdBQ3pEN2UsS0FBS3NtQixnQkFBZ0J6SCxHQUNyQixJQUFJb0UsRUFBT2pqQixLQUFLaVEsTUFBTWdWLFFBQVVqbEIsS0FBS2lRLE1BQU1nVixRQUFRNWpCLFFBQVUsZ0JBQXFCckIsTUFDOUV5bUIsRUFBMEMsTUFBWGpaLElBQW9CeE4sS0FBS2lRLE1BQU15VyxlQUVsRSxHQUFLekQsSUFBUXdELEVBQWIsQ0FLQSxHQUFJem1CLEtBQUtpUSxNQUFNeVcsZUFBZ0IsQ0FDN0IsSUFBSUMsRUFBUTNtQixLQUFLaVEsTUFBTWdWLFFBQVUsQ0FBQ2psQixLQUFLbWtCLGNBQWdCLENBQUNsQixFQUFNampCLEtBQUtta0IsY0FDL0RvQixFQUFZb0IsRUFBTSxHQUNsQkMsRUFBb0JELEVBQU0sR0FFOUIzbUIsS0FBS2lRLE1BQU15VyxlQUFlbkIsRUFBV3FCLEVBQ3ZDLENBRWUsTUFBWHBaLEdBQ0ZmLFdBQVd6TSxLQUFLbWtCLGFBQWMzVyxFQVhoQyxNQUZFZixXQUFXek0sS0FBS21rQixhQUFjLEVBZWxDLEVBRUFHLEVBQU91QyxPQUFTLFdBQ2QsSUFBSTNDLEVBQVNsa0IsS0FBS3NHLE1BQU00ZCxPQUV4QixHQUFJQSxJQUFXZixFQUNiLE9BQU8sS0FHVCxJQUFJMkQsRUFBYzltQixLQUFLaVEsTUFDbkJxQyxFQUFXd1UsRUFBWXhVLFNBZ0J2QlEsR0FmTWdVLEVBQVkvQyxHQUNGK0MsRUFBWTdDLGFBQ1g2QyxFQUFZOUMsY0FDbkI4QyxFQUFZbEQsT0FDYmtELEVBQVkzTSxNQUNiMk0sRUFBWS9CLEtBQ1QrQixFQUFZdFosUUFDTHNaLEVBQVlKLGVBQ25CSSxFQUFZakIsUUFDVGlCLEVBQVloQixXQUNiZ0IsRUFBWWxCLFVBQ2ZrQixFQUFZYixPQUNUYSxFQUFZWixVQUNiWSxFQUFZWCxTQUNiVyxFQUFZN0IsU0FDVixPQUE4QjZCLEVBQWEsQ0FBQyxXQUFZLEtBQU0sZUFBZ0IsZ0JBQWlCLFNBQVUsUUFBUyxPQUFRLFVBQVcsaUJBQWtCLFVBQVcsYUFBYyxZQUFhLFNBQVUsWUFBYSxXQUFZLGFBRWpQLE9BR0Usa0JBQW9CQyxFQUF1QmxXLFNBQVUsQ0FDbkR2TyxNQUFPLE1BQ2MsbUJBQWJnUSxFQUEwQkEsRUFBUzRSLEVBQVFwUixHQUFjLGlCQUFtQixrQkFBb0JSLEdBQVdRLEdBRXpILEVBRU8wUSxDQUNULENBbFQ4QixDQWtUNUIsZUErTEYsU0FBU2hlLElBQVEsQ0E3TGpCZ2UsRUFBV3dELFlBQWNELEVBQ3pCdkQsRUFBV3lELFVBMExQLENBQUMsRUFJTHpELEVBQVcwRCxhQUFlLENBQ3hCbkQsSUFBSSxFQUNKRSxjQUFjLEVBQ2RELGVBQWUsRUFDZkosUUFBUSxFQUNSekosT0FBTyxFQUNQNEssTUFBTSxFQUNOYyxRQUFTcmdCLEVBQ1RzZ0IsV0FBWXRnQixFQUNab2dCLFVBQVdwZ0IsRUFDWHlnQixPQUFRemdCLEVBQ1IwZ0IsVUFBVzFnQixFQUNYMmdCLFNBQVUzZ0IsR0FFWmdlLEVBQVdMLFVBQVlBLEVBQ3ZCSyxFQUFXSixPQUFTQSxFQUNwQkksRUFBV0gsU0FBV0EsRUFDdEJHLEVBQVdGLFFBQVVBLEVBQ3JCRSxFQUFXRCxRQUFVQSxFQUNyQixVQ3JtQkEsSUFNSTRELEVBQWMsU0FBcUJsRSxFQUFNbUUsR0FDM0MsT0FBT25FLEdBQVFtRSxHQUFXQSxFQUFRdk4sTUFBTSxLQUFLa0UsU0FBUSxTQUFVc0osR0FDN0QsT0xSeUMxUSxFS1FiMFEsUUxSSXZJLEVLUVZtRSxHTFBacUUsVUFDVnhJLEVBQVF3SSxVQUFVQyxPQUFPNVEsR0FDYSxpQkFBdEJtSSxFQUFRbkksVUFDeEJtSSxFQUFRbkksVUFBWWlNLEVBQWlCOUQsRUFBUW5JLFVBQVdBLEdBRXhEbUksRUFBUTBJLGFBQWEsUUFBUzVFLEVBQWlCOUQsRUFBUW5JLFdBQWFtSSxFQUFRbkksVUFBVThRLFNBQVcsR0FBSTlRLEtBTjFGLElBQXFCbUksRUFBU25JLENLUzNDLEdBQ0YsRUF3RUkrUSxFQUE2QixTQUFVakUsR0FHekMsU0FBU2lFLElBR1AsSUFGQSxJQUFJamxCLEVBRUt3ZSxFQUFPemhCLFVBQVVDLE9BQVEwSixFQUFPLElBQUkzQixNQUFNeVosR0FBT3RYLEVBQU8sRUFBR0EsRUFBT3NYLEVBQU10WCxJQUMvRVIsRUFBS1EsR0FBUW5LLFVBQVVtSyxHQWdIekIsT0E3R0FsSCxFQUFRZ2hCLEVBQWlCM2pCLEtBQUtDLE1BQU0wakIsRUFBa0IsQ0FBQ3pqQixNQUFNK08sT0FBTzVGLEtBQVVuSixNQUN4RTJuQixlQUFpQixDQUNyQi9ELE9BQVEsQ0FBQyxFQUNUekosTUFBTyxDQUFDLEVBQ1I0SyxLQUFNLENBQUMsR0FHVHRpQixFQUFNb2pCLFFBQVUsU0FBVU4sRUFBV0MsR0FDbkMsSUFBSW9DLEVBQXdCbmxCLEVBQU1vbEIsaUJBQWlCdEMsRUFBV0MsR0FDMUR2QyxFQUFPMkUsRUFBc0IsR0FDN0J0QyxFQUFZc0MsRUFBc0IsR0FFdENubEIsRUFBTXFsQixjQUFjN0UsRUFBTSxRQUUxQnhnQixFQUFNc2xCLFNBQVM5RSxFQUFNcUMsRUFBWSxTQUFXLFFBQVMsUUFFakQ3aUIsRUFBTXdOLE1BQU00VixTQUNkcGpCLEVBQU13TixNQUFNNFYsUUFBUU4sRUFBV0MsRUFFbkMsRUFFQS9pQixFQUFNcWpCLFdBQWEsU0FBVVAsRUFBV0MsR0FDdEMsSUFBSXdDLEVBQXlCdmxCLEVBQU1vbEIsaUJBQWlCdEMsRUFBV0MsR0FDM0R2QyxFQUFPK0UsRUFBdUIsR0FHOUJsaEIsRUFGWWtoQixFQUF1QixHQUVoQixTQUFXLFFBRWxDdmxCLEVBQU1zbEIsU0FBUzlFLEVBQU1uYyxFQUFNLFVBRXZCckUsRUFBTXdOLE1BQU02VixZQUNkcmpCLEVBQU13TixNQUFNNlYsV0FBV1AsRUFBV0MsRUFFdEMsRUFFQS9pQixFQUFNbWpCLFVBQVksU0FBVUwsRUFBV0MsR0FDckMsSUFBSXlDLEVBQXlCeGxCLEVBQU1vbEIsaUJBQWlCdEMsRUFBV0MsR0FDM0R2QyxFQUFPZ0YsRUFBdUIsR0FHOUJuaEIsRUFGWW1oQixFQUF1QixHQUVoQixTQUFXLFFBRWxDeGxCLEVBQU1xbEIsY0FBYzdFLEVBQU1uYyxHQUUxQnJFLEVBQU1zbEIsU0FBUzlFLEVBQU1uYyxFQUFNLFFBRXZCckUsRUFBTXdOLE1BQU0yVixXQUNkbmpCLEVBQU13TixNQUFNMlYsVUFBVUwsRUFBV0MsRUFFckMsRUFFQS9pQixFQUFNd2pCLE9BQVMsU0FBVVYsR0FDdkIsSUFDSXRDLEVBRHlCeGdCLEVBQU1vbEIsaUJBQWlCdEMsR0FDbEIsR0FFbEM5aUIsRUFBTXFsQixjQUFjN0UsRUFBTSxVQUUxQnhnQixFQUFNcWxCLGNBQWM3RSxFQUFNLFNBRTFCeGdCLEVBQU1zbEIsU0FBUzlFLEVBQU0sT0FBUSxRQUV6QnhnQixFQUFNd04sTUFBTWdXLFFBQ2R4akIsRUFBTXdOLE1BQU1nVyxPQUFPVixFQUV2QixFQUVBOWlCLEVBQU15akIsVUFBWSxTQUFVWCxHQUMxQixJQUNJdEMsRUFEeUJ4Z0IsRUFBTW9sQixpQkFBaUJ0QyxHQUNsQixHQUVsQzlpQixFQUFNc2xCLFNBQVM5RSxFQUFNLE9BQVEsVUFFekJ4Z0IsRUFBTXdOLE1BQU1pVyxXQUNkempCLEVBQU13TixNQUFNaVcsVUFBVVgsRUFFMUIsRUFFQTlpQixFQUFNMGpCLFNBQVcsU0FBVVosR0FDekIsSUFDSXRDLEVBRHlCeGdCLEVBQU1vbEIsaUJBQWlCdEMsR0FDbEIsR0FFbEM5aUIsRUFBTXFsQixjQUFjN0UsRUFBTSxRQUUxQnhnQixFQUFNc2xCLFNBQVM5RSxFQUFNLE9BQVEsUUFFekJ4Z0IsRUFBTXdOLE1BQU1rVyxVQUNkMWpCLEVBQU13TixNQUFNa1csU0FBU1osRUFFekIsRUFFQTlpQixFQUFNb2xCLGlCQUFtQixTQUFVdEMsRUFBV0MsR0FDNUMsT0FBTy9pQixFQUFNd04sTUFBTWdWLFFBQVUsQ0FBQ3hpQixFQUFNd04sTUFBTWdWLFFBQVE1akIsUUFBU2trQixHQUN6RCxDQUFDQSxFQUFXQyxFQUNoQixFQUVBL2lCLEVBQU15bEIsY0FBZ0IsU0FBVXBoQixHQUM5QixJQUFJcWhCLEVBQWExbEIsRUFBTXdOLE1BQU1rWSxXQUN6QkMsRUFBMkMsaUJBQWZELEVBRTVCRSxFQUFnQkQsR0FEUEEsR0FBc0JELEVBQWFBLEVBQWEsSUFBTSxJQUNacmhCLEVBQU9xaEIsRUFBV3JoQixHQUd6RSxNQUFPLENBQ0x1aEIsY0FBZUEsRUFDZkMsZ0JBSm9CRixFQUFxQkMsRUFBZ0IsVUFBWUYsRUFBV3JoQixFQUFPLFVBS3ZGeWhCLGNBSmtCSCxFQUFxQkMsRUFBZ0IsUUFBVUYsRUFBV3JoQixFQUFPLFFBTXZGLEVBRU9yRSxDQUNULEVBdkhBLE9BQWVpbEIsRUFBZWpFLEdBeUg5QixJQUFJYSxFQUFTb0QsRUFBYzluQixVQTREM0IsT0ExREEwa0IsRUFBT3lELFNBQVcsU0FBa0I5RSxFQUFNbmMsRUFBTTBoQixHQUM5QyxJQUFJN1IsRUFBWTNXLEtBQUtrb0IsY0FBY3BoQixHQUFNMGhCLEVBQVEsYUFHN0NELEVBRHNCdm9CLEtBQUtrb0IsY0FBYyxTQUNMSyxjQUUzQixXQUFUemhCLEdBQStCLFNBQVYwaEIsR0FBb0JELElBQzNDNVIsR0FBYSxJQUFNNFIsR0FLUCxXQUFWQyxHQUNFdkYsR0FBTUQsRUFBWUMsR0FHcEJ0TSxJQUNGM1csS0FBSzJuQixlQUFlN2dCLEdBQU0waEIsR0FBUzdSLEVBL056QixTQUFrQnNNLEVBQU1tRSxHQUMvQm5FLEdBQVFtRSxHQUFXQSxFQUFRdk4sTUFBTSxLQUFLa0UsU0FBUSxTQUFVc0osR0FDN0QsT0NMc0MxUSxFREtiMFEsUUNMSXZJLEVES1ZtRSxHQ0pUcUUsVUFBV3hJLEVBQVF3SSxVQUFVbUIsSUFBSTlSLEdDSGhDLFNBQWtCbUksRUFBU25JLEdBQ3hDLE9BQUltSSxFQUFRd0ksWUFBb0IzUSxHQUFhbUksRUFBUXdJLFVBQVVobUIsU0FBU3FWLElBQ2tDLEtBQWxHLEtBQU9tSSxFQUFRbkksVUFBVThRLFNBQVczSSxFQUFRbkksV0FBYSxLQUFLaFcsUUFBUSxJQUFNZ1csRUFBWSxJQUNsRyxDREFvRStSLENBQVM1SixFQUFTbkksS0FBNkMsaUJBQXRCbUksRUFBUW5JLFVBQXdCbUksRUFBUW5JLFVBQVltSSxFQUFRbkksVUFBWSxJQUFNQSxFQUFlbUksRUFBUTBJLGFBQWEsU0FBVTFJLEVBQVFuSSxXQUFhbUksRUFBUW5JLFVBQVU4USxTQUFXLElBQU0sSUFBTTlRLEtBRHhSLElBQWtCbUksRUFBU25JLENETXhDLEdBQ0YsQ0E2Tk1nUyxDQUFVMUYsRUFBTXRNLEdBRXBCLEVBRUEyTixFQUFPd0QsY0FBZ0IsU0FBdUI3RSxFQUFNbmMsR0FDbEQsSUFBSThoQixFQUF3QjVvQixLQUFLMm5CLGVBQWU3Z0IsR0FDNUN1aEIsRUFBZ0JPLEVBQXNCQyxLQUN0Q1AsRUFBa0JNLEVBQXNCcEMsT0FDeEMrQixFQUFnQkssRUFBc0J4bUIsS0FDMUNwQyxLQUFLMm5CLGVBQWU3Z0IsR0FBUSxDQUFDLEVBRXpCdWhCLEdBQ0ZsQixFQUFZbEUsRUFBTW9GLEdBR2hCQyxHQUNGbkIsRUFBWWxFLEVBQU1xRixHQUdoQkMsR0FDRnBCLEVBQVlsRSxFQUFNc0YsRUFFdEIsRUFFQWpFLEVBQU91QyxPQUFTLFdBQ2QsSUFBSUMsRUFBYzltQixLQUFLaVEsTUFFbkJBLEdBREk2VyxFQUFZcUIsWUFDUixPQUE4QnJCLEVBQWEsQ0FBQyxnQkFFeEQsT0FBb0Isa0JBQW9CLEdBQVksT0FBUyxDQUFDLEVBQUc3VyxFQUFPLENBQ3RFNFYsUUFBUzdsQixLQUFLNmxCLFFBQ2RELFVBQVc1bEIsS0FBSzRsQixVQUNoQkUsV0FBWTlsQixLQUFLOGxCLFdBQ2pCRyxPQUFRam1CLEtBQUtpbUIsT0FDYkMsVUFBV2xtQixLQUFLa21CLFVBQ2hCQyxTQUFVbm1CLEtBQUttbUIsV0FFbkIsRUFFT3VCLENBQ1QsQ0F2TGlDLENBdUwvQixlQUVGQSxFQUFjUixhQUFlLENBQzNCaUIsV0FBWSxJQUVkVCxFQUFjVCxVQWlJVCxDQUFDLEVBQ04sd0JHblpPLFNBQVM2QixFQUFnQnhXLEVBQVV5VyxHQUN4QyxJQUlJN2xCLEVBQVM5RCxPQUFPZ0IsT0FBTyxNQU8zQixPQU5Ja1MsR0FBVSxFQUFBRixTQUFBLElBQWFFLEdBQVUsU0FBVStVLEdBQzdDLE9BQU9BLENBQ1QsSUFBR3RKLFNBQVEsU0FBVTdMLEdBRW5CaFAsRUFBT2dQLEVBQU12UyxLQVRGLFNBQWdCdVMsR0FDM0IsT0FBTzZXLElBQVMsSUFBQUMsZ0JBQWU5VyxHQUFTNlcsRUFBTTdXLEdBQVNBLENBQ3pELENBT3NCK1csQ0FBTy9XLEVBQzdCLElBQ09oUCxDQUNULENBaUVBLFNBQVNnbUIsRUFBUWhYLEVBQU9pWCxFQUFNbFosR0FDNUIsT0FBc0IsTUFBZkEsRUFBTWtaLEdBQWdCbFosRUFBTWtaLEdBQVFqWCxFQUFNakMsTUFBTWtaLEVBQ3pELENBYU8sU0FBU0MsRUFBb0JDLEVBQVdDLEVBQWtCbkQsR0FDL0QsSUFBSW9ELEVBQW1CVCxFQUFnQk8sRUFBVS9XLFVBQzdDQSxFQS9EQyxTQUE0QjdMLEVBQU10RSxHQUl2QyxTQUFTcW5CLEVBQWU3cEIsR0FDdEIsT0FBT0EsS0FBT3dDLEVBQU9BLEVBQUt4QyxHQUFPOEcsRUFBSzlHLEVBQ3hDLENBTEE4RyxFQUFPQSxHQUFRLENBQUMsRUFDaEJ0RSxFQUFPQSxHQUFRLENBQUMsRUFRaEIsSUFjSTVDLEVBZEFrcUIsRUFBa0JycUIsT0FBT2dCLE9BQU8sTUFDaENzcEIsRUFBYyxHQUVsQixJQUFLLElBQUlDLEtBQVdsakIsRUFDZGtqQixLQUFXeG5CLEVBQ1R1bkIsRUFBWWpxQixTQUNkZ3FCLEVBQWdCRSxHQUFXRCxFQUMzQkEsRUFBYyxJQUdoQkEsRUFBWXJuQixLQUFLc25CLEdBS3JCLElBQUlDLEVBQWUsQ0FBQyxFQUVwQixJQUFLLElBQUlDLEtBQVcxbkIsRUFBTSxDQUN4QixHQUFJc25CLEVBQWdCSSxHQUNsQixJQUFLdHFCLEVBQUksRUFBR0EsRUFBSWtxQixFQUFnQkksR0FBU3BxQixPQUFRRixJQUFLLENBQ3BELElBQUl1cUIsRUFBaUJMLEVBQWdCSSxHQUFTdHFCLEdBQzlDcXFCLEVBQWFILEVBQWdCSSxHQUFTdHFCLElBQU1pcUIsRUFBZU0sRUFDN0QsQ0FHRkYsRUFBYUMsR0FBV0wsRUFBZUssRUFDekMsQ0FHQSxJQUFLdHFCLEVBQUksRUFBR0EsRUFBSW1xQixFQUFZanFCLE9BQVFGLElBQ2xDcXFCLEVBQWFGLEVBQVlucUIsSUFBTWlxQixFQUFlRSxFQUFZbnFCLElBRzVELE9BQU9xcUIsQ0FDVCxDQW1CaUJHLENBQW1CVCxFQUFrQkMsR0FtQ3BELE9BbENBbnFCLE9BQU9zQixLQUFLNFIsR0FBVXlMLFNBQVEsU0FBVXBlLEdBQ3RDLElBQUl1UyxFQUFRSSxFQUFTM1MsR0FDckIsSUFBSyxJQUFBcXBCLGdCQUFlOVcsR0FBcEIsQ0FDQSxJQUFJOFgsRUFBV3JxQixLQUFPMnBCLEVBQ2xCVyxFQUFXdHFCLEtBQU80cEIsRUFDbEJXLEVBQVlaLEVBQWlCM3BCLEdBQzdCd3FCLEdBQVksSUFBQW5CLGdCQUFla0IsS0FBZUEsRUFBVWphLE1BQU04VCxJQUUxRGtHLEdBQWFELElBQVdHLEVBUWhCRixJQUFXRCxHQUFZRyxFQU14QkYsR0FBV0QsSUFBVyxJQUFBaEIsZ0JBQWVrQixLQUk5QzVYLEVBQVMzUyxJQUFPLElBQUFtVyxjQUFhNUQsRUFBTyxDQUNsQ2lVLFNBQVVBLEVBQVN0ZSxLQUFLLEtBQU1xSyxHQUM5QjZSLEdBQUltRyxFQUFVamEsTUFBTThULEdBQ3BCZ0IsS0FBTW1FLEVBQVFoWCxFQUFPLE9BQVFtWCxHQUM3QmxQLE1BQU8rTyxFQUFRaFgsRUFBTyxRQUFTbVgsTUFYakMvVyxFQUFTM1MsSUFBTyxJQUFBbVcsY0FBYTVELEVBQU8sQ0FDbEM2UixJQUFJLElBVk56UixFQUFTM1MsSUFBTyxJQUFBbVcsY0FBYTVELEVBQU8sQ0FDbENpVSxTQUFVQSxFQUFTdGUsS0FBSyxLQUFNcUssR0FDOUI2UixJQUFJLEVBQ0pnQixLQUFNbUUsRUFBUWhYLEVBQU8sT0FBUW1YLEdBQzdCbFAsTUFBTytPLEVBQVFoWCxFQUFPLFFBQVNtWCxJQVpELENBK0JwQyxJQUNPL1csQ0FDVCxDQ2xJQSxJQUFJOFgsRUFBU2hyQixPQUFPZ3JCLFFBQVUsU0FBVXJaLEdBQ3RDLE9BQU8zUixPQUFPc0IsS0FBS3FRLEdBQUtwRyxLQUFJLFNBQVV1RyxHQUNwQyxPQUFPSCxFQUFJRyxFQUNiLEdBQ0YsRUF1QkltWixFQUErQixTQUFVNUcsR0FHM0MsU0FBUzRHLEVBQWdCcGEsRUFBT3lULEdBQzlCLElBQUlqaEIsRUFJQTZuQixHQUZKN25CLEVBQVFnaEIsRUFBaUIzakIsS0FBS0UsS0FBTWlRLEVBQU95VCxJQUFZMWpCLE1BRTlCc3FCLGFBQWF6aUIsTUFBSyxPQUF1QnBGLElBVWxFLE9BUEFBLEVBQU02RCxNQUFRLENBQ1ppa0IsYUFBYyxDQUNaMUcsWUFBWSxHQUVkeUcsYUFBY0EsRUFDZEUsYUFBYSxHQUVSL25CLENBQ1QsRUFsQkEsT0FBZTRuQixFQUFpQjVHLEdBb0JoQyxJQUFJYSxFQUFTK0YsRUFBZ0J6cUIsVUFxRTdCLE9BbkVBMGtCLEVBQU9DLGtCQUFvQixXQUN6QnZrQixLQUFLeXFCLFNBQVUsRUFDZnpxQixLQUFLb2xCLFNBQVMsQ0FDWm1GLGFBQWMsQ0FDWjFHLFlBQVksSUFHbEIsRUFFQVMsRUFBT00scUJBQXVCLFdBQzVCNWtCLEtBQUt5cUIsU0FBVSxDQUNqQixFQUVBSixFQUFnQmpHLHlCQUEyQixTQUFrQ2lGLEVBQVd6TCxHQUN0RixJRGlCbUMzTixFQUFPa1csRUNqQnRDbUQsRUFBbUIxTCxFQUFLdEwsU0FDeEJnWSxFQUFlMU0sRUFBSzBNLGFBRXhCLE1BQU8sQ0FDTGhZLFNBRmdCc0wsRUFBSzRNLGFEZVl2YSxFQ2Jjb1osRURhUGxELEVDYmtCbUUsRURjdkR4QixFQUFnQjdZLEVBQU1xQyxVQUFVLFNBQVVKLEdBQy9DLE9BQU8sSUFBQTRELGNBQWE1RCxFQUFPLENBQ3pCaVUsU0FBVUEsRUFBU3RlLEtBQUssS0FBTXFLLEdBQzlCNlIsSUFBSSxFQUNKSCxPQUFRc0YsRUFBUWhYLEVBQU8sU0FBVWpDLEdBQ2pDa0ssTUFBTytPLEVBQVFoWCxFQUFPLFFBQVNqQyxHQUMvQjhVLEtBQU1tRSxFQUFRaFgsRUFBTyxPQUFRakMsSUFFakMsS0N0QjhFbVosRUFBb0JDLEVBQVdDLEVBQWtCZ0IsR0FDM0hFLGFBQWEsRUFFakIsRUFHQWxHLEVBQU9nRyxhQUFlLFNBQXNCcFksRUFBTytRLEdBQ2pELElBQUl5SCxFQUFzQjVCLEVBQWdCOW9CLEtBQUtpUSxNQUFNcUMsVUFDakRKLEVBQU12UyxPQUFPK3FCLElBRWJ4WSxFQUFNakMsTUFBTWtXLFVBQ2RqVSxFQUFNakMsTUFBTWtXLFNBQVNsRCxHQUduQmpqQixLQUFLeXFCLFNBQ1B6cUIsS0FBS29sQixVQUFTLFNBQVU5ZSxHQUN0QixJQUFJZ00sR0FBVyxPQUFTLENBQUMsRUFBR2hNLEVBQU1nTSxVQUdsQyxjQURPQSxFQUFTSixFQUFNdlMsS0FDZixDQUNMMlMsU0FBVUEsRUFFZCxJQUVKLEVBRUFnUyxFQUFPdUMsT0FBUyxXQUNkLElBQUlDLEVBQWM5bUIsS0FBS2lRLE1BQ25CMGEsRUFBWTdELEVBQVk4RCxVQUN4QkMsRUFBZS9ELEVBQVkrRCxhQUMzQjVhLEdBQVEsT0FBOEI2VyxFQUFhLENBQUMsWUFBYSxpQkFFakV5RCxFQUFldnFCLEtBQUtzRyxNQUFNaWtCLGFBQzFCalksRUFBVzhYLEVBQU9wcUIsS0FBS3NHLE1BQU1nTSxVQUFVM0gsSUFBSWtnQixHQUsvQyxjQUpPNWEsRUFBTTJULGNBQ04zVCxFQUFNa0ssYUFDTmxLLEVBQU04VSxLQUVLLE9BQWQ0RixFQUNrQixrQkFBb0I1RCxFQUF1QmxXLFNBQVUsQ0FDdkV2TyxNQUFPaW9CLEdBQ05qWSxHQUdlLGtCQUFvQnlVLEVBQXVCbFcsU0FBVSxDQUN2RXZPLE1BQU9pb0IsR0FDTyxrQkFBb0JJLEVBQVcxYSxFQUFPcUMsR0FDeEQsRUFFTytYLENBQ1QsQ0EzRm1DLENBMkZqQyxlQUVGQSxFQUFnQnBELFVBeURaLENBQUMsRUFDTG9ELEVBQWdCbkQsYUE1S0csQ0FDakIwRCxVQUFXLE1BQ1hDLGFBQWMsU0FBc0IzWSxHQUNsQyxPQUFPQSxDQUNULEdBeUtGLFVDMUtBLElBQUk0WSxFQUFpQyxTQUFVckgsR0FHN0MsU0FBU3FILElBR1AsSUFGQSxJQUFJcm9CLEVBRUt3ZSxFQUFPemhCLFVBQVVDLE9BQVFzckIsRUFBUSxJQUFJdmpCLE1BQU15WixHQUFPdFgsRUFBTyxFQUFHQSxFQUFPc1gsRUFBTXRYLElBQ2hGb2hCLEVBQU1waEIsR0FBUW5LLFVBQVVtSyxHQXFEMUIsT0FsREFsSCxFQUFRZ2hCLEVBQWlCM2pCLEtBQUtDLE1BQU0wakIsRUFBa0IsQ0FBQ3pqQixNQUFNK08sT0FBT2djLEtBQVcvcUIsTUFFekVnckIsWUFBYyxXQUNsQixJQUFLLElBQUlDLEVBQVF6ckIsVUFBVUMsT0FBUTBKLEVBQU8sSUFBSTNCLE1BQU15akIsR0FBUUMsRUFBUSxFQUFHQSxFQUFRRCxFQUFPQyxJQUNwRi9oQixFQUFLK2hCLEdBQVMxckIsVUFBVTByQixHQUcxQixPQUFPem9CLEVBQU0wb0IsZ0JBQWdCLFVBQVcsRUFBR2hpQixFQUM3QyxFQUVBMUcsRUFBTTJvQixlQUFpQixXQUNyQixJQUFLLElBQUlDLEVBQVE3ckIsVUFBVUMsT0FBUTBKLEVBQU8sSUFBSTNCLE1BQU02akIsR0FBUUMsRUFBUSxFQUFHQSxFQUFRRCxFQUFPQyxJQUNwRm5pQixFQUFLbWlCLEdBQVM5ckIsVUFBVThyQixHQUcxQixPQUFPN29CLEVBQU0wb0IsZ0JBQWdCLGFBQWMsRUFBR2hpQixFQUNoRCxFQUVBMUcsRUFBTThvQixjQUFnQixXQUNwQixJQUFLLElBQUlDLEVBQVFoc0IsVUFBVUMsT0FBUTBKLEVBQU8sSUFBSTNCLE1BQU1na0IsR0FBUUMsRUFBUSxFQUFHQSxFQUFRRCxFQUFPQyxJQUNwRnRpQixFQUFLc2lCLEdBQVNqc0IsVUFBVWlzQixHQUcxQixPQUFPaHBCLEVBQU0wb0IsZ0JBQWdCLFlBQWEsRUFBR2hpQixFQUMvQyxFQUVBMUcsRUFBTWlwQixXQUFhLFdBQ2pCLElBQUssSUFBSUMsRUFBUW5zQixVQUFVQyxPQUFRMEosRUFBTyxJQUFJM0IsTUFBTW1rQixHQUFRQyxFQUFRLEVBQUdBLEVBQVFELEVBQU9DLElBQ3BGemlCLEVBQUt5aUIsR0FBU3BzQixVQUFVb3NCLEdBRzFCLE9BQU9ucEIsRUFBTTBvQixnQkFBZ0IsU0FBVSxFQUFHaGlCLEVBQzVDLEVBRUExRyxFQUFNb3BCLGNBQWdCLFdBQ3BCLElBQUssSUFBSUMsRUFBUXRzQixVQUFVQyxPQUFRMEosRUFBTyxJQUFJM0IsTUFBTXNrQixHQUFRQyxFQUFRLEVBQUdBLEVBQVFELEVBQU9DLElBQ3BGNWlCLEVBQUs0aUIsR0FBU3ZzQixVQUFVdXNCLEdBRzFCLE9BQU90cEIsRUFBTTBvQixnQkFBZ0IsWUFBYSxFQUFHaGlCLEVBQy9DLEVBRUExRyxFQUFNNm5CLGFBQWUsV0FDbkIsSUFBSyxJQUFJMEIsRUFBUXhzQixVQUFVQyxPQUFRMEosRUFBTyxJQUFJM0IsTUFBTXdrQixHQUFRQyxFQUFRLEVBQUdBLEVBQVFELEVBQU9DLElBQ3BGOWlCLEVBQUs4aUIsR0FBU3pzQixVQUFVeXNCLEdBRzFCLE9BQU94cEIsRUFBTTBvQixnQkFBZ0IsV0FBWSxFQUFHaGlCLEVBQzlDLEVBRU8xRyxDQUNULEVBNURBLE9BQWVxb0IsRUFBbUJySCxHQThEbEMsSUFBSWEsRUFBU3dHLEVBQWtCbHJCLFVBNEMvQixPQTFDQTBrQixFQUFPNkcsZ0JBQWtCLFNBQXlCdE0sRUFBU3FOLEVBQUtDLEdBQzlELElBQUlDLEVBRUE5WixFQUFXdFMsS0FBS2lRLE1BQU1xQyxTQUN0QkosRUFBUSxxQkFBdUJJLEdBQVU0WixHQUc3QyxHQUZJaGEsRUFBTWpDLE1BQU00TyxLQUFXdU4sRUFBZWxhLEVBQU1qQyxPQUFPNE8sR0FBUzllLE1BQU1xc0IsRUFBY0QsR0FFaEZuc0IsS0FBS2lRLE1BQU00TyxHQUFVLENBQ3ZCLElBQUkwRyxFQUFZclQsRUFBTWpDLE1BQU1nVixhQUFVcGlCLEVBQVksZ0JBQXFCN0MsTUFDdkVBLEtBQUtpUSxNQUFNNE8sR0FBUzBHLEVBQ3RCLENBQ0YsRUFFQWpCLEVBQU91QyxPQUFTLFdBQ2QsSUFBSUMsRUFBYzltQixLQUFLaVEsTUFDbkJxQyxFQUFXd1UsRUFBWXhVLFNBQ3ZCK1osRUFBU3ZGLEVBQVkvQyxHQUNyQjlULEdBQVEsT0FBOEI2VyxFQUFhLENBQUMsV0FBWSxPQUVoRXdGLEVBQXdCLHFCQUF1QmhhLEdBQy9DaWEsRUFBUUQsRUFBc0IsR0FDOUJFLEVBQVNGLEVBQXNCLEdBUW5DLGNBTk9yYyxFQUFNNFYsZUFDTjVWLEVBQU02VixrQkFDTjdWLEVBQU0yVixpQkFDTjNWLEVBQU1nVyxjQUNOaFcsRUFBTWlXLGlCQUNOalcsRUFBTWtXLFNBQ08sa0JBQW9CLEVBQWlCbFcsRUFBT29jLEVBQVMsaUJBQW1CRSxFQUFPLENBQ2pHNXNCLElBQUssUUFDTGttQixRQUFTN2xCLEtBQUtnckIsWUFDZGxGLFdBQVk5bEIsS0FBS29yQixlQUNqQnhGLFVBQVc1bEIsS0FBS3VyQixnQkFDYixpQkFBbUJpQixFQUFRLENBQzlCN3NCLElBQUssU0FDTGttQixRQUFTN2xCLEtBQUswckIsV0FDZDVGLFdBQVk5bEIsS0FBSzZyQixjQUNqQmpHLFVBQVc1bEIsS0FBS3NxQixlQUVwQixFQUVPUSxDQUNULENBNUdxQyxDQTRHbkMsZUFFRkEsRUFBa0I3RCxVQU1kLENBQUMsRUFDTCxVQ3JJQSxJQUFJd0YsRUFBZUMsRUFzQlJDLEVBQ0osU0FESUEsRUFFTCxTQUdGQyxFQUFXLFNBQWtCOU4sRUFBUytOLEVBQU1DLEdBQzlDLE9BQU8sV0FDTCxJQUFJQyxFQUVKak8sRUFBUTdPLE1BQU00YyxLQUFVRSxFQUFpQmpPLEVBQVE3TyxPQUFPNGMsR0FBTTlzQixNQUFNZ3RCLEVBQWdCdnRCLFdBQ3BGc3RCLEdBQ0YsQ0FDRixFQUVJRSxJQUFnQlAsRUFBZ0IsQ0FBQyxHQUFpQkUsR0FBYSxTQUFVL08sR0FDM0UsSUFBSXZjLEVBQVV1YyxFQUFLdmMsUUFDZjRyQixFQUFjclAsRUFBS3FQLFlBQ3ZCLE9BQU8saUJBQW1CNXJCLEVBQVMsQ0FDakMwaUIsSUFBSSxFQUNKb0MsU0FBVXlHLEVBQVN2ckIsRUFBUyxZQUFZLFdBQ3RDNHJCLEVBQVk1SixFQUFVLEtBQ3hCLEtBRUosRUFBR29KLEVBQWNFLEdBQVksU0FBVTdLLEdBQ3JDLElBQUl6Z0IsRUFBVXlnQixFQUFNemdCLFFBQ2hCNHJCLEVBQWNuTCxFQUFNbUwsWUFDcEIzYSxFQUFXd1AsRUFBTXhQLFNBQ3JCLE1BQU8sQ0FBQ2pSLEVBQVMsaUJBQW1CaVIsRUFBVSxDQUM1Q3lSLElBQUksRUFDSjZCLFVBQVdnSCxFQUFTdGEsRUFBVSxhQUFhLFdBQ3pDMmEsRUFBWTVKLEVBQ2QsTUFFSixFQUFHb0osR0FDQ1MsSUFBZ0JSLEVBQWdCLENBQUMsR0FBaUJDLEdBQWEsU0FBVWhHLEdBQzNFLElBQUlyVSxFQUFXcVUsRUFBTXJVLFNBQ2pCMmEsRUFBY3RHLEVBQU1zRyxZQUN4QixPQUFPLGlCQUFtQjNhLEVBQVUsQ0FDbEN5UixJQUFJLEVBQ0o2QixVQUFXZ0gsRUFBU3RhLEVBQVUsYUFBYSxXQUN6QzJhLEVBQVkzSixFQUFTLGlCQUFtQmhSLEVBQVUsQ0FDaER5UixJQUFJLElBRVIsS0FFSixFQUFHMkksRUFBY0MsR0FBWSxTQUFVUSxHQUNyQyxJQUFJOXJCLEVBQVU4ckIsRUFBTTlyQixRQUNoQmlSLEVBQVc2YSxFQUFNN2EsU0FDakIyYSxFQUFjRSxFQUFNRixZQUN4QixNQUFPLENBQUMsaUJBQW1CNXJCLEVBQVMsQ0FDbEMwaUIsSUFBSSxFQUNKb0MsU0FBVXlHLEVBQVN2ckIsRUFBUyxZQUFZLFdBQ3RDNHJCLEVBQVkzSixFQUFTLGlCQUFtQmhSLEVBQVUsQ0FDaER5UixJQUFJLElBRVIsTUFDRSxpQkFBbUJ6UixFQUFVLENBQy9CeVIsSUFBSSxJQUVSLEVBQUcySSxHQXNEQ1UsRUFBZ0MsU0FBVTNKLEdBRzVDLFNBQVMySixJQUdQLElBRkEsSUFBSTNxQixFQUVLd2UsRUFBT3poQixVQUFVQyxPQUFRMEosRUFBTyxJQUFJM0IsTUFBTXlaLEdBQU90WCxFQUFPLEVBQUdBLEVBQU9zWCxFQUFNdFgsSUFDL0VSLEVBQUtRLEdBQVFuSyxVQUFVbUssR0FxQnpCLE9BbEJBbEgsRUFBUWdoQixFQUFpQjNqQixLQUFLQyxNQUFNMGpCLEVBQWtCLENBQUN6akIsTUFBTStPLE9BQU81RixLQUFVbkosTUFDeEVzRyxNQUFRLENBQ1o0ZCxPQUFRWixFQUNSamlCLFFBQVMsTUFFWG9CLEVBQU00cUIsVUFBVyxFQUVqQjVxQixFQUFNd3FCLFlBQWMsU0FBVS9JLEVBQVE3aUIsUUFDcEIsSUFBWkEsSUFDRkEsRUFBVW9CLEVBQU02RCxNQUFNakYsU0FHeEJvQixFQUFNMmlCLFNBQVMsQ0FDYmxCLE9BQVFBLEVBQ1I3aUIsUUFBU0EsR0FFYixFQUVPb0IsQ0FDVCxFQTVCQSxPQUFlMnFCLEVBQWtCM0osR0E4QmpDLElBQUlhLEVBQVM4SSxFQUFpQnh0QixVQW1FOUIsT0FqRUEwa0IsRUFBT0Msa0JBQW9CLFdBQ3pCdmtCLEtBQUtxdEIsVUFBVyxDQUNsQixFQUVBRCxFQUFpQmhKLHlCQUEyQixTQUFrQ25VLEVBQU8zSixHQUNuRixPQUFzQixNQUFsQjJKLEVBQU1xQyxTQUNELENBQ0xqUixRQUFTLE1BSVRpRixFQUFNNGQsU0FBV2IsR0FBWXBULEVBQU1xZCxPQUFTWCxFQUN2QyxDQUNMekksT0FBUWIsSUFJUi9jLEVBQU1qRixXQWxMZ0Jrc0IsRUFrTGdCam5CLEVBQU1qRixZQWxMVG1zQixFQWtMa0J2ZCxFQUFNcUMsV0EvSzdELG1CQUFxQmliLElBQWdCLG1CQUFxQkMsSUFBbUMsTUFBbkJELEVBQVk1dEIsS0FBZTR0QixFQUFZNXRCLE1BQVE2dEIsRUFBWTd0QixLQXFMaEksQ0FDTDBCLFFBQVMsaUJBQW1CNE8sRUFBTXFDLFNBQVUsQ0FDMUN5UixJQUFJLEtBUEMsQ0FDTEcsT0FBUVgsR0FwTGhCLElBQThCZ0ssRUFBYUMsQ0E2THpDLEVBRUFsSixFQUFPdUMsT0FBUyxXQUNkLElBWUkrRCxFQVpBOUQsRUFBYzltQixLQUFLaVEsTUFDbkJxQyxFQUFXd1UsRUFBWXhVLFNBQ3ZCZ2IsRUFBT3hHLEVBQVl3RyxLQUNuQkcsRUFBY3p0QixLQUFLc0csTUFDbkI0ZCxFQUFTdUosRUFBWXZKLE9BQ3JCN2lCLEVBQVVvc0IsRUFBWXBzQixRQUN0QnVCLEVBQU8sQ0FDVDBQLFNBQVVBLEVBQ1ZqUixRQUFTQSxFQUNUNHJCLFlBQWFqdEIsS0FBS2l0QixZQUNsQi9JLE9BQVFBLEdBSVYsT0FBUUEsR0FDTixLQUFLYixFQUNIdUgsRUFBWXNDLEVBQWFJLEdBQU0xcUIsR0FDL0IsTUFFRixLQUFLMmdCLEVBQ0hxSCxFQUFZb0MsRUFBYU0sR0FBTTFxQixHQUMvQixNQUVGLEtBQUswZ0IsRUFDSHNILEVBQVl2cEIsRUFHaEIsT0FBb0Isa0JBQW9CMGxCLEVBQXVCbFcsU0FBVSxDQUN2RXZPLE1BQU8sQ0FDTHVoQixZQUFhN2pCLEtBQUtxdEIsV0FFbkJ6QyxFQUNMLEVBRU93QyxDQUNULENBbkdvQyxDQW1HbEMsZUFFRkEsRUFBaUJuRyxVQWNiLENBQUMsRUFDTG1HLEVBQWlCbEcsYUFBZSxDQUM5Qm9HLEtBQU1YLEdBRVIsbUZDL0tJZSxFQUFjLFdBQ2hCLFNBQVNDLEVBQWlCcnVCLEVBQVEyUSxHQUNoQyxJQUFLLElBQUkxUSxFQUFJLEVBQUdBLEVBQUkwUSxFQUFNeFEsT0FBUUYsSUFBSyxDQUNyQyxJQUFJcXVCLEVBQWEzZCxFQUFNMVEsR0FDdkJxdUIsRUFBV3BjLFdBQWFvYyxFQUFXcGMsYUFBYyxFQUNqRG9jLEVBQVdDLGNBQWUsRUFDdEIsVUFBV0QsSUFBWUEsRUFBV0UsVUFBVyxHQUNqRDF1QixPQUFPNFEsZUFBZTFRLEVBQVFzdUIsRUFBV2p1QixJQUFLaXVCLEVBQ2hELENBQ0YsQ0FFQSxPQUFPLFNBQVVHLEVBQWFDLEVBQVlDLEdBR3hDLE9BRklELEdBQVlMLEVBQWlCSSxFQUFZbnVCLFVBQVdvdUIsR0FDcERDLEdBQWFOLEVBQWlCSSxFQUFhRSxHQUN4Q0YsQ0FDVCxDQUNGLENBaEJrQixHQWtDZEcsRUFBNEIsU0FBVWp2QixFQUFNYSxHQUM5QyxJQUFLYixFQUNILE1BQU0sSUFBSUMsZUFBZSw2REFHM0IsT0FBT1ksR0FBeUIsaUJBQVRBLEdBQXFDLG1CQUFUQSxFQUE4QmIsRUFBUGEsQ0FDNUUsRUFFSXF1QixFQUFpQixTQUFVQyxHQUc3QixTQUFTRCxJQUNQLElBQUl2USxFQUVBeVEsRUFBTzVyQixHQXRETSxTQUFVNnJCLEVBQVVQLEdBQ3ZDLEtBQU1PLGFBQW9CUCxHQUN4QixNQUFNLElBQUl0cEIsVUFBVSxvQ0FFeEIsQ0FvREk4cEIsQ0FBZXZ1QixLQUFNbXVCLEdBRXJCLElBQUssSUFBSWxOLEVBQU96aEIsVUFBVUMsT0FBUTBKLEVBQU8zQixNQUFNeVosR0FBT3RYLEVBQU8sRUFBR0EsRUFBT3NYLEVBQU10WCxJQUMzRVIsRUFBS1EsR0FBUW5LLFVBQVVtSyxHQUd6QixPQUFlMGtCLEVBQVM1ckIsRUFBUXlyQixFQUEwQmx1QixNQUFPNGQsRUFBT3VRLEVBQWU3dEIsV0FBYWxCLE9BQU9vdkIsZUFBZUwsSUFBaUJydUIsS0FBS0MsTUFBTTZkLEVBQU0sQ0FBQzVkLE1BQU0rTyxPQUFPNUYsS0FBaUIxRyxFQUFNZ3NCLHlCQUEyQixFQUFHaHNCLEVBQU1pc0Isd0JBQTBCLEVBQUdqc0IsRUFBTWtzQix3QkFBMEIsR0FBSWxzQixFQUFNbXNCLGlCQUFtQixTQUFVOU0sR0FDdlUsSUFBSStNLEVBQW9CL00sRUFBTStNLGtCQUMxQkMsRUFBbUJoTixFQUFNZ04saUJBWTdCcnNCLEVBQU1nc0Isd0JBQTBCSSxFQUNoQ3BzQixFQUFNaXNCLHVCQUF5QkksRUFFL0Jyc0IsRUFBTXNzQixrQkFBa0JGLEVBQW1CQyxFQUM3QyxFQUFHcnNCLEVBQU11c0IsUUFBVSxTQUFVQyxHQUMzQnhzQixFQUFNeXNCLFNBQVdELENBQ25CLEVBQVdmLEVBQTBCenJCLEVBQWxDNHJCLEVBQ0wsQ0FnSEEsT0EzS2EsU0FBVW51QixFQUFVQyxHQUNqQyxHQUEwQixtQkFBZkEsR0FBNEMsT0FBZkEsRUFDdEMsTUFBTSxJQUFJc0UsVUFBVSxrRUFBb0V0RSxHQUcxRkQsRUFBU04sVUFBWVIsT0FBT2dCLE9BQU9ELEdBQWNBLEVBQVdQLFVBQVcsQ0FDckVTLFlBQWEsQ0FDWGlDLE1BQU9wQyxFQUNQc1IsWUFBWSxFQUNac2MsVUFBVSxFQUNWRCxjQUFjLEtBR2QxdEIsSUFBWWYsT0FBTyt2QixlQUFpQi92QixPQUFPK3ZCLGVBQWVqdkIsRUFBVUMsR0FBY0QsRUFBU0ksVUFBWUgsRUFDN0csQ0FXRWl2QixDQUFTakIsRUFBZ0JDLEdBb0N6QlYsRUFBWVMsRUFBZ0IsQ0FBQyxDQUMzQnh1QixJQUFLLDBCQUNMMkMsTUFBTyxXQUNMLElBQUkrc0IsRUFBYTd2QixVQUFVQyxPQUFTLFFBQXNCb0QsSUFBakJyRCxVQUFVLElBQW1CQSxVQUFVLEdBRWhGUSxLQUFLMnVCLHdCQUEwQixHQUUzQlUsR0FDRnJ2QixLQUFLK3VCLGtCQUFrQi91QixLQUFLeXVCLHdCQUF5Qnp1QixLQUFLMHVCLHVCQUU5RCxHQUNDLENBQ0QvdUIsSUFBSyxvQkFDTDJDLE1BQU8sV0FNUCxHQUNDLENBQ0QzQyxJQUFLLFNBQ0wyQyxNQUFPLFdBSUwsT0FBT2dRLEVBSFF0UyxLQUFLaVEsTUFBTXFDLFVBR1YsQ0FDZGdkLGdCQUFpQnR2QixLQUFLNHVCLGlCQUN0QjV0QixJQUFLaEIsS0FBS2d2QixTQUVkLEdBQ0MsQ0FDRHJ2QixJQUFLLG9CQUNMMkMsTUFBTyxTQUEyQml0QixFQUFZQyxHQUM1QyxJQUFJQyxFQUFTenZCLEtBQUtpUSxNQUNkeWYsRUFBZUQsRUFBT0MsYUFDdEJDLEVBQVlGLEVBQU9FLFVBQ25CQyxFQUF3QkgsRUFBT0ksaUJBQy9CQSxPQUE2Q2h0QixJQUExQitzQixFQUFzQyxHQUFLQSxFQUM5REUsRUFBbUJMLEVBQU9NLFVBQzFCQSxPQUFpQ2x0QixJQUFyQml0QixFQUFpQyxHQUFLQSxFQUdsREUsRUE1TFYsU0FBK0JwUyxHQVk3QixJQVhBLElBQUk4UixFQUFlOVIsRUFBSzhSLGFBQ3BCQyxFQUFZL1IsRUFBSytSLFVBQ2pCRSxFQUFtQmpTLEVBQUtpUyxpQkFFeEJMLEVBQVk1UixFQUFLNFIsVUFFakJRLEVBQWlCLEdBRWpCQyxFQUFrQixLQUNsQkMsRUFBaUIsS0FFWkMsRUFSUXZTLEVBQUsyUixXQVFRWSxHQUFVWCxFQUFXVyxJQUNwQ1QsRUFBYVMsR0FPSSxPQUFuQkQsSUFDVEYsRUFBZTN0QixLQUFLNHRCLEVBQWlCQyxHQUVyQ0QsRUFBa0JDLEVBQWlCLE9BUG5DQSxFQUFpQkMsRUFDTyxPQUFwQkYsSUFDRkEsRUFBa0JFLElBV3hCLEdBQXVCLE9BQW5CRCxFQUF5QixDQUczQixJQUZBLElBQUlFLEVBQXFCM2lCLEtBQUs0aUIsSUFBSTVpQixLQUFLNmlCLElBQUlKLEVBQWdCRCxFQUFrQkosRUFBbUIsR0FBSUYsRUFBWSxHQUV2R1ksRUFBVUwsRUFBaUIsRUFBR0ssR0FBV0gsSUFDM0NWLEVBQWFhLEdBRGtEQSxJQUVsRUwsRUFBaUJLLEVBTXJCUCxFQUFlM3RCLEtBQUs0dEIsRUFBaUJDLEVBQ3ZDLENBSUEsR0FBSUYsRUFBZXZ3QixPQUNqQixLQUFPdXdCLEVBQWUsR0FBS0EsRUFBZSxHQUFLLEVBQUlILEdBQW9CRyxFQUFlLEdBQUssR0FBRyxDQUM1RixJQUFJUSxFQUFVUixFQUFlLEdBQUssRUFFbEMsR0FBS04sRUFBYWMsR0FHaEIsTUFGQVIsRUFBZSxHQUFLUSxDQUl4QixDQUdGLE9BQU9SLENBQ1QsQ0FrSTJCUyxDQUFzQixDQUN6Q2YsYUFBY0EsRUFDZEMsVUFBV0EsRUFDWEUsaUJBQWtCQSxFQUNsQk4sV0FBWTloQixLQUFLNmlCLElBQUksRUFBR2YsRUFBYVEsR0FDckNQLFVBQVcvaEIsS0FBSzRpQixJQUFJVixFQUFZLEVBQUdILEVBQVlPLE1BSzdDL3ZCLEtBQUsydUIsd0JBQXdCbHZCLFNBQVd1d0IsRUFBZXZ3QixRQUFVTyxLQUFLMnVCLHdCQUF3QitCLE1BQUssU0FBVUMsRUFBYTFwQixHQUM1SCxPQUFPK29CLEVBQWUvb0IsS0FBVzBwQixDQUNuQyxPQUNFM3dCLEtBQUsydUIsd0JBQTBCcUIsRUFDL0Jod0IsS0FBSzR3QixvQkFBb0JaLEdBRTdCLEdBQ0MsQ0FDRHJ3QixJQUFLLHNCQUNMMkMsTUFBTyxTQUE2QjB0QixHQTJDbEMsSUExQ0EsSUFBSTNLLEVBQVNybEIsS0FHVDZ3QixFQUFnQjd3QixLQUFLaVEsTUFBTTRnQixlQUFpQjd3QixLQUFLaVEsTUFBTTZnQixhQUV2REMsRUFBUSxTQUFleHhCLEdBQ3pCLElBQUlnd0IsRUFBYVMsRUFBZXp3QixHQUM1Qml3QixFQUFZUSxFQUFlendCLEVBQUksR0FDL0JnRSxFQUFVc3RCLEVBQWN0QixFQUFZQyxHQUN6QixNQUFYanNCLEdBQ0ZBLEVBQVE0QixNQUFLLFdBR1gsTUF0T1l5WSxFQXNPTyxDQUNqQm9ULHVCQUF3QjNMLEVBQU9vSix3QkFDL0J3QyxzQkFBdUI1TCxFQUFPcUosdUJBQzlCYSxXQUFZQSxFQUNaQyxVQUFXQSxJQXZPREQsV0FETTNSLEVBQUtxVCx1QkFFakJyVCxFQUFLNFIsVUFIUTVSLEVBQUtvVCx3QkEwT3BCLENBRUYsR0FBdUIsTUFBbkIzTCxFQUFPNkosU0FDVCxPQUs2QyxtQkFBcEM3SixFQUFPNkosU0FBU2dDLGdCQUN6QjdMLEVBQU82SixTQUFTZ0MsZ0JBQWdCM0IsR0FBWSxJQUtNLG1CQUF2Q2xLLEVBQU82SixTQUFTaUMsb0JBQ3pCOUwsRUFBTzZKLFNBQVNpQyxvQkFBb0IsR0FFdEM5TCxFQUFPNkosU0FBU2tDLGNBRXBCLENBOVBaLElBQXdCeFQsQ0ErUGQsR0FFSixFQUVTcmUsRUFBSSxFQUFHQSxFQUFJeXdCLEVBQWV2d0IsT0FBUUYsR0FBSyxFQUM5Q3d4QixFQUFNeHhCLEVBRVYsS0FFSzR1QixDQUNULENBcEpxQixDQW9KbkIsRUFBQWtELGVBRUYsME5DalJJQyxFQUFZQyxPQUFPQyxPQUNuQixTQUFrQmx2QixHQUNkLE1BQXdCLGlCQUFWQSxHQUFzQkEsR0FBVUEsQ0FDbEQsRUFVSixTQUFTbXZCLEVBQWVDLEVBQVdDLEdBQy9CLEdBQUlELEVBQVVqeUIsU0FBV2t5QixFQUFXbHlCLE9BQ2hDLE9BQU8sRUFFWCxJQUFLLElBQUlGLEVBQUksRUFBR0EsRUFBSW15QixFQUFVanlCLE9BQVFGLElBQ2xDLE1BZFNndEIsRUFjSW1GLEVBQVVueUIsT0FkUGl0QixFQWNXbUYsRUFBV3B5QixLQVZ0Qyt4QixFQUFVL0UsSUFBVStFLEVBQVU5RSxJQVcxQixPQUFPLEVBZm5CLElBQWlCRCxFQUFPQyxFQWtCcEIsT0FBTyxDQUNYLENBeUJBLFFBdkJBLFNBQW9Cb0YsRUFBVUMsR0FFMUIsSUFBSUMsT0FEWSxJQUFaRCxJQUFzQkEsRUFBVUosR0FFcEMsSUFDSU0sRUFEQUMsRUFBVyxHQUVYQyxHQUFhLEVBZWpCLE9BZEEsV0FFSSxJQURBLElBQUlDLEVBQVUsR0FDTDlaLEVBQUssRUFBR0EsRUFBSzVZLFVBQVVDLE9BQVEyWSxJQUNwQzhaLEVBQVE5WixHQUFNNVksVUFBVTRZLEdBRTVCLE9BQUk2WixHQUFjSCxJQUFhOXhCLE1BQVE2eEIsRUFBUUssRUFBU0YsS0FHeERELEVBQWFILEVBQVM3eEIsTUFBTUMsS0FBTWt5QixHQUNsQ0QsR0FBYSxFQUNiSCxFQUFXOXhCLEtBQ1hneUIsRUFBV0UsR0FMQUgsQ0FPZixDQUVKLDBCQ3BDSUksRUFEaUQsaUJBQWhCQyxhQUF1RCxtQkFBcEJBLFlBQVlELElBQ2hELFdBQ2xDLE9BQU9DLFlBQVlELEtBQ3JCLEVBQUksV0FDRixPQUFPbnJCLEtBQUttckIsS0FDZCxFQUNBLFNBQVNFLEVBQWNDLEdBQ3JCQyxxQkFBcUJELEVBQVVFLEdBQ2pDLENBQ0EsU0FBU0MsRUFBZTF4QixFQUFVMnhCLEdBQ2hDLElBQUlDLEVBQVFSLElBVVJHLEVBQVksQ0FDZEUsR0FBSUksdUJBVE4sU0FBU0MsSUFDSFYsSUFBUVEsR0FBU0QsRUFDbkIzeEIsRUFBU2pCLEtBQUssTUFFZHd5QixFQUFVRSxHQUFLSSxzQkFBc0JDLEVBRXpDLEtBS0EsT0FBT1AsQ0FDVCxDQUVBLElBQUlRLEdBQVEsRUFFWixTQUFTQyxFQUFpQkMsR0FLeEIsUUFKb0IsSUFBaEJBLElBQ0ZBLEdBQWMsSUFHRixJQUFWRixHQUFlRSxFQUFhLENBQzlCLElBQUlDLEVBQU0xeEIsU0FBU3FQLGNBQWMsT0FDN0JxRSxFQUFRZ2UsRUFBSWhlLE1BQ2hCQSxFQUFNRyxNQUFRLE9BQ2RILEVBQU1JLE9BQVMsT0FDZkosRUFBTWllLFNBQVcsU0FDakIzeEIsU0FBU3FDLEtBQUt1dkIsWUFBWUYsR0FDMUJILEVBQU9HLEVBQUlHLFlBQWNILEVBQUlJLFlBQzdCOXhCLFNBQVNxQyxLQUFLMHZCLFlBQVlMLEVBQzVCLENBRUEsT0FBT0gsQ0FDVCxDQUNBLElBQUlTLEVBQWtCLEtBT3RCLFNBQVNDLEVBQWlCUixHQUt4QixRQUpvQixJQUFoQkEsSUFDRkEsR0FBYyxHQUdRLE9BQXBCTyxHQUE0QlAsRUFBYSxDQUMzQyxJQUFJUyxFQUFXbHlCLFNBQVNxUCxjQUFjLE9BQ2xDOGlCLEVBQWFELEVBQVN4ZSxNQUMxQnllLEVBQVd0ZSxNQUFRLE9BQ25Cc2UsRUFBV3JlLE9BQVMsT0FDcEJxZSxFQUFXUixTQUFXLFNBQ3RCUSxFQUFXQyxVQUFZLE1BQ3ZCLElBQUlDLEVBQVdyeUIsU0FBU3FQLGNBQWMsT0FDbENpakIsRUFBYUQsRUFBUzNlLE1BbUIxQixPQWxCQTRlLEVBQVd6ZSxNQUFRLFFBQ25CeWUsRUFBV3hlLE9BQVMsUUFDcEJvZSxFQUFTTixZQUFZUyxHQUNyQnJ5QixTQUFTcUMsS0FBS3V2QixZQUFZTSxHQUV0QkEsRUFBU0ssV0FBYSxFQUN4QlAsRUFBa0IsdUJBRWxCRSxFQUFTSyxXQUFhLEVBR3BCUCxFQUQwQixJQUF4QkUsRUFBU0ssV0FDTyxXQUVBLHNCQUl0QnZ5QixTQUFTcUMsS0FBSzB2QixZQUFZRyxHQUNuQkYsQ0FDVCxDQUVBLE9BQU9BLENBQ1QsQ0FFQSxJQUFJUSxFQUFpQyxJQUVqQ0MsRUFBaUIsU0FBd0JwVyxHQUMzQyxJQUFJcVcsRUFBY3JXLEVBQUtxVyxZQUd2QixPQUZXclcsRUFBS2hiLEtBQ0RnYixFQUFLc1csU0FDRixJQUFNRCxDQUMxQixFQWdCQSxTQUFTRSxFQUFvQnJTLEdBQzNCLElBQUlzUyxFQUVBQyxFQUFrQnZTLEVBQU11UyxnQkFDeEJDLEVBQStCeFMsRUFBTXdTLDZCQUNyQ0MsRUFBa0N6UyxFQUFNeVMsZ0NBQ3hDQyxFQUFpQjFTLEVBQU0wUyxlQUN2QkMsRUFBMEIzUyxFQUFNMlMsd0JBQ2hDQyxFQUF5QjVTLEVBQU00Uyx1QkFDL0JDLEVBQWlDN1MsRUFBTTZTLCtCQUN2Q0MsRUFBOEI5UyxFQUFNOFMsNEJBQ3BDQyxFQUFlL1MsRUFBTStTLGFBQ3JCQyxFQUFlaFQsRUFBTWdULGFBQ3JCQyxFQUE0QmpULEVBQU1pVCwwQkFDbENDLEVBQStCbFQsRUFBTWtULDZCQUNyQ0MsRUFBb0JuVCxFQUFNbVQsa0JBQzFCQyxFQUF3Q3BULEVBQU1vVCxzQ0FDOUNDLEVBQWdCclQsRUFBTXFULGNBQzFCLE9BQU9mLEVBQXNCLFNBQVVoRyxHQU1yQyxTQUFTZ0gsRUFBS25sQixHQUNaLElBQUl4TixFQTRKSixPQTFKQUEsRUFBUTJyQixFQUFldHVCLEtBQUtFLEtBQU1pUSxJQUFValEsTUFDdENxMUIsZUFBaUJKLEVBQWtCeHlCLEVBQU13TixPQUFPLE9BQXVCeE4sSUFDN0VBLEVBQU02eUIsMkJBQTZCLEtBQ25DN3lCLEVBQU04eUIsZUFBWSxFQUNsQjl5QixFQUFNNkQsTUFBUSxDQUNaZ29CLFVBQVUsT0FBdUI3ckIsR0FDakMreUIsYUFBYSxFQUNiQywwQkFBMkIsVUFDM0IzQixXQUFxRCxpQkFBbENyeEIsRUFBTXdOLE1BQU15bEIsa0JBQWlDanpCLEVBQU13TixNQUFNeWxCLGtCQUFvQixFQUNoR3hTLFVBQW1ELGlCQUFqQ3pnQixFQUFNd04sTUFBTTBsQixpQkFBZ0NsekIsRUFBTXdOLE1BQU0wbEIsaUJBQW1CLEVBQzdGQywwQkFBMEIsRUFDMUJDLHdCQUF5QixXQUUzQnB6QixFQUFNcXpCLDBCQUF1QixFQUM3QnJ6QixFQUFNcXpCLHFCQUF1QixHQUFXLFNBQVVDLEVBQTBCQyxFQUF5QkMsRUFBdUJDLEVBQXNCQyxFQUF5QkMsRUFBd0JDLEVBQXNCQyxHQUN2TixPQUFPN3pCLEVBQU13TixNQUFNcWYsZ0JBQWdCLENBQ2pDeUcseUJBQTBCQSxFQUMxQkMsd0JBQXlCQSxFQUN6QkMsc0JBQXVCQSxFQUN2QkMscUJBQXNCQSxFQUN0QkMsd0JBQXlCQSxFQUN6QkMsdUJBQXdCQSxFQUN4QkMscUJBQXNCQSxFQUN0QkMsb0JBQXFCQSxHQUV6QixJQUNBN3pCLEVBQU04ekIsbUJBQWdCLEVBQ3RCOXpCLEVBQU04ekIsY0FBZ0IsR0FBVyxTQUFVekMsRUFBWTVRLEVBQVd1UyxFQUEyQkksRUFBeUJELEdBQ3BILE9BQU9uekIsRUFBTXdOLE1BQU11bUIsU0FBUyxDQUMxQmYsMEJBQTJCQSxFQUMzQjNCLFdBQVlBLEVBQ1o1USxVQUFXQSxFQUNYMlMsd0JBQXlCQSxFQUN6QkQseUJBQTBCQSxHQUU5QixJQUNBbnpCLEVBQU1nMEIsbUJBQWdCLEVBRXRCaDBCLEVBQU1nMEIsY0FBZ0IsU0FBVXZDLEVBQVVELEdBQ3hDLElBUUloZixFQVJBNlIsRUFBY3JrQixFQUFNd04sTUFDcEJ5bUIsRUFBYzVQLEVBQVk0UCxZQUMxQi9DLEVBQVk3TSxFQUFZNk0sVUFDeEJnRCxFQUFZN1AsRUFBWTZQLFVBRXhCQyxFQUFpQm4wQixFQUFNMHVCLG1CQUFtQitELEdBQXlDd0IsRUFBYXhCLEdBQXlDdkIsRUFBV3VCLEdBQXlDeUIsR0FFN0xoM0IsRUFBTXUwQixFQUFXLElBQU1ELEVBRzNCLEdBQUkyQyxFQUFlLzJCLGVBQWVGLEdBQ2hDc1YsRUFBUTJoQixFQUFlajNCLE9BQ2xCLENBQ0wsSUFBSWszQixFQUFVeEMsRUFBZ0I1eEIsRUFBTXdOLE1BQU9na0IsRUFBYXh4QixFQUFNNHlCLGdCQUUxRHlCLEVBQXNCLFFBQWRuRCxFQUNaaUQsRUFBZWozQixHQUFPc1YsRUFBUSxDQUM1QjJCLFNBQVUsV0FDVlMsS0FBTXlmLE9BQVFqMEIsRUFBWWcwQixFQUMxQnBjLE1BQU9xYyxFQUFRRCxPQUFVaDBCLEVBQ3pCdVUsSUFBSzBkLEVBQWFyeUIsRUFBTXdOLE1BQU9pa0IsRUFBVXp4QixFQUFNNHlCLGdCQUMvQ2hnQixPQUFRd2YsRUFBYXB5QixFQUFNd04sTUFBT2lrQixFQUFVenhCLEVBQU00eUIsZ0JBQ2xEamdCLE1BQU9vZixFQUFlL3hCLEVBQU13TixNQUFPZ2tCLEVBQWF4eEIsRUFBTTR5QixnQkFFMUQsQ0FFQSxPQUFPcGdCLENBQ1QsRUFFQXhTLEVBQU0wdUIsd0JBQXFCLEVBQzNCMXVCLEVBQU0wdUIsbUJBQXFCLEdBQVcsU0FBVWx0QixFQUFHaUosRUFBSTZwQixHQUNyRCxNQUFPLENBQUMsQ0FDVixJQUVBdDBCLEVBQU11MEIsVUFBWSxTQUFVNTFCLEdBQzFCLElBQUk2MUIsRUFBdUI3MUIsRUFBTW1WLGNBQzdCMmdCLEVBQWVELEVBQXFCQyxhQUNwQzdELEVBQWM0RCxFQUFxQjVELFlBQ25DUyxFQUFhbUQsRUFBcUJuRCxXQUNsQzVRLEVBQVkrVCxFQUFxQi9ULFVBQ2pDaVUsRUFBZUYsRUFBcUJFLGFBQ3BDQyxFQUFjSCxFQUFxQkcsWUFFdkMzMEIsRUFBTTJpQixVQUFTLFNBQVVmLEdBQ3ZCLEdBQUlBLEVBQVV5UCxhQUFlQSxHQUFjelAsRUFBVW5CLFlBQWNBLEVBSWpFLE9BQU8sS0FHVCxJQUFJeVEsRUFBWWx4QixFQUFNd04sTUFBTTBqQixVQUt4QjBELEVBQXVCdkQsRUFFM0IsR0FBa0IsUUFBZEgsRUFDRixPQUFRSCxLQUNOLElBQUssV0FDSDZELEdBQXdCdkQsRUFDeEIsTUFFRixJQUFLLHNCQUNIdUQsRUFBdUJELEVBQWMvRCxFQUFjUyxFQU16RHVELEVBQXVCNXBCLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSWdILEVBQXNCRCxFQUFjL0QsSUFDaEYsSUFBSWlFLEVBQXNCN3BCLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSW5OLEVBQVdpVSxFQUFlRCxJQUN6RSxNQUFPLENBQ0wxQixhQUFhLEVBQ2JDLDBCQUEyQnBSLEVBQVV5UCxXQUFhQSxFQUFhLFVBQVksV0FDM0VBLFdBQVl1RCxFQUNablUsVUFBV29VLEVBQ1h6Qix3QkFBeUJ4UixFQUFVbkIsVUFBWUEsRUFBWSxVQUFZLFdBQ3ZFMFMsMEJBQTBCLEVBRTlCLEdBQUduekIsRUFBTTgwQiwyQkFDWCxFQUVBOTBCLEVBQU0rMEIsZ0JBQWtCLFNBQVV4MkIsR0FDaEMsSUFBSXkyQixFQUFXaDFCLEVBQU13TixNQUFNd25CLFNBQzNCaDFCLEVBQU04eUIsVUFBWXYwQixFQUVNLG1CQUFieTJCLEVBQ1RBLEVBQVN6MkIsR0FDWSxNQUFaeTJCLEdBQXdDLGlCQUFiQSxHQUF5QkEsRUFBUzUzQixlQUFlLGFBQ3JGNDNCLEVBQVNwMkIsUUFBVUwsRUFFdkIsRUFFQXlCLEVBQU04MEIsMkJBQTZCLFdBQ1EsT0FBckM5MEIsRUFBTTZ5Qiw0QkFDUmpELEVBQWM1dkIsRUFBTTZ5Qiw0QkFHdEI3eUIsRUFBTTZ5QiwyQkFBNkI3QyxFQUFlaHdCLEVBQU1pMUIsa0JBQW1CM0QsRUFDN0UsRUFFQXR4QixFQUFNaTFCLGtCQUFvQixXQUN4QmoxQixFQUFNNnlCLDJCQUE2QixLQUVuQzd5QixFQUFNMmlCLFNBQVMsQ0FDYm9RLGFBQWEsSUFDWixXQUdEL3lCLEVBQU0wdUIsb0JBQW9CLEVBQzVCLEdBQ0YsRUFFTzF1QixDQUNULEVBbktBLE9BQWUyeUIsRUFBTWhILEdBcUtyQmdILEVBQUtoUix5QkFBMkIsU0FBa0NpRixFQUFXaEYsR0FHM0UsT0FGQXNULEVBQW9CdE8sRUFBV2hGLEdBQy9COFEsRUFBYzlMLEdBQ1AsSUFDVCxFQUVBLElBQUkvRSxFQUFTOFEsRUFBS3gxQixVQXFUbEIsT0FuVEEwa0IsRUFBT3NULFNBQVcsU0FBa0JqUixHQUNsQyxJQUFJbU4sRUFBYW5OLEVBQU1tTixXQUNuQjVRLEVBQVl5RCxFQUFNekQsZUFFSHJnQixJQUFmaXhCLElBQ0ZBLEVBQWFybUIsS0FBSzZpQixJQUFJLEVBQUd3RCxTQUdUanhCLElBQWRxZ0IsSUFDRkEsRUFBWXpWLEtBQUs2aUIsSUFBSSxFQUFHcE4sSUFHMUJsakIsS0FBS29sQixVQUFTLFNBQVVmLEdBU3RCLFlBUm1CeGhCLElBQWZpeEIsSUFDRkEsRUFBYXpQLEVBQVV5UCxpQkFHUGp4QixJQUFkcWdCLElBQ0ZBLEVBQVltQixFQUFVbkIsV0FHcEJtQixFQUFVeVAsYUFBZUEsR0FBY3pQLEVBQVVuQixZQUFjQSxFQUMxRCxLQUdGLENBQ0x1UywwQkFBMkJwUixFQUFVeVAsV0FBYUEsRUFBYSxVQUFZLFdBQzNFQSxXQUFZQSxFQUNaNVEsVUFBV0EsRUFDWDBTLDBCQUEwQixFQUMxQkMsd0JBQXlCeFIsRUFBVW5CLFVBQVlBLEVBQVksVUFBWSxXQUUzRSxHQUFHbGpCLEtBQUt1M0IsMkJBQ1YsRUFFQWpULEVBQU91VCxhQUFlLFNBQXNCMUssR0FDMUMsSUFBSTJLLEVBQWMzSyxFQUFNNEssTUFDcEJBLE9BQXdCLElBQWhCRCxFQUF5QixPQUFTQSxFQUMxQzdELEVBQWM5RyxFQUFNOEcsWUFDcEJDLEVBQVcvRyxFQUFNK0csU0FDakI4RCxFQUFlaDRCLEtBQUtpUSxNQUNwQmdvQixFQUFjRCxFQUFhQyxZQUMzQjVpQixFQUFTMmlCLEVBQWEzaUIsT0FDdEI2aUIsRUFBV0YsRUFBYUUsU0FDeEI5aUIsRUFBUTRpQixFQUFhNWlCLE1BQ3JCcVksRUFBY3p0QixLQUFLc0csTUFDbkJ3dEIsRUFBYXJHLEVBQVlxRyxXQUN6QjVRLEVBQVl1SyxFQUFZdkssVUFDeEJpVixFQUFnQnBGLFNBRUFsd0IsSUFBaEJveEIsSUFDRkEsRUFBY3htQixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUk0RCxFQUFhZ0UsRUFBYyxVQUcvQ3AxQixJQUFicXhCLElBQ0ZBLEVBQVd6bUIsS0FBSzZpQixJQUFJLEVBQUc3aUIsS0FBSzRpQixJQUFJNkQsRUFBVWdFLEVBQVcsS0FHdkQsSUFBSUUsRUFBdUIzRCxFQUF3QnowQixLQUFLaVEsTUFBT2pRLEtBQUtxMUIsZ0JBS2hFZ0QsRUFKc0IzRCxFQUF1QjEwQixLQUFLaVEsTUFBT2pRLEtBQUtxMUIsZ0JBSWRqZ0IsRUFBUStpQixFQUFnQixFQUN4RUcsRUFBd0JGLEVBQXVCL2lCLEVBQVM4aUIsRUFBZ0IsRUFDNUVuNEIsS0FBSzQzQixTQUFTLENBQ1o5RCxnQkFBNEJqeEIsSUFBaEJveEIsRUFBNEJVLEVBQStCMzBCLEtBQUtpUSxNQUFPZ2tCLEVBQWE4RCxFQUFPakUsRUFBWTl6QixLQUFLcTFCLGVBQWdCaUQsR0FBeUJ4RSxFQUNqSzVRLGVBQXdCcmdCLElBQWJxeEIsRUFBeUJVLEVBQTRCNTBCLEtBQUtpUSxNQUFPaWtCLEVBQVU2RCxFQUFPN1UsRUFBV2xqQixLQUFLcTFCLGVBQWdCZ0QsR0FBMkJuVixHQUU1SixFQUVBb0IsRUFBT0Msa0JBQW9CLFdBQ3pCLElBQUlnVSxFQUFldjRCLEtBQUtpUSxNQUNwQnlsQixFQUFvQjZDLEVBQWE3QyxrQkFDakNDLEVBQW1CNEMsRUFBYTVDLGlCQUVwQyxHQUFzQixNQUFsQjMxQixLQUFLdTFCLFVBQW1CLENBQzFCLElBQUlrQyxFQUFXejNCLEtBQUt1MUIsVUFFYSxpQkFBdEJHLElBQ1QrQixFQUFTM0QsV0FBYTRCLEdBR1EsaUJBQXJCQyxJQUNUOEIsRUFBU3ZVLFVBQVl5UyxFQUV6QixDQUVBMzFCLEtBQUt3NEIscUJBQ1AsRUFFQWxVLEVBQU9HLG1CQUFxQixXQUMxQixJQUFJa1AsRUFBWTN6QixLQUFLaVEsTUFBTTBqQixVQUN2QjhFLEVBQWV6NEIsS0FBS3NHLE1BQ3BCd3RCLEVBQWEyRSxFQUFhM0UsV0FDMUI1USxFQUFZdVYsRUFBYXZWLFVBRzdCLEdBRitCdVYsRUFBYTdDLDBCQUVNLE1BQWxCNTFCLEtBQUt1MUIsVUFBbUIsQ0FJdEQsSUFBSWtDLEVBQVd6M0IsS0FBS3UxQixVQUVwQixHQUFrQixRQUFkNUIsRUFDRixPQUFRSCxLQUNOLElBQUssV0FDSGlFLEVBQVMzRCxZQUFjQSxFQUN2QixNQUVGLElBQUsscUJBQ0gyRCxFQUFTM0QsV0FBYUEsRUFDdEIsTUFFRixRQUNFLElBQUlULEVBQWNvRSxFQUFTcEUsWUFDdkIrRCxFQUFjSyxFQUFTTCxZQUMzQkssRUFBUzNELFdBQWFzRCxFQUFjL0QsRUFBY1MsT0FJdEQyRCxFQUFTM0QsV0FBYXJtQixLQUFLNmlCLElBQUksRUFBR3dELEdBR3BDMkQsRUFBU3ZVLFVBQVl6VixLQUFLNmlCLElBQUksRUFBR3BOLEVBQ25DLENBRUFsakIsS0FBS3c0QixxQkFDUCxFQUVBbFUsRUFBT00scUJBQXVCLFdBQ1ksT0FBcEM1a0IsS0FBS3MxQiw0QkFDUGpELEVBQWNyeUIsS0FBS3MxQiwyQkFFdkIsRUFFQWhSLEVBQU91QyxPQUFTLFdBQ2QsSUFBSTZSLEVBQWUxNEIsS0FBS2lRLE1BQ3BCcUMsRUFBV29tQixFQUFhcG1CLFNBQ3hCcUUsRUFBWStoQixFQUFhL2hCLFVBQ3pCc2hCLEVBQWNTLEVBQWFULFlBQzNCdEUsRUFBWStFLEVBQWEvRSxVQUN6QnRlLEVBQVNxakIsRUFBYXJqQixPQUN0QnNqQixFQUFXRCxFQUFhQyxTQUN4QkMsRUFBbUJGLEVBQWFFLGlCQUNoQ0MsRUFBZUgsRUFBYUcsYUFDNUJDLEVBQVdKLEVBQWFJLFNBQ3hCQyxFQUF1QkwsRUFBYU0sUUFDcENBLE9BQW1DLElBQXpCRCxFQUFrQy9FLEVBQWlCK0UsRUFDN0RFLEVBQW1CUCxFQUFhTyxpQkFDaENDLEVBQWVSLEVBQWFRLGFBQzVCaEIsRUFBV1EsRUFBYVIsU0FDeEJqakIsRUFBUXlqQixFQUFhempCLE1BQ3JCa2tCLEVBQWlCVCxFQUFhUyxlQUM5Qi9qQixFQUFRc2pCLEVBQWF0akIsTUFDckJvZ0IsRUFBY3gxQixLQUFLc0csTUFBTWt2QixZQUV6QjRELEVBQXdCcDVCLEtBQUtxNUIsOEJBQzdCQyxFQUFtQkYsRUFBc0IsR0FDekNHLEVBQWtCSCxFQUFzQixHQUV4Q0ksRUFBd0J4NUIsS0FBS3k1Qiw0QkFDN0JDLEVBQWdCRixFQUFzQixHQUN0Q0csRUFBZUgsRUFBc0IsR0FFckNJLEVBQVEsR0FFWixHQUFJM0IsRUFBYyxHQUFLQyxFQUNyQixJQUFLLElBQUkyQixFQUFZSCxFQUFlRyxHQUFhRixFQUFjRSxJQUM3RCxJQUFLLElBQUlDLEVBQWVSLEVBQWtCUSxHQUFnQlAsRUFBaUJPLElBQ3pFRixFQUFNdjNCLE1BQUssSUFBQXVPLGVBQWMwQixFQUFVLENBQ2pDMmhCLFlBQWE2RixFQUNibDNCLEtBQU1rMkIsRUFDTnRELFlBQWEyRCxFQUFpQjNELE9BQWMzeUIsRUFDNUNsRCxJQUFLcTVCLEVBQVEsQ0FDWC9FLFlBQWE2RixFQUNibDNCLEtBQU1rMkIsRUFDTjVFLFNBQVUyRixJQUVaM0YsU0FBVTJGLEVBQ1Y1a0IsTUFBT2pWLEtBQUt5MkIsY0FBY29ELEVBQVdDLE1BUTdDLElBQUkxQixFQUF1QjNELEVBQXdCejBCLEtBQUtpUSxNQUFPalEsS0FBS3ExQixnQkFDaEUwRSxFQUFzQnJGLEVBQXVCMTBCLEtBQUtpUSxNQUFPalEsS0FBS3ExQixnQkFDbEUsT0FBTyxJQUFBemtCLGVBQWNxb0IsR0FBb0JDLEdBQWdCLE1BQU8sQ0FDOUR2aUIsVUFBV0EsRUFDWDZmLFNBQVV4MkIsS0FBS2czQixVQUNmaDJCLElBQUtoQixLQUFLdzNCLGdCQUNWdmlCLE9BQU8sT0FBUyxDQUNkMkIsU0FBVSxXQUNWdkIsT0FBUUEsRUFDUkQsTUFBT0EsRUFDUDhkLFNBQVUsT0FDVjhHLHdCQUF5QixRQUN6QkMsV0FBWSxZQUNadEcsVUFBV0EsR0FDVjFlLEtBQ0YsSUFBQXJFLGVBQWNnb0IsR0FBb0JDLEdBQWdCLE1BQU8sQ0FDMUR2bUIsU0FBVXNuQixFQUNWNTRCLElBQUsyM0IsRUFDTDFqQixNQUFPLENBQ0xJLE9BQVEraUIsRUFDUnJoQixjQUFleWUsRUFBYyxZQUFTM3lCLEVBQ3RDdVMsTUFBTzJrQixLQUdiLEVBRUF6VixFQUFPa1Usb0JBQXNCLFdBQzNCLElBQUkwQixFQUFlbDZCLEtBQUtpUSxNQUNwQmdvQixFQUFjaUMsRUFBYWpDLFlBQzNCM0ksRUFBa0I0SyxFQUFhNUssZ0JBQy9Ca0gsRUFBVzBELEVBQWExRCxTQUN4QjBCLEVBQVdnQyxFQUFhaEMsU0FFNUIsR0FBK0IsbUJBQXBCNUksR0FDTDJJLEVBQWMsR0FBS0MsRUFBVyxFQUFHLENBQ25DLElBQUlpQyxFQUF5Qm42QixLQUFLcTVCLDhCQUM5QmUsRUFBNEJELEVBQXVCLEdBQ25ERSxFQUEyQkYsRUFBdUIsR0FDbERHLEVBQTJCSCxFQUF1QixHQUNsREksRUFBMEJKLEVBQXVCLEdBRWpESyxFQUF5Qng2QixLQUFLeTVCLDRCQUM5QmdCLEVBQXlCRCxFQUF1QixHQUNoREUsRUFBd0JGLEVBQXVCLEdBQy9DRyxFQUF3QkgsRUFBdUIsR0FDL0NJLEVBQXVCSixFQUF1QixHQUVsRHg2QixLQUFLODFCLHFCQUFxQnNFLEVBQTJCQyxFQUEwQkksRUFBd0JDLEVBQXVCSixFQUEwQkMsRUFBeUJJLEVBQXVCQyxFQUMxTSxDQUdGLEdBQXdCLG1CQUFicEUsRUFBeUIsQ0FDbEMsSUFBSXFFLEVBQWU3NkIsS0FBS3NHLE1BQ3BCdzBCLEVBQTZCRCxFQUFhcEYsMEJBQzFDc0YsRUFBY0YsRUFBYS9HLFdBQzNCa0gsRUFBYUgsRUFBYTNYLFVBQzFCK1gsRUFBNEJKLEVBQWFqRix5QkFDekNzRixFQUEyQkwsRUFBYWhGLHdCQUU1QzcxQixLQUFLdTJCLGNBQWN3RSxFQUFhQyxFQUFZRixFQUE0QkksRUFBMEJELEVBQ3BHLENBQ0YsRUFNQTNXLEVBQU8rVSw0QkFBOEIsV0FDbkMsSUFBSThCLEVBQWVuN0IsS0FBS2lRLE1BQ3BCZ29CLEVBQWNrRCxFQUFhbEQsWUFDM0JtRCxFQUFzQkQsRUFBYUMsb0JBQ25DQyxFQUF1QkYsRUFBYUUscUJBQ3BDQyxFQUFnQkgsRUFBYUcsY0FDN0JwRCxFQUFXaUQsRUFBYWpELFNBQ3hCcUQsRUFBZXY3QixLQUFLc0csTUFDcEJtdkIsRUFBNEI4RixFQUFhOUYsMEJBQ3pDRCxFQUFjK0YsRUFBYS9GLFlBQzNCMUIsRUFBYXlILEVBQWF6SCxXQUMxQjBILEVBQXdCSixHQUF1QkMsR0FBd0JDLEdBQWlCLEVBRTVGLEdBQW9CLElBQWhCckQsR0FBa0MsSUFBYkMsRUFDdkIsTUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBR25CLElBQUkzSSxFQUFhK0UsRUFBNkJ0MEIsS0FBS2lRLE1BQU82akIsRUFBWTl6QixLQUFLcTFCLGdCQUN2RTdGLEVBQVkrRSxFQUFnQ3YwQixLQUFLaVEsTUFBT3NmLEVBQVl1RSxFQUFZOXpCLEtBQUtxMUIsZ0JBR3JGb0csRUFBb0JqRyxHQUE2QyxhQUE5QkMsRUFBZ0YsRUFBckNob0IsS0FBSzZpQixJQUFJLEVBQUdrTCxHQUMxRkUsRUFBbUJsRyxHQUE2QyxZQUE5QkMsRUFBK0UsRUFBckNob0IsS0FBSzZpQixJQUFJLEVBQUdrTCxHQUM1RixNQUFPLENBQUMvdEIsS0FBSzZpQixJQUFJLEVBQUdmLEVBQWFrTSxHQUFtQmh1QixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUk0SCxFQUFjLEVBQUd6SSxFQUFZa00sSUFBbUJuTSxFQUFZQyxFQUN2SSxFQUVBbEwsRUFBT21WLDBCQUE0QixXQUNqQyxJQUFJa0MsRUFBZTM3QixLQUFLaVEsTUFDcEJnb0IsRUFBYzBELEVBQWExRCxZQUMzQnFELEVBQWdCSyxFQUFhTCxjQUM3Qk0sRUFBbUJELEVBQWFDLGlCQUNoQ0MsRUFBb0JGLEVBQWFFLGtCQUNqQzNELEVBQVd5RCxFQUFhekQsU0FDeEI0RCxFQUFlOTdCLEtBQUtzRyxNQUNwQmt2QixFQUFjc0csRUFBYXRHLFlBQzNCSyxFQUEwQmlHLEVBQWFqRyx3QkFDdkMzUyxFQUFZNFksRUFBYTVZLFVBQ3pCc1ksRUFBd0JJLEdBQW9CQyxHQUFxQlAsR0FBaUIsRUFFdEYsR0FBb0IsSUFBaEJyRCxHQUFrQyxJQUFiQyxFQUN2QixNQUFPLENBQUMsRUFBRyxFQUFHLEVBQUcsR0FHbkIsSUFBSTNJLEVBQWF3RixFQUEwQi8wQixLQUFLaVEsTUFBT2lULEVBQVdsakIsS0FBS3ExQixnQkFDbkU3RixFQUFZd0YsRUFBNkJoMUIsS0FBS2lRLE1BQU9zZixFQUFZck0sRUFBV2xqQixLQUFLcTFCLGdCQUdqRm9HLEVBQW9CakcsR0FBMkMsYUFBNUJLLEVBQThFLEVBQXJDcG9CLEtBQUs2aUIsSUFBSSxFQUFHa0wsR0FDeEZFLEVBQW1CbEcsR0FBMkMsWUFBNUJLLEVBQTZFLEVBQXJDcG9CLEtBQUs2aUIsSUFBSSxFQUFHa0wsR0FDMUYsTUFBTyxDQUFDL3RCLEtBQUs2aUIsSUFBSSxFQUFHZixFQUFha00sR0FBbUJodUIsS0FBSzZpQixJQUFJLEVBQUc3aUIsS0FBSzRpQixJQUFJNkgsRUFBVyxFQUFHMUksRUFBWWtNLElBQW1Cbk0sRUFBWUMsRUFDcEksRUFFTzRGLENBQ1QsQ0FsZTZCLENBa2UzQixFQUFBL0QsZ0JBQXVCbkssYUFBZSxDQUN0Q3lNLFVBQVcsTUFDWG1GLGNBQVVqMkIsRUFDVnMyQixnQkFBZ0IsR0FDZi9FLENBQ0wsQ0FFQSxJQUFJdUQsRUFBc0IsU0FBNkJvRSxFQUFPQyxHQUM3Q0QsRUFBTXpwQixTQUNMeXBCLEVBQU1wSSxVQUNUb0ksRUFBTTFtQixPQUNBMG1CLEVBQU1sRCxhQUNOa0QsRUFBTTdDLGFBQ0U2QyxFQUFNVixxQkFDYlUsRUFBTVQsY0FDRlMsRUFBTUYsa0JBQ2xCRSxFQUFNM21CLE1BQ0g0bUIsRUFBTTFOLFFBOEN2QixFQUlJbUcsRUFBMEIsU0FBaUM3VyxFQUFNa0UsR0FDbkUsSUFBSW9XLEVBQVd0YSxFQUFLc2EsU0FDaEIrRCxFQUFpQm5hLEVBQU1tYSxlQUN2QkMsRUFBcUJwYSxFQUFNb2EsbUJBQzNCQyxFQUF1QnJhLEVBQU1xYSxxQkFDN0JDLEVBQTBCLEVBTzlCLEdBSklELEdBQXdCakUsSUFDMUJpRSxFQUF1QmpFLEVBQVcsR0FHaENpRSxHQUF3QixFQUFHLENBQzdCLElBQUlFLEVBQWVKLEVBQWVFLEdBQ2xDQyxFQUEwQkMsRUFBYUMsT0FBU0QsRUFBYXZKLElBQy9ELENBSUEsT0FBT3NKLEdBRmtCbEUsRUFBV2lFLEVBQXVCLEdBQ0xELENBRXhELEVBRUl4SCxFQUF5QixTQUFnQy9OLEVBQU93RyxHQUNsRSxJQUFJOEssRUFBY3RSLEVBQU1zUixZQUNwQnNFLEVBQW9CcFAsRUFBTW9QLGtCQUMxQkMsRUFBdUJyUCxFQUFNcVAscUJBQzdCQyxFQUEwQnRQLEVBQU1zUCx3QkFDaENMLEVBQTBCLEVBTzlCLEdBSklLLEdBQTJCeEUsSUFDN0J3RSxFQUEwQnhFLEVBQWMsR0FHdEN3RSxHQUEyQixFQUFHLENBQ2hDLElBQUlKLEVBQWVFLEVBQWtCRSxHQUNyQ0wsRUFBMEJDLEVBQWFDLE9BQVNELEVBQWF2SixJQUMvRCxDQUlBLE9BQU9zSixHQUZrQm5FLEVBQWN3RSxFQUEwQixHQUNYRCxDQUV4RCxFQUVJRSxFQUFrQixTQUF5QkMsRUFBVTFzQixFQUFPaEosRUFBTzIxQixHQUNyRSxJQUFJQyxFQUFpQkMsRUFBVUMsRUFZL0IsR0FWaUIsV0FBYkosR0FDRkUsRUFBa0JELEVBQWNMLGtCQUNoQ08sRUFBVzdzQixFQUFNeW1CLFlBQ2pCcUcsRUFBb0JILEVBQWNILDBCQUVsQ0ksRUFBa0JELEVBQWNYLGVBQ2hDYSxFQUFXN3NCLEVBQU0wbUIsVUFDakJvRyxFQUFvQkgsRUFBY1Qsc0JBR2hDbDFCLEVBQVE4MUIsRUFBbUIsQ0FDN0IsSUFBSVQsRUFBUyxFQUViLEdBQUlTLEdBQXFCLEVBQUcsQ0FDMUIsSUFBSVYsRUFBZVEsRUFBZ0JFLEdBQ25DVCxFQUFTRCxFQUFhQyxPQUFTRCxFQUFhdkosSUFDOUMsQ0FFQSxJQUFLLElBQUl2ekIsRUFBSXc5QixFQUFvQixFQUFHeDlCLEdBQUswSCxFQUFPMUgsSUFBSyxDQUNuRCxJQUFJdXpCLEVBQU9nSyxFQUFTdjlCLEdBQ3BCczlCLEVBQWdCdDlCLEdBQUssQ0FDbkIrOEIsT0FBUUEsRUFDUnhKLEtBQU1BLEdBRVJ3SixHQUFVeEosQ0FDWixDQUVpQixXQUFiNkosRUFDRkMsRUFBY0gsd0JBQTBCeDFCLEVBRXhDMjFCLEVBQWNULHFCQUF1QmwxQixDQUV6QyxDQUVBLE9BQU80MUIsRUFBZ0I1MUIsRUFDekIsRUFFSSsxQixFQUFrQixTQUF5QkwsRUFBVTFzQixFQUFPMnNCLEVBQWVOLEdBQzdFLElBQUlPLEVBQWlCRSxFQVlyQixNQVZpQixXQUFiSixHQUNGRSxFQUFrQkQsRUFBY0wsa0JBQ2hDUSxFQUFvQkgsRUFBY0gsMEJBRWxDSSxFQUFrQkQsRUFBY1gsZUFDaENjLEVBQW9CSCxFQUFjVCx1QkFHUFksRUFBb0IsRUFBSUYsRUFBZ0JFLEdBQW1CVCxPQUFTLElBRW5FQSxFQUVyQlcsRUFBNEJOLEVBQVUxc0IsRUFBTzJzQixFQUFlRyxFQUFtQixFQUFHVCxHQUtsRlksRUFBaUNQLEVBQVUxc0IsRUFBTzJzQixFQUFlbnZCLEtBQUs2aUIsSUFBSSxFQUFHeU0sR0FBb0JULEVBRTVHLEVBRUlXLEVBQThCLFNBQXFDTixFQUFVMXNCLEVBQU8yc0IsRUFBZU8sRUFBTUMsRUFBS2QsR0FDaEgsS0FBT2MsR0FBT0QsR0FBTSxDQUNsQixJQUFJRSxFQUFTRCxFQUFNM3ZCLEtBQUs2dkIsT0FBT0gsRUFBT0MsR0FBTyxHQUN6Q0csRUFBZ0JiLEVBQWdCQyxFQUFVMXNCLEVBQU9vdEIsRUFBUVQsR0FBZU4sT0FFNUUsR0FBSWlCLElBQWtCakIsRUFDcEIsT0FBT2UsRUFDRUUsRUFBZ0JqQixFQUN6QmMsRUFBTUMsRUFBUyxFQUNORSxFQUFnQmpCLElBQ3pCYSxFQUFPRSxFQUFTLEVBRXBCLENBRUEsT0FBSUQsRUFBTSxFQUNEQSxFQUFNLEVBRU4sQ0FFWCxFQUVJRixFQUFtQyxTQUEwQ1AsRUFBVTFzQixFQUFPMnNCLEVBQWUzMUIsRUFBT3ExQixHQUl0SCxJQUhBLElBQUkzTSxFQUF5QixXQUFiZ04sRUFBd0Ixc0IsRUFBTWdvQixZQUFjaG9CLEVBQU1pb0IsU0FDOURzRixFQUFXLEVBRVJ2MkIsRUFBUTBvQixHQUFhK00sRUFBZ0JDLEVBQVUxc0IsRUFBT2hKLEVBQU8yMUIsR0FBZU4sT0FBU0EsR0FDMUZyMUIsR0FBU3UyQixFQUNUQSxHQUFZLEVBR2QsT0FBT1AsRUFBNEJOLEVBQVUxc0IsRUFBTzJzQixFQUFlbnZCLEtBQUs0aUIsSUFBSXBwQixFQUFPMG9CLEVBQVksR0FBSWxpQixLQUFLNnZCLE1BQU1yMkIsRUFBUSxHQUFJcTFCLEVBQzVILEVBRUltQixFQUFnQyxTQUF1Q2QsRUFBVTFzQixFQUFPaEosRUFBTzh3QixFQUFPMkYsRUFBY2QsRUFBZXpFLEdBQ3JJLElBQUlyRixFQUFvQixXQUFiNkosRUFBd0Ixc0IsRUFBTW1GLE1BQVFuRixFQUFNb0YsT0FDbkRnbkIsRUFBZUssRUFBZ0JDLEVBQVUxc0IsRUFBT2hKLEVBQU8yMUIsR0FHdkRlLEVBQWtDLFdBQWJoQixFQUF3QmpJLEVBQXVCemtCLEVBQU8yc0IsR0FBaUJuSSxFQUF3QnhrQixFQUFPMnNCLEdBQzNIZ0IsRUFBWW53QixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUlzTixFQUFxQjdLLEVBQU11SixFQUFhQyxTQUN6RXVCLEVBQVlwd0IsS0FBSzZpQixJQUFJLEVBQUcrTCxFQUFhQyxPQUFTeEosRUFBT3FGLEVBQWdCa0UsRUFBYXZKLE1BVXRGLE9BUmMsVUFBVmlGLElBRUFBLEVBREUyRixHQUFnQkcsRUFBWS9LLEdBQVE0SyxHQUFnQkUsRUFBWTlLLEVBQzFELE9BRUEsVUFJSmlGLEdBQ04sSUFBSyxRQUNILE9BQU82RixFQUVULElBQUssTUFDSCxPQUFPQyxFQUVULElBQUssU0FDSCxPQUFPcHdCLEtBQUtxd0IsTUFBTUQsR0FBYUQsRUFBWUMsR0FBYSxHQUcxRCxRQUNFLE9BQUlILEdBQWdCRyxHQUFhSCxHQUFnQkUsRUFDeENGLEVBQ0VHLEVBQVlELEdBSVpGLEVBQWVHLEVBRGpCQSxFQUlBRCxFQUlmLEVBRUlHLEVBQWdDNUosRUFBb0IsQ0FDdERFLGdCQUFpQixTQUF5QnBrQixFQUFPaEosRUFBTzIxQixHQUN0RCxPQUFPRixFQUFnQixTQUFVenNCLEVBQU9oSixFQUFPMjFCLEdBQWVOLE1BQ2hFLEVBQ0FoSSw2QkFBOEIsU0FBc0Nya0IsRUFBTzZqQixFQUFZOEksR0FDckYsT0FBT0ksRUFBZ0IsU0FBVS9zQixFQUFPMnNCLEVBQWU5SSxFQUN6RCxFQUNBUyxnQ0FBaUMsU0FBeUN0a0IsRUFBT3NmLEVBQVl1RSxFQUFZOEksR0FRdkcsSUFQQSxJQUFJM0UsRUFBY2hvQixFQUFNZ29CLFlBQ3BCN2lCLEVBQVFuRixFQUFNbUYsTUFDZGluQixFQUFlSyxFQUFnQixTQUFVenNCLEVBQU9zZixFQUFZcU4sR0FDNURnQixFQUFZOUosRUFBYTFlLEVBQ3pCa25CLEVBQVNELEVBQWFDLE9BQVNELEVBQWF2SixLQUM1Q3RELEVBQVlELEVBRVRDLEVBQVl5SSxFQUFjLEdBQUtxRSxFQUFTc0IsR0FDN0NwTyxJQUNBOE0sR0FBVUksRUFBZ0IsU0FBVXpzQixFQUFPdWYsRUFBV29OLEdBQWU5SixLQUd2RSxPQUFPdEQsQ0FDVCxFQUNBZ0YsZUFBZ0IsU0FBd0J2a0IsRUFBT2hKLEVBQU8yMUIsR0FDcEQsT0FBT0EsRUFBY0wsa0JBQWtCdDFCLEdBQU82ckIsSUFDaEQsRUFDQTJCLHdCQUF5QkEsRUFDekJDLHVCQUF3QkEsRUFDeEJDLCtCQUFnQyxTQUF3QzFrQixFQUFPaEosRUFBTzh3QixFQUFPMkYsRUFBY2QsRUFBZXpFLEdBQ3hILE9BQU9zRixFQUE4QixTQUFVeHRCLEVBQU9oSixFQUFPOHdCLEVBQU8yRixFQUFjZCxFQUFlekUsRUFDbkcsRUFDQXZELDRCQUE2QixTQUFxQzNrQixFQUFPaEosRUFBTzh3QixFQUFPMkYsRUFBY2QsRUFBZXpFLEdBQ2xILE9BQU9zRixFQUE4QixNQUFPeHRCLEVBQU9oSixFQUFPOHdCLEVBQU8yRixFQUFjZCxFQUFlekUsRUFDaEcsRUFDQXJELGFBQWMsU0FBc0I3a0IsRUFBT2hKLEVBQU8yMUIsR0FDaEQsT0FBT0YsRUFBZ0IsTUFBT3pzQixFQUFPaEosRUFBTzIxQixHQUFlTixNQUM3RCxFQUNBekgsYUFBYyxTQUFzQjVrQixFQUFPaEosRUFBTzIxQixHQUNoRCxPQUFPQSxFQUFjWCxlQUFlaDFCLEdBQU82ckIsSUFDN0MsRUFDQWlDLDBCQUEyQixTQUFtQzlrQixFQUFPaVQsRUFBVzBaLEdBQzlFLE9BQU9JLEVBQWdCLE1BQU8vc0IsRUFBTzJzQixFQUFlMVosRUFDdEQsRUFDQThSLDZCQUE4QixTQUFzQy9rQixFQUFPc2YsRUFBWXJNLEVBQVcwWixHQVFoRyxJQVBBLElBQUkxRSxFQUFXam9CLEVBQU1pb0IsU0FDakI3aUIsRUFBU3BGLEVBQU1vRixPQUNmZ25CLEVBQWVLLEVBQWdCLE1BQU96c0IsRUFBT3NmLEVBQVlxTixHQUN6RGdCLEVBQVkxYSxFQUFZN04sRUFDeEJpbkIsRUFBU0QsRUFBYUMsT0FBU0QsRUFBYXZKLEtBQzVDdEQsRUFBWUQsRUFFVEMsRUFBWTBJLEVBQVcsR0FBS29FLEVBQVNzQixHQUMxQ3BPLElBQ0E4TSxHQUFVSSxFQUFnQixNQUFPenNCLEVBQU91ZixFQUFXb04sR0FBZTlKLEtBR3BFLE9BQU90RCxDQUNULEVBQ0F5RixrQkFBbUIsU0FBMkJobEIsRUFBT3FlLEdBQ25ELElBQUl5TixFQUFROXJCLEVBR1Iyc0IsRUFBZ0IsQ0FDbEJMLGtCQUFtQixDQUFDLEVBQ3BCQyxxQkFKeUJULEVBQU1TLHNCQXRQSCxHQTJQNUJOLG1CQUp1QkgsRUFBTUcsb0JBdlBELEdBNFA1Qk8seUJBQTBCLEVBQzFCTixzQkFBdUIsRUFDdkJGLGVBQWdCLENBQUMsR0FrRG5CLE9BL0NBM04sRUFBUzBQLHNCQUF3QixTQUFVL0osRUFBYWdLLFFBQzVCLElBQXRCQSxJQUNGQSxHQUFvQixHQUd0QjNQLEVBQVM0UCxrQkFBa0IsQ0FDekJqSyxZQUFhQSxFQUNiZ0ssa0JBQW1CQSxHQUV2QixFQUVBM1AsRUFBUzZQLG1CQUFxQixTQUFVakssRUFBVStKLFFBQ3RCLElBQXRCQSxJQUNGQSxHQUFvQixHQUd0QjNQLEVBQVM0UCxrQkFBa0IsQ0FDekJoSyxTQUFVQSxFQUNWK0osa0JBQW1CQSxHQUV2QixFQUVBM1AsRUFBUzRQLGtCQUFvQixTQUFVbEMsR0FDckMsSUFBSS9ILEVBQWMrSCxFQUFNL0gsWUFDcEJDLEVBQVc4SCxFQUFNOUgsU0FDakJrSyxFQUF3QnBDLEVBQU1pQyxrQkFDOUJBLE9BQThDLElBQTFCRyxHQUEwQ0EsRUFFdkMsaUJBQWhCbkssSUFDVDJJLEVBQWNILHdCQUEwQmh2QixLQUFLNGlCLElBQUl1TSxFQUFjSCx3QkFBeUJ4SSxFQUFjLElBR2hGLGlCQUFiQyxJQUNUMEksRUFBY1QscUJBQXVCMXVCLEtBQUs0aUIsSUFBSXVNLEVBQWNULHFCQUFzQmpJLEVBQVcsSUFPL0Y1RixFQUFTNkMsb0JBQW9CLEdBRXpCOE0sR0FDRjNQLEVBQVM4QyxhQUViLEVBRU93TCxDQUNULEVBQ0ExSCx1Q0FBdUMsRUFDdkNDLGNBQWUsU0FBdUJrSixHQUNsQkEsRUFBTTNILFlBQ1IySCxFQUFNMUgsU0FTeEIsSUFHRTJILEVBQW1DLElBRW5DQyxFQUFtQixTQUF3QnQzQixFQUFPckUsR0FDcEQsT0FBT3FFLENBQ1QsRUFjQSxTQUFTdTNCLEVBQW9CNWdCLEdBQzNCLElBQUl3VyxFQUVBcUssRUFBZ0I3Z0IsRUFBSzZnQixjQUNyQkMsRUFBd0I5Z0IsRUFBSzhnQixzQkFDN0JDLEVBQWMvZ0IsRUFBSytnQixZQUNuQmxCLEVBQWdDN2YsRUFBSzZmLDhCQUNyQ21CLEVBQXlCaGhCLEVBQUtnaEIsdUJBQzlCQyxFQUE0QmpoQixFQUFLaWhCLDBCQUNqQzVKLEVBQW9CclgsRUFBS3FYLGtCQUN6QkMsRUFBd0N0WCxFQUFLc1gsc0NBQzdDQyxFQUFnQnZYLEVBQUt1WCxjQUN6QixPQUFPZixFQUFzQixTQUFVaEcsR0FNckMsU0FBUzBRLEVBQUs3dUIsR0FDWixJQUFJeE4sRUEwS0osT0F4S0FBLEVBQVEyckIsRUFBZXR1QixLQUFLRSxLQUFNaVEsSUFBVWpRLE1BQ3RDcTFCLGVBQWlCSixFQUFrQnh5QixFQUFNd04sT0FBTyxPQUF1QnhOLElBQzdFQSxFQUFNOHlCLGVBQVksRUFDbEI5eUIsRUFBTTZ5QiwyQkFBNkIsS0FDbkM3eUIsRUFBTTZELE1BQVEsQ0FDWmdvQixVQUFVLE9BQXVCN3JCLEdBQ2pDK3lCLGFBQWEsRUFDYnVKLGdCQUFpQixVQUNqQnJCLGFBQXlELGlCQUFwQ2o3QixFQUFNd04sTUFBTSt1QixvQkFBbUN2OEIsRUFBTXdOLE1BQU0rdUIsb0JBQXNCLEVBQ3RHcEosMEJBQTBCLEdBRTVCbnpCLEVBQU1xekIsMEJBQXVCLEVBQzdCcnpCLEVBQU1xekIscUJBQXVCLEdBQVcsU0FBVW1KLEVBQW9CQyxFQUFtQnJRLEVBQW1CQyxHQUMxRyxPQUFPcnNCLEVBQU13TixNQUFNcWYsZ0JBQWdCLENBQ2pDMlAsbUJBQW9CQSxFQUNwQkMsa0JBQW1CQSxFQUNuQnJRLGtCQUFtQkEsRUFDbkJDLGlCQUFrQkEsR0FFdEIsSUFDQXJzQixFQUFNOHpCLG1CQUFnQixFQUN0Qjl6QixFQUFNOHpCLGNBQWdCLEdBQVcsU0FBVXdJLEVBQWlCckIsRUFBYzlILEdBQ3hFLE9BQU9uekIsRUFBTXdOLE1BQU11bUIsU0FBUyxDQUMxQnVJLGdCQUFpQkEsRUFDakJyQixhQUFjQSxFQUNkOUgseUJBQTBCQSxHQUU5QixJQUNBbnpCLEVBQU1nMEIsbUJBQWdCLEVBRXRCaDBCLEVBQU1nMEIsY0FBZ0IsU0FBVXh2QixHQUM5QixJQU9JZ08sRUFQQTZSLEVBQWNya0IsRUFBTXdOLE1BQ3BCMGpCLEVBQVk3TSxFQUFZNk0sVUFDeEJtSixFQUFXaFcsRUFBWWdXLFNBQ3ZCcUMsRUFBU3JZLEVBQVlxWSxPQUVyQnZJLEVBQWlCbjBCLEVBQU0wdUIsbUJBQW1CK0QsR0FBeUM0SCxFQUFVNUgsR0FBeUNpSyxFQUFRakssR0FBeUN2QixHQUkzTCxHQUFJaUQsRUFBZS8yQixlQUFlb0gsR0FDaENnTyxFQUFRMmhCLEVBQWUzdkIsT0FDbEIsQ0FDTCxJQUFJNHZCLEVBQVU0SCxFQUFjaDhCLEVBQU13TixNQUFPaEosRUFBT3hFLEVBQU00eUIsZ0JBRWxEdkMsRUFBTzZMLEVBQVlsOEIsRUFBTXdOLE1BQU9oSixFQUFPeEUsRUFBTTR5QixnQkFFN0MrSixFQUE2QixlQUFkekwsR0FBeUMsZUFBWHdMLEVBQzdDckksRUFBc0IsUUFBZG5ELEVBQ1IwTCxFQUFtQkQsRUFBZXZJLEVBQVUsRUFDaERELEVBQWUzdkIsR0FBU2dPLEVBQVEsQ0FDOUIyQixTQUFVLFdBQ1ZTLEtBQU15ZixPQUFRajBCLEVBQVl3OEIsRUFDMUI1a0IsTUFBT3FjLEVBQVF1SSxPQUFtQng4QixFQUNsQ3VVLElBQU1nb0IsRUFBeUIsRUFBVnZJLEVBQ3JCeGhCLE9BQVMrcEIsRUFBc0IsT0FBUHRNLEVBQ3hCMWQsTUFBT2dxQixFQUFldE0sRUFBTyxPQUVqQyxDQUVBLE9BQU83ZCxDQUNULEVBRUF4UyxFQUFNMHVCLHdCQUFxQixFQUMzQjF1QixFQUFNMHVCLG1CQUFxQixHQUFXLFNBQVVsdEIsRUFBR2lKLEVBQUk2cEIsR0FDckQsTUFBTyxDQUFDLENBQ1YsSUFFQXQwQixFQUFNNjhCLG9CQUFzQixTQUFVbCtCLEdBQ3BDLElBQUk2MUIsRUFBdUI3MUIsRUFBTW1WLGNBQzdCOGMsRUFBYzRELEVBQXFCNUQsWUFDbkNTLEVBQWFtRCxFQUFxQm5ELFdBQ2xDc0QsRUFBY0gsRUFBcUJHLFlBRXZDMzBCLEVBQU0yaUIsVUFBUyxTQUFVZixHQUN2QixHQUFJQSxFQUFVcVosZUFBaUI1SixFQUk3QixPQUFPLEtBR1QsSUFBSUgsRUFBWWx4QixFQUFNd04sTUFBTTBqQixVQUN4QitKLEVBQWU1SixFQUVuQixHQUFrQixRQUFkSCxFQUtGLE9BQVFILEtBQ04sSUFBSyxXQUNIa0ssR0FBZ0I1SixFQUNoQixNQUVGLElBQUssc0JBQ0g0SixFQUFldEcsRUFBYy9ELEVBQWNTLEVBT2pELE9BREE0SixFQUFlandCLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSXFOLEVBQWN0RyxFQUFjL0QsSUFDekQsQ0FDTG1DLGFBQWEsRUFDYnVKLGdCQUFpQjFhLEVBQVVxWixhQUFlNUosRUFBYSxVQUFZLFdBQ25FNEosYUFBY0EsRUFDZDlILDBCQUEwQixFQUU5QixHQUFHbnpCLEVBQU04MEIsMkJBQ1gsRUFFQTkwQixFQUFNODhCLGtCQUFvQixTQUFVbitCLEdBQ2xDLElBQUlvK0IsRUFBd0JwK0IsRUFBTW1WLGNBQzlCMmdCLEVBQWVzSSxFQUFzQnRJLGFBQ3JDQyxFQUFlcUksRUFBc0JySSxhQUNyQ2pVLEVBQVlzYyxFQUFzQnRjLFVBRXRDemdCLEVBQU0yaUIsVUFBUyxTQUFVZixHQUN2QixHQUFJQSxFQUFVcVosZUFBaUJ4YSxFQUk3QixPQUFPLEtBSVQsSUFBSXdhLEVBQWVqd0IsS0FBSzZpQixJQUFJLEVBQUc3aUIsS0FBSzRpQixJQUFJbk4sRUFBV2lVLEVBQWVELElBQ2xFLE1BQU8sQ0FDTDFCLGFBQWEsRUFDYnVKLGdCQUFpQjFhLEVBQVVxWixhQUFlQSxFQUFlLFVBQVksV0FDckVBLGFBQWNBLEVBQ2Q5SCwwQkFBMEIsRUFFOUIsR0FBR256QixFQUFNODBCLDJCQUNYLEVBRUE5MEIsRUFBTSswQixnQkFBa0IsU0FBVXgyQixHQUNoQyxJQUFJeTJCLEVBQVdoMUIsRUFBTXdOLE1BQU13bkIsU0FDM0JoMUIsRUFBTTh5QixVQUFZdjBCLEVBRU0sbUJBQWJ5MkIsRUFDVEEsRUFBU3oyQixHQUNZLE1BQVp5MkIsR0FBd0MsaUJBQWJBLEdBQXlCQSxFQUFTNTNCLGVBQWUsYUFDckY0M0IsRUFBU3AyQixRQUFVTCxFQUV2QixFQUVBeUIsRUFBTTgwQiwyQkFBNkIsV0FDUSxPQUFyQzkwQixFQUFNNnlCLDRCQUNSakQsRUFBYzV2QixFQUFNNnlCLDRCQUd0Qjd5QixFQUFNNnlCLDJCQUE2QjdDLEVBQWVod0IsRUFBTWkxQixrQkFBbUI0RyxFQUM3RSxFQUVBNzdCLEVBQU1pMUIsa0JBQW9CLFdBQ3hCajFCLEVBQU02eUIsMkJBQTZCLEtBRW5DN3lCLEVBQU0yaUIsU0FBUyxDQUNib1EsYUFBYSxJQUNaLFdBR0QveUIsRUFBTTB1QixvQkFBb0IsRUFBRyxLQUMvQixHQUNGLEVBRU8xdUIsQ0FDVCxFQWpMQSxPQUFlcThCLEVBQU0xUSxHQW1MckIwUSxFQUFLMWEseUJBQTJCLFNBQWtDaUYsRUFBV2hGLEdBRzNFLE9BRkFvYixFQUFzQnBXLEVBQVdoRixHQUNqQzhRLEVBQWM5TCxHQUNQLElBQ1QsRUFFQSxJQUFJL0UsRUFBU3dhLEVBQUtsL0IsVUF3T2xCLE9BdE9BMGtCLEVBQU9zVCxTQUFXLFNBQWtCOEYsR0FDbENBLEVBQWVqd0IsS0FBSzZpQixJQUFJLEVBQUdvTixHQUMzQjE5QixLQUFLb2xCLFVBQVMsU0FBVWYsR0FDdEIsT0FBSUEsRUFBVXFaLGVBQWlCQSxFQUN0QixLQUdGLENBQ0xxQixnQkFBaUIxYSxFQUFVcVosYUFBZUEsRUFBZSxVQUFZLFdBQ3JFQSxhQUFjQSxFQUNkOUgsMEJBQTBCLEVBRTlCLEdBQUc1MUIsS0FBS3UzQiwyQkFDVixFQUVBalQsRUFBT3VULGFBQWUsU0FBc0I1d0IsRUFBTzh3QixRQUNuQyxJQUFWQSxJQUNGQSxFQUFRLFFBR1YsSUFBSUMsRUFBZWg0QixLQUFLaVEsTUFDcEIwZixFQUFZcUksRUFBYXJJLFVBQ3pCd1AsRUFBU25ILEVBQWFtSCxPQUN0QnpCLEVBQWUxOUIsS0FBS3NHLE1BQU1vM0IsYUFDOUJ6MkIsRUFBUXdHLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSXBwQixFQUFPMG9CLEVBQVksSUFJaEQsSUFBSXdJLEVBQWdCLEVBRXBCLEdBQUluNEIsS0FBS3UxQixVQUFXLENBQ2xCLElBQUlrQyxFQUFXejNCLEtBQUt1MUIsVUFHbEI0QyxFQURhLGFBQVhnSCxFQUNjMUgsRUFBU0wsWUFBY0ssRUFBU3BFLFlBQWNOLElBQXFCLEVBRW5FMEUsRUFBU04sYUFBZU0sRUFBU1AsYUFBZW5FLElBQXFCLENBRXpGLENBRUEveUIsS0FBSzQzQixTQUFTNkYsRUFBOEJ6OUIsS0FBS2lRLE1BQU9oSixFQUFPOHdCLEVBQU8yRixFQUFjMTlCLEtBQUtxMUIsZUFBZ0I4QyxHQUMzRyxFQUVBN1QsRUFBT0Msa0JBQW9CLFdBQ3pCLElBQUlnVSxFQUFldjRCLEtBQUtpUSxNQUNwQjBqQixFQUFZNEUsRUFBYTVFLFVBQ3pCcUwsRUFBc0J6RyxFQUFheUcsb0JBQ25DRyxFQUFTNUcsRUFBYTRHLE9BRTFCLEdBQW1DLGlCQUF4QkgsR0FBc0QsTUFBbEJoL0IsS0FBS3UxQixVQUFtQixDQUNyRSxJQUFJa0MsRUFBV3ozQixLQUFLdTFCLFVBRUYsZUFBZDVCLEdBQXlDLGVBQVh3TCxFQUNoQzFILEVBQVMzRCxXQUFha0wsRUFFdEJ2SCxFQUFTdlUsVUFBWThiLENBRXpCLENBRUFoL0IsS0FBS3c0QixxQkFDUCxFQUVBbFUsRUFBT0csbUJBQXFCLFdBQzFCLElBQUlpVSxFQUFlMTRCLEtBQUtpUSxNQUNwQjBqQixFQUFZK0UsRUFBYS9FLFVBQ3pCd0wsRUFBU3pHLEVBQWF5RyxPQUN0QjFSLEVBQWN6dEIsS0FBS3NHLE1BQ25CbzNCLEVBQWVqUSxFQUFZaVEsYUFHL0IsR0FGK0JqUSxFQUFZbUksMEJBRU8sTUFBbEI1MUIsS0FBS3UxQixVQUFtQixDQUN0RCxJQUFJa0MsRUFBV3ozQixLQUFLdTFCLFVBRXBCLEdBQWtCLGVBQWQ1QixHQUF5QyxlQUFYd0wsRUFDaEMsR0FBa0IsUUFBZHhMLEVBSUYsT0FBUUgsS0FDTixJQUFLLFdBQ0hpRSxFQUFTM0QsWUFBYzRKLEVBQ3ZCLE1BRUYsSUFBSyxxQkFDSGpHLEVBQVMzRCxXQUFhNEosRUFDdEIsTUFFRixRQUNFLElBQUlySyxFQUFjb0UsRUFBU3BFLFlBQ3ZCK0QsRUFBY0ssRUFBU0wsWUFDM0JLLEVBQVMzRCxXQUFhc0QsRUFBYy9ELEVBQWNxSyxPQUl0RGpHLEVBQVMzRCxXQUFhNEosT0FHeEJqRyxFQUFTdlUsVUFBWXdhLENBRXpCLENBRUExOUIsS0FBS3c0QixxQkFDUCxFQUVBbFUsRUFBT00scUJBQXVCLFdBQ1ksT0FBcEM1a0IsS0FBS3MxQiw0QkFDUGpELEVBQWNyeUIsS0FBS3MxQiwyQkFFdkIsRUFFQWhSLEVBQU91QyxPQUFTLFdBQ2QsSUFBSXFULEVBQWVsNkIsS0FBS2lRLE1BQ3BCcUMsRUFBVzRuQixFQUFhNW5CLFNBQ3hCcUUsRUFBWXVqQixFQUFhdmpCLFVBQ3pCZ2QsRUFBWXVHLEVBQWF2RyxVQUN6QnRlLEVBQVM2a0IsRUFBYTdrQixPQUN0QnNqQixFQUFXdUIsRUFBYXZCLFNBQ3hCQyxFQUFtQnNCLEVBQWF0QixpQkFDaENDLEVBQWVxQixFQUFhckIsYUFDNUJsSixFQUFZdUssRUFBYXZLLFVBQ3pCbUosRUFBV29CLEVBQWFwQixTQUN4QjRHLEVBQXVCeEYsRUFBYWxCLFFBQ3BDQSxPQUFtQyxJQUF6QjBHLEVBQWtDbkIsRUFBbUJtQixFQUMvRFAsRUFBU2pGLEVBQWFpRixPQUN0QmxHLEVBQW1CaUIsRUFBYWpCLGlCQUNoQ0MsRUFBZWdCLEVBQWFoQixhQUM1QmprQixFQUFRaWxCLEVBQWFqbEIsTUFDckJra0IsRUFBaUJlLEVBQWFmLGVBQzlCL2pCLEVBQVE4a0IsRUFBYTlrQixNQUNyQm9nQixFQUFjeDFCLEtBQUtzRyxNQUFNa3ZCLFlBRXpCNEosRUFBNkIsZUFBZHpMLEdBQXlDLGVBQVh3TCxFQUM3QzNJLEVBQVc0SSxFQUFlcC9CLEtBQUtzL0Isb0JBQXNCdC9CLEtBQUt1L0Isa0JBRTFESSxFQUF3QjMvQixLQUFLNC9CLG9CQUM3QnJRLEVBQWFvUSxFQUFzQixHQUNuQ25RLEVBQVltUSxFQUFzQixHQUVsQy9GLEVBQVEsR0FFWixHQUFJakssRUFBWSxFQUNkLElBQUssSUFBSVEsRUFBU1osRUFBWVksR0FBVVgsRUFBV1csSUFDakR5SixFQUFNdjNCLE1BQUssSUFBQXVPLGVBQWMwQixFQUFVLENBQ2pDMVAsS0FBTWsyQixFQUNObjVCLElBQUtxNUIsRUFBUTdJLEVBQVEySSxHQUNyQjd4QixNQUFPa3BCLEVBQ1BxRixZQUFhMkQsRUFBaUIzRCxPQUFjM3lCLEVBQzVDb1MsTUFBT2pWLEtBQUt5MkIsY0FBY3RHLE1BT2hDLElBQUl3TixFQUFxQmUsRUFBc0IxK0IsS0FBS2lRLE1BQU9qUSxLQUFLcTFCLGdCQUNoRSxPQUFPLElBQUF6a0IsZUFBY3FvQixHQUFvQkMsR0FBZ0IsTUFBTyxDQUM5RHZpQixVQUFXQSxFQUNYNmYsU0FBVUEsRUFDVngxQixJQUFLaEIsS0FBS3czQixnQkFDVnZpQixPQUFPLE9BQVMsQ0FDZDJCLFNBQVUsV0FDVnZCLE9BQVFBLEVBQ1JELE1BQU9BLEVBQ1A4ZCxTQUFVLE9BQ1Y4Ryx3QkFBeUIsUUFDekJDLFdBQVksWUFDWnRHLFVBQVdBLEdBQ1YxZSxLQUNGLElBQUFyRSxlQUFjZ29CLEdBQW9CQyxHQUFnQixNQUFPLENBQzFEdm1CLFNBQVVzbkIsRUFDVjU0QixJQUFLMjNCLEVBQ0wxakIsTUFBTyxDQUNMSSxPQUFRK3BCLEVBQWUsT0FBU3pCLEVBQ2hDNW1CLGNBQWV5ZSxFQUFjLFlBQVMzeUIsRUFDdEN1UyxNQUFPZ3FCLEVBQWV6QixFQUFxQixVQUdqRCxFQUVBclosRUFBT2tVLG9CQUFzQixXQUMzQixHQUEwQyxtQkFBL0J4NEIsS0FBS2lRLE1BQU1xZixpQkFDSnR2QixLQUFLaVEsTUFBTTBmLFVBRVgsRUFBRyxDQUNqQixJQUFJa1EsRUFBeUI3L0IsS0FBSzQvQixvQkFDOUJFLEVBQXNCRCxFQUF1QixHQUM3Q0UsRUFBcUJGLEVBQXVCLEdBQzVDRyxFQUFxQkgsRUFBdUIsR0FDNUNJLEVBQW9CSixFQUF1QixHQUUvQzcvQixLQUFLODFCLHFCQUFxQmdLLEVBQXFCQyxFQUFvQkMsRUFBb0JDLEVBQ3pGLENBR0YsR0FBbUMsbUJBQXhCamdDLEtBQUtpUSxNQUFNdW1CLFNBQXlCLENBQzdDLElBQUlpQyxFQUFlejRCLEtBQUtzRyxNQUNwQjQ1QixFQUFtQnpILEVBQWFzRyxnQkFDaENvQixFQUFnQjFILEVBQWFpRixhQUM3QnpDLEVBQTRCeEMsRUFBYTdDLHlCQUU3QzUxQixLQUFLdTJCLGNBQWMySixFQUFrQkMsRUFBZWxGLEVBQ3RELENBQ0YsRUFNQTNXLEVBQU9zYixrQkFBb0IsV0FDekIsSUFBSXpFLEVBQWVuN0IsS0FBS2lRLE1BQ3BCMGYsRUFBWXdMLEVBQWF4TCxVQUN6QjJMLEVBQWdCSCxFQUFhRyxjQUM3QlQsRUFBZTc2QixLQUFLc0csTUFDcEJrdkIsRUFBY3FGLEVBQWFyRixZQUMzQnVKLEVBQWtCbEUsRUFBYWtFLGdCQUMvQnJCLEVBQWU3QyxFQUFhNkMsYUFFaEMsR0FBa0IsSUFBZC9OLEVBQ0YsTUFBTyxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBR25CLElBQUlKLEVBQWFxUCxFQUF1QjUrQixLQUFLaVEsTUFBT3l0QixFQUFjMTlCLEtBQUtxMUIsZ0JBQ25FN0YsRUFBWXFQLEVBQTBCNytCLEtBQUtpUSxNQUFPc2YsRUFBWW1PLEVBQWMxOUIsS0FBS3ExQixnQkFHakZvRyxFQUFvQmpHLEdBQW1DLGFBQXBCdUosRUFBOEQsRUFBN0J0eEIsS0FBSzZpQixJQUFJLEVBQUdnTCxHQUNoRkksRUFBbUJsRyxHQUFtQyxZQUFwQnVKLEVBQTZELEVBQTdCdHhCLEtBQUs2aUIsSUFBSSxFQUFHZ0wsR0FDbEYsTUFBTyxDQUFDN3RCLEtBQUs2aUIsSUFBSSxFQUFHZixFQUFha00sR0FBbUJodUIsS0FBSzZpQixJQUFJLEVBQUc3aUIsS0FBSzRpQixJQUFJVixFQUFZLEVBQUdILEVBQVlrTSxJQUFtQm5NLEVBQVlDLEVBQ3JJLEVBRU9zUCxDQUNULENBbmE2QixDQW1hM0IsRUFBQXpOLGVBQWdCK0MsRUFBT2xOLGFBQWUsQ0FDdEN5TSxVQUFXLE1BQ1htRixjQUFVajJCLEVBQ1ZzOEIsT0FBUSxXQUNSN0QsY0FBZSxFQUNmbkMsZ0JBQWdCLEdBQ2YvRSxDQUNMLENBTUEsSUFBSXFMLEVBQXdCLFNBQTZCM2QsRUFBTzZFLEdBQy9DN0UsRUFBTXhQLFNBQ0x3UCxFQUFNNlIsVUFDVDdSLEVBQU16TSxPQUNOeU0sRUFBTXFkLE9BQ0FyZCxFQUFNK1csYUFDTi9XLEVBQU1vWCxhQUNicFgsRUFBTTFNLE1BQ0h1UixFQUFNMkgsUUFvRHZCLEVBSUk4UixFQUFvQixTQUF5Qm53QixFQUFPaEosRUFBTzIxQixHQUM3RCxJQUNJRSxFQURPN3NCLEVBQ1M2c0IsU0FDaEJELEVBQWtCRCxFQUFjQyxnQkFDaENFLEVBQW9CSCxFQUFjRyxrQkFFdEMsR0FBSTkxQixFQUFRODFCLEVBQW1CLENBQzdCLElBQUlULEVBQVMsRUFFYixHQUFJUyxHQUFxQixFQUFHLENBQzFCLElBQUlWLEVBQWVRLEVBQWdCRSxHQUNuQ1QsRUFBU0QsRUFBYUMsT0FBU0QsRUFBYXZKLElBQzlDLENBRUEsSUFBSyxJQUFJdnpCLEVBQUl3OUIsRUFBb0IsRUFBR3g5QixHQUFLMEgsRUFBTzFILElBQUssQ0FDbkQsSUFBSXV6QixFQUFPZ0ssRUFBU3Y5QixHQUNwQnM5QixFQUFnQnQ5QixHQUFLLENBQ25CKzhCLE9BQVFBLEVBQ1J4SixLQUFNQSxHQUVSd0osR0FBVXhKLENBQ1osQ0FFQThKLEVBQWNHLGtCQUFvQjkxQixDQUNwQyxDQUVBLE9BQU80MUIsRUFBZ0I1MUIsRUFDekIsRUFrQklvNUIsRUFBZ0MsU0FBcUNwd0IsRUFBTzJzQixFQUFlTyxFQUFNQyxFQUFLZCxHQUN4RyxLQUFPYyxHQUFPRCxHQUFNLENBQ2xCLElBQUlFLEVBQVNELEVBQU0zdkIsS0FBSzZ2QixPQUFPSCxFQUFPQyxHQUFPLEdBQ3pDRyxFQUFnQjZDLEVBQWtCbndCLEVBQU9vdEIsRUFBUVQsR0FBZU4sT0FFcEUsR0FBSWlCLElBQWtCakIsRUFDcEIsT0FBT2UsRUFDRUUsRUFBZ0JqQixFQUN6QmMsRUFBTUMsRUFBUyxFQUNORSxFQUFnQmpCLElBQ3pCYSxFQUFPRSxFQUFTLEVBRXBCLENBRUEsT0FBSUQsRUFBTSxFQUNEQSxFQUFNLEVBRU4sQ0FFWCxFQWNJc0IsRUFBd0IsU0FBK0I1YyxFQUFPNkUsR0FDaEUsSUFBSWdKLEVBQVk3TixFQUFNNk4sVUFDbEJrTixFQUFrQmxXLEVBQU1rVyxnQkFDeEJ5RCxFQUFvQjNaLEVBQU0yWixrQkFDMUJ2RCxFQUFvQnBXLEVBQU1vVyxrQkFDMUJ3RCxFQUEyQixFQU8vQixHQUpJeEQsR0FBcUJwTixJQUN2Qm9OLEVBQW9CcE4sRUFBWSxHQUc5Qm9OLEdBQXFCLEVBQUcsQ0FDMUIsSUFBSVYsRUFBZVEsRUFBZ0JFLEdBQ25Dd0QsRUFBMkJsRSxFQUFhQyxPQUFTRCxFQUFhdkosSUFDaEUsQ0FJQSxPQUFPeU4sR0FGa0I1USxFQUFZb04sRUFBb0IsR0FDSHVELENBRXhELEVBRUlFLEVBQWdDaEMsRUFBb0IsQ0FDdERDLGNBQWUsU0FBdUJ4dUIsRUFBT2hKLEVBQU8yMUIsR0FDbEQsT0FBT3dELEVBQWtCbndCLEVBQU9oSixFQUFPMjFCLEdBQWVOLE1BQ3hELEVBQ0FxQyxZQUFhLFNBQXFCMXVCLEVBQU9oSixFQUFPMjFCLEdBQzlDLE9BQU9BLEVBQWNDLGdCQUFnQjUxQixHQUFPNnJCLElBQzlDLEVBQ0E0TCxzQkFBdUJBLEVBQ3ZCakIsOEJBQStCLFNBQXVDeHRCLEVBQU9oSixFQUFPOHdCLEVBQU8yRixFQUFjZCxFQUFlekUsR0FDdEgsSUFBSXhFLEVBQVkxakIsRUFBTTBqQixVQUNsQnRlLEVBQVNwRixFQUFNb0YsT0FDZjhwQixFQUFTbHZCLEVBQU1rdkIsT0FDZi9wQixFQUFRbkYsRUFBTW1GLE1BR2QwZCxFQUQ2QixlQUFkYSxHQUF5QyxlQUFYd0wsRUFDdkIvcEIsRUFBUUMsRUFDOUJnbkIsRUFBZStELEVBQWtCbndCLEVBQU9oSixFQUFPMjFCLEdBRy9DZSxFQUFxQmUsRUFBc0J6dUIsRUFBTzJzQixHQUNsRGdCLEVBQVlud0IsS0FBSzZpQixJQUFJLEVBQUc3aUIsS0FBSzRpQixJQUFJc04sRUFBcUI3SyxFQUFNdUosRUFBYUMsU0FDekV1QixFQUFZcHdCLEtBQUs2aUIsSUFBSSxFQUFHK0wsRUFBYUMsT0FBU3hKLEVBQU91SixFQUFhdkosS0FBT3FGLEdBVTdFLE9BUmMsVUFBVkosSUFFQUEsRUFERTJGLEdBQWdCRyxFQUFZL0ssR0FBUTRLLEdBQWdCRSxFQUFZOUssRUFDMUQsT0FFQSxVQUlKaUYsR0FDTixJQUFLLFFBQ0gsT0FBTzZGLEVBRVQsSUFBSyxNQUNILE9BQU9DLEVBRVQsSUFBSyxTQUNILE9BQU9wd0IsS0FBS3F3QixNQUFNRCxHQUFhRCxFQUFZQyxHQUFhLEdBRzFELFFBQ0UsT0FBSUgsR0FBZ0JHLEdBQWFILEdBQWdCRSxFQUN4Q0YsRUFDRUEsRUFBZUcsRUFDakJBLEVBRUFELEVBSWYsRUFDQWdCLHVCQUF3QixTQUFnQzN1QixFQUFPcXNCLEVBQVFNLEdBQ3JFLE9BN0hvQixTQUF5QjNzQixFQUFPMnNCLEVBQWVOLEdBQ3JFLElBQUlPLEVBQWtCRCxFQUFjQyxnQkFDaENFLEVBQW9CSCxFQUFjRyxrQkFHdEMsT0FGNkJBLEVBQW9CLEVBQUlGLEVBQWdCRSxHQUFtQlQsT0FBUyxJQUVuRUEsRUFFckIrRCxFQUE4QnB3QixFQUFPMnNCLEVBQWVHLEVBQW1CLEVBQUdULEdBOEI1QyxTQUEwQ3JzQixFQUFPMnNCLEVBQWUzMUIsRUFBT3ExQixHQUk5RyxJQUhBLElBQUkzTSxFQUFZMWYsRUFBTTBmLFVBQ2xCNk4sRUFBVyxFQUVSdjJCLEVBQVEwb0IsR0FBYXlRLEVBQWtCbndCLEVBQU9oSixFQUFPMjFCLEdBQWVOLE9BQVNBLEdBQ2xGcjFCLEdBQVN1MkIsRUFDVEEsR0FBWSxFQUdkLE9BQU82QyxFQUE4QnB3QixFQUFPMnNCLEVBQWVudkIsS0FBSzRpQixJQUFJcHBCLEVBQU8wb0IsRUFBWSxHQUFJbGlCLEtBQUs2dkIsTUFBTXIyQixFQUFRLEdBQUlxMUIsRUFDcEgsQ0FuQ1dtRSxDQUFtQ3h3QixFQUFPMnNCLEVBQWVudkIsS0FBSzZpQixJQUFJLEVBQUd5TSxHQUFvQlQsRUFFcEcsQ0ErR1dvRSxDQUFrQnp3QixFQUFPMnNCLEVBQWVOLEVBQ2pELEVBQ0F1QywwQkFBMkIsU0FBbUM1dUIsRUFBT3NmLEVBQVltTyxFQUFjZCxHQWM3RixJQWJBLElBQUlqSixFQUFZMWpCLEVBQU0wakIsVUFDbEJ0ZSxFQUFTcEYsRUFBTW9GLE9BQ2ZzYSxFQUFZMWYsRUFBTTBmLFVBQ2xCd1AsRUFBU2x2QixFQUFNa3ZCLE9BQ2YvcEIsRUFBUW5GLEVBQU1tRixNQUdkMGQsRUFENkIsZUFBZGEsR0FBeUMsZUFBWHdMLEVBQ3ZCL3BCLEVBQVFDLEVBQzlCZ25CLEVBQWUrRCxFQUFrQm53QixFQUFPc2YsRUFBWXFOLEdBQ3BEZ0IsRUFBWUYsRUFBZTVLLEVBQzNCd0osRUFBU0QsRUFBYUMsT0FBU0QsRUFBYXZKLEtBQzVDdEQsRUFBWUQsRUFFVEMsRUFBWUcsRUFBWSxHQUFLMk0sRUFBU3NCLEdBQzNDcE8sSUFDQThNLEdBQVU4RCxFQUFrQm53QixFQUFPdWYsRUFBV29OLEdBQWU5SixLQUcvRCxPQUFPdEQsQ0FDVCxFQUNBeUYsa0JBQW1CLFNBQTJCaGxCLEVBQU9xZSxHQUNuRCxJQUVJc08sRUFBZ0IsQ0FDbEJDLGdCQUFpQixDQUFDLEVBQ2xCeUQsa0JBSlVyd0IsRUFDa0Jxd0IsbUJBckxFLEdBeUw5QnZELG1CQUFvQixHQW9CdEIsT0FqQkF6TyxFQUFTNEMsZ0JBQWtCLFNBQVVqcUIsRUFBT2czQixRQUNoQixJQUF0QkEsSUFDRkEsR0FBb0IsR0FHdEJyQixFQUFjRyxrQkFBb0J0dkIsS0FBSzRpQixJQUFJdU0sRUFBY0csa0JBQW1COTFCLEVBQVEsR0FLcEZxbkIsRUFBUzZDLG9CQUFvQixHQUV6QjhNLEdBQ0YzUCxFQUFTOEMsYUFFYixFQUVPd0wsQ0FDVCxFQUNBMUgsdUNBQXVDLEVBQ3ZDQyxjQUFlLFNBQXVCNEcsR0FDckJBLEVBQU1lLFFBT3ZCLElBR0U2RCxFQUE2QnhNLEVBQW9CLENBQ25ERSxnQkFBaUIsU0FBeUJ6VyxFQUFNM1csR0FFOUMsT0FBT0EsRUFEVzJXLEVBQUs4WSxXQUV6QixFQUNBbEMsZUFBZ0IsU0FBd0IxUyxFQUFPN2EsR0FFN0MsT0FEa0I2YSxFQUFNNFUsV0FFMUIsRUFDQTVCLGFBQWMsU0FBc0JuTyxFQUFPMWYsR0FFekMsT0FBT0EsRUFEUzBmLEVBQU1nUSxTQUV4QixFQUNBOUIsYUFBYyxTQUFzQjFILEVBQU9sbUIsR0FFekMsT0FEZ0JrbUIsRUFBTXdKLFNBRXhCLEVBQ0FsQyx3QkFBeUIsU0FBaUNzSCxHQUN4RCxJQUFJN0QsRUFBVzZELEVBQU03RCxTQUVyQixPQURnQjZELEVBQU1wRixVQUNIdUIsQ0FDckIsRUFDQXhELHVCQUF3QixTQUFnQ3NILEdBQ3RELElBQUkvRCxFQUFjK0QsRUFBTS9ELFlBRXhCLE9BRGtCK0QsRUFBTXRGLFlBQ0h1QixDQUN2QixFQUNBdEQsK0JBQWdDLFNBQXdDMEosRUFBT3BLLEVBQWE4RCxFQUFPakUsRUFBWThJLEVBQWV6RSxHQUM1SCxJQUFJRixFQUFjb0csRUFBTXBHLFlBQ3BCdkIsRUFBYzJILEVBQU0zSCxZQUNwQnRoQixFQUFRaXBCLEVBQU1qcEIsTUFDZHdyQixFQUFtQm56QixLQUFLNmlCLElBQUksRUFBRzJILEVBQWN2QixFQUFjdGhCLEdBQzNEd29CLEVBQVlud0IsS0FBSzRpQixJQUFJdVEsRUFBa0IzTSxFQUFjeUMsR0FDckRtSCxFQUFZcHdCLEtBQUs2aUIsSUFBSSxFQUFHMkQsRUFBY3lDLEVBQWN0aEIsRUFBUStpQixFQUFnQnpCLEdBVWhGLE9BUmMsVUFBVnFCLElBRUFBLEVBREVqRSxHQUFjK0osRUFBWXpvQixHQUFTMGUsR0FBYzhKLEVBQVl4b0IsRUFDdkQsT0FFQSxVQUlKMmlCLEdBQ04sSUFBSyxRQUNILE9BQU82RixFQUVULElBQUssTUFDSCxPQUFPQyxFQUVULElBQUssU0FHSCxJQUFJZ0QsRUFBZXB6QixLQUFLcXdCLE1BQU1ELEdBQWFELEVBQVlDLEdBQWEsR0FFcEUsT0FBSWdELEVBQWVwekIsS0FBS3F6QixLQUFLMXJCLEVBQVEsR0FDNUIsRUFDRXlyQixFQUFlRCxFQUFtQm56QixLQUFLNnZCLE1BQU1sb0IsRUFBUSxHQUN2RHdyQixFQUVBQyxFQUlYLFFBQ0UsT0FBSS9NLEdBQWMrSixHQUFhL0osR0FBYzhKLEVBQ3BDOUosRUFDRStKLEVBQVlELEdBSVo5SixFQUFhK0osRUFEZkEsRUFJQUQsRUFJZixFQUNBaEosNEJBQTZCLFNBQXFDbU0sRUFBTzdNLEVBQVU2RCxFQUFPN1UsRUFBVzBaLEVBQWV6RSxHQUNsSCxJQUFJeEIsRUFBWW9LLEVBQU1wSyxVQUNsQnRoQixFQUFTMHJCLEVBQU0xckIsT0FDZjZpQixFQUFXNkksRUFBTTdJLFNBQ2pCOEksRUFBZ0J2ekIsS0FBSzZpQixJQUFJLEVBQUc0SCxFQUFXdkIsRUFBWXRoQixHQUNuRHVvQixFQUFZbndCLEtBQUs0aUIsSUFBSTJRLEVBQWU5TSxFQUFXeUMsR0FDL0NrSCxFQUFZcHdCLEtBQUs2aUIsSUFBSSxFQUFHNEQsRUFBV3lDLEVBQVl0aEIsRUFBUzhpQixFQUFnQnhCLEdBVTVFLE9BUmMsVUFBVm9CLElBRUFBLEVBREU3VSxHQUFhMmEsRUFBWXhvQixHQUFVNk4sR0FBYTBhLEVBQVl2b0IsRUFDdEQsT0FFQSxVQUlKMGlCLEdBQ04sSUFBSyxRQUNILE9BQU82RixFQUVULElBQUssTUFDSCxPQUFPQyxFQUVULElBQUssU0FHSCxJQUFJZ0QsRUFBZXB6QixLQUFLcXdCLE1BQU1ELEdBQWFELEVBQVlDLEdBQWEsR0FFcEUsT0FBSWdELEVBQWVwekIsS0FBS3F6QixLQUFLenJCLEVBQVMsR0FDN0IsRUFDRXdyQixFQUFlRyxFQUFnQnZ6QixLQUFLNnZCLE1BQU1qb0IsRUFBUyxHQUNyRDJyQixFQUVBSCxFQUlYLFFBQ0UsT0FBSTNkLEdBQWEyYSxHQUFhM2EsR0FBYTBhLEVBQ2xDMWEsRUFDRTJhLEVBQVlELEdBSVoxYSxFQUFZMmEsRUFEZEEsRUFJQUQsRUFJZixFQUNBdEosNkJBQThCLFNBQXNDMk0sRUFBT25OLEdBQ3pFLElBQUk0QyxFQUFjdUssRUFBTXZLLFlBQ3BCdUIsRUFBY2dKLEVBQU1oSixZQUN4QixPQUFPeHFCLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSTRILEVBQWMsRUFBR3hxQixLQUFLNnZCLE1BQU14SixFQUFhNEMsSUFDdkUsRUFDQW5DLGdDQUFpQyxTQUF5QzJNLEVBQVEzUixFQUFZdUUsR0FDNUYsSUFBSTRDLEVBQWN3SyxFQUFPeEssWUFDckJ1QixFQUFjaUosRUFBT2pKLFlBQ3JCN2lCLEVBQVE4ckIsRUFBTzlyQixNQUNmaUMsRUFBT2tZLEVBQWFtSCxFQUNwQnlLLEVBQW9CMXpCLEtBQUtxekIsTUFBTTFyQixFQUFRMGUsRUFBYXpjLEdBQVFxZixHQUNoRSxPQUFPanBCLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSTRILEVBQWMsRUFBRzFJLEVBQWE0UixFQUFvQixHQUVoRixFQUNBcE0sMEJBQTJCLFNBQW1DcU0sRUFBUWxlLEdBQ3BFLElBQUl5VCxFQUFZeUssRUFBT3pLLFVBQ25CdUIsRUFBV2tKLEVBQU9sSixTQUN0QixPQUFPenFCLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSTZILEVBQVcsRUFBR3pxQixLQUFLNnZCLE1BQU1wYSxFQUFZeVQsSUFDbkUsRUFDQTNCLDZCQUE4QixTQUFzQ3FNLEVBQVE5UixFQUFZck0sR0FDdEYsSUFBSXlULEVBQVkwSyxFQUFPMUssVUFDbkJ1QixFQUFXbUosRUFBT25KLFNBQ2xCN2lCLEVBQVNnc0IsRUFBT2hzQixPQUNoQitCLEVBQU1tWSxFQUFhb0gsRUFDbkIySyxFQUFpQjd6QixLQUFLcXpCLE1BQU16ckIsRUFBUzZOLEVBQVk5TCxHQUFPdWYsR0FDNUQsT0FBT2xwQixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUk2SCxFQUFXLEVBQUczSSxFQUFhK1IsRUFBaUIsR0FFMUUsRUFDQXJNLGtCQUFtQixTQUEyQmhsQixHQUM5QyxFQUNBaWxCLHVDQUF1QyxFQUN2Q0MsY0FBZSxTQUF1Qm9NLEdBQ2xCQSxFQUFPN0ssWUFDVDZLLEVBQU81SyxTQVd6QixJQUdFNkssRUFBNkJoRCxFQUFvQixDQUNuREMsY0FBZSxTQUF1QjdnQixFQUFNM1csR0FFMUMsT0FBT0EsRUFEUTJXLEVBQUtrZixRQUV0QixFQUNBNkIsWUFBYSxTQUFxQjdjLEVBQU83YSxHQUV2QyxPQURlNmEsRUFBTWdiLFFBRXZCLEVBQ0E0QixzQkFBdUIsU0FBK0IvWCxHQUNwRCxJQUFJZ0osRUFBWWhKLEVBQU1nSixVQUV0QixPQURlaEosRUFBTW1XLFNBQ0huTixDQUNwQixFQUNBOE4sOEJBQStCLFNBQXVDdFEsRUFBT2xtQixFQUFPOHdCLEVBQU8yRixFQUFjZCxFQUFlekUsR0FDdEgsSUFBSXhFLEVBQVl4RyxFQUFNd0csVUFDbEJ0ZSxFQUFTOFgsRUFBTTlYLE9BQ2ZzYSxFQUFZeEMsRUFBTXdDLFVBQ2xCbU4sRUFBVzNQLEVBQU0yUCxTQUNqQnFDLEVBQVNoUyxFQUFNZ1MsT0FDZi9wQixFQUFRK1gsRUFBTS9YLE1BR2QwZCxFQUQ2QixlQUFkYSxHQUF5QyxlQUFYd0wsRUFDdkIvcEIsRUFBUUMsRUFDOUJvc0IsRUFBaUJoMEIsS0FBSzZpQixJQUFJLEVBQUdYLEVBQVltTixFQUFXaEssR0FDcEQ4SyxFQUFZbndCLEtBQUs0aUIsSUFBSW9SLEVBQWdCeDZCLEVBQVE2MUIsR0FDN0NlLEVBQVlwd0IsS0FBSzZpQixJQUFJLEVBQUdycEIsRUFBUTYxQixFQUFXaEssRUFBT2dLLEVBQVczRSxHQVVqRSxPQVJjLFVBQVZKLElBRUFBLEVBREUyRixHQUFnQkcsRUFBWS9LLEdBQVE0SyxHQUFnQkUsRUFBWTlLLEVBQzFELE9BRUEsVUFJSmlGLEdBQ04sSUFBSyxRQUNILE9BQU82RixFQUVULElBQUssTUFDSCxPQUFPQyxFQUVULElBQUssU0FJRCxJQUFJZ0QsRUFBZXB6QixLQUFLcXdCLE1BQU1ELEdBQWFELEVBQVlDLEdBQWEsR0FFcEUsT0FBSWdELEVBQWVwekIsS0FBS3F6QixLQUFLaE8sRUFBTyxHQUMzQixFQUNFK04sRUFBZVksRUFBaUJoMEIsS0FBSzZ2QixNQUFNeEssRUFBTyxHQUNwRDJPLEVBRUFaLEVBS2IsUUFDRSxPQUFJbkQsR0FBZ0JHLEdBQWFILEdBQWdCRSxFQUN4Q0YsRUFDRUEsRUFBZUcsRUFDakJBLEVBRUFELEVBSWYsRUFDQWdCLHVCQUF3QixTQUFnQzdDLEVBQU9PLEdBQzdELElBQUkzTSxFQUFZb00sRUFBTXBNLFVBQ2xCbU4sRUFBV2YsRUFBTWUsU0FDckIsT0FBT3J2QixLQUFLNmlCLElBQUksRUFBRzdpQixLQUFLNGlCLElBQUlWLEVBQVksRUFBR2xpQixLQUFLNnZCLE1BQU1oQixFQUFTUSxJQUNqRSxFQUNBK0IsMEJBQTJCLFNBQW1DN0MsRUFBT3pNLEVBQVltTyxHQUMvRSxJQUFJL0osRUFBWXFJLEVBQU1ySSxVQUNsQnRlLEVBQVMybUIsRUFBTTNtQixPQUNmc2EsRUFBWXFNLEVBQU1yTSxVQUNsQm1OLEVBQVdkLEVBQU1jLFNBQ2pCcUMsRUFBU25ELEVBQU1tRCxPQUNmL3BCLEVBQVE0bUIsRUFBTTVtQixNQUdka25CLEVBQVMvTSxFQUFhdU4sRUFDdEJoSyxFQUY2QixlQUFkYSxHQUF5QyxlQUFYd0wsRUFFdkIvcEIsRUFBUUMsRUFDOUJxc0IsRUFBa0JqMEIsS0FBS3F6QixNQUFNaE8sRUFBTzRLLEVBQWVwQixHQUFVUSxHQUNqRSxPQUFPcnZCLEtBQUs2aUIsSUFBSSxFQUFHN2lCLEtBQUs0aUIsSUFBSVYsRUFBWSxFQUFHSixFQUFhbVMsRUFBa0IsR0FFNUUsRUFDQXpNLGtCQUFtQixTQUEyQmhsQixHQUM5QyxFQUNBaWxCLHVDQUF1QyxFQUN2Q0MsY0FBZSxTQUF1QmtKLEdBQ3JCQSxFQUFNdkIsUUFPdkIsSUFLRixTQUFTNkUsRUFBZWw3QixFQUFNdEUsR0FDNUIsSUFBSyxJQUFJeS9CLEtBQWFuN0IsRUFDcEIsS0FBTW03QixLQUFhei9CLEdBQ2pCLE9BQU8sRUFJWCxJQUFLLElBQUkwL0IsS0FBYzEvQixFQUNyQixHQUFJc0UsRUFBS283QixLQUFnQjEvQixFQUFLMC9CLEdBQzVCLE9BQU8sRUFJWCxPQUFPLENBQ1QsQ0FFQSxJQUFJQyxFQUFZLENBQUMsU0FDYkMsRUFBYSxDQUFDLFNBSWxCLFNBQVNDLEVBQVN0ZCxFQUFXMkUsR0FDM0IsSUFBSTRZLEVBQVl2ZCxFQUFVelAsTUFDdEJpdEIsR0FBVyxPQUE4QnhkLEVBQVdvZCxHQUVwREssRUFBWTlZLEVBQVVwVSxNQUN0Qm10QixHQUFXLE9BQThCL1ksRUFBVzBZLEdBRXhELE9BQVFKLEVBQWVNLEVBQVdFLEtBQWVSLEVBQWVPLEVBQVVFLEVBQzVFLENBS0EsU0FBU0MsRUFBc0JoWixFQUFXaEQsR0FDeEMsT0FBUTJiLEVBQVNoaUMsS0FBS2lRLE1BQU9vWixJQUFjc1ksRUFBZTNoQyxLQUFLc0csTUFBTytmLEVBQ3hFLHNCQ3hoRUEsUUFFZSxFQU1QLFdBQ04sSUFBSWljLEVBQVEsZ0JBRVJDLEVBQVUsU0FBVXRmLEVBQU11ZixHQUM1QixPQUF3QixPQUFwQnZmLEVBQUt3ZixXQUE4QkQsRUFFaENELEVBQVF0ZixFQUFLd2YsV0FBWUQsRUFBR3p6QixPQUFPLENBQUNrVSxJQUM3QyxFQUVJaE8sRUFBUSxTQUFVZ08sRUFBTWtHLEdBQzFCLE9BQU85VSxpQkFBaUI0TyxFQUFNLE1BQU15ZixpQkFBaUJ2WixFQUN2RCxFQU1Jd1osRUFBUyxTQUFVMWYsR0FDdEIsT0FBT3FmLEVBQU05M0IsS0FMQyxTQUFVeVksR0FDdkIsT0FBT2hPLEVBQU1nTyxFQUFNLFlBQWNoTyxFQUFNZ08sRUFBTSxjQUFnQmhPLEVBQU1nTyxFQUFNLGFBQzNFLENBR21CaVEsQ0FBU2pRLEdBQzVCLEVBa0JBLE9BaEJtQixTQUFVQSxHQUMzQixHQUFNQSxhQUFnQjJmLGFBQWUzZixhQUFnQjRmLFdBQXJELENBTUEsSUFGQSxJQUFJTCxFQUFLRCxFQUFRdGYsRUFBS3dmLFdBQVksSUFFekJsakMsRUFBSSxFQUFHQSxFQUFJaWpDLEVBQUcvaUMsT0FBUUYsR0FBSyxFQUNsQyxHQUFJb2pDLEVBQU9ILEVBQUdqakMsSUFDWixPQUFPaWpDLEVBQUdqakMsR0FJZCxPQUFPZ0MsU0FBU3VoQyxrQkFBb0J2aEMsU0FBU3doQyxlQVY3QyxDQVdGLENBR0YsT0E1Q3NCLGlCQUFYLE9BQVcscUxDRnRCLGlCQUNBLGFBRUEsYUFxRkEsVUE1REEsU0FBZ0IsU0FDZHp3QixFQUFRLFdBQ1JxRSxFQUFTLFlBQ1RhLEVBQU8sVUFDUHdyQixFQUFhLGdCQUNiQyxFQUFZLGVBQ1osSUFBQWxnQixTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBbWdCLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLFFBQUFBLE9BQU8sSUFBRyxHQUFLLEVBQ2YsSUFBQUMsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDakIsSUFBQUMsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsWUFBQUEsT0FBVyxJQUFHLEdBQUssRUFDbkIsSUFBQUMsb0JBQUFBLE9BQW1CLElBQUcsR0FBSyxFQUMzQixJQUFBQyxrQkFBQUEsT0FBaUIsSUFBRyxHQUFLLEVBQ3pCLElBQUFDLFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUFDLFlBQUFBLE9BQVcsSUFBRyxLQUFFLEVBQ2hCLElBQUE1TCxNQUFBQSxPQUFLLElBQUcsV0FBUSxFQUNoQixJQUFBakYsS0FBQUEsT0FBSSxJQUFHLFdBQVEsRUFDZmhzQixFQUFJLE9BRUosT0FDRSxrQ0FDRTlGLElBQUtpaUMsRUFDTHRzQixXQUFXLGFBQVMsQ0FDbEIsVUFBT2l0QixVQUNQLFVBQU85USxHQUNQLFVBQU9pRixTQUVMLEVBQUMsVUFBT21MLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsU0FBVUEsRUFDbEIsRUFBQyxVQUFPQyxVQUFXQSxFQUNuQixFQUFDLFVBQU9DLFdBQVlBLEVBQ3BCLEVBQUMsVUFBT0MsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxhQUFjQSxFQUN0QixFQUFDLFVBQU9DLHFCQUFzQkEsRUFDOUIsRUFBQyxVQUFPQyxtQkFBb0JBLEVBQzVCLEVBQUMsVUFBT0ksWUFBYVYsR0FBV1EsRUFBWTU2QixTQUFTLFFBQ3JELEVBQUMsVUFBTys2QixhQUFjWCxHQUFXUSxFQUFZNTZCLFNBQVMsWUFFeEQ0TixJQUVGb00sU0FBVUEsRUFDVjJnQixVQUFXQSxFQUNYNThCLEtBQU1BLEVBQ05pOUIsS0FBSyxTQUNMdnNCLFFBQVNBLEVBQ1R3ckIsY0FBZUEsR0FFTSxpQkFBYjF3QixHQUNSOUssTUFBTTRCLFFBQVFrSixJQUNkQSxFQUFTN1MsT0FDUCwrQkFBS2tYLFVBQVcsVUFBT3F0QixTQUFVMXhCLEdBQy9CLEVBS1YsMExDdEZBLGNBQVMsMkVBQUFILE9BQU8sMktDQWhCLGlCQUNBLGFBRUEsYUFjQSxVQU5BLFNBQXFCLFNBQUVHLEVBQVEsV0FBRSxJQUFBNHdCLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQUV2c0IsRUFBUyxZQUMxRCxPQUNFLCtCQUFLQSxXQUFXLGFBQVMsQ0FBQyxVQUFPc3RCLGFBQVcsS0FBRyxFQUFDLFVBQU9mLFVBQVdBLEVBQVEsR0FBR3ZzQixLQUFjckUsRUFFL0YsK0xDZkEsYUFBUyxnRkFBQUgsT0FBTyxndkJDQWhCLGlCQUNBLGFBRUEsYUFxRkEsVUEzREEsU0FBb0IsU0FDZHdZLEVBQVMsS0FDYnJZLEVBQVEsV0FDUnFFLEVBQVMsWUFDVG1jLEVBQUksT0FDSm1RLEVBQVksZUFDWixJQUFBQyxTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBQyxRQUFBQSxPQUFPLElBQUcsR0FBSyxFQUNmLElBQUFJLFlBQUFBLE9BQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFILFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUFDLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFFLG9CQUFBQSxPQUFtQixJQUFHLEdBQUssRUFDM0IsSUFBQUMsa0JBQUFBLE9BQWlCLElBQUcsR0FBSyxFQUN6QixJQUFBMWdCLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUE0Z0IsWUFBQUEsT0FBVyxJQUFHLEtBQUUsRUFDaEIsSUFBQTVMLE1BQUFBLE9BQUssSUFBRyxXQUFRLEVBQ2I5bkIsRUFBSyxJQWpCVSxxTUF1QmxCLFlBSnlCLElBQWQwYSxJQUNUQSxFQUFZLEtBSVosd0JBQUNBLEVBQVMsR0FDUjNwQixJQUFLaWlDLEVBQVksY0FDTCxjQUNadHNCLFdBQVcsYUFBUyxDQUNsQixVQUFPaXRCLFVBQ1AsVUFBTzlRLEdBQ1AsVUFBT2lGLFNBRUwsRUFBQyxVQUFPbUwsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxTQUFVQSxFQUNsQixFQUFDLFVBQU9DLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsV0FBWUEsRUFDcEIsRUFBQyxVQUFPQyxVQUFXQSxFQUNuQixFQUFDLFVBQU92Z0IsVUFBV0EsRUFDbkIsRUFBQyxVQUFPd2dCLGFBQWNBLEVBQ3RCLEVBQUMsVUFBT0MscUJBQXNCQSxFQUM5QixFQUFDLFVBQU9DLG1CQUFvQkEsRUFDNUIsRUFBQyxVQUFPSSxZQUFhVixHQUFXUSxFQUFZNTZCLFNBQVMsUUFDckQsRUFBQyxVQUFPKzZCLGFBQWNYLEdBQVdRLEVBQVk1NkIsU0FBUyxZQUV4RDROLEtBRUUxRyxHQUVpQixpQkFBYnFDLEdBQ1I5SyxNQUFNNEIsUUFBUWtKLElBQ2RBLEVBQVM3UyxPQUNQLCtCQUFLa1gsVUFBVyxVQUFPcXRCLFNBQVUxeEIsR0FDL0IsRUFLViw0TEN0RkEsY0FBUywrRUFBQUgsT0FBTywreUJDQWhCLGlCQUNBLGFBRUEsVUFHQSxhQThEQSxVQS9DQSxTQUFrQixPQUNoQmpPLEVBQUssUUFDTDhRLEVBQVEsV0FDUmt2QixFQUFXLGNBQ1hDLEVBQU8sVUFDUHBoQixFQUFRLFdBQ1I4SixFQUFJLE9BQ0psVyxFQUFTLFlBQ1R5dEIsRUFBYSxnQkFDYixJQUFBdFIsS0FBQUEsT0FBSSxJQUFHLFdBQVEsRUFDZixJQUFBNFEsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFFWFcsR0FBZSxJQUFBL2dDLGNBQ25CLFNBQUNyQixHQUN5QixtQkFBYitTLEdBQ1RBLEVBQVUvUyxFQUFFM0MsT0FBNEI2a0MsUUFFNUMsR0FDQSxDQUFDbnZCLElBR0dzdkIsRUFDSiwrQ0FDYyxXQUNadGpDLElBQUssU0FBQ3VqQyxHQUNBQSxJQUNGQSxFQUFTSCxjQUFnQkEsRUFFN0IsRUFDQUQsUUFBU0EsRUFDVHBoQixTQUFVQSxFQUNWcE0sV0FBVyxhQUFTLENBQUMsVUFBTzZ0QixTQUFVN3RCLEVBQVcsVUFBT21jLEtBQ3hEOWQsU0FBVXF2QixFQUNWSCxZQUFhQSxFQUNiclgsS0FBTUEsRUFDTi9sQixLQUFLLFdBQ0w0OEIsVUFBV0EsSUFJZixPQUFJeC9CLEVBQ0ssd0JBQUMsRUFBQXVnQyxNQUFLLENBQUNuaUMsTUFBTzRCLEdBQVFvZ0MsR0FFdEIsZ0RBQUdBLEVBRWQsNExDbEVBLGFBQVMsNkVBQUFueUIsT0FBTyw0S0NBaEIsaUJBQ0EsYUFFQSxVQUNBLGFBK0NBLFVBbkNBLFNBQXFCLE9BQ25CdXlCLEVBQU0sU0FDTnpCLEVBQVksZUFDWjBCLEVBQVEsV0FDUkMsRUFBYSxnQkFDYixJQUFBalIsVUFBQUEsT0FBUyxJQUFHLGFBQVUsRUFDdEIsSUFBQWtSLFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBRWpCLE9BQ0UsK0JBQ0U3akMsSUFBS2lpQyxFQUNMdHNCLFdBQVcsYUFBUyxDQUFDLFVBQU9tdUIsWUFBYSxVQUFPblIsTUFFL0MrUSxFQUFPLzVCLEtBQUksU0FBQ3dNLEdBU1gsT0FDRSx3QkFBQyxFQUFBNHRCLFlBQVcsQ0FDVnBsQyxJQUFLd1gsRUFBTXhYLElBQ1h3WCxNQUFPQSxFQUNQNnRCLFdBQVk3dEIsRUFBTXhYLE9BQVFpbEMsYUFBYSxFQUFiQSxFQUFlamxDLEtBQ3pDNlgsUUFiaUIsV0FDZnF0QixHQUFhMXRCLEVBQU14WCxPQUFRaWxDLGFBQWEsRUFBYkEsRUFBZWpsQyxLQUM1Q2dsQyxFQUFTLE1BRVRBLEVBQVN4dEIsRUFFYixHQVVGLElBR04sK0xDakRBLGNBQVMsZ0ZBQUFoRixPQUFPLDRLQ0FoQixpQkFDQSxhQUVBLGFBcUNBLFVBMUJBLFNBQXFCLFNBQ25CZ0YsRUFBSyxRQUNMOHJCLEVBQVksZUFDWixJQUFBK0IsV0FBQUEsT0FBVSxJQUFHLEdBQUssRUFDbEIsSUFBQWxTLEtBQUFBLE9BQUksSUFBRyxXQUFRLEVBQ2Z0YixFQUFPLFVBRVAsT0FDRSxrQ0FDRXhXLElBQUtpaUMsRUFDTHRzQixXQUFXLGFBQVMsQ0FDbEIsVUFBT3N1QixZQUNQLFVBQU9uUyxTQUVMLEVBQUMsVUFBT29TLFVBQVdGLE9BRXJCLGNBQ1UsZUFDWnh0QixRQUFTQSxFQUNUdkMsTUFBTyxDQUFFK0IsZ0JBQWlCRyxFQUFNZ3VCLFVBRS9CaHVCLEVBQU1qVCxPQUFTLGdDQUFNeVMsVUFBVyxVQUFPeXVCLFFBQVMsaUJBQVVqdUIsRUFBTWpULE1BQUssV0FHNUUsK0xDdENBLGNBQVMsZ0ZBQUFpTyxPQUFPLDRLQ0FoQixpQkFDQSxhQUVBLFVBQ0EsYUFpQkEsU0FBU2t6QixFQUFrQixTQUN6QjF1QixFQUFTLFlBQ1RyRSxFQUFRLFdBQ1Iyd0IsRUFBWSxlQUNacUMsRUFBTSxTQUNOQyxFQUFNLFNBQ04sSUFBQUMsWUFBQUEsT0FBVyxJQUFHLEtBQUUsRUFDaEIsSUFBQUMsYUFBQUEsT0FBWSxJQUFHLEtBQUUsRUFDakIsSUFBQUMsUUFBQUEsT0FBTyxJQUFHLGFBQU8sRUFBQyxFQUNsQixJQUFBckMsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDakIsSUFBQXNDLFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUF2QyxTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBd0MsV0FBQUEsT0FBVSxJQUFHLE9BQUksRUFFakIsT0FDRSx3QkFBQyxFQUFBQyxNQUFLLENBQ0o1QyxhQUFjQSxFQUNkc0MsT0FBUUEsRUFDUkcsUUFBU0EsRUFDVEMsVUFBV0EsRUFDWHZDLFNBQVVBLEVBQ1Z3QyxXQUFZQSxHQUVaLCtCQUFLanZCLFdBQVcsYUFBUyxDQUFDLFVBQU9pdEIsVUFBV2p0QixPQUN2QzJ1QixHQUFVLDhCQUFJM3VCLFVBQVcsVUFBT212QixhQUFjUixHQUNqRCwrQkFDRTN1QixXQUFXLGFBQVMsQ0FDbEIsVUFBT292QixtQkFDTCxFQUFDLFVBQU8xQyxXQUFZQSxFQUFTLE1BR2hDL3dCLEdBRUgsK0JBQUtxRSxVQUFXLFVBQU9xdkIsdUJBQ3JCLCtCQUFLcnZCLFVBQVcsVUFBT3N2QixjQUFlVCxHQUN0QywrQkFBSzd1QixVQUFXLFVBQU9zdkIsY0FBZVIsS0FLaEQsQ0FFQUosRUFBa0JhLFlBQWMsb0JBRWhDLFVBQWViLHFNQ2pFZixjQUFTLHNGQUFBbHpCLE9BQU8sc05DQWhCLGlCQU9hLEVBQUFnMEIsY0FBZ0IsVUFBTTEzQixjQUNqQyxDQUFDLEdBR0gsOEJBQ0UsT0FBTyxVQUFNSyxXQUFXLEVBQUFxM0IsY0FDMUIsOHlCQ2JBLGlCQUNBLGFBQ0EsYUFFQSxhQUNBLFVBRUEsVUFDQSxRQUNBLFVBQ0EsVUFDQSxVQWdCTUMsRUFBa0QsQ0FDdERqc0IsTUFBTyxVQUFPa3NCLGlCQUNkQyxZQUFhLFVBQU9DLHVCQUNwQkMsVUFBVyxVQUFPQyxxQkFDbEIxaEIsS0FBTSxVQUFPMmhCLGdCQUNiQyxXQUFZLFVBQU9DLHNCQUNuQkMsU0FBVSxVQUFPQyxxQkFXbkIsU0FBU0MsRUFBTyxXQUNkQyxFQUFJLE9BQ0pyd0IsRUFBUyxZQUNUMUIsRUFBSyxRQUNMLElBQUFneUIsWUFBQUEsT0FBVyxJQUFHLEdBQUssRUFDbkIsSUFBQXRCLFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBQ2pCcnpCLEVBQVEsV0FDUixJQUFBMFIsY0FBQUEsT0FBYSxJQUFHLEdBQUssRUFDckIsSUFBQUMsYUFBQUEsT0FBWSxJQUFHLEdBQUssRUFDcEIsSUFBQWlqQixnQkFBQUEsT0FBZSxJQUFHLEVBQUEzbEMsU0FBU3FDLEtBQUksRUFDL0I4aEMsRUFBTyxVQUNQeUIsRUFBbUIsc0JBRWIsR0FBc0MsSUFBQXhrQyxXQUFTLEdBQTlDeWtDLEVBQWUsS0FBRUMsRUFBZ0IsS0FDbEMsR0FBMEMsSUFBQTFrQyxXQUFTLEdBQWxEMmtDLEVBQWdCLEtBQUVDLEVBQW1CLEtBRXRDdGlCLEdBQVUsSUFBQWhrQixRQUF1QixNQUNqQ3VtQyxFQXpCUixTQUNFdmlCLFdBRUEsT0FFQyxRQUZNLEVBQWUsUUFBZixFQUFBQSxFQUFRNWpCLGVBQU8sZUFBRXNWLFVBQVVoRCxNQUNoQ3ZVLE9BQU9nckIsT0FBT2djLEdBQXdCcnRCLEtBQUssYUFDNUMsZUFBRyxFQUNOLENBbUJxQzB1QixDQUE4QnhpQixHQUUzRHZCLEdBQVUsSUFBQWhVLFVBQ2QsV0FBTSxPQUFHZzJCLFFBQU8sRUFBRXVCLFlBQVcsRUFBdkIsR0FDTixDQUFDdkIsRUFBU3VCLEtBR1osSUFBQXJsQixZQUFXLFNBQVU4akIsR0FFckIsSUFBTTFhLEdBQWMsSUFBQTFuQixjQUFZLFdBQzlCK2pDLEdBQWlCLEdBQ2pCRSxHQUFvQixFQUN0QixHQUFHLElBRUc3YixHQUFhLElBQUFwb0IsY0FBWSxXQUM3QmlrQyxHQUFvQixFQUN0QixHQUFHLElBRUdqZCxHQUFlLElBQUFobkIsY0FBWSxXQUMvQitqQyxHQUFpQixHQUNqQkYsU0FBQUEsR0FDRixHQUFHLENBQUNBLElBRUosT0FBTyxVQUFTTyxhQUNkLHdCQUFDLEVBQUFoZ0IsY0FBYSxDQUNaekMsUUFBU0EsRUFDVGxCLEdBQUlpakIsRUFDSng1QixRQUFTLElBQ1QyYSxXQUFZaWUsRUFDWnBpQixjQUFlQSxFQUNmQyxhQUFjQSxFQUNka0MsU0FBVW1FLEVBQ1Z6RSxRQUFTbUYsRUFDVC9FLE9BQVF5RixHQUVSLHdCQUFDLEVBQUF5YSxjQUFjdDFCLFNBQVEsQ0FBQ3ZPLE1BQU9vaEIsR0FDN0IsK0JBQ0UvTSxXQUFXLGFBQVMsQ0FDbEIsVUFBT2d4QixPQUNQaHhCLFFBRUUsRUFBQyxVQUFPaXhCLFNBQVVSLFFBSXRCLCtCQUNFcG1DLElBQUtpa0IsRUFDTHRPLFdBQVcsYUFBUyxDQUNsQixVQUFPa3hCLFlBR1BMLElBRUZ2eUIsTUFBT0EsR0FFUCwrQkFBSzBCLFVBQVcsVUFBT214QixvQkFBcUJ4MUIsSUFFOUMsK0JBQ0VxRSxXQUFXLGFBQVMsQ0FDbEIsVUFBT294QixvQkFFTCxFQUFDLFVBQU9wQyxXQUFZQSxFQUNwQixFQUFDLFVBQU9pQyxTQUFVTixPQUd0Qjl2QixRQUFTa3VCLE9BS2pCd0IsRUFFSixDQUVBSCxFQUFPaUIsT0FBUyxFQUFBQyxhQUNoQmxCLEVBQU9tQixRQUFVLEVBQUFDLGNBQ2pCcEIsRUFBT3FCLE9BQVMsRUFBQUMsYUFFaEIsVUFBZXRCLDBLQzNJZixpQkFDQSxhQUVBLGFBZUEsVUFSQSxTQUF1QixPQUFFejBCLEVBQVEsV0FBRXFFLEVBQVMsWUFDMUMsT0FDRSwrQkFBS0EsV0FBVyxhQUFTLENBQUMsVUFBTzJ4QixjQUFlM3hCLEtBQzdDckUsRUFHUCxpTUNoQkEsY0FBUyxrRkFBQUgsT0FBTyw0S0NBaEIsaUJBQ0EsYUFFQSxhQWFBLFVBTkEsU0FBc0IsT0FBRUcsRUFBUSxXQUFFcUUsRUFBUyxZQUN6QyxPQUNFLCtCQUFLQSxXQUFXLGFBQVMsQ0FBQyxVQUFPNHhCLGFBQWM1eEIsS0FBY3JFLEVBRWpFLGdNQ2RBLGNBQVMsaUZBQUFILE9BQU8sNEtDQWhCLGlCQUNBLGFBQ0EsVUFDQSxhQUVBLFlBQ0EsVUF3QkEsVUFqQkEsU0FBc0IsT0FBRUcsRUFBUSxXQUFFcUUsRUFBUyxZQUNuQyxHQUEyQixJQUFBNnhCLG9CQUF6QjlDLEVBQU8sVUFBRXVCLEVBQVcsY0FFNUIsT0FDRSwrQkFBS3R3QixXQUFXLGFBQVMsQ0FBQyxVQUFPOHhCLGFBQWM5eEIsTUFDM0Nzd0IsR0FDQSwrQkFBS3R3QixVQUFXLFVBQU8reEIsbUJBQ3JCLCtCQUFLL3hCLFVBQVcsVUFBT2d5QixzQkFBdUJueEIsUUFBU2t1QixHQUNyRCx3QkFBQyxFQUFBa0QsS0FBSSxDQUFDQyxJQUFLLFVBQVcvVixLQUFNLGFBSWpDeGdCLEVBR1AsOExDNUJBLGNBQVMsaUZBQUFILE9BQU8sNExDQWhCLGNBQVMsMkVBQUFBLE9BQU8sOExDQWhCLGlCQUVBLFVBQ0EsVUFHQSxhQUVBLGFBU0EscUJBQTBDLE9BQ3hDMkUsRUFBTyxVQUNQZ3lCLEVBQVUsYUFDRDNuQyxFQUFXLFVBRXBCLE9BQ0Usd0JBQUMsRUFBQTRuQyxPQUFNLENBQ0xoUixNQUFNLE9BQ05oVixTQUFVK2xCLEVBQ1Z0eEIsUUFBU3JXLEVBQ1QyeEIsS0FBSyxTQUNMMFEscUJBQW1CLEdBRW5CLCtCQUFLN3NCLFVBQVcsVUFBSWl0QixXQUNqQjlzQixFQUNELHdCQUFDLEVBQUE4eEIsS0FBSSxDQUFDdnNCLElBQUksV0FBV3dzQixJQUFLLGFBSWxDLGd2QkNwQ0EsaUJBQ0EsVUFFQSxTQUNBLFVBNEJBLG9CQUF5QyxPQUN2Q0csRUFBZ0IsbUJBQ2hCcFAsRUFBSyxRQUNLcVAsRUFBWSxXQUN0Qm55QixFQUFPLFVBQ1BveUIsRUFBZSxrQkFDZkMsRUFBWSxlQUNaLElBQUFDLFVBQUFBLE9BQVMsSUFBRyxHQUFFQyxTQUFVLFNBQVVDLFdBQVksUUFBUSxFQUVoRCxHQUFzQixJQUFBM21DLFdBQVMsR0FBOUI0aUMsRUFBTSxLQUFFZ0UsRUFBUyxLQUNsQnZvQyxHQUFNLElBQUFGLGtCQUFnQixXQUFNLE9BQUF5b0MsR0FBVSxFQUFWLElBSzVCVCxHQUFjbFAsR0FBMEIsSUFBakJBLEVBQU1uNkIsT0FDN0IrcEMsRUFBZSxXQUFNLE9BQUFELEdBQVdoRSxFQUFYLEVBRTNCLE9BQ0Usd0JBQUMsRUFBQWtFLGNBQWEsQ0FDWkMsT0FDNkIsbUJBQXBCUixFQUNMQSxFQUFnQixDQUNkcHlCLFFBQU8sRUFDUGd5QixXQUFVLEVBQ1ZLLGFBQVksRUFDWkssYUFBWSxJQUdkLHdCQUFDLEVBQUFHLFVBQVMsQ0FDUjd5QixRQUFTQSxFQUNUZ3lCLFdBQVlBLEVBQ1p0eEIsUUFBU2d5QixJQUlmSixVQUFXQSxFQUNYcG9DLElBQUtBLEdBRUwsd0JBQUMsRUFBQTRvQyxLQUFJLENBQUNyRSxPQUFRQSxHQUNYM0wsR0FDQ0EsRUFBTWp2QixLQUFJLFNBQUNtVyxHQUFTLE9BQ2xCLHdCQUFDLEVBQUErb0IsU0FBUSxDQUNQQyxTQUFVaHBCLEVBQUswUixNQUFPMlcsYUFBWSxFQUFaQSxFQUFjM1csSUFDcEM3eUIsSUFBS21oQixFQUFLMFIsR0FDVmhiLFFBQVMsV0FBTSxPQWxDUCxTQUFDc0osR0FDbkJtb0IsRUFBYW5vQixHQUNieW9CLEdBQVUsRUFDWixDQStCMkJwb0MsQ0FBWTJmLEVBQVosR0FFZGtvQixFQUNHQSxFQUFpQixDQUNmbG9CLEtBQUksRUFDSmtrQixXQUFZbGtCLEVBQUswUixNQUFPMlcsYUFBWSxFQUFaQSxFQUFjM1csTUFFeEMxUixFQUFLK0wsS0FYTyxLQWlCOUIsc0hDMUZBLGNBQ0UsMEVBQUFrZCxRQUFRLElBT1YsYUFDRSxtRkFBQUosU0FBUyw0S0NUWCxpQkFDQSxhQUdBLGFBdUVBLFVBakRBLFNBQW1CLFNBQ2pCcjNCLEVBQVEsV0FDUjAzQixFQUFNLFNBQ05oMUIsRUFBUSxXQUNSdXZCLEVBQVEsV0FDUixJQUFBMEYsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQWxuQixTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBbWdCLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFFLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFFLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFELFVBQUFBLE9BQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUFFLFlBQUFBLE9BQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFDLG9CQUFBQSxPQUFtQixJQUFHLEdBQUssRUFDM0IsSUFBQUMsa0JBQUFBLE9BQWlCLElBQUcsR0FBSyxFQUN6QixJQUFBTixRQUFBQSxPQUFPLElBQUcsR0FBSyxFQUNmLElBQUFyUSxLQUFBQSxPQUFJLElBQUcsV0FBUSxFQUVmLE9BQ0UsaUNBQ0VuYyxXQUFXLGFBQVMsQ0FDbEIsVUFBT3pTLE1BQ1AsVUFBTzR1QixTQUVMLEVBQUMsVUFBT29RLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsU0FBVUEsRUFDbEIsRUFBQyxVQUFPQyxVQUFXQSxFQUNuQixFQUFDLFVBQU9FLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0QsV0FBWUEsRUFDcEIsRUFBQyxVQUFPRSxhQUFjQSxFQUN0QixFQUFDLFVBQU9DLHFCQUFzQkEsRUFDOUIsRUFBQyxVQUFPQyxtQkFBb0JBLFFBSWhDLGlDQUNFOXNCLFVBQVcsVUFBT3V6QixNQUNsQnBqQyxLQUFLLE9BQ0wwckIsR0FBRyxPQUNId1gsT0FBUUEsRUFDUkMsU0FBVUEsRUFDVmpwQyxJQUFLdWpDLEVBQ0x4aEIsU0FBVUEsRUFDVi9OLFNBQVVBLElBRVgxQyxFQUdQLDZMQ3pFQSxjQUFTLDhFQUFBSCxPQUFPLDRLQ0FoQixpQkFDQSxhQUVBLGFBa0VBLFVBbkNBLFNBQXVCLFNBQ3JCd0UsRUFBUyxZQUNUckUsRUFBUSxXQUNSMndCLEVBQVksZUFDWixJQUFBOUQsT0FBQUEsT0FBTSxJQUFHLFdBQVEsRUFDakIsSUFBQWlLLFVBQUFBLE9BQVMsSUFBRyxHQUFFRSxXQUFZLFNBQVVELFNBQVUsU0FBVWMsT0FBUSxZQUFZLEVBRXRFQyxFQUNxQixXQUF6QmhCLEVBQVVFLFdBQ04sbUJBQ0FGLEVBQVVFLFdBRVZlLEVBQ21CLFdBQXZCakIsRUFBVUMsU0FBd0IsaUJBQW1CRCxFQUFVQyxTQUVqRSxPQUNFLCtCQUNFcm9DLElBQUtpaUMsRUFBWSxjQUNMLGlCQUNadHNCLFdBQVcsYUFBUyxDQUNsQixVQUFPaXRCLFVBQ1AsVUFBT3dHLEdBQ1AsVUFBT0MsR0FDUCxVQUFPbEwsU0FFTCxFQUFDLFVBQU9tTCxPQUE2QixjQUFyQmxCLEVBQVVlLFVBRTVCeHpCLEtBR0RyRSxFQUdQLGlNQ25FQSxjQUFTLGtGQUFBSCxPQUFPLDRLQ0FoQixpQkFDQSxhQUNBLGFBaUNBLFVBdkJBLFNBQWMsU0FDWjAyQixFQUFHLE1BQ0h4c0IsRUFBRyxNQUNING1CLEVBQVksZUFDWixJQUFBblEsS0FBQUEsT0FBSSxJQUFHLFdBQVEsRUFDZixJQUFBb1EsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFFaEIsT0FDRSwrQkFDRWxpQyxJQUFLaWlDLEVBQ0x0c0IsV0FBVyxhQUFTLENBQ2xCLFVBQU80ekIsS0FDUCxVQUFPelgsU0FDTCxFQUFDLFVBQU9vUSxVQUFXQSxFQUFRLEtBRS9Cc0gsWUFBWSxZQUFXLGNBQ1gsT0FDWm51QixJQUFLQSxFQUNMd3NCLElBQUtBLEdBR1gsd0xDakNBLGNBQVMseUVBQUExMkIsT0FBTyw0S0NBaEIsaUJBQ0EsYUFFQSxVQUNBLGFBcUVBLFVBL0NBLFNBQW9CLFNBQ2xCd0UsRUFBUyxZQUNUc3NCLEVBQVksZUFDWjN3QixFQUFRLFdBQ1J1MkIsRUFBRyxNQUNIeHNCLEVBQUcsTUFDSCxJQUFBc25CLFlBQUFBLE9BQVcsSUFBRyxLQUFFLEVBQ2hCLElBQUFuc0IsUUFBQUEsT0FBTyxJQUFHLGFBQU8sRUFBQyxFQUNsQixJQUFBdUwsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQW1nQixTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRSxTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRSxTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBQyxZQUFBQSxPQUFXLElBQUcsR0FBSyxFQUNuQixJQUFBSixRQUFBQSxPQUFPLElBQUcsR0FBSyxFQUNmLElBQUFyUSxLQUFBQSxPQUFJLElBQUcsV0FBUSxFQUNmLElBQUFoc0IsS0FBQUEsT0FBSSxJQUFHLFdBQVEsRUFFZixPQUNFLGtDQUNFOUYsSUFBS2lpQyxFQUNMdHNCLFdBQVcsYUFBUyxDQUNsQixVQUFPaXRCLFVBQ1AsVUFBTzlRLFNBRUwsRUFBQyxVQUFPb1EsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxTQUFVQSxFQUNsQixFQUFDLFVBQU9DLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0UsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxhQUFjQSxFQUN0QixFQUFDLFVBQU9rSCxXQUFZdEgsR0FBV1EsRUFBWTU2QixTQUFTLE9BQ3BELEVBQUMsVUFBTys2QixhQUFjWCxHQUFXUSxFQUFZNTZCLFNBQVMsU0FDdEQsRUFBQyxVQUFPMmhDLGNBQWV2SCxHQUFXUSxFQUFZNTZCLFNBQVMsVUFDdkQsRUFBQyxVQUFPODZCLFlBQWFWLEdBQVdRLEVBQVk1NkIsU0FBUyxXQUV2RDROLElBRUZvTSxTQUFVQSxFQUNWdkwsUUFBU0EsRUFDVDFRLEtBQU1BLEVBQ05pOUIsS0FBSyxVQUVMLHdCQUFDLEVBQUE2RSxLQUFJLENBQUNDLElBQUtBLEVBQUt4c0IsSUFBS0EsRUFBS3lXLEtBQU1BLEVBQU1vUSxTQUFVQSxJQUMvQzV3QixFQUdQLDhMQ3ZFQSxjQUFTLCtFQUFBSCxPQUFPLCt1QkNBaEIsaUJBRUEsYUFDQSxVQUNBLGFBMkVBLFVBbERBLFNBQXdCLFNBQ2xCd1ksRUFBUyxLQUNic1ksRUFBWSxlQUNaM3dCLEVBQVEsV0FDUnFFLEVBQVMsWUFDVGt5QixFQUFHLE1BQ0h4c0IsRUFBRyxNQUNILElBQUE2bUIsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUUsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUUsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsWUFBQUEsT0FBVyxJQUFHLEdBQUssRUFDbkIsSUFBQUosUUFBQUEsT0FBTyxJQUFHLEdBQUssRUFDZixJQUFBUSxZQUFBQSxPQUFXLElBQUcsS0FBRSxFQUNoQixJQUFBNWdCLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUErUCxLQUFBQSxPQUFJLElBQUcsV0FBUSxFQUNaN2lCLEVBQUssSUFmYyxtSkFxQnRCLFlBSnlCLElBQWQwYSxJQUNUQSxFQUFZLEtBSVosd0JBQUNBLEVBQVMsR0FDUjNwQixJQUFLaWlDLEVBQVksY0FDTCxtQkFDWnRzQixXQUFXLGFBQVMsQ0FDbEIsVUFBT2l0QixVQUNQLFVBQU85USxTQUVMLEVBQUMsVUFBT29RLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsU0FBVUEsRUFDbEIsRUFBQyxVQUFPQyxVQUFXQSxFQUNuQixFQUFDLFVBQU9FLFVBQVdBLEVBQ25CLEVBQUMsVUFBT3ZnQixVQUFXQSxFQUNuQixFQUFDLFVBQU93Z0IsYUFBY0EsRUFDdEIsRUFBQyxVQUFPa0gsV0FBWXRILEdBQVdRLEVBQVk1NkIsU0FBUyxPQUNwRCxFQUFDLFVBQU8rNkIsYUFBY1gsR0FBV1EsRUFBWTU2QixTQUFTLFNBQ3RELEVBQUMsVUFBTzJoQyxjQUFldkgsR0FBV1EsRUFBWTU2QixTQUFTLFVBQ3ZELEVBQUMsVUFBTzg2QixZQUFhVixHQUFXUSxFQUFZNTZCLFNBQVMsV0FFdkQ0TixLQUVFMUcsR0FFSix3QkFBQyxFQUFBMjRCLEtBQUksQ0FBQ0MsSUFBS0EsRUFBS3hzQixJQUFLQSxFQUFLeVcsS0FBTUEsRUFBTW9RLFNBQVVBLElBQy9DNXdCLEVBR1Asa01DN0VBLGFBQVMsbUZBQUFILE9BQU8sNEtDQWhCLGlCQUNBLGFBRUEsYUF1REEsVUF4Q0EsU0FBd0IsT0FDdEIwMkIsRUFBRyxNQUNIeHNCLEVBQUcsTUFDSHN1QixFQUFRLFdBQ1JDLEVBQVMsWUFDVHQ0QixFQUFRLFdBQ1Iyd0IsRUFBWSxlQUNaLElBQUE5RCxPQUFBQSxPQUFNLElBQUcsWUFBUyxFQUNsQixJQUFBMEwsU0FBQUEsT0FBUSxJQUFHLFNBQU0sRUFDakIsSUFBQUMsUUFBQUEsT0FBTyxJQUFHLFVBQU8sRUFDakI3MUIsRUFBSyxRQUVDODFCLEVBQ0osK0JBQ0VwMEIsV0FBVyxhQUFTLENBQUMsVUFBT3EwQixNQUFPLFVBQU83TCxLQUMxQ3FMLFlBQVksWUFBVyxjQUNYLFFBQ1pudUIsSUFBS0EsRUFDTHdzQixJQUFLQSxFQUNMenpCLE1BQU91MUIsRUFDUHQxQixPQUFRdTFCLEVBQ1JDLFNBQVVBLEVBQ1ZDLFFBQVNBLEVBQ1Q3MUIsTUFBT0EsSUFJWCxPQUFPM0MsRUFDTCwrQkFDRXRSLElBQUtpaUMsRUFDTHRzQixXQUFXLGFBQVMsQ0FBQyxVQUFPaXRCLFVBQVcsVUFBT3FILGNBRTdDRixFQUNBejRCLEdBQVksK0JBQUtxRSxVQUFXLFVBQU91MEIsU0FBVTU0QixJQUU5QyxDQUdOLHlMQ3hEQSxjQUFTLDBFQUFBSCxPQUFPLDRLQ0FoQixpQkFDQSxhQUVBLGFBcUJBLFVBWkEsU0FBZSxPQUFFd0UsRUFBUyxZQUFFckUsRUFBUSxXQUFFaFEsRUFBSyxRQUFFMmdDLEVBQVksZUFDdkQsT0FDRSxpQ0FDRWppQyxJQUFLaWlDLEVBQ0x0c0IsV0FBVyxhQUFTLENBQUMsVUFBT2l0QixVQUFXanRCLEtBRXRDclUsRUFDQWdRLEVBR1AseUxDdEJBLGNBQVMsMEVBQUFILE9BQU8sNEtDQWhCLGlCQUNBLGFBRUEsYUFvQ0EsVUExQkEsU0FBa0IsT0FDaEJHLEVBQVEsV0FDUnFFLEVBQVMsWUFDVHNzQixFQUFZLGVBQ1pxQyxFQUFNLFNBQ042RixFQUFhLGdCQUViLE9BQ0UsK0JBQUtucUMsSUFBS2lpQyxFQUFjdHNCLFdBQVcsYUFBUyxDQUFDLFVBQU9pdEIsVUFBV2p0QixNQUMzRDJ1QixHQUFVNkYsSUFDViwrQkFBS3gwQixVQUFXLFVBQU8ydUIsUUFDcEJBLEdBQ0MsOEJBQUkzdUIsVUFBVyxVQUFPeTBCLFlBQWE1WSxHQUFJOFMsRUFBTzlTLElBQzNDOFMsRUFBT2p5QixNQUdYODNCLEdBR0wsZ0RBQXFCN0YsYUFBTSxFQUFOQSxFQUFROVMsR0FBSTdiLFVBQVcsVUFBTzAwQixNQUNoRC80QixHQUlULDBLQ3JDQSxpQkFDQSxhQUVBLFVBRUEsYUEyQ0EsVUE5QkEsU0FBc0IsT0FDcEJBLEVBQVEsV0FDUixJQUFBa1UsT0FBQUEsT0FBTSxJQUFHLEdBQUssRUFDZCxJQUFBekQsU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQXdnQixZQUFBQSxPQUFXLElBQUcsR0FBSyxFQUNuQixJQUFBRixVQUFBQSxPQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBdlEsS0FBQUEsT0FBSSxJQUFHLFdBQVEsRUFDZixJQUFBaUYsTUFBQUEsT0FBSyxJQUFHLFdBQVEsRUFDaEIsSUFBQXZnQixRQUFBQSxPQUFPLElBQUcsYUFBTyxFQUFDLEVBRWxCLE9BQ0UsOEJBQUliLFdBQVcsYUFBUyxDQUFDLFVBQU8yMEIsZ0JBQzlCLHdCQUFDLEVBQUF2QyxPQUFNLENBQ0x2eEIsUUFBU0EsRUFDVHVMLFNBQVVBLEVBQ1ZtZ0IsU0FBVTFjLEVBQ1YrYyxZQUFhQSxFQUNiRixVQUFXQSxFQUNYdEwsTUFBT0EsRUFDUGpGLEtBQU1BLEVBQ04wUSxxQkFBbUIsRUFDbkJKLFVBQVEsRUFDUkUsVUFBUSxHQUVQaHhCLEdBSVQsOHVCQzlDQSxpQkFDQSxhQUVBLFFBQ0EsYUFpREEsVUFsQ0EsU0FBMEIsR0FDeEIsSUFBQUEsRUFBUSxXQUNKcVksRUFBUyxLQUNiLElBQUFuRSxPQUFBQSxPQUFNLElBQUcsR0FBSyxFQUNkLElBQUErYyxZQUFBQSxPQUFXLElBQUcsR0FBSyxFQUNuQixJQUFBRixVQUFBQSxPQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBdEwsTUFBQUEsT0FBSyxJQUFHLFdBQVEsRUFDaEIsSUFBQWpGLEtBQUFBLE9BQUksSUFBRyxXQUFRLEVBQ1o3aUIsRUFBSyxJQVJnQixxRUFjeEIsWUFKeUIsSUFBZDBhLElBQ1RBLEVBQVksS0FJWiw4QkFBSWhVLFdBQVcsYUFBUyxDQUFDLFVBQU8yMEIsZ0JBQzlCLHdCQUFDLEVBQUFDLFdBQVUsR0FDVEMsR0FBSTdnQixFQUNKdVksU0FBVTFjLEVBQ1YrYyxZQUFhQSxFQUNiRixVQUFXQSxFQUNYdEwsTUFBT0EsRUFDUGpGLEtBQU1BLEVBQ04wUSxxQkFBbUIsRUFDbkJKLFVBQVEsRUFDUkUsVUFBUSxHQUNKcnpCLEdBRUhxQyxHQUlULDhOQ25EQSxjQUFTLDZFQUFBSCxPQUFPLElBQ2hCLGNBQVMsaUZBQUFBLE9BQU8sSUFDaEIsY0FBUyxxRkFBQUEsT0FBTywreUJDRmhCLGlCQU9BLGFBRUEsVUFDQSxhQWlGQSxVQXJFQSxTQUFjLFdBQ1pHLEVBQVEsV0FDUjJ3QixFQUFZLGVBQ1p0c0IsRUFBUyxZQUNULElBQUE0dUIsT0FBQUEsT0FBTSxJQUFHLEdBQUksRUFDYkQsRUFBTSxTQUNObUcsRUFBTSxTQUNOLElBQUFDLFlBQUFBLE9BQVcsSUFBRyxHQUFJLEVBRVpDLEdBQWdCLElBQUE3OEIsWUFBVyxFQUFBODhCLGtCQUMzQmpULEdBQVcsSUFBQTEzQixRQUE4QixNQUN6Q0QsRUFBTWlpQyxHQUFnQnRLLEVBRTVCLElBQUtnVCxFQUNILE1BQU0sSUFBSUUsTUFDUixnRUFxQkosT0FsQkEsSUFBQW5qQyxrQkFBZ0IsV0FDZCxHQUFJZ2pDLEdBQWUxcUMsRUFBSUssUUFBUyxDQUN4QixNQUFrQkwsRUFBSUssUUFBUXlxQyx3QkFBNUIsRUFBRyxNQUFFQyxFQUFNLFNBQ2JDLEVBQ3VCLFFBQTNCTCxFQUFjdEMsU0FBcUIsRUFBTW5qQyxPQUFPK2xDLFlBQWNGLEVBRWhFLEdBQUlDLEVBQWlCLEVBQUcsQ0FDdEIsSUFBTUUsRUFBT2xyQyxFQUFJSyxRQUFROHFDLGNBQWMsTUFDakNDLEVBQWdCRixFQUFLRyxpQkFBaUIsUUFDdENDLEVBQVlKLEVBQUtoVixhQUFlOFUsRUFDaEMxUCxFQUFTOFAsRUFBYzNzQyxPQUN6QjRVLGlCQUFpQiszQixFQUFjLElBQUlHLFVBQ25DLEVBQ0pMLEVBQUtqM0IsTUFBTXUzQixVQUFZLGVBQVFGLEVBQVMsZ0JBQVFoUSxFQUFNLE1BRzVELEdBQUcsQ0FBQ2lKLEVBQVFvRyxFQUFlRCxJQUV0Qm5HLEVBS0gsZ0RBQ0UsK0JBQ0V2a0MsSUFBS0EsRUFDTDJWLFdBQVcsYUFBUyxDQUNsQixVQUFPODFCLFdBQ0wsRUFBQyxVQUFPekYsTUFBT3pCLEVBQU0sR0FDdkI1dUIsS0FHRixtQ0FDRzJ1QixHQUFVQyxHQUFVLDhCQUFJNXVCLFVBQVcsVUFBTzJ1QixRQUFTQSxHQUNwRCxrQ0FBS2h6QixJQUVObTVCLEdBQVVsRyxHQUNULCtCQUNFNXVCLFdBQVcsYUFBUyxDQUNsQixVQUFPODBCLGFBQ0wsRUFBQyxVQUFPbkksV0FBWWh4QixFQUFRLE1BRy9CbTVCLEtBeEJGLElBOEJYLHcwQkN6RkEsaUJBT0EsYUFFQSxhQWNhLEVBQUFHLGlCQUFtQixVQUFNbjlCLG1CQUVwQzVMLEdBNkJGLFdBQWUsSUFBQTZwQyxhQTNCZixTQUNFLEVBTUExckMsT0FMRXNSLEVBQVEsV0FDUm8zQixFQUFNLFNBQ04veUIsRUFBUyxZQUNULElBQUF5eUIsVUFBQUEsT0FBUyxJQUFHLEdBQUVFLFdBQVksT0FBUUQsU0FBVSxVQUFVLEVBSXhELE9BQ0UsK0JBQUtyb0MsSUFBS0EsRUFBSzJWLFdBQVcsYUFBUyxDQUFDLFVBQU9pdEIsVUFBV2p0QixLQUNuRCt5QixFQUNELHdCQUFDLEVBQUFrQyxpQkFBaUIvNkIsU0FBUSxDQUFDdk8sT0FBTyxJQUFBb04sVUFBUSxXQUFNLE9BQUEwNUIsQ0FBQSxHQUFXLENBQUNBLEtBQzFELCtCQUNFenlCLFdBQVcsYUFBUyxDQUNsQixVQUFPZzJCLGNBQ1AsVUFBT3ZELEVBQVVFLFlBQ2pCLFVBQU9GLEVBQVVDLGFBR2xCLzJCLElBS1gsNEtDcERBLGlCQUNBLGFBRUEsWUFnQ0EsVUF0QkEsU0FBa0IsV0FDaEJBLEVBQVEsV0FDUnFFLEVBQVMsWUFDVGEsRUFBTyxVQUNQLElBQUE2ckIsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDakIsSUFBQXlHLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBRWhCLE9BQ0UsOEJBQ0VuekIsV0FBVyxhQUFTLENBQ2xCLFVBQU9pMkIsZUFDTCxFQUFDLFVBQU9wbUIsUUFBU3NqQixFQUFRLFNBQ3pCLEVBQUMsVUFBT3pHLFdBQVlBLEVBQVMsR0FDL0Ixc0IsSUFFRmEsUUFBU0EsR0FFUmxGLEVBR1AsOHVCQ2pDQSxpQkFDQSxhQUVBLGFBcUNBLFVBMUJBLFNBQXNCLFNBQ2hCcVksRUFBUyxLQUNiclksRUFBUSxXQUNScUUsRUFBUyxZQUNULElBQUEwc0IsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDZHB6QixFQUFLLElBTFksMkNBV3BCLFlBSnlCLElBQWQwYSxJQUNUQSxFQUFZLEtBSVosd0JBQUNBLEVBQVMsaUJBQ0ksaUJBQ1poVSxXQUFXLGFBQVMsQ0FDbEIsVUFBT2syQixhQUNQbDJCLFFBQ0UsRUFBQyxVQUFPMHNCLFdBQVlBLEVBQVMsTUFFN0JwekIsR0FFSHFDLEVBR1Asa09DdENBLGFBQVMseUVBQUFILE9BQU8sSUFDaEIsY0FBUyxrRkFBQUEsT0FBTyxJQUNoQixjQUFTLDZFQUFBQSxPQUFPLElBQ2hCLGNBQVMsaUZBQUFBLE9BQU8sZ3pCQ0hoQixpQkFDQSxVQUNBLGFBRUEsYUFxRUEsVUF2REEsU0FBZSxXQUNiRyxFQUFRLFdBQ1Iyd0IsRUFBWSxlQUNac0MsRUFBTSxTQUNObUUsRUFBTSxTQUNOLElBQUFuRyxZQUFBQSxPQUFXLElBQUcsR0FBSyxFQUNuQixJQUFBSCxTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBdUMsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDakIsSUFBQUQsUUFBQUEsT0FBTyxJQUFHLGFBQU8sRUFBQyxFQUNsQixJQUFBRSxXQUFBQSxPQUFVLElBQUcsT0FBSSxHQUVqQixJQUFBaGtCLFlBQVcsU0FBVThqQixHQUVyQixJQUFNb0gsR0FBcUIsSUFBQXhwQyxjQUFZLFdBQ3JDb2lDLEdBQ0YsR0FBRyxDQUFDQSxJQUVKLE9BQ0VILEdBQ0UsK0JBQUt2a0MsSUFBS2lpQyxHQUNSLCtCQUNFaHVCLE1BQU8sQ0FBRTgzQixPQUFRbkgsR0FDakJqdkIsV0FBVyxhQUFTLENBQ2xCLFVBQU91MEIsY0FDTCxFQUFDLFVBQU92RixXQUFZQSxFQUFTLEtBQy9CLGNBQ1UsZ0JBQ1pudUIsUUFBU3MxQixJQUVYLCtCQUNFNzNCLE1BQU8sQ0FBRTgzQixPQUFRbkgsRUFBYSxHQUM5Qmp2QixXQUFXLGFBQVMsQ0FDbEIsVUFBT3EyQixZQUVMLEVBQUMsVUFBT3pKLGFBQWNBLEVBQ3RCLEVBQUMsVUFBT0gsVUFBV0EsT0FFckIsY0FDVSxTQUVYOXdCLEdBRUZvM0IsR0FDQywrQkFDRXowQixNQUFPLENBQUU4M0IsT0FBUW5ILEVBQWEsR0FDOUJqdkIsVUFBVyxVQUFPczJCLGFBRWpCdkQsR0FNYix5TEN2RUEsY0FBUywwRUFBQXYzQixPQUFPLDRMQ0FoQixpQkFFQSxVQUNBLFVBRUEsYUFFQSxhQUlNKzZCLEVBQWMsU0FBQ0MsRUFBZ0JDLEdBQ25DLE9BQWdCLEdBQVRELEVBQWNDLENBQ3ZCLEVBRU1DLEVBQVcsU0FBQ0YsR0FDaEIsT0FBTzEvQixLQUFLNnZCLE1BQU02UCxFQUFTLEdBQzdCLEVBRU1HLEVBQWlCLENBQUMsSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssS0FReEQsRUFBQUMsT0FBUyxVQUFNYixZQUMxQixTQUFDLEVBQXdDMXJDLE9BQXRDbXNDLEVBQU0sU0FBRW40QixFQUFRLFdBQUUsSUFBQStOLFNBQUFBLE9BQVEsSUFBRyxHQUFLLEVBYzdCeXFCLEVBQTBCLFNBQUNDLEdBQy9CLGdCQUFDeHJDLEdBQ0NBLEVBQUVpZCxrQkFFRmxLLEVBQVN5NEIsRUFDWCxDQUpBLEVBTUlDLEVBQWFsbUMsTUFBTSxJQUN0Qm1tQyxLQUFLLEdBQ0xoakMsS0FBSSxTQUFDMUcsRUFBR2dELEdBQ1AsSUFBTTJtQyxHQUFnQjNtQyxFQUFRLEdBQUssR0FDbkMsT0FDRSx3QkFBQyxFQUFBOGhDLE9BQU0sQ0FDTHBwQyxJQUFLc0gsRUFDTDhiLFNBQVVBLEVBQ1Z1Z0IsVUFBUSxFQUNSRixVQUFRLEVBQ1JKLGNBQWV3SyxFQUF3Qk4sRUFBWUMsRUFBUVMsS0FFMURBLEVBR1AsSUFFRixPQUNFLCtCQUFLajNCLFVBQVcsVUFBSWszQixPQUFRN3NDLElBQUtBLEVBQUtrWCxVQUFXLEVBQUc3QixVQXRDaEMsU0FBQ3BVLEdBQ3JCLEdBQWMsY0FBVkEsRUFBRXRDLElBQ0pzQyxFQUFFaWQsa0JBRUZsSyxFQUFTcTRCLEVBQVNGLFNBQ2IsR0FBSUcsRUFBZXZrQyxTQUFTOUcsRUFBRXRDLEtBQU0sQ0FDekNzQyxFQUFFaWQsa0JBRUYsSUFBTWt1QixFQUFRVSxTQUFTN3JDLEVBQUV0QyxJQUFLLElBQzlCcVYsRUFBU2s0QixFQUFZQyxFQUFRQyxJQUVqQyxFQTJCOEUsY0FBYyxVQUN4RiwrQkFBS3oyQixVQUFXLFVBQUlvM0IsU0FDakJMLEVBQ0Qsd0JBQUMsRUFBQTNFLE9BQU0sQ0FDTGhtQixTQUFVQSxFQUNWdWdCLFVBQVEsRUFDUkYsVUFBUSxFQUNSRyxhQUFXLEVBQ1hQLGNBQWV3SyxFQUF3QkgsRUFBU0YsS0FFaEQsd0JBQUMsRUFBQXZFLEtBQUksQ0FBQ3ZzQixJQUFJLFlBQVl3c0IsSUFBSyxjQUtyQyxrR0NsRkYsY0FBUyx3RUFBQTBFLE1BQU0sNEtDQWYsaUJBQ0EsYUFDQSxZQW1DQSxVQXpCQSxTQUFpQixTQUNmajdCLEVBQVEsV0FDUjJ3QixFQUFZLGVBQ1osSUFBQU0sWUFBQUEsT0FBVyxJQUFHLEdBQUssRUFDbkIsSUFBQXlLLFFBQUFBLE9BQU8sSUFBRyxHQUFLLEVBQ2YsSUFBQXgyQixRQUFBQSxPQUFPLElBQUcsYUFBTyxFQUFDLEVBRWxCLE9BQ0UsK0JBQ0V4VyxJQUFLaWlDLEVBQVksY0FDTCxVQUNadHNCLFdBQVcsYUFBUyxDQUNsQixVQUFPdTBCLGNBRUwsRUFBQyxVQUFPM0gsYUFBY0EsRUFDdEIsRUFBQyxVQUFPK0csT0FBUTBELE9BR3BCeDJCLFFBQVNBLEdBRVJsRixFQUdQLDJMQ25DQSxjQUFTLDRFQUFBSCxPQUFPLCt5QkNBaEIsaUJBQ0EsYUFFQSxhQUNBLFVBRUEsVUFDQSxVQUNBLGFBQ0EsVUF3Q0EsVUFoQ0EsU0FBcUIsU0FBRXdFLEVBQVMsWUFBRXpTLEVBQUssUUFBRXRELEVBQU8sVUFDdENxdEMsR0FBc0IsSUFBQW4vQixZQUFXLEVBQUFvL0IsZUFBYyxrQkFDakQsR0FBMkIsSUFBQXYrQixXQUFVcytCLEdBQXBDRSxFQUFRLEtBQUVDLEVBQVksS0FFdkJDLEdBQW1CLElBQUEvcUMsY0FBWSxXQUNuQzhxQyxHQUNGLEdBQUcsSUFFSCxPQUNFLCtCQUFLejNCLFVBQVdBLEdBQ2QsK0JBQUtBLFVBQVcsVUFBTzJ1QixPQUFROXRCLFFBQVM2MkIsR0FDdEMsK0JBQUsxM0IsVUFBVyxVQUFPelMsT0FBUUEsR0FDL0Isd0JBQUMsRUFBQW9xQyxXQUFVLENBQ1QzM0IsV0FBVyxhQUFTLE9BQ2hCLEVBQUMsVUFBT3czQixVQUFXQSxFQUFRLEtBRS9CdEYsSUFBSyxVQUNMeHNCLElBQUs4eEIsRUFBVyxXQUFhLFNBQzdCN0ssVUFBUSxFQUNSQyxhQUFXLEtBR2Q0SyxHQUNDdnRDLEVBQVErSixLQUFJLFNBQUMyUixHQUFXLE9BQ3RCLHdCQUFDLEVBQUFpeUIsT0FBTSxDQUFDNXVDLElBQUsyYyxFQUFPaGEsTUFBT00sS0FBTTBaLEdBQzlCQSxFQUFPcFksTUFGWSxJQU9oQywrTEMvQ0EsYUFBUyxnRkFBQWlPLE9BQU8sZ3pCQ0FoQixpQkFLQSxhQUVBLGFBQ0EsVUFDQSxVQTZDQSxVQXBDQSxTQUFnQixTQUFFRyxFQUFRLFdBQUVxRSxFQUFTLFlBQUUvVCxFQUFJLE9BQ25DLEdBQ0osSUFBQWtNLFlBQVcsRUFBQW8vQixlQURMakUsRUFBUSxXQUFFdUUsRUFBZSxrQkFBRUMsRUFBb0IsdUJBR2pEQyxHQUFZLElBQUFoL0IsVUFDaEIsV0FBTSxPQUFBOCtCLEVBQWdCN2pDLEtBQUksU0FBQyxHQUFjLE9BQVAsT0FBTyxJQUFPNUIsU0FBU25HLEVBQUtOLE1BQXhELEdBQ04sQ0FBQ00sRUFBTTRyQyxJQUdIcnRDLEdBQWMsSUFBQW1DLGNBQVksV0FDOUJtckMsRUFBcUI3ckMsRUFDdkIsR0FBRyxDQUFDQSxFQUFNNHJDLElBRVYsT0FDRSwrQkFDRTczQixXQUFXLGFBQVMsQ0FDbEIsVUFBT2l0QixnQkFDTCxFQUFDLFVBQU9zQixVQUFXd0osSUFBY3pFLEVBQVEsR0FDM0N0ekIsSUFFRmEsUUFBU3JXLEdBRVI4b0MsR0FDQyxnQ0FBTXR6QixVQUFXLFVBQU9nNEIsbUJBQ3RCLHdCQUFDLEVBQUFDLFNBQVEsQ0FDUGo0QixVQUFXLFVBQU82dEIsU0FDbEJMLFFBQVN1SyxFQUNUNWIsS0FBSyxXQUlYLGdDQUFNbmMsVUFBVyxVQUFPelMsT0FBUW9PLEdBR3RDLDBMQ3BEQSxjQUFTLDJFQUFBSCxPQUFPLG13Q0NBaEIsY0FDQSxhQUdBLFVBQ0EsVUFDQSxVQUNBLFVBRUEsYUFTYSxFQUFBMDhCLFNBQVcsU0FDdEJ2eUIsR0FFQSxZQUF3Q3paLElBQWhDeVosRUFBc0JoYSxLQUNoQyxFQXdKQSxVQXRKQSxTQUFvQixPQUFFMUIsRUFBTyxVQUFFa3VDLEVBQVEsV0FBRTk1QixFQUFRLFdBQ3pDLEdBQTZDLElBQUFyRixZQUFVLEdBQXREby9CLEVBQWdCLEtBQUVDLEVBQXNCLEtBQ3pDLEdBTUYsSUFBQWxnQyxZQUFXLEVBQUFvL0IsZUFMYmpFLEVBQVEsV0FDUmdGLEVBQWEsZ0JBQ2JDLEVBQVMsWUFDVFYsRUFBZSxrQkFDZlcsRUFBa0IscUJBR2RDLEVBQWlCeHVDLEVBQVE4dkIsTUFBSyxTQUFDcFUsR0FBVyxRQUFDLElBQUF1eUIsVUFBU3Z5QixFQUFWLElBRTFDK3lCLEVBQWdCLFNBQUN6dUMsR0FDckIsSUFBTTB1QyxFQUFVTCxFQUFjMThCLGNBQWNnOUIsT0FFNUMsT0FBT0QsRUFBUTd2QyxPQUNYbUIsRUFBUTRULFFBQU8sU0FBQzhILEdBQ2QsT0FBQXd5QixFQUNJQSxFQUFTeHlCLEVBQVFnekIsR0FDakJoekIsRUFBT3BZLE1BQU1xTyxjQUFjeEosU0FBU3VtQyxFQUZ4QyxJQUlGMXVDLENBQ04sRUFFTTR1QyxHQUFrQixJQUFBOS9CLFVBQTZDLFdBQ25FLE9BQUkwL0IsRUFDS3h1QyxFQUFRNnVDLFFBQ2IsU0FBQ0MsRUFBa0NDLEdBQ2pDLElBQU1DLEVBQXVCUCxFQUFjTSxFQUFZL3VDLFNBRXZELE9BQUlndkMsRUFBcUJud0MsT0FDaEIsRUFBUCxLQUNLaXdDLEdBQVEsV0FDTkMsR0FBVyxDQUFFL3VDLFFBQVNndkMsU0FJeEJGLENBQ1QsR0FDQSxJQUdLTCxFQUFjenVDLEVBRXpCLEdBQUcsQ0FBQ3d1QyxFQUFnQnh1QyxFQUFTcXVDLElBRXZCWSxHQUF1QixJQUFBbmdDLFVBQVEsV0FDbkMsT0FBTzgvQixFQUFnQkMsUUFBTyxTQUFDaHdDLEVBQWdCcXdDLEdBQzdDLE9BQUksSUFBQWpCLFVBQVNpQixHQUNKcndDLEVBQVMsRUFFVEEsRUFBU3F3QyxFQUFXbHZDLFFBQVFuQixNQUV2QyxHQUFHLEVBQ0wsR0FBRyxDQUFDMnZDLEVBQWdCSSxFQUFpQixFQUFBWCxXQUUvQmtCLEdBQXVCLElBQUFyZ0MsVUFBUSxXQUNuQyxPQUFPOCtCLEVBQWdCaDZCLFFBQU8sU0FBQ3c3QixHQUM3QixPQUFPUixFQUFnQjN1QixNQUFLLFNBQUNvdkIsR0FDM0IsT0FBTyxJQUFBcEIsVUFBU29CLEdBQ1pBLEVBQWUzdEMsUUFBVTB0QyxFQUFlMXRDLE1BQ3hDMnRDLEVBQWVydkMsUUFBUWlnQixNQUNyQixTQUFDdkUsR0FBVyxPQUFBQSxFQUFPaGEsUUFBVTB0QyxFQUFlMXRDLEtBQWhDLEdBRXBCLEdBQ0YsSUFBRzdDLE1BQ0wsR0FBRyxDQUFDK3VDLEVBQWlCZ0IsSUFFZlUsR0FBdUIsSUFBQTVzQyxjQUFZLFdBQ3ZDLEdBQUt5ckMsRUFVSEksRUFBbUIsSUFDbkJuNkIsR0FBWUEsRUFBUyxRQVhBLENBQ3JCLElBQU1tN0IsRUFBa0JYLEVBQ3JCN2tDLEtBQUksU0FBQ3NsQyxHQUNKLFdBQUFwQixVQUFTb0IsR0FBa0JBLEVBQWlCQSxFQUFlcnZDLE9BQTNELElBRUR3dkMsT0FFSGpCLEVBQW1CZ0IsR0FDbkJuN0IsR0FBWUEsRUFBU203QixFQUFnQnhsQyxLQUFJLFNBQUMsR0FBYyxPQUFQLE9BQU8sS0FNMURxa0MsR0FDRixHQUFHLENBQ0RRLEVBQ0EsRUFBQVgsU0FDQUUsRUFDQUksRUFDQUgsSUFnQkYsT0FiQSxJQUFBOXRDLFlBQVUsV0FDSjZ1QyxJQUF5QkYsRUFDM0JiLEdBQXVCLEdBQ2RELEdBQ1RDLEdBQXVCLEVBRTNCLEdBQUcsQ0FDRGUsRUFDQUYsRUFDQWQsRUFDQUMsSUFJQSwrQkFBS3I0QixVQUFXLFVBQU9pdEIsV0FDcEJzTCxHQUFhakYsS0FBY3VGLEVBQWdCL3ZDLFFBQzFDLCtCQUNFa1gsVUFBVyxVQUFPMDVCLG1CQUNsQjc0QixRQUFTMDRCLEdBRVQsZ0NBQU12NUIsVUFBVyxVQUFPZzRCLG1CQUN0Qix3QkFBQyxFQUFBQyxTQUFRLENBQ1BqNEIsVUFBVyxVQUFPNnRCLFNBQ2xCTCxRQUFTNEssRUFDVDNLLGdCQUNJMkwsR0FDRkEsSUFBeUJGLEVBRTNCL2MsS0FBSyxXQUdULGdDQUFNbmMsVUFBVyxVQUFPelMsT0FBSyxlQUc5QnNyQyxFQUFnQi92QyxPQUNqQit2QyxFQUFnQjdrQyxLQUFJLFNBQUMyUixHQUNuQixXQUFBdXlCLFVBQVN2eUIsR0FDUCx3QkFBQyxFQUFBaXlCLE9BQU0sQ0FBQzV1QyxJQUFLMmMsRUFBT2hhLE1BQU9NLEtBQU0wWixHQUM5QkEsRUFBT3BZLE9BR1Ysd0JBQUMsRUFBQW9zQyxZQUFXLENBQ1Yzd0MsSUFBSzJjLEVBQU9wWSxNQUNaQSxNQUFPb1ksRUFBT3BZLE1BQ2R0RCxRQUFTMGIsRUFBTzFiLFNBUnBCLElBYUYsK0JBQUsrVixVQUFXLFVBQU80NUIsNEJBRXJCLGdDQUFNNTVCLFVBQVcsVUFBT3M0QixlQUFnQixXQUFJQSxLQUt0RCx5TUM1S0EsY0FBUywrRUFBQTk4QixPQUFPLElBQWdCLDBFQUFBMDhCLFFBQVEsZ3pCQ0F4QyxpQkFDQSxhQUVBLGFBQ0EsVUFDQSxVQUNBLFVBQ0EsYUFDQSxhQUNBLFVBNkNBLFVBdkNBLFNBQWdCLE9BQUVsNEIsRUFBUyxZQUNuQixHQUFzQyxJQUFBN0gsWUFBVyxFQUFBby9CLGVBQS9DZSxFQUFhLGdCQUFFdUIsRUFBZ0IsbUJBRWpDQyxHQUE0QixJQUFBbnRDLGNBQ2hDLFNBQUNoQixHQUNDa3VDLEVBQWlCbHVDLEVBQ25CLEdBQ0EsQ0FBQzJzQyxJQUdHeUIsR0FBZ0MsSUFBQXB0QyxjQUFZLFdBQ2hEa3RDLEVBQWlCLEdBQ25CLEdBQUcsSUFFSCxPQUNFLCtCQUFLNzVCLFdBQVcsYUFBUyxDQUFDLFVBQU9pdEIsVUFBV2p0QixLQUMxQywrQkFBS0EsVUFBVyxVQUFPZzZCLHFCQUNyQix3QkFBQyxFQUFBL0gsS0FBSSxDQUFDQyxJQUFLLGFBRWIsd0JBQUMsRUFBQStILFVBQVMsQ0FDUnR1QyxNQUFPMnNDLEVBQ1AvSyxZQUFZLG9CQUNabHZCLFNBQVV5N0IsRUFDVm5OLFVBQVEsSUFFVix3QkFBQyxFQUFBZ0wsV0FBVSxDQUNUMzNCLFVBQVcsVUFBT2s2QixZQUNsQmhJLElBQUssVUFDTHhzQixJQUFJLFFBQ0o3RSxRQUFTazVCLEVBQ1QzdEIsVUFBV2tzQixFQUNYM0wsVUFBUSxFQUNSRixVQUFRLEVBQ1JHLGFBQVcsSUFJbkIsMExDcERBLGNBQVMsMkVBQUFweEIsT0FBTyxnekJDQWhCLGlCQUNBLGFBRUEsYUFDQSxhQUVBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBa0pBLFVBN0hBLFNBQWdCLGFBQ2R3RSxFQUFTLFlBQ1RzQixFQUFZLGVBQ1o4SyxFQUFRLFdBQ1IsSUFBQWtuQixTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQnJwQyxFQUFPLFVBQ1BzakMsRUFBVyxjQUNYaGdDLEVBQUssUUFDTGdyQyxFQUFTLFlBQ1RqQixFQUFpQixvQkFDakIsSUFBQTZDLG1CQUFBQSxPQUFrQixJQUFHLEdBQUssRUFDMUIsSUFBQWhlLEtBQUFBLE9BQUksSUFBRyxXQUFRLEVBQ2YsSUFBQWllLG1CQUFBQSxPQUFrQixJQUFHLEdBQUssRUFDMUIsSUFBQUMsV0FBQUEsT0FBVSxJQUFHLEdBQUssRUFDbEI1N0IsRUFBSyxRQUNMSixFQUFRLFdBQ1I4NUIsRUFBUSxXQUVGLEdBQXlCLElBQUFuL0IsWUFBVSxHQUFsQ3NoQyxFQUFNLEtBQUVDLEVBQVksS0FFckJsd0MsR0FBTSxJQUFBRixrQkFBZ0IsV0FBTSxPQUFBb3dDLEdBQWEsRUFBYixJQUM1QkMsR0FBYSxJQUFBbHdDLFVBRWJtd0MsR0FBVyxJQUFBOXRDLGNBQVksV0FDdEI2dEMsRUFBVzl2QyxTQUdoQjh2QyxFQUFXOXZDLFFBQVFnd0MsZUFBZSxDQUFFQyxTQUFVLFNBQVVDLE1BQU8sV0FDakUsR0FBRyxLQUVILElBQUE3b0Msa0JBQWdCLFdBQ2QsR0FBS3lvQyxFQUFXOXZDLFNBQVk0dkMsR0FBV0gsRUFBdkMsQ0FJQSxJQUFJVSxFQUFLLElBQUlDLGVBQWVMLEdBRzVCLE9BRkFJLEVBQUdFLFFBQVFQLEVBQVc5dkMsU0FFZixXQUNMbXdDLEVBQUdHLGFBQ0hILEVBQUssSUFDUCxFQUNGLEdBQUcsQ0FBQ1AsRUFBUUgsRUFBb0JNLElBRWhDLElBQU1RLEdBQW1CLElBQUF0dUMsY0FBWSxXQUNuQzR0QyxHQUNGLEdBQUcsSUFFRzdNLEdBQWUsSUFBQS9nQyxjQUNuQixTQUFDOG1CLEdBQ002ZixHQUFVaUgsR0FBYSxHQUU1Qmw4QixHQUFZQSxFQUFTb1YsRUFDdkIsR0FDQSxDQUFDcFYsSUFHSCxPQUNFLHdCQUFDLEVBQUE2OEIsc0JBQXFCLENBQ3BCNTVCLGFBQWNBLEVBQ2RneUIsU0FBVUEsRUFDVnJwQyxRQUFTQSxFQUNUb1UsU0FBVXF2QixFQUNWNkssVUFBV0EsRUFDWGpCLGtCQUFtQkEsR0FFbkIsK0JBQUtqdEMsSUFBS0EsR0FDUGtELEVBQVEsd0JBQUMsRUFBQXVnQyxNQUFLLENBQUNuaUMsTUFBTzRCLElBQVksS0FDbkMsK0JBQ0V5UyxXQUFXLGFBQVMsQ0FDbEIsVUFBT2l0QixnQkFFTCxFQUFDLFVBQU83Z0IsVUFBV0EsS0FFckIsVUFBTytQLEdBQ1BuYyxJQUVGMUIsTUFBTyxDQUFFRyxNQUFLLElBRWQsK0JBQ0V1QixXQUFXLGFBQVMsQ0FBQyxVQUFPMnVCLFFBQU0sS0FBSSxFQUFDLFVBQU85ZSxRQUFTeXFCLEVBQU0sS0FDN0R6NUIsUUFBU282QixHQUVULHdCQUFDLEVBQUFFLFNBQVEsQ0FDUDVOLFlBQWFBLEVBQ2I2TSxtQkFBb0JBLEVBQ3BCZ0IsaUJBQWtCZCxJQUVwQix3QkFBQyxFQUFBM0MsV0FBVSxDQUNUMzNCLFdBQVcsYUFBUyxDQUNsQixVQUFPcTdCLGlCQUNMLEVBQUMsVUFBTzdELFVBQVc4QyxFQUFNLEtBRTdCcEksSUFBSyxVQUNMeHNCLElBQUs0MEIsRUFBUyxXQUFhLFNBQzNCM04sVUFBUSxFQUNSQyxhQUFXLEtBR2QwTixHQUNDLCtCQUFLdDZCLFVBQVcsVUFBT3F0QixRQUFTaGpDLElBQUttd0MsR0FDZixJQUFuQnZ3QyxFQUFRbkIsT0FDUCwrQkFBS2tYLFVBQVcsVUFBTzQ1QixXQUFTLHdCQUVoQyxnREFDR1MsR0FDQywrQkFBS3I2QixVQUFXLFVBQU9zN0IsaUJBQ3JCLHdCQUFDLEVBQUFDLE9BQU0sT0FHWCx3QkFBQyxFQUFBQyxXQUFVLENBQ1R2eEMsUUFBU0EsRUFDVGt1QyxTQUFVQSxFQUNWOTVCLFNBQVVxdkIsUUFVOUIseStCQzVKQSxpQkFTQSxVQXVCTStOLEVBQW1DLENBQ3ZDbkksVUFBVSxFQUNWaUYsV0FBVyxFQUNYakIsbUJBQW1CLEVBQ25CTyxnQkFBaUIsR0FDakJDLHFCQUFzQixTQUFDbnNDLEdBQXVCLEVBQzlDMnNDLGNBQWUsR0FDZnVCLGlCQUFrQixTQUFDbHVDLEdBQW1CLEVBQ3RDNnNDLG1CQUFvQixTQUFDL2tCLEdBQTBCLEdBRzNDOGpCLEdBQWdCLElBQUF6L0IsZUFBa0MyakMsR0F5Ri9DLEVBQUFsRSxjQUFBQSxFQUFlLEVBQUEyRCxzQkF2Rk0sU0FBQyxPQUM3QnYvQixFQUFRLFdBQ1IyRixFQUFZLGVBQ1osSUFBQWd5QixTQUFBQSxPQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBaUYsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDakIsSUFBQWpCLGtCQUFBQSxPQUFpQixJQUFHLEdBQUksRUFDeEJydEMsRUFBTyxVQUNQb1UsRUFBUSxXQUVGLEdBQXdDLElBQUFyUyxVQUM1Q3l2QyxFQUFhNUQsaUJBRFJBLEVBQWUsS0FBRVcsRUFBa0IsS0FHcEMsR0FBb0MsSUFBQXhzQyxVQUN4Q3l2QyxFQUFhbkQsZUFEUkEsRUFBYSxLQUFFdUIsRUFBZ0IsS0FJaEMvQixHQUF1QixJQUFBbnJDLGNBQzNCLFNBQUNnWixHQUNDLElBQUkrMUIsRUFFRkEsRUFERXBJLEVBQ3VCdUUsRUFBZ0I5ZCxNQUN2QyxTQUFDLEdBQWMsT0FBUCxVQUFpQnBVLEVBQU9oYSxLQUFqQixJQUVia3NDLEVBQWdCaDZCLFFBQU8sU0FBQyxHQUFjLE9BQVAsVUFBaUI4SCxFQUFPaGEsS0FBakIsSUFDdEMsRUFBRCxLQUFLa3NDLEdBQWlCLEdBQUYsQ0FBRWx5QixJQUFNLEdBRU4sQ0FBQ0EsR0FFNUI2eUIsRUFBbUJrRCxHQUVuQnI5QixHQUFZQSxFQUFTcTlCLEVBQXVCMW5DLEtBQUksU0FBQyxHQUFjLE9BQVAsT0FBTyxJQUNqRSxHQUNBLENBQUM2akMsRUFBaUJXLEVBQW9CbjZCLEtBR3hDLElBQUE5VCxZQUFVLFdBQ1IsR0FBSStXLEVBQWMsQ0FDaEIsSUFBTSxFQUFnQnpRLE1BQU00QixRQUFRNk8sR0FDaENBLEVBQ0EsQ0FBQ0EsR0FFRG82QixFQUF5QixHQUN6QixFQUFjNXlDLFNBU2hCNHlDLEVBUm1CenhDLEVBQVE2dUMsUUFBTyxTQUFDL2tDLEVBQUtvVyxHQUN0QyxPQUFJLElBQUErdEIsVUFBUy90QixHQUNKLEVBQVAsS0FBV3BXLEdBQUssR0FBRixDQUFFb1csSUFBSSxHQUViLEVBQVAsS0FBV3BXLEdBQUssR0FBR29XLEVBQUtsZ0IsU0FBTyxFQUVuQyxHQUFHLElBRWlDNFQsUUFBTyxTQUFDOEgsR0FDMUMsU0FBY3ZULFNBQVN1VCxFQUFPaGEsTUFBOUIsS0FHSjZzQyxFQUFtQmtELEdBRXZCLEdBQUcsQ0FBQ3A2QixFQUFjclgsSUFFbEIsSUFBTTJwQixHQUFtQyxJQUFBN2EsVUFDdkMsV0FBTSxPQUNKdTZCLFNBQVEsRUFDUmlGLFVBQVMsRUFDVGpCLGtCQUFpQixFQUNqQk8sZ0JBQWUsRUFDZkMscUJBQW9CLEVBQ3BCUSxjQUFhLEVBQ2J1QixpQkFBZ0IsRUFDaEJyQixtQkFBa0IsRUFSZCxHQVVOLENBQ0VELEVBQ0FWLEVBQ0FXLEVBQ0FWLEVBQ0FRLEVBQ0F1QixJQUlKLE9BQ0Usd0JBQUN0QyxFQUFjcjlCLFNBQVEsQ0FBQ3ZPLE1BQU9pb0IsR0FDNUJqWSxFQUdQLDZ5QkNsSUEsaUJBRUEsYUFDQSxVQUNBLFVBQ0EsYUE0RkEsVUFwRkEsU0FBa0IsT0FDaEI0eEIsRUFBVyxjQUNYNk0sRUFBa0IscUJBQ2xCZ0IsRUFBZ0IsbUJBRVYsR0FDSixJQUFBampDLFlBQVcsRUFBQW8vQixlQURMTSxFQUFlLGtCQUFFdkUsRUFBUSxXQUFFd0UsRUFBb0IsdUJBR2pENkQsR0FBaUIsSUFBQWh2QyxjQUFZLFNBQUNsQyxHQUNsQ0EsRUFBTThkLGlCQUNSLEdBQUcsSUFFR3F6QixHQUFpQixJQUFBanZDLGNBQ3JCLFNBQUNsQyxFQUFzQ2tCLEdBQ3JDLEdBQUlBLEVBQU8sQ0FDVCxJQUFNZ2EsRUFBU2t5QixFQUFnQjN0QixNQUFLLFNBQUN2RSxHQUFXLE9BQUFBLEVBQU9oYSxRQUFVQSxDQUFqQixJQUU1Q2dhLEdBQ0ZteUIsRUFBcUJueUIsR0FHekJsYixFQUFNOGQsaUJBQ1IsR0FDQSxDQUFDc3ZCLElBR0dnRSxHQUFvQixJQUFBOWlDLFVBQ3hCLGlCQUFNLE9BQ0osZ0NBQ0VpSCxXQUFXLGFBQVMsQ0FDbEIsVUFBT3V0QixrQkFDTCxFQUFDLFVBQU8xZCxRQUFTdXJCLEVBQWdCLE1BR3BDN04sRUFQQyxHQVVOLENBQUNBLEVBQWE2TixJQUdWVSxHQUFhLElBQUEvaUMsVUFDakIsV0FDRSxPQUFDOCtCLEVBQWdCL3VDLE9BR2YsZ0RBQ0crdUMsRUFBZ0I3akMsS0FBSSxTQUFDLE9BQUV6RyxFQUFLLFFBQUU1QixFQUFLLFFBQU8sT0FDekMsZ0NBQ0UzQyxJQUFLMkMsRUFDTHFVLFVBQVcsVUFBTys3QixXQUNsQmw3QixRQUFTODZCLEdBRVQsd0JBQUMsRUFBQUssSUFBRyxDQUFDaHpDLElBQUsyQyxFQUFPQSxNQUFPQSxFQUFPc3dDLFVBQVEsRUFBQ2xOLFFBQVM2TSxHQUM5Q3J1QyxHQVBvQyxLQUpyQixDQUExQixHQWlCRixDQUFDc3FDLEVBQWlCZ0UsSUFHZEssRUFBYXJFLEVBQWdCL3VDLE9BQ2pDLGdDQUNFa1gsVUFBVyxVQUFPNjNCLGlCQUNsQixVQUFHdEssRUFBVyxhQUFLc0ssRUFBZ0IvdUMsT0FBTSxNQUN6QyxFQWVKLE9BVkl3cUMsRUFDUThHLEVBQXFCMEIsRUFBYUksRUFFakNyRSxFQUFnQi91QyxPQUd6QixnQ0FBTWtYLFVBQVcsVUFBT3E1QixnQkFBaUJ4QixFQUFnQixHQUFHdHFDLE9BSDFCLENBUXhDLDRMQy9GQSxhQUFTLDZFQUFBaU8sT0FBTyw0TENBaEIsY0FBUywyRUFBQUEsT0FBTyxxaENDQWhCLGlCQUNBLGFBQ0EsVUFDQSxhQUVBLGFBQ0EsYUFFQSxVQUVBLGFBdU1BLFVBaEtBLFNBQWUsT0FDYjJnQyxFQUFPLFVBQ1BDLEVBQVUsYUFDVkMsRUFBVSxhQUNWQyxFQUFRLFdBQ1JDLEVBQVUsYUFDVkMsRUFBSSxPQUNKQyxFQUFPLFVBQ1AsSUFBQUMsU0FBQUEsT0FBUSxJQUFHLElBQUFDLFlBQVlDLFVBQVMsRUFDaENDLEVBQVcsY0FDWHRQLEVBQVcsY0FDWCxJQUFBdk4sVUFBQUEsT0FBUyxJQUFHLElBQUEyYyxZQUFZRyxXQUFVLEVBQ2xDLElBQUFDLGFBQUFBLE9BQVksSUFBRyxJQUFBSixZQUFZSyxjQUFhLEVBQ3hDQyxFQUFpQixvQkFDakJDLEVBQVUsYUFDVkMsRUFBVSxhQUNWLElBQUFDLGVBQUFBLE9BQWMsSUFBRyxHQUFLLEVBQ3RCLElBQUFDLGlCQUFBQSxPQUFnQixJQUFHLEdBQUksRUFDdkJyOUIsRUFBUyxZQUVILEdBQTRCLElBQUFoVSxVQUFTLEdBQXBDdWdCLEVBQVMsS0FBRSt3QixFQUFZLEtBRXhCQyxHQUFZLElBQUE1d0MsY0FDaEIsU0FBQyxPQUFFVixFQUFJLE9BQUVxRSxFQUFLLFFBQUVnTyxFQUFLLFFBQ2JrL0IsRUFBTXZ4QyxFQUFLcUUsR0FDakIsT0FDRSwrQkFBS2dPLE1BQUssT0FBT0EsR0FBSyxDQUFFbUMsSUFBS25DLEVBQU1tQyxPQUNqQyx3QkFBQyxVQUFRLENBQ1B4VSxLQUFNdXhDLEVBQ05yQixRQUFTQSxFQUNURSxXQUFZQSxFQUNaQyxTQUFVQSxFQUNWdGMsVUFBV0EsRUFDWG1ULFlBQVkrSixhQUFVLEVBQVZBLEVBQWFNLEVBQUkzaEIsT0FJckMsR0FDQSxDQUFDc2dCLEVBQVNlLEVBQVlaLEVBQVV0YyxFQUFXcWMsSUFHdkNvQixHQUFtQixJQUFBOXdDLGNBQ3ZCLFNBQUMsT0FBRW82QixFQUFZLGVBQ2J1VyxFQUFhdlcsRUFDZixHQUNBLElBR0kyVyxHQUFXLElBQUEvd0MsY0FBWSxXQUN2QnN3QyxHQUlBYixFQUFXdHpDLFNBQVdxMEMsSUFJdEJmLEVBQVd0ekMsT0FBUzR6QyxFQUFXRixHQUkvQkMsR0FBV0YsSUFDYkUsRUFBUUQsRUFBTyxHQUNmRCxFQUFXQyxFQUFPLElBRXRCLEdBQUcsQ0FDRFMsRUFDQWIsRUFBV3R6QyxPQUNYcTBDLEVBQ0FULEVBQ0FGLEVBQ0FDLEVBQ0FGLElBR0l4akIsR0FBZSxJQUFBcHNCLGNBQ25CLFNBQUMyRCxHQUNDLE9BQUkyc0MsR0FJRzNzQyxFQUFROHJDLEVBQVd0ekMsT0FBUyxFQUFBNnpDLFlBQVlnQixZQUNqRCxHQUNBLENBQUN2QixFQUFXdHpDLE9BQVFtMEMsSUFHdEIsT0FDRSxnREFDR0ksRUFDQywrQkFBS3I5QixXQUFXLGFBQVMsQ0FBQyxVQUFPaXRCLFVBQVdqdEIsS0FDMUMsK0JBQUtBLFVBQVcsVUFBT2pRLE9BQ3JCLHdCQUFDLFVBQVcsQ0FDVm9zQyxRQUFTQSxFQUNUNXZCLFVBQVdBLEVBQ1h3d0IsYUFBY0EsSUFFYnhQLElBQWdCNk8sRUFBV3R6QyxPQUM1QiwrQkFDRWtYLFVBQVcsVUFBTzQ5QixxQkFDbEJ0L0IsTUFBTyxDQUFFSSxPQUFRbStCLElBRWhCdFAsR0FHSCx3QkFBQyxVQUFjLENBQ2J4VSxhQUFjQSxFQUNkQyxVQUFXb2pCLEVBQVd0ekMsT0FDdEJveEIsY0FBZXdqQixJQUVkLFNBQUMsT0FBRS9rQixFQUFlLGtCQUFFdHVCLEVBQUcsTUFBTyxPQUM3Qix3QkFBQyxFQUFBd2dDLGNBQWEsQ0FDWnhnQyxJQUFLQSxFQUNMcVUsT0FBUW0rQixFQUNScCtCLE1BQU0sT0FDTjBuQixTQUFVbkcsRUFDVmhILFVBQVdvakIsRUFBV3R6QyxPQUN0QnE1QixTQUFVaWEsRUFDVnZjLFNBQVU0ZCxFQUNWOWtCLGdCQUFpQkEsRUFDakIzWSxVQUFXLFVBQU82OUIsb0JBRWpCTixFQVowQixNQW9CdkMsK0JBQ0V2OUIsV0FBVyxhQUFTLENBQ2xCLFVBQU9pdEIsVUFDUCxVQUFPNFEsbUJBQ1A3OUIsSUFFRjFCLE1BQU8sQ0FBRUksT0FBUW0rQixJQUVqQix3QkFBQyxVQUFXLENBQ1ZWLFFBQVNBLEVBQ1Q1dkIsVUFBV0EsRUFDWDZ3QixlQUFnQkEsRUFDaEJMLGFBQWNBLElBRWZYLEVBQVdwb0MsS0FBSSxTQUFDd3BDLEVBQUtsdEMsR0FBVSxPQUM5Qix3QkFBQyxVQUFRLENBQ1B0SCxJQUFLc0gsRUFDTHJFLEtBQU11eEMsRUFDTnJCLFFBQVNBLEVBQ1RFLFdBQVlBLEVBQ1pDLFNBQVVBLEVBQ1Z0YyxVQUFXQSxFQUNYbVQsWUFBWStKLGFBQVUsRUFBVkEsRUFBYU0sYUFBRyxFQUFIQSxFQUFLM2hCLE1BUkYsS0FlMUMsMEtDL01BLGlCQUNBLGFBRUEsYUFHQSxhQWtDQSxVQXpCQSxTQUFxQixXQUNuQnNnQixFQUFPLFVBQ1A1dkIsRUFBUyxZQUNUNndCLEVBQWMsaUJBQ2RMLEVBQVksZUFFWixPQUNFLCtCQUNFLzhCLFdBQVcsYUFBUyxDQUNsQixVQUFPaXRCLGdCQUNMLEVBQUMsVUFBTzZRLGdCQUFpQnZ4QixFQUFTLFNBQ2xDLEVBQUMsVUFBTzZ3QixnQkFBaUJBLEVBQWMsS0FFM0M5K0IsTUFBTyxDQUFFSSxPQUFRcStCLElBRWhCWixFQUFRbm9DLEtBQUksU0FBQytwQyxFQUFRemdCLEdBQWdCLE9BQ3BDLHdCQUFDLFVBQWUsQ0FDZHQwQixJQUFLLDBCQUFtQnMwQixHQUN4QnlnQixPQUFRQSxHQUgwQixJQVE1QyxtaENDdENBLGlCQUNBLGFBRUEsVUFDQSxhQUNBLGFBQ0EsVUFHQSxhQWtFQSxVQTVEQSxTQUF5QixTQUFFQSxFQUFNLFNBRTdCQyxFQU9FRCxFQUFNLE9BTlJFLEVBTUVGLEVBQU0sU0FMUkcsRUFLRUgsRUFBTSxPQUpSSSxFQUlFSixFQUFNLGlCQUhSSyxFQUdFTCxFQUFNLE1BRlJ0L0IsRUFFRXMvQixFQUFNLE1BRFIvOUIsRUFDRSs5QixFQUFNLFVBRUosR0FBNEIsSUFBQS94QyxXQUNoQyxXQUFNLE9BQUFteUMsR0FBb0IsRUFBQUUsVUFBVUMsSUFBOUIsSUFEREMsRUFBUyxLQUFFQyxFQUFZLEtBSXhCQyxHQUFtQixJQUFBOXhDLGNBQVksV0FDbkMsSUFBS3V4QyxFQUNILE9BQU9GLEVBQU9PLEdBRWhCLElBQU1HLEVBQ0pILElBQWMsRUFBQUYsVUFBVUMsS0FBTyxFQUFBRCxVQUFVTSxJQUFNLEVBQUFOLFVBQVVDLEtBQzNERSxFQUFhRSxHQUNiVixFQUFPVSxFQUNULEdBQUcsQ0FBQ1YsRUFBUU8sRUFBV0wsSUFFakJVLEVBQ0paLEdBQVVDLEVBQ04sQ0FDRXA5QixRQUFTNDlCLEdBRVgsQ0FBQyxFQVNQLE9BQ0UsbUNBQ01HLEVBQVMsQ0FDYjUrQixXQUFXLGFBQVMsQ0FDbEIsVUFBTzYrQixnQkFDUDcrQixRQUVFLEVBQUMsVUFBTzgrQixpQkFBa0JiLEdBQVlDLEVBQ3RDLEVBQUMsVUFBT0QsVUFBV0EsT0FHdkIzL0IsTUFBTyxDQUFFRyxNQUFLLEtBRWIyL0IsRUFDQUgsRUFDQyx3QkFBQyxFQUFBaE0sS0FBSSxDQUFDdnNCLElBQUssY0FBZXlXLEtBQUssUUFBUStWLElBckJ2Q3FNLElBQWMsRUFBQUYsVUFBVUMsS0FDbkIsVUFFRixZQW1CRCxLQUdWLDh5QkN6RUEsaUJBQ0EsYUFFQSxhQUdBLGFBZ0RBLFVBckNBLFNBQWtCLFNBQ2hCcnlDLEVBQUksT0FDSmt3QyxFQUFPLFVBQ1BFLEVBQVUsYUFDVkMsRUFBUSxXQUNSdGMsRUFBUyxZQUNUbVQsRUFBUSxXQUVGNEwsR0FBaUIsSUFBQXB5QyxjQUFZLFdBQzdCMHZDLEdBQThCLGlCQUFUcHdDLEdBQ3ZCb3dDLEVBQVdwd0MsRUFFZixHQUFHLENBQUNBLEVBQU1vd0MsSUFFVixPQUNFLCtCQUNFcjhCLFdBQVcsYUFBUyxDQUNsQixVQUFPaXRCLGdCQUVMLEVBQUMsVUFBT3FQLFVBQVdBLEVBQ25CLEVBQUMsVUFBT3pzQixRQUFTc2pCLE9BR3JCdHlCLFFBQVNrK0IsR0FFUjVDLEVBQVFub0MsS0FBSSxTQUFDK3BDLEVBQVF6Z0IsR0FBZ0IsT0FDcEMsd0JBQUMsVUFBWSxDQUNYdDBCLElBQUsseUJBQWtCczBCLEdBQ3ZCblQsS0FBTWxlLEVBQ044eEMsT0FBUUEsRUFDUi9kLFVBQVdBLEdBTHVCLElBVTVDLDBLQ3BEQSxpQkFDQSxhQUlBLGFBcUJBLFVBYkEsU0FBc0IsT0FBRTdWLEVBQUksT0FBRTR6QixFQUFNLFNBQUUvZCxFQUFTLFlBQ3ZDL3pCLEVBQXVCLGlCQUFUa2UsRUFBb0JBLEVBQU9BLEVBQUs0ekIsRUFBT2lCLFdBRTNELE9BQ0UsK0JBQ0VoL0IsV0FBVyxhQUFTLENBQUMsVUFBT2l0QixVQUFXOFEsRUFBTy85QixZQUM5QzFCLE1BQU8sQ0FBRUksT0FBUXNoQixFQUFXdmhCLE1BQU9zL0IsYUFBTSxFQUFOQSxFQUFRdC9CLFFBRTFDcy9CLEVBQU83dEIsT0FBUzZ0QixFQUFPN3RCLE9BQU9qa0IsR0FBUUEsRUFHN0MseUxDeEJBLGNBQVMsMEVBQUF1UCxPQUFPLGd6QkNBaEIsaUJBQ0EsYUFFQSxhQUNBLFVBQ0EsYUFpREEsVUFwQ0EsU0FBYSxTQUNYRyxFQUFRLFdBRVJzZ0MsR0FEUyxZQUNELFlBQ1J0d0MsRUFBSyxRQUNMb2pDLEVBQU8sVUFDUDNpQixFQUFRLFdBQ1I2eUIsRUFBUSxXQUNScGpCLEVBQUUsS0FFSXJ4QixHQUFjLElBQUFtQyxjQUNsQixTQUFDbEMsR0FDeUIsbUJBQWJ3MEMsR0FDVEEsRUFBU3BqQixHQUVZLG1CQUFaa1QsR0FDVEEsRUFBUXRrQyxFQUFPa0IsRUFFbkIsR0FDQSxDQUFDb2pDLEVBQVNrUSxJQUdaLE9BQ0UsK0JBQ0VqL0IsV0FBVyxhQUFTLENBQUMsVUFBT2l0QixXQUFTLEtBQUksRUFBQyxVQUFPN2dCLFVBQVdBLEVBQVEsTUFFcEUsZ0NBQU1wTSxVQUFXLFVBQU9xdEIsU0FBVTF4QixHQUNqQ3NnQyxHQUNDLGdDQUFNajhCLFVBQVcsVUFBT2svQixZQUFhcitCLFFBQVNyVyxHQUM1Qyx3QkFBQyxFQUFBeW5DLEtBQUksQ0FBQ0MsSUFBSyxVQUFheHNCLElBQUksUUFBUXlXLEtBQUssV0FLbkQsdUxDcERBLGNBQVMsd0VBQUEzZ0IsT0FBTyw0Z0NDQWhCLGlCQUNBLGFBQ0EsVUFDQSxVQUVBLFVBQ0EsVUFHQSxhQWtKQSxVQTlIQSxTQUFtQixXQUNqQndFLEVBQVMsWUFDVDNCLEVBQVEsV0FDUmt2QixFQUFXLGNBQ1g1aEMsRUFBSyxRQUNMdXFCLEVBQUksT0FDSmlwQixFQUFPLFVBQ1B2UixFQUFRLFdBQ1IsSUFBQXpSLEtBQUFBLE9BQUksSUFBRyxVQUFPLEVBQ2QsSUFBQWhzQixLQUFBQSxPQUFJLElBQUcsU0FBTSxFQUNiLElBQUE0OEIsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDakIsSUFBQUosU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIsSUFBQXlTLFdBQUFBLE9BQVUsSUFBRyxHQUFLLEVBQ2xCQyxFQUFTLFlBQ1RqekIsRUFBUSxXQUNSLElBQUFrekIsV0FBQUEsT0FBVSxJQUFHLEtBQUUsRUFFVCxHQUFrQixJQUFBdHpDLFVBQWlCLElBQWxDMFEsRUFBSSxLQUFFQyxFQUFPLEtBQ2QsR0FBa0IsSUFBQTNRLFlBQWpCdXpDLEVBQUksS0FBRUMsRUFBTyxNQUVwQixJQUFBajFDLFlBQVUsV0FDUixHQUFJb0IsRUFBTyxDQUNULElBQU04ekMsRUFBVTl6QyxFQUFNcUksS0FBSSxTQUFDMHJDLEdBQVEsT0FBRzdqQixJQUFJLFVBQVV0dUIsTUFBT215QyxFQUF4QixJQUNuQ0YsRUFBUUMsR0FFWixHQUFHLENBQUM5ekMsRUFBTzZ6QyxJQUVYLElBQU1HLEdBQW1CLElBQUFoekMsY0FDdkIsU0FBQ3JCLEdBQ0MsSUFBTUssRUFBU0wsRUFBRTNDLE9BQTRCZ0QsTUFFN0NnUixFQUFRaFIsRUFDVixHQUNBLENBQUNnUixJQUdHaWpDLEdBQWtCLElBQUFqekMsY0FDdEIsU0FBQ2t2QixHQUNDLElBQU1na0IsRUFBY04sRUFBSzFoQyxRQUFPLFNBQUM2aEMsR0FBUSxPQUFBQSxFQUFJN2pCLEtBQU9BLENBQVgsSUFFekMsR0FEQTJqQixFQUFRSyxHQUNKeGhDLEVBQVUsQ0FDWixJQUFNb2hDLEVBQVVJLEVBQVk3ckMsS0FBSSxTQUFDMHJDLEdBQVEsT0FBQUEsRUFBSW55QyxLQUFKLElBQ3pDOFEsRUFBU29oQyxHQUViLEdBQ0EsQ0FBQ0YsRUFBTUMsRUFBU25oQyxJQUdaeWhDLEdBQWUsSUFBQW56QyxjQUFZLFdBQy9CLElBQU1vekMsRUFBY3JqQyxFQUFLazhCLE9BQ3JCaUgsRUFBYyxFQUFILEdBQU9OLEdBQUksR0FFMUIsR0FBSVEsRUFBWWozQyxPQUFTLEVBQUcsQ0FDMUIsSUFBTTQyQyxFQUFNLENBQUU3akIsSUFBSSxVQUFVdHVCLE1BQU93eUMsR0FDbkNGLEVBQWMsRUFBSCxLQUFPTixHQUFNLEdBQUYsQ0FBRUcsSUFBRyxHQU03QixHQUhBRixFQUFRSyxHQUNSbGpDLEVBQVEsSUFFSjBCLEVBQVUsQ0FDWixJQUFNb2hDLEVBQVVJLEVBQVk3ckMsS0FBSSxTQUFDMHJDLEdBQVEsT0FBQUEsRUFBSW55QyxLQUFKLElBQ3pDOFEsRUFBU29oQyxHQUViLEdBQUcsQ0FBQ0YsRUFBTTdpQyxFQUFNOGlDLEVBQVM3aUMsSUFFbkJxakMsR0FBZ0IsSUFBQXJ6QyxjQUNwQixTQUFDckIsR0FDZ0IsVUFBWEEsRUFBRXFiLE1BQStCLGdCQUFYcmIsRUFBRXFiLE9BQzFCcmIsRUFBRXdVLGlCQUNGZ2dDLElBRUosR0FDQSxDQUFDQSxJQUdHejFDLEdBQU0sSUFBQUYsa0JBQWdCLFdBQ051UyxFQUFLazhCLE9BRVQ5dkMsT0FBUyxHQUN2QmczQyxHQUVKLElBRU1uUyxFQUNKLHdCQUFDLEVBQUF4eUIsS0FBSSxDQUFDbFIsUUFBU3ExQyxFQUFZdmpDLGdCQUFnQixFQUFNRCxjQUFjLEdBQzdELCtDQUNjLFFBQ1p6UixJQUFLdWpDLEVBQ0w1dEIsV0FBVyxhQUFTLENBQ2xCLFVBQU9pZ0MsVUFDUCxVQUFPOWpCLFNBQ0wsRUFBQyxVQUFPd1EsVUFBV0EsRUFBUSxLQUUvQnR1QixTQUFVc2hDLEVBQ1ZqZ0MsVUFBV3NnQyxFQUNYYixRQUFTQSxFQUNUNVIsWUFBYUEsRUFDYnJYLEtBQU1BLEVBQ04vbEIsS0FBTUEsRUFDTnhFLE1BQU8rUSxFQUNQcXdCLFVBQVdBLEVBQ1hzUyxVQUFXQSxFQUNYanpCLFNBQVVBLEtBS2hCLE9BQ0UsK0JBQ0VwTSxXQUFXLGFBQVMsQ0FDbEIsVUFBT2l0QixnQkFDTCxFQUFDLFVBQU83Z0IsVUFBV0EsRUFBVSxFQUFDLFVBQU84ekIsWUFBYWQsRUFBVSxHQUM5RHAvQixJQUVGM1YsSUFBS0EsR0FFSmsxQyxhQUFJLEVBQUpBLEVBQU12ckMsS0FBSSxTQUFDLE9BQUU2bkIsRUFBRSxLQUFFdHVCLEVBQUssUUFBTyxPQUM1Qix3QkFBQyxFQUFBeXVDLElBQUcsQ0FBQ2h6QyxJQUFLNnlCLEVBQUlsd0IsTUFBTzRCLEVBQU9zdUIsR0FBSUEsRUFBSW9qQixTQUFVVyxFQUFpQjNELFVBQVEsR0FDcEUxdUMsRUFGeUIsSUFLOUIsK0JBQUt5UyxVQUFXLFVBQU9tZ0MsVUFBV3hTLEdBR3hDLDZMQzFKQSxjQUFTLDhFQUFBbnlCLE9BQU8sZ3pCQ0FoQixpQkFDQSxhQUVBLFVBQ0EsYUF3RUEsVUFwREEsU0FBbUIsU0FDakJqTyxFQUFLLFFBQ0w4USxFQUFRLFdBQ1JrQixFQUFNLFNBQ05HLEVBQVMsWUFDVDZ0QixFQUFXLGNBQ1g1aEMsRUFBSyxRQUNMdXFCLEVBQUksT0FDSmlwQixFQUFPLFVBQ1B2UixFQUFRLFdBQ1IsSUFBQXpSLEtBQUFBLE9BQUksSUFBRyxXQUFRLEVBQ2YsSUFBQWhzQixLQUFBQSxPQUFJLElBQUcsU0FBTSxFQUNiLElBQUE0OEIsVUFBQUEsT0FBUyxJQUFHLEdBQUssRUFDakIsSUFBQUosU0FBQUEsT0FBUSxJQUFHLEdBQUssRUFDaEIwUyxFQUFTLFlBRUgzUixHQUFlLElBQUEvZ0MsY0FDbkIsU0FBQ3JCLEdBQ0srUyxHQUNGQSxFQUFVL1MsRUFBRTNDLE9BQTRCZ0QsTUFFNUMsR0FDQSxDQUFDMFMsSUFHR3N2QixFQUNKLCtDQUNjLFFBQ1p0akMsSUFBS3VqQyxFQUNMNXRCLFdBQVcsYUFBUyxDQUNsQixVQUFPaWdDLFVBQ1AsVUFBTzlqQixTQUNMLEVBQUMsVUFBT3dRLFVBQVdBLEVBQVEsS0FFL0J0dUIsU0FBVXF2QixFQUNWbnVCLE9BQVFBLEVBQ1JHLFVBQVdBLEVBQ1h5L0IsUUFBU0EsRUFDVDVSLFlBQWFBLEVBQ2JyWCxLQUFNQSxFQUNOL2xCLEtBQU1BLEVBQ054RSxNQUFPQSxFQUNQb2hDLFVBQVdBLEVBQ1hzUyxVQUFXQSxJQUdmLE9BQUk5eEMsRUFDSyx3QkFBQyxFQUFBdWdDLE1BQUssQ0FBQ25pQyxNQUFPNEIsR0FBUW9nQyxHQUV0QixnREFBR0EsRUFFZCw2TEMzRUEsY0FBUyw4RUFBQW55QixPQUFPLDRLQ0FoQixpQkFFQSxhQXFCQSxVQWJBLFNBQWUsT0FBRUcsRUFBUSxXQUFFMndCLEVBQVksZUFBRSxJQUFBenJCLFFBQUFBLE9BQU8sSUFBRyxhQUFPLEVBQUMsRUFDekQsT0FDRSwrQkFDRXhXLElBQUtpaUMsRUFDTHRzQixVQUFXLFVBQU9vZ0MsTUFDbEJ2L0IsUUFBU0EsRUFBTyxjQUNKLFNBRVhsRixFQUdQLDBLQ3JCQSxpQkFFQSxhQUNBLGFBa0JBLFVBWkEsU0FBd0IsT0FBRUEsRUFBUSxXQUFFc3pCLEVBQVUsYUFDNUMsT0FDRSwrQkFDRWp2QixXQUFXLGFBQVMsQ0FBQyxVQUFPcWdDLGlCQUM1Qi9oQyxNQUFPLENBQUU4M0IsT0FBUW5ILEdBQVksY0FDakIsbUJBRVh0ekIsRUFHUCx5TUNuQkEsY0FBUywwRUFBQUgsT0FBTyxJQUNoQixjQUFTLG1GQUFBQSxPQUFPLCt5QkNEaEIsaUJBT0EsVUFDQSxhQUNBLGFBRUEsYUFxS0EsVUEvR0EsU0FBaUIsT0FDZkcsRUFBUSxXQUNSZSxFQUFJLE9BQ0orMUIsRUFBUyxZQUNULElBQUF4eUIsU0FBQUEsT0FBUSxJQUFHLGFBQVUsRUFDckJxZ0MsRUFBVyxjQUNYdGdDLEVBQVMsWUFDVCxJQUFBdWdDLHVCQUFBQSxPQUFzQixJQUFHLE1BQUksRUFFdkIsR0FBc0MsSUFBQXYwQyxVQUFTLENBQ25EMFUsS0FBTSxFQUNORCxJQUFLLElBRkErL0IsRUFBYyxLQUFFQyxFQUFpQixLQUlsQyxHQUEwQyxJQUFBejBDLFdBQVMsR0FBbEQwMEMsRUFBZ0IsS0FBRUMsRUFBbUIsS0FFdENDLEdBQVcsSUFBQXQyQyxRQUF1QixNQUNsQ2dpQyxHQUFlLElBQUFoaUMsUUFBd0IsTUFFdkN1MkMsR0FBdUIsSUFBQWwwQyxjQUFZLFdBQ3ZDLEdBQUsyL0IsRUFBYTVoQyxRQUFsQixDQUlBLElBQU1vMkMsRUFBT3hVLEVBQWE1aEMsUUFBUXlxQyx3QkFDNUI0TCxFQWxFMkIsU0FDbkN0TyxFQUNBeHlCLEVBQ0E2Z0MsR0FFUSxJQUFBcmdDLEVBQTZCcWdDLEVBQUksSUFBNUJwZ0MsRUFBd0JvZ0MsRUFBSSxLQUF0QnBpQyxFQUFrQm9pQyxFQUFJLE9BQWRyaUMsRUFBVXFpQyxFQUFJLE1BQ3JDTixFQUFpQixDQUFFLy9CLElBQUssRUFBR0MsS0FBTSxHQUNyQyxPQUFRK3hCLEdBQ04sSUFBSyxPQUNIK04sRUFBaUIsQ0FDZi8vQixJQUFLQSxFQUFNL0IsRUFBUyxFQUNwQmdDLEtBQU1BLEdBRVIsTUFDRixJQUFLLFFBQ0g4L0IsRUFBaUIsQ0FDZi8vQixJQUFLQSxFQUFNL0IsRUFBUyxFQUNwQmdDLEtBQU1BLEVBQU9qQyxHQUVmLE1BQ0YsSUFBSyxTQUNIK2hDLEVBQWlCLENBQ2YvL0IsSUFBS0EsRUFBTS9CLEVBQ1hnQyxLQUFNQSxFQUFPakMsRUFBUSxHQUV2QixNQUNGLElBQUssTUFDSCtoQyxFQUFpQixDQUNmLy9CLElBQUtBLEVBQ0xDLEtBQU1BLEVBQU9qQyxFQUFRLEdBSzNCLE1BQW9CLGFBQWJ3QixFQUNILENBQ0VRLElBQUsrL0IsRUFBZS8vQixJQUFNbFIsT0FBT3l4QyxRQUNqQ3RnQyxLQUFNOC9CLEVBQWU5L0IsS0FBT25SLE9BQU8weEMsU0FFckNULENBQ04sQ0EwQjhCVSxDQUN4QnpPLEVBQ0F4eUIsRUFDQTZnQyxHQUVGTCxFQUFrQk0sR0FDbEJKLEdBQW9CLEdBQ3RCLEdBQUcsQ0FBQ2xPLEVBQVd4eUIsSUFFVGtoQyxHQUFlLElBQUF4MEMsY0FBWSxXQUMvQmswQyxHQUNGLEdBQUcsQ0FBQ0EsSUFFRU8sR0FBZSxJQUFBejBDLGNBQVksV0FDL0JnMEMsR0FBb0IsRUFDdEIsR0FBRyxJQUVHVSxHQUFzQixJQUFBMTBDLGNBQVksV0FDbENpMEMsRUFBU2wyQyxVQUNYNDJDLGFBQWFWLEVBQVNsMkMsU0FDdEJrMkMsRUFBU2wyQyxRQUFVLE1BR3JCbTJDLEdBQ0YsR0FBRyxDQUFDQSxJQUVFVSxHQUFvQixJQUFBNTBDLGNBQVksV0FDcENpMEMsRUFBU2wyQyxRQUFVb0wsWUFBVyxXQUM1QjZxQyxHQUFvQixHQUNwQkMsRUFBU2wyQyxRQUFVLElBQ3JCLEdBQUc2MUMsRUFDTCxHQUFHLENBQUNBLElBeUJKLE9BdkJBLElBQUFoMkMsWUFBVSxXQUNSLE9BQU8sV0FBTSxPQUFBcTJDLEVBQVNsMkMsU0FBVzQyQyxhQUFhVixFQUFTbDJDLFFBQTFDLENBQ2YsR0FBRyxLQUVILElBQUFILFlBQVUsV0FDUixHQUFLK2hDLEVBQWE1aEMsU0FBd0IsYUFBYnVWLEVBQTdCLENBSUEsSUFBTXVoQyxHQUFtQixhQUFhbFYsRUFBYTVoQyxTQUNuRCxHQUFLODJDLEVBQUwsQ0FJQSxJQUFNQyxFQUFjLFdBQU0sT0FBQWQsR0FBb0IsRUFBcEIsRUFHMUIsT0FGQWEsRUFBaUIzMkMsaUJBQWlCLFNBQVU0MkMsR0FDNUNELEVBQWlCMzJDLGlCQUFpQixTQUFVNDJDLEdBQ3JDLFdBQ0xELEVBQWlCMTJDLG9CQUFvQixTQUFVMjJDLEdBQy9DRCxFQUFpQjEyQyxvQkFBb0IsU0FBVTIyQyxFQUNqRCxHQUNGLEdBQUcsQ0FBQ3hoQyxJQUdGLGdDQUNFeWhDLGFBQWNMLEVBQ2RGLGFBQWNBLEVBQ2RDLGFBQWNBLEVBQ2RPLFdBQVlKLEVBQ1psM0MsSUFBS2lpQyxHQUVKM3dCLEdBQ0EsSUFBQW8xQixjQUNDLGdEQUNHdVAsR0FBZUksRUFDZCwrQkFDRXBpQyxNQUFPa2lDLEVBQWMsWUFDVjlqQyxFQUFJLGNBQ0gsVUFDWnNELFdBQVcsYUFBUyxDQUNsQixVQUFPNGhDLFFBQ1AsVUFBT25QLEdBQ1AsVUFBT3h5QixHQUNQRCxNQUdGLE1BRU5wVixTQUFTcUMsTUFJakIsMExDOUtBLGFBQVMsNEVBQUF1TyxPQUFPLDRLQ0FoQixpQkFDQSxhQUVBLGFBdUVBLFVBOUNBLFNBQWUsT0FDYjAyQixFQUFHLE1BQ0gvaEMsRUFBSSxPQUNKd0wsRUFBUSxXQUNSMndCLEVBQVksZUFDWnVWLEVBQU0sU0FDTixJQUFBQyxNQUFBQSxPQUFLLElBQUcsR0FBSSxFQUNaLElBQUFDLEtBQUFBLE9BQUksSUFBRyxHQUFJLEVBQ1gsSUFBQUMsU0FBQUEsT0FBUSxJQUFHLEdBQUksRUFDZixJQUFBeFosT0FBQUEsT0FBTSxJQUFHLFlBQVMsRUFFbEIsT0FBTzdzQixFQUNMLCtCQUNFdFIsSUFBS2lpQyxFQUNMdHNCLFdBQVcsYUFBUyxDQUFDLFVBQU9pdEIsVUFBVyxVQUFPcUgsY0FFOUMsK0NBQ2MsUUFDWlQsWUFBWSxZQUNaN3pCLFdBQVcsYUFBUyxDQUFDLFVBQU9paUMsTUFBTyxVQUFPelosS0FDMUNzWixNQUFPQSxFQUNQQyxLQUFNQSxFQUNOQyxTQUFVQSxFQUNWSCxPQUFRQSxFQUNSSyxhQUFXLEdBRVgsZ0RBQW9CLFNBQVNoUSxJQUFLQSxFQUFLL2hDLEtBQU1BLEtBRTlDd0wsR0FBWSwrQkFBS3FFLFVBQVcsVUFBT3UwQixTQUFVNTRCLElBR2hELCtDQUNjLFFBQ1prNEIsWUFBWSxZQUNaN3pCLFdBQVcsYUFBUyxDQUFDLFVBQU9paUMsTUFBTyxVQUFPelosS0FDMUNzWixNQUFPQSxFQUNQQyxLQUFNQSxFQUNOQyxTQUFVQSxFQUNWSCxPQUFRQSxFQUNSSyxhQUFXLEdBRVgsZ0RBQW9CLFNBQVNoUSxJQUFLQSxFQUFLL2hDLEtBQU1BLElBR25ELHlMQ3hFQSxjQUFTLDBFQUFBcUwsT0FBTywrQkNBaEIsSUFBWW1oQyx5RUFBQUEsRUFBQSxFQUFBQSxjQUFBLEVBQUFBLFlBQVcsS0FDckIsOEJBQ0Esc0NBQ0EsK0JBQ0EsMmlCQ0pGLHFoQkNBQSxhQUNBLGFBQ0EsV0FDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLGFBQ0EsYUFDQSxhQUNBLFlBQ0EsWUFDQSxhQUNBLHdDQzVCQSxJQUFZMEIsdUVBQUFBLEVBQUEsRUFBQUEsWUFBQSxFQUFBQSxVQUFTLEtBQ2pCLFVBQ0EseUVDRkosc3BDQ0FBLCtRQ0FBLGdSQ0FBLDJTQ0FBLDJRQ0FBLGdlQ0FBLHFSQ1NhLElBQUkveUMsRUFBRSxFQUFRLE1BQTRFaVAsRUFBRSxtQkFBb0I5UixPQUFPMDVDLEdBQUcxNUMsT0FBTzA1QyxHQUExRyxTQUFXaHpDLEVBQUVDLEdBQUcsT0FBT0QsSUFBSUMsSUFBSSxJQUFJRCxHQUFHLEVBQUVBLEdBQUksRUFBRUMsSUFBSUQsR0FBSUEsR0FBR0MsR0FBSUEsQ0FBQyxFQUFpRGd6QyxFQUFFOTJDLEVBQUVVLFNBQVNkLEVBQUVJLEVBQUVmLFVBQVVVLEVBQUVLLEVBQUV5RyxnQkFBZ0IySSxFQUFFcFAsRUFBRSsyQyxjQUN0TSxTQUFTaDNDLEVBQUU4RCxHQUFHLElBQUlDLEVBQUVELEVBQUVtekMsWUFBWW56QyxFQUFFQSxFQUFFeEQsTUFBTSxJQUFJLElBQUk0MkMsRUFBRW56QyxJQUFJLE9BQU9tTCxFQUFFcEwsRUFBRW96QyxFQUFFLENBQUMsTUFBTXIxQyxHQUFHLE9BQU0sQ0FBRSxDQUFDLENBQTRCLElBQUlzMUMsRUFBRSxvQkFBcUJqekMsYUFBUSxJQUFxQkEsT0FBTzNFLGVBQVUsSUFBcUIyRSxPQUFPM0UsU0FBU3FQLGNBQXpJLFNBQVc5SyxFQUFFQyxHQUFHLE9BQU9BLEdBQUcsRUFEK0YsU0FBV0QsRUFBRUMsR0FBRyxJQUFJbXpDLEVBQUVuekMsSUFBSWxDLEVBQUVrMUMsRUFBRSxDQUFDeGdDLEtBQUssQ0FBQ2pXLE1BQU00MkMsRUFBRUQsWUFBWWx6QyxLQUFLc2hCLEVBQUV4akIsRUFBRSxHQUFHMFUsS0FBS3ZVLEVBQUVILEVBQUUsR0FBd0osT0FBckpqQyxHQUFFLFdBQVd5bEIsRUFBRS9rQixNQUFNNDJDLEVBQUU3eEIsRUFBRTR4QixZQUFZbHpDLEVBQUUvRCxFQUFFcWxCLElBQUlyakIsRUFBRSxDQUFDdVUsS0FBSzhPLEdBQUcsR0FBRSxDQUFDdmhCLEVBQUVvekMsRUFBRW56QyxJQUFJbEUsR0FBRSxXQUE2QixPQUFsQkcsRUFBRXFsQixJQUFJcmpCLEVBQUUsQ0FBQ3VVLEtBQUs4TyxJQUFXdmhCLEdBQUUsV0FBVzlELEVBQUVxbEIsSUFBSXJqQixFQUFFLENBQUN1VSxLQUFLOE8sR0FBRyxHQUFFLEdBQUUsQ0FBQ3ZoQixJQUFJdUwsRUFBRTZuQyxHQUFVQSxDQUFDLEVBQzVNcm5DLEVBQVF1bkMsMEJBQXFCLElBQVNuM0MsRUFBRW0zQyxxQkFBcUJuM0MsRUFBRW0zQyxxQkFBcUJELCtCQ1B4VUUsRUFBT3huQyxRQUFVLEVBQWpCLG1DQ0RGelMsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVRsRCxPQUFPNFEsZUFBZTZCLEVBQVMsTUFBTyxDQUNwQ0wsWUFBWSxFQUNaakwsSUFBSyxXQUNILE9BQU8reUMsRUFBS25uQyxPQUNkLElBRUYvUyxPQUFPNFEsZUFBZTZCLEVBQVMsUUFBUyxDQUN0Q0wsWUFBWSxFQUNaakwsSUFBSyxXQUNILE9BQU9nekMsRUFBT3BuQyxPQUNoQixJQUVGL1MsT0FBTzRRLGVBQWU2QixFQUFTLFlBQWEsQ0FDMUNMLFlBQVksRUFDWmpMLElBQUssV0FDSCxPQUFPaXpDLEVBQVdybkMsT0FDcEIsSUFFRi9TLE9BQU80USxlQUFlNkIsRUFBUyxLQUFNLENBQ25DTCxZQUFZLEVBQ1pqTCxJQUFLLFdBQ0gsT0FBT2t6QyxFQUFHdG5DLE9BQ1osSUFFRi9TLE9BQU80USxlQUFlNkIsRUFBUyxLQUFNLENBQ25DTCxZQUFZLEVBQ1pqTCxJQUFLLFdBQ0gsT0FBT216QyxFQUFJdm5DLE9BQ2IsSUFFRi9TLE9BQU80USxlQUFlNkIsRUFBUyxLQUFNLENBQ25DTCxZQUFZLEVBQ1pqTCxJQUFLLFdBQ0gsT0FBT296QyxFQUFJeG5DLE9BQ2IsSUFFRi9TLE9BQU80USxlQUFlNkIsRUFBUyxLQUFNLENBQ25DTCxZQUFZLEVBQ1pqTCxJQUFLLFdBQ0gsT0FBT3F6QyxFQUFJem5DLE9BQ2IsSUFFRi9TLE9BQU80USxlQUFlNkIsRUFBUyxXQUFZLENBQ3pDTCxZQUFZLEVBQ1pqTCxJQUFLLFdBQ0gsT0FBT3N6QyxFQUFVMW5DLE9BQ25CLElBRUYvUyxPQUFPNFEsZUFBZTZCLEVBQVMsVUFBVyxDQUN4Q0wsWUFBWSxFQUNaakwsSUFBSyxXQUNILE9BQU91ekMsRUFBUzNuQyxPQUNsQixJQUdGLElBQUlzbkMsRUFBS00sRUFBdUIsRUFBUSxPQUVwQ0wsRUFBTUssRUFBdUIsRUFBUSxPQUVyQ0osRUFBTUksRUFBdUIsRUFBUSxPQUVyQ0gsRUFBTUcsRUFBdUIsRUFBUSxPQUVyQ1QsRUFBT1MsRUFBdUIsRUFBUSxPQUV0Q0QsRUFBV0MsRUFBdUIsRUFBUSxPQUUxQ0YsRUFBWUUsRUFBdUIsRUFBUSxPQUUzQ1AsRUFBYU8sRUFBdUIsRUFBUSxPQUU1Q1IsRUFBU1EsRUFBdUIsRUFBUSxPQUU1QyxTQUFTQSxFQUF1QmhwQyxHQUFPLE9BQU9BLEdBQU9BLEVBQUlhLFdBQWFiLEVBQU0sQ0FBRW9CLFFBQVNwQixFQUFPLDZCQ2Y5RixTQUFTaXBDLEVBQWdCQyxHQUN2QixPQUF3QyxJQUFoQ0EsRUFBZSxLQUFPLEdBQUssR0FBVSxDQUMvQyxDQXNIQSxTQUFTQyxFQUFRemxDLEVBQUczUSxHQUNsQixNQUFNcTJDLEdBQVcsTUFBSjFsQyxJQUFtQixNQUFKM1EsR0FFNUIsT0FEYTJRLEdBQUssS0FBTzNRLEdBQUssS0FBT3EyQyxHQUFPLEtBQzlCLEdBQVcsTUFBTkEsQ0FDckIsQ0FjQSxTQUFTQyxFQUFPQyxFQUFHdjBDLEVBQUdDLEVBQUcwTyxFQUFHckQsRUFBR3JOLEdBQzdCLE9BQU9tMkMsR0FUY0ksRUFTUUosRUFBUUEsRUFBUXAwQyxFQUFHdTBDLEdBQUlILEVBQVF6bEMsRUFBRzFRLE9BVHJDdzJDLEVBUzBDbnBDLEdBUmhEa3BDLElBQVEsR0FBS0MsRUFRdUN4MEMsR0FUMUUsSUFBdUJ1MEMsRUFBS0MsQ0FVNUIsQ0FFQSxTQUFTQyxFQUFNMTBDLEVBQUdDLEVBQUdzaEIsRUFBRzZ4QixFQUFHemtDLEVBQUdyRCxFQUFHck4sR0FDL0IsT0FBT3EyQyxFQUFPcjBDLEVBQUlzaEIsR0FBS3RoQixFQUFJbXpDLEVBQUdwekMsRUFBR0MsRUFBRzBPLEVBQUdyRCxFQUFHck4sRUFDNUMsQ0FFQSxTQUFTMDJDLEVBQU0zMEMsRUFBR0MsRUFBR3NoQixFQUFHNnhCLEVBQUd6a0MsRUFBR3JELEVBQUdyTixHQUMvQixPQUFPcTJDLEVBQU9yMEMsRUFBSW16QyxFQUFJN3hCLEdBQUs2eEIsRUFBR3B6QyxFQUFHQyxFQUFHME8sRUFBR3JELEVBQUdyTixFQUM1QyxDQUVBLFNBQVMyMkMsRUFBTTUwQyxFQUFHQyxFQUFHc2hCLEVBQUc2eEIsRUFBR3prQyxFQUFHckQsRUFBR3JOLEdBQy9CLE9BQU9xMkMsRUFBT3IwQyxFQUFJc2hCLEVBQUk2eEIsRUFBR3B6QyxFQUFHQyxFQUFHME8sRUFBR3JELEVBQUdyTixFQUN2QyxDQUVBLFNBQVM0MkMsRUFBTTcwQyxFQUFHQyxFQUFHc2hCLEVBQUc2eEIsRUFBR3prQyxFQUFHckQsRUFBR3JOLEdBQy9CLE9BQU9xMkMsRUFBTy95QixHQUFLdGhCLEdBQUttekMsR0FBSXB6QyxFQUFHQyxFQUFHME8sRUFBR3JELEVBQUdyTixFQUMxQyxDQXpOQTNFLE9BQU80USxlQUFlNkIsRUFBUyxhQUFjLENBQzNDdlAsT0FBTyxJQUVUdVAsRUFBQSxhQUFrQixFQXlObEJBLEVBQUEsUUFuTUEsU0FBYStvQyxHQUNYLEdBQXFCLGlCQUFWQSxFQUFvQixDQUM3QixNQUFNQyxFQUFNQyxTQUFTQyxtQkFBbUJILElBRXhDQSxFQUFRLElBQUlJLFdBQVdILEVBQUlwN0MsUUFFM0IsSUFBSyxJQUFJRixFQUFJLEVBQUdBLEVBQUlzN0MsRUFBSXA3QyxTQUFVRixFQUNoQ3E3QyxFQUFNcjdDLEdBQUtzN0MsRUFBSXQ5QixXQUFXaGUsRUFFOUIsQ0FFQSxPQU9GLFNBQThCMnFDLEdBQzVCLE1BQU0rUSxFQUFTLEdBQ1RDLEVBQTBCLEdBQWZoUixFQUFNenFDLE9BQ2pCMDdDLEVBQVMsbUJBRWYsSUFBSyxJQUFJNTdDLEVBQUksRUFBR0EsRUFBSTI3QyxFQUFVMzdDLEdBQUssRUFBRyxDQUNwQyxNQUFNa1YsRUFBSXkxQixFQUFNM3FDLEdBQUssS0FBT0EsRUFBSSxHQUFLLElBQy9CNjdDLEVBQU10TixTQUFTcU4sRUFBT0UsT0FBTzVtQyxJQUFNLEVBQUksSUFBUTBtQyxFQUFPRSxPQUFXLEdBQUo1bUMsR0FBVyxJQUM5RXdtQyxFQUFPNTRDLEtBQUsrNEMsRUFDZCxDQUVBLE9BQU9ILENBQ1QsQ0FuQlNLLENBaUNULFNBQW9CN21DLEVBQUd5SixHQUVyQnpKLEVBQUV5SixHQUFPLElBQU0sS0FBUUEsRUFBTSxHQUM3QnpKLEVBQUV1bEMsRUFBZ0I5N0IsR0FBTyxHQUFLQSxFQUM5QixJQUFJcFksRUFBSSxXQUNKQyxHQUFLLFVBQ0xzaEIsR0FBSyxXQUNMNnhCLEVBQUksVUFFUixJQUFLLElBQUkzNUMsRUFBSSxFQUFHQSxFQUFJa1YsRUFBRWhWLE9BQVFGLEdBQUssR0FBSSxDQUNyQyxNQUFNZzhDLEVBQU96MUMsRUFDUDAxQyxFQUFPejFDLEVBQ1AwMUMsRUFBT3AwQixFQUNQcTBCLEVBQU94QyxFQUNicHpDLEVBQUkwMEMsRUFBTTEwQyxFQUFHQyxFQUFHc2hCLEVBQUc2eEIsRUFBR3prQyxFQUFFbFYsR0FBSSxHQUFJLFdBQ2hDMjVDLEVBQUlzQixFQUFNdEIsRUFBR3B6QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLElBQUssV0FDckM4bkIsRUFBSW16QixFQUFNbnpCLEVBQUc2eEIsRUFBR3B6QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksR0FBSSxHQUFJLFdBQ3BDd0csRUFBSXkwQyxFQUFNejBDLEVBQUdzaEIsRUFBRzZ4QixFQUFHcHpDLEVBQUcyTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssWUFDckN1RyxFQUFJMDBDLEVBQU0xMEMsRUFBR0MsRUFBR3NoQixFQUFHNnhCLEVBQUd6a0MsRUFBRWxWLEVBQUksR0FBSSxHQUFJLFdBQ3BDMjVDLEVBQUlzQixFQUFNdEIsRUFBR3B6QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLEdBQUksWUFDcEM4bkIsRUFBSW16QixFQUFNbnpCLEVBQUc2eEIsRUFBR3B6QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksR0FBSSxJQUFLLFlBQ3JDd0csRUFBSXkwQyxFQUFNejBDLEVBQUdzaEIsRUFBRzZ4QixFQUFHcHpDLEVBQUcyTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssVUFDckN1RyxFQUFJMDBDLEVBQU0xMEMsRUFBR0MsRUFBR3NoQixFQUFHNnhCLEVBQUd6a0MsRUFBRWxWLEVBQUksR0FBSSxFQUFHLFlBQ25DMjVDLEVBQUlzQixFQUFNdEIsRUFBR3B6QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLElBQUssWUFDckM4bkIsRUFBSW16QixFQUFNbnpCLEVBQUc2eEIsRUFBR3B6QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLE9BQ3RDd0csRUFBSXkwQyxFQUFNejBDLEVBQUdzaEIsRUFBRzZ4QixFQUFHcHpDLEVBQUcyTyxFQUFFbFYsRUFBSSxJQUFLLElBQUssWUFDdEN1RyxFQUFJMDBDLEVBQU0xMEMsRUFBR0MsRUFBR3NoQixFQUFHNnhCLEVBQUd6a0MsRUFBRWxWLEVBQUksSUFBSyxFQUFHLFlBQ3BDMjVDLEVBQUlzQixFQUFNdEIsRUFBR3B6QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxJQUFLLElBQUssVUFDdEM4bkIsRUFBSW16QixFQUFNbnpCLEVBQUc2eEIsRUFBR3B6QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFlBQ3RDd0csRUFBSXkwQyxFQUFNejBDLEVBQUdzaEIsRUFBRzZ4QixFQUFHcHpDLEVBQUcyTyxFQUFFbFYsRUFBSSxJQUFLLEdBQUksWUFDckN1RyxFQUFJMjBDLEVBQU0zMEMsRUFBR0MsRUFBR3NoQixFQUFHNnhCLEVBQUd6a0MsRUFBRWxWLEVBQUksR0FBSSxHQUFJLFdBQ3BDMjVDLEVBQUl1QixFQUFNdkIsRUFBR3B6QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLEdBQUksWUFDcEM4bkIsRUFBSW96QixFQUFNcHpCLEVBQUc2eEIsRUFBR3B6QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksSUFBSyxHQUFJLFdBQ3JDd0csRUFBSTAwQyxFQUFNMTBDLEVBQUdzaEIsRUFBRzZ4QixFQUFHcHpDLEVBQUcyTyxFQUFFbFYsR0FBSSxJQUFLLFdBQ2pDdUcsRUFBSTIwQyxFQUFNMzBDLEVBQUdDLEVBQUdzaEIsRUFBRzZ4QixFQUFHemtDLEVBQUVsVixFQUFJLEdBQUksR0FBSSxXQUNwQzI1QyxFQUFJdUIsRUFBTXZCLEVBQUdwekMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEVBQUksSUFBSyxFQUFHLFVBQ3BDOG5CLEVBQUlvekIsRUFBTXB6QixFQUFHNnhCLEVBQUdwekMsRUFBR0MsRUFBRzBPLEVBQUVsVixFQUFJLElBQUssSUFBSyxXQUN0Q3dHLEVBQUkwMEMsRUFBTTEwQyxFQUFHc2hCLEVBQUc2eEIsRUFBR3B6QyxFQUFHMk8sRUFBRWxWLEVBQUksR0FBSSxJQUFLLFdBQ3JDdUcsRUFBSTIwQyxFQUFNMzBDLEVBQUdDLEVBQUdzaEIsRUFBRzZ4QixFQUFHemtDLEVBQUVsVixFQUFJLEdBQUksRUFBRyxXQUNuQzI1QyxFQUFJdUIsRUFBTXZCLEVBQUdwekMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEVBQUksSUFBSyxHQUFJLFlBQ3JDOG5CLEVBQUlvekIsRUFBTXB6QixFQUFHNnhCLEVBQUdwekMsRUFBR0MsRUFBRzBPLEVBQUVsVixFQUFJLEdBQUksSUFBSyxXQUNyQ3dHLEVBQUkwMEMsRUFBTTEwQyxFQUFHc2hCLEVBQUc2eEIsRUFBR3B6QyxFQUFHMk8sRUFBRWxWLEVBQUksR0FBSSxHQUFJLFlBQ3BDdUcsRUFBSTIwQyxFQUFNMzBDLEVBQUdDLEVBQUdzaEIsRUFBRzZ4QixFQUFHemtDLEVBQUVsVixFQUFJLElBQUssR0FBSSxZQUNyQzI1QyxFQUFJdUIsRUFBTXZCLEVBQUdwekMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEVBQUksR0FBSSxHQUFJLFVBQ3BDOG5CLEVBQUlvekIsRUFBTXB6QixFQUFHNnhCLEVBQUdwekMsRUFBR0MsRUFBRzBPLEVBQUVsVixFQUFJLEdBQUksR0FBSSxZQUNwQ3dHLEVBQUkwMEMsRUFBTTEwQyxFQUFHc2hCLEVBQUc2eEIsRUFBR3B6QyxFQUFHMk8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFlBQ3RDdUcsRUFBSTQwQyxFQUFNNTBDLEVBQUdDLEVBQUdzaEIsRUFBRzZ4QixFQUFHemtDLEVBQUVsVixFQUFJLEdBQUksR0FBSSxRQUNwQzI1QyxFQUFJd0IsRUFBTXhCLEVBQUdwekMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEVBQUksR0FBSSxJQUFLLFlBQ3JDOG5CLEVBQUlxekIsRUFBTXJ6QixFQUFHNnhCLEVBQUdwekMsRUFBR0MsRUFBRzBPLEVBQUVsVixFQUFJLElBQUssR0FBSSxZQUNyQ3dHLEVBQUkyMEMsRUFBTTMwQyxFQUFHc2hCLEVBQUc2eEIsRUFBR3B6QyxFQUFHMk8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFVBQ3RDdUcsRUFBSTQwQyxFQUFNNTBDLEVBQUdDLEVBQUdzaEIsRUFBRzZ4QixFQUFHemtDLEVBQUVsVixFQUFJLEdBQUksR0FBSSxZQUNwQzI1QyxFQUFJd0IsRUFBTXhCLEVBQUdwekMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEVBQUksR0FBSSxHQUFJLFlBQ3BDOG5CLEVBQUlxekIsRUFBTXJ6QixFQUFHNnhCLEVBQUdwekMsRUFBR0MsRUFBRzBPLEVBQUVsVixFQUFJLEdBQUksSUFBSyxXQUNyQ3dHLEVBQUkyMEMsRUFBTTMwQyxFQUFHc2hCLEVBQUc2eEIsRUFBR3B6QyxFQUFHMk8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFlBQ3RDdUcsRUFBSTQwQyxFQUFNNTBDLEVBQUdDLEVBQUdzaEIsRUFBRzZ4QixFQUFHemtDLEVBQUVsVixFQUFJLElBQUssRUFBRyxXQUNwQzI1QyxFQUFJd0IsRUFBTXhCLEVBQUdwekMsRUFBR0MsRUFBR3NoQixFQUFHNVMsRUFBRWxWLEdBQUksSUFBSyxXQUNqQzhuQixFQUFJcXpCLEVBQU1yekIsRUFBRzZ4QixFQUFHcHpDLEVBQUdDLEVBQUcwTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssV0FDckN3RyxFQUFJMjBDLEVBQU0zMEMsRUFBR3NoQixFQUFHNnhCLEVBQUdwekMsRUFBRzJPLEVBQUVsVixFQUFJLEdBQUksR0FBSSxVQUNwQ3VHLEVBQUk0MEMsRUFBTTUwQyxFQUFHQyxFQUFHc2hCLEVBQUc2eEIsRUFBR3prQyxFQUFFbFYsRUFBSSxHQUFJLEdBQUksV0FDcEMyNUMsRUFBSXdCLEVBQU14QixFQUFHcHpDLEVBQUdDLEVBQUdzaEIsRUFBRzVTLEVBQUVsVixFQUFJLElBQUssSUFBSyxXQUN0QzhuQixFQUFJcXpCLEVBQU1yekIsRUFBRzZ4QixFQUFHcHpDLEVBQUdDLEVBQUcwTyxFQUFFbFYsRUFBSSxJQUFLLEdBQUksV0FDckN3RyxFQUFJMjBDLEVBQU0zMEMsRUFBR3NoQixFQUFHNnhCLEVBQUdwekMsRUFBRzJPLEVBQUVsVixFQUFJLEdBQUksSUFBSyxXQUNyQ3VHLEVBQUk2MEMsRUFBTTcwQyxFQUFHQyxFQUFHc2hCLEVBQUc2eEIsRUFBR3prQyxFQUFFbFYsR0FBSSxHQUFJLFdBQ2hDMjVDLEVBQUl5QixFQUFNekIsRUFBR3B6QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLEdBQUksWUFDcEM4bkIsRUFBSXN6QixFQUFNdHpCLEVBQUc2eEIsRUFBR3B6QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFlBQ3RDd0csRUFBSTQwQyxFQUFNNTBDLEVBQUdzaEIsRUFBRzZ4QixFQUFHcHpDLEVBQUcyTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssVUFDckN1RyxFQUFJNjBDLEVBQU03MEMsRUFBR0MsRUFBR3NoQixFQUFHNnhCLEVBQUd6a0MsRUFBRWxWLEVBQUksSUFBSyxFQUFHLFlBQ3BDMjVDLEVBQUl5QixFQUFNekIsRUFBR3B6QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxHQUFJLElBQUssWUFDckM4bkIsRUFBSXN6QixFQUFNdHpCLEVBQUc2eEIsRUFBR3B6QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksSUFBSyxJQUFLLFNBQ3RDd0csRUFBSTQwQyxFQUFNNTBDLEVBQUdzaEIsRUFBRzZ4QixFQUFHcHpDLEVBQUcyTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssWUFDckN1RyxFQUFJNjBDLEVBQU03MEMsRUFBR0MsRUFBR3NoQixFQUFHNnhCLEVBQUd6a0MsRUFBRWxWLEVBQUksR0FBSSxFQUFHLFlBQ25DMjVDLEVBQUl5QixFQUFNekIsRUFBR3B6QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxJQUFLLElBQUssVUFDdEM4bkIsRUFBSXN6QixFQUFNdHpCLEVBQUc2eEIsRUFBR3B6QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksR0FBSSxJQUFLLFlBQ3JDd0csRUFBSTQwQyxFQUFNNTBDLEVBQUdzaEIsRUFBRzZ4QixFQUFHcHpDLEVBQUcyTyxFQUFFbFYsRUFBSSxJQUFLLEdBQUksWUFDckN1RyxFQUFJNjBDLEVBQU03MEMsRUFBR0MsRUFBR3NoQixFQUFHNnhCLEVBQUd6a0MsRUFBRWxWLEVBQUksR0FBSSxHQUFJLFdBQ3BDMjVDLEVBQUl5QixFQUFNekIsRUFBR3B6QyxFQUFHQyxFQUFHc2hCLEVBQUc1UyxFQUFFbFYsRUFBSSxJQUFLLElBQUssWUFDdEM4bkIsRUFBSXN6QixFQUFNdHpCLEVBQUc2eEIsRUFBR3B6QyxFQUFHQyxFQUFHME8sRUFBRWxWLEVBQUksR0FBSSxHQUFJLFdBQ3BDd0csRUFBSTQwQyxFQUFNNTBDLEVBQUdzaEIsRUFBRzZ4QixFQUFHcHpDLEVBQUcyTyxFQUFFbFYsRUFBSSxHQUFJLElBQUssV0FDckN1RyxFQUFJbzBDLEVBQVFwMEMsRUFBR3kxQyxHQUNmeDFDLEVBQUltMEMsRUFBUW4wQyxFQUFHeTFDLEdBQ2ZuMEIsRUFBSTZ5QixFQUFRN3lCLEVBQUdvMEIsR0FDZnZDLEVBQUlnQixFQUFRaEIsRUFBR3dDLEVBQ2pCLENBRUEsTUFBTyxDQUFDNTFDLEVBQUdDLEVBQUdzaEIsRUFBRzZ4QixFQUNuQixDQXRIOEJ5QyxDQTZIOUIsU0FBc0J6UixHQUNwQixHQUFxQixJQUFqQkEsRUFBTXpxQyxPQUNSLE1BQU8sR0FHVCxNQUFNbThDLEVBQXlCLEVBQWYxUixFQUFNenFDLE9BQ2hCdzdDLEVBQVMsSUFBSVksWUFBWTdCLEVBQWdCNEIsSUFFL0MsSUFBSyxJQUFJcjhDLEVBQUksRUFBR0EsRUFBSXE4QyxFQUFTcjhDLEdBQUssRUFDaEMwN0MsRUFBTzE3QyxHQUFLLEtBQXNCLElBQWYycUMsRUFBTTNxQyxFQUFJLEtBQWNBLEVBQUksR0FHakQsT0FBTzA3QyxDQUNULENBMUl5Q2EsQ0FBYWxCLEdBQXVCLEVBQWZBLEVBQU1uN0MsUUFDcEUsNkJDckNBTCxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUMzQ3ZQLE9BQU8sSUFFVHVQLEVBQUEsYUFBa0IsRUFFbEIsSUFBSWtxQyxFQUFXLENBQ2JDLFdBRm1DLG9CQUFYQyxRQUEwQkEsT0FBT0QsWUFBY0MsT0FBT0QsV0FBV24wQyxLQUFLbzBDLFNBSWhHcHFDLEVBQUEsUUFBa0JrcUMsNkJDUmxCMzhDLE9BQU80USxlQUFlNkIsRUFBUyxhQUFjLENBQzNDdlAsT0FBTyxJQUVUdVAsRUFBQSxhQUFrQixFQUVsQkEsRUFBQSxRQURlLG9FQ0pmelMsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVR1UCxFQUFBLGFBQWtCLEVBRWxCLElBRWdDZCxFQUY1QjhvQyxHQUU0QjlvQyxFQUZPLEVBQVEsUUFFTUEsRUFBSWEsV0FBYWIsRUFBTSxDQUFFb0IsUUFBU3BCLEdBbUN2RmMsRUFBQSxRQWpDQSxTQUFlcXFDLEdBQ2IsS0FBSyxFQUFJckMsRUFBVTFuQyxTQUFTK3BDLEdBQzFCLE1BQU16M0MsVUFBVSxnQkFHbEIsSUFBSUYsRUFDSixNQUFNNDNDLEVBQU0sSUFBSW5CLFdBQVcsSUF1QjNCLE9BckJBbUIsRUFBSSxJQUFNNTNDLEVBQUl1cEMsU0FBU29PLEVBQUtybkMsTUFBTSxFQUFHLEdBQUksT0FBUyxHQUNsRHNuQyxFQUFJLEdBQUs1M0MsSUFBTSxHQUFLLElBQ3BCNDNDLEVBQUksR0FBSzUzQyxJQUFNLEVBQUksSUFDbkI0M0MsRUFBSSxHQUFTLElBQUo1M0MsRUFFVDQzQyxFQUFJLElBQU01M0MsRUFBSXVwQyxTQUFTb08sRUFBS3JuQyxNQUFNLEVBQUcsSUFBSyxPQUFTLEVBQ25Ec25DLEVBQUksR0FBUyxJQUFKNTNDLEVBRVQ0M0MsRUFBSSxJQUFNNTNDLEVBQUl1cEMsU0FBU29PLEVBQUtybkMsTUFBTSxHQUFJLElBQUssT0FBUyxFQUNwRHNuQyxFQUFJLEdBQVMsSUFBSjUzQyxFQUVUNDNDLEVBQUksSUFBTTUzQyxFQUFJdXBDLFNBQVNvTyxFQUFLcm5DLE1BQU0sR0FBSSxJQUFLLE9BQVMsRUFDcERzbkMsRUFBSSxHQUFTLElBQUo1M0MsRUFHVDQzQyxFQUFJLEtBQU81M0MsRUFBSXVwQyxTQUFTb08sRUFBS3JuQyxNQUFNLEdBQUksSUFBSyxLQUFPLGNBQWdCLElBQ25Fc25DLEVBQUksSUFBTTUzQyxFQUFJLFdBQWMsSUFDNUI0M0MsRUFBSSxJQUFNNTNDLElBQU0sR0FBSyxJQUNyQjQzQyxFQUFJLElBQU01M0MsSUFBTSxHQUFLLElBQ3JCNDNDLEVBQUksSUFBTTUzQyxJQUFNLEVBQUksSUFDcEI0M0MsRUFBSSxJQUFVLElBQUo1M0MsRUFDSDQzQyxDQUNULDJCQ3ZDQS84QyxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUMzQ3ZQLE9BQU8sSUFFVHVQLEVBQUEsYUFBa0IsRUFFbEJBLEVBQUEsUUFEZSxpSkNHZixJQUFJdXFDLEVBUEpoOUMsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVR1UCxFQUFBLFFBT0EsV0FFRSxJQUFLdXFDLElBRUhBLEVBQW9DLG9CQUFYSCxRQUEwQkEsT0FBT0csaUJBQW1CSCxPQUFPRyxnQkFBZ0J2MEMsS0FBS28wQyxTQUVwR0csR0FDSCxNQUFNLElBQUl2USxNQUFNLDRHQUlwQixPQUFPdVEsRUFBZ0JDLEVBQ3pCLEVBZEEsTUFBTUEsRUFBUSxJQUFJckIsV0FBVywrQkNEN0IsU0FBU24zQyxFQUFFdU4sRUFBR3FELEVBQUczUSxFQUFHdzRDLEdBQ2xCLE9BQVFsckMsR0FDTixLQUFLLEVBQ0gsT0FBT3FELEVBQUkzUSxHQUFLMlEsRUFBSTZuQyxFQUV0QixLQUFLLEVBTUwsS0FBSyxFQUNILE9BQU83bkMsRUFBSTNRLEVBQUl3NEMsRUFKakIsS0FBSyxFQUNILE9BQU83bkMsRUFBSTNRLEVBQUkyUSxFQUFJNm5DLEVBQUl4NEMsRUFBSXc0QyxFQUtqQyxDQUVBLFNBQVNDLEVBQUs5bkMsRUFBRzdTLEdBQ2YsT0FBTzZTLEdBQUs3UyxFQUFJNlMsSUFBTSxHQUFLN1MsQ0FDN0IsQ0F6QkF4QyxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUMzQ3ZQLE9BQU8sSUFFVHVQLEVBQUEsYUFBa0IsRUFrR2xCQSxFQUFBLFFBMUVBLFNBQWMrb0MsR0FDWixNQUFNNEIsRUFBSSxDQUFDLFdBQVksV0FBWSxXQUFZLFlBQ3pDQyxFQUFJLENBQUMsV0FBWSxXQUFZLFdBQVksVUFBWSxZQUUzRCxHQUFxQixpQkFBVjdCLEVBQW9CLENBQzdCLE1BQU1DLEVBQU1DLFNBQVNDLG1CQUFtQkgsSUFFeENBLEVBQVEsR0FFUixJQUFLLElBQUlyN0MsRUFBSSxFQUFHQSxFQUFJczdDLEVBQUlwN0MsU0FBVUYsRUFDaENxN0MsRUFBTXY0QyxLQUFLdzRDLEVBQUl0OUIsV0FBV2hlLEdBRTlCLE1BQVlpSSxNQUFNNEIsUUFBUXd4QyxLQUV4QkEsRUFBUXB6QyxNQUFNNUgsVUFBVWlWLE1BQU0vVSxLQUFLODZDLElBR3JDQSxFQUFNdjRDLEtBQUssS0FDWCxNQUFNMDJDLEVBQUk2QixFQUFNbjdDLE9BQVMsRUFBSSxFQUN2Qmk5QyxFQUFJanZDLEtBQUtxekIsS0FBS2lZLEVBQUksSUFDbEI0RCxFQUFJLElBQUluMUMsTUFBTWsxQyxHQUVwQixJQUFLLElBQUluOUMsRUFBSSxFQUFHQSxFQUFJbTlDLElBQUtuOUMsRUFBRyxDQUMxQixNQUFNNDhDLEVBQU0sSUFBSU4sWUFBWSxJQUU1QixJQUFLLElBQUllLEVBQUksRUFBR0EsRUFBSSxLQUFNQSxFQUN4QlQsRUFBSVMsR0FBS2hDLEVBQVUsR0FBSnI3QyxFQUFhLEVBQUpxOUMsSUFBVSxHQUFLaEMsRUFBVSxHQUFKcjdDLEVBQWEsRUFBSnE5QyxFQUFRLElBQU0sR0FBS2hDLEVBQVUsR0FBSnI3QyxFQUFhLEVBQUpxOUMsRUFBUSxJQUFNLEVBQUloQyxFQUFVLEdBQUpyN0MsRUFBYSxFQUFKcTlDLEVBQVEsR0FHbklELEVBQUVwOUMsR0FBSzQ4QyxDQUNULENBRUFRLEVBQUVELEVBQUksR0FBRyxJQUEyQixHQUFwQjlCLEVBQU1uN0MsT0FBUyxHQUFTZ08sS0FBS292QyxJQUFJLEVBQUcsSUFDcERGLEVBQUVELEVBQUksR0FBRyxJQUFNanZDLEtBQUs2dkIsTUFBTXFmLEVBQUVELEVBQUksR0FBRyxLQUNuQ0MsRUFBRUQsRUFBSSxHQUFHLElBQTJCLEdBQXBCOUIsRUFBTW43QyxPQUFTLEdBQVMsV0FFeEMsSUFBSyxJQUFJRixFQUFJLEVBQUdBLEVBQUltOUMsSUFBS245QyxFQUFHLENBQzFCLE1BQU11OUMsRUFBSSxJQUFJakIsWUFBWSxJQUUxQixJQUFLLElBQUk5M0MsRUFBSSxFQUFHQSxFQUFJLEtBQU1BLEVBQ3hCKzRDLEVBQUUvNEMsR0FBSzQ0QyxFQUFFcDlDLEdBQUd3RSxHQUdkLElBQUssSUFBSUEsRUFBSSxHQUFJQSxFQUFJLEtBQU1BLEVBQ3pCKzRDLEVBQUUvNEMsR0FBS3c0QyxFQUFLTyxFQUFFLzRDLEVBQUksR0FBSys0QyxFQUFFLzRDLEVBQUksR0FBSys0QyxFQUFFLzRDLEVBQUksSUFBTSs0QyxFQUFFLzRDLEVBQUksSUFBSyxHQUczRCxJQUFJK0IsRUFBSTIyQyxFQUFFLEdBQ04xMkMsRUFBSTAyQyxFQUFFLEdBQ05wMUIsRUFBSW8xQixFQUFFLEdBQ052RCxFQUFJdUQsRUFBRSxHQUNOeDZDLEVBQUl3NkMsRUFBRSxHQUVWLElBQUssSUFBSTE0QyxFQUFJLEVBQUdBLEVBQUksS0FBTUEsRUFBRyxDQUMzQixNQUFNcU4sRUFBSTNELEtBQUs2dkIsTUFBTXY1QixFQUFJLElBQ25CZzVDLEVBQUlSLEVBQUt6MkMsRUFBRyxHQUFLakMsRUFBRXVOLEVBQUdyTCxFQUFHc2hCLEVBQUc2eEIsR0FBS2ozQyxFQUFJdTZDLEVBQUVwckMsR0FBSzByQyxFQUFFLzRDLEtBQU8sRUFDM0Q5QixFQUFJaTNDLEVBQ0pBLEVBQUk3eEIsRUFDSkEsRUFBSWsxQixFQUFLeDJDLEVBQUcsTUFBUSxFQUNwQkEsRUFBSUQsRUFDSkEsRUFBSWkzQyxDQUNOLENBRUFOLEVBQUUsR0FBS0EsRUFBRSxHQUFLMzJDLElBQU0sRUFDcEIyMkMsRUFBRSxHQUFLQSxFQUFFLEdBQUsxMkMsSUFBTSxFQUNwQjAyQyxFQUFFLEdBQUtBLEVBQUUsR0FBS3AxQixJQUFNLEVBQ3BCbzFCLEVBQUUsR0FBS0EsRUFBRSxHQUFLdkQsSUFBTSxFQUNwQnVELEVBQUUsR0FBS0EsRUFBRSxHQUFLeDZDLElBQU0sQ0FDdEIsQ0FFQSxNQUFPLENBQUN3NkMsRUFBRSxJQUFNLEdBQUssSUFBTUEsRUFBRSxJQUFNLEdBQUssSUFBTUEsRUFBRSxJQUFNLEVBQUksSUFBYSxJQUFQQSxFQUFFLEdBQVdBLEVBQUUsSUFBTSxHQUFLLElBQU1BLEVBQUUsSUFBTSxHQUFLLElBQU1BLEVBQUUsSUFBTSxFQUFJLElBQWEsSUFBUEEsRUFBRSxHQUFXQSxFQUFFLElBQU0sR0FBSyxJQUFNQSxFQUFFLElBQU0sR0FBSyxJQUFNQSxFQUFFLElBQU0sRUFBSSxJQUFhLElBQVBBLEVBQUUsR0FBV0EsRUFBRSxJQUFNLEdBQUssSUFBTUEsRUFBRSxJQUFNLEdBQUssSUFBTUEsRUFBRSxJQUFNLEVBQUksSUFBYSxJQUFQQSxFQUFFLEdBQVdBLEVBQUUsSUFBTSxHQUFLLElBQU1BLEVBQUUsSUFBTSxHQUFLLElBQU1BLEVBQUUsSUFBTSxFQUFJLElBQWEsSUFBUEEsRUFBRSxHQUN4ViwrQkNsR0FyOUMsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVR1UCxFQUFBLGFBQWtCLEVBQ2xCQSxFQUFRbXJDLGdCQUFrQkEsRUFFMUIsSUFFZ0Nqc0MsRUFGNUI4b0MsR0FFNEI5b0MsRUFGTyxFQUFRLFFBRU1BLEVBQUlhLFdBQWFiLEVBQU0sQ0FBRW9CLFFBQVNwQixHQU12RixNQUFNa3NDLEVBQVksR0FFbEIsSUFBSyxJQUFJMTlDLEVBQUksRUFBR0EsRUFBSSxNQUFPQSxFQUN6QjA5QyxFQUFVNTZDLE1BQU05QyxFQUFJLEtBQU82SCxTQUFTLElBQUl5TixNQUFNLElBR2hELFNBQVNtb0MsRUFBZ0JiLEVBQUs3ZixFQUFTLEdBR3JDLE9BQVEyZ0IsRUFBVWQsRUFBSTdmLEVBQVMsSUFBTTJnQixFQUFVZCxFQUFJN2YsRUFBUyxJQUFNMmdCLEVBQVVkLEVBQUk3ZixFQUFTLElBQU0yZ0IsRUFBVWQsRUFBSTdmLEVBQVMsSUFBTSxJQUFNMmdCLEVBQVVkLEVBQUk3ZixFQUFTLElBQU0yZ0IsRUFBVWQsRUFBSTdmLEVBQVMsSUFBTSxJQUFNMmdCLEVBQVVkLEVBQUk3ZixFQUFTLElBQU0yZ0IsRUFBVWQsRUFBSTdmLEVBQVMsSUFBTSxJQUFNMmdCLEVBQVVkLEVBQUk3ZixFQUFTLElBQU0yZ0IsRUFBVWQsRUFBSTdmLEVBQVMsSUFBTSxJQUFNMmdCLEVBQVVkLEVBQUk3ZixFQUFTLEtBQU8yZ0IsRUFBVWQsRUFBSTdmLEVBQVMsS0FBTzJnQixFQUFVZCxFQUFJN2YsRUFBUyxLQUFPMmdCLEVBQVVkLEVBQUk3ZixFQUFTLEtBQU8yZ0IsRUFBVWQsRUFBSTdmLEVBQVMsS0FBTzJnQixFQUFVZCxFQUFJN2YsRUFBUyxNQUFNL3BCLGFBQ3ZmLENBaUJBVixFQUFBLFFBZkEsU0FBbUJzcUMsRUFBSzdmLEVBQVMsR0FDL0IsTUFBTTRmLEVBQU9jLEVBQWdCYixFQUFLN2YsR0FNbEMsS0FBSyxFQUFJdWQsRUFBVTFuQyxTQUFTK3BDLEdBQzFCLE1BQU16M0MsVUFBVSwrQkFHbEIsT0FBT3kzQyxDQUNULCtCQ3RDQTk4QyxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUMzQ3ZQLE9BQU8sSUFFVHVQLEVBQUEsYUFBa0IsRUFFbEIsSUFJZ0NkLEVBSjVCbXNDLEdBSTRCbnNDLEVBSkUsRUFBUSxRQUlXQSxFQUFJYSxXQUFhYixFQUFNLENBQUVvQixRQUFTcEIsR0FGbkZ5b0MsRUFBYSxFQUFRLE1BUXpCLElBQUkyRCxFQUVBQyxFQUdBQyxFQUFhLEVBQ2JDLEVBQWEsRUFtRmpCenJDLEVBQUEsUUFqRkEsU0FBWWpSLEVBQVMyOEMsRUFBS2poQixHQUN4QixJQUFJLzhCLEVBQUlnK0MsR0FBT2poQixHQUFVLEVBQ3pCLE1BQU12MkIsRUFBSXczQyxHQUFPLElBQUkvMUMsTUFBTSxJQUUzQixJQUFJeWIsR0FESnJpQixFQUFVQSxHQUFXLENBQUMsR0FDSHFpQixNQUFRazZCLEVBQ3ZCSyxPQUFnQzM2QyxJQUFyQmpDLEVBQVE0OEMsU0FBeUI1OEMsRUFBUTQ4QyxTQUFXSixFQUluRSxHQUFZLE1BQVJuNkIsR0FBNEIsTUFBWnU2QixFQUFrQixDQUNwQyxNQUFNQyxFQUFZNzhDLEVBQVE4TSxTQUFXOU0sRUFBUTg4QyxLQUFPUixFQUFLL3FDLFdBRTdDLE1BQVI4USxJQUVGQSxFQUFPazZCLEVBQVUsQ0FBZ0IsRUFBZk0sRUFBVSxHQUFXQSxFQUFVLEdBQUlBLEVBQVUsR0FBSUEsRUFBVSxHQUFJQSxFQUFVLEdBQUlBLEVBQVUsS0FHM0YsTUFBWkQsSUFFRkEsRUFBV0osRUFBaUQsT0FBcENLLEVBQVUsSUFBTSxFQUFJQSxFQUFVLElBRTFELENBTUEsSUFBSUUsT0FBMEI5NkMsSUFBbEJqQyxFQUFRKzhDLE1BQXNCLzhDLEVBQVErOEMsTUFBUTMyQyxLQUFLbXJCLE1BRzNEeXJCLE9BQTBCLzZDLElBQWxCakMsRUFBUWc5QyxNQUFzQmg5QyxFQUFRZzlDLE1BQVFOLEVBQWEsRUFFdkUsTUFBTU8sRUFBS0YsRUFBUU4sR0FBY08sRUFBUU4sR0FBYyxJQWF2RCxHQVhJTyxFQUFLLFFBQTBCaDdDLElBQXJCakMsRUFBUTQ4QyxXQUNwQkEsRUFBV0EsRUFBVyxFQUFJLFFBS3ZCSyxFQUFLLEdBQUtGLEVBQVFOLFNBQWlDeDZDLElBQWxCakMsRUFBUWc5QyxRQUM1Q0EsRUFBUSxHQUlOQSxHQUFTLElBQ1gsTUFBTSxJQUFJL1IsTUFBTSxtREFHbEJ3UixFQUFhTSxFQUNiTCxFQUFhTSxFQUNiUixFQUFZSSxFQUVaRyxHQUFTLFlBRVQsTUFBTUcsR0FBNEIsS0FBYixVQUFSSCxHQUE2QkMsR0FBUyxXQUNuRDczQyxFQUFFeEcsS0FBT3UrQyxJQUFPLEdBQUssSUFDckIvM0MsRUFBRXhHLEtBQU91K0MsSUFBTyxHQUFLLElBQ3JCLzNDLEVBQUV4RyxLQUFPdStDLElBQU8sRUFBSSxJQUNwQi8zQyxFQUFFeEcsS0FBWSxJQUFMdStDLEVBRVQsTUFBTUMsRUFBTUosRUFBUSxXQUFjLElBQVEsVUFDMUM1M0MsRUFBRXhHLEtBQU93K0MsSUFBUSxFQUFJLElBQ3JCaDRDLEVBQUV4RyxLQUFhLElBQU53K0MsRUFFVGg0QyxFQUFFeEcsS0FBT3crQyxJQUFRLEdBQUssR0FBTSxHQUU1Qmg0QyxFQUFFeEcsS0FBT3crQyxJQUFRLEdBQUssSUFFdEJoNEMsRUFBRXhHLEtBQU9pK0MsSUFBYSxFQUFJLElBRTFCejNDLEVBQUV4RyxLQUFrQixJQUFYaStDLEVBRVQsSUFBSyxJQUFJNTdDLEVBQUksRUFBR0EsRUFBSSxJQUFLQSxFQUN2Qm1FLEVBQUV4RyxFQUFJcUMsR0FBS3FoQixFQUFLcmhCLEdBR2xCLE9BQU8yN0MsSUFBTyxFQUFJL0QsRUFBV3dELGlCQUFpQmozQyxFQUNoRCwrQkNyR0EzRyxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUMzQ3ZQLE9BQU8sSUFFVHVQLEVBQUEsYUFBa0IsRUFFbEIsSUFBSTRuQyxFQUFLTSxFQUF1QixFQUFRLE9BRXBDaUUsRUFBTWpFLEVBQXVCLEVBQVEsT0FFekMsU0FBU0EsRUFBdUJocEMsR0FBTyxPQUFPQSxHQUFPQSxFQUFJYSxXQUFhYixFQUFNLENBQUVvQixRQUFTcEIsRUFBTyxDQUc5RixJQUFJZ3JDLEdBRE8sRUFBSXRDLEVBQUd0bkMsU0FBUyxLQUFNLEdBQU02ckMsRUFBSTdyQyxTQUUzQ04sRUFBQSxRQUFrQmtxQywrQkNibEIzOEMsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVR1UCxFQUFRb3NDLElBQU1wc0MsRUFBUXFzQyxTQUFNLEVBQzVCcnNDLEVBQUEsUUF5QkEsU0FBYWdiLEVBQU1zeEIsRUFBU0MsR0FDMUIsU0FBU0MsRUFBYS83QyxFQUFPZzhDLEVBQVdmLEVBQUtqaEIsR0FDM0MsSUFBSWlpQixFQVVKLEdBUnFCLGlCQUFWajhDLElBQ1RBLEVBdEJOLFNBQXVCazhDLEdBQ3JCQSxFQUFNMUQsU0FBU0MsbUJBQW1CeUQsSUFFbEMsTUFBTTVELEVBQVEsR0FFZCxJQUFLLElBQUlyN0MsRUFBSSxFQUFHQSxFQUFJaS9DLEVBQUkvK0MsU0FBVUYsRUFDaENxN0MsRUFBTXY0QyxLQUFLbThDLEVBQUlqaEMsV0FBV2hlLElBRzVCLE9BQU9xN0MsQ0FDVCxDQVljNkQsQ0FBY244QyxJQUdDLGlCQUFkZzhDLElBQ1RBLEdBQVksRUFBSS9FLEVBQU9wbkMsU0FBU21zQyxJQUdnRSxNQUFoRSxRQUE1QkMsRUFBYUQsU0FBc0MsSUFBZkMsT0FBd0IsRUFBU0EsRUFBVzkrQyxRQUNwRixNQUFNZ0YsVUFBVSxvRUFNbEIsSUFBSW0yQyxFQUFRLElBQUlJLFdBQVcsR0FBSzE0QyxFQUFNN0MsUUFPdEMsR0FOQW03QyxFQUFNcnpDLElBQUkrMkMsR0FDVjFELEVBQU1yekMsSUFBSWpGLEVBQU9nOEMsRUFBVTcrQyxRQUMzQm03QyxFQUFRd0QsRUFBU3hELEdBQ2pCQSxFQUFNLEdBQWdCLEdBQVhBLEVBQU0sR0FBWXVELEVBQzdCdkQsRUFBTSxHQUFnQixHQUFYQSxFQUFNLEdBQVksSUFFekIyQyxFQUFLLENBQ1BqaEIsRUFBU0EsR0FBVSxFQUVuQixJQUFLLElBQUkvOEIsRUFBSSxFQUFHQSxFQUFJLEtBQU1BLEVBQ3hCZytDLEVBQUlqaEIsRUFBUy84QixHQUFLcTdDLEVBQU1yN0MsR0FHMUIsT0FBT2crQyxDQUNULENBRUEsT0FBTyxFQUFJL0QsRUFBV3dELGlCQUFpQnBDLEVBQ3pDLENBR0EsSUFDRXlELEVBQWF4eEIsS0FBT0EsQ0FDdEIsQ0FBRSxNQUFPM2pCLEdBQU0sQ0FLZixPQUZBbTFDLEVBQWFILElBQU1BLEVBQ25CRyxFQUFhSixJQUFNQSxFQUNaSSxDQUNULEVBdkVBLElBSWdDdHRDLEVBSjVCeW9DLEVBQWEsRUFBUSxNQUVyQkQsR0FFNEJ4b0MsRUFGSSxFQUFRLFFBRVNBLEVBQUlhLFdBQWFiLEVBQU0sQ0FBRW9CLFFBQVNwQixHQWN2RixNQUFNbXRDLEVBQU0sdUNBQ1pyc0MsRUFBUXFzQyxJQUFNQSxFQUNkLE1BQU1ELEVBQU0sdUNBQ1pwc0MsRUFBUW9zQyxJQUFNQSwrQkMzQmQ3K0MsT0FBTzRRLGVBQWU2QixFQUFTLGFBQWMsQ0FDM0N2UCxPQUFPLElBRVR1UCxFQUFBLGFBQWtCLEVBRWxCLElBQUk2c0MsRUFBVTNFLEVBQXVCLEVBQVEsT0FFekNtRCxFQUFPbkQsRUFBdUIsRUFBUSxPQUV0Q1AsRUFBYSxFQUFRLE1BRXpCLFNBQVNPLEVBQXVCaHBDLEdBQU8sT0FBT0EsR0FBT0EsRUFBSWEsV0FBYWIsRUFBTSxDQUFFb0IsUUFBU3BCLEVBQU8sQ0E2QjlGYyxFQUFBLFFBM0JBLFNBQVlqUixFQUFTMjhDLEVBQUtqaEIsR0FDeEIsR0FBSW9pQixFQUFRdnNDLFFBQVE2cEMsYUFBZXVCLElBQVEzOEMsRUFDekMsT0FBTzg5QyxFQUFRdnNDLFFBQVE2cEMsYUFLekIsTUFBTTJDLEdBRk4vOUMsRUFBVUEsR0FBVyxDQUFDLEdBRUQ4TSxTQUFXOU0sRUFBUTg4QyxLQUFPUixFQUFLL3FDLFdBTXBELEdBSEF3c0MsRUFBSyxHQUFlLEdBQVZBLEVBQUssR0FBWSxHQUMzQkEsRUFBSyxHQUFlLEdBQVZBLEVBQUssR0FBWSxJQUV2QnBCLEVBQUssQ0FDUGpoQixFQUFTQSxHQUFVLEVBRW5CLElBQUssSUFBSS84QixFQUFJLEVBQUdBLEVBQUksS0FBTUEsRUFDeEJnK0MsRUFBSWpoQixFQUFTLzhCLEdBQUtvL0MsRUFBS3AvQyxHQUd6QixPQUFPZytDLENBQ1QsQ0FFQSxPQUFPLEVBQUkvRCxFQUFXd0QsaUJBQWlCMkIsRUFDekMsK0JDckNBdi9DLE9BQU80USxlQUFlNkIsRUFBUyxhQUFjLENBQzNDdlAsT0FBTyxJQUVUdVAsRUFBQSxhQUFrQixFQUVsQixJQUFJNG5DLEVBQUtNLEVBQXVCLEVBQVEsT0FFcEM2RSxFQUFPN0UsRUFBdUIsRUFBUSxPQUUxQyxTQUFTQSxFQUF1QmhwQyxHQUFPLE9BQU9BLEdBQU9BLEVBQUlhLFdBQWFiLEVBQU0sQ0FBRW9CLFFBQVNwQixFQUFPLENBRzlGLElBQUlnckMsR0FETyxFQUFJdEMsRUFBR3RuQyxTQUFTLEtBQU0sR0FBTXlzQyxFQUFLenNDLFNBRTVDTixFQUFBLFFBQWtCa3FDLCtCQ2JsQjM4QyxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUMzQ3ZQLE9BQU8sSUFFVHVQLEVBQUEsYUFBa0IsRUFFbEIsSUFFZ0NkLEVBRjVCOHRDLEdBRTRCOXRDLEVBRkksRUFBUSxNQUVTQSxFQUFJYSxXQUFhYixFQUFNLENBQUVvQixRQUFTcEIsR0FPdkZjLEVBQUEsUUFMQSxTQUFrQnFxQyxHQUNoQixNQUF1QixpQkFBVEEsR0FBcUIyQyxFQUFPMXNDLFFBQVEzSCxLQUFLMHhDLEVBQ3pELCtCQ1hBOThDLE9BQU80USxlQUFlNkIsRUFBUyxhQUFjLENBQzNDdlAsT0FBTyxJQUVUdVAsRUFBQSxhQUFrQixFQUVsQixJQUVnQ2QsRUFGNUI4b0MsR0FFNEI5b0MsRUFGTyxFQUFRLFFBRU1BLEVBQUlhLFdBQWFiLEVBQU0sQ0FBRW9CLFFBQVNwQixHQVd2RmMsRUFBQSxRQVRBLFNBQWlCcXFDLEdBQ2YsS0FBSyxFQUFJckMsRUFBVTFuQyxTQUFTK3BDLEdBQzFCLE1BQU16M0MsVUFBVSxnQkFHbEIsT0FBT3FwQyxTQUFTb08sRUFBS3JuQyxNQUFNLEdBQUksSUFBSyxHQUN0Qyx5QkNqQkF3a0MsRUFBT3huQyxRQUFVaXRDLFFBQVEsZ0NDQXpCekYsRUFBT3huQyxRQUFVaXRDLFFBQVEsZUNDckJDLEVBQTJCLENBQUMsRUFHaEMsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQnA4QyxJQUFqQnE4QyxFQUNILE9BQU9BLEVBQWFydEMsUUFHckIsSUFBSXduQyxFQUFTMEYsRUFBeUJFLEdBQVksQ0FHakRwdEMsUUFBUyxDQUFDLEdBT1gsT0FIQXN0QyxFQUFvQkYsR0FBVW4vQyxLQUFLdTVDLEVBQU94bkMsUUFBU3duQyxFQUFRQSxFQUFPeG5DLFFBQVNtdEMsR0FHcEUzRixFQUFPeG5DLE9BQ2YsQ0NyQkFtdEMsRUFBb0JwOUMsRUFBS3kzQyxJQUN4QixJQUFJK0YsRUFBUy9GLEdBQVVBLEVBQU96bkMsV0FDN0IsSUFBT3luQyxFQUFpQixRQUN4QixJQUFNLEVBRVAsT0FEQTJGLEVBQW9COUYsRUFBRWtHLEVBQVEsQ0FBRXQ1QyxFQUFHczVDLElBQzVCQSxDQUFNLEVDTGRKLEVBQW9COUYsRUFBSSxDQUFDcm5DLEVBQVN3dEMsS0FDakMsSUFBSSxJQUFJMS9DLEtBQU8wL0MsRUFDWEwsRUFBb0JyOUMsRUFBRTA5QyxFQUFZMS9DLEtBQVNxL0MsRUFBb0JyOUMsRUFBRWtRLEVBQVNsUyxJQUM1RVAsT0FBTzRRLGVBQWU2QixFQUFTbFMsRUFBSyxDQUFFNlIsWUFBWSxFQUFNakwsSUFBSzg0QyxFQUFXMS9DLElBRTFFLEVDTkRxL0MsRUFBb0JyOUMsRUFBSSxDQUFDb1AsRUFBS29ZLElBQVUvcEIsT0FBT1EsVUFBVUMsZUFBZUMsS0FBS2lSLEVBQUtvWSxHQ0NsRjYxQixFQUFvQmg5QyxFQUFLNlAsSUFDSCxvQkFBWC9QLFFBQTBCQSxPQUFPdzlDLGFBQzFDbGdELE9BQU80USxlQUFlNkIsRUFBUy9QLE9BQU93OUMsWUFBYSxDQUFFaDlDLE1BQU8sV0FFN0RsRCxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUFFdlAsT0FBTyxHQUFPLEVDRjlELElBQUlpOUMsRUFBc0JQLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlT3V0c2lkZUNsaWNrL3VzZU91dHNpZGVDbGljay5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VQcm9taXNlL3VzZVByb21pc2UuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvc3dyL19pbnRlcm5hbC9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9zd3IvY29yZS9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVNXUkhvb2tzQ29uZmlnL3VzZVNXUkhvb2tzQ29uZmlnLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlVG9nZ2xlL3VzZVRvZ2dsZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9jbGFzc2NhdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLm1vZHVsZS5jc3M/ZmYxYiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/NDMyOCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzP2MwYjYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9DaGVja2JveC5tb2R1bGUuY3NzP2ZmMmYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5tb2R1bGUuY3NzPzg3MTkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC5tb2R1bGUuY3NzP2ZjZTIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzP2E4YWUiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyLm1vZHVsZS5jc3M/OTI5ZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXJDb250ZW50L0RyYXdlckNvbnRlbnQubW9kdWxlLmNzcz9iYTBjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckZvb3Rlci9EcmF3ZXJGb290ZXIubW9kdWxlLmNzcz9iYmUwIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckhlYWRlci9EcmF3ZXJIZWFkZXIubW9kdWxlLmNzcz9hZGI2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/N2EwZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQubW9kdWxlLmNzcz9kNTU3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3M/MDk5ZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzFjYWMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL0ljb25CdXR0b24ubW9kdWxlLmNzcz81OTZmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz8yYzQ0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSW1hZ2UvSW1hZ2UubW9kdWxlLmNzcz9mMTBlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwubW9kdWxlLmNzcz80NjlmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcubW9kdWxlLmNzcz8zY2Q0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/ZGZmYSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS5tb2R1bGUuY3NzPzE5MGEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIubW9kdWxlLmNzcz9jZDM0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS5tb2R1bGUuY3NzP2FhY2UiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS5tb2R1bGUuY3NzP2I1ZGIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Nb2RhbC9Nb2RhbC5tb2R1bGUuY3NzPzhhODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLm1vZHVsZS5jc3M/NjViZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS5tb2R1bGUuY3NzPzM3MTciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvR3JvdXBPcHRpb24vR3JvdXBPcHRpb24ubW9kdWxlLmNzcz80ZGI0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbi9PcHRpb24ubW9kdWxlLmNzcz9iNjc0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbkxpc3QvT3B0aW9uTGlzdC5tb2R1bGUuY3NzPzQ5YWMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VhcmNoL1NlYXJjaC5tb2R1bGUuY3NzP2VkNDMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0Lm1vZHVsZS5jc3M/MWU3OSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9TZWxlY3Rvci5tb2R1bGUuY3NzPzlhYmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZS5tb2R1bGUuY3NzPzkzYTkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlci5tb2R1bGUuY3NzPzcwZGYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlckNlbGwubW9kdWxlLmNzcz8xZDBjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3cubW9kdWxlLmNzcz9iOTU1Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3dDZWxsLm1vZHVsZS5jc3M/ZGE1YSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9UYWcubW9kdWxlLmNzcz84ZjM2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnc0lucHV0L1RhZ3NJbnB1dC5tb2R1bGUuY3NzPzhmZDEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/M2YxZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Lm1vZHVsZS5jc3M/NTg4NiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLm1vZHVsZS5jc3M/ZWM4NiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1Rvb2x0aXAvVG9vbHRpcC5tb2R1bGUuY3NzPzA2YWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9WaWRlby9WaWRlby5tb2R1bGUuY3NzP2VkYTciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQvZGlzdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQvZGlzdC9zcmMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvaG90a2V5cy1qcy9kaXN0L2hvdGtleXMuZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdGtleXMtaG9vay9kaXN0L3JlYWN0LWhvdGtleXMtaG9vay5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL3JlbW92ZUNsYXNzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL3JlZmxvdy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL0NTU1RyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL2FkZENsYXNzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9oYXNDbGFzcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1JlcGxhY2VUcmFuc2l0aW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1N3aXRjaFRyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93LWluZmluaXRlLWxvYWRlci9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9kaXN0L21lbW9pemUtb25lLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvc2Nyb2xscGFyZW50L3Njcm9sbHBhcmVudC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0NvbnRleHQudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXJDb250ZW50L0RyYXdlckNvbnRlbnQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckNvbnRlbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyRm9vdGVyL0RyYXdlckZvb3Rlci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyRm9vdGVyL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckhlYWRlci9EcmF3ZXJIZWFkZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckhlYWRlci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0NsaWNrYWJsZS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9Ecm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JbWFnZS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUl0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01vZGFsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9Hcm91cE9wdGlvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvR3JvdXBPcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uL09wdGlvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbkxpc3QvT3B0aW9uTGlzdC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWFyY2gvU2VhcmNoLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWFyY2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3RDb250ZXh0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9TZWxlY3Rvci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0b3IvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlckNlbGwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3cudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3dDZWxsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnL1RhZy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWdzSW5wdXQvVGFnc0lucHV0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3RDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL1Rvb2x0aXAudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9vbHRpcC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbnN0YW50cy9UYWJsZS50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvdHlwZXMvdGFibGUudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvYmFja3NwYWNlLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jYXJldC1kb3duLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jYXJldC11cC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY2xvc2Uuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2Nyb3NzZWQuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL3NlYXJjaC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvc2VsZWN0LWNhcmV0LWRvd24uc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvbWQ1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL25hdGl2ZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9uaWwuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcGFyc2UuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcmVnZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcm5nLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3NoYTEuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YxLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzNS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92NC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92NS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92YWxpZGF0ZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92ZXJzaW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LWRvbVwiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59IiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbnZhciBvcHRpb25zID0ge1xuICAgIGNhcHR1cmU6IHRydWUsXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT3V0c2lkZUNsaWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVJlZigpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBoYW5kbGVDbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCFyZWYuY3VycmVudCB8fCByZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgIH0sIFtjYWxsYmFja10pO1xuICAgIHJldHVybiByZWY7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VPdXRzaWRlQ2xpY2suanMubWFwIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yLCBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVByb21pc2UoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoe1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICB9KSwgMiksIHJlc3VsdCA9IF9hWzBdLCBzZXRSZXN1bHQgPSBfYVsxXTtcbiAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgaWYgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB1bm1vdW50ZWRcbiAgICAvLyB3aGlsZSB0aGUgcHJvbWlzZSB3YXMgc3RpbGwgcGVuZGluZyB0byBhdm9pZCBzZXR0aW5nIHN0YXRlXG4gICAgLy8gb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cbiAgICB2YXIgaGFzVW5tb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaGFzVW5tb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocHJvbWlzZSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSwgZXJyb3JfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDNdKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb21pc2VdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH0sIFtoYXNVbm1vdW50ZWRdKTtcbiAgICByZXR1cm4gW3Jlc3VsdCwgZGlzcGF0Y2hdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVJlZiwgY3JlYXRlRWxlbWVudCwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuXG4vLyBHbG9iYWwgc3RhdGUgdXNlZCB0byBkZWR1cGxpY2F0ZSByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzXG5jb25zdCBTV1JHbG9iYWxTdGF0ZSA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IEVNUFRZX0NBQ0hFID0ge307XG5jb25zdCBJTklUSUFMX0NBQ0hFID0ge307XG5jb25zdCBub29wID0gKCk9Pnt9O1xuLy8gVXNpbmcgbm9vcCgpIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgYXMgdW5kZWZpbmVkIGNhbiBiZSByZXBsYWNlZFxuLy8gYnkgc29tZXRoaW5nIGVsc2UuIFByZXR0aWVyIGlnbm9yZSBhbmQgZXh0cmEgcGFyZW50aGVzZXMgYXJlIG5lY2Vzc2FyeSBoZXJlXG4vLyB0byBlbnN1cmUgdGhhdCB0c2MgZG9lc24ndCByZW1vdmUgdGhlIF9fTk9JTkxJTkVfXyBjb21tZW50LlxuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBVTkRFRklORUQgPSAvKiNfX05PSU5MSU5FX18qLyBub29wKCk7XG5jb25zdCBPQkpFQ1QgPSBPYmplY3Q7XG5jb25zdCBpc1VuZGVmaW5lZCA9ICh2KT0+diA9PT0gVU5ERUZJTkVEO1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2KT0+dHlwZW9mIHYgPT0gJ2Z1bmN0aW9uJztcbmNvbnN0IG1lcmdlT2JqZWN0cyA9IChhLCBiKT0+KHtcbiAgICAgICAgLi4uYSxcbiAgICAgICAgLi4uYlxuICAgIH0pO1xuY29uc3QgU1RSX1VOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuLy8gTk9URTogVXNlIHRoZSBmdW5jdGlvbiB0byBndWFyYW50ZWUgaXQncyByZS1ldmFsdWF0ZWQgYmV0d2VlbiBqc2RvbSBhbmQgbm9kZSBydW50aW1lIGZvciB0ZXN0cy5cbmNvbnN0IGlzV2luZG93RGVmaW5lZCA9IHR5cGVvZiB3aW5kb3cgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGlzRG9jdW1lbnREZWZpbmVkID0gdHlwZW9mIGRvY3VtZW50ICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoKT0+aXNXaW5kb3dEZWZpbmVkICYmIHR5cGVvZiB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBjcmVhdGVDYWNoZUhlbHBlciA9IChjYWNoZSwga2V5KT0+e1xuICAgIGNvbnN0IHN0YXRlID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICByZXR1cm4gW1xuICAgICAgICAvLyBHZXR0ZXJcbiAgICAgICAgKCk9PmNhY2hlLmdldChrZXkpIHx8IEVNUFRZX0NBQ0hFLFxuICAgICAgICAvLyBTZXR0ZXJcbiAgICAgICAgKGluZm8pPT57XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgLy8gQmVmb3JlIHdyaXRpbmcgdG8gdGhlIHN0b3JlLCB3ZSBrZWVwIHRoZSB2YWx1ZSBpbiB0aGUgaW5pdGlhbCBjYWNoZVxuICAgICAgICAgICAgICAgIC8vIGlmIGl0J3Mgbm90IHRoZXJlIHlldC5cbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gSU5JVElBTF9DQUNIRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgSU5JVElBTF9DQUNIRVtrZXldID0gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RhdGVbNV0oa2V5LCBtZXJnZU9iamVjdHMocHJldiwgaW5mbyksIHByZXYgfHwgRU1QVFlfQ0FDSEUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBTdWJzY3JpYmVyXG4gICAgICAgIHN0YXRlWzZdLFxuICAgICAgICAvLyBHZXQgc2VydmVyIGNhY2hlIHNuYXBzaG90XG4gICAgICAgICgpPT57XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgd2FzIHVwZGF0ZWQgb24gdGhlIGNsaWVudCwgd2UgcmV0dXJuIHRoZSBzdG9yZWQgaW5pdGlhbCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIElOSVRJQUxfQ0FDSEUpIHJldHVybiBJTklUSUFMX0NBQ0hFW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGRvbmUgYW55IGNsaWVudC1zaWRlIHVwZGF0ZXMsIHdlIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZS5cbiAgICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KSB8fCBFTVBUWV9DQUNIRTtcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vLyB1c2UgV2Vha01hcCB0byBzdG9yZSB0aGUgb2JqZWN0LT5rZXkgbWFwcGluZ1xuLy8gc28gdGhlIG9iamVjdHMgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuLy8gV2Vha01hcCB1c2VzIGEgaGFzaHRhYmxlIHVuZGVyIHRoZSBob29kLCBzbyB0aGUgbG9va3VwXG4vLyBjb21wbGV4aXR5IGlzIGFsbW9zdCBPKDEpLlxuY29uc3QgdGFibGUgPSBuZXcgV2Vha01hcCgpO1xuLy8gY291bnRlciBvZiB0aGUga2V5XG5sZXQgY291bnRlciA9IDA7XG4vLyBBIHN0YWJsZSBoYXNoIGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHM6XG4vLyAtIEZhc3QgYW5kIGVuc3VyZXMgdW5pcXVlIGhhc2ggcHJvcGVydGllc1xuLy8gLSBIYW5kbGVzIHVuc2VyaWFsaXphYmxlIHZhbHVlc1xuLy8gLSBIYW5kbGVzIG9iamVjdCBrZXkgb3JkZXJpbmdcbi8vIC0gR2VuZXJhdGVzIHNob3J0IHJlc3VsdHNcbi8vXG4vLyBUaGlzIGlzIG5vdCBhIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCB0aGUgcmVzdWx0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlXG4vLyBwYXJzYWJsZS5cbmNvbnN0IHN0YWJsZUhhc2ggPSAoYXJnKT0+e1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgYXJnO1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gYXJnICYmIGFyZy5jb25zdHJ1Y3RvcjtcbiAgICBjb25zdCBpc0RhdGUgPSBjb25zdHJ1Y3RvciA9PSBEYXRlO1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGluZGV4O1xuICAgIGlmIChPQkpFQ1QoYXJnKSA9PT0gYXJnICYmICFpc0RhdGUgJiYgY29uc3RydWN0b3IgIT0gUmVnRXhwKSB7XG4gICAgICAgIC8vIE9iamVjdC9mdW5jdGlvbiwgbm90IG51bGwvZGF0ZS9yZWdleHAuIFVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBpZCBmaXJzdC5cbiAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGhhc2hlZCwgZGlyZWN0bHkgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICAgIHJlc3VsdCA9IHRhYmxlLmdldChhcmcpO1xuICAgICAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAvLyBTdG9yZSB0aGUgaGFzaCBmaXJzdCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGlvbiBiZWZvcmUgZW50ZXJpbmcgdGhlXG4gICAgICAgIC8vIHJlY3Vyc2l2ZSBgc3RhYmxlSGFzaGAgY2FsbHMuXG4gICAgICAgIC8vIEZvciBvdGhlciBvYmplY3RzIGxpa2Ugc2V0IGFuZCBtYXAsIHdlIHVzZSB0aGlzIGlkIGRpcmVjdGx5IGFzIHRoZSBoYXNoLlxuICAgICAgICByZXN1bHQgPSArK2NvdW50ZXIgKyAnfic7XG4gICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBBcnJheSkge1xuICAgICAgICAgICAgLy8gQXJyYXkuXG4gICAgICAgICAgICByZXN1bHQgPSAnQCc7XG4gICAgICAgICAgICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IGFyZy5sZW5ndGg7IGluZGV4Kyspe1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gT0JKRUNUKSB7XG4gICAgICAgICAgICAvLyBPYmplY3QsIHNvcnQga2V5cy5cbiAgICAgICAgICAgIHJlc3VsdCA9ICcjJztcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPQkpFQ1Qua2V5cyhhcmcpLnNvcnQoKTtcbiAgICAgICAgICAgIHdoaWxlKCFpc1VuZGVmaW5lZChpbmRleCA9IGtleXMucG9wKCkpKXtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ1tpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbmRleCArICc6JyArIHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGlzRGF0ZSA/IGFyZy50b0pTT04oKSA6IHR5cGUgPT0gJ3N5bWJvbCcgPyBhcmcudG9TdHJpbmcoKSA6IHR5cGUgPT0gJ3N0cmluZycgPyBKU09OLnN0cmluZ2lmeShhcmcpIDogJycgKyBhcmc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIER1ZSB0byB0aGUgYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY3ODA3NSxcbiAqIGl0J3Mgbm90IHJlbGlhYmxlIHRvIGRldGVjdCBpZiB0aGUgYnJvd3NlciBpcyBjdXJyZW50bHkgb25saW5lIG9yIG9mZmxpbmVcbiAqIGJhc2VkIG9uIGBuYXZpZ2F0b3Iub25MaW5lYC5cbiAqIEFzIGEgd29ya2Fyb3VuZCwgd2UgYWx3YXlzIGFzc3VtZSBpdCdzIG9ubGluZSBvbiB0aGUgZmlyc3QgbG9hZCwgYW5kIGNoYW5nZVxuICogdGhlIHN0YXR1cyB1cG9uIGBvbmxpbmVgIG9yIGBvZmZsaW5lYCBldmVudHMuXG4gKi8gbGV0IG9ubGluZSA9IHRydWU7XG5jb25zdCBpc09ubGluZSA9ICgpPT5vbmxpbmU7XG4vLyBGb3Igbm9kZSBhbmQgUmVhY3QgTmF0aXZlLCBgYWRkL3JlbW92ZUV2ZW50TGlzdGVuZXJgIGRvZXNuJ3QgZXhpc3Qgb24gd2luZG93LlxuY29uc3QgW29uV2luZG93RXZlbnQsIG9mZldpbmRvd0V2ZW50XSA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA/IFtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdyksXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpXG5dIDogW1xuICAgIG5vb3AsXG4gICAgbm9vcFxuXTtcbmNvbnN0IGlzVmlzaWJsZSA9ICgpPT57XG4gICAgY29uc3QgdmlzaWJpbGl0eVN0YXRlID0gaXNEb2N1bWVudERlZmluZWQgJiYgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZCh2aXNpYmlsaXR5U3RhdGUpIHx8IHZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbic7XG59O1xuY29uc3QgaW5pdEZvY3VzID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIGZvY3VzIHJldmFsaWRhdGVcbiAgICBpZiAoaXNEb2N1bWVudERlZmluZWQpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgb25XaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGlmIChpc0RvY3VtZW50RGVmaW5lZCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBvZmZXaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgfTtcbn07XG5jb25zdCBpbml0UmVjb25uZWN0ID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIHJldmFsaWRhdGUgb24gcmVjb25uZWN0ZWRcbiAgICBjb25zdCBvbk9ubGluZSA9ICgpPT57XG4gICAgICAgIG9ubGluZSA9IHRydWU7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICAvLyBub3RoaW5nIHRvIHJldmFsaWRhdGUsIGp1c3QgdXBkYXRlIHRoZSBzdGF0dXNcbiAgICBjb25zdCBvbk9mZmxpbmUgPSAoKT0+e1xuICAgICAgICBvbmxpbmUgPSBmYWxzZTtcbiAgICB9O1xuICAgIG9uV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICBvbldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIH07XG59O1xuY29uc3QgcHJlc2V0ID0ge1xuICAgIGlzT25saW5lLFxuICAgIGlzVmlzaWJsZVxufTtcbmNvbnN0IGRlZmF1bHRDb25maWdPcHRpb25zID0ge1xuICAgIGluaXRGb2N1cyxcbiAgICBpbml0UmVjb25uZWN0XG59O1xuXG5jb25zdCBJU19SRUFDVF9MRUdBQ1kgPSAhUmVhY3QudXNlSWQ7XG5jb25zdCBJU19TRVJWRVIgPSAhaXNXaW5kb3dEZWZpbmVkIHx8ICdEZW5vJyBpbiB3aW5kb3c7XG4vLyBQb2x5ZmlsbCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbmNvbnN0IHJBRiA9IChmKT0+aGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgPyB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddKGYpIDogc2V0VGltZW91dChmLCAxKTtcbi8vIFJlYWN0IGN1cnJlbnRseSB0aHJvd3MgYSB3YXJuaW5nIHdoZW4gdXNpbmcgdXNlTGF5b3V0RWZmZWN0IG9uIHRoZSBzZXJ2ZXIuXG4vLyBUbyBnZXQgYXJvdW5kIGl0LCB3ZSBjYW4gY29uZGl0aW9uYWxseSB1c2VFZmZlY3Qgb24gdGhlIHNlcnZlciAobm8tb3ApIGFuZFxuLy8gdXNlTGF5b3V0RWZmZWN0IGluIHRoZSBicm93c2VyLlxuY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IElTX1NFUlZFUiA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdDtcbi8vIFRoaXMgYXNzaWdubWVudCBpcyB0byBleHRlbmQgdGhlIE5hdmlnYXRvciB0eXBlIHRvIHVzZSBlZmZlY3RpdmVUeXBlLlxuY29uc3QgbmF2aWdhdG9yQ29ubmVjdGlvbiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5jb25uZWN0aW9uO1xuLy8gQWRqdXN0IHRoZSBjb25maWcgYmFzZWQgb24gc2xvdyBjb25uZWN0aW9uIHN0YXR1cyAoPD0gNzBLYnBzKS5cbmNvbnN0IHNsb3dDb25uZWN0aW9uID0gIUlTX1NFUlZFUiAmJiBuYXZpZ2F0b3JDb25uZWN0aW9uICYmIChbXG4gICAgJ3Nsb3ctMmcnLFxuICAgICcyZydcbl0uaW5jbHVkZXMobmF2aWdhdG9yQ29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlKSB8fCBuYXZpZ2F0b3JDb25uZWN0aW9uLnNhdmVEYXRhKTtcblxuY29uc3Qgc2VyaWFsaXplID0gKGtleSk9PntcbiAgICBpZiAoaXNGdW5jdGlvbihrZXkpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMgbm90IHJlYWR5XG4gICAgICAgICAgICBrZXkgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBVc2UgdGhlIG9yaWdpbmFsIGtleSBhcyB0aGUgYXJndW1lbnQgb2YgZmV0Y2hlci4gVGhpcyBjYW4gYmUgYSBzdHJpbmcgb3IgYW5cbiAgICAvLyBhcnJheSBvZiB2YWx1ZXMuXG4gICAgY29uc3QgYXJncyA9IGtleTtcbiAgICAvLyBJZiBrZXkgaXMgbm90IGZhbHN5LCBvciBub3QgYW4gZW1wdHkgYXJyYXksIGhhc2ggaXQuXG4gICAga2V5ID0gdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/IGtleSA6IChBcnJheS5pc0FycmF5KGtleSkgPyBrZXkubGVuZ3RoIDoga2V5KSA/IHN0YWJsZUhhc2goa2V5KSA6ICcnO1xuICAgIHJldHVybiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgYXJnc1xuICAgIF07XG59O1xuXG4vLyBHbG9iYWwgdGltZXN0YW1wLlxubGV0IF9fdGltZXN0YW1wID0gMDtcbmNvbnN0IGdldFRpbWVzdGFtcCA9ICgpPT4rK19fdGltZXN0YW1wO1xuXG5jb25zdCBGT0NVU19FVkVOVCA9IDA7XG5jb25zdCBSRUNPTk5FQ1RfRVZFTlQgPSAxO1xuY29uc3QgTVVUQVRFX0VWRU5UID0gMjtcbmNvbnN0IEVSUk9SX1JFVkFMSURBVEVfRVZFTlQgPSAzO1xuXG52YXIgY29uc3RhbnRzID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIEZPQ1VTX0VWRU5UOiBGT0NVU19FVkVOVCxcbiAgUkVDT05ORUNUX0VWRU5UOiBSRUNPTk5FQ1RfRVZFTlQsXG4gIE1VVEFURV9FVkVOVDogTVVUQVRFX0VWRU5ULFxuICBFUlJPUl9SRVZBTElEQVRFX0VWRU5UOiBFUlJPUl9SRVZBTElEQVRFX0VWRU5UXG59O1xuXG5hc3luYyBmdW5jdGlvbiBpbnRlcm5hbE11dGF0ZSguLi5hcmdzKSB7XG4gICAgY29uc3QgW2NhY2hlLCBfa2V5LCBfZGF0YSwgX29wdHNdID0gYXJncztcbiAgICAvLyBXaGVuIHBhc3NpbmcgYXMgYSBib29sZWFuLCBpdCdzIGV4cGxpY2l0bHkgdXNlZCB0byBkaXNhYmxlL2VuYWJsZVxuICAgIC8vIHJldmFsaWRhdGlvbi5cbiAgICBjb25zdCBvcHRpb25zID0gbWVyZ2VPYmplY3RzKHtcbiAgICAgICAgcG9wdWxhdGVDYWNoZTogdHJ1ZSxcbiAgICAgICAgdGhyb3dPbkVycm9yOiB0cnVlXG4gICAgfSwgdHlwZW9mIF9vcHRzID09PSAnYm9vbGVhbicgPyB7XG4gICAgICAgIHJldmFsaWRhdGU6IF9vcHRzXG4gICAgfSA6IF9vcHRzIHx8IHt9KTtcbiAgICBsZXQgcG9wdWxhdGVDYWNoZSA9IG9wdGlvbnMucG9wdWxhdGVDYWNoZTtcbiAgICBjb25zdCByb2xsYmFja09uRXJyb3JPcHRpb24gPSBvcHRpb25zLnJvbGxiYWNrT25FcnJvcjtcbiAgICBsZXQgb3B0aW1pc3RpY0RhdGEgPSBvcHRpb25zLm9wdGltaXN0aWNEYXRhO1xuICAgIGNvbnN0IHJldmFsaWRhdGUgPSBvcHRpb25zLnJldmFsaWRhdGUgIT09IGZhbHNlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvciA9IChlcnJvcik9PntcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByb2xsYmFja09uRXJyb3JPcHRpb24gPT09ICdmdW5jdGlvbicgPyByb2xsYmFja09uRXJyb3JPcHRpb24oZXJyb3IpIDogcm9sbGJhY2tPbkVycm9yT3B0aW9uICE9PSBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHRocm93T25FcnJvciA9IG9wdGlvbnMudGhyb3dPbkVycm9yO1xuICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBrZXkgZmlsdGVyLCByZXR1cm4gdGhlIG11dGF0aW9uIHJlc3VsdHMgZm9yIGFsbFxuICAgIC8vIGZpbHRlcmVkIGtleXMuXG4gICAgaWYgKGlzRnVuY3Rpb24oX2tleSkpIHtcbiAgICAgICAgY29uc3Qga2V5RmlsdGVyID0gX2tleTtcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleXMgPSBbXTtcbiAgICAgICAgY29uc3QgaXQgPSBjYWNoZS5rZXlzKCk7XG4gICAgICAgIGZvcihsZXQga2V5SXQgPSBpdC5uZXh0KCk7ICFrZXlJdC5kb25lOyBrZXlJdCA9IGl0Lm5leHQoKSl7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlJdC52YWx1ZTtcbiAgICAgICAgICAgIGlmICgvLyBTa2lwIHRoZSBzcGVjaWFsIHVzZVNXUkluZmluaXRlIGFuZCB1c2VTV1JTdWJzY3JpcHRpb24ga2V5cy5cbiAgICAgICAgICAgICEvXlxcJChpbmZ8c3ViKVxcJC8udGVzdChrZXkpICYmIGtleUZpbHRlcihjYWNoZS5nZXQoa2V5KS5faykpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG1hdGNoZWRLZXlzLm1hcChtdXRhdGVCeUtleSkpO1xuICAgIH1cbiAgICByZXR1cm4gbXV0YXRlQnlLZXkoX2tleSk7XG4gICAgYXN5bmMgZnVuY3Rpb24gbXV0YXRlQnlLZXkoX2spIHtcbiAgICAgICAgLy8gU2VyaWFsaXplIGtleVxuICAgICAgICBjb25zdCBba2V5XSA9IHNlcmlhbGl6ZShfayk7XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IFtnZXQsIHNldF0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICAgICAgY29uc3QgW0VWRU5UX1JFVkFMSURBVE9SUywgTVVUQVRJT04sIEZFVENIXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgIGNvbnN0IHJldmFsaWRhdG9ycyA9IEVWRU5UX1JFVkFMSURBVE9SU1trZXldO1xuICAgICAgICBjb25zdCBzdGFydFJldmFsaWRhdGUgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKHJldmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBrZXkgYnkgZGVsZXRpbmcgdGhlIGNvbmN1cnJlbnQgcmVxdWVzdCBtYXJrZXJzIHNvIG5ld1xuICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RzIHdpbGwgbm90IGJlIGRlZHVwZWQuXG4gICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdG9yc1swXShNVVRBVEVfRVZFTlQpLnRoZW4oKCk9PmdldCgpLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZXQoKS5kYXRhO1xuICAgICAgICB9O1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBuZXcgZGF0YSBwcm92aWRlZCwgcmV2YWxpZGF0ZSB0aGUga2V5IHdpdGggY3VycmVudCBzdGF0ZS5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBhbmQgYnJvYWRjYXN0IHN0YXRlLlxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0UmV2YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRhID0gX2RhdGE7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgLy8gVXBkYXRlIGdsb2JhbCB0aW1lc3RhbXBzLlxuICAgICAgICBjb25zdCBiZWZvcmVNdXRhdGlvblRzID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIE1VVEFUSU9OW2tleV0gPSBbXG4gICAgICAgICAgICBiZWZvcmVNdXRhdGlvblRzLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBoYXNPcHRpbWlzdGljRGF0YSA9ICFpc1VuZGVmaW5lZChvcHRpbWlzdGljRGF0YSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0KCk7XG4gICAgICAgIC8vIGBkaXNwbGF5ZWREYXRhYCBpcyB0aGUgY3VycmVudCB2YWx1ZSBvbiBzY3JlZW4uIEl0IGNvdWxkIGJlIHRoZSBvcHRpbWlzdGljIHZhbHVlXG4gICAgICAgIC8vIHRoYXQgaXMgZ29pbmcgdG8gYmUgb3ZlcnJpZGRlbiBieSBhIGBjb21taXR0ZWREYXRhYCwgb3IgZ2V0IHJldmVydGVkIGJhY2suXG4gICAgICAgIC8vIGBjb21taXR0ZWREYXRhYCBpcyB0aGUgdmFsaWRhdGVkIHZhbHVlIHRoYXQgY29tZXMgZnJvbSBhIGZldGNoIG9yIG11dGF0aW9uLlxuICAgICAgICBjb25zdCBkaXNwbGF5ZWREYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGEgPSBzdGF0ZS5fYztcbiAgICAgICAgY29uc3QgY29tbWl0dGVkRGF0YSA9IGlzVW5kZWZpbmVkKGN1cnJlbnREYXRhKSA/IGRpc3BsYXllZERhdGEgOiBjdXJyZW50RGF0YTtcbiAgICAgICAgLy8gRG8gb3B0aW1pc3RpYyBkYXRhIHVwZGF0ZS5cbiAgICAgICAgaWYgKGhhc09wdGltaXN0aWNEYXRhKSB7XG4gICAgICAgICAgICBvcHRpbWlzdGljRGF0YSA9IGlzRnVuY3Rpb24ob3B0aW1pc3RpY0RhdGEpID8gb3B0aW1pc3RpY0RhdGEoY29tbWl0dGVkRGF0YSkgOiBvcHRpbWlzdGljRGF0YTtcbiAgICAgICAgICAgIC8vIFdoZW4gd2Ugc2V0IG9wdGltaXN0aWMgZGF0YSwgYmFja3VwIHRoZSBjdXJyZW50IGNvbW1pdHRlZERhdGEgZGF0YSBpbiBgX2NgLlxuICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiBvcHRpbWlzdGljRGF0YSxcbiAgICAgICAgICAgICAgICBfYzogY29tbWl0dGVkRGF0YVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICAgIC8vIGBkYXRhYCBpcyBhIGZ1bmN0aW9uLCBjYWxsIGl0IHBhc3NpbmcgY3VycmVudCBjYWNoZSB2YWx1ZS5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEoY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCB0aHJvd3MgYW4gZXJyb3Igc3luY2hyb25vdXNseSwgd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYGRhdGFgIGlzIGEgcHJvbWlzZS90aGVuYWJsZSwgcmVzb2x2ZSB0aGUgZmluYWwgZGF0YSBmaXJzdC5cbiAgICAgICAgaWYgKGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhLnRoZW4pKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG11dGF0aW9uIGlzIGFzeW5jLCB3ZSBuZWVkIHRvIGNoZWNrIHRpbWVzdGFtcHMgdG9cbiAgICAgICAgICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9ucy5cbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBkYXRhLmNhdGNoKChlcnIpPT57XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIG90aGVyIG11dGF0aW9ucyBoYXZlIG9jY3VycmVkIHNpbmNlIHdlJ3ZlIHN0YXJ0ZWQgdGhpcyBtdXRhdGlvbi5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByYWNlIHdlIGRvbid0IHVwZGF0ZSBjYWNoZSBvciBicm9hZGNhc3QgdGhlIGNoYW5nZSxcbiAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgaWYgKGJlZm9yZU11dGF0aW9uVHMgIT09IE1VVEFUSU9OW2tleV1bMF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBoYXNPcHRpbWlzdGljRGF0YSAmJiByb2xsYmFja09uRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgLy8gUm9sbGJhY2suIEFsd2F5cyBwb3B1bGF0ZSB0aGUgY2FjaGUgaW4gdGhpcyBjYXNlIGJ1dCB3aXRob3V0XG4gICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtaW5nIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgIHBvcHVsYXRlQ2FjaGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBjb21taXR0ZWREYXRhO1xuICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgdG8gYmUgdGhlIGxhdGVzdCBjb21taXR0ZWQgZGF0YSwgYW5kIGNsZWFyIHRoZSBgX2NgIHZhbHVlLlxuICAgICAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB3ZSBzaG91bGQgd3JpdGUgYmFjayB0aGUgY2FjaGUgYWZ0ZXIgcmVxdWVzdC5cbiAgICAgICAgaWYgKHBvcHVsYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHJlc3VsdCBpbnRvIGRhdGEuXG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocG9wdWxhdGVDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBvcHVsYXRlQ2FjaGUoZGF0YSwgY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIGNhY2hlZCBkYXRhIGlmIHRoZXJlJ3Mgbm8gZXJyb3IuIERhdGEgY2FuIGJlIGB1bmRlZmluZWRgIGhlcmUuXG4gICAgICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lc3RhbXAgdG8gbWFyayB0aGUgbXV0YXRpb24gaGFzIGVuZGVkLlxuICAgICAgICBNVVRBVElPTltrZXldWzFdID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBTV1IgSG9va3MnIGludGVybmFsIHN0YXRlczpcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3RhcnRSZXZhbGlkYXRlKCk7XG4gICAgICAgIC8vIFRoZSBtdXRhdGlvbiBhbmQgcmV2YWxpZGF0aW9uIGFyZSBlbmRlZCwgd2UgY2FuIGNsZWFyIGl0IHNpbmNlIHRoZSBkYXRhIGlzXG4gICAgICAgIC8vIG5vdCBhbiBvcHRpbWlzdGljIHZhbHVlIGFueW1vcmUuXG4gICAgICAgIHNldCh7XG4gICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUaHJvdyBlcnJvciBvciByZXR1cm4gZGF0YVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aHJvd09uRXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3B1bGF0ZUNhY2hlID8gcmVzIDogZGF0YTtcbiAgICB9XG59XG5cbmNvbnN0IHJldmFsaWRhdGVBbGxLZXlzID0gKHJldmFsaWRhdG9ycywgdHlwZSk9PntcbiAgICBmb3IoY29uc3Qga2V5IGluIHJldmFsaWRhdG9ycyl7XG4gICAgICAgIGlmIChyZXZhbGlkYXRvcnNba2V5XVswXSkgcmV2YWxpZGF0b3JzW2tleV1bMF0odHlwZSk7XG4gICAgfVxufTtcbmNvbnN0IGluaXRDYWNoZSA9IChwcm92aWRlciwgb3B0aW9ucyk9PntcbiAgICAvLyBUaGUgZ2xvYmFsIHN0YXRlIGZvciBhIHNwZWNpZmljIHByb3ZpZGVyIHdpbGwgYmUgdXNlZCB0byBkZWR1cGxpY2F0ZVxuICAgIC8vIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnMuIEFzIHdlbGwgYXMgYSBtdXRhdGUgZnVuY3Rpb24gdGhhdCBpcyBib3VuZCB0b1xuICAgIC8vIHRoZSBjYWNoZS5cbiAgICAvLyBUaGUgcHJvdmlkZXIncyBnbG9iYWwgc3RhdGUgbWlnaHQgYmUgYWxyZWFkeSBpbml0aWFsaXplZC4gTGV0J3MgdHJ5IHRvIGdldCB0aGVcbiAgICAvLyBnbG9iYWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm92aWRlciBmaXJzdC5cbiAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZ2xvYmFsIHN0YXRlIGJvdW5kIHRvIHRoZSBwcm92aWRlciwgY3JlYXRlIGEgbmV3IG9uZSB3aXRoIHRoZVxuICAgICAgICAvLyBuZXcgbXV0YXRlIGZ1bmN0aW9uLlxuICAgICAgICBjb25zdCBFVkVOVF9SRVZBTElEQVRPUlMgPSB7fTtcbiAgICAgICAgY29uc3QgbXV0YXRlID0gaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIHByb3ZpZGVyKTtcbiAgICAgICAgbGV0IHVubW91bnQgPSBub29wO1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0ge307XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZSA9IChrZXksIGNhbGxiYWNrKT0+e1xuICAgICAgICAgICAgY29uc3Qgc3VicyA9IHN1YnNjcmlwdGlvbnNba2V5XSB8fCBbXTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnNba2V5XSA9IHN1YnM7XG4gICAgICAgICAgICBzdWJzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgcmV0dXJuICgpPT5zdWJzLnNwbGljZShzdWJzLmluZGV4T2YoY2FsbGJhY2spLCAxKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0dGVyID0gKGtleSwgdmFsdWUsIHByZXYpPT57XG4gICAgICAgICAgICBwcm92aWRlci5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzdWJzID0gc3Vic2NyaXB0aW9uc1trZXldO1xuICAgICAgICAgICAgaWYgKHN1YnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIHN1YnMpe1xuICAgICAgICAgICAgICAgICAgICBmbih2YWx1ZSwgcHJldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbml0UHJvdmlkZXIgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGF0ZSBpZiBpdCdzIG5ldywgb3IgaWYgdGhlIHByb3ZpZGVyIGhhcyBiZWVuIGV4dGVuZGVkLlxuICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLnNldChwcm92aWRlciwgW1xuICAgICAgICAgICAgICAgICAgICBFVkVOVF9SRVZBTElEQVRPUlMsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVyLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlTX1NFUlZFUikge1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGxpc3RlbmluZyB0byB0aGUgbmF0aXZlIGV2ZW50cyBmb3IgYXV0byByZXZhbGlkYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IHB1dCBhIGRlbGF5IChzZXRUaW1lb3V0KSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZVxuICAgICAgICAgICAgICAgICAgICAvLyBmaXJlZCBhZnRlciBpbW1lZGlhdGUgSmF2YVNjcmlwdCBleGVjdXRpb25zLCB3aGljaCBjYW4gYmVcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVhY3QncyBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGF2b2lkcyBzb21lIHVubmVjZXNzYXJ5IHJldmFsaWRhdGlvbnMgc3VjaCBhc1xuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTY4MC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZUZvY3VzID0gb3B0cy5pbml0Rm9jdXMoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgRk9DVVNfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VSZWNvbm5lY3QgPSBvcHRzLmluaXRSZWNvbm5lY3Qoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgUkVDT05ORUNUX0VWRU5UKSkpO1xuICAgICAgICAgICAgICAgICAgICB1bm1vdW50ID0gKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VGb2N1cyAmJiByZWxlYXNlRm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VSZWNvbm5lY3QgJiYgcmVsZWFzZVJlY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB1bi1tb3VudGluZywgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNhY2hlIHByb3ZpZGVyIGZyb20gdGhlIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yYWdlIHRvbyBiZWNhdXNlIGl0J3MgYSBzaWRlLWVmZmVjdC4gT3RoZXJ3aXNlLCB3aGVuIHJlLW1vdW50aW5nIHdlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCByZS1yZWdpc3RlciB0aG9zZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBTV1JHbG9iYWxTdGF0ZS5kZWxldGUocHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaW5pdFByb3ZpZGVyKCk7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvdmlkZXIsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdCBhbmQgc2V0dXAgRE9NIGV2ZW50c1xuICAgICAgICAvLyBsaXN0ZW5lcnMgZm9yIGBmb2N1c2AgYW5kIGByZWNvbm5lY3RgIGFjdGlvbnMuXG4gICAgICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gaW5qZWN0IGFuIGV4dHJhIGxheWVyIG9uIHRvcCBvZiBgcHJvdmlkZXJgIGluIHRoZSBmdXR1cmUsXG4gICAgICAgIC8vIHN1Y2ggYXMga2V5IHNlcmlhbGl6YXRpb24sIGF1dG8gR0MsIGV0Yy5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQncyBqdXN0IGEgYE1hcGAgaW50ZXJmYWNlIHdpdGhvdXQgYW55IG1vZGlmaWNhdGlvbnMuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgIGluaXRQcm92aWRlcixcbiAgICAgICAgICAgIHVubW91bnRcbiAgICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgIFNXUkdsb2JhbFN0YXRlLmdldChwcm92aWRlcilbNF1cbiAgICBdO1xufTtcblxuLy8gZXJyb3IgcmV0cnlcbmNvbnN0IG9uRXJyb3JSZXRyeSA9IChfLCBfXywgY29uZmlnLCByZXZhbGlkYXRlLCBvcHRzKT0+e1xuICAgIGNvbnN0IG1heFJldHJ5Q291bnQgPSBjb25maWcuZXJyb3JSZXRyeUNvdW50O1xuICAgIGNvbnN0IGN1cnJlbnRSZXRyeUNvdW50ID0gb3B0cy5yZXRyeUNvdW50O1xuICAgIC8vIEV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICBjb25zdCB0aW1lb3V0ID0gfn4oKE1hdGgucmFuZG9tKCkgKyAwLjUpICogKDEgPDwgKGN1cnJlbnRSZXRyeUNvdW50IDwgOCA/IGN1cnJlbnRSZXRyeUNvdW50IDogOCkpKSAqIGNvbmZpZy5lcnJvclJldHJ5SW50ZXJ2YWw7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtYXhSZXRyeUNvdW50KSAmJiBjdXJyZW50UmV0cnlDb3VudCA+IG1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJldmFsaWRhdGUsIHRpbWVvdXQsIG9wdHMpO1xufTtcbmNvbnN0IGNvbXBhcmUgPSAoY3VycmVudERhdGEsIG5ld0RhdGEpPT5zdGFibGVIYXNoKGN1cnJlbnREYXRhKSA9PSBzdGFibGVIYXNoKG5ld0RhdGEpO1xuLy8gRGVmYXVsdCBjYWNoZSBwcm92aWRlclxuY29uc3QgW2NhY2hlLCBtdXRhdGVdID0gaW5pdENhY2hlKG5ldyBNYXAoKSk7XG4vLyBEZWZhdWx0IGNvbmZpZ1xuY29uc3QgZGVmYXVsdENvbmZpZyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgLy8gZXZlbnRzXG4gICAgb25Mb2FkaW5nU2xvdzogbm9vcCxcbiAgICBvblN1Y2Nlc3M6IG5vb3AsXG4gICAgb25FcnJvcjogbm9vcCxcbiAgICBvbkVycm9yUmV0cnksXG4gICAgb25EaXNjYXJkZWQ6IG5vb3AsXG4gICAgLy8gc3dpdGNoZXNcbiAgICByZXZhbGlkYXRlT25Gb2N1czogdHJ1ZSxcbiAgICByZXZhbGlkYXRlT25SZWNvbm5lY3Q6IHRydWUsXG4gICAgcmV2YWxpZGF0ZUlmU3RhbGU6IHRydWUsXG4gICAgc2hvdWxkUmV0cnlPbkVycm9yOiB0cnVlLFxuICAgIC8vIHRpbWVvdXRzXG4gICAgZXJyb3JSZXRyeUludGVydmFsOiBzbG93Q29ubmVjdGlvbiA/IDEwMDAwIDogNTAwMCxcbiAgICBmb2N1c1Rocm90dGxlSW50ZXJ2YWw6IDUgKiAxMDAwLFxuICAgIGRlZHVwaW5nSW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgIGxvYWRpbmdUaW1lb3V0OiBzbG93Q29ubmVjdGlvbiA/IDUwMDAgOiAzMDAwLFxuICAgIC8vIHByb3ZpZGVyc1xuICAgIGNvbXBhcmUsXG4gICAgaXNQYXVzZWQ6ICgpPT5mYWxzZSxcbiAgICBjYWNoZSxcbiAgICBtdXRhdGUsXG4gICAgZmFsbGJhY2s6IHt9XG59LCAvLyB1c2Ugd2ViIHByZXNldCBieSBkZWZhdWx0XG5wcmVzZXQpO1xuXG5jb25zdCBtZXJnZUNvbmZpZ3MgPSAoYSwgYik9PntcbiAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGhlcmUuXG4gICAgY29uc3QgdiA9IG1lcmdlT2JqZWN0cyhhLCBiKTtcbiAgICAvLyBJZiB0d28gY29uZmlncyBhcmUgcHJvdmlkZWQsIG1lcmdlIHRoZWlyIGB1c2VgIGFuZCBgZmFsbGJhY2tgIG9wdGlvbnMuXG4gICAgaWYgKGIpIHtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUxICwgZmFsbGJhY2s6IGYxICB9ID0gYTtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUyICwgZmFsbGJhY2s6IGYyICB9ID0gYjtcbiAgICAgICAgaWYgKHUxICYmIHUyKSB7XG4gICAgICAgICAgICB2LnVzZSA9IHUxLmNvbmNhdCh1Mik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYxICYmIGYyKSB7XG4gICAgICAgICAgICB2LmZhbGxiYWNrID0gbWVyZ2VPYmplY3RzKGYxLCBmMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG5jb25zdCBTV1JDb25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5jb25zdCBTV1JDb25maWcgPSAocHJvcHMpPT57XG4gICAgY29uc3QgeyB2YWx1ZSAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBhcmVudENvbmZpZyA9IHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCk7XG4gICAgY29uc3QgaXNGdW5jdGlvbmFsQ29uZmlnID0gaXNGdW5jdGlvbih2YWx1ZSk7XG4gICAgY29uc3QgY29uZmlnID0gdXNlTWVtbygoKT0+aXNGdW5jdGlvbmFsQ29uZmlnID8gdmFsdWUocGFyZW50Q29uZmlnKSA6IHZhbHVlLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICB2YWx1ZVxuICAgIF0pO1xuICAgIC8vIEV4dGVuZCBwYXJlbnQgY29udGV4dCB2YWx1ZXMgYW5kIG1pZGRsZXdhcmUuXG4gICAgY29uc3QgZXh0ZW5kZWRDb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyBjb25maWcgOiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICBjb25maWdcbiAgICBdKTtcbiAgICAvLyBTaG91bGQgbm90IHVzZSB0aGUgaW5oZXJpdGVkIHByb3ZpZGVyLlxuICAgIGNvbnN0IHByb3ZpZGVyID0gY29uZmlnICYmIGNvbmZpZy5wcm92aWRlcjtcbiAgICAvLyBpbml0aWFsaXplIHRoZSBjYWNoZSBvbmx5IG9uIGZpcnN0IGFjY2Vzcy5cbiAgICBjb25zdCBjYWNoZUNvbnRleHRSZWYgPSB1c2VSZWYoVU5ERUZJTkVEKTtcbiAgICBpZiAocHJvdmlkZXIgJiYgIWNhY2hlQ29udGV4dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNhY2hlQ29udGV4dFJlZi5jdXJyZW50ID0gaW5pdENhY2hlKHByb3ZpZGVyKGV4dGVuZGVkQ29uZmlnLmNhY2hlIHx8IGNhY2hlKSwgY29uZmlnKTtcbiAgICB9XG4gICAgY29uc3QgY2FjaGVDb250ZXh0ID0gY2FjaGVDb250ZXh0UmVmLmN1cnJlbnQ7XG4gICAgLy8gT3ZlcnJpZGUgdGhlIGNhY2hlIGlmIGEgbmV3IHByb3ZpZGVyIGlzIGdpdmVuLlxuICAgIGlmIChjYWNoZUNvbnRleHQpIHtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcuY2FjaGUgPSBjYWNoZUNvbnRleHRbMF07XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLm11dGF0ZSA9IGNhY2hlQ29udGV4dFsxXTtcbiAgICB9XG4gICAgLy8gVW5zdWJzY3JpYmUgZXZlbnRzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICAgICAgY2FjaGVDb250ZXh0WzJdICYmIGNhY2hlQ29udGV4dFsyXSgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlQ29udGV4dFszXTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChTV1JDb25maWdDb250ZXh0LlByb3ZpZGVyLCBtZXJnZU9iamVjdHMocHJvcHMsIHtcbiAgICAgICAgdmFsdWU6IGV4dGVuZGVkQ29uZmlnXG4gICAgfSkpO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvclxuY29uc3QgZW5hYmxlRGV2dG9vbHMgPSBpc1dpbmRvd0RlZmluZWQgJiYgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1VTRV9fO1xuY29uc3QgdXNlID0gZW5hYmxlRGV2dG9vbHMgPyB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX18gOiBbXTtcbmNvbnN0IHNldHVwRGV2VG9vbHMgPSAoKT0+e1xuICAgIGlmIChlbmFibGVEZXZ0b29scykge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHdpbmRvdy5fX1NXUl9ERVZUT09MU19SRUFDVF9fID0gUmVhY3Q7XG4gICAgfVxufTtcblxuY29uc3Qgbm9ybWFsaXplID0gKGFyZ3MpPT57XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oYXJnc1sxXSkgPyBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIGFyZ3NbMV0sXG4gICAgICAgIGFyZ3NbMl0gfHwge31cbiAgICBdIDogW1xuICAgICAgICBhcmdzWzBdLFxuICAgICAgICBudWxsLFxuICAgICAgICAoYXJnc1sxXSA9PT0gbnVsbCA/IGFyZ3NbMl0gOiBhcmdzWzFdKSB8fCB7fVxuICAgIF07XG59O1xuXG5jb25zdCB1c2VTV1JDb25maWcgPSAoKT0+e1xuICAgIHJldHVybiBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZywgdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KSk7XG59O1xuXG5jb25zdCBwcmVsb2FkID0gKGtleV8sIGZldGNoZXIpPT57XG4gICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gUHJldmVudCBwcmVsb2FkIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdXNlZC5cbiAgICBpZiAoUFJFTE9BRFtrZXldKSByZXR1cm4gUFJFTE9BRFtrZXldO1xuICAgIGNvbnN0IHJlcSA9IGZldGNoZXIoa2V5Xyk7XG4gICAgUFJFTE9BRFtrZXldID0gcmVxO1xuICAgIHJldHVybiByZXE7XG59O1xuY29uc3QgbWlkZGxld2FyZSA9ICh1c2VTV1JOZXh0KT0+KGtleV8sIGZldGNoZXJfLCBjb25maWcpPT57XG4gICAgICAgIC8vIGZldGNoZXIgbWlnaHQgYmUgYSBzeW5jIGZ1bmN0aW9uLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICAgICAgY29uc3QgZmV0Y2hlciA9IGZldGNoZXJfICYmICgoLi4uYXJncyk9PntcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlcmlhbGl6ZShrZXlfKVswXTtcbiAgICAgICAgICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBQUkVMT0FEW2tleV07XG4gICAgICAgICAgICBpZiAocmVxKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZldGNoZXJfKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUk5leHQoa2V5XywgZmV0Y2hlciwgY29uZmlnKTtcbiAgICB9O1xuXG5jb25zdCBCVUlMVF9JTl9NSURETEVXQVJFID0gdXNlLmNvbmNhdChtaWRkbGV3YXJlKTtcblxuLy8gSXQncyB0cmlja3kgdG8gcGFzcyBnZW5lcmljIHR5cGVzIGFzIHBhcmFtZXRlcnMsIHNvIHdlIGp1c3QgZGlyZWN0bHkgb3ZlcnJpZGVcbi8vIHRoZSB0eXBlcyBoZXJlLlxuY29uc3Qgd2l0aEFyZ3MgPSAoaG9vayk9PntcbiAgICByZXR1cm4gZnVuY3Rpb24gdXNlU1dSQXJncyguLi5hcmdzKSB7XG4gICAgICAgIC8vIEdldCB0aGUgZGVmYXVsdCBhbmQgaW5oZXJpdGVkIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBhcmd1bWVudHMuXG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBfY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgLy8gTWVyZ2UgY29uZmlndXJhdGlvbnMuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IG1lcmdlQ29uZmlncyhmYWxsYmFja0NvbmZpZywgX2NvbmZpZyk7XG4gICAgICAgIC8vIEFwcGx5IG1pZGRsZXdhcmVcbiAgICAgICAgbGV0IG5leHQgPSBob29rO1xuICAgICAgICBjb25zdCB7IHVzZSAgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZSA9ICh1c2UgfHwgW10pLmNvbmNhdChCVUlMVF9JTl9NSURETEVXQVJFKTtcbiAgICAgICAgZm9yKGxldCBpID0gbWlkZGxld2FyZS5sZW5ndGg7IGktLTspe1xuICAgICAgICAgICAgbmV4dCA9IG1pZGRsZXdhcmVbaV0obmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQoa2V5LCBmbiB8fCBjb25maWcuZmV0Y2hlciB8fCBudWxsLCBjb25maWcpO1xuICAgIH07XG59O1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHdpdGggZGVwZW5kZW5jeS10cmFja2luZy5cbiAqLyBjb25zdCB1c2VTdGF0ZVdpdGhEZXBzID0gKHN0YXRlKT0+e1xuICAgIGNvbnN0IHJlcmVuZGVyID0gdXNlU3RhdGUoe30pWzFdO1xuICAgIGNvbnN0IHVubW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qgc3RhdGVSZWYgPSB1c2VSZWYoc3RhdGUpO1xuICAgIC8vIElmIGEgc3RhdGUgcHJvcGVydHkgKGRhdGEsIGVycm9yLCBvciBpc1ZhbGlkYXRpbmcpIGlzIGFjY2Vzc2VkIGJ5IHRoZSByZW5kZXJcbiAgICAvLyBmdW5jdGlvbiwgd2UgbWFyayB0aGUgcHJvcGVydHkgYXMgYSBkZXBlbmRlbmN5IHNvIGlmIGl0IGlzIHVwZGF0ZWQgYWdhaW5cbiAgICAvLyBpbiB0aGUgZnV0dXJlLCB3ZSB0cmlnZ2VyIGEgcmVyZW5kZXIuXG4gICAgLy8gVGhpcyBpcyBhbHNvIGtub3duIGFzIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gICAgY29uc3Qgc3RhdGVEZXBlbmRlbmNpZXNSZWYgPSB1c2VSZWYoe1xuICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgfSk7XG4gICAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRvIGNoYW5nZSBzdGF0ZVJlZiwgcGFzcyB0aGUgdmFsdWVzIGV4cGxpY2l0bHkgdG8gc2V0U3RhdGU6XG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogbmV3RGF0YSAvLyBzZXQgZGF0YSB0byBuZXdEYXRhXG4gICAqICAgZXJyb3I6IHVuZGVmaW5lZCAvLyBzZXQgZXJyb3IgdG8gdW5kZWZpbmVkXG4gICAqIH0pXG4gICAqXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogdW5kZWZpbmVkIC8vIHNldCBkYXRhIHRvIHVuZGVmaW5lZFxuICAgKiAgIGVycm9yOiBlcnIgLy8gc2V0IGVycm9yIHRvIGVyclxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovIGNvbnN0IHNldFN0YXRlID0gdXNlQ2FsbGJhY2soKHBheWxvYWQpPT57XG4gICAgICAgIGxldCBzaG91bGRSZXJlbmRlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBzdGF0ZVJlZi5jdXJyZW50O1xuICAgICAgICBmb3IoY29uc3QgXyBpbiBwYXlsb2FkKXtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBfO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBtYXJrIHJlcmVuZGVyIGFzXG4gICAgICAgICAgICAvLyBuZWVkZWQuXG4gICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlW2tdICE9PSBwYXlsb2FkW2tdKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlW2tdID0gcGF5bG9hZFtrXTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYWNjZXNzZWQgYnkgdGhlIGNvbXBvbmVudCwgYSByZXJlbmRlciBzaG91bGQgYmVcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVyZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkUmVyZW5kZXIgJiYgIXVubW91bnRlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmVyZW5kZXIoe30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBSZWFjdC5zdGFydFRyYW5zaXRpb24oKCk9PnJlcmVuZGVyKHt9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCAvLyBjb25maWcuc3VzcGVuc2UgaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlY3ljbGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3RhdGVSZWYsXG4gICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnQsXG4gICAgICAgIHNldFN0YXRlXG4gICAgXTtcbn07XG5cbi8vIEFkZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgbGlzdCBvZiBrZXllZCBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHJldHVyblxuLy8gdGhlIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLlxuY29uc3Qgc3Vic2NyaWJlQ2FsbGJhY2sgPSAoa2V5LCBjYWxsYmFja3MsIGNhbGxiYWNrKT0+e1xuICAgIGNvbnN0IGtleWVkUmV2YWxpZGF0b3JzID0gY2FsbGJhY2tzW2tleV0gfHwgKGNhbGxiYWNrc1trZXldID0gW10pO1xuICAgIGtleWVkUmV2YWxpZGF0b3JzLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBjb25zdCBpbmRleCA9IGtleWVkUmV2YWxpZGF0b3JzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gTygxKTogZmFzdGVyIHRoYW4gc3BsaWNlXG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9yc1tpbmRleF0gPSBrZXllZFJldmFsaWRhdG9yc1trZXllZFJldmFsaWRhdG9ycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbi8vIENyZWF0ZSBhIGN1c3RvbSBob29rIHdpdGggYSBtaWRkbGV3YXJlXG5jb25zdCB3aXRoTWlkZGxld2FyZSA9ICh1c2VTV1IsIG1pZGRsZXdhcmUpPT57XG4gICAgcmV0dXJuICguLi5hcmdzKT0+e1xuICAgICAgICBjb25zdCBba2V5LCBmbiwgY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgY29uc3QgdXNlcyA9IChjb25maWcudXNlIHx8IFtdKS5jb25jYXQobWlkZGxld2FyZSk7XG4gICAgICAgIHJldHVybiB1c2VTV1Ioa2V5LCBmbiwge1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgdXNlOiB1c2VzXG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuXG5zZXR1cERldlRvb2xzKCk7XG5cbmV4cG9ydCB7IElTX1JFQUNUX0xFR0FDWSwgSVNfU0VSVkVSLCBPQkpFQ1QsIFNXUkNvbmZpZywgU1dSR2xvYmFsU3RhdGUsIFVOREVGSU5FRCwgY2FjaGUsIGNvbXBhcmUsIGNyZWF0ZUNhY2hlSGVscGVyLCBkZWZhdWx0Q29uZmlnLCBkZWZhdWx0Q29uZmlnT3B0aW9ucywgZ2V0VGltZXN0YW1wLCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGluaXRDYWNoZSwgaW50ZXJuYWxNdXRhdGUsIGlzRG9jdW1lbnREZWZpbmVkLCBpc0Z1bmN0aW9uLCBpc1VuZGVmaW5lZCwgaXNXaW5kb3dEZWZpbmVkLCBtZXJnZUNvbmZpZ3MsIG1lcmdlT2JqZWN0cywgbXV0YXRlLCBub29wLCBub3JtYWxpemUsIHByZWxvYWQsIHByZXNldCwgckFGLCBjb25zdGFudHMgYXMgcmV2YWxpZGF0ZUV2ZW50cywgc2VyaWFsaXplLCBzbG93Q29ubmVjdGlvbiwgc3RhYmxlSGFzaCwgc3Vic2NyaWJlQ2FsbGJhY2ssIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHVzZVNXUkNvbmZpZywgdXNlU3RhdGVXaXRoRGVwcywgd2l0aEFyZ3MsIHdpdGhNaWRkbGV3YXJlIH07XG4iLCJpbXBvcnQgeyB1c2VSZWYsIHVzZU1lbW8sIHVzZUNhbGxiYWNrLCB1c2VEZWJ1Z1ZhbHVlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzJztcbmltcG9ydCB7IE9CSkVDVCwgU1dSQ29uZmlnIGFzIFNXUkNvbmZpZyQxLCBkZWZhdWx0Q29uZmlnLCB3aXRoQXJncywgU1dSR2xvYmFsU3RhdGUsIHNlcmlhbGl6ZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGlzVW5kZWZpbmVkLCBnZXRUaW1lc3RhbXAsIFVOREVGSU5FRCwgaXNGdW5jdGlvbiwgcmV2YWxpZGF0ZUV2ZW50cywgaW50ZXJuYWxNdXRhdGUsIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHN1YnNjcmliZUNhbGxiYWNrLCBJU19TRVJWRVIsIHJBRiwgSVNfUkVBQ1RfTEVHQUNZLCBtZXJnZU9iamVjdHMgfSBmcm9tICdzd3IvX2ludGVybmFsJztcbmV4cG9ydCB7IG11dGF0ZSwgcHJlbG9hZCwgdXNlU1dSQ29uZmlnIH0gZnJvbSAnc3dyL19pbnRlcm5hbCc7XG5cbmNvbnN0IFdJVEhfREVEVVBFID0ge1xuICAgIGRlZHVwZTogdHJ1ZVxufTtcbmNvbnN0IHVzZVNXUkhhbmRsZXIgPSAoX2tleSwgZmV0Y2hlciwgY29uZmlnKT0+e1xuICAgIGNvbnN0IHsgY2FjaGUgLCBjb21wYXJlICwgc3VzcGVuc2UgLCBmYWxsYmFja0RhdGEgLCByZXZhbGlkYXRlT25Nb3VudCAsIHJldmFsaWRhdGVJZlN0YWxlICwgcmVmcmVzaEludGVydmFsICwgcmVmcmVzaFdoZW5IaWRkZW4gLCByZWZyZXNoV2hlbk9mZmxpbmUgLCBrZWVwUHJldmlvdXNEYXRhICB9ID0gY29uZmlnO1xuICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIC8vIGBrZXlgIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBTV1IgYGRhdGFgIHN0YXRlLCBga2V5SW5mb2AgaG9sZHMgZXh0cmFcbiAgICAvLyBzdGF0ZXMgc3VjaCBhcyBgZXJyb3JgIGFuZCBgaXNWYWxpZGF0aW5nYCBpbnNpZGUsXG4gICAgLy8gYWxsIG9mIHRoZW0gYXJlIGRlcml2ZWQgZnJvbSBgX2tleWAuXG4gICAgLy8gYGZuQXJnYCBpcyB0aGUgYXJndW1lbnQvYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBrZXksIHdoaWNoIHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdG8gdGhlIGZldGNoZXIuXG4gICAgY29uc3QgW2tleSwgZm5BcmddID0gc2VyaWFsaXplKF9rZXkpO1xuICAgIC8vIElmIGl0J3MgdGhlIGluaXRpYWwgcmVuZGVyIG9mIHRoaXMgaG9vay5cbiAgICBjb25zdCBpbml0aWFsTW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gSWYgdGhlIGhvb2sgaXMgdW5tb3VudGVkIGFscmVhZHkuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByZXZlbnQgc29tZSBlZmZlY3RzXG4gICAgLy8gdG8gYmUgY2FsbGVkIGFmdGVyIHVubW91bnRpbmcuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBSZWZzIHRvIGtlZXAgdGhlIGtleSBhbmQgY29uZmlnLlxuICAgIGNvbnN0IGtleVJlZiA9IHVzZVJlZihrZXkpO1xuICAgIGNvbnN0IGZldGNoZXJSZWYgPSB1c2VSZWYoZmV0Y2hlcik7XG4gICAgY29uc3QgY29uZmlnUmVmID0gdXNlUmVmKGNvbmZpZyk7XG4gICAgY29uc3QgZ2V0Q29uZmlnID0gKCk9PmNvbmZpZ1JlZi5jdXJyZW50O1xuICAgIGNvbnN0IGlzQWN0aXZlID0gKCk9PmdldENvbmZpZygpLmlzVmlzaWJsZSgpICYmIGdldENvbmZpZygpLmlzT25saW5lKCk7XG4gICAgY29uc3QgW2dldENhY2hlLCBzZXRDYWNoZSwgc3Vic2NyaWJlQ2FjaGUsIGdldEluaXRpYWxDYWNoZV0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llcyA9IHVzZVJlZih7fSkuY3VycmVudDtcbiAgICBjb25zdCBmYWxsYmFjayA9IGlzVW5kZWZpbmVkKGZhbGxiYWNrRGF0YSkgPyBjb25maWcuZmFsbGJhY2tba2V5XSA6IGZhbGxiYWNrRGF0YTtcbiAgICBjb25zdCBpc0VxdWFsID0gKHByZXYsIGN1cnJlbnQpPT57XG4gICAgICAgIGxldCBlcXVhbCA9IHRydWU7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHN0YXRlRGVwZW5kZW5jaWVzKXtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBfO1xuICAgICAgICAgICAgaWYgKHQgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCBwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJldlt0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCByZXR1cm5lZERhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50W3RdICE9PSBwcmV2W3RdKSB7XG4gICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcXVhbDtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNuYXBzaG90ID0gdXNlTWVtbygoKT0+e1xuICAgICAgICBjb25zdCBzaG91bGRTdGFydFJlcXVlc3QgPSAoKCk9PntcbiAgICAgICAgICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWZldGNoZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIGByZXZhbGlkYXRlT25Nb3VudGAgaXMgc2V0LCB3ZSB0YWtlIHRoZSB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVJZlN0YWxlKSkgcmV0dXJuIHJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIC8vIEdldCB0aGUgY2FjaGUgYW5kIG1lcmdlIGl0IHdpdGggZXhwZWN0ZWQgc3RhdGVzLlxuICAgICAgICBjb25zdCBnZXRTZWxlY3RlZENhY2hlID0gKHN0YXRlKT0+e1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzZWxlY3QgdGhlIG5lZWRlZCBmaWVsZHMgZnJvbSB0aGUgc3RhdGUuXG4gICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IG1lcmdlT2JqZWN0cyhzdGF0ZSk7XG4gICAgICAgICAgICBkZWxldGUgc25hcHNob3QuX2s7XG4gICAgICAgICAgICBpZiAoIXNob3VsZFN0YXJ0UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5zbmFwc2hvdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FjaGVkRGF0YSA9IGdldENhY2hlKCk7XG4gICAgICAgIGNvbnN0IGluaXRpYWxEYXRhID0gZ2V0SW5pdGlhbENhY2hlKCk7XG4gICAgICAgIGNvbnN0IGNsaWVudFNuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShjYWNoZWREYXRhKTtcbiAgICAgICAgY29uc3Qgc2VydmVyU25hcHNob3QgPSBjYWNoZWREYXRhID09PSBpbml0aWFsRGF0YSA/IGNsaWVudFNuYXBzaG90IDogZ2V0U2VsZWN0ZWRDYWNoZShpbml0aWFsRGF0YSk7XG4gICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSByZXR1cm5pbmcgdGhlIHNhbWUgb2JqZWN0IHJlZmVyZW5jZSB0byBhdm9pZFxuICAgICAgICAvLyB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzLCB3ZSBrZWVwIHRoZSBwcmV2aW91cyBzbmFwc2hvdCBhbmQgdXNlIGRlZXBcbiAgICAgICAgLy8gY29tcGFyaXNvbiB0byBjaGVjayBpZiB3ZSBuZWVkIHRvIHJldHVybiBhIG5ldyBvbmUuXG4gICAgICAgIGxldCBtZW1vcml6ZWRTbmFwc2hvdCA9IGNsaWVudFNuYXBzaG90O1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgKCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTbmFwc2hvdCA9IGdldFNlbGVjdGVkQ2FjaGUoZ2V0Q2FjaGUoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRXF1YWwobmV3U25hcHNob3QsIG1lbW9yaXplZFNuYXBzaG90KSA/IG1lbW9yaXplZFNuYXBzaG90IDogbWVtb3JpemVkU25hcHNob3QgPSBuZXdTbmFwc2hvdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKT0+c2VydmVyU25hcHNob3RcbiAgICAgICAgXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgU1dSIHNob3VsZCByZXR1cm4uXG4gICAgY29uc3QgY2FjaGVkID0gdXNlU3luY0V4dGVybmFsU3RvcmUodXNlQ2FsbGJhY2soKGNhbGxiYWNrKT0+c3Vic2NyaWJlQ2FjaGUoa2V5LCAoY3VycmVudCwgcHJldik9PntcbiAgICAgICAgICAgIGlmICghaXNFcXVhbChwcmV2LCBjdXJyZW50KSkgY2FsbGJhY2soKTtcbiAgICAgICAgfSksIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKSwgZ2V0U25hcHNob3RbMF0sIGdldFNuYXBzaG90WzFdKTtcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9ICFpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGhhc1JldmFsaWRhdG9yID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV0gJiYgRVZFTlRfUkVWQUxJREFUT1JTW2tleV0ubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gY2FjaGVkLmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGlzVW5kZWZpbmVkKGNhY2hlZERhdGEpID8gZmFsbGJhY2sgOiBjYWNoZWREYXRhO1xuICAgIGNvbnN0IGVycm9yID0gY2FjaGVkLmVycm9yO1xuICAgIC8vIFVzZSBhIHJlZiB0byBzdG9yZSBwcmV2aW91c2x5IHJldHVybmVkIGRhdGEuIFVzZSB0aGUgaW5pdGlhbCBkYXRhIGFzIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgIGNvbnN0IGxhZ2d5RGF0YVJlZiA9IHVzZVJlZihkYXRhKTtcbiAgICBjb25zdCByZXR1cm5lZERhdGEgPSBrZWVwUHJldmlvdXNEYXRhID8gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBsYWdneURhdGFSZWYuY3VycmVudCA6IGNhY2hlZERhdGEgOiBkYXRhO1xuICAgIC8vIC0gU3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUncyBzdGFsZSBkYXRhIGZvciB0aGUgaW5pdGlhbCByZW5kZXIuXG4gICAgLy8gLSBOb3Qgc3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUgaXMgbm8gZmFsbGJhY2sgZGF0YSBhbmQgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkLlxuICAgIC8vIC0gYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkIGJ1dCBgZGF0YWAgaXMgbm90IGRlZmluZWQuXG4gICAgY29uc3Qgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uID0gKCgpPT57XG4gICAgICAgIC8vIGlmIGEga2V5IGFscmVhZHkgaGFzIHJldmFsaWRhdG9ycyBhbmQgYWxzbyBoYXMgZXJyb3IsIHdlIHNob3VsZCBub3QgdHJpZ2dlciByZXZhbGlkYXRpb25cbiAgICAgICAgaWYgKGhhc1JldmFsaWRhdG9yICYmICFpc1VuZGVmaW5lZChlcnJvcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnQgJiYgIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSkgcmV0dXJuIHJldmFsaWRhdGVPbk1vdW50O1xuICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIFVuZGVyIHN1c3BlbnNlIG1vZGUsIGl0IHdpbGwgYWx3YXlzIGZldGNoIG9uIHJlbmRlciBpZiB0aGVyZSBpcyBub1xuICAgICAgICAvLyBzdGFsZSBkYXRhIHNvIG5vIG5lZWQgdG8gcmV2YWxpZGF0ZSBpbW1lZGlhdGVseSBtb3VudCBpdCBhZ2Fpbi5cbiAgICAgICAgLy8gSWYgZGF0YSBleGlzdHMsIG9ubHkgcmV2YWxpZGF0ZSBpZiBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIHRydWUuXG4gICAgICAgIGlmIChzdXNwZW5zZSkgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpID8gZmFsc2UgOiByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3RhbGUgZGF0YSwgd2UgbmVlZCB0byByZXZhbGlkYXRlIHdoZW4gbW91bnQ7XG4gICAgICAgIC8vIElmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgc2V0IHRvIHRydWUsIHdlIHdpbGwgYWx3YXlzIHJldmFsaWRhdGUuXG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChkYXRhKSB8fCByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9KSgpO1xuICAgIC8vIFJlc29sdmUgdGhlIGRlZmF1bHQgdmFsaWRhdGluZyBzdGF0ZTpcbiAgICAvLyBJZiBpdCdzIGFibGUgdG8gdmFsaWRhdGUsIGFuZCBpdCBzaG91bGQgcmV2YWxpZGF0ZSB3aGVuIG1vdW50LCB0aGlzIHdpbGwgYmUgdHJ1ZS5cbiAgICBjb25zdCBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlID0gISEoa2V5ICYmIGZldGNoZXIgJiYgaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKTtcbiAgICBjb25zdCBpc1ZhbGlkYXRpbmcgPSBpc1VuZGVmaW5lZChjYWNoZWQuaXNWYWxpZGF0aW5nKSA/IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgOiBjYWNoZWQuaXNWYWxpZGF0aW5nO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc0xvYWRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc0xvYWRpbmc7XG4gICAgLy8gVGhlIHJldmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBhIGNhcmVmdWxseSBjcmFmdGVkIHdyYXBwZXIgb2YgdGhlIG9yaWdpbmFsXG4gICAgLy8gYGZldGNoZXJgLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBtYW55IGVkZ2UgY2FzZXMuXG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChyZXZhbGlkYXRlT3B0cyk9PntcbiAgICAgICAgY29uc3QgY3VycmVudEZldGNoZXIgPSBmZXRjaGVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICgha2V5IHx8ICFjdXJyZW50RmV0Y2hlciB8fCB1bm1vdW50ZWRSZWYuY3VycmVudCB8fCBnZXRDb25maWcoKS5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0RhdGE7XG4gICAgICAgIGxldCBzdGFydEF0O1xuICAgICAgICBsZXQgbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IG9wdHMgPSByZXZhbGlkYXRlT3B0cyB8fCB7fTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gb25nb2luZyBjb25jdXJyZW50IHJlcXVlc3QsIG9yIGBkZWR1cGVgIGlzIG5vdCBzZXQsIGFcbiAgICAgICAgLy8gbmV3IHJlcXVlc3Qgc2hvdWxkIGJlIGluaXRpYXRlZC5cbiAgICAgICAgY29uc3Qgc2hvdWxkU3RhcnROZXdSZXF1ZXN0ID0gIUZFVENIW2tleV0gfHwgIW9wdHMuZGVkdXBlO1xuICAgICAgICAvKlxuICAgICAgICAgRm9yIFJlYWN0IDE3XG4gICAgICAgICBEbyB1bm1vdW50IGNoZWNrIGZvciBjYWxsczpcbiAgICAgICAgIElmIGtleSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIHJldmFsaWRhdGlvbiwgb3IgdGhlIGNvbXBvbmVudCBoYXMgYmVlblxuICAgICAgICAgdW5tb3VudGVkLCBvbGQgZGlzcGF0Y2ggYW5kIG9sZCBldmVudCBjYWxsYmFja3Mgc2hvdWxkIG5vdCB0YWtlIGFueVxuICAgICAgICAgZWZmZWN0XG5cbiAgICAgICAgRm9yIFJlYWN0IDE4XG4gICAgICAgIG9ubHkgY2hlY2sgaWYga2V5IGhhcyBjaGFuZ2VkXG4gICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdHdnL3JlYWN0LTE4L2Rpc2N1c3Npb25zLzgyXG4gICAgICAqLyBjb25zdCBjYWxsYmFja1NhZmVndWFyZCA9ICgpPT57XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF1bm1vdW50ZWRSZWYuY3VycmVudCAmJiBrZXkgPT09IGtleVJlZi5jdXJyZW50ICYmIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5ID09PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVGhlIGZpbmFsIHN0YXRlIG9iamVjdCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzLlxuICAgICAgICBjb25zdCBmaW5hbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlID0gKCk9PntcbiAgICAgICAgICAgIHNldENhY2hlKGZpbmFsU3RhdGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjbGVhbnVwU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBzdGlsbCB0aGUgc2FtZSByZXF1ZXN0IGJlZm9yZSBkZWxldGluZyBpdC5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJbmZvID0gRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SW5mbyAmJiByZXF1ZXN0SW5mb1sxXSA9PT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTdGFydCBmZXRjaGluZy4gQ2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZSwgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIC8vIEl0IGlzIGluIHRoZSBgaXNMb2FkaW5nYCBzdGF0ZSwgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgbm8gY2FjaGVkIGRhdGEuXG4gICAgICAgIC8vIFRoaXMgYnlwYXNzZXMgZmFsbGJhY2sgZGF0YSBhbmQgbGFnZ3kgZGF0YS5cbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGdldENhY2hlKCkuZGF0YSkpIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgc2V0Q2FjaGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAvLyBJZiBubyBjYWNoZSBpcyBiZWluZyByZW5kZXJlZCBjdXJyZW50bHkgKGl0IHNob3dzIGEgYmxhbmsgcGFnZSksXG4gICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgIGlmIChjb25maWcubG9hZGluZ1RpbWVvdXQgJiYgaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZyAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25Mb2FkaW5nU2xvdyhrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSByZXF1ZXN0IGFuZCBzYXZlIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgICAgLy8gS2V5IG11c3QgYmUgdHJ1dGh5IGlmIGVudGVyaW5nIGhlcmUuXG4gICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZldGNoZXIoZm5BcmcpLFxuICAgICAgICAgICAgICAgICAgICBnZXRUaW1lc3RhbXAoKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbbmV3RGF0YSwgc3RhcnRBdF0gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgbmV3RGF0YSA9IGF3YWl0IG5ld0RhdGE7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXNuJ3QgaW50ZXJydXB0ZWQsIGNsZWFuIGl0IHVwIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChjbGVhbnVwU3RhdGUsIGNvbmZpZy5kZWR1cGluZ0ludGVydmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgY3VycmVudCBvbmUgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zOlxuICAgICAgICAgICAgLy8gICByZXExLS0tLS0tLS0tLS0tLS0tLS0tPnJlczEgICAgICAgIChjdXJyZW50IG9uZSlcbiAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAvLyB0aGUgcmVxdWVzdCB0aGF0IGZpcmVkIGxhdGVyIHdpbGwgYWx3YXlzIGJlIGtlcHQuXG4gICAgICAgICAgICAvLyBUaGUgdGltZXN0YW1wIG1heWJlIGJlIGB1bmRlZmluZWRgIG9yIGEgbnVtYmVyXG4gICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xlYXIgZXJyb3IuXG4gICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gVU5ERUZJTkVEO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgbXV0YXRpb25zKHMpLCB0aGF0IG92ZXJsYXBwZWQgd2l0aCB0aGUgY3VycmVudCByZXZhbGlkYXRpb246XG4gICAgICAgICAgICAvLyBjYXNlIDE6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMjpcbiAgICAgICAgICAgIC8vICAgICAgICAgcmVxLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICBtdXRhdGUtLS0tLS0+ZW5kXG4gICAgICAgICAgICAvLyBjYXNlIDM6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLS0uLi4tLS0tLS0tLS0tPlxuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBpZ25vcmUgdGhlIHJldmFsaWRhdGlvbiByZXN1bHQgKHJlcykgYmVjYXVzZSBpdCdzIG5vIGxvbmdlciBmcmVzaC5cbiAgICAgICAgICAgIC8vIG1lYW53aGlsZSwgYSBuZXcgcmV2YWxpZGF0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbXV0YXRpb24gZW5kcy5cbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uSW5mbyA9IE1VVEFUSU9OW2tleV07XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKG11dGF0aW9uSW5mbykgJiYgLy8gY2FzZSAxXG4gICAgICAgICAgICAoc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMF0gfHwgLy8gY2FzZSAyXG4gICAgICAgICAgICBzdGFydEF0IDw9IG11dGF0aW9uSW5mb1sxXSB8fCAvLyBjYXNlIDNcbiAgICAgICAgICAgIG11dGF0aW9uSW5mb1sxXSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlZXAgY29tcGFyZSB3aXRoIHRoZSBsYXRlc3Qgc3RhdGUgdG8gYXZvaWQgZXh0cmEgcmUtcmVuZGVycy5cbiAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgY29uc3QgY2FjaGVEYXRhID0gZ2V0Q2FjaGUoKS5kYXRhO1xuICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbXBhcmUgZm4gY291bGQgYmUgY3VzdG9tIGZuXG4gICAgICAgICAgICAvLyBjYWNoZURhdGEgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gbmV3RGF0YSBldmVuIHdoZW4gY29tcGFyZSBmbiByZXR1cm5zIFRydWVcbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZGF0YSA9IGNvbXBhcmUoY2FjaGVEYXRhLCBuZXdEYXRhKSA/IGNhY2hlRGF0YSA6IG5ld0RhdGE7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25TdWNjZXNzKG5ld0RhdGEsIGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY2xlYW51cFN0YXRlKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICBjb25zdCB7IHNob3VsZFJldHJ5T25FcnJvciAgfSA9IGN1cnJlbnRDb25maWc7XG4gICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSwgZGlzY2FyZCBpdC5cbiAgICAgICAgICAgIGlmICghY3VycmVudENvbmZpZy5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3IGVycm9yLCBkb24ndCB1c2UgZGVlcCBjb21wYXJpc29uIGZvciBlcnJvcnMuXG4gICAgICAgICAgICAgICAgZmluYWxTdGF0ZS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAvLyBFcnJvciBldmVudCBhbmQgcmV0cnkgbG9naWMuIE9ubHkgZm9yIHRoZSBhY3R1YWwgcmVxdWVzdCwgbm90XG4gICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QgJiYgY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3IoZXJyLCBrZXksIGN1cnJlbnRDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmV0cnlPbkVycm9yID09PSB0cnVlIHx8IGlzRnVuY3Rpb24oc2hvdWxkUmV0cnlPbkVycm9yKSAmJiBzaG91bGRSZXRyeU9uRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGluYWN0aXZlLCBzdG9wLiBJdCB3aWxsIGF1dG8tcmV2YWxpZGF0ZSB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmb2N1c2luZyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBsaWNhdGlvbiBpcyBhbHdheXMgZW5hYmxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3JSZXRyeShlcnIsIGtleSwgY3VycmVudENvbmZpZywgKF9vcHRzKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZhbGlkYXRvcnMgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmFsaWRhdG9yc1swXShyZXZhbGlkYXRlRXZlbnRzLkVSUk9SX1JFVkFMSURBVEVfRVZFTlQsIF9vcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudDogKG9wdHMucmV0cnlDb3VudCB8fCAwKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVwZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE1hcmsgbG9hZGluZyBhcyBzdG9wcGVkLlxuICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBob29rJ3Mgc3RhdGUuXG4gICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCAvLyBgc2V0U3RhdGVgIGlzIGltbXV0YWJsZSwgYW5kIGBldmVudHNDYWxsYmFja2AsIGBmbkFyZ2AsIGFuZFxuICAgIC8vIGBrZXlWYWxpZGF0aW5nYCBhcmUgZGVwZW5kaW5nIG9uIGBrZXlgLCBzbyB3ZSBjYW4gZXhjbHVkZSB0aGVtIGZyb21cbiAgICAvLyB0aGUgZGVwcyBhcnJheS5cbiAgICAvL1xuICAgIC8vIEZJWE1FOlxuICAgIC8vIGBmbmAgYW5kIGBjb25maWdgIG1pZ2h0IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBsaWZlY3ljbGUsXG4gICAgLy8gYnV0IHRoZXkgbWlnaHQgYmUgY2hhbmdlZCBldmVyeSByZW5kZXIgbGlrZSB0aGlzLlxuICAgIC8vIGB1c2VTV1IoJ2tleScsICgpID0+IGZldGNoKCcvYXBpLycpLCB7IHN1c3BlbnNlOiB0cnVlIH0pYFxuICAgIC8vIFNvIHdlIG9taXQgdGhlIHZhbHVlcyBmcm9tIHRoZSBkZXBzIGFycmF5XG4gICAgLy8gZXZlbiB0aG91Z2ggaXQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtcbiAgICAgICAga2V5LFxuICAgICAgICBjYWNoZVxuICAgIF0pO1xuICAgIC8vIFNpbWlsYXIgdG8gdGhlIGdsb2JhbCBtdXRhdGUgYnV0IGJvdW5kIHRvIHRoZSBjdXJyZW50IGNhY2hlIGFuZCBrZXkuXG4gICAgLy8gYGNhY2hlYCBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgY29uc3QgYm91bmRNdXRhdGUgPSB1c2VDYWxsYmFjaygvLyBVc2UgY2FsbGJhY2sgdG8gbWFrZSBzdXJlIGBrZXlSZWYuY3VycmVudGAgcmV0dXJucyBsYXRlc3QgcmVzdWx0IGV2ZXJ5IHRpbWVcbiAgICAoLi4uYXJncyk9PntcbiAgICAgICAgcmV0dXJuIGludGVybmFsTXV0YXRlKGNhY2hlLCBrZXlSZWYuY3VycmVudCwgLi4uYXJncyk7XG4gICAgfSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICAvLyBUaGUgbG9naWMgZm9yIHVwZGF0aW5nIHJlZnMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgLy8gSGFuZGxlIGxhZ2d5IGRhdGEgdXBkYXRlcy4gSWYgdGhlcmUncyBjYWNoZWQgZGF0YSBvZiB0aGUgY3VycmVudCBrZXksXG4gICAgICAgIC8vIGl0J2xsIGJlIHRoZSBjb3JyZWN0IHJlZmVyZW5jZS5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChjYWNoZWREYXRhKSkge1xuICAgICAgICAgICAgbGFnZ3lEYXRhUmVmLmN1cnJlbnQgPSBjYWNoZWREYXRhO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQWZ0ZXIgbW91bnRlZCBvciBrZXkgY2hhbmdlZC5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNvZnRSZXZhbGlkYXRlID0gcmV2YWxpZGF0ZS5iaW5kKFVOREVGSU5FRCwgV0lUSF9ERURVUEUpO1xuICAgICAgICAvLyBFeHBvc2UgcmV2YWxpZGF0b3JzIHRvIGdsb2JhbCBldmVudCBsaXN0ZW5lcnMuIFNvIHdlIGNhbiB0cmlnZ2VyXG4gICAgICAgIC8vIHJldmFsaWRhdGlvbiBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICBsZXQgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IDA7XG4gICAgICAgIGNvbnN0IG9uUmV2YWxpZGF0ZSA9ICh0eXBlLCBvcHRzID0ge30pPT57XG4gICAgICAgICAgICBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uRm9jdXMgJiYgbm93ID4gbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSBub3cgKyBnZXRDb25maWcoKS5mb2N1c1Rocm90dGxlSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuTVVUQVRFX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkVSUk9SX1JFVkFMSURBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZShvcHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdW5zdWJFdmVudHMgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIEVWRU5UX1JFVkFMSURBVE9SUywgb25SZXZhbGlkYXRlKTtcbiAgICAgICAgLy8gTWFyayB0aGUgY29tcG9uZW50IGFzIG1vdW50ZWQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIHJlZnMuXG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGtleVJlZi5jdXJyZW50ID0ga2V5O1xuICAgICAgICBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwga2V5IGluIHRoZSBjYWNoZS5cbiAgICAgICAgc2V0Q2FjaGUoe1xuICAgICAgICAgICAgX2s6IGZuQXJnXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgcmV2YWxpZGF0ZSBpZiB3ZSBoYXZlIGRhdGEgdG8gcmV0dXJuIHNvIHdlIHdvbid0IGJsb2NrXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgIHJBRihzb2Z0UmV2YWxpZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViRXZlbnRzKCk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBsZXQgdGltZXI7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIHBhc3NlZCBpbnRlcnZhbFxuICAgICAgICAgICAgLy8gLi4ub3IgaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSB1cGRhdGVkIGRhdGEgdG8gZ2V0IHRoZSBpbnRlcnZhbFxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbCkgPyByZWZyZXNoSW50ZXJ2YWwoZGF0YSkgOiByZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHN0YXJ0IHRoZSBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUsIGFuZCBub3QgZXJyb3JlZC5cbiAgICAgICAgICAgIGlmICghZ2V0Q2FjaGUoKS5lcnJvciAmJiAocmVmcmVzaFdoZW5IaWRkZW4gfHwgZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkpICYmIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmICh0aW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgdGltZXIgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbCxcbiAgICAgICAgcmVmcmVzaFdoZW5IaWRkZW4sXG4gICAgICAgIHJlZnJlc2hXaGVuT2ZmbGluZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gRGlzcGxheSBkZWJ1ZyBpbmZvIGluIFJlYWN0IERldlRvb2xzLlxuICAgIHVzZURlYnVnVmFsdWUocmV0dXJuZWREYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIFNXUiBzaG91bGQgdGhyb3cgd2hlbiB0cnlpbmcgdG8gdXNlIFN1c3BlbnNlIG9uIHRoZSBzZXJ2ZXIgd2l0aCBSZWFjdCAxOCxcbiAgICAgICAgLy8gd2l0aG91dCBwcm92aWRpbmcgYW55IGluaXRpYWwgZGF0YS4gU2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTgzMlxuICAgICAgICBpZiAoIUlTX1JFQUNUX0xFR0FDWSAmJiBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFsbGJhY2sgZGF0YSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHN1c3BlbnNlIGluIFNTUi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGZldGNoZXIgYW5kIGNvbmZpZyByZWZzIGV2ZW4gd2l0aCB0aGUgU3VzcGVuc2UgbW9kZS5cbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHRocm93IGlzVW5kZWZpbmVkKGVycm9yKSA/IHJldmFsaWRhdGUoV0lUSF9ERURVUEUpIDogZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG11dGF0ZTogYm91bmRNdXRhdGUsXG4gICAgICAgIGdldCBkYXRhICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkRGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVycm9yICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzVmFsaWRhdGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzTG9hZGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgU1dSQ29uZmlnID0gT0JKRUNULmRlZmluZVByb3BlcnR5KFNXUkNvbmZpZyQxLCAnZGVmYXVsdFZhbHVlJywge1xuICAgIHZhbHVlOiBkZWZhdWx0Q29uZmlnXG59KTtcbmNvbnN0IHVuc3RhYmxlX3NlcmlhbGl6ZSA9IChrZXkpPT5zZXJpYWxpemUoa2V5KVswXTtcbi8qKlxuICogQSBob29rIHRvIGZldGNoIGRhdGEuXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9zd3IudmVyY2VsLmFwcFxuICogQGV4YW1wbGVcbiAqIGBgYGpzeFxuICogaW1wb3J0IHVzZVNXUiBmcm9tICdzd3InXG4gKiBmdW5jdGlvbiBQcm9maWxlKCkge1xuICogICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSB1c2VTV1IoJy9hcGkvdXNlcicsIGZldGNoZXIpXG4gKiAgIGlmIChlcnJvcikgcmV0dXJuIDxkaXY+ZmFpbGVkIHRvIGxvYWQ8L2Rpdj5cbiAqICAgaWYgKCFkYXRhKSByZXR1cm4gPGRpdj5sb2FkaW5nLi4uPC9kaXY+XG4gKiAgIHJldHVybiA8ZGl2PmhlbGxvIHtkYXRhLm5hbWV9ITwvZGl2PlxuICogfVxuICogYGBgXG4gKi8gdmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgdW5zdGFibGVfc2VyaWFsaXplIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTV1JDb25maWcgfSBmcm9tIFwic3dyXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTV1JIb29rc0NvbmZpZygpIHtcbiAgICB2YXIgc3dyQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgdmFyIHZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBtdXRhdGU6IHN3ckNvbmZpZy5tdXRhdGUsIGNhY2hlOiBzd3JDb25maWcuY2FjaGUgfSk7IH0sIFtzd3JDb25maWcubXV0YXRlLCBzd3JDb25maWcuY2FjaGVdKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VTV1JIb29rc0NvbmZpZy5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKGluaXRpYWxWYWx1ZSkge1xuICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgeyBpbml0aWFsVmFsdWUgPSBmYWxzZTsgfVxuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShpbml0aWFsVmFsdWUpLCAyKSwgdmFsdWUgPSBfYVswXSwgc2V0VmFsdWUgPSBfYVsxXTtcbiAgICB2YXIgdG9nZ2xlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShmdW5jdGlvbiAocHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlVG9nZ2xlLmpzLm1hcCIsInZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYyhvYmopIHtcbiAgdmFyIG91dCA9IFwiXCJcblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiKSByZXR1cm4gb2JqIHx8IFwiXCJcblxuICBpZiAoaXNBcnJheShvYmopKVxuICAgIGZvciAodmFyIGsgPSAwLCB0bXA7IGsgPCBvYmoubGVuZ3RoOyBrKyspIHtcbiAgICAgIGlmICgodG1wID0gY2Mob2JqW2tdKSkgIT09IFwiXCIpIHtcbiAgICAgICAgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsgdG1wXG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykgJiYgb2JqW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ1bUtBWm1Ma0FSTHpYM2dudUtrcFwiLFwibGVmdFwiOlwidTFsNUFKR2JVaVA2UlZGSUt4T0lcIixcInNtYWxsXCI6XCJoeFpwSzlDcEJLMXdSMFcwdjRTRFwiLFwibGFyZ2VcIjpcIm85RFltdDR4ZkxhSW1pVnpJOWRRXCIsXCJ4bGFyZ2VcIjpcInFtRVZ4U1pTNWtmTDNhVmJlZTFuXCIsXCJpbnZlcnRlZFwiOlwiQ05PWkhMZDlYYm9rek9XNkxZQlBcIixcInJvdW5kZWRcIjpcImpKQ0F6dzJTeWFINHRJV1hyQWxSXCIsXCJyaWdodE9mZnNldFwiOlwiS0dDdTdhUGpReV9hRk5qSFdOdXdcIixcImxlZnRPZmZzZXRcIjpcImRESFl5R3pYTmk3NzNGQWwxM0dYXCIsXCJub1NoYWRvd1wiOlwibFFGMVljVXFNME9IdlBTbFN3bF9cIixcIm5vQm9yZGVyXCI6XCJzRW8yNUVpdjZ6czFEX3g1cThWeVwiLFwidHJhbnNwYXJlbnRcIjpcInZtM2NtQU5OdVlsYVFNNVlxejlHXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJQaWtmemo3ellnMkludGRKeW11S1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIm9TZ1Y1Y3dYNmlua1NiQ0c5OHc4XCIsXCJub1BhZGRpbmdcIjpcImdTWnJHUjF4cW04UTFpUlVmR2dhXCIsXCJjb250ZW50XCI6XCJwWUxVajlub0FxVDhXeXRqRE9PYlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImJ1dHRvbkJhZGdlXCI6XCJpT3lfdGhVZnd4SXFaT3JXU0l6eFwiLFwiaW52ZXJ0ZWRcIjpcImc3OWpqY1dWbm14TG9QTnlBeDQ5XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJVbmo0cnAxRHk3MUFDcnV6WGw3NVwiLFwibGVmdFwiOlwiRVhXTVJ2dmVSdlFpZml4elRIMDJcIixcInNtYWxsXCI6XCJfVTB6blVrNVFUQXpQblMyZ2FMQ1wiLFwibWVkaXVtXCI6XCJhSDh1NHMyTXRZYzV5NHZ5dWJEd1wiLFwibGFyZ2VcIjpcImMzMDZ5Vjc4YWxfZUd3QlNrbUZtXCIsXCJ4bGFyZ2VcIjpcInh2QTFtZVVtRTI4QUVPcGpzV2M5XCIsXCJpbnZlcnRlZFwiOlwiV0I3N1lJRE9Td0pvWDY4TmpsVUdcIixcInJvdW5kZWRcIjpcImsybkpDc0VOTmdDejJIbHNqX2JHXCIsXCJyaWdodE9mZnNldFwiOlwiakFlNUVWRTM3T3JLWXZrWGRjMXNcIixcImxlZnRPZmZzZXRcIjpcIkRnYnRCNkc0TG9CRGQwNFBfTXpPXCIsXCJub1NoYWRvd1wiOlwiS3BRSTk1X2Y4bkh2azdHMko2aDhcIixcInRyYW5zcGFyZW50XCI6XCJMOFBueFVRb2d6Z0ZNTVQ3UUk0ZFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSnVsYXhTY2NvR21xdGdUTkptazlcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ6VFlyOVc3ZzJTcWJWalBGQW9rR1wiLFwibm9QYWRkaW5nXCI6XCJVSHpUbTUxa1Z5bGw1Ml9TN3NHQlwiLFwibm9Cb3JkZXJcIjpcImhSUDFYWWZ1SjQ5VHNZVV9jTzVBXCIsXCJkaXNhYmxlZFwiOlwibHdXSVRQaE05VE1vNTg1RHNhdzhcIixcImNvbnRlbnRcIjpcIk15VF9QdWZKZEV2c1pFM2hTVzhQXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY2hlY2tib3hcIjpcInN5OGxLVldQNTZBbE9SN3lzXzlBXCIsXCJzbWFsbFwiOlwiWGpmcGN1UHRndUZadktyeHh0N3lcIixcIm1lZGl1bVwiOlwidExQM2RaV2VwWEgzSEtnMTdzT0hcIixcImxhcmdlXCI6XCJXZ3A5cUhXRHJRaTlmbWN4UUlWS1wiLFwieGxhcmdlXCI6XCJsVUE2dHBMa1djR0Znbm9xQ0Z2dVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yUGlja2VyXCI6XCJLazJkcDE1SHdNWnpJTmJVRkFaNFwiLFwiaG9yaXpvbnRhbFwiOlwiSnN6T19VZzdwS0xZUTBEZWhOOF9cIixcInZlcnRpY2FsXCI6XCJFVlQ2MmxnaEM5OWU5YmRqWWx5NVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yU3dhdGNoXCI6XCJQdmJlQm00U010TXFsUU5UeVFqUVwiLFwic21hbGxcIjpcIlM3RTNFUHlfQVdRdWtFZXh1dlRmXCIsXCJsYXJnZVwiOlwiYTFGc0l0S1BRRU9CZVRxQkN1RGxcIixcInhsYXJnZVwiOlwic0ZoZ1FFTl9VT0wzWnhPQVIxSWVcIixcInNlbGVjdGVkXCI6XCJhVXgydVNCU3MxNFZxd1BxanZsUVwiLFwic3JPbmx5XCI6XCJKSVFtZVpkZDlURmw1SV9naWZQaVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiWlpWSGNYNDVYQ2JsbURhYjlld1pcIixcIm1vZGFsSGVhZGVyXCI6XCJ4VFgxWEpmQ1NVc3JoX3lMbFpvaVwiLFwibW9kYWxDb250ZW50XCI6XCJUZTZqSGRseWpzUVhtblRzOWJhblwiLFwibm9QYWRkaW5nXCI6XCJMel9nd1N3UDNRQ041ell6RnNFaVwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJHaDF1dnhNZkVnUFRkdDY2UWlzMlwiLFwibW9kYWxCdXR0b25zXCI6XCJJYXczNEZrTUpxanJHUTU4QkdmeFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImRyYXdlclwiOlwiVTNkQ3pxVHl5bnl6Qm4ybUZrbVdcIixcInZpc2libGVcIjpcInNUY0pkUVVhWlBPZXNlRF8yZmUwXCIsXCJkcmF3ZXJQYXBlclwiOlwiSTNaMGpBODVOcllISjF3RFpIV2JcIixcImRyYXdlclBhcGVyRW50ZXJcIjpcIk1XTGJhVVpJTTFKYkRMRTNIMF9RXCIsXCJkcmF3ZXJQYXBlckVudGVyQWN0aXZlXCI6XCJyZUJIZmtEWlhpS3dpUnZZVGZIdVwiLFwiZHJhd2VyUGFwZXJFbnRlckRvbmVcIjpcIko1ZG13N3dvS3Z3Z3VqZ2JCMHFWXCIsXCJkcmF3ZXJQYXBlckV4aXRcIjpcInJtN2pIMlNxN3dmMmQ5SWxTZXZrXCIsXCJkcmF3ZXJQYXBlckV4aXRBY3RpdmVcIjpcIm5iZW9WcjlWcElYQUgxR1dmcGhDXCIsXCJkcmF3ZXJQYXBlckV4aXREb25lXCI6XCJzZ05iNm5PaEYzNWxXUUU5alFLRVwiLFwiZHJhd2VyUGFwZXJDb250ZW50XCI6XCJDc3FDNnd2bExZRHNLQnNaMEdkVFwiLFwiZHJhd2VyT3ZlcmxheVwiOlwiZTM0Z0JqeDNrM2JSWVBabGY5d1pcIixcIm5vT3ZlcmxheVwiOlwiYjN1Y05wRXROcTJPclFLd3ZxcXdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJkcmF3ZXJDb250ZW50XCI6XCJnRjFfV25PcnJQS1dFUW9YSm1nZlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImRyYXdlckZvb3RlclwiOlwibms2OUh1bGhQa2VGc0VNdVpPckJcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJkcmF3ZXJIZWFkZXJcIjpcInZkd2tQSUd4ekVMZFlobWlaUHEyXCIsXCJkcmF3ZXJIZWFkZXJDbG9zZVwiOlwidXo0Tk1fWHZOWmFxeFZaWXZTWUFcIixcImRyYXdlckhlYWRlckNsb3NlSWNvblwiOlwiWmROang2RHBlV0VJMnBBVkwxOHRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInJCYWZYa29UQ24yQWg2eFlZbXhmXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaW5wdXRcIjpcIktXazdvWjh0dlBmUWljZ1FZbFZhXCIsXCJsYWJlbFwiOlwiZTZ6cng3VU9QX0JTb01NM0dyalFcIixcInNtYWxsXCI6XCJpaFNuRFFnMHlneGNWTEl5U0prTVwiLFwibGFyZ2VcIjpcIkZwd2hiRDdIWHhfdUZUM2wwMXdiXCIsXCJ4bGFyZ2VcIjpcIllWZHM0dV9EZldTRzFyMFNBR25TXCIsXCJpbnZlcnRlZFwiOlwiQ0t5bm9MaGlMZDZLekFZaTVOdEdcIixcInJvdW5kZWRcIjpcInY3Mm16SnVtRlNpRE9PRTFNblhIXCIsXCJub1NoYWRvd1wiOlwiRW9ld0pFRGJHZHRlSl9OUmZTNUZcIixcIm5vQm9yZGVyXCI6XCJjYjdsNHh2Y05uSE5sUVptTGprYlwiLFwibm9QYWRkaW5nXCI6XCJ2Y093RFl1R0YyZXRvUGZ5RkRYNVwiLFwidHJhbnNwYXJlbnRcIjpcImwwOGtoYVhJVU9jcnVCRkh3czdYXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJJMHh2SmJCMExOVDBTMTVqVE1XV1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIlg2ZnFVY1ZIMUJsQ1JKQmlpSmlpXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJqMW1maVlFR29sVFJtYkJtR0tsUVwiLFwicm93XCI6XCJFR2FLdm1xTTJTYXdpRnJXOEN0dVwiLFwiY29sdW1uXCI6XCJOTWkwTVQxYjdycDFaanllOFVWQVwiLFwiZml4ZWRcIjpcImcwajNra1FyX0FqQ0tGZDk0UzFzXCIsXCJwbGFpblwiOlwiRnIxcTdXbkYxbkZubmJmZ3BhUnpcIixcInRyYW5zcGFyZW50XCI6XCJ1ZFJaZTlIMGJLVUhYak93RzFGblwiLFwidG9wXCI6XCJ1WWlLdzZWdkRFa2hqWkh6dm83ZVwiLFwidG9wRWRnZVwiOlwidFJiRWNZakUzS25jc053VGJ2Vk1cIixcInRvcE9uRWRnZVwiOlwiTEd1bkczN1gxX0hSZXV3M3F6dWFcIixcInJpZ2h0XCI6XCJsdzI3ckdWbG8zNGF4Q3h3M1FIaVwiLFwicmlnaHRFZGdlXCI6XCJQWkl0dmxlRklJajBKeDJNaWtSRVwiLFwicmlnaHRPbkVkZ2VcIjpcIktOdUdhRFBxOXJtWGZnbU8zcGNiXCIsXCJib3R0b21cIjpcImRuMXVoMXRhc0d4REdxbVUxOEhOXCIsXCJib3R0b21FZGdlXCI6XCJlRDBVQ3JCUnBzUlRQUHd3SW9WZ1wiLFwiYm90dG9tT25FZGdlXCI6XCJJcmhINWdmeUdzUTZrZGNQOTRSUVwiLFwibGVmdFwiOlwiRDVmR0huQUdDTVI0THRiOXk0SHJcIixcImxlZnRFZGdlXCI6XCJfQXRBZDJ0cjd0MWtYdXNSYlhTelwiLFwibGVmdE9uRWRnZVwiOlwiXzhDOWRkMFhfSlhZNHVIenc1TmpcIixcImhvcml6b250YWxDZW50ZXJcIjpcIlFEa3M4b3Z0OVJWY0ZXZUVCOHdiXCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiQ1Z1UVJFNjUyR0gyVkpuOHpPVHNcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpY29uXCI6XCJmcF9CTEoyRlc0T3l5YjBiSGlENFwiLFwic21hbGxcIjpcInpzVkROZk5Sa29zMFE1dXY5RlI5XCIsXCJtZWRpdW1cIjpcImVTbGlsM2V2UHRQQnN3V0Y4MEM1XCIsXCJsYXJnZVwiOlwiVDdVTHlxMXlFOUFWWEVNa25WNEdcIixcInhsYXJnZVwiOlwiUVBBY2VWUWRaNlFJUTJRdmlqd2dcIixcImludmVydGVkXCI6XCJtRlRHYmhMYTRObFVPMTZudkpya1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiV2NlbXlyMkdyOFpDR2M2QmpicXdcIixcInNtYWxsXCI6XCJUX3BhOENjcEwxR3Z1RHNkdnNxcVwiLFwibWVkaXVtXCI6XCJuTExFcmpPZ2ZhNWIyc09lWnJRNVwiLFwibGFyZ2VcIjpcIlE3MU5GQkhyU3hRTFFFNEFHRDJoXCIsXCJ4bGFyZ2VcIjpcIkViQml5RjFyZzZ3UmF4U01LOHNvXCIsXCJyb3VuZGVkXCI6XCJ0TGp1d1JTc0lpTEpHVnNyYXJiZFwiLFwidG9wT2Zmc2V0XCI6XCJkNEtMcEk3OUN1U1U2Z2tQUEluQVwiLFwicmlnaHRPZmZzZXRcIjpcIkc3aEpab1l2OHFJck5tRkN5Z01FXCIsXCJib3R0b21PZmZzZXRcIjpcIkRaczNBdkdrVmRPdkpmTGVKOEdoXCIsXCJsZWZ0T2Zmc2V0XCI6XCJ3RUVuV1JjdnV2b21oX09MTzVpcVwiLFwiaW52ZXJ0ZWRcIjpcIks5V0dDRnBVYWRPOVdJWHdGYWpfXCIsXCJub1NoYWRvd1wiOlwiZUFRSjEwa0VrUG1EeE1HdmxZenlcIixcIm5vQm9yZGVyXCI6XCJPbEVOUjludHVXWUxHT0tLS3JHUlwiLFwidHJhbnNwYXJlbnRcIjpcIktPY3NQcml2cjk0cnhuZkhWbGZlXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnVVNUeTNfTnAxbUdKSFcxTjNneFwiLFwic21hbGxcIjpcIklZdVZ6aDFIQnpnb1RDaTJXUV9wXCIsXCJtZWRpdW1cIjpcIkpOZzNfYkNFZkl2aTRnZUVjc1MzXCIsXCJsYXJnZVwiOlwibjYxc2F4QTIwX0V3TWd0OUd3NHNcIixcInhsYXJnZVwiOlwiZ3FHbnZuSDlYNm1Hdnp3bDRhR3pcIixcInJvdW5kZWRcIjpcIkRrenVxaEVhaU1SM1hNczFNMUlmXCIsXCJ0b3BPZmZzZXRcIjpcInNHbnZldnZzeEJaVWFYcnBaUXBJXCIsXCJyaWdodE9mZnNldFwiOlwiaGdZM1pwa3lENzBwN0U4cm4zYmlcIixcImJvdHRvbU9mZnNldFwiOlwiUk9vUVk2T2FSblF6RE9mWF9RREZcIixcImxlZnRPZmZzZXRcIjpcIktldm01ODJlM2dYUEpFM09Eb3BhXCIsXCJpbnZlcnRlZFwiOlwiT096bkNiQWJqT0xjNF9iQ0VxZnlcIixcIm5vU2hhZG93XCI6XCJ4ckh4ZmNlMDM0ZGdZTkVrbmxWTVwiLFwibm9Cb3JkZXJcIjpcImVIdF9SSXE4SkdvWUhjNGlDb2VnXCIsXCJ0cmFuc3BhcmVudFwiOlwibmZncXRTZ2ZydHJHRkRXZlpvblFcIixcImRpc2FibGVkXCI6XCJJX25oSjl1NnBURF8yU0YzcWxfbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwick81VzZEUWs0TnRvV3J3bUtNV2dcIixcImhhc092ZXJsYXlcIjpcImxsdm5tSThLMTNnOVBUQmlDTnozXCIsXCJvdmVybGF5XCI6XCJHVmsyajh3VjF0M2dZNXVYUTRxSVwiLFwiaW1hZ2VcIjpcImdYallxS2U5dzNOZ1l1cll3VVFwXCIsXCJjb3ZlclwiOlwiX2w3T05PV2F5cjh0eXVHaXlVc2NcIixcImNvbnRhaW5cIjpcIlNZak9iOGxBaG1EYmR5bEZJUVk5XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJIa3JvelNmbGxURmxra2JxeFhXaFwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInh5SFhoaEhFWVhNWWVhdldad19OXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJSRFp5bENNbEdmZUNVd1NieWVJcVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiaThHdV9XMXc4V0JBWWZsTElZendcIixcImhlYWRlclwiOlwiR3A3Ujh3WXdhTHRGb0tGY1J0Z05cIixcImhlYWRlckxhYmVsXCI6XCJWR2tvdE1UbnFQUmFLY0dWOFJqZ1wiLFwibGlzdFwiOlwidmc5UUx0Q1lUQXM1eDNmRjc5enBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJsaXN0Vmlld0l0ZW1cIjpcIlpGVWQ3b1NwUEx0MEVkMlhxYVdaXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudVwiOlwieFE5QmZrMFgxSG1aZ2loQ3V0WlZcIixcIm9wZW5cIjpcInV0djlGWU9VN1EwSk5uWlcxZWp2XCIsXCJlbnRyYW5jZVwiOlwieVlLamNDdkQyTDk0RnBQZ09pZ1FcIixcImhlYWRlclwiOlwid05MODZzOXpHRmk4WEsxMUtsb1JcIixcImZvb3RlclwiOlwibXU0SmV2MWM0S2NpZmVGOE16cWdcIixcIm5vQm9yZGVyXCI6XCJFYVBTakwxblhzejdUQ3gxMUxyZlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwia1loN0RLWXFINmpkTFhkN1BkSndcIixcIm1lbnVDb250YWluZXJcIjpcIlFsZUFPM3ltVGxpVTZaTkJReGZnXCIsXCJ0b3BcIjpcImF4ZmNyalNINGx2dWp6cnNrMlFwXCIsXCJyaWdodFwiOlwiTHRWbHRXM0JQWjVnTlhWeHhrclBcIixcImxlZnRcIjpcIlBSYjVmOFhjTVpPY1k1dWZQTWRxXCIsXCJib3R0b21cIjpcIl9fTVo1T29pSXJWaWRGWGJRZmp1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcImdHWmZfR3NXc3drcjBOVERfbmJRXCIsXCJub1BhZGRpbmdcIjpcIkNNMmJIU0N4d3VpdE1lczd1OVdmXCIsXCJhY3RpdmVcIjpcInM0dEpsSzRPRmMzcm5YTDBNeHFrXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUxpbmtJdGVtXCI6XCJYMUY0U1FraFFoMGZ4ejVZdTN0SFwiLFwibm9QYWRkaW5nXCI6XCJrcERMWFpTRDJLcDE5aDlzdVJMQVwiLFwiYWN0aXZlXCI6XCJJd0lUakduNnZUWnRlRUtqTm9ZY1wiLFwibWVudUl0ZW1cIjpcImxkb1I2cEdPcnRnSE1YU3BtSDdGXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiajBoOWhkX2dsdkk5eGRPbmFhdVlcIixcIm5vT3ZlcmxheVwiOlwiU0w0OFN6WnVmS2dkTWlHWTNZVE5cIixcIm1vZGFsXCI6XCJoVFhjWmV2R3l5STBBY3ZwclhWSlwiLFwidHJhbnNwYXJlbnRcIjpcImlicWxvRzFIeEh4M3N0ZGtWWlNqXCIsXCJub1NoYWRvd1wiOlwiSUVvNXZFZWZ0dkxwbXdpMFZ5akRcIixcIm1vZGFsQnV0dG9uXCI6XCJGb1BmQzNqN2NJZzJCWWZ6cVFHRVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm51bXBhZFwiOlwiR2V2YmJHM0QwUjM0eEdVRnM1WTFcIixcIm51bWJlcnNcIjpcImZMNUkxV0tYQ2FVOXZyQkd5SkI0XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiRGg2anNRMTVlTXlkc1NNVEN3UndcIixcInRyYW5zcGFyZW50XCI6XCJXVDZPUGxqQzJxZmJBV3NrMHo0clwiLFwiZml4ZWRcIjpcInB1NnM5TWo1VDFZSWdtdjRMT25DXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaGVhZGVyXCI6XCJXU1lZQkF6NTNkaHF1SU9aUFdCUFwiLFwibGFiZWxcIjpcImI1NWh5WjBvSGwwczRPdDlPaHdNXCIsXCJleHBhbmRlZFwiOlwiTjNBek81a1psaDRIQVBrbm5ZenFcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlNtQ2k0eE94RXNMdGk2MUdvWWs0XCIsXCJzZWxlY3RlZFwiOlwiXzRySnRDT1pwbmYzeG44cG1GdkNRXCIsXCJjaGVja2JveENvbnRhaW5lclwiOlwiTVNYWkY3eGNDNWFvcUhscXBJMGdcIixcImNoZWNrYm94XCI6XCJOSmpxOV9nQWVkRFJyT0VfWFdFMVwiLFwibGFiZWxcIjpcInZ3bURMYzk2RDl0WGdXcXM0SUt6XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJlM3lYSkJyWVRXNHNWWktZMk5GbVwiLFwic2VsZWN0QWxsQ29udGFpbmVyXCI6XCJjekhMYTRMM3RSQ0pEQ2lEQjZBelwiLFwiY2hlY2tib3hcIjpcImlLcWpXVWQ5NnpTcDl4bW9jWHprXCIsXCJjaGVja2JveENvbnRhaW5lclwiOlwiYXhpaDlFbnV6SzFmd2hxWURWUkFcIixcImxhYmVsXCI6XCJxNVdzOWhyOFpNWDdmU3ZES19xblwiLFwibm9PcHRpb25zXCI6XCJvdkt2QjVIOEVvRnpudU1xVXVqbFwiLFwic2VhcmNoS2V5d29yZFwiOlwiVHdjVmFSRHo4Y29rSUs5RDlEeEpcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIml4M2FaV01lTjVBbDRVSzh5ZWJKXCIsXCJpY29uU2VhcmNoQ29udGFpbmVyXCI6XCJaNUxQeDQ3eWJFS2VYMjlYQllCQ1wiLFwicmVzZXRCdXR0b25cIjpcImhqVDlaWHZtdmM1UVVydXd6OEVsXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJFVEdiWFRkWUFwMEc0MFRKUExuS1wiLFwiZGlzYWJsZWRcIjpcIm5FQ2dHZFhPc3BVclFXSGp6d2tnXCIsXCJoZWFkZXJcIjpcIlhBb0poeFRBcGNSOWxHZWd5cDlBXCIsXCJhY3RpdmVcIjpcImViZW16dFpFV0lWNF82QXNLUFFIXCIsXCJjb250ZW50XCI6XCJyUkRXdjJxcXdTckJ5M2V2WjdEd1wiLFwibm9PcHRpb25zXCI6XCJmTFA0eDRJeG55aVdocDVCUDVzVFwiLFwic2VhcmNoQ29udGFpbmVyXCI6XCJ5T0VDREplRFZUNXo1WWFYcGVKblwiLFwiaWNvbkJ1dHRvblwiOlwiYVZLcDNIM0pXcmFCZjdHNVVkYVBcIixcImV4cGFuZGVkXCI6XCJCcnhydEQzYU1YN0lVNTJyQTIyMFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInBsYWNlaG9sZGVyXCI6XCJkZGxSaWRuSXpZaFFDOURHcGdJdFwiLFwiYWN0aXZlXCI6XCJzaEhzRUpHdGJ6NGNtQTZ4MUcxbFwiLFwidGFnV3JhcHBlclwiOlwiQkdFU2hjN3F1MmZrOURaRTJSVXNcIixcInNlbGVjdGVkT3B0aW9uXCI6XCJtYTlCSWp1R0NRZUtGNDRzZ3VjVFwiLFwic2VsZWN0ZWRPcHRpb25zXCI6XCJuUnBBd3Y5N0Nlc3FRYkRMY2V0OVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZzVPUjBhT05PVzFPczF4dGtOSGlcIixcInRhYmxlXCI6XCJzTVIxVmI2MlhFdk9PV1JyV2M0UVwiLFwicGxhY2Vob2xkZXJDb250YWluZXJcIjpcIl83eDJ6N3Bfa2JRT0xEbUVYNTRpQVwiLFwic2Nyb2xsYmFyQ29udGFpbmVyXCI6XCJFQUgxNFhQZUpCdURXR3A1TlZZb1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiajRQaWdKT0w1RGd6RDhPWXhza3pcIixcImlzSGVhZGVyU3RpY2t5XCI6XCJBWVJfNEhlb2xBakpDT3NsM0haSlwiLFwiYm9yZGVyQm90dG9tXCI6XCJpWnJEM3RIMTJ6RElGT1d2SlVEN1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRhYmxlSGVhZGVyQ2VsbFwiOlwiSmNBMVZ6VjRNd1ZRM05FaDB2ekVcIixcInNvcnRJY29uVmlzaWJsZVwiOlwiSXE3T3hzUXpMMDZ4ajk4TzBMcUpcIixcInNvcnRhYmxlXCI6XCJWU1RTaFk3TFRoX0lJam5yUF9fbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZE92aWdTZ2h4eVE0Q2JiQ01rQ1JcIixcImFjdGl2ZVwiOlwidHFuWWRZMEh0RGxtVzYxdGpHYlFcIixcImhhc0Fycm93XCI6XCJxcU82YTFqTkw2SFRKRzdIUjExdFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiQXZSN1dDRFJ4Q3d2UlVBX2o4MFBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInpLRjM0YUt2WVpuYkx1WnpqRWVPXCIsXCJjb250ZW50XCI6XCJvXzIxcl9FakxLQjN4aGdHeTc0c1wiLFwiY2xvc2VCdXR0b25cIjpcIlpaUFJaTFVxOU1ReWlmRDh4MmpIXCIsXCJkaXNhYmxlZFwiOlwidUNMejB2Yk5uUVpGWDhrVnVVaUdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImd3WUtSUHBHZElNVlhraU4wSDlCXCIsXCJzY3JvbGxhYmxlXCI6XCJvdmRqd2hyMjFhd3YyQWdpUUVkMlwiLFwidGFnSW5wdXRcIjpcImF2SW1HczNYY0xlRExHaHhEOGJ3XCIsXCJkaXNhYmxlZFwiOlwieVQ4UHA4VFV2UDdzUVNHZUdMTkpcIixcInRleHRJbnB1dFwiOlwiWmlOTmYyb0xWakV4eHA5UlQyc19cIixcInNtYWxsXCI6XCJMZW1NVVRzZWlneEhibUlZVlZUY1wiLFwibWVkaXVtXCI6XCJQVUhKZE03WkViM0xGUmVNMV9VZ1wiLFwibGFyZ2VcIjpcImo5bWs1MmhHaG9Gd2p3NEZXSFE5XCIsXCJ4bGFyZ2VcIjpcIkVpV3FlRnFRWEU5TEhVaDF2eHBYXCIsXCJub0JvcmRlclwiOlwiTzZXc09wVVpvWmVUaFViX1ZpWG5cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcIk5QWnJrc0NwblhWSlNxX3NuSGpSXCIsXCJzbWFsbFwiOlwialFHcmlRSlNhMDR6c29HMWEydTlcIixcIm1lZGl1bVwiOlwibFZvWTlEcDE3SE9CaW5NajBRN29cIixcImxhcmdlXCI6XCJRbFVhUGJYOEVhSWk3clo0RmI4b1wiLFwieGxhcmdlXCI6XCJyWVBPTTlmTnRWTGRQRnlXS2tHRVwiLFwibm9Cb3JkZXJcIjpcIktEVElOc0hkb2xZUmVTYkxjb29IXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcInpGaXVBVGdzU0I0MlZkRW1jSlpZXCIsXCJlbnRyYW5jZVwiOlwiUjhycE9VT3RuZ1lPRXQ3STBwR01cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdENvbnRhaW5lclwiOlwiWGxMUU9lNDc0T3RCaWFjX2dVN0hcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b29sdGlwXCI6XCJLbTZVVXkwanBxTTBMQTJlWGNjY1wiLFwiYWJzb2x1dGVcIjpcImU1MHpFanRmUUswMGxmXzg4NE9ZXCIsXCJmaXhlZFwiOlwianF4VDRNY09lVUREbkdzZVprQkxcIixcImxlZnRcIjpcInlCdjFsd0RIcGV4eE8zRFBwZDF2XCIsXCJyaWdodFwiOlwidjg1MkV4eG1RNkF0U1FGMnNYOEFcIixcInRvcFwiOlwiaVYyeXpQaXpvb3U5b21XODExaGdcIixcImJvdHRvbVwiOlwiVm1tRThFTnNDa3pid0xwTDNYSmdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInlZOUhWNDBJVFRXZ0FWOHFMdzF3XCIsXCJoYXNPdmVybGF5XCI6XCJ6dWI1YnFkVlhtNE5GeHBJNEhCZlwiLFwidmlkZW9cIjpcIk1WQ0RWamZnbUhFN1FlbWNZeEdsXCIsXCJjb3ZlclwiOlwiVjRuRWNtMTc5dlplMk1MZ1JWYU1cIixcImNvbnRhaW5cIjpcInUyX01mZUNqTVNsX2FCTkpuNW5MXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJsamZzWXM4QlFxbGVLemJMa2thZFwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIkhKdFJxYkFGTE9uWFZ5R3o4aUZVXCIsXCJvdmVybGF5XCI6XCJBTEhoT0hBZUxsQkR5MURwWXFpdlwifTsiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IaW50ID0gdm9pZCAwO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5leHBvcnRzLkhpbnQgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBjaGlsZCA9IHJlYWN0XzEuZGVmYXVsdC5DaGlsZHJlbi5vbmx5KHByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoKChfYiA9IChfYSA9IGNoaWxkLnR5cGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b1N0cmluZygpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudG9Mb3dlckNhc2UoKSkgIT09ICdpbnB1dCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJlYWN0LWF1dG9jb21wbGV0ZS1oaW50OiAnSGludCcgb25seSBhY2NlcHRzIGFuICdpbnB1dCcgZWxlbWVudCBhcyBjaGlsZC5cIik7XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0gcHJvcHMub3B0aW9ucywgZGlzYWJsZUhpbnQgPSBwcm9wcy5kaXNhYmxlSGludCwgYWxsb3dUYWJGaWxsID0gcHJvcHMuYWxsb3dUYWJGaWxsLCBhbGxvd0VudGVyRmlsbCA9IHByb3BzLmFsbG93RW50ZXJGaWxsLCBvbkZpbGwgPSBwcm9wcy5vbkZpbGwsIG9uSGludCA9IHByb3BzLm9uSGludCwgdmFsdWVNb2RpZmllciA9IHByb3BzLnZhbHVlTW9kaWZpZXI7XG4gICAgdmFyIGNoaWxkUHJvcHMgPSBjaGlsZC5wcm9wcztcbiAgICB2YXIgbWFpbklucHV0UmVmID0gcmVhY3RfMS51c2VSZWYobnVsbCk7XG4gICAgdmFyIGhpbnRXcmFwcGVyUmVmID0gcmVhY3RfMS51c2VSZWYobnVsbCk7XG4gICAgdmFyIGhpbnRSZWYgPSByZWFjdF8xLnVzZVJlZihudWxsKTtcbiAgICB2YXIgX2MgPSByZWFjdF8xLnVzZVN0YXRlKCcnKSwgdW5Nb2RpZmllZElucHV0VGV4dCA9IF9jWzBdLCBzZXRVbm1vZGlmaWVkSW5wdXRUZXh0ID0gX2NbMV07XG4gICAgdmFyIF9kID0gcmVhY3RfMS51c2VTdGF0ZSgnJyksIHRleHQgPSBfZFswXSwgc2V0VGV4dCA9IF9kWzFdO1xuICAgIHZhciBfZSA9IHJlYWN0XzEudXNlU3RhdGUoJycpLCBoaW50ID0gX2VbMF0sIHNldEhpbnQgPSBfZVsxXTtcbiAgICB2YXIgX2YgPSByZWFjdF8xLnVzZVN0YXRlKCksIG1hdGNoID0gX2ZbMF0sIHNldE1hdGNoID0gX2ZbMV07XG4gICAgdmFyIF9nID0gcmVhY3RfMS51c2VTdGF0ZSgpLCBjaGFuZ2VFdmVudCA9IF9nWzBdLCBzZXRDaGFuZ2VFdmVudCA9IF9nWzFdO1xuICAgIHJlYWN0XzEudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdmFyIGR1cGxpY2F0ZSA9IHV0aWxzXzEuZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24ob3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQ6IFxcXCJcIiArIGR1cGxpY2F0ZSArIFwiXFxcIiBvY2N1cnMgbW9yZSB0aGFuIG9uY2UgYW5kIG1heSBjYXVzZSBlcnJvcnMuIE9wdGlvbnMgc2hvdWxkIG5vdCBjb250YWluIGR1cGxpY2F0ZSB2YWx1ZXMhXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW29wdGlvbnNdKTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChkaXNhYmxlSGludCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbnB1dFN0eWxlID0gbWFpbklucHV0UmVmLmN1cnJlbnQgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUobWFpbklucHV0UmVmLmN1cnJlbnQpO1xuICAgICAgICBpbnB1dFN0eWxlICYmIHN0eWxlSGludChoaW50V3JhcHBlclJlZiwgaGludFJlZiwgaW5wdXRTdHlsZSk7XG4gICAgfSk7XG4gICAgdmFyIGdldE1hdGNoID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0IHx8IHRleHQgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiAob3B0aW9uc1swXSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hfMSA9IG9wdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRvTG93ZXJDYXNlKCkgIT09IHRleHQudG9Mb3dlckNhc2UoKSAmJiB4LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0ZXh0LnRvTG93ZXJDYXNlKCkpOyB9KVxuICAgICAgICAgICAgICAgIC5zb3J0KClbMF07XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hfMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBtYXRjaF8yID0gb3B0aW9uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgubGFiZWwudG9Mb3dlckNhc2UoKSAhPT0gdGV4dC50b0xvd2VyQ2FzZSgpICYmIHgubGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHRleHQudG9Mb3dlckNhc2UoKSk7IH0pXG4gICAgICAgICAgICAgICAgLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHV0aWxzXzEuc29ydEFzYyhhLmxhYmVsLCBiLmxhYmVsKTsgfSlbMF07XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hfMjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIHNldEhpbnRUZXh0QW5kSWQgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBzZXRUZXh0KHRleHQpO1xuICAgICAgICB2YXIgbWF0Y2ggPSBnZXRNYXRjaCh0ZXh0KTtcbiAgICAgICAgdmFyIGhpbnQ7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIGhpbnQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBoaW50ID0gbWF0Y2guc2xpY2UodGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGludCA9IG1hdGNoLmxhYmVsLnNsaWNlKHRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRIaW50KGhpbnQpO1xuICAgICAgICBzZXRNYXRjaChtYXRjaCk7XG4gICAgICAgIG9uSGludCAmJiBvbkhpbnQobWF0Y2gpO1xuICAgIH07XG4gICAgdmFyIGhhbmRsZU9uRmlsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGhpbnQgPT09ICcnIHx8ICFjaGFuZ2VFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdVbk1vZGlmaWVkVGV4dCA9IHVuTW9kaWZpZWRJbnB1dFRleHQgKyBoaW50O1xuICAgICAgICBjaGFuZ2VFdmVudC50YXJnZXQudmFsdWUgPSBuZXdVbk1vZGlmaWVkVGV4dDtcbiAgICAgICAgY2hpbGRQcm9wcy5vbkNoYW5nZSAmJiBjaGlsZFByb3BzLm9uQ2hhbmdlKGNoYW5nZUV2ZW50KTtcbiAgICAgICAgc2V0SGludFRleHRBbmRJZCgnJyk7XG4gICAgICAgIG9uRmlsbCAmJiBvbkZpbGwobWF0Y2gpO1xuICAgICAgICBzZXRVbm1vZGlmaWVkSW5wdXRUZXh0KG5ld1VuTW9kaWZpZWRUZXh0KTtcbiAgICB9O1xuICAgIHZhciBzdHlsZUhpbnQgPSBmdW5jdGlvbiAoaGludFdyYXBwZXJSZWYsIGhpbnRSZWYsIGlucHV0U3R5bGUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKChfYSA9IGhpbnRXcmFwcGVyUmVmID09PSBudWxsIHx8IGhpbnRXcmFwcGVyUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBoaW50V3JhcHBlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3R5bGUpIHtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuZm9udEZhbWlseSA9IGlucHV0U3R5bGUuZm9udEZhbWlseTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuZm9udFNpemUgPSBpbnB1dFN0eWxlLmZvbnRTaXplO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS53aWR0aCA9IGlucHV0U3R5bGUud2lkdGg7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IGlucHV0U3R5bGUuaGVpZ2h0O1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5saW5lSGVpZ2h0ID0gaW5wdXRTdHlsZS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5ib3hTaXppbmcgPSBpbnB1dFN0eWxlLmJveFNpemluZztcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUubWFyZ2luID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdtYXJnaW4nKTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUucGFkZGluZyA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAncGFkZGluZycpO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5ib3JkZXJTdHlsZSA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAnYm9yZGVyJywgJ3N0eWxlJyk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmJvcmRlcldpZHRoID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdib3JkZXInLCAnd2lkdGgnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKF9iID0gaGludFJlZiA9PT0gbnVsbCB8fCBoaW50UmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBoaW50UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zdHlsZSkge1xuICAgICAgICAgICAgaGludFJlZi5jdXJyZW50LnN0eWxlLmZvbnRGYW1pbHkgPSBpbnB1dFN0eWxlLmZvbnRGYW1pbHk7XG4gICAgICAgICAgICBoaW50UmVmLmN1cnJlbnQuc3R5bGUuZm9udFNpemUgPSBpbnB1dFN0eWxlLmZvbnRTaXplO1xuICAgICAgICAgICAgaGludFJlZi5jdXJyZW50LnN0eWxlLmxpbmVIZWlnaHQgPSBpbnB1dFN0eWxlLmxpbmVIZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHNldENoYW5nZUV2ZW50KGUpO1xuICAgICAgICBlLnBlcnNpc3QoKTtcbiAgICAgICAgc2V0VW5tb2RpZmllZElucHV0VGV4dChlLnRhcmdldC52YWx1ZSk7XG4gICAgICAgIHZhciBtb2RpZmllZFZhbHVlID0gdmFsdWVNb2RpZmllciA/IHZhbHVlTW9kaWZpZXIoZS50YXJnZXQudmFsdWUpIDogZS50YXJnZXQudmFsdWU7XG4gICAgICAgIHNldEhpbnRUZXh0QW5kSWQobW9kaWZpZWRWYWx1ZSk7XG4gICAgICAgIGNoaWxkUHJvcHMub25DaGFuZ2UgJiYgY2hpbGRQcm9wcy5vbkNoYW5nZShlKTtcbiAgICB9O1xuICAgIHZhciBvbkZvY3VzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgc2V0SGludFRleHRBbmRJZChlLnRhcmdldC52YWx1ZSk7XG4gICAgICAgIGNoaWxkUHJvcHMub25Gb2N1cyAmJiBjaGlsZFByb3BzLm9uRm9jdXMoZSk7XG4gICAgfTtcbiAgICB2YXIgb25CbHVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgLy9Pbmx5IGJsdXIgaXQgaWYgdGhlIG5ldyBmb2N1cyBpc24ndCB0aGUgdGhlIGhpbnQgaW5wdXRcbiAgICAgICAgaWYgKChoaW50UmVmID09PSBudWxsIHx8IGhpbnRSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGhpbnRSZWYuY3VycmVudCkgIT09IGUucmVsYXRlZFRhcmdldCkge1xuICAgICAgICAgICAgc2V0SGludFRleHRBbmRJZCgnJyk7XG4gICAgICAgICAgICBjaGlsZFByb3BzLm9uQmx1ciAmJiBjaGlsZFByb3BzLm9uQmx1cihlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIEFSUk9XUklHSFQgPSAnQXJyb3dSaWdodCc7XG4gICAgdmFyIFRBQiA9ICdUYWInO1xuICAgIHZhciBFTlRFUiA9ICdFbnRlcic7XG4gICAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBjYXJldElzQXRUZXh0RW5kID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIEZvciBzZWxlY3RhYmxlIGlucHV0IHR5cGVzIChcInRleHRcIiwgXCJzZWFyY2hcIiksIG9ubHkgc2VsZWN0IHRoZSBoaW50IGlmXG4gICAgICAgICAgICAvLyBpdCdzIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IHZhbHVlLiBGb3Igbm9uLXNlbGVjdGFibGUgdHlwZXMgKFwiZW1haWxcIixcbiAgICAgICAgICAgIC8vIFwibnVtYmVyXCIpLCBhbHdheXMgc2VsZWN0IHRoZSBoaW50LlxuICAgICAgICAgICAgdmFyIGlzTm9uU2VsZWN0YWJsZVR5cGUgPSBlLmN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uRW5kID09PSBudWxsO1xuICAgICAgICAgICAgdmFyIGNhcmV0SXNBdFRleHRFbmQgPSBpc05vblNlbGVjdGFibGVUeXBlIHx8IGUuY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgPT09IGUuY3VycmVudFRhcmdldC52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gY2FyZXRJc0F0VGV4dEVuZDtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgaWYgKGNhcmV0SXNBdFRleHRFbmQgJiYgZS5rZXkgPT09IEFSUk9XUklHSFQpIHtcbiAgICAgICAgICAgIGhhbmRsZU9uRmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNhcmV0SXNBdFRleHRFbmQgJiYgYWxsb3dUYWJGaWxsICYmIGUua2V5ID09PSBUQUIgJiYgaGludCAhPT0gJycpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGhhbmRsZU9uRmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNhcmV0SXNBdFRleHRFbmQgJiYgYWxsb3dFbnRlckZpbGwgJiYgZS5rZXkgPT09IEVOVEVSICYmIGhpbnQgIT09ICcnKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZFByb3BzLm9uS2V5RG93biAmJiBjaGlsZFByb3BzLm9uS2V5RG93bihlKTtcbiAgICB9O1xuICAgIHZhciBvbkhpbnRDbGljayA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGhpbnRDYXJldFBvc2l0aW9uID0gZS5jdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCB8fCAwO1xuICAgICAgICAvLyBJZiB1c2VyIGNsaWNrcyB0aGUgcG9zaXRpb24gYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGhpbnQsIFxuICAgICAgICAvLyBtb3ZlIGZvY3VzIHRvIHRoZSBlbmQgb2YgdGhlIG1haW5JbnB1dCB0ZXh0XG4gICAgICAgIGlmIChoaW50Q2FyZXRQb3NpdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgKF9hID0gbWFpbklucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWhpbnQgJiYgaGludCAhPT0gJycpIHtcbiAgICAgICAgICAgIGhhbmRsZU9uRmlsbCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICAoX2EgPSBtYWluSW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdmFyIGNhcmV0UG9zaXRpb24gPSB0ZXh0Lmxlbmd0aCArIGhpbnRDYXJldFBvc2l0aW9uO1xuICAgICAgICAgICAgICAgIChfYiA9IG1haW5JbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2V0U2VsZWN0aW9uUmFuZ2UoY2FyZXRQb3NpdGlvbiwgY2FyZXRQb3NpdGlvbik7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIGNoaWxkUmVmID0gcmVhY3RfMS5jbG9uZUVsZW1lbnQoY2hpbGQpLnJlZjtcbiAgICB2YXIgbWFpbklucHV0ID0gcmVhY3RfMS5jbG9uZUVsZW1lbnQoY2hpbGQsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjaGlsZFByb3BzKSwgeyBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgIG9uQmx1cjogb25CbHVyLFxuICAgICAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgICAgICBvbktleURvd246IG9uS2V5RG93biwgcmVmOiBjaGlsZFJlZiAmJiB0eXBlb2YgKGNoaWxkUmVmKSAhPT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gdXRpbHNfMS5tZXJnZVJlZnMoY2hpbGRSZWYsIG1haW5JbnB1dFJlZilcbiAgICAgICAgICAgIDogbWFpbklucHV0UmVmIH0pKTtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJhaC1pbnB1dC13cmFwcGVyXCIsIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICAgICAgICB9IH0sIGRpc2FibGVIaW50XG4gICAgICAgID8gY2hpbGRcbiAgICAgICAgOiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocmVhY3RfMS5kZWZhdWx0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgbWFpbklucHV0LFxuICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJhaC1oaW50LXdyYXBwZXJcIiwgcmVmOiBoaW50V3JhcHBlclJlZiwgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4zNSknLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgIH0gfSxcbiAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6ICdyYWgtdGV4dC1maWxsZXInLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiAncHJlJ1xuICAgICAgICAgICAgICAgICAgICB9IH0sIHRleHQpLFxuICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyBjbGFzc05hbWU6IFwicmFoLWhpbnRcIiwgcmVmOiBoaW50UmVmLCBvbkNsaWNrOiBvbkhpbnRDbGljaywgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICFoaW50IHx8IGhpbnQgPT09ICcnID8gJ25vbmUnIDogJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjMwKScsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgICAgICAgICAgICAgICAgIH0sIGRlZmF1bHRWYWx1ZTogaGludCwgdGFiSW5kZXg6IC0xIH0pKSkpKSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEZpcnN0RHVwbGljYXRlT3B0aW9uID0gZXhwb3J0cy5zb3J0QXNjID0gZXhwb3J0cy5pbnRlcnBvbGF0ZVN0eWxlID0gZXhwb3J0cy5tZXJnZVJlZnMgPSB2b2lkIDA7XG5mdW5jdGlvbiBtZXJnZVJlZnMoKSB7XG4gICAgdmFyIHJlZnMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICByZWZzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBmaWx0ZXJlZFJlZnMgPSByZWZzLmZpbHRlcihCb29sZWFuKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGluc3QpIHtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBmaWx0ZXJlZFJlZnNfMSA9IGZpbHRlcmVkUmVmczsgX2kgPCBmaWx0ZXJlZFJlZnNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciByZWYgPSBmaWx0ZXJlZFJlZnNfMVtfaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJlZihpbnN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlZikge1xuICAgICAgICAgICAgICAgIHJlZi5jdXJyZW50ID0gaW5zdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnRzLm1lcmdlUmVmcyA9IG1lcmdlUmVmcztcbjtcbi8vIElFIGRvZXNuJ3Qgc2VlbSB0byBnZXQgdGhlIGNvbXBvc2l0ZSBjb21wdXRlZCB2YWx1ZSAoZWc6ICdwYWRkaW5nJyxcbi8vICdib3JkZXJTdHlsZScsIGV0Yy4pLCBzbyBnZW5lcmF0ZSB0aGVzZSBmcm9tIHRoZSBpbmRpdmlkdWFsIHZhbHVlcy5cbmZ1bmN0aW9uIGludGVycG9sYXRlU3R5bGUoc3R5bGVzLCBhdHRyLCBzdWJhdHRyKSB7XG4gICAgaWYgKHN1YmF0dHIgPT09IHZvaWQgMCkgeyBzdWJhdHRyID0gJyc7IH1cbiAgICAvLyBUaXRsZS1jYXNlIHRoZSBzdWItYXR0cmlidXRlLlxuICAgIGlmIChzdWJhdHRyKSB7XG4gICAgICAgIHN1YmF0dHIgPSBzdWJhdHRyLnJlcGxhY2Uoc3ViYXR0clswXSwgc3ViYXR0clswXS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIFsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0J11cbiAgICAgICAgLy8gQHRzLWlnbm9yZTogKGF0dHIgKyBkaXIgKyBzdWJhdHRyKSBwcm9wZXJ0eSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWVcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoZGlyKSB7IHJldHVybiBzdHlsZXNbYXR0ciArIGRpciArIHN1YmF0dHJdOyB9KVxuICAgICAgICAuam9pbignICcpO1xufVxuZXhwb3J0cy5pbnRlcnBvbGF0ZVN0eWxlID0gaW50ZXJwb2xhdGVTdHlsZTtcbmZ1bmN0aW9uIHNvcnRBc2MoYSwgYikge1xuICAgIGlmIChhID4gYikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgaWYgKGEgPCBiKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5leHBvcnRzLnNvcnRBc2MgPSBzb3J0QXNjO1xuZnVuY3Rpb24gZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24oYXJyYXkpIHtcbiAgICB2YXIgdHJhY2tlciA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRyYWNrZXJbYXJyYXlbaV0ubGFiZWxdKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlbaV0ubGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgdHJhY2tlclthcnJheVtpXS5sYWJlbF0gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmV4cG9ydHMuZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24gPSBnZXRGaXJzdER1cGxpY2F0ZU9wdGlvbjtcbiIsIi8qKiEgXG4gKiBob3RrZXlzLWpzIHYzLjkuNCBcbiAqIEEgc2ltcGxlIG1pY3JvLWxpYnJhcnkgZm9yIGRlZmluaW5nIGFuZCBkaXNwYXRjaGluZyBrZXlib2FyZCBzaG9ydGN1dHMuIEl0IGhhcyBubyBkZXBlbmRlbmNpZXMuIFxuICogXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjIga2Vubnkgd29uZyA8d293b2hvb0BxcS5jb20+IFxuICogaHR0cDovL2pheXdjamxvdmUuZ2l0aHViLmlvL2hvdGtleXMgXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgXG4gKi9cblxudmFyIGlzZmYgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyA/IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgPiAwIDogZmFsc2U7IC8vIOe7keWumuS6i+S7tlxuXG5mdW5jdGlvbiBhZGRFdmVudChvYmplY3QsIGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpIHtcbiAgaWYgKG9iamVjdC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0LmF0dGFjaEV2ZW50KSB7XG4gICAgb2JqZWN0LmF0dGFjaEV2ZW50KFwib25cIi5jb25jYXQoZXZlbnQpLCBmdW5jdGlvbiAoKSB7XG4gICAgICBtZXRob2Qod2luZG93LmV2ZW50KTtcbiAgICB9KTtcbiAgfVxufSAvLyDkv67ppbDplK7ovazmjaLmiJDlr7nlupTnmoTplK7noIFcblxuXG5mdW5jdGlvbiBnZXRNb2RzKG1vZGlmaWVyLCBrZXkpIHtcbiAgdmFyIG1vZHMgPSBrZXkuc2xpY2UoMCwga2V5Lmxlbmd0aCAtIDEpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kcy5sZW5ndGg7IGkrKykge1xuICAgIG1vZHNbaV0gPSBtb2RpZmllclttb2RzW2ldLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgcmV0dXJuIG1vZHM7XG59IC8vIOWkhOeQhuS8oOeahGtleeWtl+espuS4sui9rOaNouaIkOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGdldEtleXMoa2V5KSB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykga2V5ID0gJyc7XG4gIGtleSA9IGtleS5yZXBsYWNlKC9cXHMvZywgJycpOyAvLyDljLnphY3ku7vkvZXnqbrnmb3lrZfnrKYs5YyF5ous56m65qC844CB5Yi26KGo56ym44CB5o2i6aG156ym562J562JXG5cbiAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJywnKTsgLy8g5ZCM5pe26K6+572u5aSa5Liq5b+r5o236ZSu77yM5LulJywn5YiG5YmyXG5cbiAgdmFyIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7IC8vIOW/q+aNt+mUruWPr+iDveWMheWQqycsJ++8jOmcgOeJueauiuWkhOeQhlxuXG4gIGZvciAoOyBpbmRleCA+PSAwOykge1xuICAgIGtleXNbaW5kZXggLSAxXSArPSAnLCc7XG4gICAga2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn0gLy8g5q+U6L6D5L+u6aWw6ZSu55qE5pWw57uEXG5cblxuZnVuY3Rpb24gY29tcGFyZUFycmF5KGExLCBhMikge1xuICB2YXIgYXJyMSA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMSA6IGEyO1xuICB2YXIgYXJyMiA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMiA6IGExO1xuICB2YXIgaXNJbmRleCA9IHRydWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycjIuaW5kZXhPZihhcnIxW2ldKSA9PT0gLTEpIGlzSW5kZXggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0luZGV4O1xufVxuXG52YXIgX2tleU1hcCA9IHtcbiAgYmFja3NwYWNlOiA4LFxuICB0YWI6IDksXG4gIGNsZWFyOiAxMixcbiAgZW50ZXI6IDEzLFxuICByZXR1cm46IDEzLFxuICBlc2M6IDI3LFxuICBlc2NhcGU6IDI3LFxuICBzcGFjZTogMzIsXG4gIGxlZnQ6IDM3LFxuICB1cDogMzgsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gIGRlbDogNDYsXG4gIGRlbGV0ZTogNDYsXG4gIGluczogNDUsXG4gIGluc2VydDogNDUsXG4gIGhvbWU6IDM2LFxuICBlbmQ6IDM1LFxuICBwYWdldXA6IDMzLFxuICBwYWdlZG93bjogMzQsXG4gIGNhcHNsb2NrOiAyMCxcbiAgbnVtXzA6IDk2LFxuICBudW1fMTogOTcsXG4gIG51bV8yOiA5OCxcbiAgbnVtXzM6IDk5LFxuICBudW1fNDogMTAwLFxuICBudW1fNTogMTAxLFxuICBudW1fNjogMTAyLFxuICBudW1fNzogMTAzLFxuICBudW1fODogMTA0LFxuICBudW1fOTogMTA1LFxuICBudW1fbXVsdGlwbHk6IDEwNixcbiAgbnVtX2FkZDogMTA3LFxuICBudW1fZW50ZXI6IDEwOCxcbiAgbnVtX3N1YnRyYWN0OiAxMDksXG4gIG51bV9kZWNpbWFsOiAxMTAsXG4gIG51bV9kaXZpZGU6IDExMSxcbiAgJ+KHqic6IDIwLFxuICAnLCc6IDE4OCxcbiAgJy4nOiAxOTAsXG4gICcvJzogMTkxLFxuICAnYCc6IDE5MixcbiAgJy0nOiBpc2ZmID8gMTczIDogMTg5LFxuICAnPSc6IGlzZmYgPyA2MSA6IDE4NyxcbiAgJzsnOiBpc2ZmID8gNTkgOiAxODYsXG4gICdcXCcnOiAyMjIsXG4gICdbJzogMjE5LFxuICAnXSc6IDIyMSxcbiAgJ1xcXFwnOiAyMjBcbn07IC8vIE1vZGlmaWVyIEtleXNcblxudmFyIF9tb2RpZmllciA9IHtcbiAgLy8gc2hpZnRLZXlcbiAgJ+KHpyc6IDE2LFxuICBzaGlmdDogMTYsXG4gIC8vIGFsdEtleVxuICAn4oylJzogMTgsXG4gIGFsdDogMTgsXG4gIG9wdGlvbjogMTgsXG4gIC8vIGN0cmxLZXlcbiAgJ+KMgyc6IDE3LFxuICBjdHJsOiAxNyxcbiAgY29udHJvbDogMTcsXG4gIC8vIG1ldGFLZXlcbiAgJ+KMmCc6IDkxLFxuICBjbWQ6IDkxLFxuICBjb21tYW5kOiA5MVxufTtcbnZhciBtb2RpZmllck1hcCA9IHtcbiAgMTY6ICdzaGlmdEtleScsXG4gIDE4OiAnYWx0S2V5JyxcbiAgMTc6ICdjdHJsS2V5JyxcbiAgOTE6ICdtZXRhS2V5JyxcbiAgc2hpZnRLZXk6IDE2LFxuICBjdHJsS2V5OiAxNyxcbiAgYWx0S2V5OiAxOCxcbiAgbWV0YUtleTogOTFcbn07XG52YXIgX21vZHMgPSB7XG4gIDE2OiBmYWxzZSxcbiAgMTg6IGZhbHNlLFxuICAxNzogZmFsc2UsXG4gIDkxOiBmYWxzZVxufTtcbnZhciBfaGFuZGxlcnMgPSB7fTsgLy8gRjF+RjEyIHNwZWNpYWwga2V5XG5cbmZvciAodmFyIGsgPSAxOyBrIDwgMjA7IGsrKykge1xuICBfa2V5TWFwW1wiZlwiLmNvbmNhdChrKV0gPSAxMTEgKyBrO1xufVxuXG52YXIgX2Rvd25LZXlzID0gW107IC8vIOiusOW9leaRgeS4i+eahOe7keWumumUrlxuXG52YXIgd2luTGlzdGVuZEZvY3VzID0gZmFsc2U7IC8vIHdpbmRvd+aYr+WQpuW3sue7j+ebkeWQrOS6hmZvY3Vz5LqL5Lu2XG5cbnZhciBfc2NvcGUgPSAnYWxsJzsgLy8g6buY6K6k54Ot6ZSu6IyD5Zu0XG5cbnZhciBlbGVtZW50SGFzQmluZEV2ZW50ID0gW107IC8vIOW3sue7keWumuS6i+S7tueahOiKgueCueiusOW9lVxuLy8g6L+U5Zue6ZSu56CBXG5cbnZhciBjb2RlID0gZnVuY3Rpb24gY29kZSh4KSB7XG4gIHJldHVybiBfa2V5TWFwW3gudG9Mb3dlckNhc2UoKV0gfHwgX21vZGlmaWVyW3gudG9Mb3dlckNhc2UoKV0gfHwgeC50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCk7XG59OyAvLyDorr7nva7ojrflj5blvZPliY3ojIPlm7TvvIjpu5jorqTkuLon5omA5pyJJ++8iVxuXG5cbmZ1bmN0aW9uIHNldFNjb3BlKHNjb3BlKSB7XG4gIF9zY29wZSA9IHNjb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5blvZPliY3ojIPlm7RcblxuXG5mdW5jdGlvbiBnZXRTY29wZSgpIHtcbiAgcmV0dXJuIF9zY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5pGB5LiL57uR5a6a6ZSu55qE6ZSu5YC8XG5cblxuZnVuY3Rpb24gZ2V0UHJlc3NlZEtleUNvZGVzKCkge1xuICByZXR1cm4gX2Rvd25LZXlzLnNsaWNlKDApO1xufSAvLyDooajljZXmjqfku7bmjqfku7bliKTmlq0g6L+U5ZueIEJvb2xlYW5cbi8vIGhvdGtleSBpcyBlZmZlY3RpdmUgb25seSB3aGVuIGZpbHRlciByZXR1cm4gdHJ1ZVxuXG5cbmZ1bmN0aW9uIGZpbHRlcihldmVudCkge1xuICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIHZhciB0YWdOYW1lID0gdGFyZ2V0LnRhZ05hbWU7XG4gIHZhciBmbGFnID0gdHJ1ZTsgLy8gaWdub3JlOiBpc0NvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnLCA8aW5wdXQ+IGFuZCA8dGV4dGFyZWE+IHdoZW4gcmVhZE9ubHkgc3RhdGUgaXMgZmFsc2UsIDxzZWxlY3Q+XG5cbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSB8fCAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8IHRhZ05hbWUgPT09ICdTRUxFQ1QnKSAmJiAhdGFyZ2V0LnJlYWRPbmx5KSB7XG4gICAgZmxhZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZsYWc7XG59IC8vIOWIpOaWreaRgeS4i+eahOmUruaYr+WQpuS4uuafkOS4qumUru+8jOi/lOWbnnRydWXmiJbogIVmYWxzZVxuXG5cbmZ1bmN0aW9uIGlzUHJlc3NlZChrZXlDb2RlKSB7XG4gIGlmICh0eXBlb2Yga2V5Q29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICBrZXlDb2RlID0gY29kZShrZXlDb2RlKTsgLy8g6L2s5o2i5oiQ6ZSu56CBXG4gIH1cblxuICByZXR1cm4gX2Rvd25LZXlzLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xO1xufSAvLyDlvqrnjq/liKDpmaRoYW5kbGVyc+S4reeahOaJgOaciSBzY29wZSjojIPlm7QpXG5cblxuZnVuY3Rpb24gZGVsZXRlU2NvcGUoc2NvcGUsIG5ld1Njb3BlKSB7XG4gIHZhciBoYW5kbGVycztcbiAgdmFyIGk7IC8vIOayoeacieaMh+WumnNjb3Bl77yM6I635Y+Wc2NvcGVcblxuICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG5cbiAgZm9yICh2YXIga2V5IGluIF9oYW5kbGVycykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2hhbmRsZXJzLCBrZXkpKSB7XG4gICAgICBoYW5kbGVycyA9IF9oYW5kbGVyc1trZXldO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOykge1xuICAgICAgICBpZiAoaGFuZGxlcnNbaV0uc2NvcGUgPT09IHNjb3BlKSBoYW5kbGVycy5zcGxpY2UoaSwgMSk7ZWxzZSBpKys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIOWmguaenHNjb3Bl6KKr5Yig6Zmk77yM5bCGc2NvcGXph43nva7kuLphbGxcblxuXG4gIGlmIChnZXRTY29wZSgpID09PSBzY29wZSkgc2V0U2NvcGUobmV3U2NvcGUgfHwgJ2FsbCcpO1xufSAvLyDmuIXpmaTkv67ppbDplK5cblxuXG5mdW5jdGlvbiBjbGVhck1vZGlmaWVyKGV2ZW50KSB7XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlO1xuXG4gIHZhciBpID0gX2Rvd25LZXlzLmluZGV4T2Yoa2V5KTsgLy8g5LuO5YiX6KGo5Lit5riF6Zmk5oyJ5Y6L6L+H55qE6ZSuXG5cblxuICBpZiAoaSA+PSAwKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZShpLCAxKTtcbiAgfSAvLyDnibnmrorlpITnkIYgY21tYW5kIOmUru+8jOWcqCBjbW1hbmQg57uE5ZCI5b+r5o236ZSuIGtleXVwIOWPquaJp+ihjOS4gOasoeeahOmXrumimFxuXG5cbiAgaWYgKGV2ZW50LmtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ21ldGEnKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZSgwLCBfZG93bktleXMubGVuZ3RoKTtcbiAgfSAvLyDkv67ppbDplK4gc2hpZnRLZXkgYWx0S2V5IGN0cmxLZXkgKGNvbW1hbmR8fG1ldGFLZXkpIOa4hemZpFxuXG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gZmFsc2U7IC8vIOWwhuS/rumlsOmUrumHjee9ruS4umZhbHNlXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVuYmluZChrZXlzSW5mbykge1xuICAvLyB1bmJpbmQoKSwgdW5iaW5kIGFsbCBrZXlzXG4gIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBkZWxldGUgX2hhbmRsZXJzW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzSW5mbykpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgOiB1bmJpbmQoW3trZXk6ICdjdHJsK2EnLCBzY29wZTogJ3MxJ30sIHtrZXk6ICdjdHJsLWEnLCBzY29wZTogJ3MyJywgc3BsaXRLZXk6ICctJ31dKVxuICAgIGtleXNJbmZvLmZvckVhY2goZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgIGlmIChpbmZvLmtleSkgZWFjaFVuYmluZChpbmZvKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdvYmplY3QnKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIHVuYmluZCh7a2V5OiAnY3RybCthLCBjdHJsK2InLCBzY29wZTonYWJjJ30pXG4gICAgaWYgKGtleXNJbmZvLmtleSkgZWFjaFVuYmluZChrZXlzSW5mbyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnc3RyaW5nJykge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnQgb2xkIG1ldGhvZFxuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB2YXIgc2NvcGUgPSBhcmdzWzBdLFxuICAgICAgICBtZXRob2QgPSBhcmdzWzFdO1xuXG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWV0aG9kID0gc2NvcGU7XG4gICAgICBzY29wZSA9ICcnO1xuICAgIH1cblxuICAgIGVhY2hVbmJpbmQoe1xuICAgICAga2V5OiBrZXlzSW5mbyxcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgc3BsaXRLZXk6ICcrJ1xuICAgIH0pO1xuICB9XG59IC8vIOino+mZpOe7keWumuafkOS4quiMg+WbtOeahOW/q+aNt+mUrlxuXG5cbnZhciBlYWNoVW5iaW5kID0gZnVuY3Rpb24gZWFjaFVuYmluZChfcmVmKSB7XG4gIHZhciBrZXkgPSBfcmVmLmtleSxcbiAgICAgIHNjb3BlID0gX3JlZi5zY29wZSxcbiAgICAgIG1ldGhvZCA9IF9yZWYubWV0aG9kLFxuICAgICAgX3JlZiRzcGxpdEtleSA9IF9yZWYuc3BsaXRLZXksXG4gICAgICBzcGxpdEtleSA9IF9yZWYkc3BsaXRLZXkgPT09IHZvaWQgMCA/ICcrJyA6IF9yZWYkc3BsaXRLZXk7XG4gIHZhciBtdWx0aXBsZUtleXMgPSBnZXRLZXlzKGtleSk7XG4gIG11bHRpcGxlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChvcmlnaW5LZXkpIHtcbiAgICB2YXIgdW5iaW5kS2V5cyA9IG9yaWdpbktleS5zcGxpdChzcGxpdEtleSk7XG4gICAgdmFyIGxlbiA9IHVuYmluZEtleXMubGVuZ3RoO1xuICAgIHZhciBsYXN0S2V5ID0gdW5iaW5kS2V5c1tsZW4gLSAxXTtcbiAgICB2YXIga2V5Q29kZSA9IGxhc3RLZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUobGFzdEtleSk7XG4gICAgaWYgKCFfaGFuZGxlcnNba2V5Q29kZV0pIHJldHVybjsgLy8g5Yik5pat5piv5ZCm5Lyg5YWl6IyD5Zu077yM5rKh5pyJ5bCx6I635Y+W6IyD5Zu0XG5cbiAgICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgdmFyIG1vZHMgPSBsZW4gPiAxID8gZ2V0TW9kcyhfbW9kaWZpZXIsIHVuYmluZEtleXMpIDogW107XG4gICAgX2hhbmRsZXJzW2tleUNvZGVdID0gX2hhbmRsZXJzW2tleUNvZGVdLmZpbHRlcihmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgICAvLyDpgJrov4flh73mlbDliKTmlq3vvIzmmK/lkKbop6PpmaTnu5HlrprvvIzlh73mlbDnm7jnrYnnm7TmjqXov5Tlm55cbiAgICAgIHZhciBpc01hdGNoaW5nTWV0aG9kID0gbWV0aG9kID8gcmVjb3JkLm1ldGhvZCA9PT0gbWV0aG9kIDogdHJ1ZTtcbiAgICAgIHJldHVybiAhKGlzTWF0Y2hpbmdNZXRob2QgJiYgcmVjb3JkLnNjb3BlID09PSBzY29wZSAmJiBjb21wYXJlQXJyYXkocmVjb3JkLm1vZHMsIG1vZHMpKTtcbiAgICB9KTtcbiAgfSk7XG59OyAvLyDlr7nnm5HlkKzlr7nlupTlv6vmjbfplK7nmoTlm57osIPlh73mlbDov5vooYzlpITnkIZcblxuXG5mdW5jdGlvbiBldmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIHNjb3BlLCBlbGVtZW50KSB7XG4gIGlmIChoYW5kbGVyLmVsZW1lbnQgIT09IGVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbW9kaWZpZXJzTWF0Y2g7IC8vIOeci+Wug+aYr+WQpuWcqOW9k+WJjeiMg+WbtFxuXG4gIGlmIChoYW5kbGVyLnNjb3BlID09PSBzY29wZSB8fCBoYW5kbGVyLnNjb3BlID09PSAnYWxsJykge1xuICAgIC8vIOajgOafpeaYr+WQpuWMuemFjeS/rumlsOespu+8iOWmguaenOaciei/lOWbnnRydWXvvIlcbiAgICBtb2RpZmllcnNNYXRjaCA9IGhhbmRsZXIubW9kcy5sZW5ndGggPiAwO1xuXG4gICAgZm9yICh2YXIgeSBpbiBfbW9kcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgeSkpIHtcbiAgICAgICAgaWYgKCFfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPiAtMSB8fCBfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPT09IC0xKSB7XG4gICAgICAgICAgbW9kaWZpZXJzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8g6LCD55So5aSE55CG56iL5bqP77yM5aaC5p6c5piv5L+u6aWw6ZSu5LiN5YGa5aSE55CGXG5cblxuICAgIGlmIChoYW5kbGVyLm1vZHMubGVuZ3RoID09PSAwICYmICFfbW9kc1sxNl0gJiYgIV9tb2RzWzE4XSAmJiAhX21vZHNbMTddICYmICFfbW9kc1s5MV0gfHwgbW9kaWZpZXJzTWF0Y2ggfHwgaGFuZGxlci5zaG9ydGN1dCA9PT0gJyonKSB7XG4gICAgICBpZiAoaGFuZGxlci5tZXRob2QoZXZlbnQsIGhhbmRsZXIpID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZWxzZSBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGV2ZW50LmNhbmNlbEJ1YmJsZSkgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5aSE55CGa2V5ZG93buS6i+S7tlxuXG5cbmZ1bmN0aW9uIGRpc3BhdGNoKGV2ZW50LCBlbGVtZW50KSB7XG4gIHZhciBhc3RlcmlzayA9IF9oYW5kbGVyc1snKiddO1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTsgLy8g6KGo5Y2V5o6n5Lu26L+H5rukIOm7mOiupOihqOWNleaOp+S7tuS4jeinpuWPkeW/q+aNt+mUrlxuXG4gIGlmICghaG90a2V5cy5maWx0ZXIuY2FsbCh0aGlzLCBldmVudCkpIHJldHVybjsgLy8gR2Vja28oRmlyZWZveCnnmoRjb21tYW5k6ZSu5YC8MjI077yM5ZyoV2Via2l0KENocm9tZSnkuK3kv53mjIHkuIDoh7RcbiAgLy8gV2Via2l05bem5Y+zIGNvbW1hbmQg6ZSu5YC85LiN5LiA5qC3XG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuICAvKipcbiAgICogQ29sbGVjdCBib3VuZCBrZXlzXG4gICAqIElmIGFuIElucHV0IE1ldGhvZCBFZGl0b3IgaXMgcHJvY2Vzc2luZyBrZXkgaW5wdXQgYW5kIHRoZSBldmVudCBpcyBrZXlkb3duLCByZXR1cm4gMjI5LlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNTA0MzkzNC9pcy1pdC1vay10by1pZ25vcmUta2V5ZG93bi1ldmVudHMtd2l0aC1rZXljb2RlLTIyOVxuICAgKiBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctZG9tLzIwMTBKdWxTZXAvYXR0LTAxODIva2V5Q29kZS1zcGVjLmh0bWxcbiAgICovXG5cbiAgaWYgKF9kb3duS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmIGtleSAhPT0gMjI5KSBfZG93bktleXMucHVzaChrZXkpO1xuICAvKipcbiAgICogSmVzdCB0ZXN0IGNhc2VzIGFyZSByZXF1aXJlZC5cbiAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgKi9cblxuICBbJ2N0cmxLZXknLCAnYWx0S2V5JywgJ3NoaWZ0S2V5JywgJ21ldGFLZXknXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlOYW1lKSB7XG4gICAgdmFyIGtleU51bSA9IG1vZGlmaWVyTWFwW2tleU5hbWVdO1xuXG4gICAgaWYgKGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaChrZXlOdW0pO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPiAtMSkge1xuICAgICAgX2Rvd25LZXlzLnNwbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pLCAxKTtcbiAgICB9IGVsc2UgaWYgKGtleU5hbWUgPT09ICdtZXRhS2V5JyAmJiBldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpeCBpZiBDb21tYW5kIGlzIHByZXNzZWQ6XG4gICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgKi9cbiAgICAgIGlmICghKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KSkge1xuICAgICAgICBfZG93bktleXMgPSBfZG93bktleXMuc2xpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSB0cnVlOyAvLyDlsIbnibnmrorlrZfnrKbnmoRrZXnms6jlhozliLAgaG90a2V5cyDkuIpcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYXN0ZXJpc2spIHJldHVybjtcbiAgfSAvLyDlsIYgbW9kaWZpZXJNYXAg6YeM6Z2i55qE5L+u6aWw6ZSu57uR5a6a5YiwIGV2ZW50IOS4rVxuXG5cbiAgZm9yICh2YXIgZSBpbiBfbW9kcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIGUpKSB7XG4gICAgICBfbW9kc1tlXSA9IGV2ZW50W21vZGlmaWVyTWFwW2VdXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXl3Y2psb3ZlL2hvdGtleXMvcHVsbC8xMjlcbiAgICogVGhpcyBzb2x2ZXMgdGhlIGlzc3VlIGluIEZpcmVmb3ggb24gV2luZG93cyB3aGVyZSBob3RrZXlzIGNvcnJlc3BvbmRpbmcgdG8gc3BlY2lhbCBjaGFyYWN0ZXJzIHdvdWxkIG5vdCB0cmlnZ2VyLlxuICAgKiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgY3RybCthbHQrbSBvbiBhIFN3ZWRpc2gga2V5Ym9hcmQgd2hpY2ggaXMgdXNlZCB0byB0eXBlIM68LlxuICAgKiBCcm93c2VyIHN1cHBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9a2V5Ym9hcmRldmVudC1nZXRtb2RpZmllcnN0YXRlXG4gICAqL1xuXG5cbiAgaWYgKGV2ZW50LmdldE1vZGlmaWVyU3RhdGUgJiYgIShldmVudC5hbHRLZXkgJiYgIWV2ZW50LmN0cmxLZXkpICYmIGV2ZW50LmdldE1vZGlmaWVyU3RhdGUoJ0FsdEdyYXBoJykpIHtcbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTcpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTcpO1xuICAgIH1cblxuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxOCkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxOCk7XG4gICAgfVxuXG4gICAgX21vZHNbMTddID0gdHJ1ZTtcbiAgICBfbW9kc1sxOF0gPSB0cnVlO1xuICB9IC8vIOiOt+WPluiMg+WbtCDpu5jorqTkuLogYGFsbGBcblxuXG4gIHZhciBzY29wZSA9IGdldFNjb3BlKCk7IC8vIOWvueS7u+S9leW/q+aNt+mUrumDvemcgOimgeWBmueahOWkhOeQhlxuXG4gIGlmIChhc3Rlcmlzaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN0ZXJpc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhc3Rlcmlza1tpXS5zY29wZSA9PT0gc2NvcGUgJiYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBhc3Rlcmlza1tpXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgYXN0ZXJpc2tbaV0ua2V5dXApKSB7XG4gICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgYXN0ZXJpc2tbaV0sIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8ga2V5IOS4jeWcqCBfaGFuZGxlcnMg5Lit6L+U5ZueXG5cblxuICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgcmV0dXJuO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBfaGFuZGxlcnNba2V5XS5sZW5ndGg7IF9pKyspIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleXVwKSB7XG4gICAgICBpZiAoX2hhbmRsZXJzW2tleV1bX2ldLmtleSkge1xuICAgICAgICB2YXIgcmVjb3JkID0gX2hhbmRsZXJzW2tleV1bX2ldO1xuICAgICAgICB2YXIgc3BsaXRLZXkgPSByZWNvcmQuc3BsaXRLZXk7XG4gICAgICAgIHZhciBrZXlTaG9ydGN1dCA9IHJlY29yZC5rZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgICAgICB2YXIgX2Rvd25LZXlzQ3VycmVudCA9IFtdOyAvLyDorrDlvZXlvZPliY3mjInplK7plK7lgLxcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGtleVNob3J0Y3V0Lmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgX2Rvd25LZXlzQ3VycmVudC5wdXNoKGNvZGUoa2V5U2hvcnRjdXRbYV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfZG93bktleXNDdXJyZW50LnNvcnQoKS5qb2luKCcnKSA9PT0gX2Rvd25LZXlzLnNvcnQoKS5qb2luKCcnKSkge1xuICAgICAgICAgIC8vIOaJvuWIsOWkhOeQhuWGheWuuVxuICAgICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgcmVjb3JkLCBzY29wZSwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5Yik5patIGVsZW1lbnQg5piv5ZCm5bey57uP57uR5a6a5LqL5Lu2XG5cblxuZnVuY3Rpb24gaXNFbGVtZW50QmluZChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50SGFzQmluZEV2ZW50LmluZGV4T2YoZWxlbWVudCkgPiAtMTtcbn1cblxuZnVuY3Rpb24gaG90a2V5cyhrZXksIG9wdGlvbiwgbWV0aG9kKSB7XG4gIF9kb3duS2V5cyA9IFtdO1xuICB2YXIga2V5cyA9IGdldEtleXMoa2V5KTsgLy8g6ZyA6KaB5aSE55CG55qE5b+r5o236ZSu5YiX6KGoXG5cbiAgdmFyIG1vZHMgPSBbXTtcbiAgdmFyIHNjb3BlID0gJ2FsbCc7IC8vIHNjb3Bl6buY6K6k5Li6YWxs77yM5omA5pyJ6IyD5Zu06YO95pyJ5pWIXG5cbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudDsgLy8g5b+r5o236ZSu5LqL5Lu257uR5a6a6IqC54K5XG5cbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5dXAgPSBmYWxzZTtcbiAgdmFyIGtleWRvd24gPSB0cnVlO1xuICB2YXIgc3BsaXRLZXkgPSAnKyc7XG4gIHZhciBjYXB0dXJlID0gZmFsc2U7IC8vIOWvueS4uuiuvuWumuiMg+WbtOeahOWIpOaWrVxuXG4gIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbWV0aG9kID0gb3B0aW9uO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb24pID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIGlmIChvcHRpb24uc2NvcGUpIHNjb3BlID0gb3B0aW9uLnNjb3BlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmVsZW1lbnQpIGVsZW1lbnQgPSBvcHRpb24uZWxlbWVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXl1cCkga2V5dXAgPSBvcHRpb24ua2V5dXA7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5ZG93biAhPT0gdW5kZWZpbmVkKSBrZXlkb3duID0gb3B0aW9uLmtleWRvd247IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uY2FwdHVyZSAhPT0gdW5kZWZpbmVkKSBjYXB0dXJlID0gb3B0aW9uLmNhcHR1cmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uLnNwbGl0S2V5ID09PSAnc3RyaW5nJykgc3BsaXRLZXkgPSBvcHRpb24uc3BsaXRLZXk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgc2NvcGUgPSBvcHRpb247IC8vIOWvueS6juavj+S4quW/q+aNt+mUrui/m+ihjOWkhOeQhlxuXG4gIGZvciAoOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV0uc3BsaXQoc3BsaXRLZXkpOyAvLyDmjInplK7liJfooahcblxuICAgIG1vZHMgPSBbXTsgLy8g5aaC5p6c5piv57uE5ZCI5b+r5o236ZSu5Y+W5b6X57uE5ZCI5b+r5o236ZSuXG5cbiAgICBpZiAoa2V5Lmxlbmd0aCA+IDEpIG1vZHMgPSBnZXRNb2RzKF9tb2RpZmllciwga2V5KTsgLy8g5bCG6Z2e5L+u6aWw6ZSu6L2s5YyW5Li66ZSu56CBXG5cbiAgICBrZXkgPSBrZXlba2V5Lmxlbmd0aCAtIDFdO1xuICAgIGtleSA9IGtleSA9PT0gJyonID8gJyonIDogY29kZShrZXkpOyAvLyAq6KGo56S65Yy56YWN5omA5pyJ5b+r5o236ZSuXG4gICAgLy8g5Yik5pata2V55piv5ZCm5ZyoX2hhbmRsZXJz5Lit77yM5LiN5Zyo5bCx6LWL5LiA5Liq56m65pWw57uEXG5cbiAgICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgX2hhbmRsZXJzW2tleV0gPSBbXTtcblxuICAgIF9oYW5kbGVyc1trZXldLnB1c2goe1xuICAgICAga2V5dXA6IGtleXVwLFxuICAgICAga2V5ZG93bjoga2V5ZG93bixcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1vZHM6IG1vZHMsXG4gICAgICBzaG9ydGN1dDoga2V5c1tpXSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAga2V5OiBrZXlzW2ldLFxuICAgICAgc3BsaXRLZXk6IHNwbGl0S2V5LFxuICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgIH0pO1xuICB9IC8vIOWcqOWFqOWxgGRvY3VtZW505LiK6K6+572u5b+r5o236ZSuXG5cblxuICBpZiAodHlwZW9mIGVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmICFpc0VsZW1lbnRCaW5kKGVsZW1lbnQpICYmIHdpbmRvdykge1xuICAgIGVsZW1lbnRIYXNCaW5kRXZlbnQucHVzaChlbGVtZW50KTtcbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlLCBlbGVtZW50KTtcbiAgICB9LCBjYXB0dXJlKTtcblxuICAgIGlmICghd2luTGlzdGVuZEZvY3VzKSB7XG4gICAgICB3aW5MaXN0ZW5kRm9jdXMgPSB0cnVlO1xuICAgICAgYWRkRXZlbnQod2luZG93LCAnZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IFtdO1xuICAgICAgfSwgY2FwdHVyZSk7XG4gICAgfVxuXG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleXVwJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgICAgY2xlYXJNb2RpZmllcihlKTtcbiAgICB9LCBjYXB0dXJlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmlnZ2VyKHNob3J0Y3V0KSB7XG4gIHZhciBzY29wZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2FsbCc7XG4gIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGRhdGEgPSBfaGFuZGxlcnNba2V5XS5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5zY29wZSA9PT0gc2NvcGUgJiYgaXRlbS5zaG9ydGN1dCA9PT0gc2hvcnRjdXQ7XG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLm1ldGhvZCkge1xuICAgICAgZGF0YS5tZXRob2QoKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgX2FwaSA9IHtcbiAgc2V0U2NvcGU6IHNldFNjb3BlLFxuICBnZXRTY29wZTogZ2V0U2NvcGUsXG4gIGRlbGV0ZVNjb3BlOiBkZWxldGVTY29wZSxcbiAgZ2V0UHJlc3NlZEtleUNvZGVzOiBnZXRQcmVzc2VkS2V5Q29kZXMsXG4gIGlzUHJlc3NlZDogaXNQcmVzc2VkLFxuICBmaWx0ZXI6IGZpbHRlcixcbiAgdHJpZ2dlcjogdHJpZ2dlcixcbiAgdW5iaW5kOiB1bmJpbmQsXG4gIGtleU1hcDogX2tleU1hcCxcbiAgbW9kaWZpZXI6IF9tb2RpZmllcixcbiAgbW9kaWZpZXJNYXA6IG1vZGlmaWVyTWFwXG59O1xuXG5mb3IgKHZhciBhIGluIF9hcGkpIHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfYXBpLCBhKSkge1xuICAgIGhvdGtleXNbYV0gPSBfYXBpW2FdO1xuICB9XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgX2hvdGtleXMgPSB3aW5kb3cuaG90a2V5cztcblxuICBob3RrZXlzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoZGVlcCkge1xuICAgIGlmIChkZWVwICYmIHdpbmRvdy5ob3RrZXlzID09PSBob3RrZXlzKSB7XG4gICAgICB3aW5kb3cuaG90a2V5cyA9IF9ob3RrZXlzO1xuICAgIH1cblxuICAgIHJldHVybiBob3RrZXlzO1xuICB9O1xuXG4gIHdpbmRvdy5ob3RrZXlzID0gaG90a2V5cztcbn1cblxuZXhwb3J0IHsgaG90a2V5cyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgaG90a2V5cyBmcm9tICdob3RrZXlzLWpzJztcbmltcG9ydCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIFVzZSBpc0hvdGtleVByZXNzZWQgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIHZlcnNpb24gNC5cclxuICovXG5cbmZ1bmN0aW9uIHVzZUlzSG90a2V5UHJlc3NlZCgpIHtcbiAgcmV0dXJuIGhvdGtleXMuaXNQcmVzc2VkO1xufVxuXG5ob3RrZXlzLmZpbHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG52YXIgdGFnRmlsdGVyID0gZnVuY3Rpb24gdGFnRmlsdGVyKF9yZWYsIGVuYWJsZU9uVGFncykge1xuICB2YXIgdGFyZ2V0ID0gX3JlZi50YXJnZXQ7XG4gIHZhciB0YXJnZXRUYWdOYW1lID0gdGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lO1xuICByZXR1cm4gQm9vbGVhbih0YXJnZXRUYWdOYW1lICYmIGVuYWJsZU9uVGFncyAmJiBlbmFibGVPblRhZ3MuaW5jbHVkZXModGFyZ2V0VGFnTmFtZSkpO1xufTtcblxudmFyIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQgPSBmdW5jdGlvbiBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGV2KSB7XG4gIHJldHVybiB0YWdGaWx0ZXIoZXYsIFsnSU5QVVQnLCAnVEVYVEFSRUEnLCAnU0VMRUNUJ10pO1xufTtcblxuZnVuY3Rpb24gdXNlSG90a2V5cyhrZXlzLCBjYWxsYmFjaywgb3B0aW9ucywgZGVwcykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgZGVwcyA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBfcmVmMiA9IG9wdGlvbnMgfHwge30sXG4gICAgICBlbmFibGVPblRhZ3MgPSBfcmVmMi5lbmFibGVPblRhZ3MsXG4gICAgICBmaWx0ZXIgPSBfcmVmMi5maWx0ZXIsXG4gICAgICBrZXl1cCA9IF9yZWYyLmtleXVwLFxuICAgICAga2V5ZG93biA9IF9yZWYyLmtleWRvd24sXG4gICAgICBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPSBfcmVmMi5maWx0ZXJQcmV2ZW50RGVmYXVsdCxcbiAgICAgIGZpbHRlclByZXZlbnREZWZhdWx0ID0gX3JlZjIkZmlsdGVyUHJldmVudERlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZmlsdGVyUHJldmVudERlLFxuICAgICAgX3JlZjIkZW5hYmxlZCA9IF9yZWYyLmVuYWJsZWQsXG4gICAgICBlbmFibGVkID0gX3JlZjIkZW5hYmxlZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGVuYWJsZWQsXG4gICAgICBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPSBfcmVmMi5lbmFibGVPbkNvbnRlbnRFZGl0YWJsZSxcbiAgICAgIGVuYWJsZU9uQ29udGVudEVkaXRhYmxlID0gX3JlZjIkZW5hYmxlT25Db250ZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGVuYWJsZU9uQ29udGVudDtcblxuICB2YXIgcmVmID0gdXNlUmVmKG51bGwpOyAvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgY2FsbGJhY2sgZGV0ZXJtaW5lcyBpZiB0aGUgYnJvd3NlcnMgZGVmYXVsdCBiZWhhdmlvciBpcyBwcmV2ZW50ZWQuXG5cbiAgdmFyIG1lbW9pc2VkQ2FsbGJhY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KSB7XG4gICAgdmFyIF9rZXlib2FyZEV2ZW50JHRhcmdldCwgX3JlZiRjdXJyZW50O1xuXG4gICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKGtleWJvYXJkRXZlbnQpKSB7XG4gICAgICByZXR1cm4gIWZpbHRlclByZXZlbnREZWZhdWx0O1xuICAgIH0gLy8gQ2hlY2sgd2hldGhlciB0aGUgaG90a2V5cyB3YXMgdHJpZ2dlcmVkIGluc2lkZSBhbiBpbnB1dCBhbmQgdGhhdCBpbnB1dCBpcyBlbmFibGVkIG9yIGlmIGl0IHdhcyB0cmlnZ2VyZWQgYnkgYSBjb250ZW50IGVkaXRhYmxlIHRhZyBhbmQgaXQgaXMgZW5hYmxlZC5cblxuXG4gICAgaWYgKGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoa2V5Ym9hcmRFdmVudCkgJiYgIXRhZ0ZpbHRlcihrZXlib2FyZEV2ZW50LCBlbmFibGVPblRhZ3MpIHx8IChfa2V5Ym9hcmRFdmVudCR0YXJnZXQgPSBrZXlib2FyZEV2ZW50LnRhcmdldCkgIT0gbnVsbCAmJiBfa2V5Ym9hcmRFdmVudCR0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgJiYgIWVuYWJsZU9uQ29udGVudEVkaXRhYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IG51bGwgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcmVmLmN1cnJlbnQgfHwgKF9yZWYkY3VycmVudCA9IHJlZi5jdXJyZW50KSAhPSBudWxsICYmIF9yZWYkY3VycmVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgY2FsbGJhY2soa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgZGVwcyA/IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXS5jb25jYXQoZGVwcykgOiBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJbiB0aGlzIGNhc2Uga2V5ZG93biBpcyBsaWtlbHkgdW5kZWZpbmVkLCBzbyB3ZSBzZXQgaXQgdG8gZmFsc2UsIHNpbmNlIGhvdGtleXMgbmVlZHMgdGhlIGBrZXlkb3duYCBrZXkgdG8gaGF2ZSBhIHZhbHVlLlxuXG5cbiAgICBpZiAoa2V5dXAgJiYga2V5ZG93biAhPT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5rZXlkb3duID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaG90a2V5cyhrZXlzLCBvcHRpb25zIHx8IHt9LCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIH07XG4gIH0sIFttZW1vaXNlZENhbGxiYWNrLCBrZXlzLCBlbmFibGVkXSk7XG4gIHJldHVybiByZWY7XG59XG5cbnZhciBpc0hvdGtleVByZXNzZWQgPSBob3RrZXlzLmlzUHJlc3NlZDtcblxuZXhwb3J0IHsgaXNIb3RrZXlQcmVzc2VkLCB1c2VIb3RrZXlzLCB1c2VJc0hvdGtleVByZXNzZWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlYWN0LWhvdGtleXMtaG9vay5lc20uanMubWFwXG4iLCJmdW5jdGlvbiByZXBsYWNlQ2xhc3NOYW1lKG9yaWdDbGFzcywgY2xhc3NUb1JlbW92ZSkge1xuICByZXR1cm4gb3JpZ0NsYXNzLnJlcGxhY2UobmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xhc3NUb1JlbW92ZSArIFwiKD86XFxcXHN8JClcIiwgJ2cnKSwgJyQxJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTtcbn1cbi8qKlxuICogUmVtb3ZlcyBhIENTUyBjbGFzcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gcmVwbGFjZUNsYXNzTmFtZShlbGVtZW50LmNsYXNzTmFtZSwgY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCByZXBsYWNlQ2xhc3NOYW1lKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgJycsIGNsYXNzTmFtZSkpO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQge1xuICBkaXNhYmxlZDogZmFsc2Vcbn07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7IiwiZXhwb3J0IHZhciBmb3JjZVJlZmxvdyA9IGZ1bmN0aW9uIGZvcmNlUmVmbG93KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsVG9wO1xufTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgdGltZW91dHNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcbmV4cG9ydCB2YXIgVU5NT1VOVEVEID0gJ3VubW91bnRlZCc7XG5leHBvcnQgdmFyIEVYSVRFRCA9ICdleGl0ZWQnO1xuZXhwb3J0IHZhciBFTlRFUklORyA9ICdlbnRlcmluZyc7XG5leHBvcnQgdmFyIEVOVEVSRUQgPSAnZW50ZXJlZCc7XG5leHBvcnQgdmFyIEVYSVRJTkcgPSAnZXhpdGluZyc7XG4vKipcbiAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudCBsZXRzIHlvdSBkZXNjcmliZSBhIHRyYW5zaXRpb24gZnJvbSBvbmUgY29tcG9uZW50XG4gKiBzdGF0ZSB0byBhbm90aGVyIF9vdmVyIHRpbWVfIHdpdGggYSBzaW1wbGUgZGVjbGFyYXRpdmUgQVBJLiBNb3N0IGNvbW1vbmx5XG4gKiBpdCdzIHVzZWQgdG8gYW5pbWF0ZSB0aGUgbW91bnRpbmcgYW5kIHVubW91bnRpbmcgb2YgYSBjb21wb25lbnQsIGJ1dCBjYW4gYWxzb1xuICogYmUgdXNlZCB0byBkZXNjcmliZSBpbi1wbGFjZSB0cmFuc2l0aW9uIHN0YXRlcyBhcyB3ZWxsLlxuICpcbiAqIC0tLVxuICpcbiAqICoqTm90ZSoqOiBgVHJhbnNpdGlvbmAgaXMgYSBwbGF0Zm9ybS1hZ25vc3RpYyBiYXNlIGNvbXBvbmVudC4gSWYgeW91J3JlIHVzaW5nXG4gKiB0cmFuc2l0aW9ucyBpbiBDU1MsIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZVxuICogW2BDU1NUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9jc3MtdHJhbnNpdGlvbilcbiAqIGluc3RlYWQuIEl0IGluaGVyaXRzIGFsbCB0aGUgZmVhdHVyZXMgb2YgYFRyYW5zaXRpb25gLCBidXQgY29udGFpbnNcbiAqIGFkZGl0aW9uYWwgZmVhdHVyZXMgbmVjZXNzYXJ5IHRvIHBsYXkgbmljZSB3aXRoIENTUyB0cmFuc2l0aW9ucyAoaGVuY2UgdGhlXG4gKiBuYW1lIG9mIHRoZSBjb21wb25lbnQpLlxuICpcbiAqIC0tLVxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGBUcmFuc2l0aW9uYCBjb21wb25lbnQgZG9lcyBub3QgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHRoZVxuICogY29tcG9uZW50IGl0IHJlbmRlcnMsIGl0IG9ubHkgdHJhY2tzIFwiZW50ZXJcIiBhbmQgXCJleGl0XCIgc3RhdGVzIGZvciB0aGVcbiAqIGNvbXBvbmVudHMuIEl0J3MgdXAgdG8geW91IHRvIGdpdmUgbWVhbmluZyBhbmQgZWZmZWN0IHRvIHRob3NlIHN0YXRlcy4gRm9yXG4gKiBleGFtcGxlIHdlIGNhbiBhZGQgc3R5bGVzIHRvIGEgY29tcG9uZW50IHdoZW4gaXQgZW50ZXJzIG9yIGV4aXRzOlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuICpcbiAqIGNvbnN0IGR1cmF0aW9uID0gMzAwO1xuICpcbiAqIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAqICAgdHJhbnNpdGlvbjogYG9wYWNpdHkgJHtkdXJhdGlvbn1tcyBlYXNlLWluLW91dGAsXG4gKiAgIG9wYWNpdHk6IDAsXG4gKiB9XG4gKlxuICogY29uc3QgdHJhbnNpdGlvblN0eWxlcyA9IHtcbiAqICAgZW50ZXJpbmc6IHsgb3BhY2l0eTogMSB9LFxuICogICBlbnRlcmVkOiAgeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGV4aXRpbmc6ICB7IG9wYWNpdHk6IDAgfSxcbiAqICAgZXhpdGVkOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiB9O1xuICpcbiAqIGNvbnN0IEZhZGUgPSAoeyBpbjogaW5Qcm9wIH0pID0+IChcbiAqICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17ZHVyYXRpb259PlxuICogICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICA8ZGl2IHN0eWxlPXt7XG4gKiAgICAgICAgIC4uLmRlZmF1bHRTdHlsZSxcbiAqICAgICAgICAgLi4udHJhbnNpdGlvblN0eWxlc1tzdGF0ZV1cbiAqICAgICAgIH19PlxuICogICAgICAgICBJJ20gYSBmYWRlIFRyYW5zaXRpb24hXG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICApfVxuICogICA8L1RyYW5zaXRpb24+XG4gKiApO1xuICogYGBgXG4gKlxuICogVGhlcmUgYXJlIDQgbWFpbiBzdGF0ZXMgYSBUcmFuc2l0aW9uIGNhbiBiZSBpbjpcbiAqICAtIGAnZW50ZXJpbmcnYFxuICogIC0gYCdlbnRlcmVkJ2BcbiAqICAtIGAnZXhpdGluZydgXG4gKiAgLSBgJ2V4aXRlZCdgXG4gKlxuICogVHJhbnNpdGlvbiBzdGF0ZSBpcyB0b2dnbGVkIHZpYSB0aGUgYGluYCBwcm9wLiBXaGVuIGB0cnVlYCB0aGUgY29tcG9uZW50XG4gKiBiZWdpbnMgdGhlIFwiRW50ZXJcIiBzdGFnZS4gRHVyaW5nIHRoaXMgc3RhZ2UsIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCBmcm9tXG4gKiBpdHMgY3VycmVudCB0cmFuc2l0aW9uIHN0YXRlLCB0byBgJ2VudGVyaW5nJ2AgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGVcbiAqIHRyYW5zaXRpb24gYW5kIHRoZW4gdG8gdGhlIGAnZW50ZXJlZCdgIHN0YWdlIG9uY2UgaXQncyBjb21wbGV0ZS4gTGV0J3MgdGFrZVxuICogdGhlIGZvbGxvd2luZyBleGFtcGxlICh3ZSdsbCB1c2UgdGhlXG4gKiBbdXNlU3RhdGVdKGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VzdGF0ZSkgaG9vayk6XG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezUwMH0+XG4gKiAgICAgICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICAgICAgLy8gLi4uXG4gKiAgICAgICAgICl9XG4gKiAgICAgICA8L1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCB0byB0aGUgYCdlbnRlcmluZydgIHN0YXRlXG4gKiBhbmQgc3RheSB0aGVyZSBmb3IgNTAwbXMgKHRoZSB2YWx1ZSBvZiBgdGltZW91dGApIGJlZm9yZSBpdCBmaW5hbGx5IHN3aXRjaGVzXG4gKiB0byBgJ2VudGVyZWQnYC5cbiAqXG4gKiBXaGVuIGBpbmAgaXMgYGZhbHNlYCB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIGV4Y2VwdCB0aGUgc3RhdGUgbW92ZXMgZnJvbVxuICogYCdleGl0aW5nJ2AgdG8gYCdleGl0ZWQnYC5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG4gICAgdmFyIHBhcmVudEdyb3VwID0gY29udGV4dDsgLy8gSW4gdGhlIGNvbnRleHQgb2YgYSBUcmFuc2l0aW9uR3JvdXAgYWxsIGVudGVycyBhcmUgcmVhbGx5IGFwcGVhcnNcblxuICAgIHZhciBhcHBlYXIgPSBwYXJlbnRHcm91cCAmJiAhcGFyZW50R3JvdXAuaXNNb3VudGluZyA/IHByb3BzLmVudGVyIDogcHJvcHMuYXBwZWFyO1xuICAgIHZhciBpbml0aWFsU3RhdHVzO1xuICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJvcHMuaW4pIHtcbiAgICAgIGlmIChhcHBlYXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gRU5URVJJTkc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRU5URVJFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BzLnVubW91bnRPbkV4aXQgfHwgcHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBVTk1PVU5URUQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBpbml0aWFsU3RhdHVzXG4gICAgfTtcbiAgICBfdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKF9yZWYsIHByZXZTdGF0ZSkge1xuICAgIHZhciBuZXh0SW4gPSBfcmVmLmluO1xuXG4gICAgaWYgKG5leHRJbiAmJiBwcmV2U3RhdGUuc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAvLyAgIGxldCBuZXh0U3RhdHVzID0gbnVsbFxuICAvLyAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgLy8gICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB0aGlzLnN0YXRlXG4gIC8vICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAvLyAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4geyBuZXh0U3RhdHVzIH1cbiAgLy8gfVxuICA7XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdHVzKHRydWUsIHRoaXMuYXBwZWFyU3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBuZXh0U3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElORztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKGZhbHNlLCBuZXh0U3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuICB9O1xuXG4gIF9wcm90by5nZXRUaW1lb3V0cyA9IGZ1bmN0aW9uIGdldFRpbWVvdXRzKCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0O1xuICAgIHZhciBleGl0LCBlbnRlciwgYXBwZWFyO1xuICAgIGV4aXQgPSBlbnRlciA9IGFwcGVhciA9IHRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsICYmIHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgZXhpdCA9IHRpbWVvdXQuZXhpdDtcbiAgICAgIGVudGVyID0gdGltZW91dC5lbnRlcjsgLy8gVE9ETzogcmVtb3ZlIGZhbGxiYWNrIGZvciBuZXh0IG1ham9yXG5cbiAgICAgIGFwcGVhciA9IHRpbWVvdXQuYXBwZWFyICE9PSB1bmRlZmluZWQgPyB0aW1lb3V0LmFwcGVhciA6IGVudGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleGl0OiBleGl0LFxuICAgICAgZW50ZXI6IGVudGVyLFxuICAgICAgYXBwZWFyOiBhcHBlYXJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGF0dXMgPSBmdW5jdGlvbiB1cGRhdGVTdGF0dXMobW91bnRpbmcsIG5leHRTdGF0dXMpIHtcbiAgICBpZiAobW91bnRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgbW91bnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgLy8gbmV4dFN0YXR1cyB3aWxsIGFsd2F5cyBiZSBFTlRFUklORyBvciBFWElUSU5HLlxuICAgICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcblxuICAgICAgaWYgKG5leHRTdGF0dXMgPT09IEVOVEVSSU5HKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgfHwgdGhpcy5wcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvcHVsbC83NDlcbiAgICAgICAgICAvLyBXaXRoIHVubW91bnRPbkV4aXQgb3IgbW91bnRPbkVudGVyLCB0aGUgZW50ZXIgYW5pbWF0aW9uIHNob3VsZCBoYXBwZW4gYXQgdGhlIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhpdGVkYCBhbmQgYGVudGVyaW5nYC5cbiAgICAgICAgICAvLyBUbyBtYWtlIHRoZSBhbmltYXRpb24gaGFwcGVuLCAgd2UgaGF2ZSB0byBzZXBhcmF0ZSBlYWNoIHJlbmRlcmluZyBhbmQgYXZvaWQgYmVpbmcgcHJvY2Vzc2VkIGFzIGJhdGNoZWQuXG5cbiAgICAgICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBlcmZvcm1FbnRlcihtb3VudGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcmZvcm1FeGl0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgJiYgdGhpcy5zdGF0ZS5zdGF0dXMgPT09IEVYSVRFRCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogVU5NT1VOVEVEXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FbnRlciA9IGZ1bmN0aW9uIHBlcmZvcm1FbnRlcihtb3VudGluZykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGVudGVyID0gdGhpcy5wcm9wcy5lbnRlcjtcbiAgICB2YXIgYXBwZWFyaW5nID0gdGhpcy5jb250ZXh0ID8gdGhpcy5jb250ZXh0LmlzTW91bnRpbmcgOiBtb3VudGluZztcblxuICAgIHZhciBfcmVmMiA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFthcHBlYXJpbmddIDogW1JlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpLCBhcHBlYXJpbmddLFxuICAgICAgICBtYXliZU5vZGUgPSBfcmVmMlswXSxcbiAgICAgICAgbWF5YmVBcHBlYXJpbmcgPSBfcmVmMlsxXTtcblxuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgZW50ZXJUaW1lb3V0ID0gYXBwZWFyaW5nID8gdGltZW91dHMuYXBwZWFyIDogdGltZW91dHMuZW50ZXI7IC8vIG5vIGVudGVyIGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVOVEVSRURcbiAgICAvLyBpZiB3ZSBhcmUgbW91bnRpbmcgYW5kIHJ1bm5pbmcgdGhpcyBpdCBtZWFucyBhcHBlYXIgX211c3RfIGJlIHNldFxuXG4gICAgaWYgKCFtb3VudGluZyAmJiAhZW50ZXIgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuXG4gICAgICBfdGhpczIub25UcmFuc2l0aW9uRW5kKGVudGVyVGltZW91dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FeGl0ID0gZnVuY3Rpb24gcGVyZm9ybUV4aXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgZXhpdCA9IHRoaXMucHJvcHMuZXhpdDtcbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIG1heWJlTm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBubyBleGl0IGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVYSVRFRFxuXG4gICAgaWYgKCFleGl0IHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuXG4gICAgICBfdGhpczMub25UcmFuc2l0aW9uRW5kKHRpbWVvdXRzLmV4aXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxOZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBjYW5jZWxOZXh0Q2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMubmV4dENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwoKTtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNhZmVTZXRTdGF0ZSA9IGZ1bmN0aW9uIHNhZmVTZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgdGhlcmUgYXJlIHdlaXJkIHJhY2UgY29uZGl0aW9ucyB3aXRoXG4gICAgLy8gc2V0U3RhdGUgY2FsbGJhY2tzIGFuZCB1bm1vdW50aW5nIGluIHRlc3RpbmcsIHNvIGFsd2F5cyBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIHdlIGNhbiBjYW5jZWwgYW55IHBlbmRpbmcgc2V0U3RhdGUgY2FsbGJhY2tzIGFmdGVyIHdlIHVubW91bnQuXG4gICAgY2FsbGJhY2sgPSB0aGlzLnNldE5leHRDYWxsYmFjayhjYWxsYmFjayk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0TmV4dENhbGxiYWNrID0gZnVuY3Rpb24gc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpczQubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMubmV4dENhbGxiYWNrO1xuICB9O1xuXG4gIF9wcm90by5vblRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQodGltZW91dCwgaGFuZGxlcikge1xuICAgIHRoaXMuc2V0TmV4dENhbGxiYWNrKGhhbmRsZXIpO1xuICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICB2YXIgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciA9IHRpbWVvdXQgPT0gbnVsbCAmJiAhdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcjtcblxuICAgIGlmICghbm9kZSB8fCBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcikge1xuICAgICAgdmFyIF9yZWYzID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW3RoaXMubmV4dENhbGxiYWNrXSA6IFtub2RlLCB0aGlzLm5leHRDYWxsYmFja10sXG4gICAgICAgICAgbWF5YmVOb2RlID0gX3JlZjNbMF0sXG4gICAgICAgICAgbWF5YmVOZXh0Q2FsbGJhY2sgPSBfcmVmM1sxXTtcblxuICAgICAgdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcihtYXliZU5vZGUsIG1heWJlTmV4dENhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCB0aW1lb3V0KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICBpZiAoc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIF9pbiA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBfbW91bnRPbkVudGVyID0gX3RoaXMkcHJvcHMubW91bnRPbkVudGVyLFxuICAgICAgICBfdW5tb3VudE9uRXhpdCA9IF90aGlzJHByb3BzLnVubW91bnRPbkV4aXQsXG4gICAgICAgIF9hcHBlYXIgPSBfdGhpcyRwcm9wcy5hcHBlYXIsXG4gICAgICAgIF9lbnRlciA9IF90aGlzJHByb3BzLmVudGVyLFxuICAgICAgICBfZXhpdCA9IF90aGlzJHByb3BzLmV4aXQsXG4gICAgICAgIF90aW1lb3V0ID0gX3RoaXMkcHJvcHMudGltZW91dCxcbiAgICAgICAgX2FkZEVuZExpc3RlbmVyID0gX3RoaXMkcHJvcHMuYWRkRW5kTGlzdGVuZXIsXG4gICAgICAgIF9vbkVudGVyID0gX3RoaXMkcHJvcHMub25FbnRlcixcbiAgICAgICAgX29uRW50ZXJpbmcgPSBfdGhpcyRwcm9wcy5vbkVudGVyaW5nLFxuICAgICAgICBfb25FbnRlcmVkID0gX3RoaXMkcHJvcHMub25FbnRlcmVkLFxuICAgICAgICBfb25FeGl0ID0gX3RoaXMkcHJvcHMub25FeGl0LFxuICAgICAgICBfb25FeGl0aW5nID0gX3RoaXMkcHJvcHMub25FeGl0aW5nLFxuICAgICAgICBfb25FeGl0ZWQgPSBfdGhpcyRwcm9wcy5vbkV4aXRlZCxcbiAgICAgICAgX25vZGVSZWYgPSBfdGhpcyRwcm9wcy5ub2RlUmVmLFxuICAgICAgICBjaGlsZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIiwgXCJtb3VudE9uRW50ZXJcIiwgXCJ1bm1vdW50T25FeGl0XCIsIFwiYXBwZWFyXCIsIFwiZW50ZXJcIiwgXCJleGl0XCIsIFwidGltZW91dFwiLCBcImFkZEVuZExpc3RlbmVyXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRpbmdcIiwgXCJvbkV4aXRlZFwiLCBcIm5vZGVSZWZcIl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHN0YXR1cywgY2hpbGRQcm9wcykgOiBSZWFjdC5jbG9uZUVsZW1lbnQoUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbiksIGNoaWxkUHJvcHMpKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb24uY29udGV4dFR5cGUgPSBUcmFuc2l0aW9uR3JvdXBDb250ZXh0O1xuVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBBIFJlYWN0IHJlZmVyZW5jZSB0byBET00gZWxlbWVudCB0aGF0IG5lZWQgdG8gdHJhbnNpdGlvbjpcbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxMTI3MTMwLzQ2NzE5MzJcbiAgICpcbiAgICogICAtIFdoZW4gYG5vZGVSZWZgIHByb3AgaXMgdXNlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQgdG8gY2FsbGJhY2sgZnVuY3Rpb25zXG4gICAqICAgICAgKGUuZy4gYG9uRW50ZXJgKSBiZWNhdXNlIHVzZXIgYWxyZWFkeSBoYXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgbm9kZS5cbiAgICogICAtIFdoZW4gY2hhbmdpbmcgYGtleWAgcHJvcCBvZiBgVHJhbnNpdGlvbmAgaW4gYSBgVHJhbnNpdGlvbkdyb3VwYCBhIG5ld1xuICAgKiAgICAgYG5vZGVSZWZgIG5lZWQgdG8gYmUgcHJvdmlkZWQgdG8gYFRyYW5zaXRpb25gIHdpdGggY2hhbmdlZCBga2V5YCBwcm9wXG4gICAqICAgICAoc2VlXG4gICAqICAgICBbdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi8xMzQzNWY4OTdiM2FiNzFmNmUxOWQ3MjRmMTQ1NTk2ZjU5MTA1ODFjL3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzI0wzNjItTDQzNykpLlxuICAgKi9cbiAgbm9kZVJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBQcm9wVHlwZXMuYW55IDogZnVuY3Rpb24gKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHByb3BWYWx1ZVtrZXldO1xuICAgICAgcmV0dXJuIFByb3BUeXBlcy5pbnN0YW5jZU9mKHZhbHVlICYmICdvd25lckRvY3VtZW50JyBpbiB2YWx1ZSA/IHZhbHVlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuRWxlbWVudCA6IEVsZW1lbnQpKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpO1xuICAgIH1cbiAgfSksXG5cbiAgLyoqXG4gICAqIEEgYGZ1bmN0aW9uYCBjaGlsZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgUmVhY3QgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpc1xuICAgKiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCB0cmFuc2l0aW9uIHN0YXR1cyAoYCdlbnRlcmluZydgLCBgJ2VudGVyZWQnYCxcbiAgICogYCdleGl0aW5nJ2AsIGAnZXhpdGVkJ2ApLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHBseSBjb250ZXh0XG4gICAqIHNwZWNpZmljIHByb3BzIHRvIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogPFRyYW5zaXRpb24gaW49e3RoaXMuc3RhdGUuaW59IHRpbWVvdXQ9ezE1MH0+XG4gICAqICAge3N0YXRlID0+IChcbiAgICogICAgIDxNeUNvbXBvbmVudCBjbGFzc05hbWU9e2BmYWRlIGZhZGUtJHtzdGF0ZX1gfSAvPlxuICAgKiAgICl9XG4gICAqIDwvVHJhbnNpdGlvbj5cbiAgICogYGBgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIGNvbXBvbmVudDsgdHJpZ2dlcnMgdGhlIGVudGVyIG9yIGV4aXQgc3RhdGVzXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBtb3VudGVkIGltbWVkaWF0ZWx5IGFsb25nIHdpdGhcbiAgICogdGhlIHBhcmVudCBgVHJhbnNpdGlvbmAgY29tcG9uZW50LiBJZiB5b3Ugd2FudCB0byBcImxhenkgbW91bnRcIiB0aGUgY29tcG9uZW50IG9uIHRoZVxuICAgKiBmaXJzdCBgaW49e3RydWV9YCB5b3UgY2FuIHNldCBgbW91bnRPbkVudGVyYC4gQWZ0ZXIgdGhlIGZpcnN0IGVudGVyIHRyYW5zaXRpb24gdGhlIGNvbXBvbmVudCB3aWxsIHN0YXlcbiAgICogbW91bnRlZCwgZXZlbiBvbiBcImV4aXRlZFwiLCB1bmxlc3MgeW91IGFsc28gc3BlY2lmeSBgdW5tb3VudE9uRXhpdGAuXG4gICAqL1xuICBtb3VudE9uRW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgc3RheXMgbW91bnRlZCBhZnRlciBpdCByZWFjaGVzIHRoZSBgJ2V4aXRlZCdgIHN0YXRlLlxuICAgKiBTZXQgYHVubW91bnRPbkV4aXRgIGlmIHlvdSdkIHByZWZlciB0byB1bm1vdW50IHRoZSBjb21wb25lbnQgYWZ0ZXIgaXQgZmluaXNoZXMgZXhpdGluZy5cbiAgICovXG4gIHVubW91bnRPbkV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgZG9lcyBub3QgcGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuXG4gICAqIGl0IGZpcnN0IG1vdW50cywgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgYGluYC4gSWYgeW91IHdhbnQgdGhpc1xuICAgKiBiZWhhdmlvciwgc2V0IGJvdGggYGFwcGVhcmAgYW5kIGBpbmAgdG8gYHRydWVgLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiB0aGVyZSBhcmUgbm8gc3BlY2lhbCBhcHBlYXIgc3RhdGVzIGxpa2UgYGFwcGVhcmluZ2AvYGFwcGVhcmVkYCwgdGhpcyBwcm9wXG4gICAqID4gb25seSBhZGRzIGFuIGFkZGl0aW9uYWwgZW50ZXIgdHJhbnNpdGlvbi4gSG93ZXZlciwgaW4gdGhlXG4gICAqID4gYDxDU1NUcmFuc2l0aW9uPmAgY29tcG9uZW50IHRoYXQgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiBkb2VzIHJlc3VsdCBpblxuICAgKiA+IGFkZGl0aW9uYWwgYC5hcHBlYXItKmAgY2xhc3NlcywgdGhhdCB3YXkgeW91IGNhbiBjaG9vc2UgdG8gc3R5bGUgaXRcbiAgICogPiBkaWZmZXJlbnRseS5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVudGVyIHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBleGl0IHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBSZXF1aXJlZCB1bmxlc3MgYGFkZEVuZExpc3RlbmVyYCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9uczpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9ezUwMH1cbiAgICogYGBgXG4gICAqXG4gICAqIG9yIGluZGl2aWR1YWxseTpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9e3tcbiAgICogIGFwcGVhcjogNTAwLFxuICAgKiAgZW50ZXI6IDMwMCxcbiAgICogIGV4aXQ6IDUwMCxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIC0gYGFwcGVhcmAgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBlbnRlcmBcbiAgICogLSBgZW50ZXJgIGRlZmF1bHRzIHRvIGAwYFxuICAgKiAtIGBleGl0YCBkZWZhdWx0cyB0byBgMGBcbiAgICpcbiAgICogQHR5cGUge251bWJlciB8IHsgZW50ZXI/OiBudW1iZXIsIGV4aXQ/OiBudW1iZXIsIGFwcGVhcj86IG51bWJlciB9fVxuICAgKi9cbiAgdGltZW91dDogZnVuY3Rpb24gdGltZW91dChwcm9wcykge1xuICAgIHZhciBwdCA9IHRpbWVvdXRzU2hhcGU7XG4gICAgaWYgKCFwcm9wcy5hZGRFbmRMaXN0ZW5lcikgcHQgPSBwdC5pc1JlcXVpcmVkO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHB0LmFwcGx5KHZvaWQgMCwgW3Byb3BzXS5jb25jYXQoYXJncykpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmdcbiAgICogRE9NIG5vZGUgYW5kIGEgYGRvbmVgIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiB7XG4gICAqICAgLy8gdXNlIHRoZSBjc3MgdHJhbnNpdGlvbmVuZCBldmVudCB0byBtYXJrIHRoZSBmaW5pc2ggb2YgYSB0cmFuc2l0aW9uXG4gICAqICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZG9uZSwgZmFsc2UpO1xuICAgKiB9fVxuICAgKiBgYGBcbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTsgLy8gTmFtZSB0aGUgZnVuY3Rpb24gc28gaXQgaXMgY2xlYXJlciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuXG5mdW5jdGlvbiBub29wKCkge31cblxuVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGluOiBmYWxzZSxcbiAgbW91bnRPbkVudGVyOiBmYWxzZSxcbiAgdW5tb3VudE9uRXhpdDogZmFsc2UsXG4gIGFwcGVhcjogZmFsc2UsXG4gIGVudGVyOiB0cnVlLFxuICBleGl0OiB0cnVlLFxuICBvbkVudGVyOiBub29wLFxuICBvbkVudGVyaW5nOiBub29wLFxuICBvbkVudGVyZWQ6IG5vb3AsXG4gIG9uRXhpdDogbm9vcCxcbiAgb25FeGl0aW5nOiBub29wLFxuICBvbkV4aXRlZDogbm9vcFxufTtcblRyYW5zaXRpb24uVU5NT1VOVEVEID0gVU5NT1VOVEVEO1xuVHJhbnNpdGlvbi5FWElURUQgPSBFWElURUQ7XG5UcmFuc2l0aW9uLkVOVEVSSU5HID0gRU5URVJJTkc7XG5UcmFuc2l0aW9uLkVOVEVSRUQgPSBFTlRFUkVEO1xuVHJhbnNpdGlvbi5FWElUSU5HID0gRVhJVElORztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb247IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBhZGRPbmVDbGFzcyBmcm9tICdkb20taGVscGVycy9hZGRDbGFzcyc7XG5pbXBvcnQgcmVtb3ZlT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvcmVtb3ZlQ2xhc3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uIGZyb20gJy4vVHJhbnNpdGlvbic7XG5pbXBvcnQgeyBjbGFzc05hbWVzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcblxudmFyIF9hZGRDbGFzcyA9IGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIGNsYXNzZXMpIHtcbiAgcmV0dXJuIG5vZGUgJiYgY2xhc3NlcyAmJiBjbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBhZGRPbmVDbGFzcyhub2RlLCBjKTtcbiAgfSk7XG59O1xuXG52YXIgcmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbiByZW1vdmVDbGFzcyhub2RlLCBjbGFzc2VzKSB7XG4gIHJldHVybiBub2RlICYmIGNsYXNzZXMgJiYgY2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gcmVtb3ZlT25lQ2xhc3Mobm9kZSwgYyk7XG4gIH0pO1xufTtcbi8qKlxuICogQSB0cmFuc2l0aW9uIGNvbXBvbmVudCBpbnNwaXJlZCBieSB0aGUgZXhjZWxsZW50XG4gKiBbbmctYW5pbWF0ZV0oaHR0cHM6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nQW5pbWF0ZSkgbGlicmFyeSwgeW91IHNob3VsZFxuICogdXNlIGl0IGlmIHlvdSdyZSB1c2luZyBDU1MgdHJhbnNpdGlvbnMgb3IgYW5pbWF0aW9ucy4gSXQncyBidWlsdCB1cG9uIHRoZVxuICogW2BUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uKVxuICogY29tcG9uZW50LCBzbyBpdCBpbmhlcml0cyBhbGwgb2YgaXRzIHByb3BzLlxuICpcbiAqIGBDU1NUcmFuc2l0aW9uYCBhcHBsaWVzIGEgcGFpciBvZiBjbGFzcyBuYW1lcyBkdXJpbmcgdGhlIGBhcHBlYXJgLCBgZW50ZXJgLFxuICogYW5kIGBleGl0YCBzdGF0ZXMgb2YgdGhlIHRyYW5zaXRpb24uIFRoZSBmaXJzdCBjbGFzcyBpcyBhcHBsaWVkIGFuZCB0aGVuIGFcbiAqIHNlY29uZCBgKi1hY3RpdmVgIGNsYXNzIGluIG9yZGVyIHRvIGFjdGl2YXRlIHRoZSBDU1MgdHJhbnNpdGlvbi4gQWZ0ZXIgdGhlXG4gKiB0cmFuc2l0aW9uLCBtYXRjaGluZyBgKi1kb25lYCBjbGFzcyBuYW1lcyBhcmUgYXBwbGllZCB0byBwZXJzaXN0IHRoZVxuICogdHJhbnNpdGlvbiBzdGF0ZS5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPENTU1RyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17MjAwfSBjbGFzc05hbWVzPVwibXktbm9kZVwiPlxuICogICAgICAgICA8ZGl2PlxuICogICAgICAgICAgIHtcIkknbGwgcmVjZWl2ZSBteS1ub2RlLSogY2xhc3Nlc1wifVxuICogICAgICAgICA8L2Rpdj5cbiAqICAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGBpbmAgcHJvcCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY2hpbGQgY29tcG9uZW50IHdpbGwgZmlyc3QgcmVjZWl2ZVxuICogdGhlIGNsYXNzIGBleGFtcGxlLWVudGVyYCwgdGhlbiB0aGUgYGV4YW1wbGUtZW50ZXItYWN0aXZlYCB3aWxsIGJlIGFkZGVkIGluXG4gKiB0aGUgbmV4dCB0aWNrLiBgQ1NTVHJhbnNpdGlvbmAgW2ZvcmNlcyBhXG4gKiByZWZsb3ddKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi81MDA3MzAzZTcyOWE3NGJlNjZhMjFjM2UyMjA1ZTQ5MTY4MjE1MjRiL3NyYy9DU1NUcmFuc2l0aW9uLmpzI0wyMDgtTDIxNSlcbiAqIGJldHdlZW4gYmVmb3JlIGFkZGluZyB0aGUgYGV4YW1wbGUtZW50ZXItYWN0aXZlYC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgdHJpY2tcbiAqIGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhhbXBsZS1lbnRlcmAgYW5kXG4gKiBgZXhhbXBsZS1lbnRlci1hY3RpdmVgIGV2ZW4gdGhvdWdoIHRoZXkgd2VyZSBhZGRlZCBpbW1lZGlhdGVseSBvbmUgYWZ0ZXJcbiAqIGFub3RoZXIuIE1vc3Qgbm90YWJseSwgdGhpcyBpcyB3aGF0IG1ha2VzIGl0IHBvc3NpYmxlIGZvciB1cyB0byBhbmltYXRlXG4gKiBfYXBwZWFyYW5jZV8uXG4gKlxuICogYGBgY3NzXG4gKiAubXktbm9kZS1lbnRlciB7XG4gKiAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAubXktbm9kZS1lbnRlci1hY3RpdmUge1xuICogICBvcGFjaXR5OiAxO1xuICogICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xuICogfVxuICogLm15LW5vZGUtZXhpdCB7XG4gKiAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAubXktbm9kZS1leGl0LWFjdGl2ZSB7XG4gKiAgIG9wYWNpdHk6IDA7XG4gKiAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgKi1hY3RpdmVgIGNsYXNzZXMgcmVwcmVzZW50IHdoaWNoIHN0eWxlcyB5b3Ugd2FudCB0byBhbmltYXRlICoqdG8qKiwgc28gaXQnc1xuICogaW1wb3J0YW50IHRvIGFkZCBgdHJhbnNpdGlvbmAgZGVjbGFyYXRpb24gb25seSB0byB0aGVtLCBvdGhlcndpc2UgdHJhbnNpdGlvbnNcbiAqIG1pZ2h0IG5vdCBiZWhhdmUgYXMgaW50ZW5kZWQhIFRoaXMgbWlnaHQgbm90IGJlIG9idmlvdXMgd2hlbiB0aGUgdHJhbnNpdGlvbnNcbiAqIGFyZSBzeW1tZXRyaWNhbCwgaS5lLiB3aGVuIGAqLWVudGVyLWFjdGl2ZWAgaXMgdGhlIHNhbWUgYXMgYCotZXhpdGAsIGxpa2UgaW5cbiAqIHRoZSBleGFtcGxlIGFib3ZlIChtaW51cyBgdHJhbnNpdGlvbmApLCBidXQgaXQgYmVjb21lcyBhcHBhcmVudCBpbiBtb3JlXG4gKiBjb21wbGV4IHRyYW5zaXRpb25zLlxuICpcbiAqICoqTm90ZSoqOiBJZiB5b3UncmUgdXNpbmcgdGhlXG4gKiBbYGFwcGVhcmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uI1RyYW5zaXRpb24tcHJvcC1hcHBlYXIpXG4gKiBwcm9wLCBtYWtlIHN1cmUgdG8gZGVmaW5lIHN0eWxlcyBmb3IgYC5hcHBlYXItKmAgY2xhc3NlcyBhcyB3ZWxsLlxuICovXG5cblxudmFyIENTU1RyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoQ1NTVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQ1NTVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5hcHBsaWVkQ2xhc3NlcyA9IHtcbiAgICAgIGFwcGVhcjoge30sXG4gICAgICBlbnRlcjoge30sXG4gICAgICBleGl0OiB7fVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnRbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50WzFdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdleGl0Jyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJywgJ2Jhc2UnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcihtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmluZyA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MiA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDJbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MlsxXTtcblxuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdhY3RpdmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXJpbmcpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmVkID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQzID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50M1swXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQzWzFdO1xuXG4gICAgICB2YXIgdHlwZSA9IGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJztcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCB0eXBlKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgdHlwZSwgJ2RvbmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXJlZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdCA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ0ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ0WzBdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdhcHBlYXInKTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZW50ZXInKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYmFzZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0KSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXRpbmcgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NSA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NVswXTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXRpbmcpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0aW5nKG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdGVkID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDYgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDZbMF07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2V4aXQnKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnZG9uZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMubm9kZVJlZiA/IFtfdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQsIG1heWJlTm9kZV0gLy8gaGVyZSBgbWF5YmVOb2RlYCBpcyBhY3R1YWxseSBgYXBwZWFyaW5nYFxuICAgICAgOiBbbWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZ107XG4gICAgfTtcblxuICAgIF90aGlzLmdldENsYXNzTmFtZXMgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgdmFyIGNsYXNzTmFtZXMgPSBfdGhpcy5wcm9wcy5jbGFzc05hbWVzO1xuICAgICAgdmFyIGlzU3RyaW5nQ2xhc3NOYW1lcyA9IHR5cGVvZiBjbGFzc05hbWVzID09PSAnc3RyaW5nJztcbiAgICAgIHZhciBwcmVmaXggPSBpc1N0cmluZ0NsYXNzTmFtZXMgJiYgY2xhc3NOYW1lcyA/IGNsYXNzTmFtZXMgKyBcIi1cIiA6ICcnO1xuICAgICAgdmFyIGJhc2VDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBcIlwiICsgcHJlZml4ICsgdHlwZSA6IGNsYXNzTmFtZXNbdHlwZV07XG4gICAgICB2YXIgYWN0aXZlQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gYmFzZUNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiIDogY2xhc3NOYW1lc1t0eXBlICsgXCJBY3RpdmVcIl07XG4gICAgICB2YXIgZG9uZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IGJhc2VDbGFzc05hbWUgKyBcIi1kb25lXCIgOiBjbGFzc05hbWVzW3R5cGUgKyBcIkRvbmVcIl07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlQ2xhc3NOYW1lOiBiYXNlQ2xhc3NOYW1lLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWU6IGFjdGl2ZUNsYXNzTmFtZSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZTogZG9uZUNsYXNzTmFtZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IENTU1RyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5hZGRDbGFzcyA9IGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIHR5cGUsIHBoYXNlKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lcyh0eXBlKVtwaGFzZSArIFwiQ2xhc3NOYW1lXCJdO1xuXG4gICAgdmFyIF90aGlzJGdldENsYXNzTmFtZXMgPSB0aGlzLmdldENsYXNzTmFtZXMoJ2VudGVyJyksXG4gICAgICAgIGRvbmVDbGFzc05hbWUgPSBfdGhpcyRnZXRDbGFzc05hbWVzLmRvbmVDbGFzc05hbWU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2FwcGVhcicgJiYgcGhhc2UgPT09ICdkb25lJyAmJiBkb25lQ2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBkb25lQ2xhc3NOYW1lO1xuICAgIH0gLy8gVGhpcyBpcyB0byBmb3JjZSBhIHJlcGFpbnQsXG4gICAgLy8gd2hpY2ggaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHRyYW5zaXRpb24gc3R5bGVzIHdoZW4gYWRkaW5nIGEgY2xhc3MgbmFtZS5cblxuXG4gICAgaWYgKHBoYXNlID09PSAnYWN0aXZlJykge1xuICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgIH1cblxuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV1bcGhhc2VdID0gY2xhc3NOYW1lO1xuXG4gICAgICBfYWRkQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZUNsYXNzZXMgPSBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKG5vZGUsIHR5cGUpIHtcbiAgICB2YXIgX3RoaXMkYXBwbGllZENsYXNzZXMkID0gdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSxcbiAgICAgICAgYmFzZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5iYXNlLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYWN0aXZlLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmRvbmU7XG4gICAgdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSA9IHt9O1xuXG4gICAgaWYgKGJhc2VDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGJhc2VDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGRvbmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGRvbmVDbGFzc05hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF8gPSBfdGhpcyRwcm9wcy5jbGFzc05hbWVzLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjbGFzc05hbWVzXCJdKTtcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIG9uRW50ZXI6IHRoaXMub25FbnRlcixcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5vbkVudGVyZWQsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLm9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQ6IHRoaXMub25FeGl0LFxuICAgICAgb25FeGl0aW5nOiB0aGlzLm9uRXhpdGluZyxcbiAgICAgIG9uRXhpdGVkOiB0aGlzLm9uRXhpdGVkXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiBDU1NUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5DU1NUcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lczogJydcbn07XG5DU1NUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IF9leHRlbmRzKHt9LCBUcmFuc2l0aW9uLnByb3BUeXBlcywge1xuICAvKipcbiAgICogVGhlIGFuaW1hdGlvbiBjbGFzc05hbWVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudCBhcyBpdCBhcHBlYXJzLCBlbnRlcnMsXG4gICAqIGV4aXRzIG9yIGhhcyBmaW5pc2hlZCB0aGUgdHJhbnNpdGlvbi4gQSBzaW5nbGUgbmFtZSBjYW4gYmUgcHJvdmlkZWQsIHdoaWNoXG4gICAqIHdpbGwgYmUgc3VmZml4ZWQgZm9yIGVhY2ggc3RhZ2UsIGUuZy4gYGNsYXNzTmFtZXM9XCJmYWRlXCJgIGFwcGxpZXM6XG4gICAqXG4gICAqIC0gYGZhZGUtYXBwZWFyYCwgYGZhZGUtYXBwZWFyLWFjdGl2ZWAsIGBmYWRlLWFwcGVhci1kb25lYFxuICAgKiAtIGBmYWRlLWVudGVyYCwgYGZhZGUtZW50ZXItYWN0aXZlYCwgYGZhZGUtZW50ZXItZG9uZWBcbiAgICogLSBgZmFkZS1leGl0YCwgYGZhZGUtZXhpdC1hY3RpdmVgLCBgZmFkZS1leGl0LWRvbmVgXG4gICAqXG4gICAqIEEgZmV3IGRldGFpbHMgdG8gbm90ZSBhYm91dCBob3cgdGhlc2UgY2xhc3NlcyBhcmUgYXBwbGllZDpcbiAgICpcbiAgICogMS4gVGhleSBhcmUgX2pvaW5lZF8gd2l0aCB0aGUgb25lcyB0aGF0IGFyZSBhbHJlYWR5IGRlZmluZWQgb24gdGhlIGNoaWxkXG4gICAqICAgIGNvbXBvbmVudCwgc28gaWYgeW91IHdhbnQgdG8gYWRkIHNvbWUgYmFzZSBzdHlsZXMsIHlvdSBjYW4gdXNlXG4gICAqICAgIGBjbGFzc05hbWVgIHdpdGhvdXQgd29ycnlpbmcgdGhhdCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAqXG4gICAqIDIuIElmIHRoZSB0cmFuc2l0aW9uIGNvbXBvbmVudCBtb3VudHMgd2l0aCBgaW49e2ZhbHNlfWAsIG5vIGNsYXNzZXMgYXJlXG4gICAqICAgIGFwcGxpZWQgeWV0LiBZb3UgbWlnaHQgYmUgZXhwZWN0aW5nIGAqLWV4aXQtZG9uZWAsIGJ1dCBpZiB5b3UgdGhpbmtcbiAgICogICAgYWJvdXQgaXQsIGEgY29tcG9uZW50IGNhbm5vdCBmaW5pc2ggZXhpdGluZyBpZiBpdCBoYXNuJ3QgZW50ZXJlZCB5ZXQuXG4gICAqXG4gICAqIDIuIGBmYWRlLWFwcGVhci1kb25lYCBhbmQgYGZhZGUtZW50ZXItZG9uZWAgd2lsbCBfYm90aF8gYmUgYXBwbGllZC4gVGhpc1xuICAgKiAgICBhbGxvd3MgeW91IHRvIGRlZmluZSBkaWZmZXJlbnQgYmVoYXZpb3IgZm9yIHdoZW4gYXBwZWFyaW5nIGlzIGRvbmUgYW5kXG4gICAqICAgIHdoZW4gcmVndWxhciBlbnRlcmluZyBpcyBkb25lLCB1c2luZyBzZWxlY3RvcnMgbGlrZVxuICAgKiAgICBgLmZhZGUtZW50ZXItZG9uZTpub3QoLmZhZGUtYXBwZWFyLWRvbmUpYC4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBhcHBseVxuICAgKiAgICBhbiBlcGljIGVudHJhbmNlIGFuaW1hdGlvbiB3aGVuIGVsZW1lbnQgZmlyc3QgYXBwZWFycyBpbiB0aGUgRE9NIHVzaW5nXG4gICAqICAgIFtBbmltYXRlLmNzc10oaHR0cHM6Ly9kYW5lZGVuLmdpdGh1Yi5pby9hbmltYXRlLmNzcy8pLiBPdGhlcndpc2UgeW91IGNhblxuICAgKiAgICBzaW1wbHkgdXNlIGBmYWRlLWVudGVyLWRvbmVgIGZvciBkZWZpbmluZyBib3RoIGNhc2VzLlxuICAgKlxuICAgKiBFYWNoIGluZGl2aWR1YWwgY2xhc3NOYW1lcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgaW5kZXBlbmRlbnRseSBsaWtlOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGFzc05hbWVzPXt7XG4gICAqICBhcHBlYXI6ICdteS1hcHBlYXInLFxuICAgKiAgYXBwZWFyQWN0aXZlOiAnbXktYWN0aXZlLWFwcGVhcicsXG4gICAqICBhcHBlYXJEb25lOiAnbXktZG9uZS1hcHBlYXInLFxuICAgKiAgZW50ZXI6ICdteS1lbnRlcicsXG4gICAqICBlbnRlckFjdGl2ZTogJ215LWFjdGl2ZS1lbnRlcicsXG4gICAqICBlbnRlckRvbmU6ICdteS1kb25lLWVudGVyJyxcbiAgICogIGV4aXQ6ICdteS1leGl0JyxcbiAgICogIGV4aXRBY3RpdmU6ICdteS1hY3RpdmUtZXhpdCcsXG4gICAqICBleGl0RG9uZTogJ215LWRvbmUtZXhpdCcsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBzZXQgdGhlc2UgY2xhc3NlcyB1c2luZyBDU1MgTW9kdWxlczpcbiAgICpcbiAgICogYGBganNcbiAgICogaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5jc3MnO1xuICAgKiBgYGBcbiAgICpcbiAgICogeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGNhbWVsQ2FzZSBpbiB5b3VyIENTUyBmaWxlLCB0aGF0IHdheSBjb3VsZCBzaW1wbHlcbiAgICogc3ByZWFkIHRoZW0gaW5zdGVhZCBvZiBsaXN0aW5nIHRoZW0gb25lIGJ5IG9uZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17eyAuLi5zdHlsZXMgfX1cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB7XG4gICAqICBhcHBlYXI/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJEb25lPzogc3RyaW5nLFxuICAgKiAgZW50ZXI/OiBzdHJpbmcsXG4gICAqICBlbnRlckFjdGl2ZT86IHN0cmluZyxcbiAgICogIGVudGVyRG9uZT86IHN0cmluZyxcbiAgICogIGV4aXQ/OiBzdHJpbmcsXG4gICAqICBleGl0QWN0aXZlPzogc3RyaW5nLFxuICAgKiAgZXhpdERvbmU/OiBzdHJpbmcsXG4gICAqIH19XG4gICAqL1xuICBjbGFzc05hbWVzOiBjbGFzc05hbWVzU2hhcGUsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3IgJ2FwcGVhcicgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlci1hY3RpdmUnIG9yXG4gICAqICdhcHBlYXItYWN0aXZlJyBjbGFzcyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyJyBvclxuICAgKiAnYXBwZWFyJyBjbGFzc2VzIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBkb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzcyBpc1xuICAgKiBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQtYWN0aXZlJyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQnIGNsYXNzZXNcbiAgICogYXJlICoqcmVtb3ZlZCoqIGFuZCB0aGUgYGV4aXQtZG9uZWAgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIERPTSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59KSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgQ1NTVHJhbnNpdGlvbjsiLCJpbXBvcnQgaGFzQ2xhc3MgZnJvbSAnLi9oYXNDbGFzcyc7XG4vKipcbiAqIEFkZHMgYSBDU1MgY2xhc3MgdG8gYSBnaXZlbiBlbGVtZW50LlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtlbHNlIGlmICghaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSkgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUgKyBcIiBcIiArIGNsYXNzTmFtZTtlbHNlIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIChlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8ICcnKSArIFwiIFwiICsgY2xhc3NOYW1lKTtcbn0iLCIvKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIGVsZW1lbnQgaGFzIGEgQ1NTIGNsYXNzLlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuICEhY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXCIgXCIgKyAoZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCBlbGVtZW50LmNsYXNzTmFtZSkgKyBcIiBcIikuaW5kZXhPZihcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiKSAhPT0gLTE7XG59IiwiaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEdpdmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYCwgcmV0dXJuIGFuIG9iamVjdCBtYXBwaW5nIGtleSB0byBjaGlsZC5cbiAqXG4gKiBAcGFyYW0geyp9IGNoaWxkcmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYFxuICogQHJldHVybiB7b2JqZWN0fSBNYXBwaW5nIG9mIGtleSB0byBjaGlsZFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGlsZE1hcHBpbmcoY2hpbGRyZW4sIG1hcEZuKSB7XG4gIHZhciBtYXBwZXIgPSBmdW5jdGlvbiBtYXBwZXIoY2hpbGQpIHtcbiAgICByZXR1cm4gbWFwRm4gJiYgaXNWYWxpZEVsZW1lbnQoY2hpbGQpID8gbWFwRm4oY2hpbGQpIDogY2hpbGQ7XG4gIH07XG5cbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmIChjaGlsZHJlbikgQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjO1xuICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIC8vIHJ1biB0aGUgbWFwIGZ1bmN0aW9uIGhlcmUgaW5zdGVhZCBzbyB0aGF0IHRoZSBrZXkgaXMgdGhlIGNvbXB1dGVkIG9uZVxuICAgIHJlc3VsdFtjaGlsZC5rZXldID0gbWFwcGVyKGNoaWxkKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFdoZW4geW91J3JlIGFkZGluZyBvciByZW1vdmluZyBjaGlsZHJlbiBzb21lIG1heSBiZSBhZGRlZCBvciByZW1vdmVkIGluIHRoZVxuICogc2FtZSByZW5kZXIgcGFzcy4gV2Ugd2FudCB0byBzaG93ICpib3RoKiBzaW5jZSB3ZSB3YW50IHRvIHNpbXVsdGFuZW91c2x5XG4gKiBhbmltYXRlIGVsZW1lbnRzIGluIGFuZCBvdXQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBwcmV2aW91cyBzZXQgb2Yga2V5c1xuICogYW5kIGEgbmV3IHNldCBvZiBrZXlzIGFuZCBtZXJnZXMgdGhlbSB3aXRoIGl0cyBiZXN0IGd1ZXNzIG9mIHRoZSBjb3JyZWN0XG4gKiBvcmRlcmluZy4gSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZXhwb3NlIHNvbWUgb2YgdGhlIHV0aWxpdGllcyBpblxuICogUmVhY3RNdWx0aUNoaWxkIHRvIG1ha2UgdGhpcyBlYXN5LCBidXQgZm9yIG5vdyBSZWFjdCBpdHNlbGYgZG9lcyBub3RcbiAqIGRpcmVjdGx5IGhhdmUgdGhpcyBjb25jZXB0IG9mIHRoZSB1bmlvbiBvZiBwcmV2Q2hpbGRyZW4gYW5kIG5leHRDaGlsZHJlblxuICogc28gd2UgaW1wbGVtZW50IGl0IGhlcmUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHByZXYgcHJldiBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0IG5leHQgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcmV0dXJuIHtvYmplY3R9IGEga2V5IHNldCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzIGluIGBwcmV2YCBhbmQgYWxsIGtleXNcbiAqIGluIGBuZXh0YCBpbiBhIHJlYXNvbmFibGUgb3JkZXIuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2LCBuZXh0KSB7XG4gIHByZXYgPSBwcmV2IHx8IHt9O1xuICBuZXh0ID0gbmV4dCB8fCB7fTtcblxuICBmdW5jdGlvbiBnZXRWYWx1ZUZvcktleShrZXkpIHtcbiAgICByZXR1cm4ga2V5IGluIG5leHQgPyBuZXh0W2tleV0gOiBwcmV2W2tleV07XG4gIH0gLy8gRm9yIGVhY2gga2V5IG9mIGBuZXh0YCwgdGhlIGxpc3Qgb2Yga2V5cyB0byBpbnNlcnQgYmVmb3JlIHRoYXQga2V5IGluXG4gIC8vIHRoZSBjb21iaW5lZCBsaXN0XG5cblxuICB2YXIgbmV4dEtleXNQZW5kaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHBlbmRpbmdLZXlzID0gW107XG5cbiAgZm9yICh2YXIgcHJldktleSBpbiBwcmV2KSB7XG4gICAgaWYgKHByZXZLZXkgaW4gbmV4dCkge1xuICAgICAgaWYgKHBlbmRpbmdLZXlzLmxlbmd0aCkge1xuICAgICAgICBuZXh0S2V5c1BlbmRpbmdbcHJldktleV0gPSBwZW5kaW5nS2V5cztcbiAgICAgICAgcGVuZGluZ0tleXMgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0tleXMucHVzaChwcmV2S2V5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIGNoaWxkTWFwcGluZyA9IHt9O1xuXG4gIGZvciAodmFyIG5leHRLZXkgaW4gbmV4dCkge1xuICAgIGlmIChuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0pIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBlbmRpbmdOZXh0S2V5ID0gbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldO1xuICAgICAgICBjaGlsZE1hcHBpbmdbbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdOZXh0S2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZE1hcHBpbmdbbmV4dEtleV0gPSBnZXRWYWx1ZUZvcktleShuZXh0S2V5KTtcbiAgfSAvLyBGaW5hbGx5LCBhZGQgdGhlIGtleXMgd2hpY2ggZGlkbid0IGFwcGVhciBiZWZvcmUgYW55IGtleSBpbiBgbmV4dGBcblxuXG4gIGZvciAoaSA9IDA7IGkgPCBwZW5kaW5nS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNoaWxkTWFwcGluZ1twZW5kaW5nS2V5c1tpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nS2V5c1tpXSk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRNYXBwaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wKGNoaWxkLCBwcm9wLCBwcm9wcykge1xuICByZXR1cm4gcHJvcHNbcHJvcF0gIT0gbnVsbCA/IHByb3BzW3Byb3BdIDogY2hpbGQucHJvcHNbcHJvcF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKHByb3BzLCBvbkV4aXRlZCkge1xuICByZXR1cm4gZ2V0Q2hpbGRNYXBwaW5nKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICBpbjogdHJ1ZSxcbiAgICAgIGFwcGVhcjogZ2V0UHJvcChjaGlsZCwgJ2FwcGVhcicsIHByb3BzKSxcbiAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBwcm9wcyksXG4gICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIHByb3BzKVxuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgb25FeGl0ZWQpIHtcbiAgdmFyIG5leHRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcobmV4dFByb3BzLmNoaWxkcmVuKTtcbiAgdmFyIGNoaWxkcmVuID0gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXZDaGlsZE1hcHBpbmcsIG5leHRDaGlsZE1hcHBpbmcpO1xuICBPYmplY3Qua2V5cyhjaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5ba2V5XTtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkKSkgcmV0dXJuO1xuICAgIHZhciBoYXNQcmV2ID0gKGtleSBpbiBwcmV2Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgaGFzTmV4dCA9IChrZXkgaW4gbmV4dENoaWxkTWFwcGluZyk7XG4gICAgdmFyIHByZXZDaGlsZCA9IHByZXZDaGlsZE1hcHBpbmdba2V5XTtcbiAgICB2YXIgaXNMZWF2aW5nID0gaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSAmJiAhcHJldkNoaWxkLnByb3BzLmluOyAvLyBpdGVtIGlzIG5ldyAoZW50ZXJpbmcpXG5cbiAgICBpZiAoaGFzTmV4dCAmJiAoIWhhc1ByZXYgfHwgaXNMZWF2aW5nKSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ2VudGVyaW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiB0cnVlLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFoYXNOZXh0ICYmIGhhc1ByZXYgJiYgIWlzTGVhdmluZykge1xuICAgICAgLy8gaXRlbSBpcyBvbGQgKGV4aXRpbmcpXG4gICAgICAvLyBjb25zb2xlLmxvZygnbGVhdmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgaW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGhhc05leHQgJiYgaGFzUHJldiAmJiBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpKSB7XG4gICAgICAvLyBpdGVtIGhhc24ndCBjaGFuZ2VkIHRyYW5zaXRpb24gc3RhdGVzXG4gICAgICAvLyBjb3B5IG92ZXIgdGhlIGxhc3QgdHJhbnNpdGlvbiBwcm9wcztcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd1bmNoYW5nZWQnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHByZXZDaGlsZC5wcm9wcy5pbixcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGdldENoaWxkTWFwcGluZywgZ2V0SW5pdGlhbENoaWxkTWFwcGluZywgZ2V0TmV4dENoaWxkTWFwcGluZyB9IGZyb20gJy4vdXRpbHMvQ2hpbGRNYXBwaW5nJztcblxudmFyIHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICByZXR1cm4gb2JqW2tdO1xuICB9KTtcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGNvbXBvbmVudDogJ2RpdicsXG4gIGNoaWxkRmFjdG9yeTogZnVuY3Rpb24gY2hpbGRGYWN0b3J5KGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG59O1xuLyoqXG4gKiBUaGUgYDxUcmFuc2l0aW9uR3JvdXA+YCBjb21wb25lbnQgbWFuYWdlcyBhIHNldCBvZiB0cmFuc2l0aW9uIGNvbXBvbmVudHNcbiAqIChgPFRyYW5zaXRpb24+YCBhbmQgYDxDU1NUcmFuc2l0aW9uPmApIGluIGEgbGlzdC4gTGlrZSB3aXRoIHRoZSB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnRzLCBgPFRyYW5zaXRpb25Hcm91cD5gIGlzIGEgc3RhdGUgbWFjaGluZSBmb3IgbWFuYWdpbmcgdGhlIG1vdW50aW5nXG4gKiBhbmQgdW5tb3VudGluZyBvZiBjb21wb25lbnRzIG92ZXIgdGltZS5cbiAqXG4gKiBDb25zaWRlciB0aGUgZXhhbXBsZSBiZWxvdy4gQXMgaXRlbXMgYXJlIHJlbW92ZWQgb3IgYWRkZWQgdG8gdGhlIFRvZG9MaXN0IHRoZVxuICogYGluYCBwcm9wIGlzIHRvZ2dsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YC5cbiAqXG4gKiBOb3RlIHRoYXQgYDxUcmFuc2l0aW9uR3JvdXA+YCAgZG9lcyBub3QgZGVmaW5lIGFueSBhbmltYXRpb24gYmVoYXZpb3IhXG4gKiBFeGFjdGx5IF9ob3dfIGEgbGlzdCBpdGVtIGFuaW1hdGVzIGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudC4gVGhpcyBtZWFucyB5b3UgY2FuIG1peCBhbmQgbWF0Y2ggYW5pbWF0aW9ucyBhY3Jvc3MgZGlmZmVyZW50IGxpc3RcbiAqIGl0ZW1zLlxuICovXG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbkdyb3VwLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uR3JvdXAocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcblxuICAgIHZhciBoYW5kbGVFeGl0ZWQgPSBfdGhpcy5oYW5kbGVFeGl0ZWQuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7IC8vIEluaXRpYWwgY2hpbGRyZW4gc2hvdWxkIGFsbCBiZSBlbnRlcmluZywgZGVwZW5kZW50IG9uIGFwcGVhclxuXG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgaGFuZGxlRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICBmaXJzdFJlbmRlcjogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIFRyYW5zaXRpb25Hcm91cC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBfcmVmKSB7XG4gICAgdmFyIHByZXZDaGlsZE1hcHBpbmcgPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICBoYW5kbGVFeGl0ZWQgPSBfcmVmLmhhbmRsZUV4aXRlZCxcbiAgICAgICAgZmlyc3RSZW5kZXIgPSBfcmVmLmZpcnN0UmVuZGVyO1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbjogZmlyc3RSZW5kZXIgPyBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKG5leHRQcm9wcywgaGFuZGxlRXhpdGVkKSA6IGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBoYW5kbGVFeGl0ZWQpLFxuICAgICAgZmlyc3RSZW5kZXI6IGZhbHNlXG4gICAgfTtcbiAgfSAvLyBub2RlIGlzIGB1bmRlZmluZWRgIHdoZW4gdXNlciBwcm92aWRlZCBgbm9kZVJlZmAgcHJvcFxuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUV4aXRlZCA9IGZ1bmN0aW9uIGhhbmRsZUV4aXRlZChjaGlsZCwgbm9kZSkge1xuICAgIHZhciBjdXJyZW50Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmIChjaGlsZC5rZXkgaW4gY3VycmVudENoaWxkTWFwcGluZykgcmV0dXJuO1xuXG4gICAgaWYgKGNoaWxkLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICBjaGlsZC5wcm9wcy5vbkV4aXRlZChub2RlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb3VudGVkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBfZXh0ZW5kcyh7fSwgc3RhdGUuY2hpbGRyZW4pO1xuXG4gICAgICAgIGRlbGV0ZSBjaGlsZHJlbltjaGlsZC5rZXldO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgQ29tcG9uZW50ID0gX3RoaXMkcHJvcHMuY29tcG9uZW50LFxuICAgICAgICBjaGlsZEZhY3RvcnkgPSBfdGhpcyRwcm9wcy5jaGlsZEZhY3RvcnksXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNvbXBvbmVudFwiLCBcImNoaWxkRmFjdG9yeVwiXSk7XG5cbiAgICB2YXIgY29udGV4dFZhbHVlID0gdGhpcy5zdGF0ZS5jb250ZXh0VmFsdWU7XG4gICAgdmFyIGNoaWxkcmVuID0gdmFsdWVzKHRoaXMuc3RhdGUuY2hpbGRyZW4pLm1hcChjaGlsZEZhY3RvcnkpO1xuICAgIGRlbGV0ZSBwcm9wcy5hcHBlYXI7XG4gICAgZGVsZXRlIHByb3BzLmVudGVyO1xuICAgIGRlbGV0ZSBwcm9wcy5leGl0O1xuXG4gICAgaWYgKENvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbkdyb3VwO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uR3JvdXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogYDxUcmFuc2l0aW9uR3JvdXA+YCByZW5kZXJzIGEgYDxkaXY+YCBieSBkZWZhdWx0LiBZb3UgY2FuIGNoYW5nZSB0aGlzXG4gICAqIGJlaGF2aW9yIGJ5IHByb3ZpZGluZyBhIGBjb21wb25lbnRgIHByb3AuXG4gICAqIElmIHlvdSB1c2UgUmVhY3QgdjE2KyBhbmQgd291bGQgbGlrZSB0byBhdm9pZCBhIHdyYXBwaW5nIGA8ZGl2PmAgZWxlbWVudFxuICAgKiB5b3UgY2FuIHBhc3MgaW4gYGNvbXBvbmVudD17bnVsbH1gLiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgd3JhcHBpbmcgZGl2XG4gICAqIGJvcmtzIHlvdXIgY3NzIHN0eWxlcy5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICogQSBzZXQgb2YgYDxUcmFuc2l0aW9uPmAgY29tcG9uZW50cywgdGhhdCBhcmUgdG9nZ2xlZCBgaW5gIGFuZCBvdXQgYXMgdGhleVxuICAgKiBsZWF2ZS4gdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgd2lsbCBpbmplY3Qgc3BlY2lmaWMgdHJhbnNpdGlvbiBwcm9wcywgc29cbiAgICogcmVtZW1iZXIgdG8gc3ByZWFkIHRoZW0gdGhyb3VnaCBpZiB5b3UgYXJlIHdyYXBwaW5nIHRoZSBgPFRyYW5zaXRpb24+YCBhc1xuICAgKiB3aXRoIG91ciBgPEZhZGU+YCBleGFtcGxlLlxuICAgKlxuICAgKiBXaGlsZSB0aGlzIGNvbXBvbmVudCBpcyBtZWFudCBmb3IgbXVsdGlwbGUgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYFxuICAgKiBjaGlsZHJlbiwgc29tZXRpbWVzIHlvdSBtYXkgd2FudCB0byBoYXZlIGEgc2luZ2xlIHRyYW5zaXRpb24gY2hpbGQgd2l0aFxuICAgKiBjb250ZW50IHRoYXQgeW91IHdhbnQgdG8gYmUgdHJhbnNpdGlvbmVkIG91dCBhbmQgaW4gd2hlbiB5b3UgY2hhbmdlIGl0XG4gICAqIChlLmcuIHJvdXRlcywgaW1hZ2VzIGV0Yy4pIEluIHRoYXQgY2FzZSB5b3UgY2FuIGNoYW5nZSB0aGUgYGtleWAgcHJvcCBvZlxuICAgKiB0aGUgdHJhbnNpdGlvbiBjaGlsZCBhcyB5b3UgY2hhbmdlIGl0cyBjb250ZW50LCB0aGlzIHdpbGwgY2F1c2VcbiAgICogYFRyYW5zaXRpb25Hcm91cGAgdG8gdHJhbnNpdGlvbiB0aGUgY2hpbGQgb3V0IGFuZCBiYWNrIGluLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGFwcGVhciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGVudGVyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBleGl0IGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBZb3UgbWF5IG5lZWQgdG8gYXBwbHkgcmVhY3RpdmUgdXBkYXRlcyB0byBhIGNoaWxkIGFzIGl0IGlzIGV4aXRpbmcuXG4gICAqIFRoaXMgaXMgZ2VuZXJhbGx5IGRvbmUgYnkgdXNpbmcgYGNsb25lRWxlbWVudGAgaG93ZXZlciBpbiB0aGUgY2FzZSBvZiBhbiBleGl0aW5nXG4gICAqIGNoaWxkIHRoZSBlbGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBhbmQgbm90IGFjY2Vzc2libGUgdG8gdGhlIGNvbnN1bWVyLlxuICAgKlxuICAgKiBJZiB5b3UgZG8gbmVlZCB0byB1cGRhdGUgYSBjaGlsZCBhcyBpdCBsZWF2ZXMgeW91IGNhbiBwcm92aWRlIGEgYGNoaWxkRmFjdG9yeWBcbiAgICogdG8gd3JhcCBldmVyeSBjaGlsZCwgZXZlbiB0aGUgb25lcyB0aGF0IGFyZSBsZWF2aW5nLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihjaGlsZDogUmVhY3RFbGVtZW50KSAtPiBSZWFjdEVsZW1lbnRcbiAgICovXG4gIGNoaWxkRmFjdG9yeTogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTtcblRyYW5zaXRpb25Hcm91cC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uR3JvdXA7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwIGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwJztcbi8qKlxuICogVGhlIGA8UmVwbGFjZVRyYW5zaXRpb24+YCBjb21wb25lbnQgaXMgYSBzcGVjaWFsaXplZCBgVHJhbnNpdGlvbmAgY29tcG9uZW50XG4gKiB0aGF0IGFuaW1hdGVzIGJldHdlZW4gdHdvIGNoaWxkcmVuLlxuICpcbiAqIGBgYGpzeFxuICogPFJlcGxhY2VUcmFuc2l0aW9uIGluPlxuICogICA8RmFkZT48ZGl2PkkgYXBwZWFyIGZpcnN0PC9kaXY+PC9GYWRlPlxuICogICA8RmFkZT48ZGl2PkkgcmVwbGFjZSB0aGUgYWJvdmU8L2Rpdj48L0ZhZGU+XG4gKiA8L1JlcGxhY2VUcmFuc2l0aW9uPlxuICogYGBgXG4gKi9cblxudmFyIFJlcGxhY2VUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFJlcGxhY2VUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBSZXBsYWNlVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgX2FyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBfYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KF9hcmdzKSkgfHwgdGhpcztcblxuICAgIF90aGlzLmhhbmRsZUVudGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcicsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXJpbmcnLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXJlZCcsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW41KSwgX2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0JywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjYpLCBfa2V5NiA9IDA7IF9rZXk2IDwgX2xlbjY7IF9rZXk2KyspIHtcbiAgICAgICAgYXJnc1tfa2V5Nl0gPSBhcmd1bWVudHNbX2tleTZdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXRpbmcnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTddID0gYXJndW1lbnRzW19rZXk3XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0ZWQnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFJlcGxhY2VUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlTGlmZWN5Y2xlID0gZnVuY3Rpb24gaGFuZGxlTGlmZWN5Y2xlKGhhbmRsZXIsIGlkeCwgb3JpZ2luYWxBcmdzKSB7XG4gICAgdmFyIF9jaGlsZCRwcm9wcztcblxuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIGNoaWxkID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbilbaWR4XTtcbiAgICBpZiAoY2hpbGQucHJvcHNbaGFuZGxlcl0pIChfY2hpbGQkcHJvcHMgPSBjaGlsZC5wcm9wcylbaGFuZGxlcl0uYXBwbHkoX2NoaWxkJHByb3BzLCBvcmlnaW5hbEFyZ3MpO1xuXG4gICAgaWYgKHRoaXMucHJvcHNbaGFuZGxlcl0pIHtcbiAgICAgIHZhciBtYXliZU5vZGUgPSBjaGlsZC5wcm9wcy5ub2RlUmVmID8gdW5kZWZpbmVkIDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICB0aGlzLnByb3BzW2hhbmRsZXJdKG1heWJlTm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgaW5Qcm9wID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIl0pO1xuXG4gICAgdmFyIF9SZWFjdCRDaGlsZHJlbiR0b0FyciA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLFxuICAgICAgICBmaXJzdCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclswXSxcbiAgICAgICAgc2Vjb25kID0gX1JlYWN0JENoaWxkcmVuJHRvQXJyWzFdO1xuXG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJlZDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0O1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdGVkO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXAsIHByb3BzLCBpblByb3AgPyBSZWFjdC5jbG9uZUVsZW1lbnQoZmlyc3QsIHtcbiAgICAgIGtleTogJ2ZpcnN0JyxcbiAgICAgIG9uRW50ZXI6IHRoaXMuaGFuZGxlRW50ZXIsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLmhhbmRsZUVudGVyaW5nLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLmhhbmRsZUVudGVyZWRcbiAgICB9KSA6IFJlYWN0LmNsb25lRWxlbWVudChzZWNvbmQsIHtcbiAgICAgIGtleTogJ3NlY29uZCcsXG4gICAgICBvbkVudGVyOiB0aGlzLmhhbmRsZUV4aXQsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLmhhbmRsZUV4aXRpbmcsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMuaGFuZGxlRXhpdGVkXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiBSZXBsYWNlVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuUmVwbGFjZVRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBpbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgY2hpbGRyZW46IGZ1bmN0aW9uIGNoaWxkcmVuKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIGlmIChSZWFjdC5DaGlsZHJlbi5jb3VudChwcm9wc1twcm9wTmFtZV0pICE9PSAyKSByZXR1cm4gbmV3IEVycm9yKFwiXFxcIlwiICsgcHJvcE5hbWUgKyBcIlxcXCIgbXVzdCBiZSBleGFjdGx5IHR3byB0cmFuc2l0aW9uIGNvbXBvbmVudHMuXCIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IDoge307XG5leHBvcnQgZGVmYXVsdCBSZXBsYWNlVHJhbnNpdGlvbjsiLCJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcblxudmFyIF9sZWF2ZVJlbmRlcnMsIF9lbnRlclJlbmRlcnM7XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRU5URVJFRCwgRU5URVJJTkcsIEVYSVRJTkcgfSBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcblxuZnVuY3Rpb24gYXJlQ2hpbGRyZW5EaWZmZXJlbnQob2xkQ2hpbGRyZW4sIG5ld0NoaWxkcmVuKSB7XG4gIGlmIChvbGRDaGlsZHJlbiA9PT0gbmV3Q2hpbGRyZW4pIHJldHVybiBmYWxzZTtcblxuICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQob2xkQ2hpbGRyZW4pICYmIFJlYWN0LmlzVmFsaWRFbGVtZW50KG5ld0NoaWxkcmVuKSAmJiBvbGRDaGlsZHJlbi5rZXkgIT0gbnVsbCAmJiBvbGRDaGlsZHJlbi5rZXkgPT09IG5ld0NoaWxkcmVuLmtleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBFbnVtIG9mIG1vZGVzIGZvciBTd2l0Y2hUcmFuc2l0aW9uIGNvbXBvbmVudFxuICogQGVudW0geyBzdHJpbmcgfVxuICovXG5cblxuZXhwb3J0IHZhciBtb2RlcyA9IHtcbiAgb3V0OiAnb3V0LWluJyxcbiAgaW46ICdpbi1vdXQnXG59O1xuXG52YXIgY2FsbEhvb2sgPSBmdW5jdGlvbiBjYWxsSG9vayhlbGVtZW50LCBuYW1lLCBjYikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfZWxlbWVudCRwcm9wcztcblxuICAgIGVsZW1lbnQucHJvcHNbbmFtZV0gJiYgKF9lbGVtZW50JHByb3BzID0gZWxlbWVudC5wcm9wcylbbmFtZV0uYXBwbHkoX2VsZW1lbnQkcHJvcHMsIGFyZ3VtZW50cyk7XG4gICAgY2IoKTtcbiAgfTtcbn07XG5cbnZhciBsZWF2ZVJlbmRlcnMgPSAoX2xlYXZlUmVuZGVycyA9IHt9LCBfbGVhdmVSZW5kZXJzW21vZGVzLm91dF0gPSBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgY3VycmVudCA9IF9yZWYuY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZi5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjdXJyZW50LCB7XG4gICAgaW46IGZhbHNlLFxuICAgIG9uRXhpdGVkOiBjYWxsSG9vayhjdXJyZW50LCAnb25FeGl0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUklORywgbnVsbCk7XG4gICAgfSlcbiAgfSk7XG59LCBfbGVhdmVSZW5kZXJzW21vZGVzLmluXSA9IGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgY3VycmVudCA9IF9yZWYyLmN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYyLmNoYW5nZVN0YXRlLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgcmV0dXJuIFtjdXJyZW50LCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZSxcbiAgICBvbkVudGVyZWQ6IGNhbGxIb29rKGNoaWxkcmVuLCAnb25FbnRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJJTkcpO1xuICAgIH0pXG4gIH0pXTtcbn0sIF9sZWF2ZVJlbmRlcnMpO1xudmFyIGVudGVyUmVuZGVycyA9IChfZW50ZXJSZW5kZXJzID0ge30sIF9lbnRlclJlbmRlcnNbbW9kZXMub3V0XSA9IGZ1bmN0aW9uIChfcmVmMykge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMy5jaGlsZHJlbixcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjMuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZSxcbiAgICBvbkVudGVyZWQ6IGNhbGxIb29rKGNoaWxkcmVuLCAnb25FbnRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJFRCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSlcbiAgfSk7XG59LCBfZW50ZXJSZW5kZXJzW21vZGVzLmluXSA9IGZ1bmN0aW9uIChfcmVmNCkge1xuICB2YXIgY3VycmVudCA9IF9yZWY0LmN1cnJlbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY0LmNoaWxkcmVuLFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmNC5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFtSZWFjdC5jbG9uZUVsZW1lbnQoY3VycmVudCwge1xuICAgIGluOiBmYWxzZSxcbiAgICBvbkV4aXRlZDogY2FsbEhvb2soY3VycmVudCwgJ29uRXhpdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJFRCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSlcbiAgfSksIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlXG4gIH0pXTtcbn0sIF9lbnRlclJlbmRlcnMpO1xuLyoqXG4gKiBBIHRyYW5zaXRpb24gY29tcG9uZW50IGluc3BpcmVkIGJ5IHRoZSBbdnVlIHRyYW5zaXRpb24gbW9kZXNdKGh0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL3RyYW5zaXRpb25zLmh0bWwjVHJhbnNpdGlvbi1Nb2RlcykuXG4gKiBZb3UgY2FuIHVzZSBpdCB3aGVuIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIHJlbmRlciBiZXR3ZWVuIHN0YXRlIHRyYW5zaXRpb25zLlxuICogQmFzZWQgb24gdGhlIHNlbGVjdGVkIG1vZGUgYW5kIHRoZSBjaGlsZCdzIGtleSB3aGljaCBpcyB0aGUgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYCBjb21wb25lbnQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgbWFrZXMgYSBjb25zaXN0ZW50IHRyYW5zaXRpb24gYmV0d2VlbiB0aGVtLlxuICpcbiAqIElmIHRoZSBgb3V0LWluYCBtb2RlIGlzIHNlbGVjdGVkLCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIHdhaXRzIHVudGlsIHRoZSBvbGQgY2hpbGQgbGVhdmVzIGFuZCB0aGVuIGluc2VydHMgYSBuZXcgY2hpbGQuXG4gKiBJZiB0aGUgYGluLW91dGAgbW9kZSBpcyBzZWxlY3RlZCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCBpbnNlcnRzIGEgbmV3IGNoaWxkIGZpcnN0LCB3YWl0cyBmb3IgdGhlIG5ldyBjaGlsZCB0byBlbnRlciBhbmQgdGhlbiByZW1vdmVzIHRoZSBvbGQgY2hpbGQuXG4gKlxuICogKipOb3RlKio6IElmIHlvdSB3YW50IHRoZSBhbmltYXRpb24gdG8gaGFwcGVuIHNpbXVsdGFuZW91c2x5XG4gKiAodGhhdCBpcywgdG8gaGF2ZSB0aGUgb2xkIGNoaWxkIHJlbW92ZWQgYW5kIGEgbmV3IGNoaWxkIGluc2VydGVkICoqYXQgdGhlIHNhbWUgdGltZSoqKSxcbiAqIHlvdSBzaG91bGQgdXNlXG4gKiBbYFRyYW5zaXRpb25Hcm91cGBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi1ncm91cClcbiAqIGluc3RlYWQuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgcmV0dXJuIChcbiAqICAgIDxTd2l0Y2hUcmFuc2l0aW9uPlxuICogICAgICA8Q1NTVHJhbnNpdGlvblxuICogICAgICAgIGtleT17c3RhdGUgPyBcIkdvb2RieWUsIHdvcmxkIVwiIDogXCJIZWxsbywgd29ybGQhXCJ9XG4gKiAgICAgICAgYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIGRvbmUsIGZhbHNlKX1cbiAqICAgICAgICBjbGFzc05hbWVzPSdmYWRlJ1xuICogICAgICA+XG4gKiAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRTdGF0ZShzdGF0ZSA9PiAhc3RhdGUpfT5cbiAqICAgICAgICAgIHtzdGF0ZSA/IFwiR29vZGJ5ZSwgd29ybGQhXCIgOiBcIkhlbGxvLCB3b3JsZCFcIn1cbiAqICAgICAgICA8L2J1dHRvbj5cbiAqICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICogICAgPC9Td2l0Y2hUcmFuc2l0aW9uPlxuICogICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgYGBjc3NcbiAqIC5mYWRlLWVudGVye1xuICogICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5mYWRlLWV4aXR7XG4gKiAgICBvcGFjaXR5OiAxO1xuICogfVxuICogLmZhZGUtZW50ZXItYWN0aXZle1xuICogICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5mYWRlLWV4aXQtYWN0aXZle1xuICogICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5mYWRlLWVudGVyLWFjdGl2ZSxcbiAqIC5mYWRlLWV4aXQtYWN0aXZle1xuICogICAgdHJhbnNpdGlvbjogb3BhY2l0eSA1MDBtcztcbiAqIH1cbiAqIGBgYFxuICovXG5cbnZhciBTd2l0Y2hUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFN3aXRjaFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN3aXRjaFRyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IEVOVEVSRUQsXG4gICAgICBjdXJyZW50OiBudWxsXG4gICAgfTtcbiAgICBfdGhpcy5hcHBlYXJlZCA9IGZhbHNlO1xuXG4gICAgX3RoaXMuY2hhbmdlU3RhdGUgPSBmdW5jdGlvbiAoc3RhdHVzLCBjdXJyZW50KSB7XG4gICAgICBpZiAoY3VycmVudCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGN1cnJlbnQgPSBfdGhpcy5zdGF0ZS5jdXJyZW50O1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgICBjdXJyZW50OiBjdXJyZW50XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN3aXRjaFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuYXBwZWFyZWQgPSB0cnVlO1xuICB9O1xuXG4gIFN3aXRjaFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuICAgIGlmIChwcm9wcy5jaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50OiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09IEVOVEVSSU5HICYmIHByb3BzLm1vZGUgPT09IG1vZGVzLmluKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5jdXJyZW50ICYmIGFyZUNoaWxkcmVuRGlmZmVyZW50KHN0YXRlLmN1cnJlbnQsIHByb3BzLmNoaWxkcmVuKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50OiBSZWFjdC5jbG9uZUVsZW1lbnQocHJvcHMuY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIG1vZGUgPSBfdGhpcyRwcm9wcy5tb2RlLFxuICAgICAgICBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHN0YXR1cyA9IF90aGlzJHN0YXRlLnN0YXR1cyxcbiAgICAgICAgY3VycmVudCA9IF90aGlzJHN0YXRlLmN1cnJlbnQ7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGU6IHRoaXMuY2hhbmdlU3RhdGUsXG4gICAgICBzdGF0dXM6IHN0YXR1c1xuICAgIH07XG4gICAgdmFyIGNvbXBvbmVudDtcblxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlIEVOVEVSSU5HOlxuICAgICAgICBjb21wb25lbnQgPSBlbnRlclJlbmRlcnNbbW9kZV0oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEVYSVRJTkc6XG4gICAgICAgIGNvbXBvbmVudCA9IGxlYXZlUmVuZGVyc1ttb2RlXShkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRU5URVJFRDpcbiAgICAgICAgY29tcG9uZW50ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogIXRoaXMuYXBwZWFyZWRcbiAgICAgIH1cbiAgICB9LCBjb21wb25lbnQpO1xuICB9O1xuXG4gIHJldHVybiBTd2l0Y2hUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Td2l0Y2hUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIFRyYW5zaXRpb24gbW9kZXMuXG4gICAqIGBvdXQtaW5gOiBDdXJyZW50IGVsZW1lbnQgdHJhbnNpdGlvbnMgb3V0IGZpcnN0LCB0aGVuIHdoZW4gY29tcGxldGUsIHRoZSBuZXcgZWxlbWVudCB0cmFuc2l0aW9ucyBpbi5cbiAgICogYGluLW91dGA6IE5ldyBlbGVtZW50IHRyYW5zaXRpb25zIGluIGZpcnN0LCB0aGVuIHdoZW4gY29tcGxldGUsIHRoZSBjdXJyZW50IGVsZW1lbnQgdHJhbnNpdGlvbnMgb3V0LlxuICAgKlxuICAgKiBAdHlwZSB7J291dC1pbid8J2luLW91dCd9XG4gICAqL1xuICBtb2RlOiBQcm9wVHlwZXMub25lT2YoW21vZGVzLmluLCBtb2Rlcy5vdXRdKSxcblxuICAvKipcbiAgICogQW55IGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmAgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKVxufSA6IHt9O1xuU3dpdGNoVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIG1vZGU6IG1vZGVzLm91dFxufTtcbmV4cG9ydCBkZWZhdWx0IFN3aXRjaFRyYW5zaXRpb247IiwiaW1wb3J0IHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzUmFuZ2VWaXNpYmxlKF9yZWYpIHtcbiAgdmFyIGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0b3BJbmRleCxcbiAgICAgIHN0YXJ0SW5kZXggPSBfcmVmLnN0YXJ0SW5kZXgsXG4gICAgICBzdG9wSW5kZXggPSBfcmVmLnN0b3BJbmRleDtcblxuICByZXR1cm4gIShzdGFydEluZGV4ID4gbGFzdFJlbmRlcmVkU3RvcEluZGV4IHx8IHN0b3BJbmRleCA8IGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgpO1xufVxuXG5mdW5jdGlvbiBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoX3JlZikge1xuICB2YXIgaXNJdGVtTG9hZGVkID0gX3JlZi5pc0l0ZW1Mb2FkZWQsXG4gICAgICBpdGVtQ291bnQgPSBfcmVmLml0ZW1Db3VudCxcbiAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcmVmLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgdmFyIHVubG9hZGVkUmFuZ2VzID0gW107XG5cbiAgdmFyIHJhbmdlU3RhcnRJbmRleCA9IG51bGw7XG4gIHZhciByYW5nZVN0b3BJbmRleCA9IG51bGw7XG5cbiAgZm9yICh2YXIgX2luZGV4ID0gc3RhcnRJbmRleDsgX2luZGV4IDw9IHN0b3BJbmRleDsgX2luZGV4KyspIHtcbiAgICB2YXIgbG9hZGVkID0gaXNJdGVtTG9hZGVkKF9pbmRleCk7XG5cbiAgICBpZiAoIWxvYWRlZCkge1xuICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXg7XG4gICAgICBpZiAocmFuZ2VTdGFydEluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIHJhbmdlU3RhcnRJbmRleCA9IF9pbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuXG4gICAgICByYW5nZVN0YXJ0SW5kZXggPSByYW5nZVN0b3BJbmRleCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgOnJhbmdlU3RvcEluZGV4IGlzIG5vdCBudWxsIGl0IG1lYW5zIHdlIGhhdmVuJ3QgcmFuIG91dCBvZiB1bmxvYWRlZCByb3dzLlxuICAvLyBTY2FuIGZvcndhcmQgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAocmFuZ2VTdG9wSW5kZXggIT09IG51bGwpIHtcbiAgICB2YXIgcG90ZW50aWFsU3RvcEluZGV4ID0gTWF0aC5taW4oTWF0aC5tYXgocmFuZ2VTdG9wSW5kZXgsIHJhbmdlU3RhcnRJbmRleCArIG1pbmltdW1CYXRjaFNpemUgLSAxKSwgaXRlbUNvdW50IC0gMSk7XG5cbiAgICBmb3IgKHZhciBfaW5kZXgyID0gcmFuZ2VTdG9wSW5kZXggKyAxOyBfaW5kZXgyIDw9IHBvdGVudGlhbFN0b3BJbmRleDsgX2luZGV4MisrKSB7XG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgyKSkge1xuICAgICAgICByYW5nZVN0b3BJbmRleCA9IF9pbmRleDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG8gc2VlIGlmIG91ciBmaXJzdCByYW5nZSBlbmRlZCBwcmVtYXR1cmVseS5cbiAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzY2FuIGJhY2t3YXJkcyB0byB0cnkgZmlsbGluZyBvdXIgOm1pbmltdW1CYXRjaFNpemUuXG4gIGlmICh1bmxvYWRlZFJhbmdlcy5sZW5ndGgpIHtcbiAgICB3aGlsZSAodW5sb2FkZWRSYW5nZXNbMV0gLSB1bmxvYWRlZFJhbmdlc1swXSArIDEgPCBtaW5pbXVtQmF0Y2hTaXplICYmIHVubG9hZGVkUmFuZ2VzWzBdID4gMCkge1xuICAgICAgdmFyIF9pbmRleDMgPSB1bmxvYWRlZFJhbmdlc1swXSAtIDE7XG5cbiAgICAgIGlmICghaXNJdGVtTG9hZGVkKF9pbmRleDMpKSB7XG4gICAgICAgIHVubG9hZGVkUmFuZ2VzWzBdID0gX2luZGV4MztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmxvYWRlZFJhbmdlcztcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxudmFyIGluaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufTtcblxudmFyIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gPSBmdW5jdGlvbiAoc2VsZiwgY2FsbCkge1xuICBpZiAoIXNlbGYpIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjtcbn07XG5cbnZhciBJbmZpbml0ZUxvYWRlciA9IGZ1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBpbmhlcml0cyhJbmZpbml0ZUxvYWRlciwgX1B1cmVDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEluZmluaXRlTG9hZGVyKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIEluZmluaXRlTG9hZGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IEluZmluaXRlTG9hZGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoSW5maW5pdGVMb2FkZXIpKS5jYWxsLmFwcGx5KF9yZWYsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IC0xLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gLTEsIF90aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gW10sIF90aGlzLl9vbkl0ZW1zUmVuZGVyZWQgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB2aXNpYmxlU3RhcnRJbmRleCA9IF9yZWYyLnZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdG9wSW5kZXggPSBfcmVmMi52aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIWlzSW50ZWdlcih2aXNpYmxlU3RhcnRJbmRleCkgfHwgIWlzSW50ZWdlcih2aXNpYmxlU3RvcEluZGV4KSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBvbkl0ZW1zUmVuZGVyZWQgc2lnbmF0dXJlOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgX3RoaXMucHJvcHMubG9hZE1vcmVSb3dzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbmZpbml0ZUxvYWRlciBcImxvYWRNb3JlUm93c1wiIHByb3AgaGFzIGJlZW4gcmVuYW1lZCB0byBcImxvYWRNb3JlSXRlbXNcIi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IHZpc2libGVTdGFydEluZGV4O1xuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IHZpc2libGVTdG9wSW5kZXg7XG5cbiAgICAgIF90aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHZpc2libGVTdGFydEluZGV4LCB2aXNpYmxlU3RvcEluZGV4KTtcbiAgICB9LCBfdGhpcy5fc2V0UmVmID0gZnVuY3Rpb24gKGxpc3RSZWYpIHtcbiAgICAgIF90aGlzLl9saXN0UmVmID0gbGlzdFJlZjtcbiAgICB9LCBfdGVtcCksIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgY3JlYXRlQ2xhc3MoSW5maW5pdGVMb2FkZXIsIFt7XG4gICAga2V5OiAncmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldGxvYWRNb3JlSXRlbXNDYWNoZSgpIHtcbiAgICAgIHZhciBhdXRvUmVsb2FkID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gICAgICBpZiAoYXV0b1JlbG9hZCkge1xuICAgICAgICB0aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHRoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsIHRoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0aGlzLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgbGlzdCByZWY7IHBsZWFzZSByZWZlciB0byBJbmZpbml0ZUxvYWRlciBkb2N1bWVudGF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcblxuXG4gICAgICByZXR1cm4gY2hpbGRyZW4oe1xuICAgICAgICBvbkl0ZW1zUmVuZGVyZWQ6IHRoaXMuX29uSXRlbXNSZW5kZXJlZCxcbiAgICAgICAgcmVmOiB0aGlzLl9zZXRSZWZcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19lbnN1cmVSb3dzTG9hZGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2Vuc3VyZVJvd3NMb2FkZWQoc3RhcnRJbmRleCwgc3RvcEluZGV4KSB7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0l0ZW1Mb2FkZWQgPSBfcHJvcHMuaXNJdGVtTG9hZGVkLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF9wcm9wcy5pdGVtQ291bnQsXG4gICAgICAgICAgX3Byb3BzJG1pbmltdW1CYXRjaFNpID0gX3Byb3BzLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgICAgbWluaW11bUJhdGNoU2l6ZSA9IF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9PT0gdW5kZWZpbmVkID8gMTAgOiBfcHJvcHMkbWluaW11bUJhdGNoU2ksXG4gICAgICAgICAgX3Byb3BzJHRocmVzaG9sZCA9IF9wcm9wcy50aHJlc2hvbGQsXG4gICAgICAgICAgdGhyZXNob2xkID0gX3Byb3BzJHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkID8gMTUgOiBfcHJvcHMkdGhyZXNob2xkO1xuXG5cbiAgICAgIHZhciB1bmxvYWRlZFJhbmdlcyA9IHNjYW5Gb3JVbmxvYWRlZFJhbmdlcyh7XG4gICAgICAgIGlzSXRlbUxvYWRlZDogaXNJdGVtTG9hZGVkLFxuICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgbWluaW11bUJhdGNoU2l6ZTogbWluaW11bUJhdGNoU2l6ZSxcbiAgICAgICAgc3RhcnRJbmRleDogTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIHRocmVzaG9sZCksXG4gICAgICAgIHN0b3BJbmRleDogTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgdGhyZXNob2xkKVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgbG9hZC1yb3dzIHVubGVzcyByYW5nZSBoYXMgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGlzIG1heWJlIG5pY2UgdG8gZG8uXG4gICAgICBpZiAodGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5sZW5ndGggIT09IHVubG9hZGVkUmFuZ2VzLmxlbmd0aCB8fCB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzLnNvbWUoZnVuY3Rpb24gKHN0YXJ0T3JTdG9wLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gdW5sb2FkZWRSYW5nZXNbaW5kZXhdICE9PSBzdGFydE9yU3RvcDtcbiAgICAgIH0pKSB7XG4gICAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSB1bmxvYWRlZFJhbmdlcztcbiAgICAgICAgdGhpcy5fbG9hZFVubG9hZGVkUmFuZ2VzKHVubG9hZGVkUmFuZ2VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfbG9hZFVubG9hZGVkUmFuZ2VzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIC8vIGxvYWRNb3JlUm93cyB3YXMgcmVuYW1lZCB0byBsb2FkTW9yZUl0ZW1zIGluIHYxLjAuMzsgd2lsbCBiZSByZW1vdmVkIGluIHYyLjBcbiAgICAgIHZhciBsb2FkTW9yZUl0ZW1zID0gdGhpcy5wcm9wcy5sb2FkTW9yZUl0ZW1zIHx8IHRoaXMucHJvcHMubG9hZE1vcmVSb3dzO1xuXG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaV07XG4gICAgICAgIHZhciBzdG9wSW5kZXggPSB1bmxvYWRlZFJhbmdlc1tpICsgMV07XG4gICAgICAgIHZhciBwcm9taXNlID0gbG9hZE1vcmVJdGVtcyhzdGFydEluZGV4LCBzdG9wSW5kZXgpO1xuICAgICAgICBpZiAocHJvbWlzZSAhPSBudWxsKSB7XG4gICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFJlZnJlc2ggdGhlIHZpc2libGUgcm93cyBpZiBhbnkgb2YgdGhlbSBoYXZlIGp1c3QgYmVlbiBsb2FkZWQuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhleSB3aWxsIHJlbWFpbiBpbiB0aGVpciB1bmxvYWRlZCB2aXN1YWwgc3RhdGUuXG4gICAgICAgICAgICBpZiAoaXNSYW5nZVZpc2libGUoe1xuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdGFydEluZGV4OiBfdGhpczIuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIGxhc3RSZW5kZXJlZFN0b3BJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIHN0b3BJbmRleDogc3RvcEluZGV4XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgYW4gdW5tb3VudCB3aGlsZSBwcm9taXNlcyBhcmUgc3RpbGwgaW4gZmxpZ2h0LlxuICAgICAgICAgICAgICBpZiAoX3RoaXMyLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBSZXNpemUgY2FjaGVkIHJvdyBzaXplcyBmb3IgVmFyaWFibGVTaXplTGlzdCxcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGp1c3QgcmUtcmVuZGVyIHRoZSBsaXN0LlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5yZXNldEFmdGVySW5kZXggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4KHN0YXJ0SW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhBQ0sgcmVzZXQgdGVtcG9yYXJpbHkgY2FjaGVkIGl0ZW0gc3R5bGVzIHRvIGZvcmNlIFB1cmVDb21wb25lbnQgdG8gcmUtcmVuZGVyLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGdyb3NzLCBidXQgSSdtIG9rYXkgd2l0aCBpdCBmb3Igbm93LlxuICAgICAgICAgICAgICAgIC8vIERvbid0IGp1ZGdlIG1lLlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5sb2FkZWRSYW5nZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgX2xvb3AoaSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBJbmZpbml0ZUxvYWRlcjtcbn0oUHVyZUNvbXBvbmVudCk7XG5cbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlTG9hZGVyO1xuIiwidmFyIHNhZmVJc05hTiA9IE51bWJlci5pc05hTiB8fFxuICAgIGZ1bmN0aW9uIHBvbnlmaWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZTtcbiAgICB9O1xuZnVuY3Rpb24gaXNFcXVhbChmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKGZpcnN0ID09PSBzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzYWZlSXNOYU4oZmlyc3QpICYmIHNhZmVJc05hTihzZWNvbmQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgICBpZiAobmV3SW5wdXRzLmxlbmd0aCAhPT0gbGFzdElucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0lucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXF1YWwobmV3SW5wdXRzW2ldLCBsYXN0SW5wdXRzW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplT25lKHJlc3VsdEZuLCBpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gYXJlSW5wdXRzRXF1YWw7IH1cbiAgICB2YXIgbGFzdFRoaXM7XG4gICAgdmFyIGxhc3RBcmdzID0gW107XG4gICAgdmFyIGxhc3RSZXN1bHQ7XG4gICAgdmFyIGNhbGxlZE9uY2UgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGVkT25jZSAmJiBsYXN0VGhpcyA9PT0gdGhpcyAmJiBpc0VxdWFsKG5ld0FyZ3MsIGxhc3RBcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0QXJncyA9IG5ld0FyZ3M7XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVPbmU7XG4iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UnO1xuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcbnZhciBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBub3cgPSBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA/IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xufSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59O1xuZnVuY3Rpb24gY2FuY2VsVGltZW91dCh0aW1lb3V0SUQpIHtcbiAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGltZW91dElELmlkKTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSkge1xuICB2YXIgc3RhcnQgPSBub3coKTtcblxuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmIChub3coKSAtIHN0YXJ0ID49IGRlbGF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lb3V0SUQuaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHRpbWVvdXRJRCA9IHtcbiAgICBpZDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gIH07XG4gIHJldHVybiB0aW1lb3V0SUQ7XG59XG5cbnZhciBzaXplID0gLTE7IC8vIFRoaXMgdXRpbGl0eSBjb3BpZWQgZnJvbSBcImRvbS1oZWxwZXJzXCIgcGFja2FnZS5cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyU2l6ZShyZWNhbGN1bGF0ZSkge1xuICBpZiAocmVjYWxjdWxhdGUgPT09IHZvaWQgMCkge1xuICAgIHJlY2FsY3VsYXRlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoc2l6ZSA9PT0gLTEgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdmFyIHN0eWxlID0gZGl2LnN0eWxlO1xuICAgIHN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIHN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBzdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICBzaXplID0gZGl2Lm9mZnNldFdpZHRoIC0gZGl2LmNsaWVudFdpZHRoO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgfVxuXG4gIHJldHVybiBzaXplO1xufVxudmFyIGNhY2hlZFJUTFJlc3VsdCA9IG51bGw7IC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbi8vIENocm9tZSBkb2VzIG5vdCBzZWVtIHRvIGFkaGVyZTsgaXRzIHNjcm9sbExlZnQgdmFsdWVzIGFyZSBwb3NpdGl2ZSAobWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuLy8gU2FmYXJpJ3MgZWxhc3RpYyBib3VuY2UgbWFrZXMgZGV0ZWN0aW5nIHRoaXMgZXZlbiBtb3JlIGNvbXBsaWNhdGVkIHdydCBwb3RlbnRpYWwgZmFsc2UgcG9zaXRpdmVzLlxuLy8gVGhlIHNhZmVzdCB3YXkgdG8gY2hlY2sgdGhpcyBpcyB0byBpbnRlbnRpb25hbGx5IHNldCBhIG5lZ2F0aXZlIG9mZnNldCxcbi8vIGFuZCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBzdWJzZXF1ZW50IFwic2Nyb2xsXCIgZXZlbnQgbWF0Y2hlcyB0aGUgbmVnYXRpdmUgb2Zmc2V0LlxuLy8gSWYgaXQgZG9lcyBub3QgbWF0Y2gsIHRoZW4gd2UgY2FuIGFzc3VtZSBhIG5vbi1zdGFuZGFyZCBSVEwgc2Nyb2xsIGltcGxlbWVudGF0aW9uLlxuXG5mdW5jdGlvbiBnZXRSVExPZmZzZXRUeXBlKHJlY2FsY3VsYXRlKSB7XG4gIGlmIChyZWNhbGN1bGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmVjYWxjdWxhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChjYWNoZWRSVExSZXN1bHQgPT09IG51bGwgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICB2YXIgb3V0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgb3V0ZXJTdHlsZSA9IG91dGVyRGl2LnN0eWxlO1xuICAgIG91dGVyU3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgb3V0ZXJTdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgb3V0ZXJTdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuICAgIG91dGVyU3R5bGUuZGlyZWN0aW9uID0gJ3J0bCc7XG4gICAgdmFyIGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdmFyIGlubmVyU3R5bGUgPSBpbm5lckRpdi5zdHlsZTtcbiAgICBpbm5lclN0eWxlLndpZHRoID0gJzEwMHB4JztcbiAgICBpbm5lclN0eWxlLmhlaWdodCA9ICcxMDBweCc7XG4gICAgb3V0ZXJEaXYuYXBwZW5kQ2hpbGQoaW5uZXJEaXYpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3V0ZXJEaXYpO1xuXG4gICAgaWYgKG91dGVyRGl2LnNjcm9sbExlZnQgPiAwKSB7XG4gICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtZGVzY2VuZGluZyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dGVyRGl2LnNjcm9sbExlZnQgPSAxO1xuXG4gICAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA9PT0gMCkge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAnbmVnYXRpdmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWFzY2VuZGluZyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlckRpdik7XG4gICAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG59XG5cbnZhciBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwgPSAxNTA7XG5cbnZhciBkZWZhdWx0SXRlbUtleSA9IGZ1bmN0aW9uIGRlZmF1bHRJdGVtS2V5KF9yZWYpIHtcbiAgdmFyIGNvbHVtbkluZGV4ID0gX3JlZi5jb2x1bW5JbmRleCxcbiAgICAgIGRhdGEgPSBfcmVmLmRhdGEsXG4gICAgICByb3dJbmRleCA9IF9yZWYucm93SW5kZXg7XG4gIHJldHVybiByb3dJbmRleCArIFwiOlwiICsgY29sdW1uSW5kZXg7XG59OyAvLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cblxuXG52YXIgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG51bGw7XG52YXIgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdyaWRDb21wb25lbnQoX3JlZjIpIHtcbiAgdmFyIF9jbGFzcztcblxuICB2YXIgZ2V0Q29sdW1uT2Zmc2V0ID0gX3JlZjIuZ2V0Q29sdW1uT2Zmc2V0LFxuICAgICAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCA9IF9yZWYyLmdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gICAgICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gX3JlZjIuZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGdldENvbHVtbldpZHRoID0gX3JlZjIuZ2V0Q29sdW1uV2lkdGgsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCA9IF9yZWYyLmdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IF9yZWYyLmdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gICAgICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQgPSBfcmVmMi5nZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQsXG4gICAgICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQgPSBfcmVmMi5nZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQsXG4gICAgICBnZXRSb3dIZWlnaHQgPSBfcmVmMi5nZXRSb3dIZWlnaHQsXG4gICAgICBnZXRSb3dPZmZzZXQgPSBfcmVmMi5nZXRSb3dPZmZzZXQsXG4gICAgICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZjIuZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmMi5nZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgaW5pdEluc3RhbmNlUHJvcHMgPSBfcmVmMi5pbml0SW5zdGFuY2VQcm9wcyxcbiAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgPSBfcmVmMi5zaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICAgICAgdmFsaWRhdGVQcm9wcyA9IF9yZWYyLnZhbGlkYXRlUHJvcHM7XG4gIHJldHVybiBfY2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoR3JpZCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIEdyaWQocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfUHVyZUNvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgX3RoaXMuX2luc3RhbmNlUHJvcHMgPSBpbml0SW5zdGFuY2VQcm9wcyhfdGhpcy5wcm9wcywgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuICAgICAgX3RoaXMuX291dGVyUmVmID0gdm9pZCAwO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGluc3RhbmNlOiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSxcbiAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICAgIHNjcm9sbExlZnQ6IHR5cGVvZiBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA6IDAsXG4gICAgICAgIHNjcm9sbFRvcDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbFRvcCA6IDAsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCdcbiAgICAgIH07XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAob3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LCBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCwgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LCBvdmVyc2NhblJvd1N0b3BJbmRleCwgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsIHZpc2libGVSb3dTdGFydEluZGV4LCB2aXNpYmxlUm93U3RvcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQoe1xuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleDogb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXg6IHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXg6IHZpc2libGVSb3dTdG9wSW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wLCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vblNjcm9sbCh7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IHZvaWQgMDtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IGZ1bmN0aW9uIChyb3dJbmRleCwgY29sdW1uSW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgICBjb2x1bW5XaWR0aCA9IF90aGlzJHByb3BzLmNvbHVtbldpZHRoLFxuICAgICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMucm93SGVpZ2h0O1xuXG4gICAgICAgIHZhciBpdGVtU3R5bGVDYWNoZSA9IF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGNvbHVtbldpZHRoLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbiwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiByb3dIZWlnaHQpO1xuXG4gICAgICAgIHZhciBrZXkgPSByb3dJbmRleCArIFwiOlwiICsgY29sdW1uSW5kZXg7XG4gICAgICAgIHZhciBzdHlsZTtcblxuICAgICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX29mZnNldCA9IGdldENvbHVtbk9mZnNldChfdGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAgIHZhciBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgICAgaXRlbVN0eWxlQ2FjaGVba2V5XSA9IHN0eWxlID0ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IF9vZmZzZXQsXG4gICAgICAgICAgICByaWdodDogaXNSdGwgPyBfb2Zmc2V0IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdG9wOiBnZXRSb3dPZmZzZXQoX3RoaXMucHJvcHMsIHJvd0luZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgICBoZWlnaHQ6IGdldFJvd0hlaWdodChfdGhpcy5wcm9wcywgcm93SW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICAgIHdpZHRoOiBnZXRDb2x1bW5XaWR0aChfdGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChfLCBfXywgX19fKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9ldmVudCRjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIGNsaWVudFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICBzY3JvbGxMZWZ0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFRvcCxcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsV2lkdGg7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJiBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF90aGlzLnByb3BzLmRpcmVjdGlvbjsgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuXG4gICAgICAgICAgdmFyIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcblxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1kZXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG5cblxuICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY2FsY3VsYXRlZFNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpKTtcbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbExlZnQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbExlZnQ6IGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wOiBjYWxjdWxhdGVkU2Nyb2xsVG9wLFxuICAgICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vdXRlclJlZlNldHRlciA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gX3RoaXMucHJvcHMub3V0ZXJSZWY7XG4gICAgICAgIF90aGlzLl9vdXRlclJlZiA9IHJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdXRlclJlZiAhPSBudWxsICYmIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiYgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogZmFsc2VcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIEdyaWQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgX3Byb3RvID0gR3JpZC5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG8gPSBmdW5jdGlvbiBzY3JvbGxUbyhfcmVmMykge1xuICAgICAgdmFyIHNjcm9sbExlZnQgPSBfcmVmMy5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF9yZWYzLnNjcm9sbFRvcDtcblxuICAgICAgaWYgKHNjcm9sbExlZnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbExlZnQgPSBwcmV2U3RhdGUuc2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY3JvbGxUb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbFRvcCA9IHByZXZTdGF0ZS5zY3JvbGxUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiYgcHJldlN0YXRlLnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWUsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvSXRlbSA9IGZ1bmN0aW9uIHNjcm9sbFRvSXRlbShfcmVmNCkge1xuICAgICAgdmFyIF9yZWY0JGFsaWduID0gX3JlZjQuYWxpZ24sXG4gICAgICAgICAgYWxpZ24gPSBfcmVmNCRhbGlnbiA9PT0gdm9pZCAwID8gJ2F1dG8nIDogX3JlZjQkYWxpZ24sXG4gICAgICAgICAgY29sdW1uSW5kZXggPSBfcmVmNC5jb2x1bW5JbmRleCxcbiAgICAgICAgICByb3dJbmRleCA9IF9yZWY0LnJvd0luZGV4O1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczIuY29sdW1uQ291bnQsXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHMyLmhlaWdodCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzMi5yb3dDb3VudCxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzMi53aWR0aDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUuc2Nyb2xsVG9wO1xuICAgICAgdmFyIHNjcm9sbGJhclNpemUgPSBnZXRTY3JvbGxiYXJTaXplKCk7XG5cbiAgICAgIGlmIChjb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbHVtbkluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uSW5kZXgsIGNvbHVtbkNvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAocm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByb3dJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0luZGV4LCByb3dDb3VudCAtIDEpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldyxcbiAgICAgIC8vIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuXG4gICAgICB2YXIgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUgPSBlc3RpbWF0ZWRUb3RhbFdpZHRoID4gd2lkdGggPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIHZhciB2ZXJ0aWNhbFNjcm9sbGJhclNpemUgPSBlc3RpbWF0ZWRUb3RhbEhlaWdodCA+IGhlaWdodCA/IHNjcm9sbGJhclNpemUgOiAwO1xuICAgICAgdGhpcy5zY3JvbGxUbyh7XG4gICAgICAgIHNjcm9sbExlZnQ6IGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQgPyBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIGFsaWduLCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzLCB2ZXJ0aWNhbFNjcm9sbGJhclNpemUpIDogc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wOiByb3dJbmRleCAhPT0gdW5kZWZpbmVkID8gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KHRoaXMucHJvcHMsIHJvd0luZGV4LCBhbGlnbiwgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzLCBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSkgOiBzY3JvbGxUb3BcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxMZWZ0ID0gX3RoaXMkcHJvcHMzLmluaXRpYWxTY3JvbGxMZWZ0LFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxUb3AgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbFRvcDtcblxuICAgICAgaWYgKHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbExlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbFRvcDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLnByb3BzLmRpcmVjdGlvbjtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsVG9wLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlMi5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgIGlmIChzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gb3V0ZXJSZWYuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aCA9IG91dGVyUmVmLnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICAgIH1cblxuICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczQuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM0LmNsYXNzTmFtZSxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNC5jb2x1bW5Db3VudCxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczQuZGlyZWN0aW9uLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzNC5oZWlnaHQsXG4gICAgICAgICAgaW5uZXJSZWYgPSBfdGhpcyRwcm9wczQuaW5uZXJSZWYsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNC5pbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICAgIGlubmVyVGFnTmFtZSA9IF90aGlzJHByb3BzNC5pbm5lclRhZ05hbWUsXG4gICAgICAgICAgaXRlbURhdGEgPSBfdGhpcyRwcm9wczQuaXRlbURhdGEsXG4gICAgICAgICAgX3RoaXMkcHJvcHM0JGl0ZW1LZXkgPSBfdGhpcyRwcm9wczQuaXRlbUtleSxcbiAgICAgICAgICBpdGVtS2V5ID0gX3RoaXMkcHJvcHM0JGl0ZW1LZXkgPT09IHZvaWQgMCA/IGRlZmF1bHRJdGVtS2V5IDogX3RoaXMkcHJvcHM0JGl0ZW1LZXksXG4gICAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNC5vdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICAgIG91dGVyVGFnTmFtZSA9IF90aGlzJHByb3BzNC5vdXRlclRhZ05hbWUsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczQucm93Q291bnQsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczQuc3R5bGUsXG4gICAgICAgICAgdXNlSXNTY3JvbGxpbmcgPSBfdGhpcyRwcm9wczQudXNlSXNTY3JvbGxpbmcsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczQud2lkdGg7XG4gICAgICB2YXIgaXNTY3JvbGxpbmcgPSB0aGlzLnN0YXRlLmlzU2Nyb2xsaW5nO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldEhvcml6b250YWxSID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICBjb2x1bW5TdGFydEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSWzBdLFxuICAgICAgICAgIGNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUlsxXTtcblxuICAgICAgdmFyIF90aGlzJF9nZXRWZXJ0aWNhbFJhbiA9IHRoaXMuX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIHJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW5bMF0sXG4gICAgICAgICAgcm93U3RvcEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuWzFdO1xuXG4gICAgICB2YXIgaXRlbXMgPSBbXTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCkge1xuICAgICAgICBmb3IgKHZhciBfcm93SW5kZXggPSByb3dTdGFydEluZGV4OyBfcm93SW5kZXggPD0gcm93U3RvcEluZGV4OyBfcm93SW5kZXgrKykge1xuICAgICAgICAgIGZvciAodmFyIF9jb2x1bW5JbmRleCA9IGNvbHVtblN0YXJ0SW5kZXg7IF9jb2x1bW5JbmRleCA8PSBjb2x1bW5TdG9wSW5kZXg7IF9jb2x1bW5JbmRleCsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IF9jb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBrZXk6IGl0ZW1LZXkoe1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBfY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgICAgcm93SW5kZXg6IF9yb3dJbmRleFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgcm93SW5kZXg6IF9yb3dJbmRleCxcbiAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShfcm93SW5kZXgsIF9jb2x1bW5JbmRleClcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cblxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBvblNjcm9sbDogdGhpcy5fb25TY3JvbGwsXG4gICAgICAgIHJlZjogdGhpcy5fb3V0ZXJSZWZTZXR0ZXIsXG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgICAgfSwgc3R5bGUpXG4gICAgICB9LCBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgcmVmOiBpbm5lclJlZixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBoZWlnaHQ6IGVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiBlc3RpbWF0ZWRUb3RhbFdpZHRoXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jYWxsUHJvcHNDYWxsYmFja3MgPSBmdW5jdGlvbiBfY2FsbFByb3BzQ2FsbGJhY2tzKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczUuY29sdW1uQ291bnQsXG4gICAgICAgICAgb25JdGVtc1JlbmRlcmVkID0gX3RoaXMkcHJvcHM1Lm9uSXRlbXNSZW5kZXJlZCxcbiAgICAgICAgICBvblNjcm9sbCA9IF90aGlzJHByb3BzNS5vblNjcm9sbCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNS5yb3dDb3VudDtcblxuICAgICAgaWYgKHR5cGVvZiBvbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCA+IDApIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2dldEhvcml6b250YWxSMiA9IHRoaXMuX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZUNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbM107XG5cbiAgICAgICAgICB2YXIgX3RoaXMkX2dldFZlcnRpY2FsUmFuMiA9IHRoaXMuX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Sb3dTdGFydEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlswXSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuUm93U3RvcEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlsxXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVSb3dTdGFydEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlsyXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVSb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzNdO1xuXG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LCBfb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsIF9vdmVyc2NhblJvd1N0YXJ0SW5kZXgsIF9vdmVyc2NhblJvd1N0b3BJbmRleCwgX3Zpc2libGVDb2x1bW5TdGFydEluZGV4LCBfdmlzaWJsZUNvbHVtblN0b3BJbmRleCwgX3Zpc2libGVSb3dTdGFydEluZGV4LCBfdmlzaWJsZVJvd1N0b3BJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgX3RoaXMkc3RhdGUzID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIF9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLmhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgICBfc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlMy5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgX3Njcm9sbFRvcCA9IF90aGlzJHN0YXRlMy5zY3JvbGxUb3AsXG4gICAgICAgICAgICBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUzLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgICAgIF92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMy52ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjtcblxuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoX3Njcm9sbExlZnQsIF9zY3JvbGxUb3AsIF9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLCBfdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpO1xuICAgICAgfVxuICAgIH0gLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICA7XG5cbiAgICBfcHJvdG8uX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczYuY29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvbHVtbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db3VudCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNi5yb3dDb3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTQgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTQuaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlNC5pc1Njcm9sbGluZyxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGU0LnNjcm9sbExlZnQ7XG4gICAgICB2YXIgb3ZlcnNjYW5Db3VudFJlc29sdmVkID0gb3ZlcnNjYW5Db2x1bW5Db3VudCB8fCBvdmVyc2NhbkNvbHVtbnNDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsTGVmdCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuXG4gICAgICB2YXIgb3ZlcnNjYW5CYWNrd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM3LmNvbHVtbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhblJvd0NvdW50ID0gX3RoaXMkcHJvcHM3Lm92ZXJzY2FuUm93Q291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dzQ291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczcucm93Q291bnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGU1ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlNS5pc1Njcm9sbGluZyxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlNS52ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZTUuc2Nyb2xsVG9wO1xuICAgICAgdmFyIG92ZXJzY2FuQ291bnRSZXNvbHZlZCA9IG92ZXJzY2FuUm93Q291bnQgfHwgb3ZlcnNjYW5Sb3dzQ291bnQgfHwgb3ZlcnNjYW5Db3VudCB8fCAxO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPT09IDAgfHwgcm93Q291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KHRoaXMucHJvcHMsIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLCBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLCBzdGFydEluZGV4LCBzdG9wSW5kZXhdO1xuICAgIH07XG5cbiAgICByZXR1cm4gR3JpZDtcbiAgfShQdXJlQ29tcG9uZW50KSwgX2NsYXNzLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlXG4gIH0sIF9jbGFzcztcbn1cblxudmFyIHZhbGlkYXRlU2hhcmVkUHJvcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZVNoYXJlZFByb3BzKF9yZWY1LCBfcmVmNikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNS5jaGlsZHJlbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWY1LmRpcmVjdGlvbixcbiAgICAgIGhlaWdodCA9IF9yZWY1LmhlaWdodCxcbiAgICAgIGlubmVyVGFnTmFtZSA9IF9yZWY1LmlubmVyVGFnTmFtZSxcbiAgICAgIG91dGVyVGFnTmFtZSA9IF9yZWY1Lm91dGVyVGFnTmFtZSxcbiAgICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50ID0gX3JlZjUub3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICBvdmVyc2NhbkNvdW50ID0gX3JlZjUub3ZlcnNjYW5Db3VudCxcbiAgICAgIG92ZXJzY2FuUm93c0NvdW50ID0gX3JlZjUub3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgICB3aWR0aCA9IF9yZWY1LndpZHRoO1xuICB2YXIgaW5zdGFuY2UgPSBfcmVmNi5pbnN0YW5jZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBvdmVyc2NhbkNvdW50IHByb3AgaGFzIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvdmVyc2NhbkNvbHVtbnNDb3VudCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG92ZXJzY2FuUm93c0NvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ICYmICFkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIG92ZXJzY2FuQ29sdW1uc0NvdW50IGFuZCBvdmVyc2NhblJvd3NDb3VudCBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlubmVyVGFnTmFtZSAhPSBudWxsIHx8IG91dGVyVGFnTmFtZSAhPSBudWxsKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NUYWdOYW1lICYmICFkZXZXYXJuaW5nc1RhZ05hbWUuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc1RhZ05hbWUuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgaW5uZXJUYWdOYW1lIGFuZCBvdXRlclRhZ05hbWUgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNoaWxkcmVuXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICsgKFwiXFxcIlwiICsgKGNoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVuKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgKyAoXCJcXFwiXCIgKyBkaXJlY3Rpb24gKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArIChcIlxcXCJcIiArICh3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArIChcIlxcXCJcIiArIChoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFID0gNTA7XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KF9yZWYsIF9yZWYyKSB7XG4gIHZhciByb3dDb3VudCA9IF9yZWYucm93Q291bnQ7XG4gIHZhciByb3dNZXRhZGF0YU1hcCA9IF9yZWYyLnJvd01ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0ID0gX3JlZjIuZXN0aW1hdGVkUm93SGVpZ2h0LFxuICAgICAgbGFzdE1lYXN1cmVkUm93SW5kZXggPSBfcmVmMi5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gcm93Q291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IHJvd0NvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IHJvd01ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZFJvd0luZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSByb3dDb3VudCAtIGxhc3RNZWFzdXJlZFJvd0luZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkUm93SGVpZ2h0O1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChfcmVmMywgX3JlZjQpIHtcbiAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjMuY29sdW1uQ291bnQ7XG4gIHZhciBjb2x1bW5NZXRhZGF0YU1hcCA9IF9yZWY0LmNvbHVtbk1ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGggPSBfcmVmNC5lc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gX3JlZjQubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIHZhciB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IDA7IC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IGNvbHVtbkNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBjb2x1bW5Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gMCkge1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBjb2x1bW5NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRDb2x1bW5JbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICB2YXIgbnVtVW5tZWFzdXJlZEl0ZW1zID0gY29sdW1uQ291bnQgLSBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCAtIDE7XG4gIHZhciB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZENvbHVtbldpZHRoO1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBnZXRJdGVtTWV0YWRhdGEgPSBmdW5jdGlvbiBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwLCBpdGVtU2l6ZSwgbGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSBwcm9wcy5jb2x1bW5XaWR0aDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9IHByb3BzLnJvd0hlaWdodDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgdmFyIHNpemUgPSBpdGVtU2l6ZShpKTtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHNpemU6IHNpemVcbiAgICAgIH07XG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gaW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlbU1ldGFkYXRhTWFwW2luZGV4XTtcbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW0gPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW0oaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXA7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgdmFyIGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPSBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGxhc3RNZWFzdXJlZEluZGV4LCAwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLCBvZmZzZXQpO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgaGlnaCwgbG93LCBvZmZzZXQpIHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgdmFyIG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBpbmRleCwgb2Zmc2V0KSB7XG4gIHZhciBpdGVtQ291bnQgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy5jb2x1bW5Db3VudCA6IHByb3BzLnJvd0NvdW50O1xuICB2YXIgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChpbmRleCA8IGl0ZW1Db3VudCAmJiBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksIE1hdGguZmxvb3IoaW5kZXggLyAyKSwgb2Zmc2V0KTtcbn07XG5cbnZhciBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgdmFyIHNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy53aWR0aCA6IHByb3BzLmhlaWdodDtcbiAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTsgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cblxuICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChwcm9wcywgaW5zdGFuY2VQcm9wcykgOiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG4gIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KSk7XG4gIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtTWV0YWRhdGEub2Zmc2V0IC0gc2l6ZSArIHNjcm9sbGJhclNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSk7XG5cbiAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICB9IGVsc2Uge1xuICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgIGNhc2UgJ2VuZCc6XG4gICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICBjYXNlICdhdXRvJzpcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIH1cblxuICB9XG59O1xuXG52YXIgVmFyaWFibGVTaXplR3JpZCA9IC8qI19fUFVSRV9fKi9jcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5PZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQocHJvcHMsIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtKCdjb2x1bW4nLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsTGVmdCk7XG4gIH0sXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBwcm9wcy5jb2x1bW5Db3VudCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbExlZnQgKyB3aWR0aDtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGNvbHVtbkNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gZ2V0Q29sdW1uV2lkdGgocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXBbaW5kZXhdLnNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQocHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpO1xuICB9LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICByZXR1cm4gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoJ3JvdycsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSk7XG4gIH0sXG4gIGdldFJvd09mZnNldDogZnVuY3Rpb24gZ2V0Um93T2Zmc2V0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuICB9LFxuICBnZXRSb3dIZWlnaHQ6IGZ1bmN0aW9uIGdldFJvd0hlaWdodChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbSgncm93JywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbFRvcCk7XG4gIH0sXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciByb3dDb3VudCA9IHByb3BzLnJvd0NvdW50LFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBzY3JvbGxUb3AgKyBoZWlnaHQ7XG4gICAgdmFyIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB2YXIgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCByb3dDb3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzLCBpbnN0YW5jZSkge1xuICAgIHZhciBfcmVmNSA9IHByb3BzLFxuICAgICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCA9IF9yZWY1LmVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQgPSBfcmVmNS5lc3RpbWF0ZWRSb3dIZWlnaHQ7XG4gICAgdmFyIGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBjb2x1bW5NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogZXN0aW1hdGVkQ29sdW1uV2lkdGggfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0OiBlc3RpbWF0ZWRSb3dIZWlnaHQgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg6IC0xLFxuICAgICAgbGFzdE1lYXN1cmVkUm93SW5kZXg6IC0xLFxuICAgICAgcm93TWV0YWRhdGFNYXA6IHt9XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJDb2x1bW5JbmRleCA9IGZ1bmN0aW9uIChjb2x1bW5JbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoe1xuICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlOiBzaG91bGRGb3JjZVVwZGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJSb3dJbmRleCA9IGZ1bmN0aW9uIChyb3dJbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoe1xuICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlOiBzaG91bGRGb3JjZVVwZGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzID0gZnVuY3Rpb24gKF9yZWY2KSB7XG4gICAgICB2YXIgY29sdW1uSW5kZXggPSBfcmVmNi5jb2x1bW5JbmRleCxcbiAgICAgICAgICByb3dJbmRleCA9IF9yZWY2LnJvd0luZGV4LFxuICAgICAgICAgIF9yZWY2JHNob3VsZEZvcmNlVXBkYSA9IF9yZWY2LnNob3VsZEZvcmNlVXBkYXRlLFxuICAgICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gX3JlZjYkc2hvdWxkRm9yY2VVcGRhID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjYkc2hvdWxkRm9yY2VVcGRhO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCwgY29sdW1uSW5kZXggLSAxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IE1hdGgubWluKGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXgsIHJvd0luZGV4IC0gMSk7XG4gICAgICB9IC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuXG5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjcpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmNy5jb2x1bW5XaWR0aCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjcucm93SGVpZ2h0O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArIChcIlxcXCJcIiArIChyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCQxID0gMTUwO1xuXG52YXIgZGVmYXVsdEl0ZW1LZXkkMSA9IGZ1bmN0aW9uIGRlZmF1bHRJdGVtS2V5KGluZGV4LCBkYXRhKSB7XG4gIHJldHVybiBpbmRleDtcbn07IC8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxuXG5cbnZhciBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IG51bGw7XG52YXIgZGV2V2FybmluZ3NUYWdOYW1lJDEgPSBudWxsO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzRGlyZWN0aW9uID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lJDEgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMaXN0Q29tcG9uZW50KF9yZWYpIHtcbiAgdmFyIF9jbGFzcztcblxuICB2YXIgZ2V0SXRlbU9mZnNldCA9IF9yZWYuZ2V0SXRlbU9mZnNldCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsU2l6ZSA9IF9yZWYuZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgZ2V0SXRlbVNpemUgPSBfcmVmLmdldEl0ZW1TaXplLFxuICAgICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSBfcmVmLmdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50LFxuICAgICAgZ2V0U3RhcnRJbmRleEZvck9mZnNldCA9IF9yZWYuZ2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmLmdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBpbml0SW5zdGFuY2VQcm9wcyA9IF9yZWYuaW5pdEluc3RhbmNlUHJvcHMsXG4gICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlID0gX3JlZi5zaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICAgICAgdmFsaWRhdGVQcm9wcyA9IF9yZWYudmFsaWRhdGVQcm9wcztcbiAgcmV0dXJuIF9jbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShMaXN0LCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgICAvLyBBbHdheXMgdXNlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgIC8vIEl0IHByb2R1Y2VzIGxlc3MgY29kZSBhZnRlciB0cmFuc3BpbGF0aW9uLiAoIzI2KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gTGlzdChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9QdXJlQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICBfdGhpcy5faW5zdGFuY2VQcm9wcyA9IGluaXRJbnN0YW5jZVByb3BzKF90aGlzLnByb3BzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICBfdGhpcy5fb3V0ZXJSZWYgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW5zdGFuY2U6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLFxuICAgICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICAgIHNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgICBzY3JvbGxPZmZzZXQ6IHR5cGVvZiBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXQgOiAwLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKG92ZXJzY2FuU3RhcnRJbmRleCwgb3ZlcnNjYW5TdG9wSW5kZXgsIHZpc2libGVTdGFydEluZGV4LCB2aXNpYmxlU3RvcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQoe1xuICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleDogb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleDogdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0b3BJbmRleDogdmlzaWJsZVN0b3BJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbE9mZnNldCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vblNjcm9sbCh7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSB2b2lkIDA7XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgICAgICBpdGVtU2l6ZSA9IF90aGlzJHByb3BzLml0ZW1TaXplLFxuICAgICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMubGF5b3V0O1xuXG4gICAgICAgIHZhciBpdGVtU3R5bGVDYWNoZSA9IF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGl0ZW1TaXplLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGxheW91dCwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb24pO1xuXG4gICAgICAgIHZhciBzdHlsZTtcblxuICAgICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoaW5kZXgpKSB7XG4gICAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtpbmRleF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9vZmZzZXQgPSBnZXRJdGVtT2Zmc2V0KF90aGlzLnByb3BzLCBpbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpO1xuXG4gICAgICAgICAgdmFyIHNpemUgPSBnZXRJdGVtU2l6ZShfdGhpcy5wcm9wcywgaW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICAgICAgdmFyIGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgICB2YXIgb2Zmc2V0SG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbCA/IF9vZmZzZXQgOiAwO1xuICAgICAgICAgIGl0ZW1TdHlsZUNhY2hlW2luZGV4XSA9IHN0eWxlID0ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IG9mZnNldEhvcml6b250YWwsXG4gICAgICAgICAgICByaWdodDogaXNSdGwgPyBvZmZzZXRIb3Jpem9udGFsIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdG9wOiAhaXNIb3Jpem9udGFsID8gX29mZnNldCA6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6ICFpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJSdcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoXywgX18sIF9fXykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuX29uU2Nyb2xsSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50V2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxXaWR0aDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbExlZnQpIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF90aGlzLnByb3BzLmRpcmVjdGlvbjtcbiAgICAgICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsTGVmdDtcblxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsT2Zmc2V0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGxWZXJ0aWNhbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQyID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLnNjcm9sbFRvcDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX291dGVyUmVmU2V0dGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSBfdGhpcy5wcm9wcy5vdXRlclJlZjtcbiAgICAgICAgX3RoaXMuX291dGVyUmVmID0gcmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKG91dGVyUmVmICE9IG51bGwgJiYgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJiBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZywgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGJyZWFrIHB1cmUgc0NVIGZvciBpdGVtcyB0aGF0IGRvbid0IHVzZSBpc1Njcm9sbGluZyBwYXJhbS5cbiAgICAgICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEsIG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICBMaXN0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFsaWRhdGVTaGFyZWRQcm9wcyQxKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgX3Byb3RvID0gTGlzdC5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG8gPSBmdW5jdGlvbiBzY3JvbGxUbyhzY3JvbGxPZmZzZXQpIHtcbiAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIHNjcm9sbE9mZnNldCk7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9wcm90by5zY3JvbGxUb0l0ZW0gPSBmdW5jdGlvbiBzY3JvbGxUb0l0ZW0oaW5kZXgsIGFsaWduKSB7XG4gICAgICBpZiAoYWxpZ24gPT09IHZvaWQgMCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHMyLml0ZW1Db3VudCxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczIubGF5b3V0O1xuICAgICAgdmFyIHNjcm9sbE9mZnNldCA9IHRoaXMuc3RhdGUuc2Nyb2xsT2Zmc2V0O1xuICAgICAgaW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSkpOyAvLyBUaGUgc2Nyb2xsYmFyIHNpemUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBzY3JvbGxpbmcgYW4gaXRlbSBpbnRvIHZpZXcsIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuICAgICAgLy8gVGhpcyBpcyBhbiBlZGdlIGNhc2UgZm9yIGxpc3RzOyBub3JtYWxseSB0aGV5IG9ubHkgc2Nyb2xsIGluIHRoZSBkb21pbmFudCBkaXJlY3Rpb24uXG5cbiAgICAgIHZhciBzY3JvbGxiYXJTaXplID0gMDtcblxuICAgICAgaWYgKHRoaXMuX291dGVyUmVmKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmIChsYXlvdXQgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGggPiBvdXRlclJlZi5jbGllbnRXaWR0aCA/IGdldFNjcm9sbGJhclNpemUoKSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9IG91dGVyUmVmLnNjcm9sbEhlaWdodCA+IG91dGVyUmVmLmNsaWVudEhlaWdodCA/IGdldFNjcm9sbGJhclNpemUoKSA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUbyhnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCh0aGlzLnByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzMy5kaXJlY3Rpb24sXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbE9mZnNldCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzMy5sYXlvdXQ7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbE9mZnNldCA9PT0gJ251bWJlcicgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNC5kaXJlY3Rpb24sXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHM0LmxheW91dDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUuc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHZhciBjbGllbnRXaWR0aCA9IG91dGVyUmVmLmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aCA9IG91dGVyUmVmLnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM1LmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNS5jbGFzc05hbWUsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHM1LmRpcmVjdGlvbixcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczUuaGVpZ2h0LFxuICAgICAgICAgIGlubmVyUmVmID0gX3RoaXMkcHJvcHM1LmlubmVyUmVmLFxuICAgICAgICAgIGlubmVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczUuaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBpbm5lclRhZ05hbWUgPSBfdGhpcyRwcm9wczUuaW5uZXJUYWdOYW1lLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzNS5pdGVtQ291bnQsXG4gICAgICAgICAgaXRlbURhdGEgPSBfdGhpcyRwcm9wczUuaXRlbURhdGEsXG4gICAgICAgICAgX3RoaXMkcHJvcHM1JGl0ZW1LZXkgPSBfdGhpcyRwcm9wczUuaXRlbUtleSxcbiAgICAgICAgICBpdGVtS2V5ID0gX3RoaXMkcHJvcHM1JGl0ZW1LZXkgPT09IHZvaWQgMCA/IGRlZmF1bHRJdGVtS2V5JDEgOiBfdGhpcyRwcm9wczUkaXRlbUtleSxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczUubGF5b3V0LFxuICAgICAgICAgIG91dGVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczUub3V0ZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBvdXRlclRhZ05hbWUgPSBfdGhpcyRwcm9wczUub3V0ZXJUYWdOYW1lLFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM1LnN0eWxlLFxuICAgICAgICAgIHVzZUlzU2Nyb2xsaW5nID0gX3RoaXMkcHJvcHM1LnVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHM1LndpZHRoO1xuICAgICAgdmFyIGlzU2Nyb2xsaW5nID0gdGhpcy5zdGF0ZS5pc1Njcm9sbGluZzsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICAgIHZhciBvblNjcm9sbCA9IGlzSG9yaXpvbnRhbCA/IHRoaXMuX29uU2Nyb2xsSG9yaXpvbnRhbCA6IHRoaXMuX29uU2Nyb2xsVmVydGljYWw7XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQgPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgc3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZFswXSxcbiAgICAgICAgICBzdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmRbMV07XG5cbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICBmb3IgKHZhciBfaW5kZXggPSBzdGFydEluZGV4OyBfaW5kZXggPD0gc3RvcEluZGV4OyBfaW5kZXgrKykge1xuICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICBrZXk6IGl0ZW1LZXkoX2luZGV4LCBpdGVtRGF0YSksXG4gICAgICAgICAgICBpbmRleDogX2luZGV4LFxuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKF9pbmRleClcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cblxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQob3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIG9uU2Nyb2xsOiBvblNjcm9sbCxcbiAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJyxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9LCBzdHlsZSlcbiAgICAgIH0sIGNyZWF0ZUVsZW1lbnQoaW5uZXJFbGVtZW50VHlwZSB8fCBpbm5lclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogZXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBlc3RpbWF0ZWRUb3RhbFNpemUgOiAnMTAwJSdcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2NhbGxQcm9wc0NhbGxiYWNrcyA9IGZ1bmN0aW9uIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBpdGVtQ291bnQgPSB0aGlzLnByb3BzLml0ZW1Db3VudDtcblxuICAgICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyID0gdGhpcy5fZ2V0UmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5TdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlswXSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuU3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlsxXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVTdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlsyXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVTdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzNdO1xuXG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChfb3ZlcnNjYW5TdGFydEluZGV4LCBfb3ZlcnNjYW5TdG9wSW5kZXgsIF92aXNpYmxlU3RhcnRJbmRleCwgX3Zpc2libGVTdG9wSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIF9zY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgICAgX3Njcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlMi5zY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUyLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoX3Njcm9sbERpcmVjdGlvbiwgX3Njcm9sbE9mZnNldCwgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCk7XG4gICAgICB9XG4gICAgfSAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0UmFuZ2VUb1JlbmRlciA9IGZ1bmN0aW9uIF9nZXRSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHM2Lml0ZW1Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ291bnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUzID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlMy5pc1Njcm9sbGluZyxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlMy5zY3JvbGxPZmZzZXQ7XG5cbiAgICAgIGlmIChpdGVtQ291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KHRoaXMucHJvcHMsIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIHJldHVybiBMaXN0O1xuICB9KFB1cmVDb21wb25lbnQpLCBfY2xhc3MuZGVmYXVsdFByb3BzID0ge1xuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICBsYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gICAgb3ZlcnNjYW5Db3VudDogMixcbiAgICB1c2VJc1Njcm9sbGluZzogZmFsc2VcbiAgfSwgX2NsYXNzO1xufSAvLyBOT1RFOiBJIGNvbnNpZGVyZWQgZnVydGhlciB3cmFwcGluZyBpbmRpdmlkdWFsIGl0ZW1zIHdpdGggYSBwdXJlIExpc3RJdGVtIGNvbXBvbmVudC5cbi8vIFRoaXMgd291bGQgYXZvaWQgZXZlciBjYWxsaW5nIHRoZSByZW5kZXIgZnVuY3Rpb24gZm9yIHRoZSBzYW1lIGluZGV4IG1vcmUgdGhhbiBvbmNlLFxuLy8gQnV0IGl0IHdvdWxkIGFsc28gYWRkIHRoZSBvdmVyaGVhZCBvZiBhIGxvdCBvZiBjb21wb25lbnRzL2ZpYmVycy5cbi8vIEkgYXNzdW1lIHBlb3BsZSBhbHJlYWR5IGRvIHRoaXMgKHJlbmRlciBmdW5jdGlvbiByZXR1cm5pbmcgYSBjbGFzcyBjb21wb25lbnQpLFxuLy8gU28gbXkgZG9pbmcgaXQgd291bGQganVzdCB1bm5lY2Vzc2FyaWx5IGRvdWJsZSB0aGUgd3JhcHBlcnMuXG5cbnZhciB2YWxpZGF0ZVNoYXJlZFByb3BzJDEgPSBmdW5jdGlvbiB2YWxpZGF0ZVNoYXJlZFByb3BzKF9yZWYyLCBfcmVmMykge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWYyLmRpcmVjdGlvbixcbiAgICAgIGhlaWdodCA9IF9yZWYyLmhlaWdodCxcbiAgICAgIGxheW91dCA9IF9yZWYyLmxheW91dCxcbiAgICAgIGlubmVyVGFnTmFtZSA9IF9yZWYyLmlubmVyVGFnTmFtZSxcbiAgICAgIG91dGVyVGFnTmFtZSA9IF9yZWYyLm91dGVyVGFnTmFtZSxcbiAgICAgIHdpZHRoID0gX3JlZjIud2lkdGg7XG4gIHZhciBpbnN0YW5jZSA9IF9yZWYzLmluc3RhbmNlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGlubmVyVGFnTmFtZSAhPSBudWxsIHx8IG91dGVyVGFnTmFtZSAhPSBudWxsKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NUYWdOYW1lJDEgJiYgIWRldldhcm5pbmdzVGFnTmFtZSQxLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lJDEuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgaW5uZXJUYWdOYW1lIGFuZCBvdXRlclRhZ05hbWUgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH0gLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgaWYgKGRldldhcm5pbmdzRGlyZWN0aW9uICYmICFkZXZXYXJuaW5nc0RpcmVjdGlvbi5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgZGV2V2FybmluZ3NEaXJlY3Rpb24uYWRkKGluc3RhbmNlKTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBkaXJlY3Rpb24gcHJvcCBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgKGRlZmF1bHQpIG9yIFwicnRsXCIuICcgKyAnUGxlYXNlIHVzZSB0aGUgbGF5b3V0IHByb3AgdG8gc3BlY2lmeSBcInZlcnRpY2FsXCIgKGRlZmF1bHQpIG9yIFwiaG9yaXpvbnRhbFwiIG9yaWVudGF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgKyAoXCJcXFwiXCIgKyBkaXJlY3Rpb24gKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIHN3aXRjaCAobGF5b3V0KSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImxheW91dFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJob3Jpem9udGFsXCIgb3IgXCJ2ZXJ0aWNhbFwiLiAnICsgKFwiXFxcIlwiICsgbGF5b3V0ICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArIChcIlxcXCJcIiArIChjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbikgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmIChpc0hvcml6b250YWwgJiYgdHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0hvcml6b250YWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArIChcIlxcXCJcIiArICh3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiB0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWZXJ0aWNhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArIChcIlxcXCJcIiArIChoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFJDEgPSA1MDtcblxudmFyIGdldEl0ZW1NZXRhZGF0YSQxID0gZnVuY3Rpb24gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICB2YXIgX3JlZiA9IHByb3BzLFxuICAgICAgaXRlbVNpemUgPSBfcmVmLml0ZW1TaXplO1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICB2YXIgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIHZhciBzaXplID0gaXRlbVNpemUoaSk7XG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBzaXplOiBzaXplXG4gICAgICB9O1xuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW0ocHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCkge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXg7XG4gIHZhciBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID0gbGFzdE1lYXN1cmVkSW5kZXggPiAwID8gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XS5vZmZzZXQgOiAwO1xuXG4gIGlmIChsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID49IG9mZnNldCkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgbWVhc3VyZWQgaXRlbXMgd2l0aGluIHRoaXMgcmFuZ2UganVzdCB1c2UgYSBiaW5hcnkgc2VhcmNoIGFzIGl0J3MgZmFzdGVyLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgbGFzdE1lYXN1cmVkSW5kZXgsIDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLCBvZmZzZXQpO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gocHJvcHMsIGluc3RhbmNlUHJvcHMsIGhpZ2gsIGxvdywgb2Zmc2V0KSB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIHZhciBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIG1pZGRsZSwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKHByb3BzLCBpbnN0YW5jZVByb3BzLCBpbmRleCwgb2Zmc2V0KSB7XG4gIHZhciBpdGVtQ291bnQgPSBwcm9wcy5pdGVtQ291bnQ7XG4gIHZhciBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKGluZGV4IDwgaXRlbUNvdW50ICYmIGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpLCBNYXRoLmZsb29yKGluZGV4IC8gMiksIG9mZnNldCk7XG59O1xuXG52YXIgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxTaXplKF9yZWYyLCBfcmVmMykge1xuICB2YXIgaXRlbUNvdW50ID0gX3JlZjIuaXRlbUNvdW50O1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gX3JlZjMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemUgPSBfcmVmMy5lc3RpbWF0ZWRJdGVtU2l6ZSxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gX3JlZjMubGFzdE1lYXN1cmVkSW5kZXg7XG4gIHZhciB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSBpdGVtQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGl0ZW1Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSBpdGVtQ291bnQgLSBsYXN0TWVhc3VyZWRJbmRleCAtIDE7XG4gIHZhciB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZEl0ZW1TaXplO1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG52YXIgVmFyaWFibGVTaXplTGlzdCA9IC8qI19fUFVSRV9fKi9jcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogZnVuY3Rpb24gZ2V0SXRlbU9mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldEl0ZW1TaXplOiBmdW5jdGlvbiBnZXRJdGVtU2l6ZShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXBbaW5kZXhdLnNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQocHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0LFxuICAgICAgICBsYXlvdXQgPSBwcm9wcy5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gcHJvcHMud2lkdGg7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcyk7IC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gICAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cblxuICAgIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUocHJvcHMsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgaXRlbU1ldGFkYXRhLnNpemUgKyBzY3JvbGxiYXJTaXplKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQocHJvcHMsIG9mZnNldCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0kMShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KTtcbiAgfSxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBwcm9wcy5pdGVtQ291bnQsXG4gICAgICAgIGxheW91dCA9IHByb3BzLmxheW91dCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBzY3JvbGxPZmZzZXQgKyBzaXplO1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgaXRlbUNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzLCBpbnN0YW5jZSkge1xuICAgIHZhciBfcmVmNCA9IHByb3BzLFxuICAgICAgICBlc3RpbWF0ZWRJdGVtU2l6ZSA9IF9yZWY0LmVzdGltYXRlZEl0ZW1TaXplO1xuICAgIHZhciBpbnN0YW5jZVByb3BzID0ge1xuICAgICAgaXRlbU1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZEl0ZW1TaXplOiBlc3RpbWF0ZWRJdGVtU2l6ZSB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUkMSxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4OiAtMVxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kZXggPSBmdW5jdGlvbiAoaW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4LCBpbmRleCAtIDEpOyAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cblxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNSkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWY1Lml0ZW1TaXplO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKGl0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIEZpeGVkU2l6ZUdyaWQgPSAvKiNfX1BVUkVfXyovY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uT2Zmc2V0KF9yZWYsIGluZGV4KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gaW5kZXggKiBjb2x1bW5XaWR0aDtcbiAgfSxcbiAgZ2V0Q29sdW1uV2lkdGg6IGZ1bmN0aW9uIGdldENvbHVtbldpZHRoKF9yZWYyLCBpbmRleCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYyLmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aDtcbiAgfSxcbiAgZ2V0Um93T2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dPZmZzZXQoX3JlZjMsIGluZGV4KSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYzLnJvd0hlaWdodDtcbiAgICByZXR1cm4gaW5kZXggKiByb3dIZWlnaHQ7XG4gIH0sXG4gIGdldFJvd0hlaWdodDogZnVuY3Rpb24gZ2V0Um93SGVpZ2h0KF9yZWY0LCBpbmRleCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmNC5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIHJvd0hlaWdodDtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KF9yZWY1KSB7XG4gICAgdmFyIHJvd0NvdW50ID0gX3JlZjUucm93Q291bnQsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWY1LnJvd0hlaWdodDtcbiAgICByZXR1cm4gcm93SGVpZ2h0ICogcm93Q291bnQ7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsV2lkdGgoX3JlZjYpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBfcmVmNi5jb2x1bW5Db3VudCxcbiAgICAgICAgY29sdW1uV2lkdGggPSBfcmVmNi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gY29sdW1uV2lkdGggKiBjb2x1bW5Db3VudDtcbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQoX3JlZjcsIGNvbHVtbkluZGV4LCBhbGlnbiwgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IF9yZWY3LmNvbHVtbkNvdW50LFxuICAgICAgICBjb2x1bW5XaWR0aCA9IF9yZWY3LmNvbHVtbldpZHRoLFxuICAgICAgICB3aWR0aCA9IF9yZWY3LndpZHRoO1xuICAgIHZhciBsYXN0Q29sdW1uT2Zmc2V0ID0gTWF0aC5tYXgoMCwgY29sdW1uQ291bnQgKiBjb2x1bW5XaWR0aCAtIHdpZHRoKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdENvbHVtbk9mZnNldCwgY29sdW1uSW5kZXggKiBjb2x1bW5XaWR0aCk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGNvbHVtbkluZGV4ICogY29sdW1uV2lkdGggLSB3aWR0aCArIHNjcm9sbGJhclNpemUgKyBjb2x1bW5XaWR0aCk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAtIHdpZHRoICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0ICsgd2lkdGgpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Q29sdW1uT2Zmc2V0ICsgTWF0aC5mbG9vcih3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RDb2x1bW5PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChfcmVmOCwgcm93SW5kZXgsIGFsaWduLCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjgucm93SGVpZ2h0LFxuICAgICAgICBoZWlnaHQgPSBfcmVmOC5oZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjgucm93Q291bnQ7XG4gICAgdmFyIGxhc3RSb3dPZmZzZXQgPSBNYXRoLm1heCgwLCByb3dDb3VudCAqIHJvd0hlaWdodCAtIGhlaWdodCk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RSb3dPZmZzZXQsIHJvd0luZGV4ICogcm93SGVpZ2h0KTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm93SW5kZXggKiByb3dIZWlnaHQgLSBoZWlnaHQgKyBzY3JvbGxiYXJTaXplICsgcm93SGVpZ2h0KTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgLSBoZWlnaHQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCArIGhlaWdodCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChoZWlnaHQgLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Um93T2Zmc2V0ICsgTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0Um93T2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxUb3A7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFRvcCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWY5LCBzY3JvbGxMZWZ0KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjkuY29sdW1uV2lkdGgsXG4gICAgICAgIGNvbHVtbkNvdW50ID0gX3JlZjkuY29sdW1uQ291bnQ7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgTWF0aC5mbG9vcihzY3JvbGxMZWZ0IC8gY29sdW1uV2lkdGgpKSk7XG4gIH0sXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjEwLCBzdGFydEluZGV4LCBzY3JvbGxMZWZ0KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjEwLmNvbHVtbldpZHRoLFxuICAgICAgICBjb2x1bW5Db3VudCA9IF9yZWYxMC5jb2x1bW5Db3VudCxcbiAgICAgICAgd2lkdGggPSBfcmVmMTAud2lkdGg7XG4gICAgdmFyIGxlZnQgPSBzdGFydEluZGV4ICogY29sdW1uV2lkdGg7XG4gICAgdmFyIG51bVZpc2libGVDb2x1bW5zID0gTWF0aC5jZWlsKCh3aWR0aCArIHNjcm9sbExlZnQgLSBsZWZ0KSAvIGNvbHVtbldpZHRoKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUNvbHVtbnMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldChfcmVmMTEsIHNjcm9sbFRvcCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMTEucm93SGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWYxMS5yb3dDb3VudDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHJvd0hlaWdodCkpKTtcbiAgfSxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmMTIsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMTIucm93SGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWYxMi5yb3dDb3VudCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjEyLmhlaWdodDtcbiAgICB2YXIgdG9wID0gc3RhcnRJbmRleCAqIHJvd0hlaWdodDtcbiAgICB2YXIgbnVtVmlzaWJsZVJvd3MgPSBNYXRoLmNlaWwoKGhlaWdodCArIHNjcm9sbFRvcCAtIHRvcCkgLyByb3dIZWlnaHQpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlUm93cyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMpIHsvLyBOb29wXG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjEzKSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjEzLmNvbHVtbldpZHRoLFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmMTMucm93SGVpZ2h0O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY29sdW1uV2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAoY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKHJvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgRml4ZWRTaXplTGlzdCA9IC8qI19fUFVSRV9fKi9jcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogZnVuY3Rpb24gZ2V0SXRlbU9mZnNldChfcmVmLCBpbmRleCkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWYuaXRlbVNpemU7XG4gICAgcmV0dXJuIGluZGV4ICogaXRlbVNpemU7XG4gIH0sXG4gIGdldEl0ZW1TaXplOiBmdW5jdGlvbiBnZXRJdGVtU2l6ZShfcmVmMiwgaW5kZXgpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmMi5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaXRlbVNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxTaXplKF9yZWYzKSB7XG4gICAgdmFyIGl0ZW1Db3VudCA9IF9yZWYzLml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmMy5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaXRlbVNpemUgKiBpdGVtQ291bnQ7XG4gIH0sXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChfcmVmNCwgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gX3JlZjQuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBfcmVmNC5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IF9yZWY0Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNC5pdGVtU2l6ZSxcbiAgICAgICAgbGF5b3V0ID0gX3JlZjQubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IF9yZWY0LndpZHRoO1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBsYXN0SXRlbU9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1Db3VudCAqIGl0ZW1TaXplIC0gc2l6ZSk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RJdGVtT2Zmc2V0LCBpbmRleCAqIGl0ZW1TaXplKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaW5kZXggKiBpdGVtU2l6ZSAtIHNpemUgKyBpdGVtU2l6ZSArIHNjcm9sbGJhclNpemUpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHNpemUgLyAyKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdEl0ZW1PZmZzZXQgKyBNYXRoLmZsb29yKHNpemUgLyAyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RJdGVtT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0U3RhcnRJbmRleEZvck9mZnNldChfcmVmNSwgb2Zmc2V0KSB7XG4gICAgdmFyIGl0ZW1Db3VudCA9IF9yZWY1Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNS5pdGVtU2l6ZTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgTWF0aC5mbG9vcihvZmZzZXQgLyBpdGVtU2l6ZSkpKTtcbiAgfSxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmNiwgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IF9yZWY2LmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjYuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBfcmVmNi5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjYuaXRlbVNpemUsXG4gICAgICAgIGxheW91dCA9IF9yZWY2LmxheW91dCxcbiAgICAgICAgd2lkdGggPSBfcmVmNi53aWR0aDtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIG9mZnNldCA9IHN0YXJ0SW5kZXggKiBpdGVtU2l6ZTtcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoKHNpemUgKyBzY3JvbGxPZmZzZXQgLSBvZmZzZXQpIC8gaXRlbVNpemUpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUl0ZW1zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcykgey8vIE5vb3BcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNykge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWY3Lml0ZW1TaXplO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAoaXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemUpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBQdWxsZWQgZnJvbSByZWFjdC1jb21wYXRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9ibG9iLzdjNWRlMDBlN2M4NWUyZmZkMDExYmYzYWYwMjg5OWI2M2Y2OTlkM2Evc3JjL2luZGV4LmpzI0wzNDlcbmZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKHByZXYsIG5leHQpIHtcbiAgZm9yICh2YXIgYXR0cmlidXRlIGluIHByZXYpIHtcbiAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbmV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIF9hdHRyaWJ1dGUgaW4gbmV4dCkge1xuICAgIGlmIChwcmV2W19hdHRyaWJ1dGVdICE9PSBuZXh0W19hdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZVwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wic3R5bGVcIl07XG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0bWVtb1xuXG5mdW5jdGlvbiBhcmVFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0eWxlID0gcHJldlByb3BzLnN0eWxlLFxuICAgICAgcHJldlJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcmV2UHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgdmFyIG5leHRTdHlsZSA9IG5leHRQcm9wcy5zdHlsZSxcbiAgICAgIG5leHRSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UobmV4dFByb3BzLCBfZXhjbHVkZWQyKTtcblxuICByZXR1cm4gIXNoYWxsb3dEaWZmZXJzKHByZXZTdHlsZSwgbmV4dFN0eWxlKSAmJiAhc2hhbGxvd0RpZmZlcnMocHJldlJlc3QsIG5leHRSZXN0KTtcbn1cblxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcblxuZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gIHJldHVybiAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpO1xufVxuXG5leHBvcnQgeyBGaXhlZFNpemVHcmlkLCBGaXhlZFNpemVMaXN0LCBWYXJpYWJsZVNpemVHcmlkLCBWYXJpYWJsZVNpemVMaXN0LCBhcmVFcXVhbCwgc2hvdWxkQ29tcG9uZW50VXBkYXRlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20uanMubWFwXG4iLCIoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKFtdLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5TY3JvbGxwYXJlbnQgPSBmYWN0b3J5KCk7XG4gIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICB2YXIgcmVnZXggPSAvKGF1dG98c2Nyb2xsKS87XG5cbiAgdmFyIHBhcmVudHMgPSBmdW5jdGlvbiAobm9kZSwgcHMpIHtcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlID09PSBudWxsKSB7IHJldHVybiBwczsgfVxuXG4gICAgcmV0dXJuIHBhcmVudHMobm9kZS5wYXJlbnROb2RlLCBwcy5jb25jYXQoW25vZGVdKSk7XG4gIH07XG5cbiAgdmFyIHN0eWxlID0gZnVuY3Rpb24gKG5vZGUsIHByb3ApIHtcbiAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApO1xuICB9O1xuXG4gIHZhciBvdmVyZmxvdyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIHN0eWxlKG5vZGUsIFwib3ZlcmZsb3dcIikgKyBzdHlsZShub2RlLCBcIm92ZXJmbG93LXlcIikgKyBzdHlsZShub2RlLCBcIm92ZXJmbG93LXhcIik7XG4gIH07XG5cbiAgdmFyIHNjcm9sbCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICByZXR1cm4gcmVnZXgudGVzdChvdmVyZmxvdyhub2RlKSk7XG4gIH07XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB2YXIgcHMgPSBwYXJlbnRzKG5vZGUucGFyZW50Tm9kZSwgW10pO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHNjcm9sbChwc1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIHBzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfTtcblxuICByZXR1cm4gc2Nyb2xsUGFyZW50O1xufSkpO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBCdXR0b25Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuICBvblBvaW50ZXJEb3duPzogKGV2ZW50OiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xuICBzaXplPzogU2l6ZTtcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcImxlZnRcIiB8IFwicmlnaHRcIj47XG59O1xuXG5mdW5jdGlvbiBCdXR0b24oe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBvbkNsaWNrLFxuICBvblBvaW50ZXJEb3duLFxuICBjb250YWluZXJSZWYsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUsXG59OiBCdXR0b25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25Qb2ludGVyRG93bj17b25Qb2ludGVyRG93bn1cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3NcIjtcblxudHlwZSBCdXR0b25CYWRnZVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbkJhZGdlKHsgY2hpbGRyZW4sIGludmVydGVkID0gZmFsc2UsIGNsYXNzTmFtZSB9OiBCdXR0b25CYWRnZVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuYnV0dG9uQmFkZ2UsIHtbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWR9LCBjbGFzc05hbWVdKX0+e2NoaWxkcmVufTwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYWRnZTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi9CdXR0b25CYWRnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIE9mZnNldFNpZGUgPSBcImxlZnRcIiB8IFwicmlnaHRcIjtcblxudHlwZSBCdXR0b25MaW5rUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gQnV0dG9uTGluayh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHNpemUsXG4gIGNvbnRhaW5lclJlZixcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIC4uLnByb3BzXG59OiBCdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uTGluaztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uTGluayB9IGZyb20gXCIuL0J1dHRvbkxpbmtcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBDaGVja2JveFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICBzaXplPzogU2l6ZTtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgaW5kZXRlcm1pbmF0ZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIENoZWNrYm94KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgY2hlY2tlZCxcbiAgZGlzYWJsZWQsXG4gIG5hbWUsXG4gIGNsYXNzTmFtZSxcbiAgaW5kZXRlcm1pbmF0ZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxufTogQ2hlY2tib3hQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9uQ2hhbmdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8aW5wdXRcbiAgICAgIGRhdGEtdGVzdGlkPVwiY2hlY2tib3hcIlxuICAgICAgcmVmPXsoaW5wdXRSZWYpID0+IHtcbiAgICAgICAgaWYgKGlucHV0UmVmKSB7XG4gICAgICAgICAgaW5wdXRSZWYuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNoZWNrYm94LCBjbGFzc05hbWUsIHN0eWxlc1tzaXplXV0pfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIG5hbWU9e25hbWV9XG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgLz5cbiAgKTtcblxuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9DaGVja2JveFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBDb2xvclN3YXRjaCB9IGZyb20gXCIuLi9Db2xvclN3YXRjaFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclBpY2tlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIENvbG9yUGlja2VyUHJvcHMgPSB7XG4gIGNvbG9yczogQ29sb3JbXTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgZGlyZWN0aW9uPzogXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCI7XG4gIG9uU2VsZWN0OiAoY29sb3I6IENvbG9yKSA9PiB2b2lkO1xuICBzZWxlY3RlZENvbG9yPzogQ29sb3I7XG4gIGNhblRvZ2dsZT86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBDb2xvclBpY2tlcih7XG4gIGNvbG9ycyxcbiAgY29udGFpbmVyUmVmLFxuICBvblNlbGVjdCxcbiAgc2VsZWN0ZWRDb2xvcixcbiAgZGlyZWN0aW9uID0gXCJ2ZXJ0aWNhbFwiLFxuICBjYW5Ub2dnbGUgPSBmYWxzZSxcbn06IENvbG9yUGlja2VyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb2xvclBpY2tlciwgc3R5bGVzW2RpcmVjdGlvbl1dKX1cbiAgICA+XG4gICAgICB7Y29sb3JzLm1hcCgoY29sb3I6IENvbG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoY2FuVG9nZ2xlICYmIGNvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5KSB7XG4gICAgICAgICAgICBvblNlbGVjdChudWxsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb25TZWxlY3QoY29sb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxDb2xvclN3YXRjaFxuICAgICAgICAgICAga2V5PXtjb2xvci5rZXl9XG4gICAgICAgICAgICBjb2xvcj17Y29sb3J9XG4gICAgICAgICAgICBpc1NlbGVjdGVkPXtjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbGVjdH1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yUGlja2VyO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclBpY2tlciB9IGZyb20gXCIuL0NvbG9yUGlja2VyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JTd2F0Y2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclN3YXRjaFByb3BzID0ge1xuICBjb2xvcjogQ29sb3I7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBDb2xvclN3YXRjaCh7XG4gIGNvbG9yLFxuICBjb250YWluZXJSZWYsXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIG9uQ2xpY2ssXG59OiBDb2xvclN3YXRjaFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbG9yU3dhdGNoLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnNlbGVjdGVkXTogaXNTZWxlY3RlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJjb2xvci1zd2F0Y2hcIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogY29sb3IuaGV4Q29kZSB9fVxuICAgID5cbiAgICAgIHtjb2xvci5sYWJlbCAmJiA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zck9ubHl9PntgU2VsZWN0ICR7Y29sb3IubGFiZWx9IGNvbG9yYH08L3NwYW4+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclN3YXRjaDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi9Db2xvclN3YXRjaFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiLi4vTW9kYWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIENvbmZpcm1hdGlvbk1vZGFsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgYnV0dG9uc0xlZnQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgYnV0dG9uc1JpZ2h0PzogUmVhY3RFbGVtZW50W107XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1vZGFsKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGlzT3BlbixcbiAgYnV0dG9uc0xlZnQgPSBbXSxcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBiYXNlWkluZGV4ID0gMTAxOSxcbn06IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgbm9PdmVybGF5PXtub092ZXJsYXl9XG4gICAgICBub1NoYWRvdz17bm9TaGFkb3d9XG4gICAgICBiYXNlWkluZGV4PXtiYXNlWkluZGV4fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgICB7ISFoZWFkZXIgJiYgPGgxIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsSGVhZGVyfT57aGVhZGVyfTwvaDE+fVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWxDb250ZW50LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc0xlZnR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zUmlnaHR9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuQ29uZmlybWF0aW9uTW9kYWwuZGlzcGxheU5hbWUgPSBcIkNvbmZpcm1hdGlvbk1vZGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpcm1hdGlvbk1vZGFsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCB0eXBlIERyYXdlckNvbnRleHRWYWx1ZSA9IHtcbiAgbm9DbG9zZUljb24/OiBib29sZWFuO1xuICBvbkNsb3NlPygpOiB2b2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IERyYXdlckNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PERyYXdlckNvbnRleHRWYWx1ZT4oXG4gIHt9IGFzIERyYXdlckNvbnRleHRWYWx1ZVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZURyYXdlckNvbnRleHQoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KERyYXdlckNvbnRleHQpO1xufVxuIiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0RyYXdlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDU1NUcmFuc2l0aW9uIH0gZnJvbSBcInJlYWN0LXRyYW5zaXRpb24tZ3JvdXBcIjtcbmltcG9ydCB7IENTU1RyYW5zaXRpb25DbGFzc05hbWVzIH0gZnJvbSBcInJlYWN0LXRyYW5zaXRpb24tZ3JvdXAvQ1NTVHJhbnNpdGlvblwiO1xuaW1wb3J0IHsgRHJhd2VyRm9vdGVyIH0gZnJvbSBcIi4vRHJhd2VyRm9vdGVyXCI7XG5pbXBvcnQgeyBEcmF3ZXJIZWFkZXIgfSBmcm9tIFwiLi9EcmF3ZXJIZWFkZXJcIjtcbmltcG9ydCB7IERyYXdlckNvbnRlbnQgfSBmcm9tIFwiLi9EcmF3ZXJDb250ZW50XCI7XG5pbXBvcnQgeyBEcmF3ZXJDb250ZXh0IH0gZnJvbSBcIi4vQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcblxudHlwZSBEcmF3ZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9wZW46IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBub0Nsb3NlSWNvbj86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIHVubW91bnRPbkV4aXQ/OiBib29sZWFuO1xuICBtb3VudE9uRW50ZXI/OiBib29sZWFuO1xuICBwb3J0YWxDb250YWluZXI/OiBFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudDtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIG9uQ2xvc2VBbmltYXRpb25FbmQ/OiAoKSA9PiB2b2lkO1xufTtcblxuY29uc3QgVFJBTlNJVElPTl9DTEFTU19OQU1FUzogQ1NTVHJhbnNpdGlvbkNsYXNzTmFtZXMgPSB7XG4gIGVudGVyOiBzdHlsZXMuZHJhd2VyUGFwZXJFbnRlcixcbiAgZW50ZXJBY3RpdmU6IHN0eWxlcy5kcmF3ZXJQYXBlckVudGVyQWN0aXZlLFxuICBlbnRlckRvbmU6IHN0eWxlcy5kcmF3ZXJQYXBlckVudGVyRG9uZSxcbiAgZXhpdDogc3R5bGVzLmRyYXdlclBhcGVyRXhpdCxcbiAgZXhpdEFjdGl2ZTogc3R5bGVzLmRyYXdlclBhcGVyRXhpdEFjdGl2ZSxcbiAgZXhpdERvbmU6IHN0eWxlcy5kcmF3ZXJQYXBlckV4aXREb25lLFxufTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zaXRpb25DbGFzc05hbWUoXG4gIG5vZGVSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD5cbikge1xuICByZXR1cm4gbm9kZVJlZi5jdXJyZW50Py5jbGFzc05hbWUubWF0Y2goXG4gICAgT2JqZWN0LnZhbHVlcyhUUkFOU0lUSU9OX0NMQVNTX05BTUVTKS5qb2luKFwifFwiKVxuICApPy5bMF07XG59XG5cbmZ1bmN0aW9uIERyYXdlcih7XG4gIG9wZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gIG5vQ2xvc2VJY29uID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBjaGlsZHJlbixcbiAgdW5tb3VudE9uRXhpdCA9IGZhbHNlLFxuICBtb3VudE9uRW50ZXIgPSBmYWxzZSxcbiAgcG9ydGFsQ29udGFpbmVyID0gZG9jdW1lbnQuYm9keSxcbiAgb25DbG9zZSxcbiAgb25DbG9zZUFuaW1hdGlvbkVuZCxcbn06IERyYXdlclByb3BzKSB7XG4gIGNvbnN0IFtpc0RyYXdlclZpc2libGUsIHNldERyYXdlclZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNPdmVybGF5VmlzaWJsZSwgc2V0SXNPdmVybGF5VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgbm9kZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGN1cnJlbnRUcmFuc2l0aW9uQ2xhc3NOYW1lID0gZ2V0Q3VycmVudFRyYW5zaXRpb25DbGFzc05hbWUobm9kZVJlZik7XG5cbiAgY29uc3QgY29udGV4dCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHsgb25DbG9zZSwgbm9DbG9zZUljb24gfSksXG4gICAgW29uQ2xvc2UsIG5vQ2xvc2VJY29uXVxuICApO1xuXG4gIHVzZUhvdGtleXMoXCJFc2NhcGVcIiwgb25DbG9zZSk7XG5cbiAgY29uc3QgaGFuZGxlRW50ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RHJhd2VyVmlzaWJsZSh0cnVlKTtcbiAgICBzZXRJc092ZXJsYXlWaXNpYmxlKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlRXhpdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc092ZXJsYXlWaXNpYmxlKGZhbHNlKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXREcmF3ZXJWaXNpYmxlKGZhbHNlKTtcbiAgICBvbkNsb3NlQW5pbWF0aW9uRW5kPy4oKTtcbiAgfSwgW29uQ2xvc2VBbmltYXRpb25FbmRdKTtcblxuICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgIDxDU1NUcmFuc2l0aW9uXG4gICAgICBub2RlUmVmPXtub2RlUmVmfVxuICAgICAgaW49e29wZW59XG4gICAgICB0aW1lb3V0PXszMDB9XG4gICAgICBjbGFzc05hbWVzPXtUUkFOU0lUSU9OX0NMQVNTX05BTUVTfVxuICAgICAgdW5tb3VudE9uRXhpdD17dW5tb3VudE9uRXhpdH1cbiAgICAgIG1vdW50T25FbnRlcj17bW91bnRPbkVudGVyfVxuICAgICAgb25FeGl0ZWQ9e2hhbmRsZUV4aXRlZH1cbiAgICAgIG9uRW50ZXI9e2hhbmRsZUVudGVyfVxuICAgICAgb25FeGl0PXtoYW5kbGVFeGl0fVxuICAgID5cbiAgICAgIDxEcmF3ZXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmRyYXdlcixcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy52aXNpYmxlXTogaXNEcmF3ZXJWaXNpYmxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHJlZj17bm9kZVJlZn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuZHJhd2VyUGFwZXIsXG4gICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gYWRkIHRoZSBjdXJyZW50IHRyYW5zaXRpb24gY2xhc3MgbmFtZSBoZXJlIGJlY2F1c2UgaXQgZ2V0cyBkaXNhcHBlYXJlZCBhbG9uZyB3aXRoIHRoZSBkcmF3ZXJcbiAgICAgICAgICAgICAgLy8gd2hlbiBjbGFzc05hbWUgY2hhbmdlc1xuICAgICAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbkNsYXNzTmFtZSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VyUGFwZXJDb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgIHN0eWxlcy5kcmF3ZXJPdmVybGF5LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgW3N0eWxlcy5ub092ZXJsYXldOiBub092ZXJsYXksXG4gICAgICAgICAgICAgICAgW3N0eWxlcy52aXNpYmxlXTogaXNPdmVybGF5VmlzaWJsZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRHJhd2VyQ29udGV4dC5Qcm92aWRlcj5cbiAgICA8L0NTU1RyYW5zaXRpb24+LFxuICAgIHBvcnRhbENvbnRhaW5lclxuICApO1xufVxuXG5EcmF3ZXIuSGVhZGVyID0gRHJhd2VySGVhZGVyO1xuRHJhd2VyLkNvbnRlbnQgPSBEcmF3ZXJDb250ZW50O1xuRHJhd2VyLkZvb3RlciA9IERyYXdlckZvb3RlcjtcblxuZXhwb3J0IGRlZmF1bHQgRHJhd2VyO1xuIiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0RyYXdlckNvbnRlbnQubW9kdWxlLmNzc1wiO1xuXG50eXBlIERyYXdlckNvbnRlbnRQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIERyYXdlckNvbnRlbnQoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH06IERyYXdlckNvbnRlbnRQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmRyYXdlckNvbnRlbnQsIGNsYXNzTmFtZV0pfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJhd2VyQ29udGVudDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRHJhd2VyQ29udGVudCB9IGZyb20gXCIuL0RyYXdlckNvbnRlbnRcIjtcbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9EcmF3ZXJGb290ZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIERyYXdlckZvb3RlclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gRHJhd2VyRm9vdGVyKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSB9OiBEcmF3ZXJGb290ZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmRyYXdlckZvb3RlciwgY2xhc3NOYW1lXSl9PntjaGlsZHJlbn08L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJhd2VyRm9vdGVyO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBEcmF3ZXJGb290ZXIgfSBmcm9tIFwiLi9EcmF3ZXJGb290ZXJcIjtcbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vLi4vSWNvblwiO1xuaW1wb3J0IGNsb3NlSWNvbiBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL2Nsb3NlLnN2Z1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0RyYXdlckhlYWRlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyB1c2VEcmF3ZXJDb250ZXh0IH0gZnJvbSBcIi4uL0NvbnRleHRcIjtcblxudHlwZSBEcmF3ZXJIZWFkZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIERyYXdlckhlYWRlcih7IGNoaWxkcmVuLCBjbGFzc05hbWUgfTogRHJhd2VySGVhZGVyUHJvcHMpIHtcbiAgY29uc3QgeyBvbkNsb3NlLCBub0Nsb3NlSWNvbiB9ID0gdXNlRHJhd2VyQ29udGV4dCgpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuZHJhd2VySGVhZGVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7IW5vQ2xvc2VJY29uICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJIZWFkZXJDbG9zZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJIZWFkZXJDbG9zZUljb259IG9uQ2xpY2s9e29uQ2xvc2V9PlxuICAgICAgICAgICAgPEljb24gc3JjPXtjbG9zZUljb259IHNpemU9e1wieGxhcmdlXCJ9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJhd2VySGVhZGVyO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBEcmF3ZXJIZWFkZXIgfSBmcm9tIFwiLi9EcmF3ZXJIZWFkZXJcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRHJhd2VyIH0gZnJvbSBcIi4vRHJhd2VyXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHsgSXRlbSwgUmVuZGVyRGlzcGxheVByb3BzIH0gZnJvbSBcIi4vRHJvcGRvd25cIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9DbGlja2FibGUubW9kdWxlLmNzc1wiO1xuXG5pbXBvcnQgaWNvbk1lbnUgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC1kb3duLnN2Z1wiO1xuXG5leHBvcnQgdHlwZSBDbGlja2FibGVQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBPbWl0PFxuICBSZW5kZXJEaXNwbGF5UHJvcHM8VD4sXG4gIFwic2VsZWN0ZWRJdGVtXCIgfCBcInRvZ2dsZUlzT3BlblwiXG4+ICYge1xuICBvbkNsaWNrOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5bXCJ0b2dnbGVJc09wZW5cIl07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2xpY2thYmxlPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGRpc3BsYXksXG4gIGlzRGlzYWJsZWQsXG4gIG9uQ2xpY2s6IGhhbmRsZUNsaWNrLFxufTogQ2xpY2thYmxlUHJvcHM8VD4pIHtcbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICBhbGlnbj1cImxlZnRcIlxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuY29udGFpbmVyfT5cbiAgICAgICAge2Rpc3BsYXl9XG4gICAgICAgIDxJY29uIGFsdD1cIkRyb3Bkb3duXCIgc3JjPXtpY29uTWVudX0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvQnV0dG9uPlxuICApO1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Q2hpbGQsIFJlYWN0RWxlbWVudCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljayB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuXG5pbXBvcnQgeyBDbGlja2FibGUgfSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbmltcG9ydCB7IE1lbnUsIE1lbnVDb250YWluZXIsIE1lbnVJdGVtLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4uL01lbnVcIjtcblxuZXhwb3J0IHR5cGUgSXRlbSA9IHsgaWQ6IG51bWJlciB8IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckRpc3BsYXlQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBQaWNrPFxuICBEcm9wZG93blByb3BzPFQ+LFxuICBcImRpc3BsYXlcIiB8IFwic2VsZWN0ZWRJdGVtXCJcbj4gJiB7IGlzRGlzYWJsZWQ6IGJvb2xlYW47IHRvZ2dsZUlzT3BlbjogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJDbGlja2FibGVGbjxUIGV4dGVuZHMgSXRlbT4gPSAoXG4gIHByb3BzOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5cbikgPT4gUmVhY3RFbGVtZW50O1xuXG5leHBvcnQgdHlwZSBJdGVtQm9keVJlbmRlcmVyRm48VCBleHRlbmRzIEl0ZW0+ID0gKHN0YXRlOiB7XG4gIGl0ZW06IFQ7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59KSA9PiBSZWFjdENoaWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duUHJvcHM8VCBleHRlbmRzIEl0ZW0+IHtcbiAgaXRlbUJvZHlSZW5kZXJlcj86IEl0ZW1Cb2R5UmVuZGVyZXJGbjxUPjtcbiAgaXRlbXM6IFRbXTtcbiAgb25TZWxlY3Q6IChpdGVtOiBUKSA9PiB2b2lkO1xuICBkaXNwbGF5OiBSZWFjdENoaWxkO1xuICByZW5kZXJDbGlja2FibGU/OiBSZW5kZXJDbGlja2FibGVGbjxUPjtcbiAgc2VsZWN0ZWRJdGVtOiBUIHwgbnVsbDtcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGl0ZW1Cb2R5UmVuZGVyZXIsXG4gIGl0ZW1zLFxuICBvblNlbGVjdDogaGFuZGxlU2VsZWN0LFxuICBkaXNwbGF5LFxuICByZW5kZXJDbGlja2FibGUsXG4gIHNlbGVjdGVkSXRlbSxcbiAgcGxhY2VtZW50ID0geyB2ZXJ0aWNhbDogXCJib3R0b21cIiwgaG9yaXpvbnRhbDogXCJsZWZ0XCIgfVxufTogRHJvcGRvd25Qcm9wczxUPikge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gc2V0SXNPcGVuKGZhbHNlKSk7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGl0ZW06IFQpID0+IHtcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSk7XG4gICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgfTtcbiAgY29uc3QgaXNEaXNhYmxlZCA9ICFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHRvZ2dsZUlzT3BlbiA9ICgpID0+IHNldElzT3BlbighaXNPcGVuKTtcblxuICByZXR1cm4gKFxuICAgIDxNZW51Q29udGFpbmVyXG4gICAgICBidXR0b249e1xuICAgICAgICB0eXBlb2YgcmVuZGVyQ2xpY2thYmxlID09PSBcImZ1bmN0aW9uXCIgPyAoXG4gICAgICAgICAgcmVuZGVyQ2xpY2thYmxlKHtcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLFxuICAgICAgICAgICAgdG9nZ2xlSXNPcGVuLFxuICAgICAgICAgIH0pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENsaWNrYWJsZVxuICAgICAgICAgICAgZGlzcGxheT17ZGlzcGxheX1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVJc09wZW59XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcGxhY2VtZW50PXtwbGFjZW1lbnR9XG4gICAgICByZWY9e3JlZn1cbiAgICA+XG4gICAgICA8TWVudSBpc09wZW49e2lzT3Blbn0+XG4gICAgICAgIHtpdGVtcyAmJlxuICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgPE1lbnVJdGVtXG4gICAgICAgICAgICAgIGlzQWN0aXZlPXtpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkfVxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNsaWNrKGl0ZW0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aXRlbUJvZHlSZW5kZXJlclxuICAgICAgICAgICAgICAgID8gaXRlbUJvZHlSZW5kZXJlcih7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGl0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogaXRlbS5uYW1lfVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICApKX1cbiAgICAgIDwvTWVudT5cbiAgICA8L01lbnVDb250YWluZXI+XG4gICk7XG59XG4iLCJleHBvcnQge1xuICBEcm9wZG93bixcbiAgRHJvcGRvd25Qcm9wcyxcbiAgSXRlbSBhcyBEcm9wZG93bkl0ZW0sXG4gIEl0ZW1Cb2R5UmVuZGVyZXJGbiBhcyBEcm9wZG93bkl0ZW1Cb2R5UmVuZGVyZXJGbixcbiAgUmVuZGVyQ2xpY2thYmxlRm4gYXMgRHJvcGRvd25SZW5kZXJDbGlja2FibGVGbixcbiAgUmVuZGVyRGlzcGxheVByb3BzIGFzIERyb3Bkb3duUmVuZGVyRGlzcGxheVByb3BzLFxufSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuZXhwb3J0IHtcbiAgQ2xpY2thYmxlIGFzIERyb3Bkb3duQ2xpY2thYmxlLFxuICBDbGlja2FibGVQcm9wcyBhcyBEcm9wZG93bkNsaWNrYWJsZVByb3BzXG59IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgRmlsZUlucHV0U2l6ZSA9IFNpemU7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uQ2hhbmdlOiAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGFjY2VwdD86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBzaXplPzogRmlsZUlucHV0U2l6ZTtcbn07XG5cbmZ1bmN0aW9uIEZpbGVJbnB1dCh7XG4gIGNoaWxkcmVuLFxuICBhY2NlcHQsXG4gIG9uQ2hhbmdlLFxuICBpbnB1dFJlZixcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxhYmVsXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmxhYmVsLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5pbnB1dH1cbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBpZD1cImZpbGVcIlxuICAgICAgICBhY2NlcHQ9e2FjY2VwdH1cbiAgICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgIC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZUlucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlSW5wdXQgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcbmV4cG9ydCB7IEZpbGVJbnB1dFNpemUgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDpcbiAgICB8IFwicmlnaHRcIlxuICAgIHwgXCJyaWdodEVkZ2VcIlxuICAgIHwgXCJyaWdodE9uRWRnZVwiXG4gICAgfCBcImxlZnRcIlxuICAgIHwgXCJsZWZ0RWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsOlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJ0b3BFZGdlXCJcbiAgICB8IFwidG9wT25FZGdlXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwiYm90dG9tRWRnZVwiXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XG59O1xuXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvbHVtblwiIHwgXCJyb3dcIjtcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xufTtcblxuZnVuY3Rpb24gRmxvYXRpbmdQYW5lbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb2x1bW5cIixcbiAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImNlbnRlclwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiwgcGFyZW50OiBcInZpZXdwb3J0XCIgfSxcbn06IEZsb2F0aW5nUGFuZWxQcm9wcykge1xuICBjb25zdCBob3Jpem9udGFsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQuaG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIlxuICAgICAgPyBcImhvcml6b250YWxDZW50ZXJcIlxuICAgICAgOiBwbGFjZW1lbnQuaG9yaXpvbnRhbDtcblxuICBjb25zdCB2ZXJ0aWNhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50LnZlcnRpY2FsID09PSBcImNlbnRlclwiID8gXCJ2ZXJ0aWNhbENlbnRlclwiIDogcGxhY2VtZW50LnZlcnRpY2FsO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImZsb2F0aW5nLXBhbmVsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbaG9yaXpvbnRhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1t2ZXJ0aWNhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1tsYXlvdXRdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IHBsYWNlbWVudC5wYXJlbnQgIT09IFwiY29udGFpbmVyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbi5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgSWNvblByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MSW1hZ2VFbGVtZW50PjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBzcmM6IHN0cmluZztcbiAgc2l6ZT86IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCIgfCBcInhsYXJnZVwiO1xufTtcblxuZnVuY3Rpb24gSWNvbih7XG4gIHNyYyxcbiAgYWx0LFxuICBjb250YWluZXJSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxufTogSWNvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGltZ1xuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmljb24sXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQgfSxcbiAgICAgIF0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbiB9IGZyb20gXCIuL0ljb25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBJY29uQnV0dG9uUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIHNyYzogc3RyaW5nO1xuICBhbHQ6IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xuICBzaXplPzogU2l6ZTtcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI+O1xufTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbih7XG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgc3JjLFxuICBhbHQsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSA9IFwiYnV0dG9uXCIsXG59OiBJY29uQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbiB9IGZyb20gXCIuL0ljb25CdXR0b25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI7XG5cbnR5cGUgSWNvbkJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBzcmM6IHN0cmluZztcbiAgICAgIGFsdDogc3RyaW5nO1xuICAgICAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBJY29uQnV0dG9uTGluayh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3JjLFxuICBhbHQsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBJY29uQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uLWJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbkxpbms7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b25MaW5rIH0gZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmtcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JbWFnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEltYWdlUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGxheW91dD86IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG4gIHNyYzogc3RyaW5nO1xuICBzcmNXaWR0aD86IG51bWJlcjtcbiAgc3JjSGVpZ2h0PzogbnVtYmVyO1xuICBkZWNvZGluZz86IFwiYXN5bmNcIiB8IFwic3luY1wiIHwgXCJhdXRvXCI7XG4gIGxvYWRpbmc/OiBcImVhZ2VyXCIgfCBcImxhenlcIjtcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xufTtcblxuZnVuY3Rpb24gSW1hZ2VDb21wb25lbnQoe1xuICBzcmMsXG4gIGFsdCxcbiAgc3JjV2lkdGgsXG4gIHNyY0hlaWdodCxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXG4gIGRlY29kaW5nID0gXCJhdXRvXCIsXG4gIGxvYWRpbmcgPSBcImVhZ2VyXCIsXG4gIHN0eWxlLFxufTogSW1hZ2VQcm9wcykge1xuICBjb25zdCBpbWFnZUVsZW1lbnQgPSAoXG4gICAgPGltZ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmltYWdlLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZVwiXG4gICAgICBhbHQ9e2FsdH1cbiAgICAgIHNyYz17c3JjfVxuICAgICAgd2lkdGg9e3NyY1dpZHRofVxuICAgICAgaGVpZ2h0PXtzcmNIZWlnaHR9XG4gICAgICBkZWNvZGluZz17ZGVjb2Rpbmd9XG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgIC8+XG4gICk7XG5cbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICB7aW1hZ2VFbGVtZW50fVxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICBpbWFnZUVsZW1lbnRcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VDb21wb25lbnQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEltYWdlLCBJbWFnZVByb3BzIH0gZnJvbSBcIi4vSW1hZ2VcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMYWJlbElucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MTGFiZWxFbGVtZW50PjtcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9XG4gICAgPlxuICAgICAge3ZhbHVlfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMYWJlbCB9IGZyb20gXCIuL0xhYmVsXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlldy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiB7IHRleHQ6IHN0cmluZzsgaWQ6IHN0cmluZyB9O1xuICBoZWFkZXJBY3Rpb25zPzogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXcoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaGVhZGVyQWN0aW9ucyxcbn06IExpc3RWaWV3UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7KGhlYWRlciB8fCBoZWFkZXJBY3Rpb25zKSAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT5cbiAgICAgICAgICB7aGVhZGVyICYmIChcbiAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJMYWJlbH0gaWQ9e2hlYWRlci5pZH0+XG4gICAgICAgICAgICAgIHtoZWFkZXIudGV4dH1cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aGVhZGVyQWN0aW9uc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPHVsIGFyaWEtbGFiZWxsZWRieT17aGVhZGVyPy5pZH0gY2xhc3NOYW1lPXtzdHlsZXMubGlzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXdJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogTGlzdFZpZXdJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uTGluayB9IGZyb20gXCIuLi9CdXR0b25MaW5rXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgTGlzdFZpZXdMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nOiBib29sZWFuO1xuICAgICAgYWxpZ246IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICAgIHNpemU6IFNpemU7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gTGlzdFZpZXdMaW5rSXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhczogQ29tcG9uZW50LFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBMaXN0Vmlld0xpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uTGlua1xuICAgICAgICBhcz17Q29tcG9uZW50fVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbkxpbms+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXcgfSBmcm9tIFwiLi9MaXN0Vmlld1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0l0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdMaW5rSXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIFJlZk9iamVjdCxcbiAgdXNlQ29udGV4dCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBQbGFjZW1lbnRDb250ZXh0IH0gZnJvbSBcIi4vTWVudUNvbnRhaW5lclwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNPcGVuPzogYm9vbGVhbjtcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBmb290ZXI/OiBSZWFjdE5vZGU7XG4gIHNtYXJ0TGF5b3V0PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIE1lbnUoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBjbGFzc05hbWUsXG4gIGlzT3BlbiA9IHRydWUsXG4gIGhlYWRlcixcbiAgZm9vdGVyLFxuICBzbWFydExheW91dCA9IHRydWUsXG59OiBNZW51UHJvcHMpIHtcbiAgY29uc3QgbWVudVBsYWNlbWVudCA9IHVzZUNvbnRleHQoUGxhY2VtZW50Q29udGV4dCk7XG4gIGNvbnN0IGlubmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlZiA9IGNvbnRhaW5lclJlZiB8fCBpbm5lclJlZjtcblxuICBpZiAoIW1lbnVQbGFjZW1lbnQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJNZW51IGNvbXBvbmVudCBtdXN0IGJlIHdyYXBwZWQgYnkgYSBNZW51Q29udGFpbmVyIGNvbXBvbmVudC5cIlxuICAgICk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc21hcnRMYXlvdXQgJiYgcmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHsgdG9wLCBib3R0b20gfSA9IHJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZGlzdGFuY2VUb0VkZ2UgPVxuICAgICAgICBtZW51UGxhY2VtZW50LnZlcnRpY2FsID09PSBcInRvcFwiID8gdG9wIDogd2luZG93LmlubmVySGVpZ2h0IC0gYm90dG9tO1xuXG4gICAgICBpZiAoZGlzdGFuY2VUb0VkZ2UgPCAwKSB7XG4gICAgICAgIGNvbnN0IHVsRWwgPSByZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKFwidWxcIik7XG4gICAgICAgIGNvbnN0IGNoaWxkRWxlbWVudHMgPSB1bEVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSxhXCIpO1xuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSB1bEVsLmNsaWVudEhlaWdodCArIGRpc3RhbmNlVG9FZGdlO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBjaGlsZEVsZW1lbnRzLmxlbmd0aFxuICAgICAgICAgID8gZ2V0Q29tcHV0ZWRTdHlsZShjaGlsZEVsZW1lbnRzWzBdKS5taW5IZWlnaHRcbiAgICAgICAgICA6IDA7XG4gICAgICAgIHVsRWwuc3R5bGUubWF4SGVpZ2h0ID0gYGNhbGMoJHtuZXdIZWlnaHR9cHggLSAke29mZnNldH0pYDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc09wZW4sIG1lbnVQbGFjZW1lbnQsIHNtYXJ0TGF5b3V0XSk7XG5cbiAgaWYgKCFpc09wZW4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy5tZW51LFxuICAgICAgICAgIHsgW3N0eWxlcy5vcGVuXTogaXNPcGVuIH0sXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7aGVhZGVyICYmIGlzT3BlbiAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT57aGVhZGVyfTwvaDM+fVxuICAgICAgICAgIDx1bD57Y2hpbGRyZW59PC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtmb290ZXIgJiYgaXNPcGVuICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgc3R5bGVzLmZvb3RlcixcbiAgICAgICAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogIWNoaWxkcmVuIH0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Zm9vdGVyfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnU7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgUGxhY2VtZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8XG4gIE1lbnVDb250YWluZXJQcm9wc1tcInBsYWNlbWVudFwiXSB8IHVuZGVmaW5lZFxuPih1bmRlZmluZWQpO1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cbiAgICAgIDxQbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1c2VNZW1vKCgpID0+IHBsYWNlbWVudCwgW3BsYWNlbWVudF0pfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1lbnVDb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC52ZXJ0aWNhbF0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9QbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3J3YXJkUmVmKE1lbnVDb250YWluZXIpO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudUl0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MTElFbGVtZW50PikgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE1lbnVJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGlzQWN0aXZlID0gZmFsc2UsXG59OiBNZW51SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVJdGVtLFxuICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUgfSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51TGlua0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBhczogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIE1lbnVMaW5rSXRlbSh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICAuLi5wcm9wc1xufTogTWVudUxpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgZGF0YS10ZXN0aWQ9XCJtZW51LWxpbmstaXRlbVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVMaW5rSXRlbSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudSB9IGZyb20gXCIuL01lbnVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUNvbnRhaW5lciwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUl0ZW0gfSBmcm9tIFwiLi9NZW51SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51TGlua0l0ZW0gfSBmcm9tIFwiLi9NZW51TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUhvdGtleXMgfSBmcm9tIFwicmVhY3QtaG90a2V5cy1ob29rXCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1vZGFsUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJ1dHRvbj86IFJlYWN0Tm9kZTtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBNb2RhbCh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGlzT3BlbixcbiAgYnV0dG9uLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBiYXNlWkluZGV4ID0gMTAwOSxcbn06IE1vZGFsUHJvcHMpIHtcbiAgdXNlSG90a2V5cyhcIkVzY2FwZVwiLCBvbkNsb3NlKTtcblxuICBjb25zdCBoYW5kbGVPdmVybGF5Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25DbG9zZSgpO1xuICB9LCBbb25DbG9zZV0pO1xuXG4gIHJldHVybiAoXG4gICAgaXNPcGVuICYmIChcbiAgICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub092ZXJsYXldOiBub092ZXJsYXkgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLW92ZXJsYXlcIlxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU92ZXJsYXlDbGlja31cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDEgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2J1dHRvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b259XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2J1dHRvbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vTnVtcGFkLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGJhY2tzcGFjZUljb24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnXCI7XG5cbnR5cGUgRGlnaXQgPSAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IDggfCA5O1xuXG5jb25zdCBhcHBlbmREaWdpdCA9IChudW1iZXI6IG51bWJlciwgZGlnaXQ6IERpZ2l0KSA9PiB7XG4gIHJldHVybiBudW1iZXIgKiAxMCArIGRpZ2l0O1xufTtcblxuY29uc3QgcG9wRGlnaXQgPSAobnVtYmVyOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyIC8gMTApO1xufTtcblxuY29uc3QgZXZlbnREaWdpdEtleXMgPSBbXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE51bXBhZFByb3BzIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25DaGFuZ2U6IChuZXdOdW1iZXI6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE51bXBhZCA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTERpdkVsZW1lbnQsIE51bXBhZFByb3BzPihcbiAgKHsgbnVtYmVyLCBvbkNoYW5nZSwgZGlzYWJsZWQgPSBmYWxzZSB9LCByZWYpID0+IHsgICAgXG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSBcIkJhY2tzcGFjZVwiKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UocG9wRGlnaXQobnVtYmVyKSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50RGlnaXRLZXlzLmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGRpZ2l0ID0gcGFyc2VJbnQoZS5rZXksIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgb25DaGFuZ2UoYXBwZW5kRGlnaXQobnVtYmVyLCBkaWdpdCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVFbWl0TnVtYmVySGFuZGxlciA9IChuZXdOdW1iZXI6IG51bWJlcikgPT5cbiAgICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UobmV3TnVtYmVyKTtcbiAgICAgIH07XG5cbiAgICBjb25zdCBOdW1wYWRLZXlzID0gQXJyYXkoMTApXG4gICAgICAuZmlsbCgwKVxuICAgICAgLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbnVtcGFkVmFsdWUgPSAoKGluZGV4ICsgMSkgJSAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIoYXBwZW5kRGlnaXQobnVtYmVyLCBudW1wYWRWYWx1ZSkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtudW1wYWRWYWx1ZX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtcGFkfSByZWY9e3JlZn0gdGFiSW5kZXg9ey0xfSBvbktleURvd249e2hhbmRsZUtleURvd259IGRhdGEtdGVzdGlkPVwibnVtcGFkXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtYmVyc30+XG4gICAgICAgICAge051bXBhZEtleXN9XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIocG9wRGlnaXQobnVtYmVyKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gYWx0PVwiQmFja3NwYWNlXCIgc3JjPXtiYWNrc3BhY2VJY29ufSAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbik7XG4iLCJleHBvcnQgeyBOdW1wYWQgfSBmcm9tIFwiLi9OdW1wYWRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PdmVybGF5Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBPdmVybGF5UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgaXNGaXhlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gT3ZlcmxheSh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIGlzRml4ZWQgPSBmYWxzZSxcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogT3ZlcmxheVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cIm92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBpc0ZpeGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3ZlcmxheTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3ZlcmxheSB9IGZyb20gXCIuL092ZXJsYXlcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0dyb3VwT3B0aW9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IHsgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSBcIi4uL09wdGlvblwiO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gXCIuLi8uLi9JY29uQnV0dG9uXCI7XG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT47XG59O1xuXG5mdW5jdGlvbiBHcm91cE9wdGlvbih7IGNsYXNzTmFtZSwgbGFiZWwsIG9wdGlvbnMgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBzaG93RXhwYW5kZWRHcm91cCB9ID0gdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcbiAgY29uc3QgW2V4cGFuZGVkLCB0b2dnbGVFeHBhbmRdID0gdXNlVG9nZ2xlKHNob3dFeHBhbmRlZEdyb3VwKTtcblxuICBjb25zdCBoYW5kbGVHcm91cENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZUV4cGFuZCgpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfSBvbkNsaWNrPXtoYW5kbGVHcm91cENsaWNrfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sYWJlbH0+e2xhYmVsfTwvZGl2PlxuICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgeyBbc3R5bGVzLmV4cGFuZGVkXTogZXhwYW5kZWQgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzcmM9e2ljb25DYXJldERvd259XG4gICAgICAgICAgYWx0PXtleHBhbmRlZCA/IFwiQ29sbGFwc2VcIiA6IFwiRXhwYW5kXCJ9XG4gICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7ZXhwYW5kZWQgJiZcbiAgICAgICAgb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgIDxPcHRpb24ga2V5PXtvcHRpb24udmFsdWV9IGRhdGE9e29wdGlvbn0+XG4gICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgIDwvT3B0aW9uPlxuICAgICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgR3JvdXBPcHRpb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEdyb3VwT3B0aW9uIH0gZnJvbSBcIi4vR3JvdXBPcHRpb25cIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlQ29udGV4dCxcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3B0aW9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIi4uLy4uL0NoZWNrYm94XCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcbmltcG9ydCB7IE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkYXRhOiBPcHRpb25UeXBlO1xufTtcblxuZnVuY3Rpb24gT3B0aW9uKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSwgZGF0YSB9OiBQcm9wcykge1xuICBjb25zdCB7IG11bHRpcGxlLCBzZWxlY3RlZE9wdGlvbnMsIHVwZGF0ZVNlbGVjdGVkT3B0aW9uIH0gPVxuICAgIHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaXNDaGVja2VkID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZE9wdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKS5pbmNsdWRlcyhkYXRhLnZhbHVlKSxcbiAgICBbZGF0YSwgc2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKGRhdGEpO1xuICB9LCBbZGF0YSwgc2VsZWN0ZWRPcHRpb25zXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgeyBbc3R5bGVzLnNlbGVjdGVkXTogaXNDaGVja2VkICYmICFtdWx0aXBsZSB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgID5cbiAgICAgIHttdWx0aXBsZSAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94Q29udGFpbmVyfT5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94fVxuICAgICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9PntjaGlsZHJlbn08L3NwYW4+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wdGlvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uXCI7XG4iLCJpbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEdyb3VwT3B0aW9uVHlwZSwgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tIFwiLi4vLi4vQ2hlY2tib3hcIjtcbmltcG9ydCB7IEdyb3VwT3B0aW9uIH0gZnJvbSBcIi4uL0dyb3VwT3B0aW9uXCI7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tIFwiLi4vT3B0aW9uXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PcHRpb25MaXN0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZT47XG4gIG9uRmlsdGVyPzogKG9wdGlvbjogT3B0aW9uVHlwZSwgc2VhcmNoS2V5d29yZDogc3RyaW5nKSA9PiBib29sZWFuO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG59O1xuXG4vLyBzZWUgZG9jcyB0byB1bmRlcnN0YW5kIG5lZWQgb2YgdGhlIGZ1bmN0aW9uIGJlbG93IGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvbmFycm93aW5nLmh0bWwjdXNpbmctdHlwZS1wcmVkaWNhdGVzXG5leHBvcnQgY29uc3QgaXNPcHRpb24gPSAoXG4gIG9wdGlvbjogT3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZVxuKTogb3B0aW9uIGlzIE9wdGlvblR5cGUgPT4ge1xuICByZXR1cm4gKG9wdGlvbiBhcyBPcHRpb25UeXBlKS52YWx1ZSAhPT0gdW5kZWZpbmVkO1xufTtcblxuZnVuY3Rpb24gT3B0aW9uTGlzdCh7IG9wdGlvbnMsIG9uRmlsdGVyLCBvbkNoYW5nZSB9OiBQcm9wcykge1xuICBjb25zdCBbc2VsZWN0QWxsQ2hlY2tlZCwgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuICBjb25zdCB7XG4gICAgbXVsdGlwbGUsXG4gICAgc2VhcmNoS2V5d29yZCxcbiAgICBzZWxlY3RBbGwsXG4gICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFzR3JvdXBPcHRpb24gPSBvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gIWlzT3B0aW9uKG9wdGlvbikpO1xuXG4gIGNvbnN0IGZpbHRlck9wdGlvbnMgPSAob3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT4pID0+IHtcbiAgICBjb25zdCBrZXl3b3JkID0gc2VhcmNoS2V5d29yZC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgIHJldHVybiBrZXl3b3JkLmxlbmd0aFxuICAgICAgPyBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgIG9uRmlsdGVyXG4gICAgICAgICAgICA/IG9uRmlsdGVyKG9wdGlvbiwga2V5d29yZClcbiAgICAgICAgICAgIDogb3B0aW9uLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5d29yZClcbiAgICAgICAgKVxuICAgICAgOiBvcHRpb25zO1xuICB9O1xuXG4gIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHVzZU1lbW88QXJyYXk8R3JvdXBPcHRpb25UeXBlIHwgT3B0aW9uVHlwZT4+KCgpID0+IHtcbiAgICBpZiAoaGFzR3JvdXBPcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgKGZpbHRlcmVkOiBBcnJheTxHcm91cE9wdGlvblR5cGU+LCBncm91cE9wdGlvbjogR3JvdXBPcHRpb25UeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9wdGlvbnMgPSBmaWx0ZXJPcHRpb25zKGdyb3VwT3B0aW9uLm9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKGZpbHRlcmVkR3JvdXBPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgLi4uZmlsdGVyZWQsXG4gICAgICAgICAgICAgIHsgLi4uZ3JvdXBPcHRpb24sIG9wdGlvbnM6IGZpbHRlcmVkR3JvdXBPcHRpb25zIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXJPcHRpb25zKG9wdGlvbnMgYXMgQXJyYXk8T3B0aW9uVHlwZT4pO1xuICAgIH1cbiAgfSwgW2hhc0dyb3VwT3B0aW9uLCBvcHRpb25zLCBzZWFyY2hLZXl3b3JkXSk7XG5cbiAgY29uc3QgZmlsdGVyZWRPcHRpb25zQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zLnJlZHVjZSgobGVuZ3RoOiBudW1iZXIsIG5leHRPcHRpb24pID0+IHtcbiAgICAgIGlmIChpc09wdGlvbihuZXh0T3B0aW9uKSkge1xuICAgICAgICByZXR1cm4gbGVuZ3RoICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsZW5ndGggKyBuZXh0T3B0aW9uLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9LCBbaGFzR3JvdXBPcHRpb24sIGZpbHRlcmVkT3B0aW9ucywgaXNPcHRpb25dKTtcblxuICBjb25zdCBzZWxlY3RlZE9wdGlvbnNDb3VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKChzZWxlY3RlZE9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucy5maW5kKChmaWx0ZXJlZE9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gaXNPcHRpb24oZmlsdGVyZWRPcHRpb24pXG4gICAgICAgICAgPyBmaWx0ZXJlZE9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb24udmFsdWVcbiAgICAgICAgICA6IGZpbHRlcmVkT3B0aW9uLm9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pLmxlbmd0aDtcbiAgfSwgW3NlbGVjdGVkT3B0aW9ucywgZmlsdGVyZWRPcHRpb25zXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0QWxsQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICBjb25zdCBvcHRpb25zVG9TZWxlY3QgPSBmaWx0ZXJlZE9wdGlvbnNcbiAgICAgICAgLm1hcCgoZmlsdGVyZWRPcHRpb24pID0+XG4gICAgICAgICAgaXNPcHRpb24oZmlsdGVyZWRPcHRpb24pID8gZmlsdGVyZWRPcHRpb24gOiBmaWx0ZXJlZE9wdGlvbi5vcHRpb25zXG4gICAgICAgIClcbiAgICAgICAgLmZsYXQoKTtcblxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKG9wdGlvbnNUb1NlbGVjdCk7XG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShvcHRpb25zVG9TZWxlY3QubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhbXSk7XG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShbXSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCgpO1xuICB9LCBbXG4gICAgZmlsdGVyZWRPcHRpb25zLFxuICAgIGlzT3B0aW9uLFxuICAgIHNlbGVjdEFsbENoZWNrZWQsXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQsXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uc0NvdW50ID09PSBmaWx0ZXJlZE9wdGlvbnNDb3VudCkge1xuICAgICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdEFsbENoZWNrZWQpIHtcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQoZmFsc2UpO1xuICAgIH1cbiAgfSwgW1xuICAgIHNlbGVjdGVkT3B0aW9uc0NvdW50LFxuICAgIGZpbHRlcmVkT3B0aW9uc0NvdW50LFxuICAgIHNlbGVjdEFsbENoZWNrZWQsXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCxcbiAgXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICB7c2VsZWN0QWxsICYmIG11bHRpcGxlICYmICEhZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RBbGxDb250YWluZXJ9XG4gICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0QWxsQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3h9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdEFsbENoZWNrZWR9XG4gICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9e1xuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRPcHRpb25zQ291bnQgJiZcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnNDb3VudCAhPT0gZmlsdGVyZWRPcHRpb25zQ291bnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9PlNlbGVjdCBBbGw8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHshIWZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgICAgIGZpbHRlcmVkT3B0aW9ucy5tYXAoKG9wdGlvbikgPT5cbiAgICAgICAgICBpc09wdGlvbihvcHRpb24pID8gKFxuICAgICAgICAgICAgPE9wdGlvbiBrZXk9e29wdGlvbi52YWx1ZX0gZGF0YT17b3B0aW9ufT5cbiAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgIDwvT3B0aW9uPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8R3JvdXBPcHRpb25cbiAgICAgICAgICAgICAga2V5PXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIGxhYmVsPXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbi5vcHRpb25zfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubm9PcHRpb25zfT5cbiAgICAgICAgICBObyBtYXRjaGVzIGZvclxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNlYXJjaEtleXdvcmR9PntgICR7c2VhcmNoS2V5d29yZH1gfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPcHRpb25MaXN0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPcHRpb25MaXN0LCBpc09wdGlvbiB9IGZyb20gXCIuL09wdGlvbkxpc3RcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlYXJjaC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gXCIuLi8uLi9UZXh0SW5wdXRcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vLi4vSWNvblwiO1xuaW1wb3J0IGljb25TZWFyY2ggZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9zZWFyY2guc3ZnXCI7XG5pbXBvcnQgaWNvbkNyb3NzZWQgZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9jcm9zc2VkLnN2Z1wiO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gXCIuLi8uLi9JY29uQnV0dG9uXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFNlYXJjaCh7IGNsYXNzTmFtZSB9OiBQcm9wcykge1xuICBjb25zdCB7IHNlYXJjaEtleXdvcmQsIHNldFNlYXJjaEtleXdvcmQgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoS2V5d29yZENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRTZWFyY2hLZXl3b3JkKHZhbHVlKTtcbiAgICB9LFxuICAgIFtzZWFyY2hLZXl3b3JkXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaEtleXdvcmRSZXNldENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlYXJjaEtleXdvcmQoXCJcIik7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uU2VhcmNoQ29udGFpbmVyfT5cbiAgICAgICAgPEljb24gc3JjPXtpY29uU2VhcmNofSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8VGV4dElucHV0XG4gICAgICAgIHZhbHVlPXtzZWFyY2hLZXl3b3JkfVxuICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgdG8gc2VhcmNoLi4uXCJcbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2V9XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAvPlxuICAgICAgPEljb25CdXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucmVzZXRCdXR0b259XG4gICAgICAgIHNyYz17aWNvbkNyb3NzZWR9XG4gICAgICAgIGFsdD1cIkNsZWFyXCJcbiAgICAgICAgb25DbGljaz17aGFuZGxlU2VhcmNoS2V5d29yZFJlc2V0Q2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXshc2VhcmNoS2V5d29yZH1cbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlYXJjaDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBpY29uQ2FyZXREb3duIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvc2VsZWN0LWNhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljaywgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0UHJvdmlkZXIgfSBmcm9tIFwiLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gXCIuL1NlbGVjdG9yXCI7XG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tIFwiLi9TZWFyY2hcIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vSWNvbkJ1dHRvblwiO1xuaW1wb3J0IHsgT3B0aW9uTGlzdCB9IGZyb20gXCIuL09wdGlvbkxpc3RcIjtcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5cbnR5cGUgU2VsZWN0UHJvcHMgPSB7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dTZWxlY3RlZEFzVGFncz86IGJvb2xlYW47XG4gIHNob3dTZWFyY2g/OiBib29sZWFuO1xuICBzaG93RXhwYW5kZWRHcm91cD86IGJvb2xlYW47XG4gIHNjcm9sbE1lbnVJbnRvVmlldz86IGJvb2xlYW47XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICB3aWR0aDogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG4gIG9uRmlsdGVyPzogKG9wdGlvbjogT3B0aW9uVHlwZSwgc2VhcmNoS2V5d29yZDogc3RyaW5nKSA9PiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gU2VsZWN0KHtcbiAgY2xhc3NOYW1lLFxuICBkZWZhdWx0VmFsdWUsXG4gIGRpc2FibGVkLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBvcHRpb25zLFxuICBwbGFjZWhvbGRlcixcbiAgbGFiZWwsXG4gIHNlbGVjdEFsbCxcbiAgc2hvd0V4cGFuZGVkR3JvdXAsXG4gIHNjcm9sbE1lbnVJbnRvVmlldyA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgc2hvd1NlbGVjdGVkQXNUYWdzID0gZmFsc2UsXG4gIHNob3dTZWFyY2ggPSBmYWxzZSxcbiAgd2lkdGgsXG4gIG9uQ2hhbmdlLFxuICBvbkZpbHRlcixcbn06IFNlbGVjdFByb3BzKSB7XG4gIGNvbnN0IFtvcGVuZWQsIHRvZ2dsZU9wZW5lZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuXG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiB0b2dnbGVPcGVuZWQoZmFsc2UpKTtcbiAgY29uc3QgY29udGVudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcblxuICBjb25zdCBvblJlc2l6ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWNvbnRlbnRSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb250ZW50UmVmLmN1cnJlbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogXCJzbW9vdGhcIiwgYmxvY2s6IFwibmVhcmVzdFwiIH0pO1xuICB9LCBbXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNvbnRlbnRSZWYuY3VycmVudCB8fCAhb3BlbmVkIHx8ICFzY3JvbGxNZW51SW50b1ZpZXcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgUk8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIob25SZXNpemUpO1xuICAgIFJPLm9ic2VydmUoY29udGVudFJlZi5jdXJyZW50KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBSTy5kaXNjb25uZWN0KCk7XG4gICAgICBSTyA9IG51bGw7XG4gICAgfTtcbiAgfSwgW29wZW5lZCwgc2Nyb2xsTWVudUludG9WaWV3LCBvblJlc2l6ZV0pO1xuXG4gIGNvbnN0IGhhbmRsZU9wZW5TZWxlY3QgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlT3BlbmVkKCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB7XG4gICAgICBpZiAoIW11bHRpcGxlKSB0b2dnbGVPcGVuZWQoZmFsc2UpO1xuXG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZSh2YWx1ZXMpO1xuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdENvbnRleHRQcm92aWRlclxuICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIHNlbGVjdEFsbD17c2VsZWN0QWxsfVxuICAgICAgc2hvd0V4cGFuZGVkR3JvdXA9e3Nob3dFeHBhbmRlZEdyb3VwfVxuICAgID5cbiAgICAgIDxkaXYgcmVmPXtyZWZ9PlxuICAgICAgICB7bGFiZWwgPyA8TGFiZWwgdmFsdWU9e2xhYmVsfSAvPiA6IG51bGx9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgc3R5bGU9e3sgd2lkdGggfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5oZWFkZXIsIHsgW3N0eWxlcy5hY3RpdmVdOiBvcGVuZWQgfV0pfVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlT3BlblNlbGVjdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U2VsZWN0b3JcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICBzaG93U2VsZWN0ZWRBc1RhZ3M9e3Nob3dTZWxlY3RlZEFzVGFnc31cbiAgICAgICAgICAgICAgaXNEcm9wZG93bk9wZW5lZD17b3BlbmVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICAgIHN0eWxlcy5pY29uQnV0dG9uLFxuICAgICAgICAgICAgICAgIHsgW3N0eWxlcy5leHBhbmRlZF06IG9wZW5lZCB9LFxuICAgICAgICAgICAgICBdKX1cbiAgICAgICAgICAgICAgc3JjPXtpY29uQ2FyZXREb3dufVxuICAgICAgICAgICAgICBhbHQ9e29wZW5lZCA/IFwiQ29sbGFwc2VcIiA6IFwiRXhwYW5kXCJ9XG4gICAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtvcGVuZWQgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fSByZWY9e2NvbnRlbnRSZWZ9PlxuICAgICAgICAgICAgICB7b3B0aW9ucy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ub09wdGlvbnN9Pk5vIG9wdGlvbnMgYXZhaWxhYmxlPC9kaXY+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtzaG93U2VhcmNoICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5zZWFyY2hDb250YWluZXJ9PlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWFyY2ggLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPE9wdGlvbkxpc3RcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgb25GaWx0ZXI9e29uRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9TZWxlY3RDb250ZXh0UHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDtcbiIsImltcG9ydCBSZWFjdCwge1xuICBjcmVhdGVDb250ZXh0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHVzZUVmZmVjdCxcbiAgdXNlUmVmLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEdyb3VwT3B0aW9uVHlwZSwgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgaXNPcHRpb24gfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGRlZmF1bHRWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlPjtcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xufTtcblxudHlwZSBTZWxlY3RDb250ZXh0U3RhdGUgPSB7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBzZWxlY3RlZE9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+O1xuICB1cGRhdGVTZWxlY3RlZE9wdGlvbjogKG9wdGlvbjogT3B0aW9uVHlwZSkgPT4gdm9pZDtcbiAgc2VhcmNoS2V5d29yZDogc3RyaW5nO1xuICBzZXRTZWFyY2hLZXl3b3JkOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgc2V0U2VsZWN0ZWRPcHRpb25zOiAodmFsdWVzOiBPcHRpb25UeXBlW10pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBpbml0aWFsU3RhdGU6IFNlbGVjdENvbnRleHRTdGF0ZSA9IHtcbiAgbXVsdGlwbGU6IGZhbHNlLFxuICBzZWxlY3RBbGw6IGZhbHNlLFxuICBzaG93RXhwYW5kZWRHcm91cDogdHJ1ZSxcbiAgc2VsZWN0ZWRPcHRpb25zOiBbXSxcbiAgdXBkYXRlU2VsZWN0ZWRPcHRpb246ICh2YWx1ZTogT3B0aW9uVHlwZSkgPT4ge30sXG4gIHNlYXJjaEtleXdvcmQ6IFwiXCIsXG4gIHNldFNlYXJjaEtleXdvcmQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB7fSxcbiAgc2V0U2VsZWN0ZWRPcHRpb25zOiAodmFsdWVzOiBPcHRpb25UeXBlW10pID0+IHt9LFxufTtcblxuY29uc3QgU2VsZWN0Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8U2VsZWN0Q29udGV4dFN0YXRlPihpbml0aWFsU3RhdGUpO1xuXG5jb25zdCBTZWxlY3RDb250ZXh0UHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgZGVmYXVsdFZhbHVlLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBzZWxlY3RBbGwgPSBmYWxzZSxcbiAgc2hvd0V4cGFuZGVkR3JvdXAgPSB0cnVlLFxuICBvcHRpb25zLFxuICBvbkNoYW5nZSxcbn06IFByb3BzKSA9PiB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxPcHRpb25UeXBlW10+KFxuICAgIGluaXRpYWxTdGF0ZS5zZWxlY3RlZE9wdGlvbnNcbiAgKTtcbiAgY29uc3QgW3NlYXJjaEtleXdvcmQsIHNldFNlYXJjaEtleXdvcmRdID0gdXNlU3RhdGUoXG4gICAgaW5pdGlhbFN0YXRlLnNlYXJjaEtleXdvcmRcbiAgKTtcblxuICBjb25zdCB1cGRhdGVTZWxlY3RlZE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IE9wdGlvblR5cGUpID0+IHtcbiAgICAgIGxldCB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zO1xuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBzZWxlY3RlZE9wdGlvbnMuc29tZShcbiAgICAgICAgICAoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlXG4gICAgICAgIClcbiAgICAgICAgICA/IHNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gdmFsdWUgIT09IG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICA6IFsuLi5zZWxlY3RlZE9wdGlvbnMsIG9wdGlvbl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gW29wdGlvbl07XG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnModXBkYXRlZFNlbGVjdGVkT3B0aW9ucyk7XG5cbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSk7XG4gICAgfSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnMsIG9uQ2hhbmdlXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKVxuICAgICAgICA/IGRlZmF1bHRWYWx1ZVxuICAgICAgICA6IFtkZWZhdWx0VmFsdWVdO1xuXG4gICAgICBsZXQgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGFsbE9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZSgoYWxsLCBpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGlzT3B0aW9uKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgaXRlbV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWxsLCAuLi5pdGVtLm9wdGlvbnNdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBhbGxPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgIGRlZmF1bHRWYWx1ZXMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMpO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRWYWx1ZSwgb3B0aW9uc10pO1xuXG4gIGNvbnN0IGNvbnRleHRWYWx1ZTogU2VsZWN0Q29udGV4dFN0YXRlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgbXVsdGlwbGUsXG4gICAgICBzZWxlY3RBbGwsXG4gICAgICBzaG93RXhwYW5kZWRHcm91cCxcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uLFxuICAgICAgc2VhcmNoS2V5d29yZCxcbiAgICAgIHNldFNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gICAgfSksXG4gICAgW1xuICAgICAgc2VsZWN0QWxsLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24sXG4gICAgICBzZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VhcmNoS2V5d29yZCxcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NlbGVjdENvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgeyBTZWxlY3RDb250ZXh0LCBTZWxlY3RDb250ZXh0UHJvdmlkZXIgfTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlbGVjdG9yLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSBcIi4uLy4uL1RhZ1wiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBzaG93U2VsZWN0ZWRBc1RhZ3M6IGJvb2xlYW47XG4gIGlzRHJvcGRvd25PcGVuZWQ6IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBTZWxlY3Rvcih7XG4gIHBsYWNlaG9sZGVyLFxuICBzaG93U2VsZWN0ZWRBc1RhZ3MsXG4gIGlzRHJvcGRvd25PcGVuZWQsXG59OiBQcm9wcykge1xuICBjb25zdCB7IHNlbGVjdGVkT3B0aW9ucywgbXVsdGlwbGUsIHVwZGF0ZVNlbGVjdGVkT3B0aW9uIH0gPVxuICAgIHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFuZGxlVGFnQ2xpY2sgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0Nsb3NlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHNlbGVjdGVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpO1xuXG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9LFxuICAgIFtzZWxlY3RlZE9wdGlvbnNdXG4gICk7XG5cbiAgY29uc3QgcGxhY2Vob2xkZXJUb1Nob3cgPSB1c2VNZW1vKFxuICAgICgpID0+IChcbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNEcm9wZG93bk9wZW5lZCB9LFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAge3BsYWNlaG9sZGVyfVxuICAgICAgPC9zcGFuPlxuICAgICksXG4gICAgW3BsYWNlaG9sZGVyLCBpc0Ryb3Bkb3duT3BlbmVkXVxuICApO1xuXG4gIGNvbnN0IHNob3dBc1RhZ3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICAgICAgcGxhY2Vob2xkZXJUb1Nob3dcbiAgICAgICkgOiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3NlbGVjdGVkT3B0aW9ucy5tYXAoKHsgbGFiZWwsIHZhbHVlIH0pID0+IChcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGtleT17dmFsdWV9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRhZ1dyYXBwZXJ9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRhZ0NsaWNrfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8VGFnIGtleT17dmFsdWV9IHZhbHVlPXt2YWx1ZX0gY2xvc2FibGUgb25DbG9zZT17aGFuZGxlVGFnQ2xvc2V9PlxuICAgICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgICAgPC9UYWc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvPlxuICAgICAgKSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zLCBwbGFjZWhvbGRlclRvU2hvd11cbiAgKTtcblxuICBjb25zdCBzaG93QXNUZXh0ID0gc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICA8c3BhblxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2VsZWN0ZWRPcHRpb25zfVxuICAgID57YCR7cGxhY2Vob2xkZXJ9ICgke3NlbGVjdGVkT3B0aW9ucy5sZW5ndGh9KWB9PC9zcGFuPlxuICApIDogKFxuICAgIHBsYWNlaG9sZGVyVG9TaG93XG4gICk7XG5cbiAgbGV0IGNvbnRlbnQ7XG4gIGlmIChtdWx0aXBsZSkge1xuICAgIGNvbnRlbnQgPSBzaG93U2VsZWN0ZWRBc1RhZ3MgPyBzaG93QXNUYWdzIDogc2hvd0FzVGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50ID0gIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgICBwbGFjZWhvbGRlclRvU2hvd1xuICAgICkgOiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RlZE9wdGlvbn0+e3NlbGVjdGVkT3B0aW9uc1swXS5sYWJlbH08L3NwYW4+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZW50O1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RvcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWxlY3QgfSBmcm9tIFwiLi9TZWxlY3RcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QsIExpc3RPblNjcm9sbFByb3BzIH0gZnJvbSBcInJlYWN0LXdpbmRvd1wiO1xuaW1wb3J0IEluZmluaXRlTG9hZGVyIGZyb20gXCJyZWFjdC13aW5kb3ctaW5maW5pdGUtbG9hZGVyXCI7XG5cbmltcG9ydCBUYWJsZUhlYWRlciBmcm9tIFwiLi9UYWJsZUhlYWRlclwiO1xuaW1wb3J0IFRhYmxlUm93IGZyb20gXCIuL1RhYmxlUm93XCI7XG5pbXBvcnQgeyBTb3J0T3JkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdGFibGVcIjtcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlLm1vZHVsZS5jc3NcIjtcblxuXG5cblxuZXhwb3J0IHR5cGUgQ29sdW1uVHlwZSA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlOiBKU1guRWxlbWVudCB8IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkYXRhSW5kZXg6IHN0cmluZztcbiAgcmVuZGVyPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmcpID0+IEpTWC5FbGVtZW50O1xuICB3aWR0aD86IHN0cmluZztcbiAgZGVmYXVsdFNvcnRPcmRlcj86IFNvcnRPcmRlcjtcbiAgc29ydGVkPzogYm9vbGVhbjtcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBvblNvcnQ/OiAoc29ydE9yZGVyOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIGRhdGFTb3VyY2U6IFJlY29yZDxzdHJpbmcsIGFueT5bXTtcbiAgdGFibGVIZWlnaHQ6IG51bWJlcjtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIG9uTG9hZE1vcmU/OiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBwYWdlPzogbnVtYmVyO1xuICBzZXRQYWdlPzogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIHBsYWNlaG9sZGVyPzogUmVhY3QuUmVhY3RFbGVtZW50O1xuICByb3dIZWlnaHQ/OiBudW1iZXI7XG4gIGhlYWRlckhlaWdodD86IG51bWJlcjtcbiAgZGlzYWJsZUxhenlMb2FkZXI/OiBib29sZWFuO1xuICBhY3RpdmVSb3dzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaXRlbXNDb3VudD86IG51bWJlcjtcbiAgaXNIZWFkZXJTdGlja3k/OiBib29sZWFuO1xuICBoYXNWaXJ0dWFsU2Nyb2xsPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVGFibGUoe1xuICBjb2x1bW5zLFxuICBkYXRhU291cmNlLFxuICBvblJvd0NsaWNrLFxuICBoYXNBcnJvdyxcbiAgb25Mb2FkTW9yZSxcbiAgcGFnZSxcbiAgc2V0UGFnZSxcbiAgcGFnZVNpemUgPSBUYWJsZUNvbmZpZy5QQUdFX1NJWkUsXG4gIHRhYmxlSGVpZ2h0LFxuICBwbGFjZWhvbGRlcixcbiAgcm93SGVpZ2h0ID0gVGFibGVDb25maWcuUk9XX0hFSUdIVCxcbiAgaGVhZGVySGVpZ2h0ID0gVGFibGVDb25maWcuSEVBREVSX0hFSUdIVCxcbiAgZGlzYWJsZUxhenlMb2FkZXIsXG4gIGFjdGl2ZVJvd3MsXG4gIGl0ZW1zQ291bnQsXG4gIGlzSGVhZGVyU3RpY2t5ID0gZmFsc2UsXG4gIGhhc1ZpcnR1YWxTY3JvbGwgPSB0cnVlLFxuICBjbGFzc05hbWUsXG59OiBQcm9wcykge1xuICBjb25zdCBbc2Nyb2xsVG9wLCBzZXRTY3JvbGxUb3BdID0gdXNlU3RhdGUoMCk7XG5cbiAgY29uc3QgcmVuZGVyUm93ID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgZGF0YSwgaW5kZXgsIHN0eWxlIH06IHsgZGF0YTogYW55OyBpbmRleDogbnVtYmVyOyBzdHlsZTogYW55IH0pID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFbaW5kZXhdO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5zdHlsZSwgdG9wOiBzdHlsZS50b3AgfX0+XG4gICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICBkYXRhPXtyb3d9XG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgIGhhc0Fycm93PXtoYXNBcnJvd31cbiAgICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdy5pZF19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0sXG4gICAgW2NvbHVtbnMsIGFjdGl2ZVJvd3MsIGhhc0Fycm93LCByb3dIZWlnaHQsIG9uUm93Q2xpY2tdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTGlzdFNjcm9sbCA9IHVzZUNhbGxiYWNrKFxuICAgICh7IHNjcm9sbE9mZnNldCB9OiBMaXN0T25TY3JvbGxQcm9wcykgPT4ge1xuICAgICAgc2V0U2Nyb2xsVG9wKHNjcm9sbE9mZnNldCk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGxvYWRNb3JlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA9PT0gaXRlbXNDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA8IHBhZ2VTaXplICogcGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXRQYWdlICYmIG9uTG9hZE1vcmUpIHtcbiAgICAgIHNldFBhZ2UocGFnZSArIDEpO1xuICAgICAgb25Mb2FkTW9yZShwYWdlICsgMSk7XG4gICAgfVxuICB9LCBbXG4gICAgZGlzYWJsZUxhenlMb2FkZXIsXG4gICAgZGF0YVNvdXJjZS5sZW5ndGgsXG4gICAgaXRlbXNDb3VudCxcbiAgICBwYWdlU2l6ZSxcbiAgICBwYWdlLFxuICAgIHNldFBhZ2UsXG4gICAgb25Mb2FkTW9yZSxcbiAgXSk7XG5cbiAgY29uc3QgaXNJdGVtTG9hZGVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleCA8IGRhdGFTb3VyY2UubGVuZ3RoIC0gVGFibGVDb25maWcuSVRFTVNfTE9BREVEO1xuICAgIH0sXG4gICAgW2RhdGFTb3VyY2UubGVuZ3RoLCBkaXNhYmxlTGF6eUxvYWRlcl1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aGFzVmlydHVhbFNjcm9sbCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50YWJsZX0+XG4gICAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgc2Nyb2xsVG9wPXtzY3JvbGxUb3B9XG4gICAgICAgICAgICAgIGhlYWRlckhlaWdodD17aGVhZGVySGVpZ2h0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHshIXBsYWNlaG9sZGVyICYmICFkYXRhU291cmNlLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnBsYWNlaG9sZGVyQ29udGFpbmVyfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8SW5maW5pdGVMb2FkZXJcbiAgICAgICAgICAgICAgICBpc0l0ZW1Mb2FkZWQ9e2lzSXRlbUxvYWRlZH1cbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgIGxvYWRNb3JlSXRlbXM9e2xvYWRNb3JlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyh7IG9uSXRlbXNSZW5kZXJlZCwgcmVmIH0pID0+IChcbiAgICAgICAgICAgICAgICAgIDxGaXhlZFNpemVMaXN0XG4gICAgICAgICAgICAgICAgICAgIHJlZj17cmVmfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e3RhYmxlSGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICBpdGVtU2l6ZT17cm93SGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YT17ZGF0YVNvdXJjZX1cbiAgICAgICAgICAgICAgICAgICAgb25TY3JvbGw9e2hhbmRsZUxpc3RTY3JvbGx9XG4gICAgICAgICAgICAgICAgICAgIG9uSXRlbXNSZW5kZXJlZD17b25JdGVtc1JlbmRlcmVkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zY3JvbGxiYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtyZW5kZXJSb3d9XG4gICAgICAgICAgICAgICAgICA8L0ZpeGVkU2l6ZUxpc3Q+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9JbmZpbml0ZUxvYWRlcj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHN0eWxlcy5zY3JvbGxiYXJDb250YWluZXIsXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUhlaWdodCB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFRhYmxlSGVhZGVyXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgc2Nyb2xsVG9wPXtzY3JvbGxUb3B9XG4gICAgICAgICAgICBpc0hlYWRlclN0aWNreT17aXNIZWFkZXJTdGlja3l9XG4gICAgICAgICAgICBoZWFkZXJIZWlnaHQ9e2hlYWRlckhlaWdodH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtkYXRhU291cmNlLm1hcCgocm93LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIGRhdGE9e3Jvd31cbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgICAgaGFzQXJyb3c9e2hhc0Fycm93fVxuICAgICAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdz8uaWRdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IFRhYmxlSGVhZGVyQ2VsbCBmcm9tIFwiLi9UYWJsZUhlYWRlckNlbGxcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlSGVhZGVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBzY3JvbGxUb3A6IG51bWJlcjtcbiAgaXNIZWFkZXJTdGlja3k/OiBib29sZWFuO1xuICBoZWFkZXJIZWlnaHQ/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUYWJsZUhlYWRlcih7XG4gIGNvbHVtbnMsXG4gIHNjcm9sbFRvcCxcbiAgaXNIZWFkZXJTdGlja3ksXG4gIGhlYWRlckhlaWdodCxcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5ib3JkZXJCb3R0b21dOiAhIXNjcm9sbFRvcCB9LFxuICAgICAgICB7IFtzdHlsZXMuaXNIZWFkZXJTdGlja3ldOiBpc0hlYWRlclN0aWNreSB9LFxuICAgICAgXSl9XG4gICAgICBzdHlsZT17eyBoZWlnaHQ6IGhlYWRlckhlaWdodCB9fVxuICAgID5cbiAgICAgIHtjb2x1bW5zLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKFxuICAgICAgICA8VGFibGVIZWFkZXJDZWxsXG4gICAgICAgICAga2V5PXtgdGFibGUtaGVhZC1jZWxsLSR7Y29sdW1uSW5kZXh9YH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgaWNvbkNhcmV0VXAgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC11cC5zdmdcIjtcbmltcG9ydCB7IFNvcnRPcmRlciB9IGZyb20gXCIuLi8uLi90eXBlcy90YWJsZVwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVIZWFkZXJDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xufTtcblxuZnVuY3Rpb24gVGFibGVIZWFkZXJDZWxsKHsgY29sdW1uIH06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBvblNvcnQsXG4gICAgc29ydGFibGUsXG4gICAgc29ydGVkLFxuICAgIGRlZmF1bHRTb3J0T3JkZXIsXG4gICAgdGl0bGUsXG4gICAgd2lkdGgsXG4gICAgY2xhc3NOYW1lLFxuICB9ID0gY29sdW1uO1xuXG4gIGNvbnN0IFtzb3J0T3JkZXIsIHNldFNvcnRPcmRlcl0gPSB1c2VTdGF0ZShcbiAgICAoKSA9PiBkZWZhdWx0U29ydE9yZGVyIHx8IFNvcnRPcmRlci5ERVNDXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU29ydENvbHVtbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXNvcnRlZCkge1xuICAgICAgcmV0dXJuIG9uU29ydChzb3J0T3JkZXIpO1xuICAgIH1cbiAgICBjb25zdCBuZXdTb3J0T3JkZXIgPVxuICAgICAgc29ydE9yZGVyID09PSBTb3J0T3JkZXIuREVTQyA/IFNvcnRPcmRlci5BU0MgOiBTb3J0T3JkZXIuREVTQztcbiAgICBzZXRTb3J0T3JkZXIobmV3U29ydE9yZGVyKTtcbiAgICBvblNvcnQobmV3U29ydE9yZGVyKTtcbiAgfSwgW29uU29ydCwgc29ydE9yZGVyLCBzb3J0ZWRdKTtcblxuICBjb25zdCBjZWxsUHJvcHMgPVxuICAgIG9uU29ydCAmJiBzb3J0YWJsZVxuICAgICAgPyB7XG4gICAgICAgICAgb25DbGljazogaGFuZGxlU29ydENvbHVtbixcbiAgICAgICAgfVxuICAgICAgOiB7fTtcblxuICBjb25zdCBkaXNwbGF5QXJyb3cgPSAoKTogc3RyaW5nID0+IHtcbiAgICBpZiAoc29ydE9yZGVyID09PSBTb3J0T3JkZXIuREVTQykge1xuICAgICAgcmV0dXJuIGljb25DYXJldERvd247XG4gICAgfVxuICAgIHJldHVybiBpY29uQ2FyZXRVcDtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5jZWxsUHJvcHN9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLnRhYmxlSGVhZGVyQ2VsbCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5zb3J0SWNvblZpc2libGVdOiBzb3J0YWJsZSAmJiBzb3J0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5zb3J0YWJsZV06IHNvcnRhYmxlLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBzdHlsZT17eyB3aWR0aCB9fVxuICAgID5cbiAgICAgIHt0aXRsZX1cbiAgICAgIHtzb3J0YWJsZSA/IChcbiAgICAgICAgPEljb24gYWx0PXtcIlNvcnQgYnV0dG9uXCJ9IHNpemU9XCJzbWFsbFwiIHNyYz17ZGlzcGxheUFycm93KCl9IC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXJDZWxsO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBUYWJsZVJvd0NlbGwgZnJvbSBcIi4vVGFibGVSb3dDZWxsXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZVJvdy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmc7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIHJvd0hlaWdodDogbnVtYmVyO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBUYWJsZVJvdyh7XG4gIGRhdGEsXG4gIGNvbHVtbnMsXG4gIG9uUm93Q2xpY2ssXG4gIGhhc0Fycm93LFxuICByb3dIZWlnaHQsXG4gIGlzQWN0aXZlLFxufTogUHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlUm93Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uUm93Q2xpY2sgJiYgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG9uUm93Q2xpY2soZGF0YSk7XG4gICAgfVxuICB9LCBbZGF0YSwgb25Sb3dDbGlja10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmhhc0Fycm93XTogaGFzQXJyb3csXG4gICAgICAgICAgW3N0eWxlcy5hY3RpdmVdOiBpc0FjdGl2ZSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17aGFuZGxlUm93Q2xpY2t9XG4gICAgPlxuICAgICAge2NvbHVtbnMubWFwKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiAoXG4gICAgICAgIDxUYWJsZVJvd0NlbGxcbiAgICAgICAgICBrZXk9e2B0YWJsZS1yb3ctY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvdztcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVSb3dDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgaXRlbTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xuICByb3dIZWlnaHQ6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93Q2VsbCh7IGl0ZW0sIGNvbHVtbiwgcm93SGVpZ2h0IH06IFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBkYXRhID0gdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgPyBpdGVtIDogaXRlbVtjb2x1bW4uZGF0YUluZGV4XTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNvbHVtbi5jbGFzc05hbWVdKX1cbiAgICAgIHN0eWxlPXt7IGhlaWdodDogcm93SGVpZ2h0LCB3aWR0aDogY29sdW1uPy53aWR0aCB9fVxuICAgID5cbiAgICAgIHtjb2x1bW4ucmVuZGVyID8gY29sdW1uLnJlbmRlcihkYXRhKSA6IGRhdGF9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93Q2VsbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGFibGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBpY29uQ3Jvc3NlZCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2Nyb3NzZWQuc3ZnXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFnLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjbG9zYWJsZT86IGJvb2xlYW47XG4gIHZhbHVlPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBvbkRlbGV0ZT86IChpZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNsb3NlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRhZyh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGNsb3NhYmxlLFxuICB2YWx1ZSxcbiAgb25DbG9zZSxcbiAgZGlzYWJsZWQsXG4gIG9uRGVsZXRlLFxuICBpZCxcbn06IFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb25EZWxldGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkRlbGV0ZShpZCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9uQ2xvc2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsb3NlKGV2ZW50LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DbG9zZSwgb25EZWxldGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCB7IFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCB9XSl9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvc3Bhbj5cbiAgICAgIHtjbG9zYWJsZSAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlQnV0dG9ufSBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICAgICAgPEljb24gc3JjPXtpY29uQ3Jvc3NlZH0gYWx0PVwiQ2xvc2VcIiBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWc7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhZyB9IGZyb20gXCIuL1RhZ1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgSGludCB9IGZyb20gXCJyZWFjdC1hdXRvY29tcGxldGUtaGludFwiO1xuXG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2sgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcbmltcG9ydCB7IFRhZyB9IGZyb20gXCIuLi9UYWdcIjtcbmltcG9ydCB7IFNpemUsIFRleHRJbnB1dE1vZGUsIFRleHRJbnB1dFR5cGUsIFRhZ1R5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWdzSW5wdXQubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRhZ3NJbnB1dFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlczogc3RyaW5nW10pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZ1tdO1xuICBuYW1lPzogc3RyaW5nO1xuICBwYXR0ZXJuPzogc3RyaW5nO1xuICB0eXBlPzogVGV4dElucHV0VHlwZTtcbiAgc2l6ZT86IFNpemU7XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgd2l0aFNjcm9sbD86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnB1dE1vZGU/OiBUZXh0SW5wdXRNb2RlO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHRhZ09wdGlvbnM/OiBzdHJpbmdbXTtcbn07XG5cbmZ1bmN0aW9uIFRhZ3NJbnB1dCh7XG4gIGNsYXNzTmFtZSxcbiAgb25DaGFuZ2UsXG4gIHBsYWNlaG9sZGVyLFxuICB2YWx1ZSxcbiAgbmFtZSxcbiAgcGF0dGVybixcbiAgaW5wdXRSZWYsXG4gIHNpemUgPSBcInNtYWxsXCIsXG4gIHR5cGUgPSBcInRleHRcIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHdpdGhTY3JvbGwgPSBmYWxzZSxcbiAgaW5wdXRNb2RlLFxuICBkaXNhYmxlZCxcbiAgdGFnT3B0aW9ucyA9IFtdLFxufTogVGFnc0lucHV0UHJvcHMpIHtcbiAgY29uc3QgW3RleHQsIHNldFRleHRdID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcbiAgY29uc3QgW3RhZ3MsIHNldFRhZ3NdID0gdXNlU3RhdGU8VGFnVHlwZVtdPigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCB0YWdzQXJyID0gdmFsdWUubWFwKCh0YWcpID0+ICh7IGlkOiB1dWlkdjQoKSwgbGFiZWw6IHRhZyB9KSk7XG4gICAgICBzZXRUYWdzKHRhZ3NBcnIpO1xuICAgIH1cbiAgfSwgW3ZhbHVlLCBzZXRUYWdzXSk7XG5cbiAgY29uc3QgaGFuZGxlVGV4dENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuXG4gICAgICBzZXRUZXh0KHZhbHVlKTtcbiAgICB9LFxuICAgIFtzZXRUZXh0XVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0RlbGV0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChpZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkVGFncyA9IHRhZ3MuZmlsdGVyKCh0YWcpID0+IHRhZy5pZCAhPT0gaWQpO1xuICAgICAgc2V0VGFncyh1cGRhdGVkVGFncyk7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgdGFnc0FyciA9IHVwZGF0ZWRUYWdzLm1hcCgodGFnKSA9PiB0YWcubGFiZWwpO1xuICAgICAgICBvbkNoYW5nZSh0YWdzQXJyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFt0YWdzLCBzZXRUYWdzLCBvbkNoYW5nZV1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUYWdBZGQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdHJpbW1lZFRleHQgPSB0ZXh0LnRyaW0oKTtcbiAgICBsZXQgdXBkYXRlZFRhZ3MgPSBbLi4udGFnc107XG5cbiAgICBpZiAodHJpbW1lZFRleHQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFnID0geyBpZDogdXVpZHY0KCksIGxhYmVsOiB0cmltbWVkVGV4dCB9O1xuICAgICAgdXBkYXRlZFRhZ3MgPSBbLi4udGFncywgdGFnXTtcbiAgICB9XG5cbiAgICBzZXRUYWdzKHVwZGF0ZWRUYWdzKTtcbiAgICBzZXRUZXh0KFwiXCIpO1xuXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBjb25zdCB0YWdzQXJyID0gdXBkYXRlZFRhZ3MubWFwKCh0YWcpID0+IHRhZy5sYWJlbCk7XG4gICAgICBvbkNoYW5nZSh0YWdzQXJyKTtcbiAgICB9XG4gIH0sIFt0YWdzLCB0ZXh0LCBzZXRUYWdzLCBzZXRUZXh0XSk7XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGUuY29kZSA9PT0gXCJFbnRlclwiIHx8IGUuY29kZSA9PT0gXCJOdW1wYWRFbnRlclwiKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaGFuZGxlVGFnQWRkKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlVGFnQWRkXVxuICApO1xuXG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiB7XG4gICAgY29uc3QgdHJpbW1lZFRleHQgPSB0ZXh0LnRyaW0oKTtcblxuICAgIGlmICh0cmltbWVkVGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICBoYW5kbGVUYWdBZGQoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8SGludCBvcHRpb25zPXt0YWdPcHRpb25zfSBhbGxvd0VudGVyRmlsbD17dHJ1ZX0gYWxsb3dUYWJGaWxsPXt0cnVlfT5cbiAgICAgIDxpbnB1dFxuICAgICAgICBkYXRhLXRlc3RpZD1cImlucHV0XCJcbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLnRleHRJbnB1dCxcbiAgICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIgfSxcbiAgICAgICAgXSl9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVUZXh0Q2hhbmdlfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgIHBhdHRlcm49e3BhdHRlcm59XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgdHlwZT17dHlwZX1cbiAgICAgICAgdmFsdWU9e3RleHR9XG4gICAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgICBpbnB1dE1vZGU9e2lucHV0TW9kZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgLz5cbiAgICA8L0hpbnQ+XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgeyBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsIFtzdHlsZXMuc2Nyb2xsYWJsZV06IHdpdGhTY3JvbGwgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICByZWY9e3JlZn1cbiAgICA+XG4gICAgICB7dGFncz8ubWFwKCh7IGlkLCBsYWJlbCB9KSA9PiAoXG4gICAgICAgIDxUYWcga2V5PXtpZH0gdmFsdWU9e2xhYmVsfSBpZD17aWR9IG9uRGVsZXRlPXtoYW5kbGVUYWdEZWxldGV9IGNsb3NhYmxlPlxuICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgPC9UYWc+XG4gICAgICApKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGFnSW5wdXR9PntpbnB1dEVsZW1lbnR9PC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5leHBvcnQgZGVmYXVsdCBUYWdzSW5wdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhZ3NJbnB1dCB9IGZyb20gXCIuL1RhZ3NJbnB1dFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgVGV4dElucHV0UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkJsdXI/OiAoKSA9PiB2b2lkO1xuICBvbktleURvd24/OiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnB1dE1vZGU/OiBUZXh0SW5wdXRNb2RlO1xufTtcblxuZnVuY3Rpb24gVGV4dElucHV0KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBvbkJsdXIsXG4gIG9uS2V5RG93bixcbiAgcGxhY2Vob2xkZXIsXG4gIHZhbHVlLFxuICBuYW1lLFxuICBwYXR0ZXJuLFxuICBpbnB1dFJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcInRleHRcIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbn06IFRleHRJbnB1dFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8aW5wdXRcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMudGV4dElucHV0LFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgcGF0dGVybj17cGF0dGVybn1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIG5hbWU9e25hbWV9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICBpbnB1dE1vZGU9e2lucHV0TW9kZX1cbiAgICAvPlxuICApO1xuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0SW5wdXQgfSBmcm9tIFwiLi9UZXh0SW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb2FzdFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRvYXN0KHsgY2hpbGRyZW4sIGNvbnRhaW5lclJlZiwgb25DbGljayA9ICgpID0+IHt9IH06IFRvYXN0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRvYXN0fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3RcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9hc3Q7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3QgfSBmcm9tIFwiLi9Ub2FzdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdENvbnRhaW5lciB9IGZyb20gXCIuL1RvYXN0Q29udGFpbmVyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VTdGF0ZSxcbiAgdXNlUmVmLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCBzY3JvbGxQYXJlbnQgZnJvbSBcInNjcm9sbHBhcmVudFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1Rvb2x0aXAubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvb2x0aXBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgdGV4dDogc3RyaW5nO1xuICBwbGFjZW1lbnQ6IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG4gIHBvc2l0aW9uPzogXCJhYnNvbHV0ZVwiIHwgXCJmaXhlZFwiO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRvdWNoU2NyZWVuSGlkaW5nRGVsYXk/OiBudW1iZXI7XG4gIHNob3dUb29sdGlwOiBib29sZWFuO1xufTtcblxuY29uc3QgbWFwUGxhY2VtZW50VG9Qb3NpdGlvblN0eWxlcyA9IChcbiAgcGxhY2VtZW50OiBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiLFxuICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiIHwgXCJmaXhlZFwiLFxuICByZWN0OiBET01SZWN0XG4pID0+IHtcbiAgY29uc3QgeyB0b3AsIGxlZnQsIGhlaWdodCwgd2lkdGggfSA9IHJlY3Q7XG4gIGxldCBwb3NpdGlvblN0eWxlcyA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG4gIHN3aXRjaCAocGxhY2VtZW50KSB7XG4gICAgY2FzZSBcImxlZnRcIjpcbiAgICAgIHBvc2l0aW9uU3R5bGVzID0ge1xuICAgICAgICB0b3A6IHRvcCArIGhlaWdodCAvIDIsXG4gICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInJpZ2h0XCI6XG4gICAgICBwb3NpdGlvblN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AgKyBoZWlnaHQgLyAyLFxuICAgICAgICBsZWZ0OiBsZWZ0ICsgd2lkdGgsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgcG9zaXRpb25TdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wICsgaGVpZ2h0LFxuICAgICAgICBsZWZ0OiBsZWZ0ICsgd2lkdGggLyAyLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0b3BcIjpcbiAgICAgIHBvc2l0aW9uU3R5bGVzID0ge1xuICAgICAgICB0b3A6IHRvcCxcbiAgICAgICAgbGVmdDogbGVmdCArIHdpZHRoIC8gMixcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiXG4gICAgPyB7XG4gICAgICAgIHRvcDogcG9zaXRpb25TdHlsZXMudG9wICsgd2luZG93LnNjcm9sbFksXG4gICAgICAgIGxlZnQ6IHBvc2l0aW9uU3R5bGVzLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWCxcbiAgICAgIH1cbiAgICA6IHBvc2l0aW9uU3R5bGVzO1xufTtcblxuZnVuY3Rpb24gVG9vbHRpcCh7XG4gIGNoaWxkcmVuLFxuICB0ZXh0LFxuICBwbGFjZW1lbnQsXG4gIHBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiLFxuICBzaG93VG9vbHRpcCxcbiAgY2xhc3NOYW1lLFxuICB0b3VjaFNjcmVlbkhpZGluZ0RlbGF5ID0gNTAwMCxcbn06IFRvb2x0aXBQcm9wcykge1xuICBjb25zdCBbcG9zaXRpb25TdHlsZXMsIHNldFBvc2l0aW9uU3R5bGVzXSA9IHVzZVN0YXRlKHtcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogMCxcbiAgfSk7XG4gIGNvbnN0IFt0b29sdGlwSXNWaXNpYmxlLCBzZXRUb29sdGlwSXNWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCB0aW1lclJlZiA9IHVzZVJlZjxOb2RlSlMuVGltZW91dD4obnVsbCk7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MU3BhbkVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHVwZGF0ZVBvc2l0aW9uU3R5bGVzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghY29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWN0ID0gY29udGFpbmVyUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbmV3UG9zaXRpb25TdHlsZXMgPSBtYXBQbGFjZW1lbnRUb1Bvc2l0aW9uU3R5bGVzKFxuICAgICAgcGxhY2VtZW50LFxuICAgICAgcG9zaXRpb24sXG4gICAgICByZWN0XG4gICAgKTtcbiAgICBzZXRQb3NpdGlvblN0eWxlcyhuZXdQb3NpdGlvblN0eWxlcyk7XG4gICAgc2V0VG9vbHRpcElzVmlzaWJsZSh0cnVlKTtcbiAgfSwgW3BsYWNlbWVudCwgcG9zaXRpb25dKTtcblxuICBjb25zdCBvbk1vdXNlRW50ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdXBkYXRlUG9zaXRpb25TdHlsZXMoKTtcbiAgfSwgW3VwZGF0ZVBvc2l0aW9uU3R5bGVzXSk7XG5cbiAgY29uc3Qgb25Nb3VzZUxlYXZlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFRvb2x0aXBJc1Zpc2libGUoZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25Ub3VjaFN0YXJ0SGFuZGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodGltZXJSZWYuY3VycmVudCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgdGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgdXBkYXRlUG9zaXRpb25TdHlsZXMoKTtcbiAgfSwgW3VwZGF0ZVBvc2l0aW9uU3R5bGVzXSk7XG5cbiAgY29uc3Qgb25Ub3VjaEVuZEhhbmRsZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0VG9vbHRpcElzVmlzaWJsZShmYWxzZSk7XG4gICAgICB0aW1lclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9LCB0b3VjaFNjcmVlbkhpZGluZ0RlbGF5KTtcbiAgfSwgW3RvdWNoU2NyZWVuSGlkaW5nRGVsYXldKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB0aW1lclJlZi5jdXJyZW50ICYmIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250YWluZXJSZWYuY3VycmVudCB8fCBwb3NpdGlvbiAhPT0gXCJhYnNvbHV0ZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudCA9IHNjcm9sbFBhcmVudChjb250YWluZXJSZWYuY3VycmVudCk7XG4gICAgaWYgKCFzY3JvbGxhYmxlUGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGlkZVRvb2x0aXAgPSAoKSA9PiBzZXRUb29sdGlwSXNWaXNpYmxlKGZhbHNlKTtcbiAgICBzY3JvbGxhYmxlUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgaGlkZVRvb2x0aXApO1xuICAgIHNjcm9sbGFibGVQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoaWRlVG9vbHRpcCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHNjcm9sbGFibGVQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBoaWRlVG9vbHRpcCk7XG4gICAgICBzY3JvbGxhYmxlUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgaGlkZVRvb2x0aXApO1xuICAgIH07XG4gIH0sIFtwb3NpdGlvbl0pO1xuXG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIG9uVG91Y2hTdGFydD17b25Ub3VjaFN0YXJ0SGFuZGxlcn1cbiAgICAgIG9uTW91c2VFbnRlcj17b25Nb3VzZUVudGVyfVxuICAgICAgb25Nb3VzZUxlYXZlPXtvbk1vdXNlTGVhdmV9XG4gICAgICBvblRvdWNoRW5kPXtvblRvdWNoRW5kSGFuZGxlcn1cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIHtjcmVhdGVQb3J0YWwoXG4gICAgICAgIDw+XG4gICAgICAgICAge3Nob3dUb29sdGlwICYmIHRvb2x0aXBJc1Zpc2libGUgPyAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXtwb3NpdGlvblN0eWxlc31cbiAgICAgICAgICAgICAgZGF0YS10ZXh0PXt0ZXh0fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cInRvb2x0aXBcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgICBzdHlsZXMudG9vbHRpcCxcbiAgICAgICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50XSxcbiAgICAgICAgICAgICAgICBzdHlsZXNbcG9zaXRpb25dLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz4sXG4gICAgICAgIGRvY3VtZW50LmJvZHlcbiAgICAgICl9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb29sdGlwO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUb29sdGlwIH0gZnJvbSBcIi4vVG9vbHRpcFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVmlkZW8ubW9kdWxlLmNzc1wiO1xuXG4vKipcbiAqIFRoZXJlIGlzIGEga25vd24gaXNzdWUgaW4gUmVhY3QgaW4gcmVnYXJkcyB0byB0aGUgJ211dGVkJyBwcm9wZXJ0eSB3aGljaCBjYXVzZXMgdGhlIHdhcm5pbmc6XG4gKiBcIldhcm5pbmc6IHVuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLlwiXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMDM4OVxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NTQ0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGVzdGluZy1saWJyYXJ5L3JlYWN0LXRlc3RpbmctbGlicmFyeS9pc3N1ZXMvNDcwXG4gKi9cblxudHlwZSBMYXlvdXQgPSBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuXG5leHBvcnQgdHlwZSBWaWRlb1Byb3BzID0ge1xuICBzcmM6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBsYXlvdXQ/OiBMYXlvdXQ7XG4gIGF1dG9QbGF5PzogYm9vbGVhbjtcbiAgbG9vcD86IGJvb2xlYW47XG4gIG11dGVkPzogYm9vbGVhbjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHBvc3Rlcj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZGVvKHtcbiAgc3JjLFxuICB0eXBlLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBwb3N0ZXIsXG4gIG11dGVkID0gdHJ1ZSxcbiAgbG9vcCA9IHRydWUsXG4gIGF1dG9QbGF5ID0gdHJ1ZSxcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXG59OiBWaWRlb1Byb3BzKSB7XG4gIHJldHVybiBjaGlsZHJlbiA/IChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XG4gICAgPlxuICAgICAgPHZpZGVvXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgICBsb29wPXtsb29wfVxuICAgICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgICBwbGF5c0lubGluZVxuICAgICAgPlxuICAgICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XG4gICAgICA8L3ZpZGVvPlxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICA8dmlkZW9cbiAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgbG9vcD17bG9vcH1cbiAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgcGxheXNJbmxpbmVcbiAgICA+XG4gICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XG4gICAgPC92aWRlbz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlkZW87XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFZpZGVvLCBWaWRlb1Byb3BzIH0gZnJvbSBcIi4vVmlkZW9cIjtcbiIsImV4cG9ydCBlbnVtIFRhYmxlQ29uZmlnIHtcbiAgUk9XX0hFSUdIVCA9IDQ4LFxuICBIRUFERVJfSEVJR0hUPTMyLFxuICBQQUdFX1NJWkUgPSAxMDAsXG4gIElURU1TX0xPQURFRCA9IDUsXG59XG4iLCJleHBvcnQgKiBmcm9tIFwiLi4vY29uc3RhbnRzL1RhYmxlXCI7XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25CYWRnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NoZWNrYm94XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbG9yUGlja2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbG9yU3dhdGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Ryb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ZpbGVJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uTGlua1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JbWFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9MYWJlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9MaXN0Vmlld1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9NZW51XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01vZGFsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL051bXBhZFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9PdmVybGF5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1NlbGVjdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UYWJsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UYWdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFnc0lucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RleHRJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub2FzdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub29sdGlwXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1ZpZGVvXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0RyYXdlclwiO1xuIiwiZXhwb3J0IGVudW0gU29ydE9yZGVyIHtcbiAgICBBU0MgPSBcImFzY1wiLFxuICAgIERFU0MgPSBcImRlc2NcIixcbiAgfVxuIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPSc2OScgaGVpZ2h0PScyNycgdmlld0JveD0nMCAwIDY5IDI3JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0LjEzMzMgMjZMMTMuNzg4NiAyNi4zNjIyQzEzLjg4MTYgMjYuNDUwNyAxNC4wMDUgMjYuNSAxNC4xMzMzIDI2LjVWMjZaTTEgMTMuNUwwLjY1NTI4NyAxMy4xMzc4QzAuNTU2MTI3IDEzLjIzMjIgMC41IDEzLjM2MzEgMC41IDEzLjVDMC41IDEzLjYzNjkgMC41NTYxMjcgMTMuNzY3OCAwLjY1NTI4NyAxMy44NjIyTDEgMTMuNVpNMTQuMTMzMyAxVjAuNUMxNC4wMDUgMC41IDEzLjg4MTYgMC41NDkzNDUgMTMuNzg4NiAwLjYzNzgyMkwxNC4xMzMzIDFaTTY3LjUgMlYyNUg2OC41VjJINjcuNVpNNjMuNDY2NyAyNS41SDE0LjEzMzNWMjYuNUg2My40NjY3VjI1LjVaTTE0LjQ3OCAyNS42Mzc4TDEuMzQ0NzEgMTMuMTM3OEwwLjY1NTI4NyAxMy44NjIyTDEzLjc4ODYgMjYuMzYyMkwxNC40NzggMjUuNjM3OFpNMS4zNDQ3MSAxMy44NjIyTDE0LjQ3OCAxLjM2MjE4TDEzLjc4ODYgMC42Mzc4MjJMMC42NTUyODcgMTMuMTM3OEwxLjM0NDcxIDEzLjg2MjJaTTE0LjEzMzMgMS41SDYzLjQ2NjdWMC41SDE0LjEzMzNWMS41Wk02NyAyNS41SDYzLjQ2NjdWMjYuNUg2N1YyNS41Wk02NyAwLjVINjMuNDY2N1YxLjVINjdWMC41Wk02Ny41IDI1QzY3LjUgMjUuMjc2MSA2Ny4yNzYxIDI1LjUgNjcgMjUuNVYyNi41QzY3LjgyODQgMjYuNSA2OC41IDI1LjgyODQgNjguNSAyNUg2Ny41Wk02OC41IDJDNjguNSAxLjE3MTU3IDY3LjgyODQgMC41IDY3IDAuNVYxLjVDNjcuMjc2MSAxLjUgNjcuNSAxLjcyMzg2IDY3LjUgMkg2OC41WicgZmlsbD0nJTIzMjYyNjI2Jy8lM2UgJTNjcGF0aCBkPSdNMzIuNjQ2NCA2LjM1MzU1TDQ2LjY0NjQgMjAuMzUzNkw0Ny4zNTM2IDE5LjY0NjRMMzMuMzUzNiA1LjY0NjQ1TDMyLjY0NjQgNi4zNTM1NVpNNDYuNjQ2NCA1LjY0NjQ1TDMyLjY0NjQgMTkuNjQ2NEwzMy4zNTM2IDIwLjM1MzZMNDcuMzUzNiA2LjM1MzU1TDQ2LjY0NjQgNS42NDY0NVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNSAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNCA1TDcuNSAxMkwxIDUnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMSAxMEw3LjUgM0wxNCAxMCcgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLWxpbmVjYXA9J3NxdWFyZScvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyMCAyMCcgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00wLjM5ODQzOCAwLjM5OTkwMkwxOS41OTg0IDE5LjU5OTlNMC4zOTg0MzggMTkuNTk5OUwxOS41OTg0IDAuMzk5OTAyJyBzdHJva2U9J2JsYWNrJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTEuNSAxLjVMMTMuNSAxMy41TTEuNSAxMy41TDEzLjUgMS41JyBzdHJva2U9J2JsYWNrJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE1LjQ2ODUgMTUuNDY2NUwxMS4yMDE4IDExLjE5OTlNNi45MzUxNiAxMy4zMzMyQzMuNDAwNTMgMTMuMzMzMiAwLjUzNTE1NiAxMC40Njc4IDAuNTM1MTU2IDYuOTMzMkMwLjUzNTE1NiAzLjM5ODU4IDMuNDAwNTMgMC41MzMyMDMgNi45MzUxNiAwLjUzMzIwM0MxMC40Njk4IDAuNTMzMjAzIDEzLjMzNTIgMy4zOTg1OCAxMy4zMzUyIDYuOTMzMkMxMy4zMzUyIDEwLjQ2NzggMTAuNDY5OCAxMy4zMzMyIDYuOTM1MTYgMTMuMzMzMlonIHN0cm9rZT0nJTIzODk4ODkxJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0LjkzMzEgNC4yNjc1OEw3Ljk5OTc0IDExLjczNDJMMS4wNjY0MSA0LjI2NzU4JyBzdHJva2U9JyUyMzg5ODg5MScgc3Ryb2tlLWxpbmVjYXA9J3NxdWFyZScvJTNlICUzYy9zdmclM2VcIiIsIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBlPXJlcXVpcmUoXCJyZWFjdFwiKTtmdW5jdGlvbiBoKGEsYil7cmV0dXJuIGE9PT1iJiYoMCE9PWF8fDEvYT09PTEvYil8fGEhPT1hJiZiIT09Yn12YXIgaz1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpoLGw9ZS51c2VTdGF0ZSxtPWUudXNlRWZmZWN0LG49ZS51c2VMYXlvdXRFZmZlY3QscD1lLnVzZURlYnVnVmFsdWU7ZnVuY3Rpb24gcShhLGIpe3ZhciBkPWIoKSxmPWwoe2luc3Q6e3ZhbHVlOmQsZ2V0U25hcHNob3Q6Yn19KSxjPWZbMF0uaW5zdCxnPWZbMV07bihmdW5jdGlvbigpe2MudmFsdWU9ZDtjLmdldFNuYXBzaG90PWI7cihjKSYmZyh7aW5zdDpjfSl9LFthLGQsYl0pO20oZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KTtyZXR1cm4gYShmdW5jdGlvbigpe3IoYykmJmcoe2luc3Q6Y30pfSl9LFthXSk7cChkKTtyZXR1cm4gZH1cbmZ1bmN0aW9uIHIoYSl7dmFyIGI9YS5nZXRTbmFwc2hvdDthPWEudmFsdWU7dHJ5e3ZhciBkPWIoKTtyZXR1cm4hayhhLGQpfWNhdGNoKGYpe3JldHVybiEwfX1mdW5jdGlvbiB0KGEsYil7cmV0dXJuIGIoKX12YXIgdT1cInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnR8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ/dDpxO2V4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmU9dm9pZCAwIT09ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZT9lLnVzZVN5bmNFeHRlcm5hbFN0b3JlOnU7XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTklMXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9uaWwuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGFyc2UuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYxXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3YyLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3YzLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Y0LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFsaWRhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZhbGlkYXRlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmVyc2lvbi5kZWZhdWx0O1xuICB9XG59KTtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MS5qc1wiKSk7XG5cbnZhciBfdjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzLmpzXCIpKTtcblxudmFyIF92MyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjQuanNcIikpO1xuXG52YXIgX3Y0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92NS5qc1wiKSk7XG5cbnZhciBfbmlsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uaWwuanNcIikpO1xuXG52YXIgX3ZlcnNpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZlcnNpb24uanNcIikpO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIikpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbi8qXG4gKiBCcm93c2VyLWNvbXBhdGlibGUgSmF2YVNjcmlwdCBNRDVcbiAqXG4gKiBNb2RpZmljYXRpb24gb2YgSmF2YVNjcmlwdCBNRDVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL0phdmFTY3JpcHQtTUQ1XG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICpcbiAqIEJhc2VkIG9uXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlXG4gKiBEaWdlc3QgQWxnb3JpdGhtLCBhcyBkZWZpbmVkIGluIFJGQyAxMzIxLlxuICogVmVyc2lvbiAyLjIgQ29weXJpZ2h0IChDKSBQYXVsIEpvaG5zdG9uIDE5OTkgLSAyMDA5XG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2VcbiAqIFNlZSBodHRwOi8vcGFqaG9tZS5vcmcudWsvY3J5cHQvbWQ1IGZvciBtb3JlIGluZm8uXG4gKi9cbmZ1bmN0aW9uIG1kNShieXRlcykge1xuICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG1zZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChieXRlcykpOyAvLyBVVEY4IGVzY2FwZVxuXG4gICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheShtc2cubGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlc1tpXSA9IG1zZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZDVUb0hleEVuY29kZWRBcnJheSh3b3Jkc1RvTWQ1KGJ5dGVzVG9Xb3JkcyhieXRlcyksIGJ5dGVzLmxlbmd0aCAqIDgpKTtcbn1cbi8qXG4gKiBDb252ZXJ0IGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMgdG8gYW4gYXJyYXkgb2YgYnl0ZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIG1kNVRvSGV4RW5jb2RlZEFycmF5KGlucHV0KSB7XG4gIGNvbnN0IG91dHB1dCA9IFtdO1xuICBjb25zdCBsZW5ndGgzMiA9IGlucHV0Lmxlbmd0aCAqIDMyO1xuICBjb25zdCBoZXhUYWIgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGgzMjsgaSArPSA4KSB7XG4gICAgY29uc3QgeCA9IGlucHV0W2kgPj4gNV0gPj4+IGkgJSAzMiAmIDB4ZmY7XG4gICAgY29uc3QgaGV4ID0gcGFyc2VJbnQoaGV4VGFiLmNoYXJBdCh4ID4+PiA0ICYgMHgwZikgKyBoZXhUYWIuY2hhckF0KHggJiAweDBmKSwgMTYpO1xuICAgIG91dHB1dC5wdXNoKGhleCk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgb3V0cHV0IGxlbmd0aCB3aXRoIHBhZGRpbmcgYW5kIGJpdCBsZW5ndGhcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aDgpIHtcbiAgcmV0dXJuIChpbnB1dExlbmd0aDggKyA2NCA+Pj4gOSA8PCA0KSArIDE0ICsgMTtcbn1cbi8qXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoLlxuICovXG5cblxuZnVuY3Rpb24gd29yZHNUb01kNSh4LCBsZW4pIHtcbiAgLyogYXBwZW5kIHBhZGRpbmcgKi9cbiAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCBsZW4gJSAzMjtcbiAgeFtnZXRPdXRwdXRMZW5ndGgobGVuKSAtIDFdID0gbGVuO1xuICBsZXQgYSA9IDE3MzI1ODQxOTM7XG4gIGxldCBiID0gLTI3MTczMzg3OTtcbiAgbGV0IGMgPSAtMTczMjU4NDE5NDtcbiAgbGV0IGQgPSAyNzE3MzM4Nzg7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNikge1xuICAgIGNvbnN0IG9sZGEgPSBhO1xuICAgIGNvbnN0IG9sZGIgPSBiO1xuICAgIGNvbnN0IG9sZGMgPSBjO1xuICAgIGNvbnN0IG9sZGQgPSBkO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2ldLCA3LCAtNjgwODc2OTM2KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE3LCA2MDYxMDU4MTkpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgNF0sIDcsIC0xNzY0MTg4OTcpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA1XSwgMTIsIDEyMDAwODA0MjYpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTcsIC0xNDczMjMxMzQxKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgN10sIDIyLCAtNDU3MDU5ODMpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNywgMTc3MDAzNTQxNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE3LCAtNDIwNjMpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNywgMTgwNDYwMzY4Mik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDEzXSwgMTIsIC00MDM0MTEwMSk7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTcsIC0xNTAyMDAyMjkwKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTVdLCAyMiwgMTIzNjUzNTMyOSk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA1LCAtMTY1Nzk2NTEwKTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgNl0sIDksIC0xMDY5NTAxNjMyKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNCwgNjQzNzE3NzEzKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpXSwgMjAsIC0zNzM4OTczMDIpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyA1XSwgNSwgLTcwMTU1ODY5MSk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDEwXSwgOSwgMzgwMTYwODMpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE0LCAtNjYwNDc4MzM1KTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgOV0sIDUsIDU2ODQ0NjQzOCk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDE0XSwgOSwgLTEwMTk4MDM2OTApO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTQsIC0xODczNjM5NjEpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA4XSwgMjAsIDExNjM1MzE1MDEpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxM10sIDUsIC0xNDQ0NjgxNDY3KTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMl0sIDksIC01MTQwMzc4NCk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNCwgMTczNTMyODQ3Myk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgNV0sIDQsIC0zNzg1NTgpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNiwgMTgzOTAzMDU2Mik7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDE0XSwgMjMsIC0zNTMwOTU1Nik7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA0LCAtMTUzMDk5MjA2MCk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDRdLCAxMSwgMTI3Mjg5MzM1Myk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNiwgLTE1NTQ5NzYzMik7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMTNdLCA0LCA2ODEyNzkxNzQpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2ldLCAxMSwgLTM1ODUzNzIyMik7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNiwgLTcyMjUyMTk3OSk7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDZdLCAyMywgNzYwMjkxODkpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNCwgLTY0MDM2NDQ4Nyk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDEyXSwgMTEsIC00MjE4MTU4MzUpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE2LCA1MzA3NDI1MjApO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAyXSwgMjMsIC05OTUzMzg2NTEpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2ldLCA2LCAtMTk4NjMwODQ0KTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgN10sIDEwLCAxMTI2ODkxNDE1KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyA1XSwgMjEsIC01NzQzNDA1NSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNiwgMTcwMDQ4NTU3MSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDNdLCAxMCwgLTE4OTQ5ODY2MDYpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE1LCAtMTA1MTUyMyk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyA4XSwgNiwgMTg3MzMxMzM1OSk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDE1XSwgMTAsIC0zMDYxMTc0NCk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDZdLCAxNSwgLTE1NjAxOTgzODApO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxM10sIDIxLCAxMzA5MTUxNjQ5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgNF0sIDYsIC0xNDU1MjMwNzApO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNSwgNzE4Nzg3MjU5KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgOV0sIDIxLCAtMzQzNDg1NTUxKTtcbiAgICBhID0gc2FmZUFkZChhLCBvbGRhKTtcbiAgICBiID0gc2FmZUFkZChiLCBvbGRiKTtcbiAgICBjID0gc2FmZUFkZChjLCBvbGRjKTtcbiAgICBkID0gc2FmZUFkZChkLCBvbGRkKTtcbiAgfVxuXG4gIHJldHVybiBbYSwgYiwgYywgZF07XG59XG4vKlxuICogQ29udmVydCBhbiBhcnJheSBieXRlcyB0byBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzXG4gKiBDaGFyYWN0ZXJzID4yNTUgaGF2ZSB0aGVpciBoaWdoLWJ5dGUgc2lsZW50bHkgaWdub3JlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJ5dGVzVG9Xb3JkcyhpbnB1dCkge1xuICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbGVuZ3RoOCA9IGlucHV0Lmxlbmd0aCAqIDg7XG4gIGNvbnN0IG91dHB1dCA9IG5ldyBVaW50MzJBcnJheShnZXRPdXRwdXRMZW5ndGgobGVuZ3RoOCkpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoODsgaSArPSA4KSB7XG4gICAgb3V0cHV0W2kgPj4gNV0gfD0gKGlucHV0W2kgLyA4XSAmIDB4ZmYpIDw8IGkgJSAzMjtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG4vKlxuICogQWRkIGludGVnZXJzLCB3cmFwcGluZyBhdCAyXjMyLiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseVxuICogdG8gd29yayBhcm91bmQgYnVncyBpbiBzb21lIEpTIGludGVycHJldGVycy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHNhZmVBZGQoeCwgeSkge1xuICBjb25zdCBsc3cgPSAoeCAmIDB4ZmZmZikgKyAoeSAmIDB4ZmZmZik7XG4gIGNvbnN0IG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpO1xuICByZXR1cm4gbXN3IDw8IDE2IHwgbHN3ICYgMHhmZmZmO1xufVxuLypcbiAqIEJpdHdpc2Ugcm90YXRlIGEgMzItYml0IG51bWJlciB0byB0aGUgbGVmdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdFJvdGF0ZUxlZnQobnVtLCBjbnQpIHtcbiAgcmV0dXJuIG51bSA8PCBjbnQgfCBudW0gPj4+IDMyIC0gY250O1xufVxuLypcbiAqIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGZvdXIgYmFzaWMgb3BlcmF0aW9ucyB0aGUgYWxnb3JpdGhtIHVzZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBtZDVjbW4ocSwgYSwgYiwgeCwgcywgdCkge1xuICByZXR1cm4gc2FmZUFkZChiaXRSb3RhdGVMZWZ0KHNhZmVBZGQoc2FmZUFkZChhLCBxKSwgc2FmZUFkZCh4LCB0KSksIHMpLCBiKTtcbn1cblxuZnVuY3Rpb24gbWQ1ZmYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgJiBjIHwgfmIgJiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gbWQ1Z2coYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgJiBkIHwgYyAmIH5kLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gbWQ1aGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihjIF4gKGIgfCB+ZCksIGEsIGIsIHgsIHMsIHQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSBtZDU7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG52YXIgX2RlZmF1bHQgPSB7XG4gIHJhbmRvbVVVSURcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVmYXVsdCA9ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gcGFyc2UodXVpZCkge1xuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICB9XG5cbiAgbGV0IHY7XG4gIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gUGFyc2UgIyMjIyMjIyMtLi4uLi0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDAsIDgpLCAxNikpID4+PiAyNDtcbiAgYXJyWzFdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMl0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzNdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLSMjIyMtLi4uLi0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls0XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSg5LCAxMyksIDE2KSkgPj4+IDg7XG4gIGFycls1XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLSMjIyMtLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbNl0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE4KSwgMTYpKSA+Pj4gODtcbiAgYXJyWzddID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tLi4uLi0jIyMjLS4uLi4uLi4uLi4uLlxuXG4gIGFycls4XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxOSwgMjMpLCAxNikpID4+PiA4O1xuICBhcnJbOV0gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLS4uLi4tIyMjIyMjIyMjIyMjXG4gIC8vIChVc2UgXCIvXCIgdG8gYXZvaWQgMzItYml0IHRydW5jYXRpb24gd2hlbiBiaXQtc2hpZnRpbmcgaGlnaC1vcmRlciBieXRlcylcblxuICBhcnJbMTBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDI0LCAzNiksIDE2KSkgLyAweDEwMDAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzExXSA9IHYgLyAweDEwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMl0gPSB2ID4+PiAyNCAmIDB4ZmY7XG4gIGFyclsxM10gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsxNF0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzE1XSA9IHYgJiAweGZmO1xuICByZXR1cm4gYXJyO1xufVxuXG52YXIgX2RlZmF1bHQgPSBwYXJzZTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9kZWZhdWx0ID0gL14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBybmc7XG4vLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcblxuZnVuY3Rpb24gcm5nKCkge1xuICAvLyBsYXp5IGxvYWQgc28gdGhhdCBlbnZpcm9ubWVudHMgdGhhdCBuZWVkIHRvIHBvbHlmaWxsIGhhdmUgYSBjaGFuY2UgdG8gZG8gc29cbiAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG8gaW1wbGVtZW50YXRpb24uXG4gICAgZ2V0UmFuZG9tVmFsdWVzID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbi8vIEFkYXB0ZWQgZnJvbSBDaHJpcyBWZW5lc3MnIFNIQTEgY29kZSBhdFxuLy8gaHR0cDovL3d3dy5tb3ZhYmxlLXR5cGUuY28udWsvc2NyaXB0cy9zaGExLmh0bWxcbmZ1bmN0aW9uIGYocywgeCwgeSwgeikge1xuICBzd2l0Y2ggKHMpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4geCAmIHkgXiB+eCAmIHo7XG5cbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4geCBeIHkgXiB6O1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIHggJiB5IF4geCAmIHogXiB5ICYgejtcblxuICAgIGNhc2UgMzpcbiAgICAgIHJldHVybiB4IF4geSBeIHo7XG4gIH1cbn1cblxuZnVuY3Rpb24gUk9UTCh4LCBuKSB7XG4gIHJldHVybiB4IDw8IG4gfCB4ID4+PiAzMiAtIG47XG59XG5cbmZ1bmN0aW9uIHNoYTEoYnl0ZXMpIHtcbiAgY29uc3QgSyA9IFsweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjLCAweGNhNjJjMWQ2XTtcbiAgY29uc3QgSCA9IFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LCAweGMzZDJlMWYwXTtcblxuICBpZiAodHlwZW9mIGJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IG1zZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChieXRlcykpOyAvLyBVVEY4IGVzY2FwZVxuXG4gICAgYnl0ZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlcy5wdXNoKG1zZy5jaGFyQ29kZUF0KGkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgLy8gQ29udmVydCBBcnJheS1saWtlIHRvIEFycmF5XG4gICAgYnl0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChieXRlcyk7XG4gIH1cblxuICBieXRlcy5wdXNoKDB4ODApO1xuICBjb25zdCBsID0gYnl0ZXMubGVuZ3RoIC8gNCArIDI7XG4gIGNvbnN0IE4gPSBNYXRoLmNlaWwobCAvIDE2KTtcbiAgY29uc3QgTSA9IG5ldyBBcnJheShOKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IE47ICsraSkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50MzJBcnJheSgxNik7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIGFycltqXSA9IGJ5dGVzW2kgKiA2NCArIGogKiA0XSA8PCAyNCB8IGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgMV0gPDwgMTYgfCBieXRlc1tpICogNjQgKyBqICogNCArIDJdIDw8IDggfCBieXRlc1tpICogNjQgKyBqICogNCArIDNdO1xuICAgIH1cblxuICAgIE1baV0gPSBhcnI7XG4gIH1cblxuICBNW04gLSAxXVsxNF0gPSAoYnl0ZXMubGVuZ3RoIC0gMSkgKiA4IC8gTWF0aC5wb3coMiwgMzIpO1xuICBNW04gLSAxXVsxNF0gPSBNYXRoLmZsb29yKE1bTiAtIDFdWzE0XSk7XG4gIE1bTiAtIDFdWzE1XSA9IChieXRlcy5sZW5ndGggLSAxKSAqIDggJiAweGZmZmZmZmZmO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgKytpKSB7XG4gICAgY29uc3QgVyA9IG5ldyBVaW50MzJBcnJheSg4MCk7XG5cbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDE2OyArK3QpIHtcbiAgICAgIFdbdF0gPSBNW2ldW3RdO1xuICAgIH1cblxuICAgIGZvciAobGV0IHQgPSAxNjsgdCA8IDgwOyArK3QpIHtcbiAgICAgIFdbdF0gPSBST1RMKFdbdCAtIDNdIF4gV1t0IC0gOF0gXiBXW3QgLSAxNF0gXiBXW3QgLSAxNl0sIDEpO1xuICAgIH1cblxuICAgIGxldCBhID0gSFswXTtcbiAgICBsZXQgYiA9IEhbMV07XG4gICAgbGV0IGMgPSBIWzJdO1xuICAgIGxldCBkID0gSFszXTtcbiAgICBsZXQgZSA9IEhbNF07XG5cbiAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDgwOyArK3QpIHtcbiAgICAgIGNvbnN0IHMgPSBNYXRoLmZsb29yKHQgLyAyMCk7XG4gICAgICBjb25zdCBUID0gUk9UTChhLCA1KSArIGYocywgYiwgYywgZCkgKyBlICsgS1tzXSArIFdbdF0gPj4+IDA7XG4gICAgICBlID0gZDtcbiAgICAgIGQgPSBjO1xuICAgICAgYyA9IFJPVEwoYiwgMzApID4+PiAwO1xuICAgICAgYiA9IGE7XG4gICAgICBhID0gVDtcbiAgICB9XG5cbiAgICBIWzBdID0gSFswXSArIGEgPj4+IDA7XG4gICAgSFsxXSA9IEhbMV0gKyBiID4+PiAwO1xuICAgIEhbMl0gPSBIWzJdICsgYyA+Pj4gMDtcbiAgICBIWzNdID0gSFszXSArIGQgPj4+IDA7XG4gICAgSFs0XSA9IEhbNF0gKyBlID4+PiAwO1xuICB9XG5cbiAgcmV0dXJuIFtIWzBdID4+IDI0ICYgMHhmZiwgSFswXSA+PiAxNiAmIDB4ZmYsIEhbMF0gPj4gOCAmIDB4ZmYsIEhbMF0gJiAweGZmLCBIWzFdID4+IDI0ICYgMHhmZiwgSFsxXSA+PiAxNiAmIDB4ZmYsIEhbMV0gPj4gOCAmIDB4ZmYsIEhbMV0gJiAweGZmLCBIWzJdID4+IDI0ICYgMHhmZiwgSFsyXSA+PiAxNiAmIDB4ZmYsIEhbMl0gPj4gOCAmIDB4ZmYsIEhbMl0gJiAweGZmLCBIWzNdID4+IDI0ICYgMHhmZiwgSFszXSA+PiAxNiAmIDB4ZmYsIEhbM10gPj4gOCAmIDB4ZmYsIEhbM10gJiAweGZmLCBIWzRdID4+IDI0ICYgMHhmZiwgSFs0XSA+PiAxNiAmIDB4ZmYsIEhbNF0gPj4gOCAmIDB4ZmYsIEhbNF0gJiAweGZmXTtcbn1cblxudmFyIF9kZWZhdWx0ID0gc2hhMTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cy51bnNhZmVTdHJpbmdpZnkgPSB1bnNhZmVTdHJpbmdpZnk7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5jb25zdCBieXRlVG9IZXggPSBbXTtcblxuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXgucHVzaCgoaSArIDB4MTAwKS50b1N0cmluZygxNikuc2xpY2UoMSkpO1xufVxuXG5mdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIGNvbnN0IHV1aWQgPSB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG52YXIgX2RlZmF1bHQgPSBzdHJpbmdpZnk7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9ybmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JuZy5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5sZXQgX25vZGVJZDtcblxubGV0IF9jbG9ja3NlcTsgLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXG5cblxubGV0IF9sYXN0TVNlY3MgPSAwO1xubGV0IF9sYXN0TlNlY3MgPSAwOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkIGZvciBBUEkgZGV0YWlsc1xuXG5mdW5jdGlvbiB2MShvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICBsZXQgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcbiAgY29uc3QgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgbGV0IGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgY29uc3Qgc2VlZEJ5dGVzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTtcblxuICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgIC8vIFBlciA0LjUsIGNyZWF0ZSBhbmQgNDgtYml0IG5vZGUgaWQsICg0NyByYW5kb20gYml0cyArIG11bHRpY2FzdCBiaXQgPSAxKVxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbc2VlZEJ5dGVzWzBdIHwgMHgwMSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuICAgIH1cblxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgIH1cbiAgfSAvLyBVVUlEIHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cblxuXG4gIGxldCBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBEYXRlLm5vdygpOyAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXG4gIC8vIGN5Y2xlIHRvIHNpbXVsYXRlIGhpZ2hlciByZXNvbHV0aW9uIGNsb2NrXG5cbiAgbGV0IG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxOyAvLyBUaW1lIHNpbmNlIGxhc3QgdXVpZCBjcmVhdGlvbiAoaW4gbXNlY3MpXG5cbiAgY29uc3QgZHQgPSBtc2VjcyAtIF9sYXN0TVNlY3MgKyAobnNlY3MgLSBfbGFzdE5TZWNzKSAvIDEwMDAwOyAvLyBQZXIgNC4yLjEuMiwgQnVtcCBjbG9ja3NlcSBvbiBjbG9jayByZWdyZXNzaW9uXG5cbiAgaWYgKGR0IDwgMCAmJiBvcHRpb25zLmNsb2Nrc2VxID09PSB1bmRlZmluZWQpIHtcbiAgICBjbG9ja3NlcSA9IGNsb2Nrc2VxICsgMSAmIDB4M2ZmZjtcbiAgfSAvLyBSZXNldCBuc2VjcyBpZiBjbG9jayByZWdyZXNzZXMgKG5ldyBjbG9ja3NlcSkgb3Igd2UndmUgbW92ZWQgb250byBhIG5ld1xuICAvLyB0aW1lIGludGVydmFsXG5cblxuICBpZiAoKGR0IDwgMCB8fCBtc2VjcyA+IF9sYXN0TVNlY3MpICYmIG9wdGlvbnMubnNlY3MgPT09IHVuZGVmaW5lZCkge1xuICAgIG5zZWNzID0gMDtcbiAgfSAvLyBQZXIgNC4yLjEuMiBUaHJvdyBlcnJvciBpZiB0b28gbWFueSB1dWlkcyBhcmUgcmVxdWVzdGVkXG5cblxuICBpZiAobnNlY3MgPj0gMTAwMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlY1wiKTtcbiAgfVxuXG4gIF9sYXN0TVNlY3MgPSBtc2VjcztcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xuICBfY2xvY2tzZXEgPSBjbG9ja3NlcTsgLy8gUGVyIDQuMS40IC0gQ29udmVydCBmcm9tIHVuaXggZXBvY2ggdG8gR3JlZ29yaWFuIGVwb2NoXG5cbiAgbXNlY3MgKz0gMTIyMTkyOTI4MDAwMDA7IC8vIGB0aW1lX2xvd2BcblxuICBjb25zdCB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICBjb25zdCB0bWggPSBtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDAgJiAweGZmZmZmZmY7XG4gIGJbaSsrXSA9IHRtaCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7IC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXG5cbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmOyAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcblxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7IC8vIGBjbG9ja19zZXFfbG93YFxuXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjsgLy8gYG5vZGVgXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cblxuICByZXR1cm4gYnVmIHx8ICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkoYik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHYxO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjM1LmpzXCIpKTtcblxudmFyIF9tZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWQ1LmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuY29uc3QgdjMgPSAoMCwgX3YuZGVmYXVsdCkoJ3YzJywgMHgzMCwgX21kLmRlZmF1bHQpO1xudmFyIF9kZWZhdWx0ID0gdjM7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVVJMID0gZXhwb3J0cy5ETlMgPSB2b2lkIDA7XG5leHBvcnRzLmRlZmF1bHQgPSB2MzU7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gIHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTsgLy8gVVRGOCBlc2NhcGVcblxuICBjb25zdCBieXRlcyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgYnl0ZXMucHVzaChzdHIuY2hhckNvZGVBdChpKSk7XG4gIH1cblxuICByZXR1cm4gYnl0ZXM7XG59XG5cbmNvbnN0IEROUyA9ICc2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnO1xuZXhwb3J0cy5ETlMgPSBETlM7XG5jb25zdCBVUkwgPSAnNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuVVJMID0gVVJMO1xuXG5mdW5jdGlvbiB2MzUobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIF9uYW1lc3BhY2U7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBzdHJpbmdUb0J5dGVzKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWVzcGFjZSA9ICgwLCBfcGFyc2UuZGVmYXVsdCkobmFtZXNwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoKChfbmFtZXNwYWNlID0gbmFtZXNwYWNlKSA9PT0gbnVsbCB8fCBfbmFtZXNwYWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmFtZXNwYWNlLmxlbmd0aCkgIT09IDE2KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ05hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSknKTtcbiAgICB9IC8vIENvbXB1dGUgaGFzaCBvZiBuYW1lc3BhY2UgYW5kIHZhbHVlLCBQZXIgNC4zXG4gICAgLy8gRnV0dXJlOiBVc2Ugc3ByZWFkIHN5bnRheCB3aGVuIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zLCBlLmcuIGBieXRlcyA9XG4gICAgLy8gaGFzaGZ1bmMoWy4uLm5hbWVzcGFjZSwgLi4uIHZhbHVlXSlgXG5cblxuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWUubGVuZ3RoKTtcbiAgICBieXRlcy5zZXQobmFtZXNwYWNlKTtcbiAgICBieXRlcy5zZXQodmFsdWUsIG5hbWVzcGFjZS5sZW5ndGgpO1xuICAgIGJ5dGVzID0gaGFzaGZ1bmMoYnl0ZXMpO1xuICAgIGJ5dGVzWzZdID0gYnl0ZXNbNl0gJiAweDBmIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IGJ5dGVzWzhdICYgMHgzZiB8IDB4ODA7XG5cbiAgICBpZiAoYnVmKSB7XG4gICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGJ5dGVzKTtcbiAgfSAvLyBGdW5jdGlvbiNuYW1lIGlzIG5vdCBzZXR0YWJsZSBvbiBzb21lIHBsYXRmb3JtcyAoIzI3MClcblxuXG4gIHRyeSB7XG4gICAgZ2VuZXJhdGVVVUlELm5hbWUgPSBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgfSBjYXRjaCAoZXJyKSB7fSAvLyBGb3IgQ29tbW9uSlMgZGVmYXVsdCBleHBvcnQgc3VwcG9ydFxuXG5cbiAgZ2VuZXJhdGVVVUlELkROUyA9IEROUztcbiAgZ2VuZXJhdGVVVUlELlVSTCA9IFVSTDtcbiAgcmV0dXJuIGdlbmVyYXRlVVVJRDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9uYXRpdmUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25hdGl2ZS5qc1wiKSk7XG5cbnZhciBfcm5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ybmcuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gX25hdGl2ZS5kZWZhdWx0LnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGNvbnN0IHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgX3JuZy5kZWZhdWx0KSgpOyAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG5cblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKHJuZHMpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2NDtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzNS5qc1wiKSk7XG5cbnZhciBfc2hhID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zaGExLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuY29uc3QgdjUgPSAoMCwgX3YuZGVmYXVsdCkoJ3Y1JywgMHg1MCwgX3NoYS5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IHY1O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfcmVnZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JlZ2V4LmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdmFsaWRhdGUodXVpZCkge1xuICByZXR1cm4gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnICYmIF9yZWdleC5kZWZhdWx0LnRlc3QodXVpZCk7XG59XG5cbnZhciBfZGVmYXVsdCA9IHZhbGlkYXRlO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gdmVyc2lvbih1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTUpLCAxNik7XG59XG5cbnZhciBfZGVmYXVsdCA9IHZlcnNpb247XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNjA3KTtcbiJdLCJuYW1lcyI6WyJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwic2VsZiIsIlJlZmVyZW5jZUVycm9yIiwiX2V4dGVuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ0YXJnZXQiLCJpIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic291cmNlIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJ0aGlzIiwiX2luaGVyaXRzTG9vc2UiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIl9fcHJvdG9fXyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiZXhjbHVkZWQiLCJzb3VyY2VLZXlzIiwia2V5cyIsImluZGV4T2YiLCJvcHRpb25zIiwiY2FwdHVyZSIsInVzZU91dHNpZGVDbGljayIsImNhbGxiYWNrIiwicmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaGFuZGxlQ2xpY2siLCJldmVudCIsImN1cnJlbnQiLCJjb250YWlucyIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX3JlYWQiLCJvIiwibiIsIm0iLCJTeW1ib2wiLCJpdGVyYXRvciIsInIiLCJlIiwiYXIiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImVycm9yIiwidXNlUHJvbWlzZSIsIl90aGlzIiwiX2EiLCJ1c2VTdGF0ZSIsImRhdGEiLCJ1bmRlZmluZWQiLCJpc1BlbmRpbmciLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsImlzU2V0dGxlZCIsInJlc3VsdCIsInNldFJlc3VsdCIsImhhc1VubW91bnRlZCIsImRpc3BhdGNoIiwidXNlQ2FsbGJhY2siLCJwcm9taXNlIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJnZW5lcmF0b3IiLCJlcnJvcl8xIiwiYm9keSIsImYiLCJ5IiwidCIsImciLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJzdGVwIiwiX19nZW5lcmF0b3IiLCJQIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInRoZW4iLCJTV1JHbG9iYWxTdGF0ZSIsIldlYWtNYXAiLCJFTVBUWV9DQUNIRSIsIklOSVRJQUxfQ0FDSEUiLCJub29wIiwiVU5ERUZJTkVEIiwiT0JKRUNUIiwiaXNVbmRlZmluZWQiLCJpc0Z1bmN0aW9uIiwibWVyZ2VPYmplY3RzIiwiYSIsImIiLCJTVFJfVU5ERUZJTkVEIiwiaXNXaW5kb3dEZWZpbmVkIiwid2luZG93IiwiaXNEb2N1bWVudERlZmluZWQiLCJjcmVhdGVDYWNoZUhlbHBlciIsImNhY2hlIiwic3RhdGUiLCJnZXQiLCJpbmZvIiwicHJldiIsInRhYmxlIiwiY291bnRlciIsInN0YWJsZUhhc2giLCJhcmciLCJ0eXBlIiwiaXNEYXRlIiwiRGF0ZSIsImluZGV4IiwiUmVnRXhwIiwidG9KU09OIiwidG9TdHJpbmciLCJKU09OIiwic3RyaW5naWZ5Iiwic2V0IiwiQXJyYXkiLCJzb3J0Iiwib25saW5lIiwib25XaW5kb3dFdmVudCIsIm9mZldpbmRvd0V2ZW50IiwiYmluZCIsInByZXNldCIsImlzT25saW5lIiwiaXNWaXNpYmxlIiwidmlzaWJpbGl0eVN0YXRlIiwiZGVmYXVsdENvbmZpZ09wdGlvbnMiLCJpbml0Rm9jdXMiLCJpbml0UmVjb25uZWN0Iiwib25PbmxpbmUiLCJvbk9mZmxpbmUiLCJJU19SRUFDVF9MRUdBQ1kiLCJJU19TRVJWRVIiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwibmF2aWdhdG9yQ29ubmVjdGlvbiIsIm5hdmlnYXRvciIsImNvbm5lY3Rpb24iLCJzbG93Q29ubmVjdGlvbiIsImluY2x1ZGVzIiwiZWZmZWN0aXZlVHlwZSIsInNhdmVEYXRhIiwiZXJyIiwiYXJncyIsImlzQXJyYXkiLCJfX3RpbWVzdGFtcCIsImdldFRpbWVzdGFtcCIsIk1VVEFURV9FVkVOVCIsImNvbnN0YW50cyIsImFzeW5jIiwiaW50ZXJuYWxNdXRhdGUiLCJfa2V5IiwiX2RhdGEiLCJfb3B0cyIsInBvcHVsYXRlQ2FjaGUiLCJ0aHJvd09uRXJyb3IiLCJyZXZhbGlkYXRlIiwicm9sbGJhY2tPbkVycm9yT3B0aW9uIiwicm9sbGJhY2tPbkVycm9yIiwib3B0aW1pc3RpY0RhdGEiLCJrZXlGaWx0ZXIiLCJtYXRjaGVkS2V5cyIsIml0Iiwia2V5SXQiLCJ0ZXN0IiwiX2siLCJhbGwiLCJtYXAiLCJtdXRhdGVCeUtleSIsIkVWRU5UX1JFVkFMSURBVE9SUyIsIk1VVEFUSU9OIiwiRkVUQ0giLCJyZXZhbGlkYXRvcnMiLCJzdGFydFJldmFsaWRhdGUiLCJiZWZvcmVNdXRhdGlvblRzIiwiaGFzT3B0aW1pc3RpY0RhdGEiLCJkaXNwbGF5ZWREYXRhIiwiY3VycmVudERhdGEiLCJfYyIsImNvbW1pdHRlZERhdGEiLCJjYXRjaCIsInJlcyIsInJldmFsaWRhdGVBbGxLZXlzIiwiaW5pdENhY2hlIiwicHJvdmlkZXIiLCJoYXMiLCJvcHRzIiwibXV0YXRlIiwidW5tb3VudCIsInN1YnNjcmlwdGlvbnMiLCJzdWJzY3JpYmUiLCJzdWJzIiwic3BsaWNlIiwic2V0dGVyIiwiZm4iLCJpbml0UHJvdmlkZXIiLCJyZWxlYXNlRm9jdXMiLCJzZXRUaW1lb3V0IiwicmVsZWFzZVJlY29ubmVjdCIsImRlbGV0ZSIsIk1hcCIsImRlZmF1bHRDb25maWciLCJvbkxvYWRpbmdTbG93Iiwib25TdWNjZXNzIiwib25FcnJvciIsIm9uRXJyb3JSZXRyeSIsIl9fIiwiY29uZmlnIiwibWF4UmV0cnlDb3VudCIsImVycm9yUmV0cnlDb3VudCIsImN1cnJlbnRSZXRyeUNvdW50IiwicmV0cnlDb3VudCIsInRpbWVvdXQiLCJNYXRoIiwicmFuZG9tIiwiZXJyb3JSZXRyeUludGVydmFsIiwib25EaXNjYXJkZWQiLCJyZXZhbGlkYXRlT25Gb2N1cyIsInJldmFsaWRhdGVPblJlY29ubmVjdCIsInJldmFsaWRhdGVJZlN0YWxlIiwic2hvdWxkUmV0cnlPbkVycm9yIiwiZm9jdXNUaHJvdHRsZUludGVydmFsIiwiZGVkdXBpbmdJbnRlcnZhbCIsImxvYWRpbmdUaW1lb3V0IiwiY29tcGFyZSIsIm5ld0RhdGEiLCJpc1BhdXNlZCIsImZhbGxiYWNrIiwiU1dSQ29uZmlnQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJlbmFibGVEZXZ0b29scyIsIl9fU1dSX0RFVlRPT0xTX1VTRV9fIiwidXNlIiwidXNlU1dSQ29uZmlnIiwidXNlQ29udGV4dCIsImNvbmNhdCIsInVzZVNXUk5leHQiLCJrZXlfIiwiZmV0Y2hlcl8iLCJQUkVMT0FEIiwicmVxIiwiX19TV1JfREVWVE9PTFNfUkVBQ1RfXyIsIldJVEhfREVEVVBFIiwiZGVkdXBlIiwidXNlU1dSSG9va3NDb25maWciLCJzd3JDb25maWciLCJ1c2VNZW1vIiwidXNlVG9nZ2xlIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJuZXdWYWx1ZSIsInByZXZWYWx1ZSIsImRlZmluZVByb3BlcnR5IiwicHJvcHMiLCJwYXJlbnRDb25maWciLCJpc0Z1bmN0aW9uYWxDb25maWciLCJleHRlbmRlZENvbmZpZyIsInUxIiwiZjEiLCJ1MiIsImYyIiwibWVyZ2VDb25maWdzIiwiY2FjaGVDb250ZXh0UmVmIiwiY2FjaGVDb250ZXh0IiwiY3JlYXRlRWxlbWVudCIsIlByb3ZpZGVyIiwiY2MiLCJvYmoiLCJvdXQiLCJ0bXAiLCJrIiwiX19hc3NpZ24iLCJzIiwicCIsIl9fY3JlYXRlQmluZGluZyIsImsyIiwiZW51bWVyYWJsZSIsIl9fc2V0TW9kdWxlRGVmYXVsdCIsIl9faW1wb3J0U3RhciIsIm1vZCIsIl9fZXNNb2R1bGUiLCJleHBvcnRzIiwiSGludCIsInJlYWN0XzEiLCJ1dGlsc18xIiwiX2IiLCJjaGlsZCIsImRlZmF1bHQiLCJDaGlsZHJlbiIsIm9ubHkiLCJjaGlsZHJlbiIsInRvTG93ZXJDYXNlIiwiZGlzYWJsZUhpbnQiLCJhbGxvd1RhYkZpbGwiLCJhbGxvd0VudGVyRmlsbCIsIm9uRmlsbCIsIm9uSGludCIsInZhbHVlTW9kaWZpZXIiLCJjaGlsZFByb3BzIiwibWFpbklucHV0UmVmIiwiaGludFdyYXBwZXJSZWYiLCJoaW50UmVmIiwidW5Nb2RpZmllZElucHV0VGV4dCIsInNldFVubW9kaWZpZWRJbnB1dFRleHQiLCJfZCIsInRleHQiLCJzZXRUZXh0IiwiX2UiLCJoaW50Iiwic2V0SGludCIsIl9mIiwibWF0Y2giLCJzZXRNYXRjaCIsIl9nIiwiY2hhbmdlRXZlbnQiLCJzZXRDaGFuZ2VFdmVudCIsImR1cGxpY2F0ZSIsImdldEZpcnN0RHVwbGljYXRlT3B0aW9uIiwiY29uc29sZSIsIndhcm4iLCJpbnB1dFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlSGludCIsInNldEhpbnRUZXh0QW5kSWQiLCJmaWx0ZXIiLCJ4Iiwic3RhcnRzV2l0aCIsInNvcnRBc2MiLCJnZXRNYXRjaCIsInNsaWNlIiwiaGFuZGxlT25GaWxsIiwibmV3VW5Nb2RpZmllZFRleHQiLCJvbkNoYW5nZSIsInN0eWxlIiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwid2lkdGgiLCJoZWlnaHQiLCJsaW5lSGVpZ2h0IiwiYm94U2l6aW5nIiwibWFyZ2luIiwiaW50ZXJwb2xhdGVTdHlsZSIsInBhZGRpbmciLCJib3JkZXJTdHlsZSIsImJvcmRlcldpZHRoIiwiY2hpbGRSZWYiLCJjbG9uZUVsZW1lbnQiLCJtYWluSW5wdXQiLCJwZXJzaXN0IiwibW9kaWZpZWRWYWx1ZSIsIm9uQmx1ciIsInJlbGF0ZWRUYXJnZXQiLCJvbkZvY3VzIiwib25LZXlEb3duIiwiY2FyZXRJc0F0VGV4dEVuZCIsImN1cnJlbnRUYXJnZXQiLCJzZWxlY3Rpb25FbmQiLCJwcmV2ZW50RGVmYXVsdCIsIm1lcmdlUmVmcyIsImNsYXNzTmFtZSIsInBvc2l0aW9uIiwiRnJhZ21lbnQiLCJkaXNwbGF5IiwicG9pbnRlckV2ZW50cyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlckNvbG9yIiwiYm94U2hhZG93IiwiY29sb3IiLCJ0b3AiLCJsZWZ0IiwidmlzaWJpbGl0eSIsIndoaXRlU3BhY2UiLCJvbkNsaWNrIiwiaGludENhcmV0UG9zaXRpb24iLCJmb2N1cyIsImNhcmV0UG9zaXRpb24iLCJzZXRTZWxlY3Rpb25SYW5nZSIsImJhY2tncm91bmQiLCJvdXRsaW5lIiwiYm9yZGVyIiwiY2FyZXRDb2xvciIsImRlZmF1bHRWYWx1ZSIsInRhYkluZGV4IiwicmVmcyIsIl9pIiwiZmlsdGVyZWRSZWZzIiwiQm9vbGVhbiIsImluc3QiLCJmaWx0ZXJlZFJlZnNfMSIsInN0eWxlcyIsImF0dHIiLCJzdWJhdHRyIiwicmVwbGFjZSIsInRvVXBwZXJDYXNlIiwiZGlyIiwiam9pbiIsImFycmF5IiwidHJhY2tlciIsImlzZmYiLCJ1c2VyQWdlbnQiLCJhZGRFdmVudCIsIm9iamVjdCIsIm1ldGhvZCIsInVzZUNhcHR1cmUiLCJhdHRhY2hFdmVudCIsImdldE1vZHMiLCJtb2RpZmllciIsIm1vZHMiLCJnZXRLZXlzIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsIl9rZXlNYXAiLCJiYWNrc3BhY2UiLCJ0YWIiLCJjbGVhciIsImVudGVyIiwicmV0dXJuIiwiZXNjIiwiZXNjYXBlIiwic3BhY2UiLCJ1cCIsInJpZ2h0IiwiZG93biIsImRlbCIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiX21vZGlmaWVyIiwic2hpZnQiLCJhbHQiLCJvcHRpb24iLCJjdHJsIiwiY29udHJvbCIsImNtZCIsImNvbW1hbmQiLCJtb2RpZmllck1hcCIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIndpbkxpc3RlbmRGb2N1cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmIiwiX3JlZiRzcGxpdEtleSIsInNwbGl0S2V5IiwiZm9yRWFjaCIsIm9yaWdpbktleSIsInVuYmluZEtleXMiLCJsZW4iLCJsYXN0S2V5Iiwia2V5Q29kZSIsInJlY29yZCIsImExIiwiYTIiLCJhcnIxIiwiYXJyMiIsImlzSW5kZXgiLCJjb21wYXJlQXJyYXkiLCJldmVudEhhbmRsZXIiLCJoYW5kbGVyIiwiZWxlbWVudCIsIm1vZGlmaWVyc01hdGNoIiwic2hvcnRjdXQiLCJyZXR1cm5WYWx1ZSIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsImFzdGVyaXNrIiwid2hpY2giLCJjaGFyQ29kZSIsImhvdGtleXMiLCJrZXlOYW1lIiwia2V5TnVtIiwiZ2V0TW9kaWZpZXJTdGF0ZSIsImtleWRvd24iLCJrZXl1cCIsImtleVNob3J0Y3V0IiwiX2Rvd25LZXlzQ3VycmVudCIsImlzRWxlbWVudEJpbmQiLCJjbGVhck1vZGlmaWVyIiwiX2FwaSIsImRlbGV0ZVNjb3BlIiwibmV3U2NvcGUiLCJoYW5kbGVycyIsImdldFByZXNzZWRLZXlDb2RlcyIsImlzUHJlc3NlZCIsInNyY0VsZW1lbnQiLCJ0YWdOYW1lIiwiZmxhZyIsImlzQ29udGVudEVkaXRhYmxlIiwicmVhZE9ubHkiLCJ0cmlnZ2VyIiwiZmluZCIsIml0ZW0iLCJ1bmJpbmQiLCJrZXlzSW5mbyIsIl9sZW4iLCJrZXlNYXAiLCJfaG90a2V5cyIsIm5vQ29uZmxpY3QiLCJkZWVwIiwidXNlSXNIb3RrZXlQcmVzc2VkIiwidGFnRmlsdGVyIiwiZW5hYmxlT25UYWdzIiwidGFyZ2V0VGFnTmFtZSIsImlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQiLCJldiIsInVzZUhvdGtleXMiLCJkZXBzIiwiX3JlZjIiLCJfcmVmMiRmaWx0ZXJQcmV2ZW50RGUiLCJmaWx0ZXJQcmV2ZW50RGVmYXVsdCIsIl9yZWYyJGVuYWJsZWQiLCJlbmFibGVkIiwiX3JlZjIkZW5hYmxlT25Db250ZW50IiwiZW5hYmxlT25Db250ZW50RWRpdGFibGUiLCJtZW1vaXNlZENhbGxiYWNrIiwia2V5Ym9hcmRFdmVudCIsImhvdGtleXNFdmVudCIsIl9rZXlib2FyZEV2ZW50JHRhcmdldCIsIl9yZWYkY3VycmVudCIsImFjdGl2ZUVsZW1lbnQiLCJpc0hvdGtleVByZXNzZWQiLCJyZXBsYWNlQ2xhc3NOYW1lIiwib3JpZ0NsYXNzIiwiY2xhc3NUb1JlbW92ZSIsImRpc2FibGVkIiwiZm9yY2VSZWZsb3ciLCJub2RlIiwic2Nyb2xsVG9wIiwiVU5NT1VOVEVEIiwiRVhJVEVEIiwiRU5URVJJTkciLCJFTlRFUkVEIiwiRVhJVElORyIsIlRyYW5zaXRpb24iLCJfUmVhY3QkQ29tcG9uZW50IiwiY29udGV4dCIsImluaXRpYWxTdGF0dXMiLCJhcHBlYXIiLCJpc01vdW50aW5nIiwiYXBwZWFyU3RhdHVzIiwiaW4iLCJ1bm1vdW50T25FeGl0IiwibW91bnRPbkVudGVyIiwic3RhdHVzIiwibmV4dENhbGxiYWNrIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwicHJldlN0YXRlIiwiX3Byb3RvIiwiY29tcG9uZW50RGlkTW91bnQiLCJ1cGRhdGVTdGF0dXMiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJuZXh0U3RhdHVzIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjYW5jZWxOZXh0Q2FsbGJhY2siLCJnZXRUaW1lb3V0cyIsImV4aXQiLCJtb3VudGluZyIsIm5vZGVSZWYiLCJwZXJmb3JtRW50ZXIiLCJwZXJmb3JtRXhpdCIsInNldFN0YXRlIiwiX3RoaXMyIiwiYXBwZWFyaW5nIiwibWF5YmVOb2RlIiwibWF5YmVBcHBlYXJpbmciLCJ0aW1lb3V0cyIsImVudGVyVGltZW91dCIsInNhZmVTZXRTdGF0ZSIsIm9uRW50ZXJlZCIsIm9uRW50ZXIiLCJvbkVudGVyaW5nIiwib25UcmFuc2l0aW9uRW5kIiwiX3RoaXMzIiwib25FeGl0Iiwib25FeGl0aW5nIiwib25FeGl0ZWQiLCJjYW5jZWwiLCJuZXh0U3RhdGUiLCJzZXROZXh0Q2FsbGJhY2siLCJfdGhpczQiLCJhY3RpdmUiLCJkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyIiwiYWRkRW5kTGlzdGVuZXIiLCJfcmVmMyIsIm1heWJlTmV4dENhbGxiYWNrIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJUcmFuc2l0aW9uR3JvdXBDb250ZXh0IiwiY29udGV4dFR5cGUiLCJwcm9wVHlwZXMiLCJkZWZhdWx0UHJvcHMiLCJyZW1vdmVDbGFzcyIsImNsYXNzZXMiLCJjIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwic2V0QXR0cmlidXRlIiwiYmFzZVZhbCIsIkNTU1RyYW5zaXRpb24iLCJhcHBsaWVkQ2xhc3NlcyIsIl90aGlzJHJlc29sdmVBcmd1bWVudCIsInJlc29sdmVBcmd1bWVudHMiLCJyZW1vdmVDbGFzc2VzIiwiYWRkQ2xhc3MiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQyIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyIsImdldENsYXNzTmFtZXMiLCJjbGFzc05hbWVzIiwiaXNTdHJpbmdDbGFzc05hbWVzIiwiYmFzZUNsYXNzTmFtZSIsImFjdGl2ZUNsYXNzTmFtZSIsImRvbmVDbGFzc05hbWUiLCJwaGFzZSIsImFkZCIsImhhc0NsYXNzIiwiX2FkZENsYXNzIiwiX3RoaXMkYXBwbGllZENsYXNzZXMkIiwiYmFzZSIsImdldENoaWxkTWFwcGluZyIsIm1hcEZuIiwiaXNWYWxpZEVsZW1lbnQiLCJtYXBwZXIiLCJnZXRQcm9wIiwicHJvcCIsImdldE5leHRDaGlsZE1hcHBpbmciLCJuZXh0UHJvcHMiLCJwcmV2Q2hpbGRNYXBwaW5nIiwibmV4dENoaWxkTWFwcGluZyIsImdldFZhbHVlRm9yS2V5IiwibmV4dEtleXNQZW5kaW5nIiwicGVuZGluZ0tleXMiLCJwcmV2S2V5IiwiY2hpbGRNYXBwaW5nIiwibmV4dEtleSIsInBlbmRpbmdOZXh0S2V5IiwibWVyZ2VDaGlsZE1hcHBpbmdzIiwiaGFzUHJldiIsImhhc05leHQiLCJwcmV2Q2hpbGQiLCJpc0xlYXZpbmciLCJ2YWx1ZXMiLCJUcmFuc2l0aW9uR3JvdXAiLCJoYW5kbGVFeGl0ZWQiLCJjb250ZXh0VmFsdWUiLCJmaXJzdFJlbmRlciIsIm1vdW50ZWQiLCJjdXJyZW50Q2hpbGRNYXBwaW5nIiwiQ29tcG9uZW50IiwiY29tcG9uZW50IiwiY2hpbGRGYWN0b3J5IiwiUmVwbGFjZVRyYW5zaXRpb24iLCJfYXJncyIsImhhbmRsZUVudGVyIiwiX2xlbjIiLCJfa2V5MiIsImhhbmRsZUxpZmVjeWNsZSIsImhhbmRsZUVudGVyaW5nIiwiX2xlbjMiLCJfa2V5MyIsImhhbmRsZUVudGVyZWQiLCJfbGVuNCIsIl9rZXk0IiwiaGFuZGxlRXhpdCIsIl9sZW41IiwiX2tleTUiLCJoYW5kbGVFeGl0aW5nIiwiX2xlbjYiLCJfa2V5NiIsIl9sZW43IiwiX2tleTciLCJpZHgiLCJvcmlnaW5hbEFyZ3MiLCJfY2hpbGQkcHJvcHMiLCJpblByb3AiLCJfUmVhY3QkQ2hpbGRyZW4kdG9BcnIiLCJmaXJzdCIsInNlY29uZCIsIl9sZWF2ZVJlbmRlcnMiLCJfZW50ZXJSZW5kZXJzIiwibW9kZXMiLCJjYWxsSG9vayIsIm5hbWUiLCJjYiIsIl9lbGVtZW50JHByb3BzIiwibGVhdmVSZW5kZXJzIiwiY2hhbmdlU3RhdGUiLCJlbnRlclJlbmRlcnMiLCJfcmVmNCIsIlN3aXRjaFRyYW5zaXRpb24iLCJhcHBlYXJlZCIsIm1vZGUiLCJvbGRDaGlsZHJlbiIsIm5ld0NoaWxkcmVuIiwiX3RoaXMkc3RhdGUiLCJjcmVhdGVDbGFzcyIsImRlZmluZVByb3BlcnRpZXMiLCJkZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJJbmZpbml0ZUxvYWRlciIsIl9QdXJlQ29tcG9uZW50IiwiX3RlbXAiLCJpbnN0YW5jZSIsImNsYXNzQ2FsbENoZWNrIiwiZ2V0UHJvdG90eXBlT2YiLCJfbGFzdFJlbmRlcmVkU3RhcnRJbmRleCIsIl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgiLCJfbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyIsIl9vbkl0ZW1zUmVuZGVyZWQiLCJ2aXNpYmxlU3RhcnRJbmRleCIsInZpc2libGVTdG9wSW5kZXgiLCJfZW5zdXJlUm93c0xvYWRlZCIsIl9zZXRSZWYiLCJsaXN0UmVmIiwiX2xpc3RSZWYiLCJzZXRQcm90b3R5cGVPZiIsImluaGVyaXRzIiwiYXV0b1JlbG9hZCIsIm9uSXRlbXNSZW5kZXJlZCIsInN0YXJ0SW5kZXgiLCJzdG9wSW5kZXgiLCJfcHJvcHMiLCJpc0l0ZW1Mb2FkZWQiLCJpdGVtQ291bnQiLCJfcHJvcHMkbWluaW11bUJhdGNoU2kiLCJtaW5pbXVtQmF0Y2hTaXplIiwiX3Byb3BzJHRocmVzaG9sZCIsInRocmVzaG9sZCIsInVubG9hZGVkUmFuZ2VzIiwicmFuZ2VTdGFydEluZGV4IiwicmFuZ2VTdG9wSW5kZXgiLCJfaW5kZXgiLCJwb3RlbnRpYWxTdG9wSW5kZXgiLCJtaW4iLCJtYXgiLCJfaW5kZXgyIiwiX2luZGV4MyIsInNjYW5Gb3JVbmxvYWRlZFJhbmdlcyIsInNvbWUiLCJzdGFydE9yU3RvcCIsIl9sb2FkVW5sb2FkZWRSYW5nZXMiLCJsb2FkTW9yZUl0ZW1zIiwibG9hZE1vcmVSb3dzIiwiX2xvb3AiLCJsYXN0UmVuZGVyZWRTdGFydEluZGV4IiwibGFzdFJlbmRlcmVkU3RvcEluZGV4IiwicmVzZXRBZnRlckluZGV4IiwiX2dldEl0ZW1TdHlsZUNhY2hlIiwiZm9yY2VVcGRhdGUiLCJQdXJlQ29tcG9uZW50Iiwic2FmZUlzTmFOIiwiTnVtYmVyIiwiaXNOYU4iLCJhcmVJbnB1dHNFcXVhbCIsIm5ld0lucHV0cyIsImxhc3RJbnB1dHMiLCJyZXN1bHRGbiIsImlzRXF1YWwiLCJsYXN0VGhpcyIsImxhc3RSZXN1bHQiLCJsYXN0QXJncyIsImNhbGxlZE9uY2UiLCJuZXdBcmdzIiwibm93IiwicGVyZm9ybWFuY2UiLCJjYW5jZWxUaW1lb3V0IiwidGltZW91dElEIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJpZCIsInJlcXVlc3RUaW1lb3V0IiwiZGVsYXkiLCJzdGFydCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInRpY2siLCJzaXplIiwiZ2V0U2Nyb2xsYmFyU2l6ZSIsInJlY2FsY3VsYXRlIiwiZGl2Iiwib3ZlcmZsb3ciLCJhcHBlbmRDaGlsZCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJyZW1vdmVDaGlsZCIsImNhY2hlZFJUTFJlc3VsdCIsImdldFJUTE9mZnNldFR5cGUiLCJvdXRlckRpdiIsIm91dGVyU3R5bGUiLCJkaXJlY3Rpb24iLCJpbm5lckRpdiIsImlubmVyU3R5bGUiLCJzY3JvbGxMZWZ0IiwiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMIiwiZGVmYXVsdEl0ZW1LZXkiLCJjb2x1bW5JbmRleCIsInJvd0luZGV4IiwiY3JlYXRlR3JpZENvbXBvbmVudCIsIl9jbGFzcyIsImdldENvbHVtbk9mZnNldCIsImdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiZ2V0Q29sdW1uV2lkdGgiLCJnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCIsImdldEVzdGltYXRlZFRvdGFsV2lkdGgiLCJnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQiLCJnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQiLCJnZXRSb3dIZWlnaHQiLCJnZXRSb3dPZmZzZXQiLCJnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0IiwiZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsImluaXRJbnN0YW5jZVByb3BzIiwic2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSIsInZhbGlkYXRlUHJvcHMiLCJHcmlkIiwiX2luc3RhbmNlUHJvcHMiLCJfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCIsIl9vdXRlclJlZiIsImlzU2Nyb2xsaW5nIiwiaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxMZWZ0IiwiaW5pdGlhbFNjcm9sbFRvcCIsInNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsInZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uIiwiX2NhbGxPbkl0ZW1zUmVuZGVyZWQiLCJvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgiLCJvdmVyc2NhbkNvbHVtblN0b3BJbmRleCIsIm92ZXJzY2FuUm93U3RhcnRJbmRleCIsIm92ZXJzY2FuUm93U3RvcEluZGV4IiwidmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgiLCJ2aXNpYmxlQ29sdW1uU3RvcEluZGV4IiwidmlzaWJsZVJvd1N0YXJ0SW5kZXgiLCJ2aXNpYmxlUm93U3RvcEluZGV4IiwiX2NhbGxPblNjcm9sbCIsIm9uU2Nyb2xsIiwiX2dldEl0ZW1TdHlsZSIsImNvbHVtbldpZHRoIiwicm93SGVpZ2h0IiwiaXRlbVN0eWxlQ2FjaGUiLCJfb2Zmc2V0IiwiaXNSdGwiLCJfX18iLCJfb25TY3JvbGwiLCJfZXZlbnQkY3VycmVudFRhcmdldCIsImNsaWVudEhlaWdodCIsInNjcm9sbEhlaWdodCIsInNjcm9sbFdpZHRoIiwiY2FsY3VsYXRlZFNjcm9sbExlZnQiLCJjYWxjdWxhdGVkU2Nyb2xsVG9wIiwiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCJfb3V0ZXJSZWZTZXR0ZXIiLCJvdXRlclJlZiIsIl9yZXNldElzU2Nyb2xsaW5nIiwidmFsaWRhdGVTaGFyZWRQcm9wcyIsInNjcm9sbFRvIiwic2Nyb2xsVG9JdGVtIiwiX3JlZjQkYWxpZ24iLCJhbGlnbiIsIl90aGlzJHByb3BzMiIsImNvbHVtbkNvdW50Iiwicm93Q291bnQiLCJzY3JvbGxiYXJTaXplIiwiZXN0aW1hdGVkVG90YWxIZWlnaHQiLCJob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSIsInZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSIsIl90aGlzJHByb3BzMyIsIl9jYWxsUHJvcHNDYWxsYmFja3MiLCJfdGhpcyRzdGF0ZTIiLCJfdGhpcyRwcm9wczQiLCJpbm5lclJlZiIsImlubmVyRWxlbWVudFR5cGUiLCJpbm5lclRhZ05hbWUiLCJpdGVtRGF0YSIsIl90aGlzJHByb3BzNCRpdGVtS2V5IiwiaXRlbUtleSIsIm91dGVyRWxlbWVudFR5cGUiLCJvdXRlclRhZ05hbWUiLCJ1c2VJc1Njcm9sbGluZyIsIl90aGlzJF9nZXRIb3Jpem9udGFsUiIsIl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlciIsImNvbHVtblN0YXJ0SW5kZXgiLCJjb2x1bW5TdG9wSW5kZXgiLCJfdGhpcyRfZ2V0VmVydGljYWxSYW4iLCJfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyIiwicm93U3RhcnRJbmRleCIsInJvd1N0b3BJbmRleCIsIml0ZW1zIiwiX3Jvd0luZGV4IiwiX2NvbHVtbkluZGV4IiwiZXN0aW1hdGVkVG90YWxXaWR0aCIsIldlYmtpdE92ZXJmbG93U2Nyb2xsaW5nIiwid2lsbENoYW5nZSIsIl90aGlzJHByb3BzNSIsIl90aGlzJF9nZXRIb3Jpem9udGFsUjIiLCJfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4IiwiX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdGFydEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJfdGhpcyRfZ2V0VmVydGljYWxSYW4yIiwiX292ZXJzY2FuUm93U3RhcnRJbmRleCIsIl9vdmVyc2NhblJvd1N0b3BJbmRleCIsIl92aXNpYmxlUm93U3RhcnRJbmRleCIsIl92aXNpYmxlUm93U3RvcEluZGV4IiwiX3RoaXMkc3RhdGUzIiwiX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsTGVmdCIsIl9zY3JvbGxUb3AiLCJfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwiX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uIiwiX3RoaXMkcHJvcHM2Iiwib3ZlcnNjYW5Db2x1bW5Db3VudCIsIm92ZXJzY2FuQ29sdW1uc0NvdW50Iiwib3ZlcnNjYW5Db3VudCIsIl90aGlzJHN0YXRlNCIsIm92ZXJzY2FuQ291bnRSZXNvbHZlZCIsIm92ZXJzY2FuQmFja3dhcmQiLCJvdmVyc2NhbkZvcndhcmQiLCJfdGhpcyRwcm9wczciLCJvdmVyc2NhblJvd0NvdW50Iiwib3ZlcnNjYW5Sb3dzQ291bnQiLCJfdGhpcyRzdGF0ZTUiLCJfcmVmNSIsIl9yZWY2Iiwicm93TWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRSb3dIZWlnaHQiLCJsYXN0TWVhc3VyZWRSb3dJbmRleCIsInRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzIiwiaXRlbU1ldGFkYXRhIiwib2Zmc2V0IiwiY29sdW1uTWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRDb2x1bW5XaWR0aCIsImxhc3RNZWFzdXJlZENvbHVtbkluZGV4IiwiZ2V0SXRlbU1ldGFkYXRhIiwiaXRlbVR5cGUiLCJpbnN0YW5jZVByb3BzIiwiaXRlbU1ldGFkYXRhTWFwIiwiaXRlbVNpemUiLCJsYXN0TWVhc3VyZWRJbmRleCIsImZpbmROZWFyZXN0SXRlbSIsImZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoIiwiaGlnaCIsImxvdyIsIm1pZGRsZSIsImZsb29yIiwiY3VycmVudE9mZnNldCIsImludGVydmFsIiwiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCJzY3JvbGxPZmZzZXQiLCJlc3RpbWF0ZWRUb3RhbFNpemUiLCJtYXhPZmZzZXQiLCJtaW5PZmZzZXQiLCJyb3VuZCIsIlZhcmlhYmxlU2l6ZUdyaWQiLCJyZXNldEFmdGVyQ29sdW1uSW5kZXgiLCJzaG91bGRGb3JjZVVwZGF0ZSIsInJlc2V0QWZ0ZXJJbmRpY2VzIiwicmVzZXRBZnRlclJvd0luZGV4IiwiX3JlZjYkc2hvdWxkRm9yY2VVcGRhIiwiX3JlZjciLCJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwkMSIsImRlZmF1bHRJdGVtS2V5JDEiLCJjcmVhdGVMaXN0Q29tcG9uZW50IiwiZ2V0SXRlbU9mZnNldCIsImdldEVzdGltYXRlZFRvdGFsU2l6ZSIsImdldEl0ZW1TaXplIiwiZ2V0U3RhcnRJbmRleEZvck9mZnNldCIsImdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJMaXN0Iiwic2Nyb2xsRGlyZWN0aW9uIiwiaW5pdGlhbFNjcm9sbE9mZnNldCIsIm92ZXJzY2FuU3RhcnRJbmRleCIsIm92ZXJzY2FuU3RvcEluZGV4IiwibGF5b3V0IiwiaXNIb3Jpem9udGFsIiwib2Zmc2V0SG9yaXpvbnRhbCIsIl9vblNjcm9sbEhvcml6b250YWwiLCJfb25TY3JvbGxWZXJ0aWNhbCIsIl9ldmVudCRjdXJyZW50VGFyZ2V0MiIsInZhbGlkYXRlU2hhcmVkUHJvcHMkMSIsIl90aGlzJHByb3BzNSRpdGVtS2V5IiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kIiwiX2dldFJhbmdlVG9SZW5kZXIiLCJfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyIiwiX292ZXJzY2FuU3RhcnRJbmRleCIsIl9vdmVyc2NhblN0b3BJbmRleCIsIl92aXNpYmxlU3RhcnRJbmRleCIsIl92aXNpYmxlU3RvcEluZGV4IiwiX3Njcm9sbERpcmVjdGlvbiIsIl9zY3JvbGxPZmZzZXQiLCJnZXRJdGVtTWV0YWRhdGEkMSIsImZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxIiwiZXN0aW1hdGVkSXRlbVNpemUiLCJ0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMiLCJWYXJpYWJsZVNpemVMaXN0IiwiZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMSIsImZpbmROZWFyZXN0SXRlbSQxIiwiRml4ZWRTaXplR3JpZCIsImxhc3RDb2x1bW5PZmZzZXQiLCJtaWRkbGVPZmZzZXQiLCJjZWlsIiwiX3JlZjgiLCJsYXN0Um93T2Zmc2V0IiwiX3JlZjkiLCJfcmVmMTAiLCJudW1WaXNpYmxlQ29sdW1ucyIsIl9yZWYxMSIsIl9yZWYxMiIsIm51bVZpc2libGVSb3dzIiwiX3JlZjEzIiwiRml4ZWRTaXplTGlzdCIsImxhc3RJdGVtT2Zmc2V0IiwibnVtVmlzaWJsZUl0ZW1zIiwic2hhbGxvd0RpZmZlcnMiLCJhdHRyaWJ1dGUiLCJfYXR0cmlidXRlIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImFyZUVxdWFsIiwicHJldlN0eWxlIiwicHJldlJlc3QiLCJuZXh0U3R5bGUiLCJuZXh0UmVzdCIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsInJlZ2V4IiwicGFyZW50cyIsInBzIiwicGFyZW50Tm9kZSIsImdldFByb3BlcnR5VmFsdWUiLCJzY3JvbGwiLCJIVE1MRWxlbWVudCIsIlNWR0VsZW1lbnQiLCJzY3JvbGxpbmdFbGVtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiwib25Qb2ludGVyRG93biIsImNvbnRhaW5lclJlZiIsImludmVydGVkIiwicm91bmRlZCIsIm5vU2hhZG93Iiwibm9QYWRkaW5nIiwibm9Cb3JkZXIiLCJ0cmFuc3BhcmVudCIsInN0cmV0Y2hIb3Jpem9udGFsbHkiLCJzdHJldGNoVmVydGljYWxseSIsImF1dG9Gb2N1cyIsIm9mZnNldFNpZGVzIiwiY29udGFpbmVyIiwibGVmdE9mZnNldCIsInJpZ2h0T2Zmc2V0Iiwicm9sZSIsImNvbnRlbnQiLCJidXR0b25CYWRnZSIsInBsYWNlaG9sZGVyIiwiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJoYW5kbGVDaGFuZ2UiLCJpbnB1dEVsZW1lbnQiLCJpbnB1dFJlZiIsImNoZWNrYm94IiwiTGFiZWwiLCJjb2xvcnMiLCJvblNlbGVjdCIsInNlbGVjdGVkQ29sb3IiLCJjYW5Ub2dnbGUiLCJjb2xvclBpY2tlciIsIkNvbG9yU3dhdGNoIiwiaXNTZWxlY3RlZCIsImNvbG9yU3dhdGNoIiwic2VsZWN0ZWQiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwiRHJhd2VyQ29udGV4dCIsIlRSQU5TSVRJT05fQ0xBU1NfTkFNRVMiLCJkcmF3ZXJQYXBlckVudGVyIiwiZW50ZXJBY3RpdmUiLCJkcmF3ZXJQYXBlckVudGVyQWN0aXZlIiwiZW50ZXJEb25lIiwiZHJhd2VyUGFwZXJFbnRlckRvbmUiLCJkcmF3ZXJQYXBlckV4aXQiLCJleGl0QWN0aXZlIiwiZHJhd2VyUGFwZXJFeGl0QWN0aXZlIiwiZXhpdERvbmUiLCJkcmF3ZXJQYXBlckV4aXREb25lIiwiRHJhd2VyIiwib3BlbiIsIm5vQ2xvc2VJY29uIiwicG9ydGFsQ29udGFpbmVyIiwib25DbG9zZUFuaW1hdGlvbkVuZCIsImlzRHJhd2VyVmlzaWJsZSIsInNldERyYXdlclZpc2libGUiLCJpc092ZXJsYXlWaXNpYmxlIiwic2V0SXNPdmVybGF5VmlzaWJsZSIsImN1cnJlbnRUcmFuc2l0aW9uQ2xhc3NOYW1lIiwiZ2V0Q3VycmVudFRyYW5zaXRpb25DbGFzc05hbWUiLCJjcmVhdGVQb3J0YWwiLCJkcmF3ZXIiLCJ2aXNpYmxlIiwiZHJhd2VyUGFwZXIiLCJkcmF3ZXJQYXBlckNvbnRlbnQiLCJkcmF3ZXJPdmVybGF5IiwiSGVhZGVyIiwiRHJhd2VySGVhZGVyIiwiQ29udGVudCIsIkRyYXdlckNvbnRlbnQiLCJGb290ZXIiLCJEcmF3ZXJGb290ZXIiLCJkcmF3ZXJDb250ZW50IiwiZHJhd2VyRm9vdGVyIiwidXNlRHJhd2VyQ29udGV4dCIsImRyYXdlckhlYWRlciIsImRyYXdlckhlYWRlckNsb3NlIiwiZHJhd2VySGVhZGVyQ2xvc2VJY29uIiwiSWNvbiIsInNyYyIsImlzRGlzYWJsZWQiLCJCdXR0b24iLCJpdGVtQm9keVJlbmRlcmVyIiwiaGFuZGxlU2VsZWN0IiwicmVuZGVyQ2xpY2thYmxlIiwic2VsZWN0ZWRJdGVtIiwicGxhY2VtZW50IiwidmVydGljYWwiLCJob3Jpem9udGFsIiwic2V0SXNPcGVuIiwidG9nZ2xlSXNPcGVuIiwiTWVudUNvbnRhaW5lciIsImJ1dHRvbiIsIkNsaWNrYWJsZSIsIk1lbnUiLCJNZW51SXRlbSIsImlzQWN0aXZlIiwiRHJvcGRvd24iLCJhY2NlcHQiLCJtdWx0aXBsZSIsImlucHV0IiwicGFyZW50IiwiaG9yaXpvbnRhbFBsYWNlbWVudCIsInZlcnRpY2FsUGxhY2VtZW50IiwiZml4ZWQiLCJpY29uIiwiY3Jvc3NPcmlnaW4iLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJzcmNXaWR0aCIsInNyY0hlaWdodCIsImRlY29kaW5nIiwibG9hZGluZyIsImltYWdlRWxlbWVudCIsImltYWdlIiwiaGFzT3ZlcmxheSIsIm92ZXJsYXkiLCJoZWFkZXJBY3Rpb25zIiwiaGVhZGVyTGFiZWwiLCJsaXN0IiwibGlzdFZpZXdJdGVtIiwiQnV0dG9uTGluayIsImFzIiwiZm9vdGVyIiwic21hcnRMYXlvdXQiLCJtZW51UGxhY2VtZW50IiwiUGxhY2VtZW50Q29udGV4dCIsIkVycm9yIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiYm90dG9tIiwiZGlzdGFuY2VUb0VkZ2UiLCJpbm5lckhlaWdodCIsInVsRWwiLCJxdWVyeVNlbGVjdG9yIiwiY2hpbGRFbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJuZXdIZWlnaHQiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJtZW51IiwiZm9yd2FyZFJlZiIsIm1lbnVDb250YWluZXIiLCJtZW51SXRlbSIsIm1lbnVMaW5rSXRlbSIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm1vZGFsIiwibW9kYWxCdXR0b24iLCJhcHBlbmREaWdpdCIsIm51bWJlciIsImRpZ2l0IiwicG9wRGlnaXQiLCJldmVudERpZ2l0S2V5cyIsIk51bXBhZCIsImNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyIiwibmV3TnVtYmVyIiwiTnVtcGFkS2V5cyIsImZpbGwiLCJudW1wYWRWYWx1ZSIsIm51bXBhZCIsInBhcnNlSW50IiwibnVtYmVycyIsImlzRml4ZWQiLCJzaG93RXhwYW5kZWRHcm91cCIsIlNlbGVjdENvbnRleHQiLCJleHBhbmRlZCIsInRvZ2dsZUV4cGFuZCIsImhhbmRsZUdyb3VwQ2xpY2siLCJJY29uQnV0dG9uIiwiT3B0aW9uIiwic2VsZWN0ZWRPcHRpb25zIiwidXBkYXRlU2VsZWN0ZWRPcHRpb24iLCJpc0NoZWNrZWQiLCJjaGVja2JveENvbnRhaW5lciIsIkNoZWNrYm94IiwiaXNPcHRpb24iLCJvbkZpbHRlciIsInNlbGVjdEFsbENoZWNrZWQiLCJ0b2dnbGVTZWxlY3RBbGxDaGVja2VkIiwic2VhcmNoS2V5d29yZCIsInNlbGVjdEFsbCIsInNldFNlbGVjdGVkT3B0aW9ucyIsImhhc0dyb3VwT3B0aW9uIiwiZmlsdGVyT3B0aW9ucyIsImtleXdvcmQiLCJ0cmltIiwiZmlsdGVyZWRPcHRpb25zIiwicmVkdWNlIiwiZmlsdGVyZWQiLCJncm91cE9wdGlvbiIsImZpbHRlcmVkR3JvdXBPcHRpb25zIiwiZmlsdGVyZWRPcHRpb25zQ291bnQiLCJuZXh0T3B0aW9uIiwic2VsZWN0ZWRPcHRpb25zQ291bnQiLCJzZWxlY3RlZE9wdGlvbiIsImZpbHRlcmVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0QWxsQ2xpY2siLCJvcHRpb25zVG9TZWxlY3QiLCJmbGF0Iiwic2VsZWN0QWxsQ29udGFpbmVyIiwiR3JvdXBPcHRpb24iLCJub09wdGlvbnMiLCJzZXRTZWFyY2hLZXl3b3JkIiwiaGFuZGxlU2VhcmNoS2V5d29yZENoYW5nZSIsImhhbmRsZVNlYXJjaEtleXdvcmRSZXNldENsaWNrIiwiaWNvblNlYXJjaENvbnRhaW5lciIsIlRleHRJbnB1dCIsInJlc2V0QnV0dG9uIiwic2Nyb2xsTWVudUludG9WaWV3Iiwic2hvd1NlbGVjdGVkQXNUYWdzIiwic2hvd1NlYXJjaCIsIm9wZW5lZCIsInRvZ2dsZU9wZW5lZCIsImNvbnRlbnRSZWYiLCJvblJlc2l6ZSIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJibG9jayIsIlJPIiwiUmVzaXplT2JzZXJ2ZXIiLCJvYnNlcnZlIiwiZGlzY29ubmVjdCIsImhhbmRsZU9wZW5TZWxlY3QiLCJTZWxlY3RDb250ZXh0UHJvdmlkZXIiLCJTZWxlY3RvciIsImlzRHJvcGRvd25PcGVuZWQiLCJpY29uQnV0dG9uIiwic2VhcmNoQ29udGFpbmVyIiwiU2VhcmNoIiwiT3B0aW9uTGlzdCIsImluaXRpYWxTdGF0ZSIsInVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMiLCJoYW5kbGVUYWdDbGljayIsImhhbmRsZVRhZ0Nsb3NlIiwicGxhY2Vob2xkZXJUb1Nob3ciLCJzaG93QXNUYWdzIiwidGFnV3JhcHBlciIsIlRhZyIsImNsb3NhYmxlIiwic2hvd0FzVGV4dCIsImNvbHVtbnMiLCJkYXRhU291cmNlIiwib25Sb3dDbGljayIsImhhc0Fycm93Iiwib25Mb2FkTW9yZSIsInBhZ2UiLCJzZXRQYWdlIiwicGFnZVNpemUiLCJUYWJsZUNvbmZpZyIsIlBBR0VfU0laRSIsInRhYmxlSGVpZ2h0IiwiUk9XX0hFSUdIVCIsImhlYWRlckhlaWdodCIsIkhFQURFUl9IRUlHSFQiLCJkaXNhYmxlTGF6eUxvYWRlciIsImFjdGl2ZVJvd3MiLCJpdGVtc0NvdW50IiwiaXNIZWFkZXJTdGlja3kiLCJoYXNWaXJ0dWFsU2Nyb2xsIiwic2V0U2Nyb2xsVG9wIiwicmVuZGVyUm93Iiwicm93IiwiaGFuZGxlTGlzdFNjcm9sbCIsImxvYWRNb3JlIiwiSVRFTVNfTE9BREVEIiwicGxhY2Vob2xkZXJDb250YWluZXIiLCJzY3JvbGxiYXJDb250YWluZXIiLCJib3JkZXJCb3R0b20iLCJjb2x1bW4iLCJvblNvcnQiLCJzb3J0YWJsZSIsInNvcnRlZCIsImRlZmF1bHRTb3J0T3JkZXIiLCJ0aXRsZSIsIlNvcnRPcmRlciIsIkRFU0MiLCJzb3J0T3JkZXIiLCJzZXRTb3J0T3JkZXIiLCJoYW5kbGVTb3J0Q29sdW1uIiwibmV3U29ydE9yZGVyIiwiQVNDIiwiY2VsbFByb3BzIiwidGFibGVIZWFkZXJDZWxsIiwic29ydEljb25WaXNpYmxlIiwiaGFuZGxlUm93Q2xpY2siLCJkYXRhSW5kZXgiLCJvbkRlbGV0ZSIsImNsb3NlQnV0dG9uIiwicGF0dGVybiIsIndpdGhTY3JvbGwiLCJpbnB1dE1vZGUiLCJ0YWdPcHRpb25zIiwidGFncyIsInNldFRhZ3MiLCJ0YWdzQXJyIiwidGFnIiwiaGFuZGxlVGV4dENoYW5nZSIsImhhbmRsZVRhZ0RlbGV0ZSIsInVwZGF0ZWRUYWdzIiwiaGFuZGxlVGFnQWRkIiwidHJpbW1lZFRleHQiLCJoYW5kbGVLZXlEb3duIiwidGV4dElucHV0Iiwic2Nyb2xsYWJsZSIsInRhZ0lucHV0IiwidG9hc3QiLCJ0b2FzdENvbnRhaW5lciIsInNob3dUb29sdGlwIiwidG91Y2hTY3JlZW5IaWRpbmdEZWxheSIsInBvc2l0aW9uU3R5bGVzIiwic2V0UG9zaXRpb25TdHlsZXMiLCJ0b29sdGlwSXNWaXNpYmxlIiwic2V0VG9vbHRpcElzVmlzaWJsZSIsInRpbWVyUmVmIiwidXBkYXRlUG9zaXRpb25TdHlsZXMiLCJyZWN0IiwibmV3UG9zaXRpb25TdHlsZXMiLCJzY3JvbGxZIiwic2Nyb2xsWCIsIm1hcFBsYWNlbWVudFRvUG9zaXRpb25TdHlsZXMiLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJvblRvdWNoU3RhcnRIYW5kbGVyIiwiY2xlYXJUaW1lb3V0Iiwib25Ub3VjaEVuZEhhbmRsZXIiLCJzY3JvbGxhYmxlUGFyZW50IiwiaGlkZVRvb2x0aXAiLCJvblRvdWNoU3RhcnQiLCJvblRvdWNoRW5kIiwidG9vbHRpcCIsInBvc3RlciIsIm11dGVkIiwibG9vcCIsImF1dG9QbGF5IiwidmlkZW8iLCJwbGF5c0lubGluZSIsImlzIiwibCIsInVzZURlYnVnVmFsdWUiLCJnZXRTbmFwc2hvdCIsImQiLCJ1IiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJtb2R1bGUiLCJfbmlsIiwiX3BhcnNlIiwiX3N0cmluZ2lmeSIsIl92IiwiX3YyIiwiX3YzIiwiX3Y0IiwiX3ZhbGlkYXRlIiwiX3ZlcnNpb24iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZ2V0T3V0cHV0TGVuZ3RoIiwiaW5wdXRMZW5ndGg4Iiwic2FmZUFkZCIsImxzdyIsIm1kNWNtbiIsInEiLCJudW0iLCJjbnQiLCJtZDVmZiIsIm1kNWdnIiwibWQ1aGgiLCJtZDVpaSIsImJ5dGVzIiwibXNnIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJVaW50OEFycmF5Iiwib3V0cHV0IiwibGVuZ3RoMzIiLCJoZXhUYWIiLCJoZXgiLCJjaGFyQXQiLCJtZDVUb0hleEVuY29kZWRBcnJheSIsIm9sZGEiLCJvbGRiIiwib2xkYyIsIm9sZGQiLCJ3b3Jkc1RvTWQ1IiwibGVuZ3RoOCIsIlVpbnQzMkFycmF5IiwiYnl0ZXNUb1dvcmRzIiwiX2RlZmF1bHQiLCJyYW5kb21VVUlEIiwiY3J5cHRvIiwidXVpZCIsImFyciIsImdldFJhbmRvbVZhbHVlcyIsInJuZHM4IiwieiIsIlJPVEwiLCJLIiwiSCIsIk4iLCJNIiwiaiIsInBvdyIsIlciLCJUIiwidW5zYWZlU3RyaW5naWZ5IiwiYnl0ZVRvSGV4IiwiX3JuZyIsIl9ub2RlSWQiLCJfY2xvY2tzZXEiLCJfbGFzdE1TZWNzIiwiX2xhc3ROU2VjcyIsImJ1ZiIsImNsb2Nrc2VxIiwic2VlZEJ5dGVzIiwicm5nIiwibXNlY3MiLCJuc2VjcyIsImR0IiwidGwiLCJ0bWgiLCJfbWQiLCJVUkwiLCJETlMiLCJ2ZXJzaW9uIiwiaGFzaGZ1bmMiLCJnZW5lcmF0ZVVVSUQiLCJuYW1lc3BhY2UiLCJfbmFtZXNwYWNlIiwic3RyIiwic3RyaW5nVG9CeXRlcyIsIl9uYXRpdmUiLCJybmRzIiwiX3NoYSIsIl9yZWdleCIsInJlcXVpcmUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiZGVmaW5pdGlvbiIsInRvU3RyaW5nVGFnIiwiX193ZWJwYWNrX2V4cG9ydHNfXyJdLCJzb3VyY2VSb290IjoiIn0=
|
|
2
|
+
(()=>{var e={3349:(e,t,n)=>{"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,{Z:()=>r})},2122:(e,t,n)=>{"use strict";function r(){return r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},1788:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.d(t,{Z:()=>r})},9756:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},5348:(e,t,n)=>{"use strict";n.r(t),n.d(t,{useOutsideClick:()=>a,usePromise:()=>l,useSWRHooksConfig:()=>Y,useToggle:()=>J});var r=n(6689),o={capture:!0};function a(e){var t=(0,r.useRef)();return(0,r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n,o),document.addEventListener("touchend",n,o),function(){document.removeEventListener("mouseup",n,o),document.removeEventListener("touchend",n,o)}}),[e]),t}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function l(){var e=this,t=i((0,r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],o=t[1],a=(0,r.useRef)(!1);(0,r.useEffect)((function(){return a.current=!1,function(){a.current=!0}}),[]);var l=(0,r.useCallback)((function(t){return n=e,r=void 0,l=function(){var e,n;return function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(l){return function(u){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,r=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==l[0]&&2!==l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([l,u])}}}(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),o({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===a.current&&o({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===a.current&&o({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))},new((i=void 0)||(i=Promise))((function(e,t){function o(e){try{u(l.next(e))}catch(e){t(e)}}function a(e){try{u(l.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(e){e(n)}))).then(o,a)}u((l=l.apply(n,r||[])).next())}));var n,r,i,l}),[a]);return[n,l]}Object.create,Object.create;var u=n(1688);const s=new WeakMap,c={},d={},f=()=>{},p=f(),v=Object,h=e=>e===p,m=e=>"function"==typeof e,_=(e,t)=>({...e,...t}),g="undefined",b=typeof window!=g,y=typeof document!=g,O=(e,t)=>{const n=s.get(e);return[()=>e.get(t)||c,r=>{if(!h(t)){const o=e.get(t);t in d||(d[t]=o),n[5](t,_(o,r),o||c)}},n[6],()=>!h(t)&&t in d?d[t]:e.get(t)||c]},w=new WeakMap;let E=0;const M=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let o,a;if(v(e)!==e||r||n==RegExp)o=r?e.toJSON():"symbol"==t?e.toString():"string"==t?JSON.stringify(e):""+e;else{if(o=w.get(e),o)return o;if(o=++E+"~",w.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=M(e[a])+",";w.set(e,o)}if(n==v){o="#";const t=v.keys(e).sort();for(;!h(a=t.pop());)h(e[a])||(o+=a+":"+M(e[a])+",");w.set(e,o)}}return o};let S=!0;const[x,C]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[f,f],P={isOnline:()=>S,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},j={initFocus:e=>(y&&document.addEventListener("visibilitychange",e),x("focus",e),()=>{y&&document.removeEventListener("visibilitychange",e),C("focus",e)}),initReconnect:e=>{const t=()=>{S=!0,e()},n=()=>{S=!1};return x("online",t),x("offline",n),()=>{C("online",t),C("offline",n)}}},I=!r.useId,k=!b||"Deno"in window,D=k?r.useEffect:r.useLayoutEffect,R="undefined"!=typeof navigator&&navigator.connection,N=!k&&R&&(["slow-2g","2g"].includes(R.effectiveType)||R.saveData),L=e=>{if(m(e))try{e=e()}catch(t){e=""}const t=e;return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?M(e):"",t]};let T=0;const z=()=>++T,A=2;var H=A;async function B(...e){const[t,n,r,o]=e,a=_({populateCache:!0,throwOnError:!0},"boolean"==typeof o?{revalidate:o}:o||{});let i=a.populateCache;const l=a.rollbackOnError;let u=a.optimisticData;const c=!1!==a.revalidate,d=e=>"function"==typeof l?l(e):!1!==l,f=a.throwOnError;if(m(n)){const e=n,r=[],o=t.keys();for(let n=o.next();!n.done;n=o.next()){const o=n.value;!/^\$(inf|sub)\$/.test(o)&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(v))}return v(n);async function v(n){const[o]=L(n);if(!o)return;const[a,l]=O(t,o),[v,_,g]=s.get(t),b=v[o],y=()=>c&&(delete g[o],b&&b[0])?b[0](A).then((()=>a().data)):a().data;if(e.length<3)return y();let w,E=r;const M=z();_[o]=[M,0];const S=!h(u),x=a(),C=x.data,P=x._c,j=h(P)?C:P;if(S&&(u=m(u)?u(j):u,l({data:u,_c:j})),m(E))try{E=E(j)}catch(e){w=e}if(E&&m(E.then)){if(E=await E.catch((e=>{w=e})),M!==_[o][0]){if(w)throw w;return E}w&&S&&d(w)&&(i=!0,E=j,l({data:E,_c:p}))}i&&(w||(m(i)&&(E=i(E,j)),l({data:E,_c:p}))),_[o][1]=z();const I=await y();if(l({_c:p}),!w)return i?I:E;if(f)throw w}}const F=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},V=(e,t)=>{if(!s.has(e)){const n=_(j,t),r={},o=B.bind(p,e);let a=f;const i={},l=(e,t)=>{const n=i[e]||[];return i[e]=n,n.push(t),()=>n.splice(n.indexOf(t),1)},u=(t,n,r)=>{e.set(t,n);const o=i[t];if(o)for(const e of o)e(n,r)},c=()=>{if(!s.has(e)&&(s.set(e,[r,{},{},{},o,u,l]),!k)){const t=n.initFocus(setTimeout.bind(p,F.bind(p,r,0))),o=n.initReconnect(setTimeout.bind(p,F.bind(p,r,1)));a=()=>{t&&t(),o&&o(),s.delete(e)}}};return c(),[e,o,c,a]}return[e,s.get(e)[4]]},[W,G]=V(new Map),U=_({onLoadingSlow:f,onSuccess:f,onError:f,onErrorRetry:(e,t,n,r,o)=>{const a=n.errorRetryCount,i=o.retryCount,l=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!h(a)&&i>a||setTimeout(r,l,o)},onDiscarded:f,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:N?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:N?5e3:3e3,compare:(e,t)=>M(e)==M(t),isPaused:()=>!1,cache:W,mutate:G,fallback:{}},P),Z=(0,r.createContext)({}),K=b&&window.__SWR_DEVTOOLS_USE__,q=K?window.__SWR_DEVTOOLS_USE__:[],Q=()=>_(U,(0,r.useContext)(Z));q.concat((e=>(t,n,r)=>e(t,n&&((...e)=>{const r=L(t)[0],[,,,o]=s.get(W),a=o[r];return a?(delete o[r],a):n(...e)}),r)));K&&(window.__SWR_DEVTOOLS_REACT__=r);const X={dedupe:!0};function Y(){var e=Q();return(0,r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function J(e){void 0===e&&(e=!1);var t=i((0,r.useState)(e),2),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(e){o("boolean"==typeof e?e:function(e){return!e})}),[])]}v.defineProperty((e=>{const{value:t}=e,n=(0,r.useContext)(Z),o=m(t),a=(0,r.useMemo)((()=>o?t(n):t),[o,n,t]),i=(0,r.useMemo)((()=>o?a:((e,t)=>{const n=_(e,t);if(t){const{use:r,fallback:o}=e,{use:a,fallback:i}=t;r&&a&&(n.use=r.concat(a)),o&&i&&(n.fallback=_(o,i))}return n})(n,a)),[o,n,a]),l=a&&a.provider,u=(0,r.useRef)(p);l&&!u.current&&(u.current=V(l(i.cache||W),a));const s=u.current;return s&&(i.cache=s[0],i.mutate=s[1]),D((()=>{if(s)return s[2]&&s[2](),s[3]}),[]),(0,r.createElement)(Z.Provider,_(e,{value:i}))}),"defaultValue",{value:U})},7659:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=Array.isArray;function o(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,a=0;a<e.length;a++)""!==(n=o(e[a]))&&(t+=(t&&" ")+n);else for(var a in e)e.hasOwnProperty(a)&&e[a]&&(t+=(t&&" ")+a);return t}},5580:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"umKAZmLkARLzX3gnuKkp",left:"u1l5AJGbUiP6RVFIKxOI",small:"hxZpK9CpBK1wR0W0v4SD",large:"o9DYmt4xfLaImiVzI9dQ",xlarge:"qmEVxSZS5kfL3aVbee1n",inverted:"CNOZHLd9XbokzOW6LYBP",rounded:"jJCAzw2SyaH4tIWXrAlR",rightOffset:"KGCu7aPjQy_aFNjHWNuw",leftOffset:"dDHYyGzXNi773FAl13GX",noShadow:"lQF1YcUqM0OHvPSlSwl_",noBorder:"sEo25Eiv6zs1D_x5q8Vy",transparent:"vm3cmANNuYlaQM5Yqz9G",stretchHorizontally:"Pikfzj7zYg2IntdJymuK",stretchVertically:"oSgV5cwX6inkSbCG98w8",noPadding:"gSZrGR1xqm8Q1iRUfGga",content:"pYLUj9noAqT8WytjDOOb"}},3391:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"Unj4rp1Dy71ACruzXl75",left:"EXWMRvveRvQifixzTH02",small:"_U0znUk5QTAzPnS2gaLC",medium:"aH8u4s2MtYc5y4vyubDw",large:"c306yV78al_eGwBSkmFm",xlarge:"xvA1meUmE28AEOpjsWc9",inverted:"WB77YIDOSwJoX68NjlUG",rounded:"k2nJCsENNgCz2Hlsj_bG",rightOffset:"jAe5EVE37OrKYvkXdc1s",leftOffset:"DgbtB6G4LoBDd04P_MzO",noShadow:"KpQI95_f8nHvk7G2J6h8",transparent:"L8PnxUQogzgFMMT7QI4d",stretchHorizontally:"JulaxSccoGmqtgTNJmk9",stretchVertically:"zTYr9W7g2SqbVjPFAokG",noPadding:"UHzTm51kVyll52_S7sGB",noBorder:"hRP1XYfuJ49TsYU_cO5A",disabled:"lwWITPhM9TMo585Dsaw8",content:"MyT_PufJdEvsZE3hSW8P"}},7941:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={checkbox:"sy8lKVWP56AlOR7ys_9A",small:"XjfpcuPtguFZvKrxxt7y",medium:"tLP3dZWepXH3HKg17sOH",large:"Wgp9qHWDrQi9fmcxQIVK",xlarge:"lUA6tpLkWcGFgnoqCFvu"}},4560:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorSwatch:"PvbeBm4SMtMqlQNTyQjQ",small:"S7E3EPy_AWQukEexuvTf",large:"a1FsItKPQEOBeTqBCuDl",xlarge:"sFhgQEN_UOL3ZxOAR1Ie",selected:"aUx2uSBSs14VqwPqjvlQ",srOnly:"JIQmeZdd9TFl5I_gifPi"}},7855:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ZZVHcX45XCblmDab9ewZ",modalHeader:"xTX1XJfCSUsrh_yLlZoi",modalContent:"Te6jHdlyjsQXmnTs9ban",noPadding:"Lz_gwSwP3QCN5zYzFsEi",modalButtonsContainer:"Gh1uvxMfEgPTdt66Qis2",modalButtons:"Iaw34FkMJqjrGQ58BGfx"}},2838:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawer:"U3dCzqTyynyzBn2mFkmW",visible:"sTcJdQUaZPOeseD_2fe0",drawerPaper:"I3Z0jA85NrYHJ1wDZHWb",drawerPaperEnter:"MWLbaUZIM1JbDLE3H0_Q",drawerPaperEnterActive:"reBHfkDZXiKwiRvYTfHu",drawerPaperEnterDone:"J5dmw7woKvwgujgbB0qV",drawerPaperExit:"rm7jH2Sq7wf2d9IlSevk",drawerPaperExitActive:"nbeoVr9VpIXAH1GWfphC",drawerPaperExitDone:"sgNb6nOhF35lWQE9jQKE",drawerPaperContent:"CsqC6wvlLYDsKBsZ0GdT",drawerOverlay:"e34gBjx3k3bRYPZlf9wZ",noOverlay:"b3ucNpEtNq2OrQKwvqqw"}},8930:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerContent:"gF1_WnOrrPKWEQoXJmgf"}},6282:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerFooter:"nk69HulhPkeFsEMuZOrB"}},713:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerHeader:"vdwkPIGxzELdYhmiZPq2",drawerHeaderClose:"uz4NM_XvNZaqxVZYvSYA",drawerHeaderCloseIcon:"ZdNjx6DpeWEI2pAVL18t"}},6114:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={input:"KWk7oZ8tvPfQicgQYlVa",label:"e6zrx7UOP_BSoMM3GrjQ",small:"ihSnDQg0ygxcVLIySJkM",large:"FpwhbD7HXx_uFT3l01wb",xlarge:"YVds4u_DfWSG1r0SAGnS",inverted:"CKynoLhiLd6KzAYi5NtG",rounded:"v72mzJumFSiDOOE1MnXH",noShadow:"EoewJEDbGdteJ_NRfS5F",noBorder:"cb7l4xvcNnHNlQZmLjkb",noPadding:"vcOwDYuGF2etoPfyFDX5",transparent:"l08khaXIUOcruBFHws7X",stretchHorizontally:"I0xvJbB0LNT0S15jTMWW",stretchVertically:"X6fqUcVH1BlCRJBiiJii"}},7800:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"j1mfiYEGolTRmbBmGKlQ",row:"EGaKvmqM2SawiFrW8Ctu",column:"NMi0MT1b7rp1Zjye8UVA",fixed:"g0j3kkQr_AjCKFd94S1s",plain:"Fr1q7WnF1nFnnbfgpaRz",transparent:"udRZe9H0bKUHXjOwG1Fn",top:"uYiKw6VvDEkhjZHzvo7e",topEdge:"tRbEcYjE3KncsNwTbvVM",topOnEdge:"LGunG37X1_HReuw3qzua",right:"lw27rGVlo34axCxw3QHi",rightEdge:"PZItvleFIIj0Jx2MikRE",rightOnEdge:"KNuGaDPq9rmXfgmO3pcb",bottom:"dn1uh1tasGxDGqmU18HN",bottomEdge:"eD0UCrBRpsRTPPwwIoVg",bottomOnEdge:"IrhH5gfyGsQ6kdcP94RQ",left:"D5fGHnAGCMR4Ltb9y4Hr",leftEdge:"_AtAd2tr7t1kXusRbXSz",leftOnEdge:"_8C9dd0X_JXY4uHzw5Nj",horizontalCenter:"QDks8ovt9RVcFWeEB8wb",verticalCenter:"CVuQRE652GH2VJn8zOTs"}},7060:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={icon:"fp_BLJ2FW4Oyyb0bHiD4",small:"zsVDNfNRkos0Q5uv9FR9",medium:"eSlil3evPtPBswWF80C5",large:"T7ULyq1yE9AVXEMknV4G",xlarge:"QPAceVQdZ6QIQ2Qvijwg",inverted:"mFTGbhLa4NlUO16nvJrk"}},2844:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"Wcemyr2Gr8ZCGc6Bjbqw",small:"T_pa8CcpL1GvuDsdvsqq",medium:"nLLErjOgfa5b2sOeZrQ5",large:"Q71NFBHrSxQLQE4AGD2h",xlarge:"EbBiyF1rg6wRaxSMK8so",rounded:"tLjuwRSsIiLJGVsrarbd",topOffset:"d4KLpI79CuSU6gkPPInA",rightOffset:"G7hJZoYv8qIrNmFCygME",bottomOffset:"DZs3AvGkVdOvJfLeJ8Gh",leftOffset:"wEEnWRcvuvomh_OLO5iq",inverted:"K9WGCFpUadO9WIXwFaj_",noShadow:"eAQJ10kEkPmDxMGvlYzy",noBorder:"OlENR9ntuWYLGOKKKrGR",transparent:"KOcsPrivr94rxnfHVlfe"}},6299:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"gUSTy3_Np1mGJHW1N3gx",small:"IYuVzh1HBzgoTCi2WQ_p",medium:"JNg3_bCEfIvi4geEcsS3",large:"n61saxA20_EwMgt9Gw4s",xlarge:"gqGnvnH9X6mGvzwl4aGz",rounded:"DkzuqhEaiMR3XMs1M1If",topOffset:"sGnvevvsxBZUaXrpZQpI",rightOffset:"hgY3ZpkyD70p7E8rn3bi",bottomOffset:"ROoQY6OaRnQzDOfX_QDF",leftOffset:"Kevm582e3gXPJE3ODopa",inverted:"OOznCbAbjOLc4_bCEqfy",noShadow:"xrHxfce034dgYNEknlVM",noBorder:"eHt_RIq8JGoYHc4iCoeg",transparent:"nfgqtSgfrtrGFDWfZonQ",disabled:"I_nhJ9u6pTD_2SF3ql_l"}},1513:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"rO5W6DQk4NtoWrwmKMWg",hasOverlay:"llvnmI8K13g9PTBiCNz3",overlay:"GVk2j8wV1t3gY5uXQ4qI",image:"gXjYqKe9w3NgYurYwUQp",cover:"_l7ONOWayr8tyuGiyUsc",contain:"SYjOb8lAhmDbdylFIQY9",stretchHorizontally:"HkrozSfllTFlkkbqxXWh",stretchVertically:"xyHXhhHEYXMYeavWZw_N"}},8197:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menu:"xQ9Bfk0X1HmZgihCutZV",open:"utv9FYOU7Q0JNnZW1ejv",entrance:"yYKjcCvD2L94FpPgOigQ",header:"wNL86s9zGFi8XK11KloR",footer:"mu4Jev1c4KcifeF8Mzqg",noBorder:"EaPSjL1nXsz7TCx11Lrf"}},2752:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"kYh7DKYqH6jdLXd7PdJw",menuContainer:"QleAO3ymTliU6ZNBQxfg",top:"axfcrjSH4lvujzrsk2Qp",right:"LtVltW3BPZ5gNXVxxkrP",left:"PRb5f8XcMZOcY5ufPMdq",bottom:"__MZ5OoiIrVidFXbQfju"}},754:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={overlay:"j0h9hd_glvI9xdOnaauY",noOverlay:"SL48SzZufKgdMiGY3YTN",modal:"hTXcZevGyyI0AcvprXVJ",transparent:"ibqloG1HxHx3stdkVZSj",noShadow:"IEo5vEeftvLpmwi0VyjD",modalButton:"FoPfC3j7cIg2BYfzqQGE"}},3733:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4",button:"nyR3cGEmw3QkYMtiem3S"}},186:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={header:"WSYYBAz53dhquIOZPWBP",label:"b55hyZ0oHl0s4Ot9OhwM",expanded:"N3AzO5kZlh4HAPknnYzq"}},8054:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"SmCi4xOxEsLti61GoYk4",selected:"_4rJtCOZpnf3xn8pmFvCQ",checkboxContainer:"MSXZF7xcC5aoqHlqpI0g",checkbox:"NJjq9_gAedDRrOE_XWE1",label:"vwmDLc96D9tXgWqs4IKz"}},4822:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"e3yXJBrYTW4sVZKY2NFm",selectAllContainer:"czHLa4L3tRCJDCiDB6Az",checkbox:"iKqjWUd96zSp9xmocXzk",checkboxContainer:"axih9EnuzK1fwhqYDVRA",label:"q5Ws9hr8ZMX7fSvDK_qn",noOptions:"ovKvB5H8EoFznuMqUujl",searchKeyword:"TwcVaRDz8cokIK9D9DxJ"}},2396:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ",iconSearchContainer:"Z5LPx47ybEKeX29XBYBC",resetButton:"hjT9ZXvmvc5QUruwz8El"}},7917:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ETGbXTdYAp0G40TJPLnK",disabled:"nECgGdXOspUrQWHjzwkg",header:"XAoJhxTApcR9lGegyp9A",active:"ebemztZEWIV4_6AsKPQH",content:"rRDWv2qqwSrBy3evZ7Dw",noOptions:"fLP4x4IxnyiWhp5BP5sT",searchContainer:"yOECDJeDVT5z5YaXpeJn",iconButton:"aVKp3H3JWraBf7G5UdaP",expanded:"BrxrtD3aMX7IU52rA220"}},6884:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={placeholder:"ddlRidnIzYhQC9DGpgIt",active:"shHsEJGtbz4cmA6x1G1l",tagWrapper:"BGEShc7qu2fk9DZE2RUs",selectedOption:"ma9BIjuGCQeKF44sgucT",selectedOptions:"nRpAwv97CesqQbDLcet9"}},6684:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",content:"o_21r_EjLKB3xhgGy74s",closeButton:"ZZPRZLUq9MQyifD8x2jH",disabled:"uCLz0vbNnQZFX8kVuUiG"}},9067:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"gwYKRPpGdIMVXkiN0H9B",scrollable:"ovdjwhr21awv2AgiQEd2",tagInput:"avImGs3XcLeDLGhxD8bw",disabled:"yT8Pp8TUvP7sQSGeGLNJ",textInput:"ZiNNf2oLVjExxp9RT2s_",small:"LemMUTseigxHbmIYVVTc",medium:"PUHJdM7ZEb3LFReM1_Ug",large:"j9mk52hGhoFwjw4FWHQ9",xlarge:"EiWqeFqQXE9LHUh1vxpX",noBorder:"O6WsOpUZoZeThUb_ViXn"}},7792:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={textInput:"NPZrksCpnXVJSq_snHjR",small:"jQGriQJSa04zsoG1a2u9",medium:"lVoY9Dp17HOBinMj0Q7o",large:"QlUaPbX8EaIi7rZ4Fb8o",xlarge:"rYPOM9fNtVLdPFyWKkGE",noBorder:"KDTINsHdolYReSbLcooH"}},9220:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},8907:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tooltip:"Km6UUy0jpqM0LA2eXccc",absolute:"e50zEjtfQK00lf_884OY",fixed:"jqxT4McOeUDDnGseZkBL",left:"yBv1lwDHpexxO3DPpd1v",right:"v852ExxmQ6AtSQF2sX8A",top:"iV2yzPizoou9omW811hg",bottom:"VmmE8ENsCkzbwLpL3XJg"}},6504:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"yY9HV40ITTWgAV8qLw1w",hasOverlay:"zub5bqdVXm4NFxpI4HBf",video:"MVCDVjfgmHE7QemcYxGl",cover:"V4nEcm179vZe2MLgRVaM",contain:"u2_MfeCjMSl_aBNJn5nL",stretchHorizontally:"ljfsYs8BQqleKzbLkkad",stretchVertically:"HJtRqbAFLOnXVyGz8iFU",overlay:"ALHhOHAeLlBDy1DpYqiv"}},1914:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Hint=void 0;var l=i(n(6689)),u=n(2394);t.Hint=function(e){var t,n,o=l.default.Children.only(e.children);if("input"!==(null===(n=null===(t=o.type)||void 0===t?void 0:t.toString())||void 0===n?void 0:n.toLowerCase()))throw new TypeError("react-autocomplete-hint: 'Hint' only accepts an 'input' element as child.");var a=e.options,i=e.disableHint,s=e.allowTabFill,c=e.allowEnterFill,d=e.onFill,f=e.onHint,p=e.valueModifier,v=o.props,h=l.useRef(null),m=l.useRef(null),_=l.useRef(null),g=l.useState(""),b=g[0],y=g[1],O=l.useState(""),w=O[0],E=O[1],M=l.useState(""),S=M[0],x=M[1],C=l.useState(),P=C[0],j=C[1],I=l.useState(),k=I[0],D=I[1];l.useEffect((function(){if("object"==typeof a[0]){var e=u.getFirstDuplicateOption(a);e&&console.warn('react-autocomplete-hint: "'+e+'" occurs more than once and may cause errors. Options should not contain duplicate values!')}}),[a]),l.useEffect((function(){if(!i){var e=h.current&&window.getComputedStyle(h.current);e&&L(m,_,e)}}));var R=function(e){E(e);var t,n=function(e){if(e&&""!==e)return"string"==typeof a[0]?a.filter((function(t){return t.toLowerCase()!==e.toLowerCase()&&t.toLowerCase().startsWith(e.toLowerCase())})).sort()[0]:a.filter((function(t){return t.label.toLowerCase()!==e.toLowerCase()&&t.label.toLowerCase().startsWith(e.toLowerCase())})).sort((function(e,t){return u.sortAsc(e.label,t.label)}))[0]}(e);t=n?"string"==typeof n?n.slice(e.length):n.label.slice(e.length):"",x(t),j(n),f&&f(n)},N=function(){if(""!==S&&k){var e=b+S;k.target.value=e,v.onChange&&v.onChange(k),R(""),d&&d(P),y(e)}},L=function(e,t,n){var r,o;(null===(r=null==e?void 0:e.current)||void 0===r?void 0:r.style)&&(e.current.style.fontFamily=n.fontFamily,e.current.style.fontSize=n.fontSize,e.current.style.width=n.width,e.current.style.height=n.height,e.current.style.lineHeight=n.lineHeight,e.current.style.boxSizing=n.boxSizing,e.current.style.margin=u.interpolateStyle(n,"margin"),e.current.style.padding=u.interpolateStyle(n,"padding"),e.current.style.borderStyle=u.interpolateStyle(n,"border","style"),e.current.style.borderWidth=u.interpolateStyle(n,"border","width")),(null===(o=null==t?void 0:t.current)||void 0===o?void 0:o.style)&&(t.current.style.fontFamily=n.fontFamily,t.current.style.fontSize=n.fontSize,t.current.style.lineHeight=n.lineHeight)},T=l.cloneElement(o).ref,z=l.cloneElement(o,r(r({},v),{onChange:function(e){D(e),e.persist(),y(e.target.value);var t=p?p(e.target.value):e.target.value;R(t),v.onChange&&v.onChange(e)},onBlur:function(e){(null==_?void 0:_.current)!==e.relatedTarget&&(R(""),v.onBlur&&v.onBlur(e))},onFocus:function(e){R(e.target.value),v.onFocus&&v.onFocus(e)},onKeyDown:function(e){var t=null===e.currentTarget.selectionEnd||e.currentTarget.selectionEnd===e.currentTarget.value.length;t&&"ArrowRight"===e.key?N():(t&&s&&"Tab"===e.key&&""!==S||t&&c&&"Enter"===e.key&&""!==S)&&(e.preventDefault(),N()),v.onKeyDown&&v.onKeyDown(e)},ref:T&&"string"!=typeof T?u.mergeRefs(T,h):h}));return l.default.createElement("div",{className:"rah-input-wrapper",style:{position:"relative"}},i?o:l.default.createElement(l.default.Fragment,null,z,l.default.createElement("span",{className:"rah-hint-wrapper",ref:m,style:{display:"flex",pointerEvents:"none",backgroundColor:"transparent",borderColor:"transparent",boxShadow:"none",color:"rgba(0, 0, 0, 0.35)",position:"absolute",top:0,left:0}},l.default.createElement("span",{className:"rah-text-filler",style:{visibility:"hidden",pointerEvents:"none",whiteSpace:"pre"}},w),l.default.createElement("input",{className:"rah-hint",ref:_,onClick:function(e){var t,n=e.currentTarget.selectionEnd||0;0!==n?S&&""!==S&&(N(),setTimeout((function(){var e,t;null===(e=h.current)||void 0===e||e.focus();var r=w.length+n;null===(t=h.current)||void 0===t||t.setSelectionRange(r,r)}),0)):null===(t=h.current)||void 0===t||t.focus()},style:{pointerEvents:S&&""!==S?"visible":"none",background:"transparent",width:"100%",outline:"none",border:"none",boxShadow:"none",padding:0,margin:0,color:"rgba(0, 0, 0, 0.30)",caretColor:"transparent"},defaultValue:S,tabIndex:-1}))))}},2394:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getFirstDuplicateOption=t.sortAsc=t.interpolateStyle=t.mergeRefs=void 0,t.mergeRefs=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.filter(Boolean);return function(e){for(var t=0,r=n;t<r.length;t++){var o=r[t];"function"==typeof o?o(e):o&&(o.current=e)}}},t.interpolateStyle=function(e,t,n){return void 0===n&&(n=""),n&&(n=n.replace(n[0],n[0].toUpperCase())),["Top","Right","Bottom","Left"].map((function(r){return e[t+r+n]})).join(" ")},t.sortAsc=function(e,t){return e>t?1:e<t?-1:0},t.getFirstDuplicateOption=function(e){for(var t={},n=0;n<e.length;n++){if(t[e[n].label])return e[n].label;t[e[n].label]=!0}return null}},5172:(e,t,n)=>{"use strict";n.r(t),n.d(t,{isHotkeyPressed:()=>D,useHotkeys:()=>k,useIsHotkeyPressed:()=>P});var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function o(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function a(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var l={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},u={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},s={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},d={},f=1;f<20;f++)l["f".concat(f)]=111+f;var p=[],v=!1,h="all",m=[],_=function(e){return l[e.toLowerCase()]||u[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function g(e){h=e||"all"}function b(){return h||"all"}var y=function(e){var t=e.key,n=e.scope,r=e.method,o=e.splitKey,l=void 0===o?"+":o;i(t).forEach((function(e){var t=e.split(l),o=t.length,i=t[o-1],s="*"===i?"*":_(i);if(d[s]){n||(n=b());var c=o>1?a(u,t):[];d[s]=d[s].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,o=!0,a=0;a<n.length;a++)-1===r.indexOf(n[a])&&(o=!1);return o}(e.mods,c))}))}}))};function O(e,t,n,r){var o;if(t.element===r&&(t.scope===n||"all"===t.scope)){for(var a in o=t.mods.length>0,c)Object.prototype.hasOwnProperty.call(c,a)&&(!c[a]&&t.mods.indexOf(+a)>-1||c[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[91])&&!o&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function w(e,t){var n=d["*"],r=e.keyCode||e.which||e.charCode;if(E.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===p.indexOf(r)&&229!==r&&p.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=s[t];e[t]&&-1===p.indexOf(n)?p.push(n):!e[t]&&p.indexOf(n)>-1?p.splice(p.indexOf(n),1):"metaKey"===t&&e[t]&&3===p.length&&(e.ctrlKey||e.shiftKey||e.altKey||(p=p.slice(p.indexOf(n))))})),r in c){for(var o in c[r]=!0,u)u[o]===r&&(E[o]=!0);if(!n)return}for(var a in c)Object.prototype.hasOwnProperty.call(c,a)&&(c[a]=e[s[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===p.indexOf(17)&&p.push(17),-1===p.indexOf(18)&&p.push(18),c[17]=!0,c[18]=!0);var i=b();if(n)for(var l=0;l<n.length;l++)n[l].scope===i&&("keydown"===e.type&&n[l].keydown||"keyup"===e.type&&n[l].keyup)&&O(e,n[l],i,t);if(r in d)for(var f=0;f<d[r].length;f++)if(("keydown"===e.type&&d[r][f].keydown||"keyup"===e.type&&d[r][f].keyup)&&d[r][f].key){for(var v=d[r][f],h=v.splitKey,m=v.key.split(h),g=[],y=0;y<m.length;y++)g.push(_(m[y]));g.sort().join("")===p.sort().join("")&&O(e,v,i,t)}}}function E(e,t,n){p=[];var r=i(e),l=[],s="all",f=document,h=0,g=!1,b=!0,y="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(s=t.scope),t.element&&(f=t.element),t.keyup&&(g=t.keyup),void 0!==t.keydown&&(b=t.keydown),void 0!==t.capture&&(O=t.capture),"string"==typeof t.splitKey&&(y=t.splitKey)),"string"==typeof t&&(s=t);h<r.length;h++)l=[],(e=r[h].split(y)).length>1&&(l=a(u,e)),(e="*"===(e=e[e.length-1])?"*":_(e))in d||(d[e]=[]),d[e].push({keyup:g,keydown:b,scope:s,mods:l,shortcut:r[h],method:n,key:r[h],splitKey:y,element:f});void 0!==f&&!function(e){return m.indexOf(e)>-1}(f)&&window&&(m.push(f),o(f,"keydown",(function(e){w(e,f)}),O),v||(v=!0,o(window,"focus",(function(){p=[]}),O)),o(f,"keyup",(function(e){w(e,f),function(e){var t=e.keyCode||e.which||e.charCode,n=p.indexOf(t);if(n>=0&&p.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&p.splice(0,p.length),93!==t&&224!==t||(t=91),t in c)for(var r in c[t]=!1,u)u[r]===t&&(E[r]=!1)}(e)}),O))}var M={setScope:g,getScope:b,deleteScope:function(e,t){var n,r;for(var o in e||(e=b()),d)if(Object.prototype.hasOwnProperty.call(d,o))for(n=d[o],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;b()===e&&g(t||"all")},getPressedKeyCodes:function(){return p.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=_(e)),-1!==p.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},trigger:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(d).forEach((function(n){var r=d[n].find((function(n){return n.scope===t&&n.shortcut===e}));r&&r.method&&r.method()}))},unbind:function(e){if(void 0===e)Object.keys(d).forEach((function(e){return delete d[e]}));else if(Array.isArray(e))e.forEach((function(e){e.key&&y(e)}));else if("object"==typeof e)e.key&&y(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=n[0],a=n[1];"function"==typeof o&&(a=o,o=""),y({key:e,scope:o,method:a,splitKey:"+"})}},keyMap:l,modifier:u,modifierMap:s};for(var S in M)Object.prototype.hasOwnProperty.call(M,S)&&(E[S]=M[S]);if("undefined"!=typeof window){var x=window.hotkeys;E.noConflict=function(e){return e&&window.hotkeys===E&&(window.hotkeys=x),E},window.hotkeys=E}var C=n(6689);function P(){return E.isPressed}E.filter=function(){return!0};var j=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},I=function(e){return j(e,["INPUT","TEXTAREA","SELECT"])};function k(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var o=n||{},a=o.enableOnTags,i=o.filter,l=o.keyup,u=o.keydown,s=o.filterPreventDefault,c=void 0===s||s,d=o.enabled,f=void 0===d||d,p=o.enableOnContentEditable,v=void 0!==p&&p,h=(0,C.useRef)(null),m=(0,C.useCallback)((function(e,n){var r,o;return i&&!i(e)?!c:!!(I(e)&&!j(e,a)||null!=(r=e.target)&&r.isContentEditable&&!v)||!!(null===h.current||document.activeElement===h.current||null!=(o=h.current)&&o.contains(document.activeElement))&&(t(e,n),!0)}),r?[h,a,i].concat(r):[h,a,i]);return(0,C.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),E(e,n||{},m),function(){return E.unbind(e,m)};E.unbind(e,m)}),[m,e,f]),h}var D=E.isPressed},8744:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CSSTransition:()=>M,ReplaceTransition:()=>R,SwitchTransition:()=>V,Transition:()=>O,TransitionGroup:()=>k,config:()=>d});var r=n(2122),o=n(9756),a=n(1788);function i(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}var l=n(6689),u=n.n(l),s=n(6405),c=n.n(s);const d={disabled:!1},f=u().createContext(null);var p=function(e){return e.scrollTop},v="unmounted",h="exited",m="entering",_="entered",g="exiting",b=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,a=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?a?(o=h,r.appearStatus=m):o=_:o=t.unmountOnExit||t.mountOnEnter?v:h,r.state={status:o},r.nextCallback=null,r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===v?{status:h}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==m&&n!==_&&(t=m):n!==m&&n!==_||(t=g)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===m){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:c().findDOMNode(this);n&&p(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===h&&this.setState({status:v})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[c().findDOMNode(this),r],a=o[0],i=o[1],l=this.getTimeouts(),u=r?l.appear:l.enter;!e&&!n||d.disabled?this.safeSetState({status:_},(function(){t.props.onEntered(a)})):(this.props.onEnter(a,i),this.safeSetState({status:m},(function(){t.props.onEntering(a,i),t.onTransitionEnd(u,(function(){t.safeSetState({status:_},(function(){t.props.onEntered(a,i)}))}))})))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:c().findDOMNode(this);t&&!d.disabled?(this.props.onExit(r),this.safeSetState({status:g},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:h},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:h},(function(){e.props.onExited(r)}))},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:c().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=o[0],i=o[1];this.props.addEndListener(a,i)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===v)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,(0,o.Z)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return u().createElement(f.Provider,{value:null},"function"==typeof n?n(e,r):u().cloneElement(u().Children.only(n),r))},t}(u().Component);function y(){}b.contextType=f,b.propTypes={},b.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:y,onEntering:y,onEntered:y,onExit:y,onExiting:y,onExited:y},b.UNMOUNTED=v,b.EXITED=h,b.ENTERING=m,b.ENTERED=_,b.EXITING=g;const O=b;var w=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=i(n.className,r):n.setAttribute("class",i(n.className&&n.className.baseVal||"",r)));var n,r}))},E=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1];t.removeClasses(o,"exit"),t.addClass(o,a?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1]?"appear":"enter";t.addClass(o,a,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1]?"appear":"enter";t.removeClasses(o,a),t.addClass(o,a,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}(0,a.Z)(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&p(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r}))}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,a=n.done;this.appliedClasses[t]={},r&&w(e,r),o&&w(e,o),a&&w(e,a)},n.render=function(){var e=this.props,t=(e.classNames,(0,o.Z)(e,["classNames"]));return u().createElement(O,(0,r.Z)({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(u().Component);E.defaultProps={classNames:""},E.propTypes={};const M=E;var S=n(3349);function x(e,t){var n=Object.create(null);return e&&l.Children.map(e,(function(e){return e})).forEach((function(e){n[e.key]=function(e){return t&&(0,l.isValidElement)(e)?t(e):e}(e)})),n}function C(e,t,n){return null!=n[t]?n[t]:e.props[t]}function P(e,t,n){var r=x(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),a=[];for(var i in e)i in t?a.length&&(o[i]=a,a=[]):a.push(i);var l={};for(var u in t){if(o[u])for(r=0;r<o[u].length;r++){var s=o[u][r];l[o[u][r]]=n(s)}l[u]=n(u)}for(r=0;r<a.length;r++)l[a[r]]=n(a[r]);return l}(t,r);return Object.keys(o).forEach((function(a){var i=o[a];if((0,l.isValidElement)(i)){var u=a in t,s=a in r,c=t[a],d=(0,l.isValidElement)(c)&&!c.props.in;!s||u&&!d?s||!u||d?s&&u&&(0,l.isValidElement)(c)&&(o[a]=(0,l.cloneElement)(i,{onExited:n.bind(null,i),in:c.props.in,exit:C(i,"exit",e),enter:C(i,"enter",e)})):o[a]=(0,l.cloneElement)(i,{in:!1}):o[a]=(0,l.cloneElement)(i,{onExited:n.bind(null,i),in:!0,exit:C(i,"exit",e),enter:C(i,"enter",e)})}})),o}var j=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},I=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind((0,S.Z)(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}(0,a.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o=t.children,a=t.handleExited;return{children:t.firstRender?(n=e,r=a,x(n.children,(function(e){return(0,l.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:C(e,"appear",n),enter:C(e,"enter",n),exit:C(e,"exit",n)})}))):P(e,o,a),firstRender:!1}},n.handleExited=function(e,t){var n=x(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=(0,r.Z)({},t.children);return delete n[e.key],{children:n}})))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=(0,o.Z)(e,["component","childFactory"]),a=this.state.contextValue,i=j(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?u().createElement(f.Provider,{value:a},i):u().createElement(f.Provider,{value:a},u().createElement(t,r,i))},t}(u().Component);I.propTypes={},I.defaultProps={component:"div",childFactory:function(e){return e}};const k=I;var D=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}(0,a.Z)(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,o=this.props.children,a=u().Children.toArray(o)[t];if(a.props[e]&&(r=a.props)[e].apply(r,n),this.props[e]){var i=a.props.nodeRef?void 0:c().findDOMNode(this);this.props[e](i)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=(0,o.Z)(e,["children","in"]),a=u().Children.toArray(t),i=a[0],l=a[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,u().createElement(k,r,n?u().cloneElement(i,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):u().cloneElement(l,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(u().Component);D.propTypes={};const R=D;var N,L,T="out-in",z="in-out",A=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},H=((N={})[T]=function(e){var t=e.current,n=e.changeState;return u().cloneElement(t,{in:!1,onExited:A(t,"onExited",(function(){n(m,null)}))})},N[z]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,u().cloneElement(r,{in:!0,onEntered:A(r,"onEntered",(function(){n(m)}))})]},N),B=((L={})[T]=function(e){var t=e.children,n=e.changeState;return u().cloneElement(t,{in:!0,onEntered:A(t,"onEntered",(function(){n(_,u().cloneElement(t,{in:!0}))}))})},L[z]=function(e){var t=e.current,n=e.children,r=e.changeState;return[u().cloneElement(t,{in:!1,onExited:A(t,"onExited",(function(){r(_,u().cloneElement(n,{in:!0}))}))}),u().cloneElement(n,{in:!0})]},L),F=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).state={status:_,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}(0,a.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===m&&e.mode===z?{status:m}:!t.current||((n=t.current)===(r=e.children)||u().isValidElement(n)&&u().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:u().cloneElement(e.children,{in:!0})}:{status:g};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,o=this.state,a=o.status,i=o.current,l={children:n,current:i,changeState:this.changeState,status:a};switch(a){case m:e=B[r](l);break;case g:e=H[r](l);break;case _:e=i}return u().createElement(f.Provider,{value:{isMounting:!this.appeared}},e)},t}(u().Component);F.propTypes={},F.defaultProps={mode:T};const V=F},5691:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r=n(6689),o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},i=function(e){function t(){var e,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var o=arguments.length,i=Array(o),l=0;l<o;l++)i[l]=arguments[l];return n=r=a(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),r._lastRenderedStartIndex=-1,r._lastRenderedStopIndex=-1,r._memoizedUnloadedRanges=[],r._onItemsRendered=function(e){var t=e.visibleStartIndex,n=e.visibleStopIndex;r._lastRenderedStartIndex=t,r._lastRenderedStopIndex=n,r._ensureRowsLoaded(t,n)},r._setRef=function(e){r._listRef=e},a(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),o(t,[{key:"resetloadMoreItemsCache",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,a=n.minimumBatchSize,i=void 0===a?10:a,l=n.threshold,u=void 0===l?15:l,s=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.stopIndex,a=[],i=null,l=null,u=e.startIndex;u<=o;u++)t(u)?null!==l&&(a.push(i,l),i=l=null):(l=u,null===i&&(i=u));if(null!==l){for(var s=Math.min(Math.max(l,i+r-1),n-1),c=l+1;c<=s&&!t(c);c++)l=c;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var d=a[0]-1;if(t(d))break;a[0]=d}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==s.length||this._memoizedUnloadedRanges.some((function(e,t){return s[t]!==e})))&&(this._memoizedUnloadedRanges=s,this._loadUnloadedRanges(s))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],a=e[r+1],i=n(o,a);null!=i&&i.then((function(){if(!((e={lastRenderedStartIndex:t._lastRenderedStartIndex,lastRenderedStopIndex:t._lastRenderedStopIndex,startIndex:o,stopIndex:a}).startIndex>e.lastRenderedStopIndex||e.stopIndex<e.lastRenderedStartIndex)){if(null==t._listRef)return;"function"==typeof t._listRef.resetAfterIndex?t._listRef.resetAfterIndex(o,!0):("function"==typeof t._listRef._getItemStyleCache&&t._listRef._getItemStyleCache(-1),t._listRef.forceUpdate())}var e}))},o=0;o<e.length;o+=2)r(o)}}]),t}(r.PureComponent);const l=i},4356:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FixedSizeGrid:()=>A,FixedSizeList:()=>H,VariableSizeGrid:()=>j,VariableSizeList:()=>z,areEqual:()=>W,shouldComponentUpdate:()=>G});var r=n(2122),o=n(3349),a=n(1788),i=Number.isNaN||function(e){return"number"==typeof e&&e!=e};function l(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(!((r=e[n])===(o=t[n])||i(r)&&i(o)))return!1;var r,o;return!0}const u=function(e,t){var n;void 0===t&&(t=l);var r,o=[],a=!1;return function(){for(var i=[],l=0;l<arguments.length;l++)i[l]=arguments[l];return a&&n===this&&t(i,o)||(r=e.apply(this,i),a=!0,n=this,o=i),r}};var s=n(6689),c=n(9756),d="object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()};function f(e){cancelAnimationFrame(e.id)}function p(e,t){var n=d(),r={id:requestAnimationFrame((function o(){d()-n>=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var v=-1;function h(e){if(void 0===e&&(e=!1),-1===v||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),v=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return v}var m=null;function _(e){if(void 0===e&&(e=!1),null===m||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?m="positive-descending":(t.scrollLeft=1,m=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),m}return m}var g=150,b=function(e){var t=e.columnIndex;return e.data,e.rowIndex+":"+t};function y(e){var t,n=e.getColumnOffset,i=e.getColumnStartIndexForOffset,l=e.getColumnStopIndexForStartIndex,c=e.getColumnWidth,d=e.getEstimatedTotalHeight,v=e.getEstimatedTotalWidth,m=e.getOffsetForColumnAndAlignment,y=e.getOffsetForRowAndAlignment,w=e.getRowHeight,E=e.getRowOffset,M=e.getRowStartIndexForOffset,S=e.getRowStopIndexForStartIndex,x=e.initInstanceProps,C=e.shouldResetStyleCacheOnItemSizeChange,P=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=x(r.props,(0,o.Z)(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:(0,o.Z)(r),isScrolling:!1,horizontalScrollDirection:"forward",scrollLeft:"number"==typeof r.props.initialScrollLeft?r.props.initialScrollLeft:0,scrollTop:"number"==typeof r.props.initialScrollTop?r.props.initialScrollTop:0,scrollUpdateWasRequested:!1,verticalScrollDirection:"forward"},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o,a,i,l,u){return r.props.onItemsRendered({overscanColumnStartIndex:e,overscanColumnStopIndex:t,overscanRowStartIndex:n,overscanRowStopIndex:o,visibleColumnStartIndex:a,visibleColumnStopIndex:i,visibleRowStartIndex:l,visibleRowStopIndex:u})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n,o,a){return r.props.onScroll({horizontalScrollDirection:n,scrollLeft:e,scrollTop:t,verticalScrollDirection:o,scrollUpdateWasRequested:a})})),r._getItemStyle=void 0,r._getItemStyle=function(e,t){var o,a=r.props,i=a.columnWidth,l=a.direction,u=a.rowHeight,s=r._getItemStyleCache(C&&i,C&&l,C&&u),d=e+":"+t;if(s.hasOwnProperty(d))o=s[d];else{var f=n(r.props,t,r._instanceProps),p="rtl"===l;s[d]=o={position:"absolute",left:p?void 0:f,right:p?f:void 0,top:E(r.props,e,r._instanceProps),height:w(r.props,e,r._instanceProps),width:c(r.props,t,r._instanceProps)}}return o},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScroll=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.clientWidth,a=t.scrollLeft,i=t.scrollTop,l=t.scrollHeight,u=t.scrollWidth;r.setState((function(e){if(e.scrollLeft===a&&e.scrollTop===i)return null;var t=r.props.direction,s=a;if("rtl"===t)switch(_()){case"negative":s=-a;break;case"positive-descending":s=u-o-a}s=Math.max(0,Math.min(s,u-o));var c=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:s,scrollTop:c,verticalScrollDirection:e.scrollTop<i?"forward":"backward",scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,g)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1)}))},r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),P(e),null};var j=t.prototype;return j.scrollTo=function(e){var t=e.scrollLeft,n=e.scrollTop;void 0!==t&&(t=Math.max(0,t)),void 0!==n&&(n=Math.max(0,n)),this.setState((function(e){return void 0===t&&(t=e.scrollLeft),void 0===n&&(n=e.scrollTop),e.scrollLeft===t&&e.scrollTop===n?null:{horizontalScrollDirection:e.scrollLeft<t?"forward":"backward",scrollLeft:t,scrollTop:n,scrollUpdateWasRequested:!0,verticalScrollDirection:e.scrollTop<n?"forward":"backward"}}),this._resetIsScrollingDebounced)},j.scrollToItem=function(e){var t=e.align,n=void 0===t?"auto":t,r=e.columnIndex,o=e.rowIndex,a=this.props,i=a.columnCount,l=a.height,u=a.rowCount,s=a.width,c=this.state,f=c.scrollLeft,p=c.scrollTop,_=h();void 0!==r&&(r=Math.max(0,Math.min(r,i-1))),void 0!==o&&(o=Math.max(0,Math.min(o,u-1)));var g=d(this.props,this._instanceProps),b=v(this.props,this._instanceProps)>s?_:0,O=g>l?_:0;this.scrollTo({scrollLeft:void 0!==r?m(this.props,r,n,f,this._instanceProps,O):f,scrollTop:void 0!==o?y(this.props,o,n,p,this._instanceProps,b):p})},j.componentDidMount=function(){var e=this.props,t=e.initialScrollLeft,n=e.initialScrollTop;if(null!=this._outerRef){var r=this._outerRef;"number"==typeof t&&(r.scrollLeft=t),"number"==typeof n&&(r.scrollTop=n)}this._callPropsCallbacks()},j.componentDidUpdate=function(){var e=this.props.direction,t=this.state,n=t.scrollLeft,r=t.scrollTop;if(t.scrollUpdateWasRequested&&null!=this._outerRef){var o=this._outerRef;if("rtl"===e)switch(_()){case"negative":o.scrollLeft=-n;break;case"positive-ascending":o.scrollLeft=n;break;default:var a=o.clientWidth,i=o.scrollWidth;o.scrollLeft=i-a-n}else o.scrollLeft=Math.max(0,n);o.scrollTop=Math.max(0,r)}this._callPropsCallbacks()},j.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},j.render=function(){var e=this.props,t=e.children,n=e.className,o=e.columnCount,a=e.direction,i=e.height,l=e.innerRef,u=e.innerElementType,c=e.innerTagName,f=e.itemData,p=e.itemKey,h=void 0===p?b:p,m=e.outerElementType,_=e.outerTagName,g=e.rowCount,y=e.style,O=e.useIsScrolling,w=e.width,E=this.state.isScrolling,M=this._getHorizontalRangeToRender(),S=M[0],x=M[1],C=this._getVerticalRangeToRender(),P=C[0],j=C[1],I=[];if(o>0&&g)for(var k=P;k<=j;k++)for(var D=S;D<=x;D++)I.push((0,s.createElement)(t,{columnIndex:D,data:f,isScrolling:O?E:void 0,key:h({columnIndex:D,data:f,rowIndex:k}),rowIndex:k,style:this._getItemStyle(k,D)}));var R=d(this.props,this._instanceProps),N=v(this.props,this._instanceProps);return(0,s.createElement)(m||_||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},y)},(0,s.createElement)(u||c||"div",{children:I,ref:l,style:{height:R,pointerEvents:E?"none":void 0,width:N}}))},j._callPropsCallbacks=function(){var e=this.props,t=e.columnCount,n=e.onItemsRendered,r=e.onScroll,o=e.rowCount;if("function"==typeof n&&t>0&&o>0){var a=this._getHorizontalRangeToRender(),i=a[0],l=a[1],u=a[2],s=a[3],c=this._getVerticalRangeToRender(),d=c[0],f=c[1],p=c[2],v=c[3];this._callOnItemsRendered(i,l,d,f,u,s,p,v)}if("function"==typeof r){var h=this.state,m=h.horizontalScrollDirection,_=h.scrollLeft,g=h.scrollTop,b=h.scrollUpdateWasRequested,y=h.verticalScrollDirection;this._callOnScroll(_,g,m,y,b)}},j._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,s=u.horizontalScrollDirection,c=u.isScrolling,d=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var p=i(this.props,d,this._instanceProps),v=l(this.props,p,d,this._instanceProps),h=c&&"backward"!==s?1:Math.max(1,f),m=c&&"forward"!==s?1:Math.max(1,f);return[Math.max(0,p-h),Math.max(0,Math.min(t-1,v+m)),p,v]},j._getVerticalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanCount,r=e.overscanRowCount,o=e.overscanRowsCount,a=e.rowCount,i=this.state,l=i.isScrolling,u=i.verticalScrollDirection,s=i.scrollTop,c=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var d=M(this.props,s,this._instanceProps),f=S(this.props,d,s,this._instanceProps),p=l&&"backward"!==u?1:Math.max(1,c),v=l&&"forward"!==u?1:Math.max(1,c);return[Math.max(0,d-p),Math.max(0,Math.min(a-1,f+v)),d,f]},t}(s.PureComponent)).defaultProps={direction:"ltr",itemData:void 0,useIsScrolling:!1},t}var O=function(e,t){e.children,e.direction,e.height,e.innerTagName,e.outerTagName,e.overscanColumnsCount,e.overscanCount,e.overscanRowsCount,e.width,t.instance},w=function(e,t){var n=e.rowCount,r=t.rowMetadataMap,o=t.estimatedRowHeight,a=t.lastMeasuredRowIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},E=function(e,t){var n=e.columnCount,r=t.columnMetadataMap,o=t.estimatedColumnWidth,a=t.lastMeasuredColumnIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},M=function(e,t,n,r){var o,a,i;if("column"===e?(o=r.columnMetadataMap,a=t.columnWidth,i=r.lastMeasuredColumnIndex):(o=r.rowMetadataMap,a=t.rowHeight,i=r.lastMeasuredRowIndex),n>i){var l=0;if(i>=0){var u=o[i];l=u.offset+u.size}for(var s=i+1;s<=n;s++){var c=a(s);o[s]={offset:l,size:c},l+=c}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},S=function(e,t,n,r){var o,a;return"column"===e?(o=n.columnMetadataMap,a=n.lastMeasuredColumnIndex):(o=n.rowMetadataMap,a=n.lastMeasuredRowIndex),(a>0?o[a].offset:0)>=r?x(e,t,n,a,0,r):C(e,t,n,Math.max(0,a),r)},x=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=M(e,t,i,n).offset;if(l===a)return i;l<a?o=i+1:l>a&&(r=i-1)}return o>0?o-1:0},C=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&M(e,t,r,n).offset<o;)r+=i,i*=2;return x(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},P=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=M(e,t,n,a),s="column"===e?E(t,a):w(t,a),c=Math.max(0,Math.min(s-l,u.offset)),d=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=d-l&&o<=c+l?"auto":"center"),r){case"start":return c;case"end":return d;case"center":return Math.round(d+(c-d)/2);default:return o>=d&&o<=c?o:d>c||o<d?d:c}},j=y({getColumnOffset:function(e,t,n){return M("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return S("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=M("column",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=M("column",e,s,r).size;return s},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:E,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return P("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return P("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return M("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return S("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=M("row",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=M("row",e,s,r).size;return s},initInstanceProps:function(e,t){var n=e,r={columnMetadataMap:{},estimatedColumnWidth:n.estimatedColumnWidth||50,estimatedRowHeight:n.estimatedRowHeight||50,lastMeasuredColumnIndex:-1,lastMeasuredRowIndex:-1,rowMetadataMap:{}};return t.resetAfterColumnIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({columnIndex:e,shouldForceUpdate:n})},t.resetAfterRowIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({rowIndex:e,shouldForceUpdate:n})},t.resetAfterIndices=function(e){var n=e.columnIndex,o=e.rowIndex,a=e.shouldForceUpdate,i=void 0===a||a;"number"==typeof n&&(r.lastMeasuredColumnIndex=Math.min(r.lastMeasuredColumnIndex,n-1)),"number"==typeof o&&(r.lastMeasuredRowIndex=Math.min(r.lastMeasuredRowIndex,o-1)),t._getItemStyleCache(-1),i&&t.forceUpdate()},r},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.columnWidth,e.rowHeight}}),I=150,k=function(e,t){return e};function D(e){var t,n=e.getItemOffset,i=e.getEstimatedTotalSize,l=e.getItemSize,c=e.getOffsetForIndexAndAlignment,d=e.getStartIndexForOffset,v=e.getStopIndexForStartIndex,m=e.initInstanceProps,g=e.shouldResetStyleCacheOnItemSizeChange,b=e.validateProps;return t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=m(r.props,(0,o.Z)(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:(0,o.Z)(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"==typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,a=o.direction,i=o.itemSize,u=o.layout,s=r._getItemStyleCache(g&&i,g&&u,g&&a);if(s.hasOwnProperty(e))t=s[e];else{var c=n(r.props,e,r._instanceProps),d=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,p="rtl"===a,v=f?c:0;s[e]=t={position:"absolute",left:p?void 0:v,right:p?v:void 0,top:f?0:c,height:f?"100%":d,width:f?d:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,a=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,i=o;if("rtl"===t)switch(_()){case"negative":i=-o;break;case"positive-descending":i=a-n-o}return i=Math.max(0,Math.min(i,a-n)),{isScrolling:!0,scrollDirection:e.scrollOffset<o?"forward":"backward",scrollOffset:i,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._onScrollVertical=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.scrollHeight,a=t.scrollTop;r.setState((function(e){if(e.scrollOffset===a)return null;var t=Math.max(0,Math.min(a,o-n));return{isScrolling:!0,scrollDirection:e.scrollOffset<t?"forward":"backward",scrollOffset:t,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,I)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1,null)}))},r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return R(e,t),b(e),null};var y=t.prototype;return y.scrollTo=function(e){e=Math.max(0,e),this.setState((function(t){return t.scrollOffset===e?null:{scrollDirection:t.scrollOffset<e?"forward":"backward",scrollOffset:e,scrollUpdateWasRequested:!0}}),this._resetIsScrollingDebounced)},y.scrollToItem=function(e,t){void 0===t&&(t="auto");var n=this.props,r=n.itemCount,o=n.layout,a=this.state.scrollOffset;e=Math.max(0,Math.min(e,r-1));var i=0;if(this._outerRef){var l=this._outerRef;i="vertical"===o?l.scrollWidth>l.clientWidth?h():0:l.scrollHeight>l.clientHeight?h():0}this.scrollTo(c(this.props,e,t,a,this._instanceProps,i))},y.componentDidMount=function(){var e=this.props,t=e.direction,n=e.initialScrollOffset,r=e.layout;if("number"==typeof n&&null!=this._outerRef){var o=this._outerRef;"horizontal"===t||"horizontal"===r?o.scrollLeft=n:o.scrollTop=n}this._callPropsCallbacks()},y.componentDidUpdate=function(){var e=this.props,t=e.direction,n=e.layout,r=this.state,o=r.scrollOffset;if(r.scrollUpdateWasRequested&&null!=this._outerRef){var a=this._outerRef;if("horizontal"===t||"horizontal"===n)if("rtl"===t)switch(_()){case"negative":a.scrollLeft=-o;break;case"positive-ascending":a.scrollLeft=o;break;default:var i=a.clientWidth,l=a.scrollWidth;a.scrollLeft=l-i-o}else a.scrollLeft=o;else a.scrollTop=o}this._callPropsCallbacks()},y.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},y.render=function(){var e=this.props,t=e.children,n=e.className,o=e.direction,a=e.height,l=e.innerRef,u=e.innerElementType,c=e.innerTagName,d=e.itemCount,f=e.itemData,p=e.itemKey,v=void 0===p?k:p,h=e.layout,m=e.outerElementType,_=e.outerTagName,g=e.style,b=e.useIsScrolling,y=e.width,O=this.state.isScrolling,w="horizontal"===o||"horizontal"===h,E=w?this._onScrollHorizontal:this._onScrollVertical,M=this._getRangeToRender(),S=M[0],x=M[1],C=[];if(d>0)for(var P=S;P<=x;P++)C.push((0,s.createElement)(t,{data:f,key:v(P,f),index:P,isScrolling:b?O:void 0,style:this._getItemStyle(P)}));var j=i(this.props,this._instanceProps);return(0,s.createElement)(m||_||"div",{className:n,onScroll:E,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:a,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},g)},(0,s.createElement)(u||c||"div",{children:C,ref:l,style:{height:w?"100%":j,pointerEvents:O?"none":void 0,width:w?j:"100%"}}))},y._callPropsCallbacks=function(){if("function"==typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"==typeof this.props.onScroll){var a=this.state,i=a.scrollDirection,l=a.scrollOffset,u=a.scrollUpdateWasRequested;this._callOnScroll(i,l,u)}},y._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,a=r.scrollDirection,i=r.scrollOffset;if(0===t)return[0,0,0,0];var l=d(this.props,i,this._instanceProps),u=v(this.props,l,i,this._instanceProps),s=o&&"backward"!==a?1:Math.max(1,n),c=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-s),Math.max(0,Math.min(t-1,u+c)),l,u]},t}(s.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var R=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},N=function(e,t,n){var r=e.itemSize,o=n.itemMetadataMap,a=n.lastMeasuredIndex;if(t>a){var i=0;if(a>=0){var l=o[a];i=l.offset+l.size}for(var u=a+1;u<=t;u++){var s=r(u);o[u]={offset:i,size:s},i+=s}n.lastMeasuredIndex=t}return o[t]},L=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=N(e,a,t).offset;if(i===o)return a;i<o?r=a+1:i>o&&(n=a-1)}return r>0?r-1:0},T=function(e,t){var n=e.itemCount,r=t.itemMetadataMap,o=t.estimatedItemSize,a=t.lastMeasuredIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},z=D({getItemOffset:function(e,t,n){return N(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:T,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,s=e.width,c="horizontal"===i||"horizontal"===u?s:l,d=N(e,t,o),f=T(e,o),p=Math.max(0,Math.min(f-c,d.offset)),v=Math.max(0,d.offset-c+d.size+a);switch("smart"===n&&(n=r>=v-c&&r<=p+c?"auto":"center"),n){case"start":return p;case"end":return v;case"center":return Math.round(v+(p-v)/2);default:return r>=v&&r<=p?r:r<v?v:p}},getStartIndexForOffset:function(e,t,n){return function(e,t,n){var r=t.itemMetadataMap,o=t.lastMeasuredIndex;return(o>0?r[o].offset:0)>=n?L(e,t,o,0,n):function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&N(e,n,t).offset<r;)n+=a,a*=2;return L(e,t,Math.min(n,o-1),Math.floor(n/2),r)}(e,t,Math.max(0,o),n)}(e,n,t)},getStopIndexForStartIndex:function(e,t,n,r){for(var o=e.direction,a=e.height,i=e.itemCount,l=e.layout,u=e.width,s="horizontal"===o||"horizontal"===l?u:a,c=N(e,t,r),d=n+s,f=c.offset+c.size,p=t;p<i-1&&f<d;)p++,f+=N(e,p,r).size;return p},initInstanceProps:function(e,t){var n={itemMetadataMap:{},estimatedItemSize:e.estimatedItemSize||50,lastMeasuredIndex:-1};return t.resetAfterIndex=function(e,r){void 0===r&&(r=!0),n.lastMeasuredIndex=Math.min(n.lastMeasuredIndex,e-1),t._getItemStyleCache(-1),r&&t.forceUpdate()},n},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.itemSize}}),A=y({getColumnOffset:function(e,t){return t*e.columnWidth},getColumnWidth:function(e,t){return e.columnWidth},getRowOffset:function(e,t){return t*e.rowHeight},getRowHeight:function(e,t){return e.rowHeight},getEstimatedTotalHeight:function(e){var t=e.rowCount;return e.rowHeight*t},getEstimatedTotalWidth:function(e){var t=e.columnCount;return e.columnWidth*t},getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){var i=e.columnCount,l=e.columnWidth,u=e.width,s=Math.max(0,i*l-u),c=Math.min(s,t*l),d=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=d-u&&r<=c+u?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(u/2)?0:f>s+Math.floor(u/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,s=Math.max(0,u*i-l),c=Math.min(s,t*i),d=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=d-l&&r<=c+l?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(l/2)?0:f>s+Math.floor(l/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getColumnStartIndexForOffset:function(e,t){var n=e.columnWidth,r=e.columnCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getColumnStopIndexForStartIndex:function(e,t,n){var r=e.columnWidth,o=e.columnCount,a=e.width,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},getRowStartIndexForOffset:function(e,t){var n=e.rowHeight,r=e.rowCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getRowStopIndexForStartIndex:function(e,t,n){var r=e.rowHeight,o=e.rowCount,a=e.height,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.columnWidth,e.rowHeight}}),H=D({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.itemCount,s=e.itemSize,c=e.layout,d=e.width,f="horizontal"===i||"horizontal"===c?d:l,p=Math.max(0,u*s-f),v=Math.min(p,t*s),h=Math.max(0,t*s-f+s+a);switch("smart"===n&&(n=r>=h-f&&r<=v+f?"auto":"center"),n){case"start":return v;case"end":return h;case"center":var m=Math.round(h+(v-h)/2);return m<Math.ceil(f/2)?0:m>p+Math.floor(f/2)?p:m;default:return r>=h&&r<=v?r:r<h?h:v}},getStartIndexForOffset:function(e,t){var n=e.itemCount,r=e.itemSize;return Math.max(0,Math.min(n-1,Math.floor(t/r)))},getStopIndexForStartIndex:function(e,t,n){var r=e.direction,o=e.height,a=e.itemCount,i=e.itemSize,l=e.layout,u=e.width,s=t*i,c="horizontal"===r||"horizontal"===l?u:o,d=Math.ceil((c+n-s)/i);return Math.max(0,Math.min(a-1,t+d-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.itemSize}});function B(e,t){for(var n in e)if(!(n in t))return!0;for(var r in t)if(e[r]!==t[r])return!0;return!1}var F=["style"],V=["style"];function W(e,t){var n=e.style,r=(0,c.Z)(e,F),o=t.style,a=(0,c.Z)(t,V);return!B(n,o)&&!B(r,a)}function G(e,t){return!W(this.props,e)||B(this.state,t)}},7274:function(e,t){var n,r;n=function(){var e=/(auto|scroll)/,t=function(e,n){return null===e.parentNode?n:t(e.parentNode,n.concat([e]))},n=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},r=function(t){return e.test(function(e){return n(e,"overflow")+n(e,"overflow-y")+n(e,"overflow-x")}(t))};return function(e){if(e instanceof HTMLElement||e instanceof SVGElement){for(var n=t(e.parentNode,[]),o=0;o<n.length;o+=1)if(r(n[o]))return n[o];return document.scrollingElement||document.documentElement}}},void 0===(r=n.apply(t,[]))||(e.exports=r)},7237:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5580));t.default=function(e){var t,n=e.children,r=e.className,l=e.onClick,u=e.onPointerDown,s=e.containerRef,c=e.disabled,d=void 0!==c&&c,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.noShadow,_=void 0!==m&&m,g=e.noPadding,b=void 0!==g&&g,y=e.noBorder,O=void 0!==y&&y,w=e.transparent,E=void 0!==w&&w,M=e.stretchHorizontally,S=void 0!==M&&M,x=e.stretchVertically,C=void 0!==x&&x,P=e.autoFocus,j=void 0!==P&&P,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,N=e.size,L=void 0===N?"medium":N,T=e.type;return o.default.createElement("button",{ref:s,className:(0,a.default)([i.default.container,i.default[L],i.default[R],(t={},t[i.default.inverted]=p,t[i.default.rounded]=h,t[i.default.noShadow]=_,t[i.default.noPadding]=b,t[i.default.noBorder]=O,t[i.default.transparent]=E,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=C,t[i.default.leftOffset]=h&&k.includes("left"),t[i.default.rightOffset]=h&&k.includes("right"),t),r]),disabled:d,autoFocus:j,type:T,role:"button",onClick:l,onPointerDown:u},"string"!=typeof n&&Array.isArray(n)&&n.length?o.default.createElement("div",{className:i.default.content},n):n)}},9508:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var o=n(7237);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(o).default}})},289:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(3391));t.default=function(e){var t,n=e.children,r=e.inverted,l=void 0!==r&&r,u=e.className;return o.default.createElement("div",{className:(0,a.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=l,t),u])},n)}},4127:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var o=n(289);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(o).default}})},5798:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(2457));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.size,d=e.containerRef,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.transparent,_=void 0!==m&&m,g=e.noShadow,b=void 0!==g&&g,y=e.noPadding,O=void 0!==y&&y,w=e.noBorder,E=void 0!==w&&w,M=e.stretchHorizontally,S=void 0!==M&&M,x=e.stretchVertically,C=void 0!==x&&x,P=e.disabled,j=void 0!==P&&P,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,N=o(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:d,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[c],u.default[R],(t={},t[u.default.inverted]=p,t[u.default.rounded]=h,t[u.default.noShadow]=b,t[u.default.noPadding]=O,t[u.default.noBorder]=E,t[u.default.disabled]=j,t[u.default.transparent]=_,t[u.default.stretchHorizontally]=S,t[u.default.stretchVertically]=C,t[u.default.leftOffset]=h&&k.includes("left"),t[u.default.rightOffset]=h&&k.includes("right"),t),s])},N),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var o=n(5798);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(o).default}})},819:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(4115),c=i(n(7941));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,o=e.checked,a=e.disabled,i=e.name,d=e.className,f=e.indeterminate,p=e.size,v=void 0===p?"medium":p,h=e.autoFocus,m=void 0!==h&&h,_=(0,l.useCallback)((function(e){"function"==typeof n&&n(e.target.checked)}),[n]),g=l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([c.default.checkbox,d,c.default[v]]),onChange:_,placeholder:r,name:i,type:"checkbox",autoFocus:m});return t?l.default.createElement(s.Label,{value:t},g):l.default.createElement(l.default.Fragment,null,g)}},4616:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var o=n(819);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(o).default}})},5801:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(2554),l=r(n(4560));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,u=e.selectedColor,s=e.direction,c=void 0===s?"vertical":s,d=e.canToggle,f=void 0!==d&&d;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[c]])},t.map((function(e){return o.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==u?void 0:u.key),onClick:function(){f&&e.key===(null==u?void 0:u.key)?r(null):r(e)}})})))}},7429:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var o=n(5801);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(o).default}})},5324:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5057));t.default=function(e){var t,n=e.color,r=e.containerRef,l=e.isSelected,u=void 0!==l&&l,s=e.size,c=void 0===s?"medium":s,d=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:d,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var o=n(5324);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(o).default}})},4619:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(1391),l=r(n(7855));function u(e){var t,n=e.className,r=e.children,u=e.containerRef,s=e.header,c=e.isOpen,d=e.buttonsLeft,f=void 0===d?[]:d,p=e.buttonsRight,v=void 0===p?[]:p,h=e.onClose,m=void 0===h?function(){}:h,_=e.noPadding,g=void 0!==_&&_,b=e.noOverlay,y=void 0!==b&&b,O=e.noShadow,w=void 0!==O&&O,E=e.baseZIndex,M=void 0===E?1019:E;return o.default.createElement(i.Modal,{containerRef:u,isOpen:c,onClose:m,noOverlay:y,noShadow:w,baseZIndex:M},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!s&&o.default.createElement("h1",{className:l.default.modalHeader},s),o.default.createElement("div",{className:(0,a.default)([l.default.modalContent,(t={},t[l.default.noPadding]=g,t)])},r),o.default.createElement("div",{className:l.default.modalButtonsContainer},o.default.createElement("div",{className:l.default.modalButtons},f),o.default.createElement("div",{className:l.default.modalButtons},v))))}u.displayName="ConfirmationModal",t.default=u},6873:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var o=n(4619);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(o).default}})},9745:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useDrawerContext=t.DrawerContext=void 0;var o=r(n(6689));t.DrawerContext=o.default.createContext({}),t.useDrawerContext=function(){return o.default.useContext(t.DrawerContext)}},3096:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=i(n(7659)),u=a(n(6689)),s=i(n(6405)),c=i(n(2838)),d=n(8744),f=n(6790),p=n(60),v=n(5089),h=n(9745),m=n(5172),_={enter:c.default.drawerPaperEnter,enterActive:c.default.drawerPaperEnterActive,enterDone:c.default.drawerPaperEnterDone,exit:c.default.drawerPaperExit,exitActive:c.default.drawerPaperExitActive,exitDone:c.default.drawerPaperExitDone};function g(e){var t,n,r=e.open,o=e.className,a=e.style,i=e.noCloseIcon,f=void 0!==i&&i,p=e.noOverlay,v=void 0!==p&&p,g=e.children,b=e.unmountOnExit,y=void 0!==b&&b,O=e.mountOnEnter,w=void 0!==O&&O,E=e.portalContainer,M=void 0===E?document.body:E,S=e.onClose,x=e.onCloseAnimationEnd,C=(0,u.useState)(!1),P=C[0],j=C[1],I=(0,u.useState)(!1),k=I[0],D=I[1],R=(0,u.useRef)(null),N=function(e){var t,n;return null===(n=null===(t=e.current)||void 0===t?void 0:t.className.match(Object.values(_).join("|")))||void 0===n?void 0:n[0]}(R),L=(0,u.useMemo)((function(){return{onClose:S,noCloseIcon:f}}),[S,f]);(0,m.useHotkeys)("Escape",S);var T=(0,u.useCallback)((function(){j(!0),D(!0)}),[]),z=(0,u.useCallback)((function(){D(!1)}),[]),A=(0,u.useCallback)((function(){j(!1),null==x||x()}),[x]);return s.default.createPortal(u.default.createElement(d.CSSTransition,{nodeRef:R,in:r,timeout:300,classNames:_,unmountOnExit:y,mountOnEnter:w,onExited:A,onEnter:T,onExit:z},u.default.createElement(h.DrawerContext.Provider,{value:L},u.default.createElement("div",{className:(0,l.default)([c.default.drawer,o,(t={},t[c.default.visible]=P,t)])},u.default.createElement("div",{ref:R,className:(0,l.default)([c.default.drawerPaper,N]),style:a},u.default.createElement("div",{className:c.default.drawerPaperContent},g)),u.default.createElement("div",{className:(0,l.default)([c.default.drawerOverlay,(n={},n[c.default.noOverlay]=v,n[c.default.visible]=k,n)]),onClick:S})))),M)}g.Header=p.DrawerHeader,g.Content=v.DrawerContent,g.Footer=f.DrawerFooter,t.default=g},4190:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=r(n(8930));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.drawerContent,n])},t)}},5089:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerContent=void 0;var o=n(4190);Object.defineProperty(t,"DrawerContent",{enumerable:!0,get:function(){return r(o).default}})},1848:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=r(n(6282));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.drawerFooter,n])},t)}},6790:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerFooter=void 0;var o=n(1848);Object.defineProperty(t,"DrawerFooter",{enumerable:!0,get:function(){return r(o).default}})},7365:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=n(4958),l=r(n(8799)),u=r(n(713)),s=n(9745);t.default=function(e){var t=e.children,n=e.className,r=(0,s.useDrawerContext)(),c=r.onClose,d=r.noCloseIcon;return a.default.createElement("div",{className:(0,o.default)([u.default.drawerHeader,n])},!d&&a.default.createElement("div",{className:u.default.drawerHeaderClose},a.default.createElement("div",{className:u.default.drawerHeaderCloseIcon,onClick:c},a.default.createElement(i.Icon,{src:l.default,size:"xlarge"}))),t)}},60:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerHeader=void 0;var o=n(7365);Object.defineProperty(t,"DrawerHeader",{enumerable:!0,get:function(){return r(o).default}})},3212:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Drawer=void 0;var o=n(3096);Object.defineProperty(t,"Drawer",{enumerable:!0,get:function(){return r(o).default}})},943:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(6114)),u=r(n(3210));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return o.default.createElement(a.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},o.default.createElement("div",{className:l.default.container},t,o.default.createElement(i.Icon,{alt:"Dropdown",src:u.default})))}},3064:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=a(n(6689)),l=n(5348),u=n(943),s=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,c=e.selectedItem,d=e.placement,f=void 0===d?{vertical:"bottom",horizontal:"left"}:d,p=(0,i.useState)(!1),v=p[0],h=p[1],m=(0,l.useOutsideClick)((function(){return h(!1)})),_=!n||0===n.length,g=function(){return h(!v)};return i.default.createElement(s.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:_,selectedItem:c,toggleIsOpen:g}):i.default.createElement(u.Clickable,{display:o,isDisabled:_,onClick:g}),placement:f,ref:m},i.default.createElement(s.Menu,{isOpen:v},n&&n.map((function(e){return i.default.createElement(s.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},1889:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(3064);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var o=n(943);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return o.Clickable}})},2205:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8117));t.default=function(e){var t,n=e.children,r=e.accept,l=e.onChange,u=e.inputRef,s=e.multiple,c=void 0!==s&&s,d=e.disabled,f=void 0!==d&&d,p=e.inverted,v=void 0!==p&&p,h=e.noShadow,m=void 0!==h&&h,_=e.noBorder,g=void 0!==_&&_,b=e.noPadding,y=void 0!==b&&b,O=e.transparent,w=void 0!==O&&O,E=e.stretchHorizontally,M=void 0!==E&&E,S=e.stretchVertically,x=void 0!==S&&S,C=e.rounded,P=void 0!==C&&C,j=e.size,I=void 0===j?"medium":j;return o.default.createElement("label",{className:(0,a.default)([i.default.label,i.default[I],(t={},t[i.default.inverted]=v,t[i.default.rounded]=P,t[i.default.noShadow]=m,t[i.default.noBorder]=g,t[i.default.noPadding]=y,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=M,t[i.default.stretchVertically]=x,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var o=n(2205);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(o).default}})},4200:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7800));t.default=function(e){var t,n=e.className,r=e.children,l=e.containerRef,u=e.layout,s=void 0===u?"column":u,c=e.placement,d=void 0===c?{horizontal:"center",vertical:"bottom",parent:"viewport"}:c,f="center"===d.horizontal?"horizontalCenter":d.horizontal,p="center"===d.vertical?"verticalCenter":d.vertical;return o.default.createElement("div",{ref:l,"data-testid":"floating-panel",className:(0,a.default)([i.default.container,i.default[f],i.default[p],i.default[s],(t={},t[i.default.fixed]="container"!==d.parent,t),n])},r)}},6384:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var o=n(4200);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(o).default}})},6535:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7060));t.default=function(e){var t,n=e.src,r=e.alt,l=e.containerRef,u=e.size,s=void 0===u?"medium":u,c=e.inverted,d=void 0!==c&&c;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[s],(t={},t[i.default.inverted]=d,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var o=n(6535);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(o).default}})},6698:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(4958),l=r(n(2844));t.default=function(e){var t,n=e.className,r=e.containerRef,u=e.children,s=e.src,c=e.alt,d=e.offsetSides,f=void 0===d?[]:d,p=e.onClick,v=void 0===p?function(){}:p,h=e.disabled,m=void 0!==h&&h,_=e.inverted,g=void 0!==_&&_,b=e.noShadow,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,E=e.transparent,M=void 0!==E&&E,S=e.rounded,x=void 0!==S&&S,C=e.size,P=void 0===C?"medium":C,j=e.type,I=void 0===j?"button":j;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[P],(t={},t[l.default.inverted]=g,t[l.default.rounded]=x,t[l.default.noShadow]=y,t[l.default.noBorder]=w,t[l.default.transparent]=M,t[l.default.topOffset]=x&&f.includes("top"),t[l.default.rightOffset]=x&&f.includes("right"),t[l.default.bottomOffset]=x&&f.includes("bottom"),t[l.default.leftOffset]=x&&f.includes("left"),t),n]),disabled:m,onClick:v,type:I,role:"button"},o.default.createElement(i.Icon,{src:s,alt:c,size:P,inverted:g}),u)}},2847:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var o=n(6698);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(o).default}})},749:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(4958),s=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,c=e.children,d=e.className,f=e.src,p=e.alt,v=e.inverted,h=void 0!==v&&v,m=e.noShadow,_=void 0!==m&&m,g=e.noBorder,b=void 0!==g&&g,y=e.transparent,O=void 0!==y&&y,w=e.rounded,E=void 0!==w&&w,M=e.offsetSides,S=void 0===M?[]:M,x=e.disabled,C=void 0!==x&&x,P=e.size,j=void 0===P?"medium":P,I=o(e,["as","containerRef","children","className","src","alt","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:a,"data-testid":"icon-button-link",className:(0,l.default)([s.default.container,s.default[j],(t={},t[s.default.inverted]=h,t[s.default.rounded]=E,t[s.default.noShadow]=_,t[s.default.noBorder]=b,t[s.default.disabled]=C,t[s.default.transparent]=O,t[s.default.topOffset]=E&&S.includes("top"),t[s.default.rightOffset]=E&&S.includes("right"),t[s.default.bottomOffset]=E&&S.includes("bottom"),t[s.default.leftOffset]=E&&S.includes("left"),t),d])},I),i.default.createElement(u.Icon,{src:f,alt:p,size:j,inverted:h}),c)}},5860:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var o=n(749);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(o).default}})},5084:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(1513));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,l=e.srcHeight,u=e.children,s=e.containerRef,c=e.layout,d=void 0===c?"contain":c,f=e.decoding,p=void 0===f?"auto":f,v=e.loading,h=void 0===v?"eager":v,m=e.style,_=o.default.createElement("img",{className:(0,a.default)([i.default.image,i.default[d]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:l,decoding:p,loading:h,style:m});return u?o.default.createElement("div",{ref:s,className:(0,a.default)([i.default.container,i.default.hasOverlay])},_,u&&o.default.createElement("div",{className:i.default.overlay},u)):_}},3928:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var o=n(5084);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(o).default}})},6392:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8197));t.default=function(e){var t=e.className,n=e.children,r=e.value,l=e.containerRef;return o.default.createElement("label",{ref:l,className:(0,a.default)([i.default.container,t])},r,n)}},4115:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var o=n(6392);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(o).default}})},9611:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8639));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,l=e.header,u=e.headerActions;return o.default.createElement("div",{ref:r,className:(0,a.default)([i.default.container,n])},(l||u)&&o.default.createElement("div",{className:i.default.header},l&&o.default.createElement("h3",{className:i.default.headerLabel,id:l.id},l.text),u),o.default.createElement("ul",{"aria-labelledby":null==l?void 0:l.id,className:i.default.list},t))}},1332:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(9508),l=r(n(1725));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,u=e.disabled,s=void 0!==u&&u,c=e.transparent,d=void 0!==c&&c,f=e.noPadding,p=void 0!==f&&f,v=e.size,h=void 0===v?"medium":v,m=e.align,_=void 0===m?"center":m,g=e.onClick,b=void 0===g?function(){}:g;return o.default.createElement("li",{className:(0,a.default)([l.default.listViewItem])},o.default.createElement(i.Button,{onClick:b,disabled:s,inverted:r,transparent:d,noPadding:p,align:_,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(75),s=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,c=void 0!==a&&a,d=e.transparent,f=void 0!==d&&d,p=e.noPadding,v=void 0!==p&&p,h=e.align,m=void 0===h?"center":h,_=e.size,g=void 0===_?"medium":_,b=o(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,l.default)([s.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:c,transparent:f,noPadding:v,align:m,size:g,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var o=n(9611);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(o).default}});var a=n(1332);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(a).default}});var i=n(8569);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},935:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(9633),c=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,d=void 0===i||i,f=e.header,p=e.footer,v=e.smartLayout,h=void 0===v||v,m=(0,l.useContext)(s.PlacementContext),_=(0,l.useRef)(null),g=o||_;if(!m)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,l.useLayoutEffect)((function(){if(h&&g.current){var e=g.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===m.vertical?t:window.innerHeight-n;if(r<0){var o=g.current.querySelector("ul"),a=o.querySelectorAll("li,a"),i=o.clientHeight+r,l=a.length?getComputedStyle(a[0]).minHeight:0;o.style.maxHeight="calc(".concat(i,"px - ").concat(l,")")}}}),[d,m,h]),d?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:g,className:(0,u.default)([c.default.menu,(t={},t[c.default.open]=d,t),a])},l.default.createElement("div",null,f&&d&&l.default.createElement("h3",{className:c.default.header},f),l.default.createElement("ul",null,r)),p&&d&&l.default.createElement("div",{className:(0,u.default)([c.default.footer,(n={},n[c.default.noBorder]=!r,n)])},p))):null}},9633:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PlacementContext=void 0;var l=a(n(6689)),u=i(n(7659)),s=i(n(2752));t.PlacementContext=l.default.createContext(void 0),t.default=(0,l.forwardRef)((function(e,n){var r=e.children,o=e.button,a=e.className,i=e.placement,c=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([s.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return c}),[c])},l.default.createElement("div",{className:(0,u.default)([s.default.menuContainer,s.default[c.horizontal],s.default[c.vertical]])},r)))}))},9385:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(754));t.default=function(e){var t,n,r=e.children,l=e.className,u=e.onClick,s=e.noPadding,c=void 0!==s&&s,d=e.isActive,f=void 0!==d&&d;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=c,n),l]),onClick:u},r)}},9762:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(3079));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.noPadding,d=void 0!==c&&c,f=o(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,l.default)([u.default.menuLinkItem,s,(t={},t[u.default.noPadding]=d,t)])},f),a)}},3814:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var o=n(935);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(o).default}});var a=n(9633);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(a).default}});var i=n(9385);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var l=n(9762);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(l).default}})},4915:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=n(5172),s=i(n(7659)),c=i(n(9118));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,d=e.transparent,f=void 0!==d&&d,p=e.noShadow,v=void 0!==p&&p,h=e.noOverlay,m=void 0!==h&&h,_=e.onClose,g=void 0===_?function(){}:_,b=e.baseZIndex,y=void 0===b?1009:b;(0,u.useHotkeys)("Escape",g);var O=(0,l.useCallback)((function(){g()}),[g]);return a&&l.default.createElement("div",{ref:o},l.default.createElement("div",{style:{zIndex:y},className:(0,s.default)([c.default.overlay,(t={},t[c.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:y+1},className:(0,s.default)([c.default.modal,(n={},n[c.default.transparent]=f,n[c.default.noShadow]=v,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:y+2},className:c.default.modalButton},i))}},1391:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var o=n(4915);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(o).default}})},6791:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(3733)),u=r(n(4330)),s=function(e,t){return 10*e+t},c=function(e){return Math.floor(e/10)},d=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=o.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,f=e.disabled,p=void 0!==f&&f,v=function(e){return function(t){t.stopPropagation(),r(e)}},h=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return o.default.createElement(a.Button,{key:t,disabled:p,noBorder:!0,noShadow:!0,onPointerDown:v(s(n,r))},r)}));return o.default.createElement("div",{className:l.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(c(n));else if(d.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(s(n,t))}},"data-testid":"numpad"},o.default.createElement("div",{className:l.default.numbers},h,o.default.createElement(a.Button,{className:l.default.button,disabled:p,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:v(c(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(6791);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},7845:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(186));t.default=function(e){var t,n=e.children,r=e.containerRef,l=e.transparent,u=void 0!==l&&l,s=e.isFixed,c=void 0!==s&&s,d=e.onClick,f=void 0===d?function(){}:d;return o.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,a.default)([i.default.overlay,(t={},t[i.default.transparent]=u,t[i.default.fixed]=c,t)]),onClick:f},n)}},6650:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var o=n(7845);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(o).default}})},410:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(4685)),c=n(5348),d=n(3781),f=n(2847),p=i(n(3790)),v=n(2568);t.default=function(e){var t,n=e.className,r=e.label,o=e.options,a=(0,l.useContext)(v.SelectContext).showExpandedGroup,i=(0,c.useToggle)(a),h=i[0],m=i[1],_=(0,l.useCallback)((function(){m()}),[]);return l.default.createElement("div",{className:n},l.default.createElement("div",{className:s.default.header,onClick:_},l.default.createElement("div",{className:s.default.label},r),l.default.createElement(f.IconButton,{className:(0,u.default)([(t={},t[s.default.expanded]=h,t)]),src:p.default,alt:h?"Collapse":"Expand",noBorder:!0,transparent:!0})),h&&o.map((function(e){return l.default.createElement(d.Option,{key:e.value,data:e},e.label)})))}},9087:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GroupOption=void 0;var o=n(410);Object.defineProperty(t,"GroupOption",{enumerable:!0,get:function(){return r(o).default}})},1954:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(8054)),c=n(4616),d=n(2568);t.default=function(e){var t,n=e.children,r=e.className,o=e.data,a=(0,l.useContext)(d.SelectContext),i=a.multiple,f=a.selectedOptions,p=a.updateSelectedOption,v=(0,l.useMemo)((function(){return f.map((function(e){return e.value})).includes(o.value)}),[o,f]),h=(0,l.useCallback)((function(){p(o)}),[o,f]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,(t={},t[s.default.selected]=v&&!i,t),r]),onClick:h},i&&l.default.createElement("span",{className:s.default.checkboxContainer},l.default.createElement(c.Checkbox,{className:s.default.checkbox,checked:v,size:"small"})),l.default.createElement("span",{className:s.default.label},n))}},3781:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Option=void 0;var o=n(1954);Object.defineProperty(t,"Option",{enumerable:!0,get:function(){return r(o).default}})},2918:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=void 0;var s=n(5348),c=i(n(6689)),d=n(4616),f=n(9087),p=n(3781),v=n(2568),h=u(n(4822));t.isOption=function(e){return void 0!==e.value},t.default=function(e){var n=e.options,o=e.onFilter,a=e.onChange,i=(0,s.useToggle)(!1),u=i[0],m=i[1],_=(0,c.useContext)(v.SelectContext),g=_.multiple,b=_.searchKeyword,y=_.selectAll,O=_.selectedOptions,w=_.setSelectedOptions,E=n.some((function(e){return!(0,t.isOption)(e)})),M=function(e){var t=b.toLowerCase().trim();return t.length?e.filter((function(e){return o?o(e,t):e.label.toLowerCase().includes(t)})):e},S=(0,c.useMemo)((function(){return E?n.reduce((function(e,t){var n=M(t.options);return n.length?l(l([],e,!0),[r(r({},t),{options:n})],!1):e}),[]):M(n)}),[E,n,b]),x=(0,c.useMemo)((function(){return S.reduce((function(e,n){return(0,t.isOption)(n)?e+1:e+n.options.length}),0)}),[E,S,t.isOption]),C=(0,c.useMemo)((function(){return O.filter((function(e){return S.find((function(n){return(0,t.isOption)(n)?n.value===e.value:n.options.find((function(t){return t.value===e.value}))}))})).length}),[O,S]),P=(0,c.useCallback)((function(){if(u)w([]),a&&a([]);else{var e=S.map((function(e){return(0,t.isOption)(e)?e:e.options})).flat();w(e),a&&a(e.map((function(e){return e.value})))}m()}),[S,t.isOption,u,w,m]);return(0,c.useEffect)((function(){C===x?m(!0):u&&m(!1)}),[C,x,u,m]),c.default.createElement("div",{className:h.default.container},y&&g&&!!S.length&&c.default.createElement("div",{className:h.default.selectAllContainer,onClick:P},c.default.createElement("span",{className:h.default.checkboxContainer},c.default.createElement(d.Checkbox,{className:h.default.checkbox,checked:u,indeterminate:!!C&&C!==x,size:"small"})),c.default.createElement("span",{className:h.default.label},"Select All")),S.length?S.map((function(e){return(0,t.isOption)(e)?c.default.createElement(p.Option,{key:e.value,data:e},e.label):c.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})):c.default.createElement("div",{className:h.default.noOptions},"No matches for",c.default.createElement("span",{className:h.default.searchKeyword}," ".concat(b))))}},4292:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=t.OptionList=void 0;var o=n(2918);Object.defineProperty(t,"OptionList",{enumerable:!0,get:function(){return r(o).default}}),Object.defineProperty(t,"isOption",{enumerable:!0,get:function(){return o.isOption}})},2300:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(2396)),c=n(2568),d=n(1143),f=n(4958),p=i(n(5585)),v=i(n(7451)),h=n(2847);t.default=function(e){var t=e.className,n=(0,l.useContext)(c.SelectContext),r=n.searchKeyword,o=n.setSearchKeyword,a=(0,l.useCallback)((function(e){o(e)}),[r]),i=(0,l.useCallback)((function(){o("")}),[]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,t])},l.default.createElement("div",{className:s.default.iconSearchContainer},l.default.createElement(f.Icon,{src:p.default})),l.default.createElement(d.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(h.IconButton,{className:s.default.resetButton,src:v.default,alt:"Clear",onClick:i,disabled:!r,noBorder:!0,noShadow:!0,transparent:!0}))}},8947:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Search=void 0;var o=n(2300);Object.defineProperty(t,"Search",{enumerable:!0,get:function(){return r(o).default}})},4113:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(3790)),c=i(n(7917)),d=n(5348),f=n(2568),p=n(4745),v=n(8947),h=n(2847),m=n(4292),_=n(4115);t.default=function(e){var t,n,r,o=e.className,a=e.defaultValue,i=e.disabled,g=e.multiple,b=void 0!==g&&g,y=e.options,O=e.placeholder,w=e.label,E=e.selectAll,M=e.showExpandedGroup,S=e.scrollMenuIntoView,x=void 0!==S&&S,C=e.size,P=void 0===C?"medium":C,j=e.showSelectedAsTags,I=void 0!==j&&j,k=e.showSearch,D=void 0!==k&&k,R=e.width,N=e.onChange,L=e.onFilter,T=(0,d.useToggle)(!1),z=T[0],A=T[1],H=(0,d.useOutsideClick)((function(){return A(!1)})),B=(0,l.useRef)(),F=(0,l.useCallback)((function(){B.current&&B.current.scrollIntoView({behavior:"smooth",block:"nearest"})}),[]);(0,l.useLayoutEffect)((function(){if(B.current&&z&&x){var e=new ResizeObserver(F);return e.observe(B.current),function(){e.disconnect(),e=null}}}),[z,x,F]);var V=(0,l.useCallback)((function(){A()}),[]),W=(0,l.useCallback)((function(e){b||A(!1),N&&N(e)}),[N]);return l.default.createElement(f.SelectContextProvider,{defaultValue:a,multiple:b,options:y,onChange:W,selectAll:E,showExpandedGroup:M},l.default.createElement("div",{ref:H},w?l.default.createElement(_.Label,{value:w}):null,l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.disabled]=i,t),c.default[P],o]),style:{width:R}},l.default.createElement("div",{className:(0,u.default)([c.default.header,(n={},n[c.default.active]=z,n)]),onClick:V},l.default.createElement(p.Selector,{placeholder:O,showSelectedAsTags:I,isDropdownOpened:z}),l.default.createElement(h.IconButton,{className:(0,u.default)([c.default.iconButton,(r={},r[c.default.expanded]=z,r)]),src:s.default,alt:z?"Collapse":"Expand",noBorder:!0,transparent:!0})),z&&l.default.createElement("div",{className:c.default.content,ref:B},0===y.length?l.default.createElement("div",{className:c.default.noOptions},"No options available"):l.default.createElement(l.default.Fragment,null,D&&l.default.createElement("div",{className:c.default.searchContainer},l.default.createElement(v.Search,null)),l.default.createElement(m.OptionList,{options:y,onFilter:L,onChange:W}))))))}},2568:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectContextProvider=t.SelectContext=void 0;var l=a(n(6689)),u=n(4292),s={multiple:!1,selectAll:!1,showExpandedGroup:!0,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){}},c=(0,l.createContext)(s);t.SelectContext=c,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,d=void 0!==a&&a,f=e.showExpandedGroup,p=void 0===f||f,v=e.options,h=e.onChange,m=(0,l.useState)(s.selectedOptions),_=m[0],g=m[1],b=(0,l.useState)(s.searchKeyword),y=b[0],O=b[1],w=(0,l.useCallback)((function(e){var t;t=o?_.some((function(t){return t.value===e.value}))?_.filter((function(t){return t.value!==e.value})):i(i([],_,!0),[e],!1):[e],g(t),h&&h(t.map((function(e){return e.value})))}),[_,g,h]);(0,l.useEffect)((function(){if(n){var e=Array.isArray(n)?n:[n],t=[];e.length&&(t=v.reduce((function(e,t){return(0,u.isOption)(t)?i(i([],e,!0),[t],!1):i(i([],e,!0),t.options,!0)}),[]).filter((function(t){return e.includes(t.value)}))),g(t)}}),[n,v]);var E=(0,l.useMemo)((function(){return{multiple:o,selectAll:d,showExpandedGroup:p,selectedOptions:_,updateSelectedOption:w,searchKeyword:y,setSearchKeyword:O,setSelectedOptions:g}}),[d,_,g,w,y,O]);return l.default.createElement(c.Provider,{value:E},t)}},237:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(6884)),s=n(2568),c=n(2149),d=i(n(7659));t.default=function(e){var t=e.placeholder,n=e.showSelectedAsTags,r=e.isDropdownOpened,o=(0,l.useContext)(s.SelectContext),a=o.selectedOptions,i=o.multiple,f=o.updateSelectedOption,p=(0,l.useCallback)((function(e){e.stopPropagation()}),[]),v=(0,l.useCallback)((function(e,t){if(t){var n=a.find((function(e){return e.value===t}));n&&f(n)}e.stopPropagation()}),[a]),h=(0,l.useMemo)((function(){var e;return l.default.createElement("span",{className:(0,d.default)([u.default.placeholder,(e={},e[u.default.active]=r,e)])},t)}),[t,r]),m=(0,l.useMemo)((function(){return a.length?l.default.createElement(l.default.Fragment,null,a.map((function(e){var t=e.label,n=e.value;return l.default.createElement("span",{key:n,className:u.default.tagWrapper,onClick:p},l.default.createElement(c.Tag,{key:n,value:n,closable:!0,onClose:v},t))}))):h}),[a,h]),_=a.length?l.default.createElement("span",{className:u.default.selectedOptions},"".concat(t," (").concat(a.length,")")):h;return i?n?m:_:a.length?l.default.createElement("span",{className:u.default.selectedOption},a[0].label):h}},4745:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Selector=void 0;var o=n(237);Object.defineProperty(t,"Selector",{enumerable:!0,get:function(){return r(o).default}})},9929:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Select=void 0;var o=n(4113);Object.defineProperty(t,"Select",{enumerable:!0,get:function(){return r(o).default}})},1420:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=i(n(6689)),s=l(n(7659)),c=n(4356),d=l(n(5691)),f=l(n(5038)),p=l(n(8784)),v=n(2037),h=l(n(6684));t.default=function(e){var t=e.columns,n=e.dataSource,o=e.onRowClick,a=e.hasArrow,i=e.onLoadMore,l=e.page,m=e.setPage,_=e.pageSize,g=void 0===_?v.TableConfig.PAGE_SIZE:_,b=e.tableHeight,y=e.placeholder,O=e.rowHeight,w=void 0===O?v.TableConfig.ROW_HEIGHT:O,E=e.headerHeight,M=void 0===E?v.TableConfig.HEADER_HEIGHT:E,S=e.disableLazyLoader,x=e.activeRows,C=e.itemsCount,P=e.isHeaderSticky,j=void 0!==P&&P,I=e.hasVirtualScroll,k=void 0===I||I,D=e.className,R=(0,u.useState)(0),N=R[0],L=R[1],T=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,s=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(p.default,{data:s,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==x?void 0:x[s.id])}))}),[t,x,a,w,o]),z=(0,u.useCallback)((function(e){var t=e.scrollOffset;L(t)}),[]),A=(0,u.useCallback)((function(){S||n.length!==C&&(n.length<g*l||m&&i&&(m(l+1),i(l+1)))}),[S,n.length,C,g,l,m,i]),H=(0,u.useCallback)((function(e){return!S&&e<n.length-v.TableConfig.ITEMS_LOADED}),[n.length,S]);return u.default.createElement(u.default.Fragment,null,k?u.default.createElement("div",{className:(0,s.default)([h.default.container,D])},u.default.createElement("div",{className:h.default.table},u.default.createElement(f.default,{columns:t,scrollTop:N,headerHeight:M}),y&&!n.length?u.default.createElement("div",{className:h.default.placeholderContainer,style:{height:b}},y):u.default.createElement(d.default,{isItemLoaded:H,itemCount:n.length,loadMoreItems:A},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(c.FixedSizeList,{ref:r,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:z,onItemsRendered:t,className:h.default.scrollbarContainer},T)})))):u.default.createElement("div",{className:(0,s.default)([h.default.container,h.default.scrollbarContainer,D]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:N,isHeaderSticky:j,headerHeight:M}),n.map((function(e,n){return u.default.createElement(p.default,{key:n,data:e,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==x?void 0:x[null==e?void 0:e.id])})}))))}},5038:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(2212)),l=r(n(4867));t.default=function(e){var t,n,r=e.columns,u=e.scrollTop,s=e.isHeaderSticky,c=e.headerHeight;return o.default.createElement("div",{className:(0,a.default)([l.default.container,(t={},t[l.default.borderBottom]=!!u,t),(n={},n[l.default.isHeaderSticky]=s,n)]),style:{height:c}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=l(n(7659)),s=i(n(6689)),c=n(4958),d=l(n(3210)),f=l(n(2223)),p=n(2802),v=l(n(1435));t.default=function(e){var t,n=e.column,o=n.onSort,a=n.sortable,i=n.sorted,l=n.defaultSortOrder,h=n.title,m=n.width,_=n.className,g=(0,s.useState)((function(){return l||p.SortOrder.DESC})),b=g[0],y=g[1],O=(0,s.useCallback)((function(){if(!i)return o(b);var e=b===p.SortOrder.DESC?p.SortOrder.ASC:p.SortOrder.DESC;y(e),o(e)}),[o,b,i]),w=o&&a?{onClick:O}:{};return s.default.createElement("div",r({},w,{className:(0,u.default)([v.default.tableHeaderCell,_,(t={},t[v.default.sortIconVisible]=a&&i,t[v.default.sortable]=a,t)]),style:{width:m}}),h,a?s.default.createElement(c.Icon,{alt:"Sort button",size:"small",src:b===p.SortOrder.DESC?d.default:f.default}):null)}},8784:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(8605)),c=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,d=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.hasArrow]=a,t[c.default.active]=d,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(s.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4009));t.default=function(e){var t=e.item,n=e.column,r=e.rowHeight,l="string"==typeof t?t:t[n.dataIndex];return o.default.createElement("div",{className:(0,a.default)([i.default.container,n.className]),style:{height:r,width:null==n?void 0:n.width}},n.render?n.render(l):l)}},2285:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Table=void 0;var o=n(1420);Object.defineProperty(t,"Table",{enumerable:!0,get:function(){return r(o).default}})},8372:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(7451)),c=n(4958),d=i(n(5374));t.default=function(e){var t,n=e.children,r=(e.className,e.closable),o=e.value,a=e.onClose,i=e.disabled,f=e.onDelete,p=e.id,v=(0,l.useCallback)((function(e){"function"==typeof f&&f(p),"function"==typeof a&&a(e,o)}),[a,f]);return l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.disabled]=i,t)])},l.default.createElement("span",{className:d.default.content},n),r&&l.default.createElement("span",{className:d.default.closeButton,onClick:v},l.default.createElement(c.Icon,{src:s.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tag=void 0;var o=n(8372);Object.defineProperty(t,"Tag",{enumerable:!0,get:function(){return r(o).default}})},8397:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=a(n(6689)),s=l(n(7659)),c=n(1982),d=n(1914),f=n(5348),p=n(2149),v=l(n(9067));t.default=function(e){var t,n,r=e.className,o=e.onChange,a=e.placeholder,l=e.value,h=e.name,m=e.pattern,_=e.inputRef,g=e.size,b=void 0===g?"small":g,y=e.type,O=void 0===y?"text":y,w=e.autoFocus,E=void 0!==w&&w,M=e.noBorder,S=void 0!==M&&M,x=e.withScroll,C=void 0!==x&&x,P=e.inputMode,j=e.disabled,I=e.tagOptions,k=void 0===I?[]:I,D=(0,u.useState)(""),R=D[0],N=D[1],L=(0,u.useState)(),T=L[0],z=L[1];(0,u.useEffect)((function(){if(l){var e=l.map((function(e){return{id:(0,c.v4)(),label:e}}));z(e)}}),[l,z]);var A=(0,u.useCallback)((function(e){var t=e.target.value;N(t)}),[N]),H=(0,u.useCallback)((function(e){var t=T.filter((function(t){return t.id!==e}));if(z(t),o){var n=t.map((function(e){return e.label}));o(n)}}),[T,z,o]),B=(0,u.useCallback)((function(){var e=R.trim(),t=i([],T,!0);if(e.length>0){var n={id:(0,c.v4)(),label:e};t=i(i([],T,!0),[n],!1)}if(z(t),N(""),o){var r=t.map((function(e){return e.label}));o(r)}}),[T,R,z,N]),F=(0,u.useCallback)((function(e){"Enter"!==e.code&&"NumpadEnter"!==e.code||(e.preventDefault(),B())}),[B]),V=(0,f.useOutsideClick)((function(){R.trim().length>0&&B()})),W=u.default.createElement(d.Hint,{options:k,allowEnterFill:!0,allowTabFill:!0},u.default.createElement("input",{"data-testid":"input",ref:_,className:(0,s.default)([v.default.textInput,v.default[b],(t={},t[v.default.noBorder]=S,t)]),onChange:A,onKeyDown:F,pattern:m,placeholder:a,name:h,type:O,value:R,autoFocus:E,inputMode:P,disabled:j}));return u.default.createElement("div",{className:(0,s.default)([v.default.container,(n={},n[v.default.disabled]=j,n[v.default.scrollable]=C,n),r]),ref:V},null==T?void 0:T.map((function(e){var t=e.id,n=e.label;return u.default.createElement(p.Tag,{key:t,value:n,id:t,onDelete:H,closable:!0},n)})),u.default.createElement("div",{className:v.default.tagInput},W))}},2819:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TagsInput=void 0;var o=n(8397);Object.defineProperty(t,"TagsInput",{enumerable:!0,get:function(){return r(o).default}})},2506:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(4115),c=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,d=e.value,f=e.name,p=e.pattern,v=e.inputRef,h=e.size,m=void 0===h?"medium":h,_=e.type,g=void 0===_?"text":_,b=e.autoFocus,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,E=e.inputMode,M=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),S=l.default.createElement("input",{"data-testid":"input",ref:v,className:(0,u.default)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=w,t)]),onChange:M,onBlur:o,onKeyDown:a,pattern:p,placeholder:i,name:f,type:g,value:d,autoFocus:y,inputMode:E});return n?l.default.createElement(s.Label,{value:n},S):l.default.createElement(l.default.Fragment,null,S)}},1143:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var o=n(2506);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(o).default}})},7215:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(9220));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return o.default.createElement("div",{ref:n,className:a.default.toast,onClick:i,"data-testid":"toast"},t)}},2580:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4106));t.default=function(e){var t=e.children,n=e.baseZIndex;return o.default.createElement("div",{className:(0,a.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},393:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var o=n(7215);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(o).default}});var a=n(2580);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(a).default}})},127:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=n(6405),s=i(n(7274)),c=i(n(7659)),d=i(n(8907));t.default=function(e){var t=e.children,n=e.text,r=e.placement,o=e.position,a=void 0===o?"absolute":o,i=e.showTooltip,f=e.className,p=e.touchScreenHidingDelay,v=void 0===p?5e3:p,h=(0,l.useState)({left:0,top:0}),m=h[0],_=h[1],g=(0,l.useState)(!1),b=g[0],y=g[1],O=(0,l.useRef)(null),w=(0,l.useRef)(null),E=(0,l.useCallback)((function(){if(w.current){var e=w.current.getBoundingClientRect(),t=function(e,t,n){var r=n.top,o=n.left,a=n.height,i=n.width,l={top:0,left:0};switch(e){case"left":l={top:r+a/2,left:o};break;case"right":l={top:r+a/2,left:o+i};break;case"bottom":l={top:r+a,left:o+i/2};break;case"top":l={top:r,left:o+i/2}}return"absolute"===t?{top:l.top+window.scrollY,left:l.left+window.scrollX}:l}(r,a,e);_(t),y(!0)}}),[r,a]),M=(0,l.useCallback)((function(){E()}),[E]),S=(0,l.useCallback)((function(){y(!1)}),[]),x=(0,l.useCallback)((function(){O.current&&(clearTimeout(O.current),O.current=null),E()}),[E]),C=(0,l.useCallback)((function(){O.current=setTimeout((function(){y(!1),O.current=null}),v)}),[v]);return(0,l.useEffect)((function(){return function(){return O.current&&clearTimeout(O.current)}}),[]),(0,l.useEffect)((function(){if(w.current&&"absolute"===a){var e=(0,s.default)(w.current);if(e){var t=function(){return y(!1)};return e.addEventListener("scroll",t),e.addEventListener("resize",t),function(){e.removeEventListener("scroll",t),e.removeEventListener("resize",t)}}}}),[a]),l.default.createElement("span",{onTouchStart:x,onMouseEnter:M,onMouseLeave:S,onTouchEnd:C,ref:w},t,(0,u.createPortal)(l.default.createElement(l.default.Fragment,null,i&&b?l.default.createElement("div",{style:m,"data-text":n,"data-testid":"tooltip",className:(0,c.default)([d.default.tooltip,d.default[r],d.default[a],f])}):null),document.body))}},746:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tooltip=void 0;var o=n(127);Object.defineProperty(t,"Tooltip",{enumerable:!0,get:function(){return r(o).default}})},1918:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(6504));t.default=function(e){var t=e.src,n=e.type,r=e.children,l=e.containerRef,u=e.poster,s=e.muted,c=void 0===s||s,d=e.loop,f=void 0===d||d,p=e.autoPlay,v=void 0===p||p,h=e.layout,m=void 0===h?"contain":h;return r?o.default.createElement("div",{ref:l,className:(0,a.default)([i.default.container,i.default.hasOverlay])},o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:c,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&o.default.createElement("div",{className:i.default.overlay},r)):o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:c,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var o=n(1918);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(o).default}})},7297:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.TableConfig=void 0,(n=t.TableConfig||(t.TableConfig={}))[n.ROW_HEIGHT=48]="ROW_HEIGHT",n[n.HEADER_HEIGHT=32]="HEADER_HEIGHT",n[n.PAGE_SIZE=100]="PAGE_SIZE",n[n.ITEMS_LOADED=5]="ITEMS_LOADED"},2037:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(7297),t)},3607:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(9508),t),o(n(4127),t),o(n(75),t),o(n(4616),t),o(n(7429),t),o(n(2554),t),o(n(6873),t),o(n(1889),t),o(n(6086),t),o(n(6384),t),o(n(4958),t),o(n(2847),t),o(n(5860),t),o(n(3928),t),o(n(4115),t),o(n(2572),t),o(n(3814),t),o(n(1391),t),o(n(7387),t),o(n(6650),t),o(n(9929),t),o(n(2285),t),o(n(2149),t),o(n(2819),t),o(n(1143),t),o(n(393),t),o(n(746),t),o(n(6975),t),o(n(3212),t)},2802:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.SortOrder=void 0,(n=t.SortOrder||(t.SortOrder={})).ASC="asc",n.DESC="desc"},4330:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},3210:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},2223:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1 10L7.5 3L14 10' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},8799:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.398438 0.399902L19.5984 19.5999M0.398438 19.5999L19.5984 0.399902' stroke='black'/%3e %3c/svg%3e"},7451:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1.5 1.5L13.5 13.5M1.5 13.5L13.5 1.5' stroke='black'/%3e %3c/svg%3e"},5585:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M15.4685 15.4665L11.2018 11.1999M6.93516 13.3332C3.40053 13.3332 0.535156 10.4678 0.535156 6.9332C0.535156 3.39858 3.40053 0.533203 6.93516 0.533203C10.4698 0.533203 13.3352 3.39858 13.3352 6.9332C13.3352 10.4678 10.4698 13.3332 6.93516 13.3332Z' stroke='%23898891'/%3e %3c/svg%3e"},3790:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.9331 4.26758L7.99974 11.7342L1.06641 4.26758' stroke='%23898891' stroke-linecap='square'/%3e %3c/svg%3e"},3250:(e,t,n)=>{"use strict";var r=n(6689),o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,u=r.useDebugValue;function s(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,s(o)&&c({inst:o})}),[e,n,t]),i((function(){return s(o)&&c({inst:o}),e((function(){s(o)&&c({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},1982:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return u.default}});var r=f(n(3990)),o=f(n(8237)),a=f(n(5355)),i=f(n(3764)),l=f(n(6314)),u=f(n(8464)),s=f(n(6435)),c=f(n(4008)),d=f(n(8222));function f(e){return e&&e.__esModule?e:{default:e}}},4163:(e,t)=>{"use strict";function n(e){return 14+(e+64>>>9<<4)+1}function r(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function o(e,t,n,o,a,i){return r((l=r(r(t,e),r(o,i)))<<(u=a)|l>>>32-u,n);var l,u}function a(e,t,n,r,a,i,l){return o(t&n|~t&r,e,t,a,i,l)}function i(e,t,n,r,a,i,l){return o(t&r|n&~r,e,t,a,i,l)}function l(e,t,n,r,a,i,l){return o(t^n^r,e,t,a,i,l)}function u(e,t,n,r,a,i,l){return o(n^(t|~r),e,t,a,i,l)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let n=0;n<t.length;++n)e[n]=t.charCodeAt(n)}return function(e){const t=[],n=32*e.length,r="0123456789abcdef";for(let o=0;o<n;o+=8){const n=e[o>>5]>>>o%32&255,a=parseInt(r.charAt(n>>>4&15)+r.charAt(15&n),16);t.push(a)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[n(t)-1]=t;let o=1732584193,s=-271733879,c=-1732584194,d=271733878;for(let t=0;t<e.length;t+=16){const n=o,f=s,p=c,v=d;o=a(o,s,c,d,e[t],7,-680876936),d=a(d,o,s,c,e[t+1],12,-389564586),c=a(c,d,o,s,e[t+2],17,606105819),s=a(s,c,d,o,e[t+3],22,-1044525330),o=a(o,s,c,d,e[t+4],7,-176418897),d=a(d,o,s,c,e[t+5],12,1200080426),c=a(c,d,o,s,e[t+6],17,-1473231341),s=a(s,c,d,o,e[t+7],22,-45705983),o=a(o,s,c,d,e[t+8],7,1770035416),d=a(d,o,s,c,e[t+9],12,-1958414417),c=a(c,d,o,s,e[t+10],17,-42063),s=a(s,c,d,o,e[t+11],22,-1990404162),o=a(o,s,c,d,e[t+12],7,1804603682),d=a(d,o,s,c,e[t+13],12,-40341101),c=a(c,d,o,s,e[t+14],17,-1502002290),s=a(s,c,d,o,e[t+15],22,1236535329),o=i(o,s,c,d,e[t+1],5,-165796510),d=i(d,o,s,c,e[t+6],9,-1069501632),c=i(c,d,o,s,e[t+11],14,643717713),s=i(s,c,d,o,e[t],20,-373897302),o=i(o,s,c,d,e[t+5],5,-701558691),d=i(d,o,s,c,e[t+10],9,38016083),c=i(c,d,o,s,e[t+15],14,-660478335),s=i(s,c,d,o,e[t+4],20,-405537848),o=i(o,s,c,d,e[t+9],5,568446438),d=i(d,o,s,c,e[t+14],9,-1019803690),c=i(c,d,o,s,e[t+3],14,-187363961),s=i(s,c,d,o,e[t+8],20,1163531501),o=i(o,s,c,d,e[t+13],5,-1444681467),d=i(d,o,s,c,e[t+2],9,-51403784),c=i(c,d,o,s,e[t+7],14,1735328473),s=i(s,c,d,o,e[t+12],20,-1926607734),o=l(o,s,c,d,e[t+5],4,-378558),d=l(d,o,s,c,e[t+8],11,-2022574463),c=l(c,d,o,s,e[t+11],16,1839030562),s=l(s,c,d,o,e[t+14],23,-35309556),o=l(o,s,c,d,e[t+1],4,-1530992060),d=l(d,o,s,c,e[t+4],11,1272893353),c=l(c,d,o,s,e[t+7],16,-155497632),s=l(s,c,d,o,e[t+10],23,-1094730640),o=l(o,s,c,d,e[t+13],4,681279174),d=l(d,o,s,c,e[t],11,-358537222),c=l(c,d,o,s,e[t+3],16,-722521979),s=l(s,c,d,o,e[t+6],23,76029189),o=l(o,s,c,d,e[t+9],4,-640364487),d=l(d,o,s,c,e[t+12],11,-421815835),c=l(c,d,o,s,e[t+15],16,530742520),s=l(s,c,d,o,e[t+2],23,-995338651),o=u(o,s,c,d,e[t],6,-198630844),d=u(d,o,s,c,e[t+7],10,1126891415),c=u(c,d,o,s,e[t+14],15,-1416354905),s=u(s,c,d,o,e[t+5],21,-57434055),o=u(o,s,c,d,e[t+12],6,1700485571),d=u(d,o,s,c,e[t+3],10,-1894986606),c=u(c,d,o,s,e[t+10],15,-1051523),s=u(s,c,d,o,e[t+1],21,-2054922799),o=u(o,s,c,d,e[t+8],6,1873313359),d=u(d,o,s,c,e[t+15],10,-30611744),c=u(c,d,o,s,e[t+6],15,-1560198380),s=u(s,c,d,o,e[t+13],21,1309151649),o=u(o,s,c,d,e[t+4],6,-145523070),d=u(d,o,s,c,e[t+11],10,-1120210379),c=u(c,d,o,s,e[t+2],15,718787259),s=u(s,c,d,o,e[t+9],21,-343485551),o=r(o,n),s=r(s,f),c=r(c,p),d=r(d,v)}return[o,s,c,d]}(function(e){if(0===e.length)return[];const t=8*e.length,r=new Uint32Array(n(t));for(let n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))}},4790:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};t.default=n},6314:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="00000000-0000-0000-0000-000000000000"},8222:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");let t;const n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}},58:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},3319:(e,t)=>{"use strict";let n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n&&(n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!n))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(r)};const r=new Uint8Array(16)},3757:(e,t)=>{"use strict";function n(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function r(e,t){return e<<t|e>>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){const t=[1518500249,1859775393,2400959708,3395469782],o=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let n=0;n<t.length;++n)e.push(t.charCodeAt(n))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const a=e.length/4+2,i=Math.ceil(a/16),l=new Array(i);for(let t=0;t<i;++t){const n=new Uint32Array(16);for(let r=0;r<16;++r)n[r]=e[64*t+4*r]<<24|e[64*t+4*r+1]<<16|e[64*t+4*r+2]<<8|e[64*t+4*r+3];l[t]=n}l[i-1][14]=8*(e.length-1)/Math.pow(2,32),l[i-1][14]=Math.floor(l[i-1][14]),l[i-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<i;++e){const a=new Uint32Array(80);for(let t=0;t<16;++t)a[t]=l[e][t];for(let e=16;e<80;++e)a[e]=r(a[e-3]^a[e-8]^a[e-14]^a[e-16],1);let i=o[0],u=o[1],s=o[2],c=o[3],d=o[4];for(let e=0;e<80;++e){const o=Math.floor(e/20),l=r(i,5)+n(o,u,s,c)+d+t[o]+a[e]>>>0;d=c,c=s,s=r(u,30)>>>0,u=i,i=l}o[0]=o[0]+i>>>0,o[1]=o[1]+u>>>0,o[2]=o[2]+s>>>0,o[3]=o[3]+c>>>0,o[4]=o[4]+d>>>0}return[o[0]>>24&255,o[0]>>16&255,o[0]>>8&255,255&o[0],o[1]>>24&255,o[1]>>16&255,o[1]>>8&255,255&o[1],o[2]>>24&255,o[2]>>16&255,o[2]>>8&255,255&o[2],o[3]>>24&255,o[3]>>16&255,o[3]>>8&255,255&o[3],o[4]>>24&255,o[4]>>16&255,o[4]>>8&255,255&o[4]]}},4008:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.unsafeStringify=i;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};const a=[];for(let e=0;e<256;++e)a.push((e+256).toString(16).slice(1));function i(e,t=0){return(a[e[t+0]]+a[e[t+1]]+a[e[t+2]]+a[e[t+3]]+"-"+a[e[t+4]]+a[e[t+5]]+"-"+a[e[t+6]]+a[e[t+7]]+"-"+a[e[t+8]]+a[e[t+9]]+"-"+a[e[t+10]]+a[e[t+11]]+a[e[t+12]]+a[e[t+13]]+a[e[t+14]]+a[e[t+15]]).toLowerCase()}t.default=function(e,t=0){const n=i(e,t);if(!(0,o.default)(n))throw TypeError("Stringified UUID is invalid");return n}},3990:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(3319))&&r.__esModule?r:{default:r},a=n(4008);let i,l,u=0,s=0;t.default=function(e,t,n){let r=t&&n||0;const c=t||new Array(16);let d=(e=e||{}).node||i,f=void 0!==e.clockseq?e.clockseq:l;if(null==d||null==f){const t=e.random||(e.rng||o.default)();null==d&&(d=i=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==f&&(f=l=16383&(t[6]<<8|t[7]))}let p=void 0!==e.msecs?e.msecs:Date.now(),v=void 0!==e.nsecs?e.nsecs:s+1;const h=p-u+(v-s)/1e4;if(h<0&&void 0===e.clockseq&&(f=f+1&16383),(h<0||p>u)&&void 0===e.nsecs&&(v=0),v>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");u=p,s=v,l=f,p+=122192928e5;const m=(1e4*(268435455&p)+v)%4294967296;c[r++]=m>>>24&255,c[r++]=m>>>16&255,c[r++]=m>>>8&255,c[r++]=255&m;const _=p/4294967296*1e4&268435455;c[r++]=_>>>8&255,c[r++]=255&_,c[r++]=_>>>24&15|16,c[r++]=_>>>16&255,c[r++]=f>>>8|128,c[r++]=255&f;for(let e=0;e<6;++e)c[r+e]=d[e];return t||(0,a.unsafeStringify)(c)}},8237:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(4163));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v3",48,o.default);t.default=i},7925:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0,t.default=function(e,t,n){function r(e,r,i,l){var u;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n<e.length;++n)t.push(e.charCodeAt(n));return t}(e)),"string"==typeof r&&(r=(0,a.default)(r)),16!==(null===(u=r)||void 0===u?void 0:u.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let s=new Uint8Array(16+e.length);if(s.set(r),s.set(e,r.length),s=n(s),s[6]=15&s[6]|t,s[8]=63&s[8]|128,i){l=l||0;for(let e=0;e<16;++e)i[l+e]=s[e];return i}return(0,o.unsafeStringify)(s)}try{r.name=e}catch(e){}return r.DNS=i,r.URL=l,r};var r,o=n(4008),a=(r=n(8222))&&r.__esModule?r:{default:r};const i="6ba7b810-9dad-11d1-80b4-00c04fd430c8";t.DNS=i;const l="6ba7b811-9dad-11d1-80b4-00c04fd430c8";t.URL=l},5355:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(4790)),o=i(n(3319)),a=n(4008);function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){if(r.default.randomUUID&&!t&&!e)return r.default.randomUUID();const i=(e=e||{}).random||(e.rng||o.default)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=i[e];return t}return(0,a.unsafeStringify)(i)}},3764:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(3757));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v5",80,o.default);t.default=i},6435:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(58))&&r.__esModule?r:{default:r};t.default=function(e){return"string"==typeof e&&o.default.test(e)}},8464:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}},6689:e=>{"use strict";e.exports=require("react")},6405:e=>{"use strict";e.exports=require("react-dom")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r].call(a.exports,a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r=n(3607),o=exports;for(var a in r)o[a]=r[a];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
|
|
3
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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b0JwOUMsRUFBS3kzQyxJQUN4QixJQUFJK0YsRUFBUy9GLEdBQVVBLEVBQU96bkMsV0FDN0IsSUFBT3luQyxFQUFpQixRQUN4QixJQUFNLEVBRVAsT0FEQTJGLEVBQW9COUYsRUFBRWtHLEVBQVEsQ0FBRXQ1QyxFQUFHczVDLElBQzVCQSxDQUFNLEVDTGRKLEVBQW9COUYsRUFBSSxDQUFDcm5DLEVBQVN3dEMsS0FDakMsSUFBSSxJQUFJMS9DLEtBQU8wL0MsRUFDWEwsRUFBb0JyOUMsRUFBRTA5QyxFQUFZMS9DLEtBQVNxL0MsRUFBb0JyOUMsRUFBRWtRLEVBQVNsUyxJQUM1RVAsT0FBTzRRLGVBQWU2QixFQUFTbFMsRUFBSyxDQUFFNlIsWUFBWSxFQUFNakwsSUFBSzg0QyxFQUFXMS9DLElBRTFFLEVDTkRxL0MsRUFBb0JyOUMsRUFBSSxDQUFDb1AsRUFBS29ZLElBQVUvcEIsT0FBT1EsVUFBVUMsZUFBZUMsS0FBS2lSLEVBQUtvWSxHQ0NsRjYxQixFQUFvQmg5QyxFQUFLNlAsSUFDSCxvQkFBWC9QLFFBQTBCQSxPQUFPdzlDLGFBQzFDbGdELE9BQU80USxlQUFlNkIsRUFBUy9QLE9BQU93OUMsWUFBYSxDQUFFaDlDLE1BQU8sV0FFN0RsRCxPQUFPNFEsZUFBZTZCLEVBQVMsYUFBYyxDQUFFdlAsT0FBTyxHQUFPLEVDRjlELElBQUlpOUMsRUFBc0JQLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlT3V0c2lkZUNsaWNrL3VzZU91dHNpZGVDbGljay5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VQcm9taXNlL3VzZVByb21pc2UuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvc3dyL19pbnRlcm5hbC9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9zd3IvY29yZS9kaXN0L2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVNXUkhvb2tzQ29uZmlnL3VzZVNXUkhvb2tzQ29uZmlnLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlVG9nZ2xlL3VzZVRvZ2dsZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9jbGFzc2NhdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLm1vZHVsZS5jc3M/ZmYxYiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/NDMyOCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzP2MwYjYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9DaGVja2JveC5tb2R1bGUuY3NzP2ZmMmYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5tb2R1bGUuY3NzPzg3MTkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC5tb2R1bGUuY3NzP2ZjZTIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzP2E4YWUiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyLm1vZHVsZS5jc3M/OTI5ZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXJDb250ZW50L0RyYXdlckNvbnRlbnQubW9kdWxlLmNzcz9iYTBjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckZvb3Rlci9EcmF3ZXJGb290ZXIubW9kdWxlLmNzcz9iYmUwIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckhlYWRlci9EcmF3ZXJIZWFkZXIubW9kdWxlLmNzcz9hZGI2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/N2EwZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQubW9kdWxlLmNzcz9kNTU3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3M/MDk5ZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzFjYWMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL0ljb25CdXR0b24ubW9kdWxlLmNzcz81OTZmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz8yYzQ0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSW1hZ2UvSW1hZ2UubW9kdWxlLmNzcz9mMTBlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwubW9kdWxlLmNzcz80NjlmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcubW9kdWxlLmNzcz8zY2Q0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/ZGZmYSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS5tb2R1bGUuY3NzPzE5MGEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIubW9kdWxlLmNzcz9jZDM0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS5tb2R1bGUuY3NzP2FhY2UiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS5tb2R1bGUuY3NzP2I1ZGIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Nb2RhbC9Nb2RhbC5tb2R1bGUuY3NzPzhhODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLm1vZHVsZS5jc3M/NjViZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS5tb2R1bGUuY3NzPzM3MTciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvR3JvdXBPcHRpb24vR3JvdXBPcHRpb24ubW9kdWxlLmNzcz80ZGI0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbi9PcHRpb24ubW9kdWxlLmNzcz9iNjc0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbkxpc3QvT3B0aW9uTGlzdC5tb2R1bGUuY3NzPzQ5YWMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VhcmNoL1NlYXJjaC5tb2R1bGUuY3NzP2VkNDMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0Lm1vZHVsZS5jc3M/MWU3OSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9TZWxlY3Rvci5tb2R1bGUuY3NzPzlhYmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZS5tb2R1bGUuY3NzPzkzYTkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlci5tb2R1bGUuY3NzPzcwZGYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlckNlbGwubW9kdWxlLmNzcz8xZDBjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3cubW9kdWxlLmNzcz9iOTU1Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3dDZWxsLm1vZHVsZS5jc3M/ZGE1YSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9UYWcubW9kdWxlLmNzcz84ZjM2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnc0lucHV0L1RhZ3NJbnB1dC5tb2R1bGUuY3NzPzhmZDEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/M2YxZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Lm1vZHVsZS5jc3M/NTg4NiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLm1vZHVsZS5jc3M/ZWM4NiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1Rvb2x0aXAvVG9vbHRpcC5tb2R1bGUuY3NzPzA2YWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9WaWRlby9WaWRlby5tb2R1bGUuY3NzP2VkYTciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQvZGlzdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQvZGlzdC9zcmMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvaG90a2V5cy1qcy9kaXN0L2hvdGtleXMuZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdGtleXMtaG9vay9kaXN0L3JlYWN0LWhvdGtleXMtaG9vay5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL3JlbW92ZUNsYXNzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXBDb250ZXh0LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL3JlZmxvdy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL0NTU1RyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL2FkZENsYXNzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9oYXNDbGFzcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1JlcGxhY2VUcmFuc2l0aW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1N3aXRjaFRyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93LWluZmluaXRlLWxvYWRlci9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9kaXN0L21lbW9pemUtb25lLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvc2Nyb2xscGFyZW50L3Njcm9sbHBhcmVudC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0NvbnRleHQudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXJDb250ZW50L0RyYXdlckNvbnRlbnQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckNvbnRlbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyRm9vdGVyL0RyYXdlckZvb3Rlci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyRm9vdGVyL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckhlYWRlci9EcmF3ZXJIZWFkZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckhlYWRlci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0NsaWNrYWJsZS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9Ecm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JbWFnZS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUl0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01vZGFsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9Hcm91cE9wdGlvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvR3JvdXBPcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uL09wdGlvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbkxpc3QvT3B0aW9uTGlzdC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWFyY2gvU2VhcmNoLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWFyY2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3RDb250ZXh0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9TZWxlY3Rvci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0b3IvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZUhlYWRlckNlbGwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3cudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3dDZWxsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnL1RhZy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWdzSW5wdXQvVGFnc0lucHV0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3RDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL1Rvb2x0aXAudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9vbHRpcC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbnN0YW50cy9UYWJsZS50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvdHlwZXMvdGFibGUudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvYmFja3NwYWNlLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jYXJldC1kb3duLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jYXJldC11cC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY2xvc2Uuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2Nyb3NzZWQuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL3NlYXJjaC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvc2VsZWN0LWNhcmV0LWRvd24uc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvbWQ1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL25hdGl2ZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9uaWwuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcGFyc2UuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcmVnZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcm5nLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3NoYTEuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YxLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzNS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92NC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92NS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92YWxpZGF0ZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92ZXJzaW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LWRvbVwiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59IiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbnZhciBvcHRpb25zID0ge1xuICAgIGNhcHR1cmU6IHRydWUsXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT3V0c2lkZUNsaWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVJlZigpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBoYW5kbGVDbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCFyZWYuY3VycmVudCB8fCByZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgIH0sIFtjYWxsYmFja10pO1xuICAgIHJldHVybiByZWY7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VPdXRzaWRlQ2xpY2suanMubWFwIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yLCBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVByb21pc2UoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoe1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICB9KSwgMiksIHJlc3VsdCA9IF9hWzBdLCBzZXRSZXN1bHQgPSBfYVsxXTtcbiAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgaWYgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB1bm1vdW50ZWRcbiAgICAvLyB3aGlsZSB0aGUgcHJvbWlzZSB3YXMgc3RpbGwgcGVuZGluZyB0byBhdm9pZCBzZXR0aW5nIHN0YXRlXG4gICAgLy8gb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cbiAgICB2YXIgaGFzVW5tb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaGFzVW5tb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocHJvbWlzZSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSwgZXJyb3JfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDNdKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb21pc2VdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH0sIFtoYXNVbm1vdW50ZWRdKTtcbiAgICByZXR1cm4gW3Jlc3VsdCwgZGlzcGF0Y2hdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVJlZiwgY3JlYXRlRWxlbWVudCwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuXG4vLyBHbG9iYWwgc3RhdGUgdXNlZCB0byBkZWR1cGxpY2F0ZSByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzXG5jb25zdCBTV1JHbG9iYWxTdGF0ZSA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IEVNUFRZX0NBQ0hFID0ge307XG5jb25zdCBJTklUSUFMX0NBQ0hFID0ge307XG5jb25zdCBub29wID0gKCk9Pnt9O1xuLy8gVXNpbmcgbm9vcCgpIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgYXMgdW5kZWZpbmVkIGNhbiBiZSByZXBsYWNlZFxuLy8gYnkgc29tZXRoaW5nIGVsc2UuIFByZXR0aWVyIGlnbm9yZSBhbmQgZXh0cmEgcGFyZW50aGVzZXMgYXJlIG5lY2Vzc2FyeSBoZXJlXG4vLyB0byBlbnN1cmUgdGhhdCB0c2MgZG9lc24ndCByZW1vdmUgdGhlIF9fTk9JTkxJTkVfXyBjb21tZW50LlxuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBVTkRFRklORUQgPSAvKiNfX05PSU5MSU5FX18qLyBub29wKCk7XG5jb25zdCBPQkpFQ1QgPSBPYmplY3Q7XG5jb25zdCBpc1VuZGVmaW5lZCA9ICh2KT0+diA9PT0gVU5ERUZJTkVEO1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2KT0+dHlwZW9mIHYgPT0gJ2Z1bmN0aW9uJztcbmNvbnN0IG1lcmdlT2JqZWN0cyA9IChhLCBiKT0+KHtcbiAgICAgICAgLi4uYSxcbiAgICAgICAgLi4uYlxuICAgIH0pO1xuY29uc3QgU1RSX1VOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuLy8gTk9URTogVXNlIHRoZSBmdW5jdGlvbiB0byBndWFyYW50ZWUgaXQncyByZS1ldmFsdWF0ZWQgYmV0d2VlbiBqc2RvbSBhbmQgbm9kZSBydW50aW1lIGZvciB0ZXN0cy5cbmNvbnN0IGlzV2luZG93RGVmaW5lZCA9IHR5cGVvZiB3aW5kb3cgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGlzRG9jdW1lbnREZWZpbmVkID0gdHlwZW9mIGRvY3VtZW50ICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoKT0+aXNXaW5kb3dEZWZpbmVkICYmIHR5cGVvZiB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBjcmVhdGVDYWNoZUhlbHBlciA9IChjYWNoZSwga2V5KT0+e1xuICAgIGNvbnN0IHN0YXRlID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICByZXR1cm4gW1xuICAgICAgICAvLyBHZXR0ZXJcbiAgICAgICAgKCk9PmNhY2hlLmdldChrZXkpIHx8IEVNUFRZX0NBQ0hFLFxuICAgICAgICAvLyBTZXR0ZXJcbiAgICAgICAgKGluZm8pPT57XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgLy8gQmVmb3JlIHdyaXRpbmcgdG8gdGhlIHN0b3JlLCB3ZSBrZWVwIHRoZSB2YWx1ZSBpbiB0aGUgaW5pdGlhbCBjYWNoZVxuICAgICAgICAgICAgICAgIC8vIGlmIGl0J3Mgbm90IHRoZXJlIHlldC5cbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gSU5JVElBTF9DQUNIRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgSU5JVElBTF9DQUNIRVtrZXldID0gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RhdGVbNV0oa2V5LCBtZXJnZU9iamVjdHMocHJldiwgaW5mbyksIHByZXYgfHwgRU1QVFlfQ0FDSEUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBTdWJzY3JpYmVyXG4gICAgICAgIHN0YXRlWzZdLFxuICAgICAgICAvLyBHZXQgc2VydmVyIGNhY2hlIHNuYXBzaG90XG4gICAgICAgICgpPT57XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgd2FzIHVwZGF0ZWQgb24gdGhlIGNsaWVudCwgd2UgcmV0dXJuIHRoZSBzdG9yZWQgaW5pdGlhbCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIElOSVRJQUxfQ0FDSEUpIHJldHVybiBJTklUSUFMX0NBQ0hFW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGRvbmUgYW55IGNsaWVudC1zaWRlIHVwZGF0ZXMsIHdlIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZS5cbiAgICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KSB8fCBFTVBUWV9DQUNIRTtcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vLyB1c2UgV2Vha01hcCB0byBzdG9yZSB0aGUgb2JqZWN0LT5rZXkgbWFwcGluZ1xuLy8gc28gdGhlIG9iamVjdHMgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuLy8gV2Vha01hcCB1c2VzIGEgaGFzaHRhYmxlIHVuZGVyIHRoZSBob29kLCBzbyB0aGUgbG9va3VwXG4vLyBjb21wbGV4aXR5IGlzIGFsbW9zdCBPKDEpLlxuY29uc3QgdGFibGUgPSBuZXcgV2Vha01hcCgpO1xuLy8gY291bnRlciBvZiB0aGUga2V5XG5sZXQgY291bnRlciA9IDA7XG4vLyBBIHN0YWJsZSBoYXNoIGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHM6XG4vLyAtIEZhc3QgYW5kIGVuc3VyZXMgdW5pcXVlIGhhc2ggcHJvcGVydGllc1xuLy8gLSBIYW5kbGVzIHVuc2VyaWFsaXphYmxlIHZhbHVlc1xuLy8gLSBIYW5kbGVzIG9iamVjdCBrZXkgb3JkZXJpbmdcbi8vIC0gR2VuZXJhdGVzIHNob3J0IHJlc3VsdHNcbi8vXG4vLyBUaGlzIGlzIG5vdCBhIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCB0aGUgcmVzdWx0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlXG4vLyBwYXJzYWJsZS5cbmNvbnN0IHN0YWJsZUhhc2ggPSAoYXJnKT0+e1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgYXJnO1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gYXJnICYmIGFyZy5jb25zdHJ1Y3RvcjtcbiAgICBjb25zdCBpc0RhdGUgPSBjb25zdHJ1Y3RvciA9PSBEYXRlO1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGluZGV4O1xuICAgIGlmIChPQkpFQ1QoYXJnKSA9PT0gYXJnICYmICFpc0RhdGUgJiYgY29uc3RydWN0b3IgIT0gUmVnRXhwKSB7XG4gICAgICAgIC8vIE9iamVjdC9mdW5jdGlvbiwgbm90IG51bGwvZGF0ZS9yZWdleHAuIFVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBpZCBmaXJzdC5cbiAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGhhc2hlZCwgZGlyZWN0bHkgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICAgIHJlc3VsdCA9IHRhYmxlLmdldChhcmcpO1xuICAgICAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAvLyBTdG9yZSB0aGUgaGFzaCBmaXJzdCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGlvbiBiZWZvcmUgZW50ZXJpbmcgdGhlXG4gICAgICAgIC8vIHJlY3Vyc2l2ZSBgc3RhYmxlSGFzaGAgY2FsbHMuXG4gICAgICAgIC8vIEZvciBvdGhlciBvYmplY3RzIGxpa2Ugc2V0IGFuZCBtYXAsIHdlIHVzZSB0aGlzIGlkIGRpcmVjdGx5IGFzIHRoZSBoYXNoLlxuICAgICAgICByZXN1bHQgPSArK2NvdW50ZXIgKyAnfic7XG4gICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBBcnJheSkge1xuICAgICAgICAgICAgLy8gQXJyYXkuXG4gICAgICAgICAgICByZXN1bHQgPSAnQCc7XG4gICAgICAgICAgICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IGFyZy5sZW5ndGg7IGluZGV4Kyspe1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gT0JKRUNUKSB7XG4gICAgICAgICAgICAvLyBPYmplY3QsIHNvcnQga2V5cy5cbiAgICAgICAgICAgIHJlc3VsdCA9ICcjJztcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPQkpFQ1Qua2V5cyhhcmcpLnNvcnQoKTtcbiAgICAgICAgICAgIHdoaWxlKCFpc1VuZGVmaW5lZChpbmRleCA9IGtleXMucG9wKCkpKXtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ1tpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbmRleCArICc6JyArIHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGlzRGF0ZSA/IGFyZy50b0pTT04oKSA6IHR5cGUgPT0gJ3N5bWJvbCcgPyBhcmcudG9TdHJpbmcoKSA6IHR5cGUgPT0gJ3N0cmluZycgPyBKU09OLnN0cmluZ2lmeShhcmcpIDogJycgKyBhcmc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIER1ZSB0byB0aGUgYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY3ODA3NSxcbiAqIGl0J3Mgbm90IHJlbGlhYmxlIHRvIGRldGVjdCBpZiB0aGUgYnJvd3NlciBpcyBjdXJyZW50bHkgb25saW5lIG9yIG9mZmxpbmVcbiAqIGJhc2VkIG9uIGBuYXZpZ2F0b3Iub25MaW5lYC5cbiAqIEFzIGEgd29ya2Fyb3VuZCwgd2UgYWx3YXlzIGFzc3VtZSBpdCdzIG9ubGluZSBvbiB0aGUgZmlyc3QgbG9hZCwgYW5kIGNoYW5nZVxuICogdGhlIHN0YXR1cyB1cG9uIGBvbmxpbmVgIG9yIGBvZmZsaW5lYCBldmVudHMuXG4gKi8gbGV0IG9ubGluZSA9IHRydWU7XG5jb25zdCBpc09ubGluZSA9ICgpPT5vbmxpbmU7XG4vLyBGb3Igbm9kZSBhbmQgUmVhY3QgTmF0aXZlLCBgYWRkL3JlbW92ZUV2ZW50TGlzdGVuZXJgIGRvZXNuJ3QgZXhpc3Qgb24gd2luZG93LlxuY29uc3QgW29uV2luZG93RXZlbnQsIG9mZldpbmRvd0V2ZW50XSA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA/IFtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdyksXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpXG5dIDogW1xuICAgIG5vb3AsXG4gICAgbm9vcFxuXTtcbmNvbnN0IGlzVmlzaWJsZSA9ICgpPT57XG4gICAgY29uc3QgdmlzaWJpbGl0eVN0YXRlID0gaXNEb2N1bWVudERlZmluZWQgJiYgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZCh2aXNpYmlsaXR5U3RhdGUpIHx8IHZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbic7XG59O1xuY29uc3QgaW5pdEZvY3VzID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIGZvY3VzIHJldmFsaWRhdGVcbiAgICBpZiAoaXNEb2N1bWVudERlZmluZWQpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgb25XaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGlmIChpc0RvY3VtZW50RGVmaW5lZCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBvZmZXaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgfTtcbn07XG5jb25zdCBpbml0UmVjb25uZWN0ID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIHJldmFsaWRhdGUgb24gcmVjb25uZWN0ZWRcbiAgICBjb25zdCBvbk9ubGluZSA9ICgpPT57XG4gICAgICAgIG9ubGluZSA9IHRydWU7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICAvLyBub3RoaW5nIHRvIHJldmFsaWRhdGUsIGp1c3QgdXBkYXRlIHRoZSBzdGF0dXNcbiAgICBjb25zdCBvbk9mZmxpbmUgPSAoKT0+e1xuICAgICAgICBvbmxpbmUgPSBmYWxzZTtcbiAgICB9O1xuICAgIG9uV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICBvbldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIH07XG59O1xuY29uc3QgcHJlc2V0ID0ge1xuICAgIGlzT25saW5lLFxuICAgIGlzVmlzaWJsZVxufTtcbmNvbnN0IGRlZmF1bHRDb25maWdPcHRpb25zID0ge1xuICAgIGluaXRGb2N1cyxcbiAgICBpbml0UmVjb25uZWN0XG59O1xuXG5jb25zdCBJU19SRUFDVF9MRUdBQ1kgPSAhUmVhY3QudXNlSWQ7XG5jb25zdCBJU19TRVJWRVIgPSAhaXNXaW5kb3dEZWZpbmVkIHx8ICdEZW5vJyBpbiB3aW5kb3c7XG4vLyBQb2x5ZmlsbCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbmNvbnN0IHJBRiA9IChmKT0+aGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgPyB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddKGYpIDogc2V0VGltZW91dChmLCAxKTtcbi8vIFJlYWN0IGN1cnJlbnRseSB0aHJvd3MgYSB3YXJuaW5nIHdoZW4gdXNpbmcgdXNlTGF5b3V0RWZmZWN0IG9uIHRoZSBzZXJ2ZXIuXG4vLyBUbyBnZXQgYXJvdW5kIGl0LCB3ZSBjYW4gY29uZGl0aW9uYWxseSB1c2VFZmZlY3Qgb24gdGhlIHNlcnZlciAobm8tb3ApIGFuZFxuLy8gdXNlTGF5b3V0RWZmZWN0IGluIHRoZSBicm93c2VyLlxuY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IElTX1NFUlZFUiA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdDtcbi8vIFRoaXMgYXNzaWdubWVudCBpcyB0byBleHRlbmQgdGhlIE5hdmlnYXRvciB0eXBlIHRvIHVzZSBlZmZlY3RpdmVUeXBlLlxuY29uc3QgbmF2aWdhdG9yQ29ubmVjdGlvbiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5jb25uZWN0aW9uO1xuLy8gQWRqdXN0IHRoZSBjb25maWcgYmFzZWQgb24gc2xvdyBjb25uZWN0aW9uIHN0YXR1cyAoPD0gNzBLYnBzKS5cbmNvbnN0IHNsb3dDb25uZWN0aW9uID0gIUlTX1NFUlZFUiAmJiBuYXZpZ2F0b3JDb25uZWN0aW9uICYmIChbXG4gICAgJ3Nsb3ctMmcnLFxuICAgICcyZydcbl0uaW5jbHVkZXMobmF2aWdhdG9yQ29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlKSB8fCBuYXZpZ2F0b3JDb25uZWN0aW9uLnNhdmVEYXRhKTtcblxuY29uc3Qgc2VyaWFsaXplID0gKGtleSk9PntcbiAgICBpZiAoaXNGdW5jdGlvbihrZXkpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMgbm90IHJlYWR5XG4gICAgICAgICAgICBrZXkgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBVc2UgdGhlIG9yaWdpbmFsIGtleSBhcyB0aGUgYXJndW1lbnQgb2YgZmV0Y2hlci4gVGhpcyBjYW4gYmUgYSBzdHJpbmcgb3IgYW5cbiAgICAvLyBhcnJheSBvZiB2YWx1ZXMuXG4gICAgY29uc3QgYXJncyA9IGtleTtcbiAgICAvLyBJZiBrZXkgaXMgbm90IGZhbHN5LCBvciBub3QgYW4gZW1wdHkgYXJyYXksIGhhc2ggaXQuXG4gICAga2V5ID0gdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/IGtleSA6IChBcnJheS5pc0FycmF5KGtleSkgPyBrZXkubGVuZ3RoIDoga2V5KSA/IHN0YWJsZUhhc2goa2V5KSA6ICcnO1xuICAgIHJldHVybiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgYXJnc1xuICAgIF07XG59O1xuXG4vLyBHbG9iYWwgdGltZXN0YW1wLlxubGV0IF9fdGltZXN0YW1wID0gMDtcbmNvbnN0IGdldFRpbWVzdGFtcCA9ICgpPT4rK19fdGltZXN0YW1wO1xuXG5jb25zdCBGT0NVU19FVkVOVCA9IDA7XG5jb25zdCBSRUNPTk5FQ1RfRVZFTlQgPSAxO1xuY29uc3QgTVVUQVRFX0VWRU5UID0gMjtcbmNvbnN0IEVSUk9SX1JFVkFMSURBVEVfRVZFTlQgPSAzO1xuXG52YXIgY29uc3RhbnRzID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIEZPQ1VTX0VWRU5UOiBGT0NVU19FVkVOVCxcbiAgUkVDT05ORUNUX0VWRU5UOiBSRUNPTk5FQ1RfRVZFTlQsXG4gIE1VVEFURV9FVkVOVDogTVVUQVRFX0VWRU5ULFxuICBFUlJPUl9SRVZBTElEQVRFX0VWRU5UOiBFUlJPUl9SRVZBTElEQVRFX0VWRU5UXG59O1xuXG5hc3luYyBmdW5jdGlvbiBpbnRlcm5hbE11dGF0ZSguLi5hcmdzKSB7XG4gICAgY29uc3QgW2NhY2hlLCBfa2V5LCBfZGF0YSwgX29wdHNdID0gYXJncztcbiAgICAvLyBXaGVuIHBhc3NpbmcgYXMgYSBib29sZWFuLCBpdCdzIGV4cGxpY2l0bHkgdXNlZCB0byBkaXNhYmxlL2VuYWJsZVxuICAgIC8vIHJldmFsaWRhdGlvbi5cbiAgICBjb25zdCBvcHRpb25zID0gbWVyZ2VPYmplY3RzKHtcbiAgICAgICAgcG9wdWxhdGVDYWNoZTogdHJ1ZSxcbiAgICAgICAgdGhyb3dPbkVycm9yOiB0cnVlXG4gICAgfSwgdHlwZW9mIF9vcHRzID09PSAnYm9vbGVhbicgPyB7XG4gICAgICAgIHJldmFsaWRhdGU6IF9vcHRzXG4gICAgfSA6IF9vcHRzIHx8IHt9KTtcbiAgICBsZXQgcG9wdWxhdGVDYWNoZSA9IG9wdGlvbnMucG9wdWxhdGVDYWNoZTtcbiAgICBjb25zdCByb2xsYmFja09uRXJyb3JPcHRpb24gPSBvcHRpb25zLnJvbGxiYWNrT25FcnJvcjtcbiAgICBsZXQgb3B0aW1pc3RpY0RhdGEgPSBvcHRpb25zLm9wdGltaXN0aWNEYXRhO1xuICAgIGNvbnN0IHJldmFsaWRhdGUgPSBvcHRpb25zLnJldmFsaWRhdGUgIT09IGZhbHNlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvciA9IChlcnJvcik9PntcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByb2xsYmFja09uRXJyb3JPcHRpb24gPT09ICdmdW5jdGlvbicgPyByb2xsYmFja09uRXJyb3JPcHRpb24oZXJyb3IpIDogcm9sbGJhY2tPbkVycm9yT3B0aW9uICE9PSBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHRocm93T25FcnJvciA9IG9wdGlvbnMudGhyb3dPbkVycm9yO1xuICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBrZXkgZmlsdGVyLCByZXR1cm4gdGhlIG11dGF0aW9uIHJlc3VsdHMgZm9yIGFsbFxuICAgIC8vIGZpbHRlcmVkIGtleXMuXG4gICAgaWYgKGlzRnVuY3Rpb24oX2tleSkpIHtcbiAgICAgICAgY29uc3Qga2V5RmlsdGVyID0gX2tleTtcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleXMgPSBbXTtcbiAgICAgICAgY29uc3QgaXQgPSBjYWNoZS5rZXlzKCk7XG4gICAgICAgIGZvcihsZXQga2V5SXQgPSBpdC5uZXh0KCk7ICFrZXlJdC5kb25lOyBrZXlJdCA9IGl0Lm5leHQoKSl7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlJdC52YWx1ZTtcbiAgICAgICAgICAgIGlmICgvLyBTa2lwIHRoZSBzcGVjaWFsIHVzZVNXUkluZmluaXRlIGFuZCB1c2VTV1JTdWJzY3JpcHRpb24ga2V5cy5cbiAgICAgICAgICAgICEvXlxcJChpbmZ8c3ViKVxcJC8udGVzdChrZXkpICYmIGtleUZpbHRlcihjYWNoZS5nZXQoa2V5KS5faykpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG1hdGNoZWRLZXlzLm1hcChtdXRhdGVCeUtleSkpO1xuICAgIH1cbiAgICByZXR1cm4gbXV0YXRlQnlLZXkoX2tleSk7XG4gICAgYXN5bmMgZnVuY3Rpb24gbXV0YXRlQnlLZXkoX2spIHtcbiAgICAgICAgLy8gU2VyaWFsaXplIGtleVxuICAgICAgICBjb25zdCBba2V5XSA9IHNlcmlhbGl6ZShfayk7XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IFtnZXQsIHNldF0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICAgICAgY29uc3QgW0VWRU5UX1JFVkFMSURBVE9SUywgTVVUQVRJT04sIEZFVENIXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgIGNvbnN0IHJldmFsaWRhdG9ycyA9IEVWRU5UX1JFVkFMSURBVE9SU1trZXldO1xuICAgICAgICBjb25zdCBzdGFydFJldmFsaWRhdGUgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKHJldmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBrZXkgYnkgZGVsZXRpbmcgdGhlIGNvbmN1cnJlbnQgcmVxdWVzdCBtYXJrZXJzIHNvIG5ld1xuICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RzIHdpbGwgbm90IGJlIGRlZHVwZWQuXG4gICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdG9yc1swXShNVVRBVEVfRVZFTlQpLnRoZW4oKCk9PmdldCgpLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZXQoKS5kYXRhO1xuICAgICAgICB9O1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBuZXcgZGF0YSBwcm92aWRlZCwgcmV2YWxpZGF0ZSB0aGUga2V5IHdpdGggY3VycmVudCBzdGF0ZS5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBhbmQgYnJvYWRjYXN0IHN0YXRlLlxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0UmV2YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRhID0gX2RhdGE7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgLy8gVXBkYXRlIGdsb2JhbCB0aW1lc3RhbXBzLlxuICAgICAgICBjb25zdCBiZWZvcmVNdXRhdGlvblRzID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIE1VVEFUSU9OW2tleV0gPSBbXG4gICAgICAgICAgICBiZWZvcmVNdXRhdGlvblRzLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBoYXNPcHRpbWlzdGljRGF0YSA9ICFpc1VuZGVmaW5lZChvcHRpbWlzdGljRGF0YSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0KCk7XG4gICAgICAgIC8vIGBkaXNwbGF5ZWREYXRhYCBpcyB0aGUgY3VycmVudCB2YWx1ZSBvbiBzY3JlZW4uIEl0IGNvdWxkIGJlIHRoZSBvcHRpbWlzdGljIHZhbHVlXG4gICAgICAgIC8vIHRoYXQgaXMgZ29pbmcgdG8gYmUgb3ZlcnJpZGRlbiBieSBhIGBjb21taXR0ZWREYXRhYCwgb3IgZ2V0IHJldmVydGVkIGJhY2suXG4gICAgICAgIC8vIGBjb21taXR0ZWREYXRhYCBpcyB0aGUgdmFsaWRhdGVkIHZhbHVlIHRoYXQgY29tZXMgZnJvbSBhIGZldGNoIG9yIG11dGF0aW9uLlxuICAgICAgICBjb25zdCBkaXNwbGF5ZWREYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGEgPSBzdGF0ZS5fYztcbiAgICAgICAgY29uc3QgY29tbWl0dGVkRGF0YSA9IGlzVW5kZWZpbmVkKGN1cnJlbnREYXRhKSA/IGRpc3BsYXllZERhdGEgOiBjdXJyZW50RGF0YTtcbiAgICAgICAgLy8gRG8gb3B0aW1pc3RpYyBkYXRhIHVwZGF0ZS5cbiAgICAgICAgaWYgKGhhc09wdGltaXN0aWNEYXRhKSB7XG4gICAgICAgICAgICBvcHRpbWlzdGljRGF0YSA9IGlzRnVuY3Rpb24ob3B0aW1pc3RpY0RhdGEpID8gb3B0aW1pc3RpY0RhdGEoY29tbWl0dGVkRGF0YSkgOiBvcHRpbWlzdGljRGF0YTtcbiAgICAgICAgICAgIC8vIFdoZW4gd2Ugc2V0IG9wdGltaXN0aWMgZGF0YSwgYmFja3VwIHRoZSBjdXJyZW50IGNvbW1pdHRlZERhdGEgZGF0YSBpbiBgX2NgLlxuICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiBvcHRpbWlzdGljRGF0YSxcbiAgICAgICAgICAgICAgICBfYzogY29tbWl0dGVkRGF0YVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICAgIC8vIGBkYXRhYCBpcyBhIGZ1bmN0aW9uLCBjYWxsIGl0IHBhc3NpbmcgY3VycmVudCBjYWNoZSB2YWx1ZS5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEoY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCB0aHJvd3MgYW4gZXJyb3Igc3luY2hyb25vdXNseSwgd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYGRhdGFgIGlzIGEgcHJvbWlzZS90aGVuYWJsZSwgcmVzb2x2ZSB0aGUgZmluYWwgZGF0YSBmaXJzdC5cbiAgICAgICAgaWYgKGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhLnRoZW4pKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG11dGF0aW9uIGlzIGFzeW5jLCB3ZSBuZWVkIHRvIGNoZWNrIHRpbWVzdGFtcHMgdG9cbiAgICAgICAgICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9ucy5cbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBkYXRhLmNhdGNoKChlcnIpPT57XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIG90aGVyIG11dGF0aW9ucyBoYXZlIG9jY3VycmVkIHNpbmNlIHdlJ3ZlIHN0YXJ0ZWQgdGhpcyBtdXRhdGlvbi5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByYWNlIHdlIGRvbid0IHVwZGF0ZSBjYWNoZSBvciBicm9hZGNhc3QgdGhlIGNoYW5nZSxcbiAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgaWYgKGJlZm9yZU11dGF0aW9uVHMgIT09IE1VVEFUSU9OW2tleV1bMF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBoYXNPcHRpbWlzdGljRGF0YSAmJiByb2xsYmFja09uRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgLy8gUm9sbGJhY2suIEFsd2F5cyBwb3B1bGF0ZSB0aGUgY2FjaGUgaW4gdGhpcyBjYXNlIGJ1dCB3aXRob3V0XG4gICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtaW5nIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgIHBvcHVsYXRlQ2FjaGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBjb21taXR0ZWREYXRhO1xuICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgdG8gYmUgdGhlIGxhdGVzdCBjb21taXR0ZWQgZGF0YSwgYW5kIGNsZWFyIHRoZSBgX2NgIHZhbHVlLlxuICAgICAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB3ZSBzaG91bGQgd3JpdGUgYmFjayB0aGUgY2FjaGUgYWZ0ZXIgcmVxdWVzdC5cbiAgICAgICAgaWYgKHBvcHVsYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHJlc3VsdCBpbnRvIGRhdGEuXG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocG9wdWxhdGVDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBvcHVsYXRlQ2FjaGUoZGF0YSwgY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIGNhY2hlZCBkYXRhIGlmIHRoZXJlJ3Mgbm8gZXJyb3IuIERhdGEgY2FuIGJlIGB1bmRlZmluZWRgIGhlcmUuXG4gICAgICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lc3RhbXAgdG8gbWFyayB0aGUgbXV0YXRpb24gaGFzIGVuZGVkLlxuICAgICAgICBNVVRBVElPTltrZXldWzFdID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBTV1IgSG9va3MnIGludGVybmFsIHN0YXRlczpcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3RhcnRSZXZhbGlkYXRlKCk7XG4gICAgICAgIC8vIFRoZSBtdXRhdGlvbiBhbmQgcmV2YWxpZGF0aW9uIGFyZSBlbmRlZCwgd2UgY2FuIGNsZWFyIGl0IHNpbmNlIHRoZSBkYXRhIGlzXG4gICAgICAgIC8vIG5vdCBhbiBvcHRpbWlzdGljIHZhbHVlIGFueW1vcmUuXG4gICAgICAgIHNldCh7XG4gICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUaHJvdyBlcnJvciBvciByZXR1cm4gZGF0YVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aHJvd09uRXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3B1bGF0ZUNhY2hlID8gcmVzIDogZGF0YTtcbiAgICB9XG59XG5cbmNvbnN0IHJldmFsaWRhdGVBbGxLZXlzID0gKHJldmFsaWRhdG9ycywgdHlwZSk9PntcbiAgICBmb3IoY29uc3Qga2V5IGluIHJldmFsaWRhdG9ycyl7XG4gICAgICAgIGlmIChyZXZhbGlkYXRvcnNba2V5XVswXSkgcmV2YWxpZGF0b3JzW2tleV1bMF0odHlwZSk7XG4gICAgfVxufTtcbmNvbnN0IGluaXRDYWNoZSA9IChwcm92aWRlciwgb3B0aW9ucyk9PntcbiAgICAvLyBUaGUgZ2xvYmFsIHN0YXRlIGZvciBhIHNwZWNpZmljIHByb3ZpZGVyIHdpbGwgYmUgdXNlZCB0byBkZWR1cGxpY2F0ZVxuICAgIC8vIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnMuIEFzIHdlbGwgYXMgYSBtdXRhdGUgZnVuY3Rpb24gdGhhdCBpcyBib3VuZCB0b1xuICAgIC8vIHRoZSBjYWNoZS5cbiAgICAvLyBUaGUgcHJvdmlkZXIncyBnbG9iYWwgc3RhdGUgbWlnaHQgYmUgYWxyZWFkeSBpbml0aWFsaXplZC4gTGV0J3MgdHJ5IHRvIGdldCB0aGVcbiAgICAvLyBnbG9iYWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm92aWRlciBmaXJzdC5cbiAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZ2xvYmFsIHN0YXRlIGJvdW5kIHRvIHRoZSBwcm92aWRlciwgY3JlYXRlIGEgbmV3IG9uZSB3aXRoIHRoZVxuICAgICAgICAvLyBuZXcgbXV0YXRlIGZ1bmN0aW9uLlxuICAgICAgICBjb25zdCBFVkVOVF9SRVZBTElEQVRPUlMgPSB7fTtcbiAgICAgICAgY29uc3QgbXV0YXRlID0gaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIHByb3ZpZGVyKTtcbiAgICAgICAgbGV0IHVubW91bnQgPSBub29wO1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0ge307XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZSA9IChrZXksIGNhbGxiYWNrKT0+e1xuICAgICAgICAgICAgY29uc3Qgc3VicyA9IHN1YnNjcmlwdGlvbnNba2V5XSB8fCBbXTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnNba2V5XSA9IHN1YnM7XG4gICAgICAgICAgICBzdWJzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgcmV0dXJuICgpPT5zdWJzLnNwbGljZShzdWJzLmluZGV4T2YoY2FsbGJhY2spLCAxKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0dGVyID0gKGtleSwgdmFsdWUsIHByZXYpPT57XG4gICAgICAgICAgICBwcm92aWRlci5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzdWJzID0gc3Vic2NyaXB0aW9uc1trZXldO1xuICAgICAgICAgICAgaWYgKHN1YnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIHN1YnMpe1xuICAgICAgICAgICAgICAgICAgICBmbih2YWx1ZSwgcHJldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbml0UHJvdmlkZXIgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGF0ZSBpZiBpdCdzIG5ldywgb3IgaWYgdGhlIHByb3ZpZGVyIGhhcyBiZWVuIGV4dGVuZGVkLlxuICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLnNldChwcm92aWRlciwgW1xuICAgICAgICAgICAgICAgICAgICBFVkVOVF9SRVZBTElEQVRPUlMsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVyLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlTX1NFUlZFUikge1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGxpc3RlbmluZyB0byB0aGUgbmF0aXZlIGV2ZW50cyBmb3IgYXV0byByZXZhbGlkYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IHB1dCBhIGRlbGF5IChzZXRUaW1lb3V0KSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZVxuICAgICAgICAgICAgICAgICAgICAvLyBmaXJlZCBhZnRlciBpbW1lZGlhdGUgSmF2YVNjcmlwdCBleGVjdXRpb25zLCB3aGljaCBjYW4gYmVcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVhY3QncyBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGF2b2lkcyBzb21lIHVubmVjZXNzYXJ5IHJldmFsaWRhdGlvbnMgc3VjaCBhc1xuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTY4MC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZUZvY3VzID0gb3B0cy5pbml0Rm9jdXMoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgRk9DVVNfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VSZWNvbm5lY3QgPSBvcHRzLmluaXRSZWNvbm5lY3Qoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgUkVDT05ORUNUX0VWRU5UKSkpO1xuICAgICAgICAgICAgICAgICAgICB1bm1vdW50ID0gKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VGb2N1cyAmJiByZWxlYXNlRm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VSZWNvbm5lY3QgJiYgcmVsZWFzZVJlY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB1bi1tb3VudGluZywgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNhY2hlIHByb3ZpZGVyIGZyb20gdGhlIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yYWdlIHRvbyBiZWNhdXNlIGl0J3MgYSBzaWRlLWVmZmVjdC4gT3RoZXJ3aXNlLCB3aGVuIHJlLW1vdW50aW5nIHdlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCByZS1yZWdpc3RlciB0aG9zZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBTV1JHbG9iYWxTdGF0ZS5kZWxldGUocHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaW5pdFByb3ZpZGVyKCk7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvdmlkZXIsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdCBhbmQgc2V0dXAgRE9NIGV2ZW50c1xuICAgICAgICAvLyBsaXN0ZW5lcnMgZm9yIGBmb2N1c2AgYW5kIGByZWNvbm5lY3RgIGFjdGlvbnMuXG4gICAgICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gaW5qZWN0IGFuIGV4dHJhIGxheWVyIG9uIHRvcCBvZiBgcHJvdmlkZXJgIGluIHRoZSBmdXR1cmUsXG4gICAgICAgIC8vIHN1Y2ggYXMga2V5IHNlcmlhbGl6YXRpb24sIGF1dG8gR0MsIGV0Yy5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQncyBqdXN0IGEgYE1hcGAgaW50ZXJmYWNlIHdpdGhvdXQgYW55IG1vZGlmaWNhdGlvbnMuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgIGluaXRQcm92aWRlcixcbiAgICAgICAgICAgIHVubW91bnRcbiAgICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgIFNXUkdsb2JhbFN0YXRlLmdldChwcm92aWRlcilbNF1cbiAgICBdO1xufTtcblxuLy8gZXJyb3IgcmV0cnlcbmNvbnN0IG9uRXJyb3JSZXRyeSA9IChfLCBfXywgY29uZmlnLCByZXZhbGlkYXRlLCBvcHRzKT0+e1xuICAgIGNvbnN0IG1heFJldHJ5Q291bnQgPSBjb25maWcuZXJyb3JSZXRyeUNvdW50O1xuICAgIGNvbnN0IGN1cnJlbnRSZXRyeUNvdW50ID0gb3B0cy5yZXRyeUNvdW50O1xuICAgIC8vIEV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICBjb25zdCB0aW1lb3V0ID0gfn4oKE1hdGgucmFuZG9tKCkgKyAwLjUpICogKDEgPDwgKGN1cnJlbnRSZXRyeUNvdW50IDwgOCA/IGN1cnJlbnRSZXRyeUNvdW50IDogOCkpKSAqIGNvbmZpZy5lcnJvclJldHJ5SW50ZXJ2YWw7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtYXhSZXRyeUNvdW50KSAmJiBjdXJyZW50UmV0cnlDb3VudCA+IG1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJldmFsaWRhdGUsIHRpbWVvdXQsIG9wdHMpO1xufTtcbmNvbnN0IGNvbXBhcmUgPSAoY3VycmVudERhdGEsIG5ld0RhdGEpPT5zdGFibGVIYXNoKGN1cnJlbnREYXRhKSA9PSBzdGFibGVIYXNoKG5ld0RhdGEpO1xuLy8gRGVmYXVsdCBjYWNoZSBwcm92aWRlclxuY29uc3QgW2NhY2hlLCBtdXRhdGVdID0gaW5pdENhY2hlKG5ldyBNYXAoKSk7XG4vLyBEZWZhdWx0IGNvbmZpZ1xuY29uc3QgZGVmYXVsdENvbmZpZyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgLy8gZXZlbnRzXG4gICAgb25Mb2FkaW5nU2xvdzogbm9vcCxcbiAgICBvblN1Y2Nlc3M6IG5vb3AsXG4gICAgb25FcnJvcjogbm9vcCxcbiAgICBvbkVycm9yUmV0cnksXG4gICAgb25EaXNjYXJkZWQ6IG5vb3AsXG4gICAgLy8gc3dpdGNoZXNcbiAgICByZXZhbGlkYXRlT25Gb2N1czogdHJ1ZSxcbiAgICByZXZhbGlkYXRlT25SZWNvbm5lY3Q6IHRydWUsXG4gICAgcmV2YWxpZGF0ZUlmU3RhbGU6IHRydWUsXG4gICAgc2hvdWxkUmV0cnlPbkVycm9yOiB0cnVlLFxuICAgIC8vIHRpbWVvdXRzXG4gICAgZXJyb3JSZXRyeUludGVydmFsOiBzbG93Q29ubmVjdGlvbiA/IDEwMDAwIDogNTAwMCxcbiAgICBmb2N1c1Rocm90dGxlSW50ZXJ2YWw6IDUgKiAxMDAwLFxuICAgIGRlZHVwaW5nSW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgIGxvYWRpbmdUaW1lb3V0OiBzbG93Q29ubmVjdGlvbiA/IDUwMDAgOiAzMDAwLFxuICAgIC8vIHByb3ZpZGVyc1xuICAgIGNvbXBhcmUsXG4gICAgaXNQYXVzZWQ6ICgpPT5mYWxzZSxcbiAgICBjYWNoZSxcbiAgICBtdXRhdGUsXG4gICAgZmFsbGJhY2s6IHt9XG59LCAvLyB1c2Ugd2ViIHByZXNldCBieSBkZWZhdWx0XG5wcmVzZXQpO1xuXG5jb25zdCBtZXJnZUNvbmZpZ3MgPSAoYSwgYik9PntcbiAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGhlcmUuXG4gICAgY29uc3QgdiA9IG1lcmdlT2JqZWN0cyhhLCBiKTtcbiAgICAvLyBJZiB0d28gY29uZmlncyBhcmUgcHJvdmlkZWQsIG1lcmdlIHRoZWlyIGB1c2VgIGFuZCBgZmFsbGJhY2tgIG9wdGlvbnMuXG4gICAgaWYgKGIpIHtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUxICwgZmFsbGJhY2s6IGYxICB9ID0gYTtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUyICwgZmFsbGJhY2s6IGYyICB9ID0gYjtcbiAgICAgICAgaWYgKHUxICYmIHUyKSB7XG4gICAgICAgICAgICB2LnVzZSA9IHUxLmNvbmNhdCh1Mik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYxICYmIGYyKSB7XG4gICAgICAgICAgICB2LmZhbGxiYWNrID0gbWVyZ2VPYmplY3RzKGYxLCBmMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG5jb25zdCBTV1JDb25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5jb25zdCBTV1JDb25maWcgPSAocHJvcHMpPT57XG4gICAgY29uc3QgeyB2YWx1ZSAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBhcmVudENvbmZpZyA9IHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCk7XG4gICAgY29uc3QgaXNGdW5jdGlvbmFsQ29uZmlnID0gaXNGdW5jdGlvbih2YWx1ZSk7XG4gICAgY29uc3QgY29uZmlnID0gdXNlTWVtbygoKT0+aXNGdW5jdGlvbmFsQ29uZmlnID8gdmFsdWUocGFyZW50Q29uZmlnKSA6IHZhbHVlLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICB2YWx1ZVxuICAgIF0pO1xuICAgIC8vIEV4dGVuZCBwYXJlbnQgY29udGV4dCB2YWx1ZXMgYW5kIG1pZGRsZXdhcmUuXG4gICAgY29uc3QgZXh0ZW5kZWRDb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyBjb25maWcgOiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICBjb25maWdcbiAgICBdKTtcbiAgICAvLyBTaG91bGQgbm90IHVzZSB0aGUgaW5oZXJpdGVkIHByb3ZpZGVyLlxuICAgIGNvbnN0IHByb3ZpZGVyID0gY29uZmlnICYmIGNvbmZpZy5wcm92aWRlcjtcbiAgICAvLyBpbml0aWFsaXplIHRoZSBjYWNoZSBvbmx5IG9uIGZpcnN0IGFjY2Vzcy5cbiAgICBjb25zdCBjYWNoZUNvbnRleHRSZWYgPSB1c2VSZWYoVU5ERUZJTkVEKTtcbiAgICBpZiAocHJvdmlkZXIgJiYgIWNhY2hlQ29udGV4dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNhY2hlQ29udGV4dFJlZi5jdXJyZW50ID0gaW5pdENhY2hlKHByb3ZpZGVyKGV4dGVuZGVkQ29uZmlnLmNhY2hlIHx8IGNhY2hlKSwgY29uZmlnKTtcbiAgICB9XG4gICAgY29uc3QgY2FjaGVDb250ZXh0ID0gY2FjaGVDb250ZXh0UmVmLmN1cnJlbnQ7XG4gICAgLy8gT3ZlcnJpZGUgdGhlIGNhY2hlIGlmIGEgbmV3IHByb3ZpZGVyIGlzIGdpdmVuLlxuICAgIGlmIChjYWNoZUNvbnRleHQpIHtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcuY2FjaGUgPSBjYWNoZUNvbnRleHRbMF07XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLm11dGF0ZSA9IGNhY2hlQ29udGV4dFsxXTtcbiAgICB9XG4gICAgLy8gVW5zdWJzY3JpYmUgZXZlbnRzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICAgICAgY2FjaGVDb250ZXh0WzJdICYmIGNhY2hlQ29udGV4dFsyXSgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlQ29udGV4dFszXTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChTV1JDb25maWdDb250ZXh0LlByb3ZpZGVyLCBtZXJnZU9iamVjdHMocHJvcHMsIHtcbiAgICAgICAgdmFsdWU6IGV4dGVuZGVkQ29uZmlnXG4gICAgfSkpO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvclxuY29uc3QgZW5hYmxlRGV2dG9vbHMgPSBpc1dpbmRvd0RlZmluZWQgJiYgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1VTRV9fO1xuY29uc3QgdXNlID0gZW5hYmxlRGV2dG9vbHMgPyB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX18gOiBbXTtcbmNvbnN0IHNldHVwRGV2VG9vbHMgPSAoKT0+e1xuICAgIGlmIChlbmFibGVEZXZ0b29scykge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHdpbmRvdy5fX1NXUl9ERVZUT09MU19SRUFDVF9fID0gUmVhY3Q7XG4gICAgfVxufTtcblxuY29uc3Qgbm9ybWFsaXplID0gKGFyZ3MpPT57XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oYXJnc1sxXSkgPyBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIGFyZ3NbMV0sXG4gICAgICAgIGFyZ3NbMl0gfHwge31cbiAgICBdIDogW1xuICAgICAgICBhcmdzWzBdLFxuICAgICAgICBudWxsLFxuICAgICAgICAoYXJnc1sxXSA9PT0gbnVsbCA/IGFyZ3NbMl0gOiBhcmdzWzFdKSB8fCB7fVxuICAgIF07XG59O1xuXG5jb25zdCB1c2VTV1JDb25maWcgPSAoKT0+e1xuICAgIHJldHVybiBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZywgdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KSk7XG59O1xuXG5jb25zdCBwcmVsb2FkID0gKGtleV8sIGZldGNoZXIpPT57XG4gICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gUHJldmVudCBwcmVsb2FkIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdXNlZC5cbiAgICBpZiAoUFJFTE9BRFtrZXldKSByZXR1cm4gUFJFTE9BRFtrZXldO1xuICAgIGNvbnN0IHJlcSA9IGZldGNoZXIoa2V5Xyk7XG4gICAgUFJFTE9BRFtrZXldID0gcmVxO1xuICAgIHJldHVybiByZXE7XG59O1xuY29uc3QgbWlkZGxld2FyZSA9ICh1c2VTV1JOZXh0KT0+KGtleV8sIGZldGNoZXJfLCBjb25maWcpPT57XG4gICAgICAgIC8vIGZldGNoZXIgbWlnaHQgYmUgYSBzeW5jIGZ1bmN0aW9uLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICAgICAgY29uc3QgZmV0Y2hlciA9IGZldGNoZXJfICYmICgoLi4uYXJncyk9PntcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlcmlhbGl6ZShrZXlfKVswXTtcbiAgICAgICAgICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBQUkVMT0FEW2tleV07XG4gICAgICAgICAgICBpZiAocmVxKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZldGNoZXJfKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUk5leHQoa2V5XywgZmV0Y2hlciwgY29uZmlnKTtcbiAgICB9O1xuXG5jb25zdCBCVUlMVF9JTl9NSURETEVXQVJFID0gdXNlLmNvbmNhdChtaWRkbGV3YXJlKTtcblxuLy8gSXQncyB0cmlja3kgdG8gcGFzcyBnZW5lcmljIHR5cGVzIGFzIHBhcmFtZXRlcnMsIHNvIHdlIGp1c3QgZGlyZWN0bHkgb3ZlcnJpZGVcbi8vIHRoZSB0eXBlcyBoZXJlLlxuY29uc3Qgd2l0aEFyZ3MgPSAoaG9vayk9PntcbiAgICByZXR1cm4gZnVuY3Rpb24gdXNlU1dSQXJncyguLi5hcmdzKSB7XG4gICAgICAgIC8vIEdldCB0aGUgZGVmYXVsdCBhbmQgaW5oZXJpdGVkIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBhcmd1bWVudHMuXG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBfY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgLy8gTWVyZ2UgY29uZmlndXJhdGlvbnMuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IG1lcmdlQ29uZmlncyhmYWxsYmFja0NvbmZpZywgX2NvbmZpZyk7XG4gICAgICAgIC8vIEFwcGx5IG1pZGRsZXdhcmVcbiAgICAgICAgbGV0IG5leHQgPSBob29rO1xuICAgICAgICBjb25zdCB7IHVzZSAgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZSA9ICh1c2UgfHwgW10pLmNvbmNhdChCVUlMVF9JTl9NSURETEVXQVJFKTtcbiAgICAgICAgZm9yKGxldCBpID0gbWlkZGxld2FyZS5sZW5ndGg7IGktLTspe1xuICAgICAgICAgICAgbmV4dCA9IG1pZGRsZXdhcmVbaV0obmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQoa2V5LCBmbiB8fCBjb25maWcuZmV0Y2hlciB8fCBudWxsLCBjb25maWcpO1xuICAgIH07XG59O1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHdpdGggZGVwZW5kZW5jeS10cmFja2luZy5cbiAqLyBjb25zdCB1c2VTdGF0ZVdpdGhEZXBzID0gKHN0YXRlKT0+e1xuICAgIGNvbnN0IHJlcmVuZGVyID0gdXNlU3RhdGUoe30pWzFdO1xuICAgIGNvbnN0IHVubW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qgc3RhdGVSZWYgPSB1c2VSZWYoc3RhdGUpO1xuICAgIC8vIElmIGEgc3RhdGUgcHJvcGVydHkgKGRhdGEsIGVycm9yLCBvciBpc1ZhbGlkYXRpbmcpIGlzIGFjY2Vzc2VkIGJ5IHRoZSByZW5kZXJcbiAgICAvLyBmdW5jdGlvbiwgd2UgbWFyayB0aGUgcHJvcGVydHkgYXMgYSBkZXBlbmRlbmN5IHNvIGlmIGl0IGlzIHVwZGF0ZWQgYWdhaW5cbiAgICAvLyBpbiB0aGUgZnV0dXJlLCB3ZSB0cmlnZ2VyIGEgcmVyZW5kZXIuXG4gICAgLy8gVGhpcyBpcyBhbHNvIGtub3duIGFzIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gICAgY29uc3Qgc3RhdGVEZXBlbmRlbmNpZXNSZWYgPSB1c2VSZWYoe1xuICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgfSk7XG4gICAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRvIGNoYW5nZSBzdGF0ZVJlZiwgcGFzcyB0aGUgdmFsdWVzIGV4cGxpY2l0bHkgdG8gc2V0U3RhdGU6XG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogbmV3RGF0YSAvLyBzZXQgZGF0YSB0byBuZXdEYXRhXG4gICAqICAgZXJyb3I6IHVuZGVmaW5lZCAvLyBzZXQgZXJyb3IgdG8gdW5kZWZpbmVkXG4gICAqIH0pXG4gICAqXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogdW5kZWZpbmVkIC8vIHNldCBkYXRhIHRvIHVuZGVmaW5lZFxuICAgKiAgIGVycm9yOiBlcnIgLy8gc2V0IGVycm9yIHRvIGVyclxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovIGNvbnN0IHNldFN0YXRlID0gdXNlQ2FsbGJhY2soKHBheWxvYWQpPT57XG4gICAgICAgIGxldCBzaG91bGRSZXJlbmRlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBzdGF0ZVJlZi5jdXJyZW50O1xuICAgICAgICBmb3IoY29uc3QgXyBpbiBwYXlsb2FkKXtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBfO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBtYXJrIHJlcmVuZGVyIGFzXG4gICAgICAgICAgICAvLyBuZWVkZWQuXG4gICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlW2tdICE9PSBwYXlsb2FkW2tdKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlW2tdID0gcGF5bG9hZFtrXTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYWNjZXNzZWQgYnkgdGhlIGNvbXBvbmVudCwgYSByZXJlbmRlciBzaG91bGQgYmVcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVyZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkUmVyZW5kZXIgJiYgIXVubW91bnRlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmVyZW5kZXIoe30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBSZWFjdC5zdGFydFRyYW5zaXRpb24oKCk9PnJlcmVuZGVyKHt9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCAvLyBjb25maWcuc3VzcGVuc2UgaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlY3ljbGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3RhdGVSZWYsXG4gICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnQsXG4gICAgICAgIHNldFN0YXRlXG4gICAgXTtcbn07XG5cbi8vIEFkZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgbGlzdCBvZiBrZXllZCBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHJldHVyblxuLy8gdGhlIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLlxuY29uc3Qgc3Vic2NyaWJlQ2FsbGJhY2sgPSAoa2V5LCBjYWxsYmFja3MsIGNhbGxiYWNrKT0+e1xuICAgIGNvbnN0IGtleWVkUmV2YWxpZGF0b3JzID0gY2FsbGJhY2tzW2tleV0gfHwgKGNhbGxiYWNrc1trZXldID0gW10pO1xuICAgIGtleWVkUmV2YWxpZGF0b3JzLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBjb25zdCBpbmRleCA9IGtleWVkUmV2YWxpZGF0b3JzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gTygxKTogZmFzdGVyIHRoYW4gc3BsaWNlXG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9yc1tpbmRleF0gPSBrZXllZFJldmFsaWRhdG9yc1trZXllZFJldmFsaWRhdG9ycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbi8vIENyZWF0ZSBhIGN1c3RvbSBob29rIHdpdGggYSBtaWRkbGV3YXJlXG5jb25zdCB3aXRoTWlkZGxld2FyZSA9ICh1c2VTV1IsIG1pZGRsZXdhcmUpPT57XG4gICAgcmV0dXJuICguLi5hcmdzKT0+e1xuICAgICAgICBjb25zdCBba2V5LCBmbiwgY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgY29uc3QgdXNlcyA9IChjb25maWcudXNlIHx8IFtdKS5jb25jYXQobWlkZGxld2FyZSk7XG4gICAgICAgIHJldHVybiB1c2VTV1Ioa2V5LCBmbiwge1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgdXNlOiB1c2VzXG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuXG5zZXR1cERldlRvb2xzKCk7XG5cbmV4cG9ydCB7IElTX1JFQUNUX0xFR0FDWSwgSVNfU0VSVkVSLCBPQkpFQ1QsIFNXUkNvbmZpZywgU1dSR2xvYmFsU3RhdGUsIFVOREVGSU5FRCwgY2FjaGUsIGNvbXBhcmUsIGNyZWF0ZUNhY2hlSGVscGVyLCBkZWZhdWx0Q29uZmlnLCBkZWZhdWx0Q29uZmlnT3B0aW9ucywgZ2V0VGltZXN0YW1wLCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGluaXRDYWNoZSwgaW50ZXJuYWxNdXRhdGUsIGlzRG9jdW1lbnREZWZpbmVkLCBpc0Z1bmN0aW9uLCBpc1VuZGVmaW5lZCwgaXNXaW5kb3dEZWZpbmVkLCBtZXJnZUNvbmZpZ3MsIG1lcmdlT2JqZWN0cywgbXV0YXRlLCBub29wLCBub3JtYWxpemUsIHByZWxvYWQsIHByZXNldCwgckFGLCBjb25zdGFudHMgYXMgcmV2YWxpZGF0ZUV2ZW50cywgc2VyaWFsaXplLCBzbG93Q29ubmVjdGlvbiwgc3RhYmxlSGFzaCwgc3Vic2NyaWJlQ2FsbGJhY2ssIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHVzZVNXUkNvbmZpZywgdXNlU3RhdGVXaXRoRGVwcywgd2l0aEFyZ3MsIHdpdGhNaWRkbGV3YXJlIH07XG4iLCJpbXBvcnQgeyB1c2VSZWYsIHVzZU1lbW8sIHVzZUNhbGxiYWNrLCB1c2VEZWJ1Z1ZhbHVlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzJztcbmltcG9ydCB7IE9CSkVDVCwgU1dSQ29uZmlnIGFzIFNXUkNvbmZpZyQxLCBkZWZhdWx0Q29uZmlnLCB3aXRoQXJncywgU1dSR2xvYmFsU3RhdGUsIHNlcmlhbGl6ZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGlzVW5kZWZpbmVkLCBnZXRUaW1lc3RhbXAsIFVOREVGSU5FRCwgaXNGdW5jdGlvbiwgcmV2YWxpZGF0ZUV2ZW50cywgaW50ZXJuYWxNdXRhdGUsIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHN1YnNjcmliZUNhbGxiYWNrLCBJU19TRVJWRVIsIHJBRiwgSVNfUkVBQ1RfTEVHQUNZLCBtZXJnZU9iamVjdHMgfSBmcm9tICdzd3IvX2ludGVybmFsJztcbmV4cG9ydCB7IG11dGF0ZSwgcHJlbG9hZCwgdXNlU1dSQ29uZmlnIH0gZnJvbSAnc3dyL19pbnRlcm5hbCc7XG5cbmNvbnN0IFdJVEhfREVEVVBFID0ge1xuICAgIGRlZHVwZTogdHJ1ZVxufTtcbmNvbnN0IHVzZVNXUkhhbmRsZXIgPSAoX2tleSwgZmV0Y2hlciwgY29uZmlnKT0+e1xuICAgIGNvbnN0IHsgY2FjaGUgLCBjb21wYXJlICwgc3VzcGVuc2UgLCBmYWxsYmFja0RhdGEgLCByZXZhbGlkYXRlT25Nb3VudCAsIHJldmFsaWRhdGVJZlN0YWxlICwgcmVmcmVzaEludGVydmFsICwgcmVmcmVzaFdoZW5IaWRkZW4gLCByZWZyZXNoV2hlbk9mZmxpbmUgLCBrZWVwUHJldmlvdXNEYXRhICB9ID0gY29uZmlnO1xuICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIC8vIGBrZXlgIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBTV1IgYGRhdGFgIHN0YXRlLCBga2V5SW5mb2AgaG9sZHMgZXh0cmFcbiAgICAvLyBzdGF0ZXMgc3VjaCBhcyBgZXJyb3JgIGFuZCBgaXNWYWxpZGF0aW5nYCBpbnNpZGUsXG4gICAgLy8gYWxsIG9mIHRoZW0gYXJlIGRlcml2ZWQgZnJvbSBgX2tleWAuXG4gICAgLy8gYGZuQXJnYCBpcyB0aGUgYXJndW1lbnQvYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBrZXksIHdoaWNoIHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdG8gdGhlIGZldGNoZXIuXG4gICAgY29uc3QgW2tleSwgZm5BcmddID0gc2VyaWFsaXplKF9rZXkpO1xuICAgIC8vIElmIGl0J3MgdGhlIGluaXRpYWwgcmVuZGVyIG9mIHRoaXMgaG9vay5cbiAgICBjb25zdCBpbml0aWFsTW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gSWYgdGhlIGhvb2sgaXMgdW5tb3VudGVkIGFscmVhZHkuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByZXZlbnQgc29tZSBlZmZlY3RzXG4gICAgLy8gdG8gYmUgY2FsbGVkIGFmdGVyIHVubW91bnRpbmcuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBSZWZzIHRvIGtlZXAgdGhlIGtleSBhbmQgY29uZmlnLlxuICAgIGNvbnN0IGtleVJlZiA9IHVzZVJlZihrZXkpO1xuICAgIGNvbnN0IGZldGNoZXJSZWYgPSB1c2VSZWYoZmV0Y2hlcik7XG4gICAgY29uc3QgY29uZmlnUmVmID0gdXNlUmVmKGNvbmZpZyk7XG4gICAgY29uc3QgZ2V0Q29uZmlnID0gKCk9PmNvbmZpZ1JlZi5jdXJyZW50O1xuICAgIGNvbnN0IGlzQWN0aXZlID0gKCk9PmdldENvbmZpZygpLmlzVmlzaWJsZSgpICYmIGdldENvbmZpZygpLmlzT25saW5lKCk7XG4gICAgY29uc3QgW2dldENhY2hlLCBzZXRDYWNoZSwgc3Vic2NyaWJlQ2FjaGUsIGdldEluaXRpYWxDYWNoZV0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llcyA9IHVzZVJlZih7fSkuY3VycmVudDtcbiAgICBjb25zdCBmYWxsYmFjayA9IGlzVW5kZWZpbmVkKGZhbGxiYWNrRGF0YSkgPyBjb25maWcuZmFsbGJhY2tba2V5XSA6IGZhbGxiYWNrRGF0YTtcbiAgICBjb25zdCBpc0VxdWFsID0gKHByZXYsIGN1cnJlbnQpPT57XG4gICAgICAgIGxldCBlcXVhbCA9IHRydWU7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHN0YXRlRGVwZW5kZW5jaWVzKXtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBfO1xuICAgICAgICAgICAgaWYgKHQgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCBwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJldlt0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCByZXR1cm5lZERhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50W3RdICE9PSBwcmV2W3RdKSB7XG4gICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcXVhbDtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNuYXBzaG90ID0gdXNlTWVtbygoKT0+e1xuICAgICAgICBjb25zdCBzaG91bGRTdGFydFJlcXVlc3QgPSAoKCk9PntcbiAgICAgICAgICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWZldGNoZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIGByZXZhbGlkYXRlT25Nb3VudGAgaXMgc2V0LCB3ZSB0YWtlIHRoZSB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVJZlN0YWxlKSkgcmV0dXJuIHJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIC8vIEdldCB0aGUgY2FjaGUgYW5kIG1lcmdlIGl0IHdpdGggZXhwZWN0ZWQgc3RhdGVzLlxuICAgICAgICBjb25zdCBnZXRTZWxlY3RlZENhY2hlID0gKHN0YXRlKT0+e1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzZWxlY3QgdGhlIG5lZWRlZCBmaWVsZHMgZnJvbSB0aGUgc3RhdGUuXG4gICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IG1lcmdlT2JqZWN0cyhzdGF0ZSk7XG4gICAgICAgICAgICBkZWxldGUgc25hcHNob3QuX2s7XG4gICAgICAgICAgICBpZiAoIXNob3VsZFN0YXJ0UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5zbmFwc2hvdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FjaGVkRGF0YSA9IGdldENhY2hlKCk7XG4gICAgICAgIGNvbnN0IGluaXRpYWxEYXRhID0gZ2V0SW5pdGlhbENhY2hlKCk7XG4gICAgICAgIGNvbnN0IGNsaWVudFNuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShjYWNoZWREYXRhKTtcbiAgICAgICAgY29uc3Qgc2VydmVyU25hcHNob3QgPSBjYWNoZWREYXRhID09PSBpbml0aWFsRGF0YSA/IGNsaWVudFNuYXBzaG90IDogZ2V0U2VsZWN0ZWRDYWNoZShpbml0aWFsRGF0YSk7XG4gICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSByZXR1cm5pbmcgdGhlIHNhbWUgb2JqZWN0IHJlZmVyZW5jZSB0byBhdm9pZFxuICAgICAgICAvLyB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzLCB3ZSBrZWVwIHRoZSBwcmV2aW91cyBzbmFwc2hvdCBhbmQgdXNlIGRlZXBcbiAgICAgICAgLy8gY29tcGFyaXNvbiB0byBjaGVjayBpZiB3ZSBuZWVkIHRvIHJldHVybiBhIG5ldyBvbmUuXG4gICAgICAgIGxldCBtZW1vcml6ZWRTbmFwc2hvdCA9IGNsaWVudFNuYXBzaG90O1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgKCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTbmFwc2hvdCA9IGdldFNlbGVjdGVkQ2FjaGUoZ2V0Q2FjaGUoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRXF1YWwobmV3U25hcHNob3QsIG1lbW9yaXplZFNuYXBzaG90KSA/IG1lbW9yaXplZFNuYXBzaG90IDogbWVtb3JpemVkU25hcHNob3QgPSBuZXdTbmFwc2hvdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKT0+c2VydmVyU25hcHNob3RcbiAgICAgICAgXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgU1dSIHNob3VsZCByZXR1cm4uXG4gICAgY29uc3QgY2FjaGVkID0gdXNlU3luY0V4dGVybmFsU3RvcmUodXNlQ2FsbGJhY2soKGNhbGxiYWNrKT0+c3Vic2NyaWJlQ2FjaGUoa2V5LCAoY3VycmVudCwgcHJldik9PntcbiAgICAgICAgICAgIGlmICghaXNFcXVhbChwcmV2LCBjdXJyZW50KSkgY2FsbGJhY2soKTtcbiAgICAgICAgfSksIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKSwgZ2V0U25hcHNob3RbMF0sIGdldFNuYXBzaG90WzFdKTtcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9ICFpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGhhc1JldmFsaWRhdG9yID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV0gJiYgRVZFTlRfUkVWQUxJREFUT1JTW2tleV0ubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gY2FjaGVkLmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGlzVW5kZWZpbmVkKGNhY2hlZERhdGEpID8gZmFsbGJhY2sgOiBjYWNoZWREYXRhO1xuICAgIGNvbnN0IGVycm9yID0gY2FjaGVkLmVycm9yO1xuICAgIC8vIFVzZSBhIHJlZiB0byBzdG9yZSBwcmV2aW91c2x5IHJldHVybmVkIGRhdGEuIFVzZSB0aGUgaW5pdGlhbCBkYXRhIGFzIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgIGNvbnN0IGxhZ2d5RGF0YVJlZiA9IHVzZVJlZihkYXRhKTtcbiAgICBjb25zdCByZXR1cm5lZERhdGEgPSBrZWVwUHJldmlvdXNEYXRhID8gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBsYWdneURhdGFSZWYuY3VycmVudCA6IGNhY2hlZERhdGEgOiBkYXRhO1xuICAgIC8vIC0gU3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUncyBzdGFsZSBkYXRhIGZvciB0aGUgaW5pdGlhbCByZW5kZXIuXG4gICAgLy8gLSBOb3Qgc3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUgaXMgbm8gZmFsbGJhY2sgZGF0YSBhbmQgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkLlxuICAgIC8vIC0gYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkIGJ1dCBgZGF0YWAgaXMgbm90IGRlZmluZWQuXG4gICAgY29uc3Qgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uID0gKCgpPT57XG4gICAgICAgIC8vIGlmIGEga2V5IGFscmVhZHkgaGFzIHJldmFsaWRhdG9ycyBhbmQgYWxzbyBoYXMgZXJyb3IsIHdlIHNob3VsZCBub3QgdHJpZ2dlciByZXZhbGlkYXRpb25cbiAgICAgICAgaWYgKGhhc1JldmFsaWRhdG9yICYmICFpc1VuZGVmaW5lZChlcnJvcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnQgJiYgIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSkgcmV0dXJuIHJldmFsaWRhdGVPbk1vdW50O1xuICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIFVuZGVyIHN1c3BlbnNlIG1vZGUsIGl0IHdpbGwgYWx3YXlzIGZldGNoIG9uIHJlbmRlciBpZiB0aGVyZSBpcyBub1xuICAgICAgICAvLyBzdGFsZSBkYXRhIHNvIG5vIG5lZWQgdG8gcmV2YWxpZGF0ZSBpbW1lZGlhdGVseSBtb3VudCBpdCBhZ2Fpbi5cbiAgICAgICAgLy8gSWYgZGF0YSBleGlzdHMsIG9ubHkgcmV2YWxpZGF0ZSBpZiBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIHRydWUuXG4gICAgICAgIGlmIChzdXNwZW5zZSkgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpID8gZmFsc2UgOiByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3RhbGUgZGF0YSwgd2UgbmVlZCB0byByZXZhbGlkYXRlIHdoZW4gbW91bnQ7XG4gICAgICAgIC8vIElmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgc2V0IHRvIHRydWUsIHdlIHdpbGwgYWx3YXlzIHJldmFsaWRhdGUuXG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChkYXRhKSB8fCByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9KSgpO1xuICAgIC8vIFJlc29sdmUgdGhlIGRlZmF1bHQgdmFsaWRhdGluZyBzdGF0ZTpcbiAgICAvLyBJZiBpdCdzIGFibGUgdG8gdmFsaWRhdGUsIGFuZCBpdCBzaG91bGQgcmV2YWxpZGF0ZSB3aGVuIG1vdW50LCB0aGlzIHdpbGwgYmUgdHJ1ZS5cbiAgICBjb25zdCBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlID0gISEoa2V5ICYmIGZldGNoZXIgJiYgaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKTtcbiAgICBjb25zdCBpc1ZhbGlkYXRpbmcgPSBpc1VuZGVmaW5lZChjYWNoZWQuaXNWYWxpZGF0aW5nKSA/IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgOiBjYWNoZWQuaXNWYWxpZGF0aW5nO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc0xvYWRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc0xvYWRpbmc7XG4gICAgLy8gVGhlIHJldmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBhIGNhcmVmdWxseSBjcmFmdGVkIHdyYXBwZXIgb2YgdGhlIG9yaWdpbmFsXG4gICAgLy8gYGZldGNoZXJgLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBtYW55IGVkZ2UgY2FzZXMuXG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChyZXZhbGlkYXRlT3B0cyk9PntcbiAgICAgICAgY29uc3QgY3VycmVudEZldGNoZXIgPSBmZXRjaGVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICgha2V5IHx8ICFjdXJyZW50RmV0Y2hlciB8fCB1bm1vdW50ZWRSZWYuY3VycmVudCB8fCBnZXRDb25maWcoKS5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0RhdGE7XG4gICAgICAgIGxldCBzdGFydEF0O1xuICAgICAgICBsZXQgbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IG9wdHMgPSByZXZhbGlkYXRlT3B0cyB8fCB7fTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gb25nb2luZyBjb25jdXJyZW50IHJlcXVlc3QsIG9yIGBkZWR1cGVgIGlzIG5vdCBzZXQsIGFcbiAgICAgICAgLy8gbmV3IHJlcXVlc3Qgc2hvdWxkIGJlIGluaXRpYXRlZC5cbiAgICAgICAgY29uc3Qgc2hvdWxkU3RhcnROZXdSZXF1ZXN0ID0gIUZFVENIW2tleV0gfHwgIW9wdHMuZGVkdXBlO1xuICAgICAgICAvKlxuICAgICAgICAgRm9yIFJlYWN0IDE3XG4gICAgICAgICBEbyB1bm1vdW50IGNoZWNrIGZvciBjYWxsczpcbiAgICAgICAgIElmIGtleSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIHJldmFsaWRhdGlvbiwgb3IgdGhlIGNvbXBvbmVudCBoYXMgYmVlblxuICAgICAgICAgdW5tb3VudGVkLCBvbGQgZGlzcGF0Y2ggYW5kIG9sZCBldmVudCBjYWxsYmFja3Mgc2hvdWxkIG5vdCB0YWtlIGFueVxuICAgICAgICAgZWZmZWN0XG5cbiAgICAgICAgRm9yIFJlYWN0IDE4XG4gICAgICAgIG9ubHkgY2hlY2sgaWYga2V5IGhhcyBjaGFuZ2VkXG4gICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdHdnL3JlYWN0LTE4L2Rpc2N1c3Npb25zLzgyXG4gICAgICAqLyBjb25zdCBjYWxsYmFja1NhZmVndWFyZCA9ICgpPT57XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF1bm1vdW50ZWRSZWYuY3VycmVudCAmJiBrZXkgPT09IGtleVJlZi5jdXJyZW50ICYmIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5ID09PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVGhlIGZpbmFsIHN0YXRlIG9iamVjdCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzLlxuICAgICAgICBjb25zdCBmaW5hbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlID0gKCk9PntcbiAgICAgICAgICAgIHNldENhY2hlKGZpbmFsU3RhdGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjbGVhbnVwU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBzdGlsbCB0aGUgc2FtZSByZXF1ZXN0IGJlZm9yZSBkZWxldGluZyBpdC5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJbmZvID0gRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SW5mbyAmJiByZXF1ZXN0SW5mb1sxXSA9PT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTdGFydCBmZXRjaGluZy4gQ2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZSwgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIC8vIEl0IGlzIGluIHRoZSBgaXNMb2FkaW5nYCBzdGF0ZSwgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgbm8gY2FjaGVkIGRhdGEuXG4gICAgICAgIC8vIFRoaXMgYnlwYXNzZXMgZmFsbGJhY2sgZGF0YSBhbmQgbGFnZ3kgZGF0YS5cbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGdldENhY2hlKCkuZGF0YSkpIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgc2V0Q2FjaGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAvLyBJZiBubyBjYWNoZSBpcyBiZWluZyByZW5kZXJlZCBjdXJyZW50bHkgKGl0IHNob3dzIGEgYmxhbmsgcGFnZSksXG4gICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgIGlmIChjb25maWcubG9hZGluZ1RpbWVvdXQgJiYgaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZyAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25Mb2FkaW5nU2xvdyhrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSByZXF1ZXN0IGFuZCBzYXZlIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgICAgLy8gS2V5IG11c3QgYmUgdHJ1dGh5IGlmIGVudGVyaW5nIGhlcmUuXG4gICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZldGNoZXIoZm5BcmcpLFxuICAgICAgICAgICAgICAgICAgICBnZXRUaW1lc3RhbXAoKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbbmV3RGF0YSwgc3RhcnRBdF0gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgbmV3RGF0YSA9IGF3YWl0IG5ld0RhdGE7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXNuJ3QgaW50ZXJydXB0ZWQsIGNsZWFuIGl0IHVwIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChjbGVhbnVwU3RhdGUsIGNvbmZpZy5kZWR1cGluZ0ludGVydmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgY3VycmVudCBvbmUgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zOlxuICAgICAgICAgICAgLy8gICByZXExLS0tLS0tLS0tLS0tLS0tLS0tPnJlczEgICAgICAgIChjdXJyZW50IG9uZSlcbiAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAvLyB0aGUgcmVxdWVzdCB0aGF0IGZpcmVkIGxhdGVyIHdpbGwgYWx3YXlzIGJlIGtlcHQuXG4gICAgICAgICAgICAvLyBUaGUgdGltZXN0YW1wIG1heWJlIGJlIGB1bmRlZmluZWRgIG9yIGEgbnVtYmVyXG4gICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xlYXIgZXJyb3IuXG4gICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gVU5ERUZJTkVEO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgbXV0YXRpb25zKHMpLCB0aGF0IG92ZXJsYXBwZWQgd2l0aCB0aGUgY3VycmVudCByZXZhbGlkYXRpb246XG4gICAgICAgICAgICAvLyBjYXNlIDE6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMjpcbiAgICAgICAgICAgIC8vICAgICAgICAgcmVxLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICBtdXRhdGUtLS0tLS0+ZW5kXG4gICAgICAgICAgICAvLyBjYXNlIDM6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLS0uLi4tLS0tLS0tLS0tPlxuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBpZ25vcmUgdGhlIHJldmFsaWRhdGlvbiByZXN1bHQgKHJlcykgYmVjYXVzZSBpdCdzIG5vIGxvbmdlciBmcmVzaC5cbiAgICAgICAgICAgIC8vIG1lYW53aGlsZSwgYSBuZXcgcmV2YWxpZGF0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbXV0YXRpb24gZW5kcy5cbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uSW5mbyA9IE1VVEFUSU9OW2tleV07XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKG11dGF0aW9uSW5mbykgJiYgLy8gY2FzZSAxXG4gICAgICAgICAgICAoc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMF0gfHwgLy8gY2FzZSAyXG4gICAgICAgICAgICBzdGFydEF0IDw9IG11dGF0aW9uSW5mb1sxXSB8fCAvLyBjYXNlIDNcbiAgICAgICAgICAgIG11dGF0aW9uSW5mb1sxXSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlZXAgY29tcGFyZSB3aXRoIHRoZSBsYXRlc3Qgc3RhdGUgdG8gYXZvaWQgZXh0cmEgcmUtcmVuZGVycy5cbiAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgY29uc3QgY2FjaGVEYXRhID0gZ2V0Q2FjaGUoKS5kYXRhO1xuICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbXBhcmUgZm4gY291bGQgYmUgY3VzdG9tIGZuXG4gICAgICAgICAgICAvLyBjYWNoZURhdGEgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gbmV3RGF0YSBldmVuIHdoZW4gY29tcGFyZSBmbiByZXR1cm5zIFRydWVcbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZGF0YSA9IGNvbXBhcmUoY2FjaGVEYXRhLCBuZXdEYXRhKSA/IGNhY2hlRGF0YSA6IG5ld0RhdGE7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25TdWNjZXNzKG5ld0RhdGEsIGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY2xlYW51cFN0YXRlKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICBjb25zdCB7IHNob3VsZFJldHJ5T25FcnJvciAgfSA9IGN1cnJlbnRDb25maWc7XG4gICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSwgZGlzY2FyZCBpdC5cbiAgICAgICAgICAgIGlmICghY3VycmVudENvbmZpZy5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3IGVycm9yLCBkb24ndCB1c2UgZGVlcCBjb21wYXJpc29uIGZvciBlcnJvcnMuXG4gICAgICAgICAgICAgICAgZmluYWxTdGF0ZS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAvLyBFcnJvciBldmVudCBhbmQgcmV0cnkgbG9naWMuIE9ubHkgZm9yIHRoZSBhY3R1YWwgcmVxdWVzdCwgbm90XG4gICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QgJiYgY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3IoZXJyLCBrZXksIGN1cnJlbnRDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmV0cnlPbkVycm9yID09PSB0cnVlIHx8IGlzRnVuY3Rpb24oc2hvdWxkUmV0cnlPbkVycm9yKSAmJiBzaG91bGRSZXRyeU9uRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGluYWN0aXZlLCBzdG9wLiBJdCB3aWxsIGF1dG8tcmV2YWxpZGF0ZSB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmb2N1c2luZyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBsaWNhdGlvbiBpcyBhbHdheXMgZW5hYmxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3JSZXRyeShlcnIsIGtleSwgY3VycmVudENvbmZpZywgKF9vcHRzKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZhbGlkYXRvcnMgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmFsaWRhdG9yc1swXShyZXZhbGlkYXRlRXZlbnRzLkVSUk9SX1JFVkFMSURBVEVfRVZFTlQsIF9vcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudDogKG9wdHMucmV0cnlDb3VudCB8fCAwKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVwZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE1hcmsgbG9hZGluZyBhcyBzdG9wcGVkLlxuICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBob29rJ3Mgc3RhdGUuXG4gICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCAvLyBgc2V0U3RhdGVgIGlzIGltbXV0YWJsZSwgYW5kIGBldmVudHNDYWxsYmFja2AsIGBmbkFyZ2AsIGFuZFxuICAgIC8vIGBrZXlWYWxpZGF0aW5nYCBhcmUgZGVwZW5kaW5nIG9uIGBrZXlgLCBzbyB3ZSBjYW4gZXhjbHVkZSB0aGVtIGZyb21cbiAgICAvLyB0aGUgZGVwcyBhcnJheS5cbiAgICAvL1xuICAgIC8vIEZJWE1FOlxuICAgIC8vIGBmbmAgYW5kIGBjb25maWdgIG1pZ2h0IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBsaWZlY3ljbGUsXG4gICAgLy8gYnV0IHRoZXkgbWlnaHQgYmUgY2hhbmdlZCBldmVyeSByZW5kZXIgbGlrZSB0aGlzLlxuICAgIC8vIGB1c2VTV1IoJ2tleScsICgpID0+IGZldGNoKCcvYXBpLycpLCB7IHN1c3BlbnNlOiB0cnVlIH0pYFxuICAgIC8vIFNvIHdlIG9taXQgdGhlIHZhbHVlcyBmcm9tIHRoZSBkZXBzIGFycmF5XG4gICAgLy8gZXZlbiB0aG91Z2ggaXQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtcbiAgICAgICAga2V5LFxuICAgICAgICBjYWNoZVxuICAgIF0pO1xuICAgIC8vIFNpbWlsYXIgdG8gdGhlIGdsb2JhbCBtdXRhdGUgYnV0IGJvdW5kIHRvIHRoZSBjdXJyZW50IGNhY2hlIGFuZCBrZXkuXG4gICAgLy8gYGNhY2hlYCBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgY29uc3QgYm91bmRNdXRhdGUgPSB1c2VDYWxsYmFjaygvLyBVc2UgY2FsbGJhY2sgdG8gbWFrZSBzdXJlIGBrZXlSZWYuY3VycmVudGAgcmV0dXJucyBsYXRlc3QgcmVzdWx0IGV2ZXJ5IHRpbWVcbiAgICAoLi4uYXJncyk9PntcbiAgICAgICAgcmV0dXJuIGludGVybmFsTXV0YXRlKGNhY2hlLCBrZXlSZWYuY3VycmVudCwgLi4uYXJncyk7XG4gICAgfSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICAvLyBUaGUgbG9naWMgZm9yIHVwZGF0aW5nIHJlZnMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgLy8gSGFuZGxlIGxhZ2d5IGRhdGEgdXBkYXRlcy4gSWYgdGhlcmUncyBjYWNoZWQgZGF0YSBvZiB0aGUgY3VycmVudCBrZXksXG4gICAgICAgIC8vIGl0J2xsIGJlIHRoZSBjb3JyZWN0IHJlZmVyZW5jZS5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChjYWNoZWREYXRhKSkge1xuICAgICAgICAgICAgbGFnZ3lEYXRhUmVmLmN1cnJlbnQgPSBjYWNoZWREYXRhO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQWZ0ZXIgbW91bnRlZCBvciBrZXkgY2hhbmdlZC5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNvZnRSZXZhbGlkYXRlID0gcmV2YWxpZGF0ZS5iaW5kKFVOREVGSU5FRCwgV0lUSF9ERURVUEUpO1xuICAgICAgICAvLyBFeHBvc2UgcmV2YWxpZGF0b3JzIHRvIGdsb2JhbCBldmVudCBsaXN0ZW5lcnMuIFNvIHdlIGNhbiB0cmlnZ2VyXG4gICAgICAgIC8vIHJldmFsaWRhdGlvbiBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICBsZXQgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IDA7XG4gICAgICAgIGNvbnN0IG9uUmV2YWxpZGF0ZSA9ICh0eXBlLCBvcHRzID0ge30pPT57XG4gICAgICAgICAgICBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uRm9jdXMgJiYgbm93ID4gbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSBub3cgKyBnZXRDb25maWcoKS5mb2N1c1Rocm90dGxlSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuTVVUQVRFX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkVSUk9SX1JFVkFMSURBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZShvcHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdW5zdWJFdmVudHMgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIEVWRU5UX1JFVkFMSURBVE9SUywgb25SZXZhbGlkYXRlKTtcbiAgICAgICAgLy8gTWFyayB0aGUgY29tcG9uZW50IGFzIG1vdW50ZWQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIHJlZnMuXG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGtleVJlZi5jdXJyZW50ID0ga2V5O1xuICAgICAgICBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwga2V5IGluIHRoZSBjYWNoZS5cbiAgICAgICAgc2V0Q2FjaGUoe1xuICAgICAgICAgICAgX2s6IGZuQXJnXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgcmV2YWxpZGF0ZSBpZiB3ZSBoYXZlIGRhdGEgdG8gcmV0dXJuIHNvIHdlIHdvbid0IGJsb2NrXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgIHJBRihzb2Z0UmV2YWxpZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViRXZlbnRzKCk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBsZXQgdGltZXI7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIHBhc3NlZCBpbnRlcnZhbFxuICAgICAgICAgICAgLy8gLi4ub3IgaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSB1cGRhdGVkIGRhdGEgdG8gZ2V0IHRoZSBpbnRlcnZhbFxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbCkgPyByZWZyZXNoSW50ZXJ2YWwoZGF0YSkgOiByZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHN0YXJ0IHRoZSBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUsIGFuZCBub3QgZXJyb3JlZC5cbiAgICAgICAgICAgIGlmICghZ2V0Q2FjaGUoKS5lcnJvciAmJiAocmVmcmVzaFdoZW5IaWRkZW4gfHwgZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkpICYmIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmICh0aW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgdGltZXIgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbCxcbiAgICAgICAgcmVmcmVzaFdoZW5IaWRkZW4sXG4gICAgICAgIHJlZnJlc2hXaGVuT2ZmbGluZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gRGlzcGxheSBkZWJ1ZyBpbmZvIGluIFJlYWN0IERldlRvb2xzLlxuICAgIHVzZURlYnVnVmFsdWUocmV0dXJuZWREYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIFNXUiBzaG91bGQgdGhyb3cgd2hlbiB0cnlpbmcgdG8gdXNlIFN1c3BlbnNlIG9uIHRoZSBzZXJ2ZXIgd2l0aCBSZWFjdCAxOCxcbiAgICAgICAgLy8gd2l0aG91dCBwcm92aWRpbmcgYW55IGluaXRpYWwgZGF0YS4gU2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTgzMlxuICAgICAgICBpZiAoIUlTX1JFQUNUX0xFR0FDWSAmJiBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFsbGJhY2sgZGF0YSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHN1c3BlbnNlIGluIFNTUi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGZldGNoZXIgYW5kIGNvbmZpZyByZWZzIGV2ZW4gd2l0aCB0aGUgU3VzcGVuc2UgbW9kZS5cbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHRocm93IGlzVW5kZWZpbmVkKGVycm9yKSA/IHJldmFsaWRhdGUoV0lUSF9ERURVUEUpIDogZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG11dGF0ZTogYm91bmRNdXRhdGUsXG4gICAgICAgIGdldCBkYXRhICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkRGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVycm9yICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzVmFsaWRhdGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzTG9hZGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgU1dSQ29uZmlnID0gT0JKRUNULmRlZmluZVByb3BlcnR5KFNXUkNvbmZpZyQxLCAnZGVmYXVsdFZhbHVlJywge1xuICAgIHZhbHVlOiBkZWZhdWx0Q29uZmlnXG59KTtcbmNvbnN0IHVuc3RhYmxlX3NlcmlhbGl6ZSA9IChrZXkpPT5zZXJpYWxpemUoa2V5KVswXTtcbi8qKlxuICogQSBob29rIHRvIGZldGNoIGRhdGEuXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9zd3IudmVyY2VsLmFwcFxuICogQGV4YW1wbGVcbiAqIGBgYGpzeFxuICogaW1wb3J0IHVzZVNXUiBmcm9tICdzd3InXG4gKiBmdW5jdGlvbiBQcm9maWxlKCkge1xuICogICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSB1c2VTV1IoJy9hcGkvdXNlcicsIGZldGNoZXIpXG4gKiAgIGlmIChlcnJvcikgcmV0dXJuIDxkaXY+ZmFpbGVkIHRvIGxvYWQ8L2Rpdj5cbiAqICAgaWYgKCFkYXRhKSByZXR1cm4gPGRpdj5sb2FkaW5nLi4uPC9kaXY+XG4gKiAgIHJldHVybiA8ZGl2PmhlbGxvIHtkYXRhLm5hbWV9ITwvZGl2PlxuICogfVxuICogYGBgXG4gKi8gdmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgdW5zdGFibGVfc2VyaWFsaXplIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTV1JDb25maWcgfSBmcm9tIFwic3dyXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTV1JIb29rc0NvbmZpZygpIHtcbiAgICB2YXIgc3dyQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgdmFyIHZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBtdXRhdGU6IHN3ckNvbmZpZy5tdXRhdGUsIGNhY2hlOiBzd3JDb25maWcuY2FjaGUgfSk7IH0sIFtzd3JDb25maWcubXV0YXRlLCBzd3JDb25maWcuY2FjaGVdKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VTV1JIb29rc0NvbmZpZy5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKGluaXRpYWxWYWx1ZSkge1xuICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgeyBpbml0aWFsVmFsdWUgPSBmYWxzZTsgfVxuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShpbml0aWFsVmFsdWUpLCAyKSwgdmFsdWUgPSBfYVswXSwgc2V0VmFsdWUgPSBfYVsxXTtcbiAgICB2YXIgdG9nZ2xlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShmdW5jdGlvbiAocHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlVG9nZ2xlLmpzLm1hcCIsInZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYyhvYmopIHtcbiAgdmFyIG91dCA9IFwiXCJcblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiKSByZXR1cm4gb2JqIHx8IFwiXCJcblxuICBpZiAoaXNBcnJheShvYmopKVxuICAgIGZvciAodmFyIGsgPSAwLCB0bXA7IGsgPCBvYmoubGVuZ3RoOyBrKyspIHtcbiAgICAgIGlmICgodG1wID0gY2Mob2JqW2tdKSkgIT09IFwiXCIpIHtcbiAgICAgICAgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsgdG1wXG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykgJiYgb2JqW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ1bUtBWm1Ma0FSTHpYM2dudUtrcFwiLFwibGVmdFwiOlwidTFsNUFKR2JVaVA2UlZGSUt4T0lcIixcInNtYWxsXCI6XCJoeFpwSzlDcEJLMXdSMFcwdjRTRFwiLFwibGFyZ2VcIjpcIm85RFltdDR4ZkxhSW1pVnpJOWRRXCIsXCJ4bGFyZ2VcIjpcInFtRVZ4U1pTNWtmTDNhVmJlZTFuXCIsXCJpbnZlcnRlZFwiOlwiQ05PWkhMZDlYYm9rek9XNkxZQlBcIixcInJvdW5kZWRcIjpcImpKQ0F6dzJTeWFINHRJV1hyQWxSXCIsXCJyaWdodE9mZnNldFwiOlwiS0dDdTdhUGpReV9hRk5qSFdOdXdcIixcImxlZnRPZmZzZXRcIjpcImRESFl5R3pYTmk3NzNGQWwxM0dYXCIsXCJub1NoYWRvd1wiOlwibFFGMVljVXFNME9IdlBTbFN3bF9cIixcIm5vQm9yZGVyXCI6XCJzRW8yNUVpdjZ6czFEX3g1cThWeVwiLFwidHJhbnNwYXJlbnRcIjpcInZtM2NtQU5OdVlsYVFNNVlxejlHXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJQaWtmemo3ellnMkludGRKeW11S1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIm9TZ1Y1Y3dYNmlua1NiQ0c5OHc4XCIsXCJub1BhZGRpbmdcIjpcImdTWnJHUjF4cW04UTFpUlVmR2dhXCIsXCJjb250ZW50XCI6XCJwWUxVajlub0FxVDhXeXRqRE9PYlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImJ1dHRvbkJhZGdlXCI6XCJpT3lfdGhVZnd4SXFaT3JXU0l6eFwiLFwiaW52ZXJ0ZWRcIjpcImc3OWpqY1dWbm14TG9QTnlBeDQ5XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJVbmo0cnAxRHk3MUFDcnV6WGw3NVwiLFwibGVmdFwiOlwiRVhXTVJ2dmVSdlFpZml4elRIMDJcIixcInNtYWxsXCI6XCJfVTB6blVrNVFUQXpQblMyZ2FMQ1wiLFwibWVkaXVtXCI6XCJhSDh1NHMyTXRZYzV5NHZ5dWJEd1wiLFwibGFyZ2VcIjpcImMzMDZ5Vjc4YWxfZUd3QlNrbUZtXCIsXCJ4bGFyZ2VcIjpcInh2QTFtZVVtRTI4QUVPcGpzV2M5XCIsXCJpbnZlcnRlZFwiOlwiV0I3N1lJRE9Td0pvWDY4TmpsVUdcIixcInJvdW5kZWRcIjpcImsybkpDc0VOTmdDejJIbHNqX2JHXCIsXCJyaWdodE9mZnNldFwiOlwiakFlNUVWRTM3T3JLWXZrWGRjMXNcIixcImxlZnRPZmZzZXRcIjpcIkRnYnRCNkc0TG9CRGQwNFBfTXpPXCIsXCJub1NoYWRvd1wiOlwiS3BRSTk1X2Y4bkh2azdHMko2aDhcIixcInRyYW5zcGFyZW50XCI6XCJMOFBueFVRb2d6Z0ZNTVQ3UUk0ZFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSnVsYXhTY2NvR21xdGdUTkptazlcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ6VFlyOVc3ZzJTcWJWalBGQW9rR1wiLFwibm9QYWRkaW5nXCI6XCJVSHpUbTUxa1Z5bGw1Ml9TN3NHQlwiLFwibm9Cb3JkZXJcIjpcImhSUDFYWWZ1SjQ5VHNZVV9jTzVBXCIsXCJkaXNhYmxlZFwiOlwibHdXSVRQaE05VE1vNTg1RHNhdzhcIixcImNvbnRlbnRcIjpcIk15VF9QdWZKZEV2c1pFM2hTVzhQXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY2hlY2tib3hcIjpcInN5OGxLVldQNTZBbE9SN3lzXzlBXCIsXCJzbWFsbFwiOlwiWGpmcGN1UHRndUZadktyeHh0N3lcIixcIm1lZGl1bVwiOlwidExQM2RaV2VwWEgzSEtnMTdzT0hcIixcImxhcmdlXCI6XCJXZ3A5cUhXRHJRaTlmbWN4UUlWS1wiLFwieGxhcmdlXCI6XCJsVUE2dHBMa1djR0Znbm9xQ0Z2dVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yUGlja2VyXCI6XCJLazJkcDE1SHdNWnpJTmJVRkFaNFwiLFwiaG9yaXpvbnRhbFwiOlwiSnN6T19VZzdwS0xZUTBEZWhOOF9cIixcInZlcnRpY2FsXCI6XCJFVlQ2MmxnaEM5OWU5YmRqWWx5NVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yU3dhdGNoXCI6XCJQdmJlQm00U010TXFsUU5UeVFqUVwiLFwic21hbGxcIjpcIlM3RTNFUHlfQVdRdWtFZXh1dlRmXCIsXCJsYXJnZVwiOlwiYTFGc0l0S1BRRU9CZVRxQkN1RGxcIixcInhsYXJnZVwiOlwic0ZoZ1FFTl9VT0wzWnhPQVIxSWVcIixcInNlbGVjdGVkXCI6XCJhVXgydVNCU3MxNFZxd1BxanZsUVwiLFwic3JPbmx5XCI6XCJKSVFtZVpkZDlURmw1SV9naWZQaVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiWlpWSGNYNDVYQ2JsbURhYjlld1pcIixcIm1vZGFsSGVhZGVyXCI6XCJ4VFgxWEpmQ1NVc3JoX3lMbFpvaVwiLFwibW9kYWxDb250ZW50XCI6XCJUZTZqSGRseWpzUVhtblRzOWJhblwiLFwibm9QYWRkaW5nXCI6XCJMel9nd1N3UDNRQ041ell6RnNFaVwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJHaDF1dnhNZkVnUFRkdDY2UWlzMlwiLFwibW9kYWxCdXR0b25zXCI6XCJJYXczNEZrTUpxanJHUTU4QkdmeFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImRyYXdlclwiOlwiVTNkQ3pxVHl5bnl6Qm4ybUZrbVdcIixcInZpc2libGVcIjpcInNUY0pkUVVhWlBPZXNlRF8yZmUwXCIsXCJkcmF3ZXJQYXBlclwiOlwiSTNaMGpBODVOcllISjF3RFpIV2JcIixcImRyYXdlclBhcGVyRW50ZXJcIjpcIk1XTGJhVVpJTTFKYkRMRTNIMF9RXCIsXCJkcmF3ZXJQYXBlckVudGVyQWN0aXZlXCI6XCJyZUJIZmtEWlhpS3dpUnZZVGZIdVwiLFwiZHJhd2VyUGFwZXJFbnRlckRvbmVcIjpcIko1ZG13N3dvS3Z3Z3VqZ2JCMHFWXCIsXCJkcmF3ZXJQYXBlckV4aXRcIjpcInJtN2pIMlNxN3dmMmQ5SWxTZXZrXCIsXCJkcmF3ZXJQYXBlckV4aXRBY3RpdmVcIjpcIm5iZW9WcjlWcElYQUgxR1dmcGhDXCIsXCJkcmF3ZXJQYXBlckV4aXREb25lXCI6XCJzZ05iNm5PaEYzNWxXUUU5alFLRVwiLFwiZHJhd2VyUGFwZXJDb250ZW50XCI6XCJDc3FDNnd2bExZRHNLQnNaMEdkVFwiLFwiZHJhd2VyT3ZlcmxheVwiOlwiZTM0Z0JqeDNrM2JSWVBabGY5d1pcIixcIm5vT3ZlcmxheVwiOlwiYjN1Y05wRXROcTJPclFLd3ZxcXdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJkcmF3ZXJDb250ZW50XCI6XCJnRjFfV25PcnJQS1dFUW9YSm1nZlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImRyYXdlckZvb3RlclwiOlwibms2OUh1bGhQa2VGc0VNdVpPckJcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJkcmF3ZXJIZWFkZXJcIjpcInZkd2tQSUd4ekVMZFlobWlaUHEyXCIsXCJkcmF3ZXJIZWFkZXJDbG9zZVwiOlwidXo0Tk1fWHZOWmFxeFZaWXZTWUFcIixcImRyYXdlckhlYWRlckNsb3NlSWNvblwiOlwiWmROang2RHBlV0VJMnBBVkwxOHRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInJCYWZYa29UQ24yQWg2eFlZbXhmXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaW5wdXRcIjpcIktXazdvWjh0dlBmUWljZ1FZbFZhXCIsXCJsYWJlbFwiOlwiZTZ6cng3VU9QX0JTb01NM0dyalFcIixcInNtYWxsXCI6XCJpaFNuRFFnMHlneGNWTEl5U0prTVwiLFwibGFyZ2VcIjpcIkZwd2hiRDdIWHhfdUZUM2wwMXdiXCIsXCJ4bGFyZ2VcIjpcIllWZHM0dV9EZldTRzFyMFNBR25TXCIsXCJpbnZlcnRlZFwiOlwiQ0t5bm9MaGlMZDZLekFZaTVOdEdcIixcInJvdW5kZWRcIjpcInY3Mm16SnVtRlNpRE9PRTFNblhIXCIsXCJub1NoYWRvd1wiOlwiRW9ld0pFRGJHZHRlSl9OUmZTNUZcIixcIm5vQm9yZGVyXCI6XCJjYjdsNHh2Y05uSE5sUVptTGprYlwiLFwibm9QYWRkaW5nXCI6XCJ2Y093RFl1R0YyZXRvUGZ5RkRYNVwiLFwidHJhbnNwYXJlbnRcIjpcImwwOGtoYVhJVU9jcnVCRkh3czdYXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJJMHh2SmJCMExOVDBTMTVqVE1XV1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIlg2ZnFVY1ZIMUJsQ1JKQmlpSmlpXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJqMW1maVlFR29sVFJtYkJtR0tsUVwiLFwicm93XCI6XCJFR2FLdm1xTTJTYXdpRnJXOEN0dVwiLFwiY29sdW1uXCI6XCJOTWkwTVQxYjdycDFaanllOFVWQVwiLFwiZml4ZWRcIjpcImcwajNra1FyX0FqQ0tGZDk0UzFzXCIsXCJwbGFpblwiOlwiRnIxcTdXbkYxbkZubmJmZ3BhUnpcIixcInRyYW5zcGFyZW50XCI6XCJ1ZFJaZTlIMGJLVUhYak93RzFGblwiLFwidG9wXCI6XCJ1WWlLdzZWdkRFa2hqWkh6dm83ZVwiLFwidG9wRWRnZVwiOlwidFJiRWNZakUzS25jc053VGJ2Vk1cIixcInRvcE9uRWRnZVwiOlwiTEd1bkczN1gxX0hSZXV3M3F6dWFcIixcInJpZ2h0XCI6XCJsdzI3ckdWbG8zNGF4Q3h3M1FIaVwiLFwicmlnaHRFZGdlXCI6XCJQWkl0dmxlRklJajBKeDJNaWtSRVwiLFwicmlnaHRPbkVkZ2VcIjpcIktOdUdhRFBxOXJtWGZnbU8zcGNiXCIsXCJib3R0b21cIjpcImRuMXVoMXRhc0d4REdxbVUxOEhOXCIsXCJib3R0b21FZGdlXCI6XCJlRDBVQ3JCUnBzUlRQUHd3SW9WZ1wiLFwiYm90dG9tT25FZGdlXCI6XCJJcmhINWdmeUdzUTZrZGNQOTRSUVwiLFwibGVmdFwiOlwiRDVmR0huQUdDTVI0THRiOXk0SHJcIixcImxlZnRFZGdlXCI6XCJfQXRBZDJ0cjd0MWtYdXNSYlhTelwiLFwibGVmdE9uRWRnZVwiOlwiXzhDOWRkMFhfSlhZNHVIenc1TmpcIixcImhvcml6b250YWxDZW50ZXJcIjpcIlFEa3M4b3Z0OVJWY0ZXZUVCOHdiXCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiQ1Z1UVJFNjUyR0gyVkpuOHpPVHNcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpY29uXCI6XCJmcF9CTEoyRlc0T3l5YjBiSGlENFwiLFwic21hbGxcIjpcInpzVkROZk5Sa29zMFE1dXY5RlI5XCIsXCJtZWRpdW1cIjpcImVTbGlsM2V2UHRQQnN3V0Y4MEM1XCIsXCJsYXJnZVwiOlwiVDdVTHlxMXlFOUFWWEVNa25WNEdcIixcInhsYXJnZVwiOlwiUVBBY2VWUWRaNlFJUTJRdmlqd2dcIixcImludmVydGVkXCI6XCJtRlRHYmhMYTRObFVPMTZudkpya1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiV2NlbXlyMkdyOFpDR2M2QmpicXdcIixcInNtYWxsXCI6XCJUX3BhOENjcEwxR3Z1RHNkdnNxcVwiLFwibWVkaXVtXCI6XCJuTExFcmpPZ2ZhNWIyc09lWnJRNVwiLFwibGFyZ2VcIjpcIlE3MU5GQkhyU3hRTFFFNEFHRDJoXCIsXCJ4bGFyZ2VcIjpcIkViQml5RjFyZzZ3UmF4U01LOHNvXCIsXCJyb3VuZGVkXCI6XCJ0TGp1d1JTc0lpTEpHVnNyYXJiZFwiLFwidG9wT2Zmc2V0XCI6XCJkNEtMcEk3OUN1U1U2Z2tQUEluQVwiLFwicmlnaHRPZmZzZXRcIjpcIkc3aEpab1l2OHFJck5tRkN5Z01FXCIsXCJib3R0b21PZmZzZXRcIjpcIkRaczNBdkdrVmRPdkpmTGVKOEdoXCIsXCJsZWZ0T2Zmc2V0XCI6XCJ3RUVuV1JjdnV2b21oX09MTzVpcVwiLFwiaW52ZXJ0ZWRcIjpcIks5V0dDRnBVYWRPOVdJWHdGYWpfXCIsXCJub1NoYWRvd1wiOlwiZUFRSjEwa0VrUG1EeE1HdmxZenlcIixcIm5vQm9yZGVyXCI6XCJPbEVOUjludHVXWUxHT0tLS3JHUlwiLFwidHJhbnNwYXJlbnRcIjpcIktPY3NQcml2cjk0cnhuZkhWbGZlXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnVVNUeTNfTnAxbUdKSFcxTjNneFwiLFwic21hbGxcIjpcIklZdVZ6aDFIQnpnb1RDaTJXUV9wXCIsXCJtZWRpdW1cIjpcIkpOZzNfYkNFZkl2aTRnZUVjc1MzXCIsXCJsYXJnZVwiOlwibjYxc2F4QTIwX0V3TWd0OUd3NHNcIixcInhsYXJnZVwiOlwiZ3FHbnZuSDlYNm1Hdnp3bDRhR3pcIixcInJvdW5kZWRcIjpcIkRrenVxaEVhaU1SM1hNczFNMUlmXCIsXCJ0b3BPZmZzZXRcIjpcInNHbnZldnZzeEJaVWFYcnBaUXBJXCIsXCJyaWdodE9mZnNldFwiOlwiaGdZM1pwa3lENzBwN0U4cm4zYmlcIixcImJvdHRvbU9mZnNldFwiOlwiUk9vUVk2T2FSblF6RE9mWF9RREZcIixcImxlZnRPZmZzZXRcIjpcIktldm01ODJlM2dYUEpFM09Eb3BhXCIsXCJpbnZlcnRlZFwiOlwiT096bkNiQWJqT0xjNF9iQ0VxZnlcIixcIm5vU2hhZG93XCI6XCJ4ckh4ZmNlMDM0ZGdZTkVrbmxWTVwiLFwibm9Cb3JkZXJcIjpcImVIdF9SSXE4SkdvWUhjNGlDb2VnXCIsXCJ0cmFuc3BhcmVudFwiOlwibmZncXRTZ2ZydHJHRkRXZlpvblFcIixcImRpc2FibGVkXCI6XCJJX25oSjl1NnBURF8yU0YzcWxfbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwick81VzZEUWs0TnRvV3J3bUtNV2dcIixcImhhc092ZXJsYXlcIjpcImxsdm5tSThLMTNnOVBUQmlDTnozXCIsXCJvdmVybGF5XCI6XCJHVmsyajh3VjF0M2dZNXVYUTRxSVwiLFwiaW1hZ2VcIjpcImdYallxS2U5dzNOZ1l1cll3VVFwXCIsXCJjb3ZlclwiOlwiX2w3T05PV2F5cjh0eXVHaXlVc2NcIixcImNvbnRhaW5cIjpcIlNZak9iOGxBaG1EYmR5bEZJUVk5XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJIa3JvelNmbGxURmxra2JxeFhXaFwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInh5SFhoaEhFWVhNWWVhdldad19OXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJSRFp5bENNbEdmZUNVd1NieWVJcVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiaThHdV9XMXc4V0JBWWZsTElZendcIixcImhlYWRlclwiOlwiR3A3Ujh3WXdhTHRGb0tGY1J0Z05cIixcImhlYWRlckxhYmVsXCI6XCJWR2tvdE1UbnFQUmFLY0dWOFJqZ1wiLFwibGlzdFwiOlwidmc5UUx0Q1lUQXM1eDNmRjc5enBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJsaXN0Vmlld0l0ZW1cIjpcIlpGVWQ3b1NwUEx0MEVkMlhxYVdaXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudVwiOlwieFE5QmZrMFgxSG1aZ2loQ3V0WlZcIixcIm9wZW5cIjpcInV0djlGWU9VN1EwSk5uWlcxZWp2XCIsXCJlbnRyYW5jZVwiOlwieVlLamNDdkQyTDk0RnBQZ09pZ1FcIixcImhlYWRlclwiOlwid05MODZzOXpHRmk4WEsxMUtsb1JcIixcImZvb3RlclwiOlwibXU0SmV2MWM0S2NpZmVGOE16cWdcIixcIm5vQm9yZGVyXCI6XCJFYVBTakwxblhzejdUQ3gxMUxyZlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwia1loN0RLWXFINmpkTFhkN1BkSndcIixcIm1lbnVDb250YWluZXJcIjpcIlFsZUFPM3ltVGxpVTZaTkJReGZnXCIsXCJ0b3BcIjpcImF4ZmNyalNINGx2dWp6cnNrMlFwXCIsXCJyaWdodFwiOlwiTHRWbHRXM0JQWjVnTlhWeHhrclBcIixcImxlZnRcIjpcIlBSYjVmOFhjTVpPY1k1dWZQTWRxXCIsXCJib3R0b21cIjpcIl9fTVo1T29pSXJWaWRGWGJRZmp1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcImdHWmZfR3NXc3drcjBOVERfbmJRXCIsXCJub1BhZGRpbmdcIjpcIkNNMmJIU0N4d3VpdE1lczd1OVdmXCIsXCJhY3RpdmVcIjpcInM0dEpsSzRPRmMzcm5YTDBNeHFrXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUxpbmtJdGVtXCI6XCJYMUY0U1FraFFoMGZ4ejVZdTN0SFwiLFwibm9QYWRkaW5nXCI6XCJrcERMWFpTRDJLcDE5aDlzdVJMQVwiLFwiYWN0aXZlXCI6XCJJd0lUakduNnZUWnRlRUtqTm9ZY1wiLFwibWVudUl0ZW1cIjpcImxkb1I2cEdPcnRnSE1YU3BtSDdGXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiajBoOWhkX2dsdkk5eGRPbmFhdVlcIixcIm5vT3ZlcmxheVwiOlwiU0w0OFN6WnVmS2dkTWlHWTNZVE5cIixcIm1vZGFsXCI6XCJoVFhjWmV2R3l5STBBY3ZwclhWSlwiLFwidHJhbnNwYXJlbnRcIjpcImlicWxvRzFIeEh4M3N0ZGtWWlNqXCIsXCJub1NoYWRvd1wiOlwiSUVvNXZFZWZ0dkxwbXdpMFZ5akRcIixcIm1vZGFsQnV0dG9uXCI6XCJGb1BmQzNqN2NJZzJCWWZ6cVFHRVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm51bXBhZFwiOlwiR2V2YmJHM0QwUjM0eEdVRnM1WTFcIixcIm51bWJlcnNcIjpcImZMNUkxV0tYQ2FVOXZyQkd5SkI0XCIsXCJidXR0b25cIjpcIm55UjNjR0VtdzNRa1lNdGllbTNTXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiRGg2anNRMTVlTXlkc1NNVEN3UndcIixcInRyYW5zcGFyZW50XCI6XCJXVDZPUGxqQzJxZmJBV3NrMHo0clwiLFwiZml4ZWRcIjpcInB1NnM5TWo1VDFZSWdtdjRMT25DXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaGVhZGVyXCI6XCJXU1lZQkF6NTNkaHF1SU9aUFdCUFwiLFwibGFiZWxcIjpcImI1NWh5WjBvSGwwczRPdDlPaHdNXCIsXCJleHBhbmRlZFwiOlwiTjNBek81a1psaDRIQVBrbm5ZenFcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlNtQ2k0eE94RXNMdGk2MUdvWWs0XCIsXCJzZWxlY3RlZFwiOlwiXzRySnRDT1pwbmYzeG44cG1GdkNRXCIsXCJjaGVja2JveENvbnRhaW5lclwiOlwiTVNYWkY3eGNDNWFvcUhscXBJMGdcIixcImNoZWNrYm94XCI6XCJOSmpxOV9nQWVkRFJyT0VfWFdFMVwiLFwibGFiZWxcIjpcInZ3bURMYzk2RDl0WGdXcXM0SUt6XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJlM3lYSkJyWVRXNHNWWktZMk5GbVwiLFwic2VsZWN0QWxsQ29udGFpbmVyXCI6XCJjekhMYTRMM3RSQ0pEQ2lEQjZBelwiLFwiY2hlY2tib3hcIjpcImlLcWpXVWQ5NnpTcDl4bW9jWHprXCIsXCJjaGVja2JveENvbnRhaW5lclwiOlwiYXhpaDlFbnV6SzFmd2hxWURWUkFcIixcImxhYmVsXCI6XCJxNVdzOWhyOFpNWDdmU3ZES19xblwiLFwibm9PcHRpb25zXCI6XCJvdkt2QjVIOEVvRnpudU1xVXVqbFwiLFwic2VhcmNoS2V5d29yZFwiOlwiVHdjVmFSRHo4Y29rSUs5RDlEeEpcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIml4M2FaV01lTjVBbDRVSzh5ZWJKXCIsXCJpY29uU2VhcmNoQ29udGFpbmVyXCI6XCJaNUxQeDQ3eWJFS2VYMjlYQllCQ1wiLFwicmVzZXRCdXR0b25cIjpcImhqVDlaWHZtdmM1UVVydXd6OEVsXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJFVEdiWFRkWUFwMEc0MFRKUExuS1wiLFwiZGlzYWJsZWRcIjpcIm5FQ2dHZFhPc3BVclFXSGp6d2tnXCIsXCJoZWFkZXJcIjpcIlhBb0poeFRBcGNSOWxHZWd5cDlBXCIsXCJhY3RpdmVcIjpcImViZW16dFpFV0lWNF82QXNLUFFIXCIsXCJjb250ZW50XCI6XCJyUkRXdjJxcXdTckJ5M2V2WjdEd1wiLFwibm9PcHRpb25zXCI6XCJmTFA0eDRJeG55aVdocDVCUDVzVFwiLFwic2VhcmNoQ29udGFpbmVyXCI6XCJ5T0VDREplRFZUNXo1WWFYcGVKblwiLFwiaWNvbkJ1dHRvblwiOlwiYVZLcDNIM0pXcmFCZjdHNVVkYVBcIixcImV4cGFuZGVkXCI6XCJCcnhydEQzYU1YN0lVNTJyQTIyMFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInBsYWNlaG9sZGVyXCI6XCJkZGxSaWRuSXpZaFFDOURHcGdJdFwiLFwiYWN0aXZlXCI6XCJzaEhzRUpHdGJ6NGNtQTZ4MUcxbFwiLFwidGFnV3JhcHBlclwiOlwiQkdFU2hjN3F1MmZrOURaRTJSVXNcIixcInNlbGVjdGVkT3B0aW9uXCI6XCJtYTlCSWp1R0NRZUtGNDRzZ3VjVFwiLFwic2VsZWN0ZWRPcHRpb25zXCI6XCJuUnBBd3Y5N0Nlc3FRYkRMY2V0OVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZzVPUjBhT05PVzFPczF4dGtOSGlcIixcInRhYmxlXCI6XCJzTVIxVmI2MlhFdk9PV1JyV2M0UVwiLFwicGxhY2Vob2xkZXJDb250YWluZXJcIjpcIl83eDJ6N3Bfa2JRT0xEbUVYNTRpQVwiLFwic2Nyb2xsYmFyQ29udGFpbmVyXCI6XCJFQUgxNFhQZUpCdURXR3A1TlZZb1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiajRQaWdKT0w1RGd6RDhPWXhza3pcIixcImlzSGVhZGVyU3RpY2t5XCI6XCJBWVJfNEhlb2xBakpDT3NsM0haSlwiLFwiYm9yZGVyQm90dG9tXCI6XCJpWnJEM3RIMTJ6RElGT1d2SlVEN1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRhYmxlSGVhZGVyQ2VsbFwiOlwiSmNBMVZ6VjRNd1ZRM05FaDB2ekVcIixcInNvcnRJY29uVmlzaWJsZVwiOlwiSXE3T3hzUXpMMDZ4ajk4TzBMcUpcIixcInNvcnRhYmxlXCI6XCJWU1RTaFk3TFRoX0lJam5yUF9fbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZE92aWdTZ2h4eVE0Q2JiQ01rQ1JcIixcImFjdGl2ZVwiOlwidHFuWWRZMEh0RGxtVzYxdGpHYlFcIixcImhhc0Fycm93XCI6XCJxcU82YTFqTkw2SFRKRzdIUjExdFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiQXZSN1dDRFJ4Q3d2UlVBX2o4MFBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInpLRjM0YUt2WVpuYkx1WnpqRWVPXCIsXCJjb250ZW50XCI6XCJvXzIxcl9FakxLQjN4aGdHeTc0c1wiLFwiY2xvc2VCdXR0b25cIjpcIlpaUFJaTFVxOU1ReWlmRDh4MmpIXCIsXCJkaXNhYmxlZFwiOlwidUNMejB2Yk5uUVpGWDhrVnVVaUdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImd3WUtSUHBHZElNVlhraU4wSDlCXCIsXCJzY3JvbGxhYmxlXCI6XCJvdmRqd2hyMjFhd3YyQWdpUUVkMlwiLFwidGFnSW5wdXRcIjpcImF2SW1HczNYY0xlRExHaHhEOGJ3XCIsXCJkaXNhYmxlZFwiOlwieVQ4UHA4VFV2UDdzUVNHZUdMTkpcIixcInRleHRJbnB1dFwiOlwiWmlOTmYyb0xWakV4eHA5UlQyc19cIixcInNtYWxsXCI6XCJMZW1NVVRzZWlneEhibUlZVlZUY1wiLFwibWVkaXVtXCI6XCJQVUhKZE03WkViM0xGUmVNMV9VZ1wiLFwibGFyZ2VcIjpcImo5bWs1MmhHaG9Gd2p3NEZXSFE5XCIsXCJ4bGFyZ2VcIjpcIkVpV3FlRnFRWEU5TEhVaDF2eHBYXCIsXCJub0JvcmRlclwiOlwiTzZXc09wVVpvWmVUaFViX1ZpWG5cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcIk5QWnJrc0NwblhWSlNxX3NuSGpSXCIsXCJzbWFsbFwiOlwialFHcmlRSlNhMDR6c29HMWEydTlcIixcIm1lZGl1bVwiOlwibFZvWTlEcDE3SE9CaW5NajBRN29cIixcImxhcmdlXCI6XCJRbFVhUGJYOEVhSWk3clo0RmI4b1wiLFwieGxhcmdlXCI6XCJyWVBPTTlmTnRWTGRQRnlXS2tHRVwiLFwibm9Cb3JkZXJcIjpcIktEVElOc0hkb2xZUmVTYkxjb29IXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcInpGaXVBVGdzU0I0MlZkRW1jSlpZXCIsXCJlbnRyYW5jZVwiOlwiUjhycE9VT3RuZ1lPRXQ3STBwR01cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdENvbnRhaW5lclwiOlwiWGxMUU9lNDc0T3RCaWFjX2dVN0hcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b29sdGlwXCI6XCJLbTZVVXkwanBxTTBMQTJlWGNjY1wiLFwiYWJzb2x1dGVcIjpcImU1MHpFanRmUUswMGxmXzg4NE9ZXCIsXCJmaXhlZFwiOlwianF4VDRNY09lVUREbkdzZVprQkxcIixcImxlZnRcIjpcInlCdjFsd0RIcGV4eE8zRFBwZDF2XCIsXCJyaWdodFwiOlwidjg1MkV4eG1RNkF0U1FGMnNYOEFcIixcInRvcFwiOlwiaVYyeXpQaXpvb3U5b21XODExaGdcIixcImJvdHRvbVwiOlwiVm1tRThFTnNDa3pid0xwTDNYSmdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInlZOUhWNDBJVFRXZ0FWOHFMdzF3XCIsXCJoYXNPdmVybGF5XCI6XCJ6dWI1YnFkVlhtNE5GeHBJNEhCZlwiLFwidmlkZW9cIjpcIk1WQ0RWamZnbUhFN1FlbWNZeEdsXCIsXCJjb3ZlclwiOlwiVjRuRWNtMTc5dlplMk1MZ1JWYU1cIixcImNvbnRhaW5cIjpcInUyX01mZUNqTVNsX2FCTkpuNW5MXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJsamZzWXM4QlFxbGVLemJMa2thZFwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIkhKdFJxYkFGTE9uWFZ5R3o4aUZVXCIsXCJvdmVybGF5XCI6XCJBTEhoT0hBZUxsQkR5MURwWXFpdlwifTsiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5IaW50ID0gdm9pZCAwO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5leHBvcnRzLkhpbnQgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciBjaGlsZCA9IHJlYWN0XzEuZGVmYXVsdC5DaGlsZHJlbi5vbmx5KHByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoKChfYiA9IChfYSA9IGNoaWxkLnR5cGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b1N0cmluZygpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudG9Mb3dlckNhc2UoKSkgIT09ICdpbnB1dCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInJlYWN0LWF1dG9jb21wbGV0ZS1oaW50OiAnSGludCcgb25seSBhY2NlcHRzIGFuICdpbnB1dCcgZWxlbWVudCBhcyBjaGlsZC5cIik7XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0gcHJvcHMub3B0aW9ucywgZGlzYWJsZUhpbnQgPSBwcm9wcy5kaXNhYmxlSGludCwgYWxsb3dUYWJGaWxsID0gcHJvcHMuYWxsb3dUYWJGaWxsLCBhbGxvd0VudGVyRmlsbCA9IHByb3BzLmFsbG93RW50ZXJGaWxsLCBvbkZpbGwgPSBwcm9wcy5vbkZpbGwsIG9uSGludCA9IHByb3BzLm9uSGludCwgdmFsdWVNb2RpZmllciA9IHByb3BzLnZhbHVlTW9kaWZpZXI7XG4gICAgdmFyIGNoaWxkUHJvcHMgPSBjaGlsZC5wcm9wcztcbiAgICB2YXIgbWFpbklucHV0UmVmID0gcmVhY3RfMS51c2VSZWYobnVsbCk7XG4gICAgdmFyIGhpbnRXcmFwcGVyUmVmID0gcmVhY3RfMS51c2VSZWYobnVsbCk7XG4gICAgdmFyIGhpbnRSZWYgPSByZWFjdF8xLnVzZVJlZihudWxsKTtcbiAgICB2YXIgX2MgPSByZWFjdF8xLnVzZVN0YXRlKCcnKSwgdW5Nb2RpZmllZElucHV0VGV4dCA9IF9jWzBdLCBzZXRVbm1vZGlmaWVkSW5wdXRUZXh0ID0gX2NbMV07XG4gICAgdmFyIF9kID0gcmVhY3RfMS51c2VTdGF0ZSgnJyksIHRleHQgPSBfZFswXSwgc2V0VGV4dCA9IF9kWzFdO1xuICAgIHZhciBfZSA9IHJlYWN0XzEudXNlU3RhdGUoJycpLCBoaW50ID0gX2VbMF0sIHNldEhpbnQgPSBfZVsxXTtcbiAgICB2YXIgX2YgPSByZWFjdF8xLnVzZVN0YXRlKCksIG1hdGNoID0gX2ZbMF0sIHNldE1hdGNoID0gX2ZbMV07XG4gICAgdmFyIF9nID0gcmVhY3RfMS51c2VTdGF0ZSgpLCBjaGFuZ2VFdmVudCA9IF9nWzBdLCBzZXRDaGFuZ2VFdmVudCA9IF9nWzFdO1xuICAgIHJlYWN0XzEudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdmFyIGR1cGxpY2F0ZSA9IHV0aWxzXzEuZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24ob3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQ6IFxcXCJcIiArIGR1cGxpY2F0ZSArIFwiXFxcIiBvY2N1cnMgbW9yZSB0aGFuIG9uY2UgYW5kIG1heSBjYXVzZSBlcnJvcnMuIE9wdGlvbnMgc2hvdWxkIG5vdCBjb250YWluIGR1cGxpY2F0ZSB2YWx1ZXMhXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW29wdGlvbnNdKTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChkaXNhYmxlSGludCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbnB1dFN0eWxlID0gbWFpbklucHV0UmVmLmN1cnJlbnQgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUobWFpbklucHV0UmVmLmN1cnJlbnQpO1xuICAgICAgICBpbnB1dFN0eWxlICYmIHN0eWxlSGludChoaW50V3JhcHBlclJlZiwgaGludFJlZiwgaW5wdXRTdHlsZSk7XG4gICAgfSk7XG4gICAgdmFyIGdldE1hdGNoID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0IHx8IHRleHQgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiAob3B0aW9uc1swXSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hfMSA9IG9wdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRvTG93ZXJDYXNlKCkgIT09IHRleHQudG9Mb3dlckNhc2UoKSAmJiB4LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0ZXh0LnRvTG93ZXJDYXNlKCkpOyB9KVxuICAgICAgICAgICAgICAgIC5zb3J0KClbMF07XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hfMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBtYXRjaF8yID0gb3B0aW9uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgubGFiZWwudG9Mb3dlckNhc2UoKSAhPT0gdGV4dC50b0xvd2VyQ2FzZSgpICYmIHgubGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHRleHQudG9Mb3dlckNhc2UoKSk7IH0pXG4gICAgICAgICAgICAgICAgLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIHV0aWxzXzEuc29ydEFzYyhhLmxhYmVsLCBiLmxhYmVsKTsgfSlbMF07XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hfMjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIHNldEhpbnRUZXh0QW5kSWQgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBzZXRUZXh0KHRleHQpO1xuICAgICAgICB2YXIgbWF0Y2ggPSBnZXRNYXRjaCh0ZXh0KTtcbiAgICAgICAgdmFyIGhpbnQ7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIGhpbnQgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBoaW50ID0gbWF0Y2guc2xpY2UodGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGludCA9IG1hdGNoLmxhYmVsLnNsaWNlKHRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRIaW50KGhpbnQpO1xuICAgICAgICBzZXRNYXRjaChtYXRjaCk7XG4gICAgICAgIG9uSGludCAmJiBvbkhpbnQobWF0Y2gpO1xuICAgIH07XG4gICAgdmFyIGhhbmRsZU9uRmlsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGhpbnQgPT09ICcnIHx8ICFjaGFuZ2VFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdVbk1vZGlmaWVkVGV4dCA9IHVuTW9kaWZpZWRJbnB1dFRleHQgKyBoaW50O1xuICAgICAgICBjaGFuZ2VFdmVudC50YXJnZXQudmFsdWUgPSBuZXdVbk1vZGlmaWVkVGV4dDtcbiAgICAgICAgY2hpbGRQcm9wcy5vbkNoYW5nZSAmJiBjaGlsZFByb3BzLm9uQ2hhbmdlKGNoYW5nZUV2ZW50KTtcbiAgICAgICAgc2V0SGludFRleHRBbmRJZCgnJyk7XG4gICAgICAgIG9uRmlsbCAmJiBvbkZpbGwobWF0Y2gpO1xuICAgICAgICBzZXRVbm1vZGlmaWVkSW5wdXRUZXh0KG5ld1VuTW9kaWZpZWRUZXh0KTtcbiAgICB9O1xuICAgIHZhciBzdHlsZUhpbnQgPSBmdW5jdGlvbiAoaGludFdyYXBwZXJSZWYsIGhpbnRSZWYsIGlucHV0U3R5bGUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKChfYSA9IGhpbnRXcmFwcGVyUmVmID09PSBudWxsIHx8IGhpbnRXcmFwcGVyUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBoaW50V3JhcHBlclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3R5bGUpIHtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuZm9udEZhbWlseSA9IGlucHV0U3R5bGUuZm9udEZhbWlseTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuZm9udFNpemUgPSBpbnB1dFN0eWxlLmZvbnRTaXplO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS53aWR0aCA9IGlucHV0U3R5bGUud2lkdGg7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IGlucHV0U3R5bGUuaGVpZ2h0O1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5saW5lSGVpZ2h0ID0gaW5wdXRTdHlsZS5saW5lSGVpZ2h0O1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5ib3hTaXppbmcgPSBpbnB1dFN0eWxlLmJveFNpemluZztcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUubWFyZ2luID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdtYXJnaW4nKTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUucGFkZGluZyA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAncGFkZGluZycpO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5ib3JkZXJTdHlsZSA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAnYm9yZGVyJywgJ3N0eWxlJyk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmJvcmRlcldpZHRoID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdib3JkZXInLCAnd2lkdGgnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKF9iID0gaGludFJlZiA9PT0gbnVsbCB8fCBoaW50UmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBoaW50UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zdHlsZSkge1xuICAgICAgICAgICAgaGludFJlZi5jdXJyZW50LnN0eWxlLmZvbnRGYW1pbHkgPSBpbnB1dFN0eWxlLmZvbnRGYW1pbHk7XG4gICAgICAgICAgICBoaW50UmVmLmN1cnJlbnQuc3R5bGUuZm9udFNpemUgPSBpbnB1dFN0eWxlLmZvbnRTaXplO1xuICAgICAgICAgICAgaGludFJlZi5jdXJyZW50LnN0eWxlLmxpbmVIZWlnaHQgPSBpbnB1dFN0eWxlLmxpbmVIZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHNldENoYW5nZUV2ZW50KGUpO1xuICAgICAgICBlLnBlcnNpc3QoKTtcbiAgICAgICAgc2V0VW5tb2RpZmllZElucHV0VGV4dChlLnRhcmdldC52YWx1ZSk7XG4gICAgICAgIHZhciBtb2RpZmllZFZhbHVlID0gdmFsdWVNb2RpZmllciA/IHZhbHVlTW9kaWZpZXIoZS50YXJnZXQudmFsdWUpIDogZS50YXJnZXQudmFsdWU7XG4gICAgICAgIHNldEhpbnRUZXh0QW5kSWQobW9kaWZpZWRWYWx1ZSk7XG4gICAgICAgIGNoaWxkUHJvcHMub25DaGFuZ2UgJiYgY2hpbGRQcm9wcy5vbkNoYW5nZShlKTtcbiAgICB9O1xuICAgIHZhciBvbkZvY3VzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgc2V0SGludFRleHRBbmRJZChlLnRhcmdldC52YWx1ZSk7XG4gICAgICAgIGNoaWxkUHJvcHMub25Gb2N1cyAmJiBjaGlsZFByb3BzLm9uRm9jdXMoZSk7XG4gICAgfTtcbiAgICB2YXIgb25CbHVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgLy9Pbmx5IGJsdXIgaXQgaWYgdGhlIG5ldyBmb2N1cyBpc24ndCB0aGUgdGhlIGhpbnQgaW5wdXRcbiAgICAgICAgaWYgKChoaW50UmVmID09PSBudWxsIHx8IGhpbnRSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGhpbnRSZWYuY3VycmVudCkgIT09IGUucmVsYXRlZFRhcmdldCkge1xuICAgICAgICAgICAgc2V0SGludFRleHRBbmRJZCgnJyk7XG4gICAgICAgICAgICBjaGlsZFByb3BzLm9uQmx1ciAmJiBjaGlsZFByb3BzLm9uQmx1cihlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIEFSUk9XUklHSFQgPSAnQXJyb3dSaWdodCc7XG4gICAgdmFyIFRBQiA9ICdUYWInO1xuICAgIHZhciBFTlRFUiA9ICdFbnRlcic7XG4gICAgdmFyIG9uS2V5RG93biA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBjYXJldElzQXRUZXh0RW5kID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIEZvciBzZWxlY3RhYmxlIGlucHV0IHR5cGVzIChcInRleHRcIiwgXCJzZWFyY2hcIiksIG9ubHkgc2VsZWN0IHRoZSBoaW50IGlmXG4gICAgICAgICAgICAvLyBpdCdzIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IHZhbHVlLiBGb3Igbm9uLXNlbGVjdGFibGUgdHlwZXMgKFwiZW1haWxcIixcbiAgICAgICAgICAgIC8vIFwibnVtYmVyXCIpLCBhbHdheXMgc2VsZWN0IHRoZSBoaW50LlxuICAgICAgICAgICAgdmFyIGlzTm9uU2VsZWN0YWJsZVR5cGUgPSBlLmN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uRW5kID09PSBudWxsO1xuICAgICAgICAgICAgdmFyIGNhcmV0SXNBdFRleHRFbmQgPSBpc05vblNlbGVjdGFibGVUeXBlIHx8IGUuY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgPT09IGUuY3VycmVudFRhcmdldC52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gY2FyZXRJc0F0VGV4dEVuZDtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgaWYgKGNhcmV0SXNBdFRleHRFbmQgJiYgZS5rZXkgPT09IEFSUk9XUklHSFQpIHtcbiAgICAgICAgICAgIGhhbmRsZU9uRmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNhcmV0SXNBdFRleHRFbmQgJiYgYWxsb3dUYWJGaWxsICYmIGUua2V5ID09PSBUQUIgJiYgaGludCAhPT0gJycpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGhhbmRsZU9uRmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNhcmV0SXNBdFRleHRFbmQgJiYgYWxsb3dFbnRlckZpbGwgJiYgZS5rZXkgPT09IEVOVEVSICYmIGhpbnQgIT09ICcnKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZFByb3BzLm9uS2V5RG93biAmJiBjaGlsZFByb3BzLm9uS2V5RG93bihlKTtcbiAgICB9O1xuICAgIHZhciBvbkhpbnRDbGljayA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdmFyIGhpbnRDYXJldFBvc2l0aW9uID0gZS5jdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCB8fCAwO1xuICAgICAgICAvLyBJZiB1c2VyIGNsaWNrcyB0aGUgcG9zaXRpb24gYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGhpbnQsIFxuICAgICAgICAvLyBtb3ZlIGZvY3VzIHRvIHRoZSBlbmQgb2YgdGhlIG1haW5JbnB1dCB0ZXh0XG4gICAgICAgIGlmIChoaW50Q2FyZXRQb3NpdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgKF9hID0gbWFpbklucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWhpbnQgJiYgaGludCAhPT0gJycpIHtcbiAgICAgICAgICAgIGhhbmRsZU9uRmlsbCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICAoX2EgPSBtYWluSW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdmFyIGNhcmV0UG9zaXRpb24gPSB0ZXh0Lmxlbmd0aCArIGhpbnRDYXJldFBvc2l0aW9uO1xuICAgICAgICAgICAgICAgIChfYiA9IG1haW5JbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2V0U2VsZWN0aW9uUmFuZ2UoY2FyZXRQb3NpdGlvbiwgY2FyZXRQb3NpdGlvbik7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIGNoaWxkUmVmID0gcmVhY3RfMS5jbG9uZUVsZW1lbnQoY2hpbGQpLnJlZjtcbiAgICB2YXIgbWFpbklucHV0ID0gcmVhY3RfMS5jbG9uZUVsZW1lbnQoY2hpbGQsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjaGlsZFByb3BzKSwgeyBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgIG9uQmx1cjogb25CbHVyLFxuICAgICAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgICAgICBvbktleURvd246IG9uS2V5RG93biwgcmVmOiBjaGlsZFJlZiAmJiB0eXBlb2YgKGNoaWxkUmVmKSAhPT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gdXRpbHNfMS5tZXJnZVJlZnMoY2hpbGRSZWYsIG1haW5JbnB1dFJlZilcbiAgICAgICAgICAgIDogbWFpbklucHV0UmVmIH0pKTtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInJhaC1pbnB1dC13cmFwcGVyXCIsIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICAgICAgICB9IH0sIGRpc2FibGVIaW50XG4gICAgICAgID8gY2hpbGRcbiAgICAgICAgOiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocmVhY3RfMS5kZWZhdWx0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgbWFpbklucHV0LFxuICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInJhaC1oaW50LXdyYXBwZXJcIiwgcmVmOiBoaW50V3JhcHBlclJlZiwgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4zNSknLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgIH0gfSxcbiAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6ICdyYWgtdGV4dC1maWxsZXInLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiAncHJlJ1xuICAgICAgICAgICAgICAgICAgICB9IH0sIHRleHQpLFxuICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyBjbGFzc05hbWU6IFwicmFoLWhpbnRcIiwgcmVmOiBoaW50UmVmLCBvbkNsaWNrOiBvbkhpbnRDbGljaywgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICFoaW50IHx8IGhpbnQgPT09ICcnID8gJ25vbmUnIDogJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjMwKScsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgICAgICAgICAgICAgICAgIH0sIGRlZmF1bHRWYWx1ZTogaGludCwgdGFiSW5kZXg6IC0xIH0pKSkpKSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmdldEZpcnN0RHVwbGljYXRlT3B0aW9uID0gZXhwb3J0cy5zb3J0QXNjID0gZXhwb3J0cy5pbnRlcnBvbGF0ZVN0eWxlID0gZXhwb3J0cy5tZXJnZVJlZnMgPSB2b2lkIDA7XG5mdW5jdGlvbiBtZXJnZVJlZnMoKSB7XG4gICAgdmFyIHJlZnMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICByZWZzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBmaWx0ZXJlZFJlZnMgPSByZWZzLmZpbHRlcihCb29sZWFuKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGluc3QpIHtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBmaWx0ZXJlZFJlZnNfMSA9IGZpbHRlcmVkUmVmczsgX2kgPCBmaWx0ZXJlZFJlZnNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciByZWYgPSBmaWx0ZXJlZFJlZnNfMVtfaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJlZihpbnN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlZikge1xuICAgICAgICAgICAgICAgIHJlZi5jdXJyZW50ID0gaW5zdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG5leHBvcnRzLm1lcmdlUmVmcyA9IG1lcmdlUmVmcztcbjtcbi8vIElFIGRvZXNuJ3Qgc2VlbSB0byBnZXQgdGhlIGNvbXBvc2l0ZSBjb21wdXRlZCB2YWx1ZSAoZWc6ICdwYWRkaW5nJyxcbi8vICdib3JkZXJTdHlsZScsIGV0Yy4pLCBzbyBnZW5lcmF0ZSB0aGVzZSBmcm9tIHRoZSBpbmRpdmlkdWFsIHZhbHVlcy5cbmZ1bmN0aW9uIGludGVycG9sYXRlU3R5bGUoc3R5bGVzLCBhdHRyLCBzdWJhdHRyKSB7XG4gICAgaWYgKHN1YmF0dHIgPT09IHZvaWQgMCkgeyBzdWJhdHRyID0gJyc7IH1cbiAgICAvLyBUaXRsZS1jYXNlIHRoZSBzdWItYXR0cmlidXRlLlxuICAgIGlmIChzdWJhdHRyKSB7XG4gICAgICAgIHN1YmF0dHIgPSBzdWJhdHRyLnJlcGxhY2Uoc3ViYXR0clswXSwgc3ViYXR0clswXS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIFsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0J11cbiAgICAgICAgLy8gQHRzLWlnbm9yZTogKGF0dHIgKyBkaXIgKyBzdWJhdHRyKSBwcm9wZXJ0eSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWVcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoZGlyKSB7IHJldHVybiBzdHlsZXNbYXR0ciArIGRpciArIHN1YmF0dHJdOyB9KVxuICAgICAgICAuam9pbignICcpO1xufVxuZXhwb3J0cy5pbnRlcnBvbGF0ZVN0eWxlID0gaW50ZXJwb2xhdGVTdHlsZTtcbmZ1bmN0aW9uIHNvcnRBc2MoYSwgYikge1xuICAgIGlmIChhID4gYikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgaWYgKGEgPCBiKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5leHBvcnRzLnNvcnRBc2MgPSBzb3J0QXNjO1xuZnVuY3Rpb24gZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24oYXJyYXkpIHtcbiAgICB2YXIgdHJhY2tlciA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRyYWNrZXJbYXJyYXlbaV0ubGFiZWxdKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlbaV0ubGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgdHJhY2tlclthcnJheVtpXS5sYWJlbF0gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmV4cG9ydHMuZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24gPSBnZXRGaXJzdER1cGxpY2F0ZU9wdGlvbjtcbiIsIi8qKiEgXG4gKiBob3RrZXlzLWpzIHYzLjkuNCBcbiAqIEEgc2ltcGxlIG1pY3JvLWxpYnJhcnkgZm9yIGRlZmluaW5nIGFuZCBkaXNwYXRjaGluZyBrZXlib2FyZCBzaG9ydGN1dHMuIEl0IGhhcyBubyBkZXBlbmRlbmNpZXMuIFxuICogXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjIga2Vubnkgd29uZyA8d293b2hvb0BxcS5jb20+IFxuICogaHR0cDovL2pheXdjamxvdmUuZ2l0aHViLmlvL2hvdGtleXMgXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgXG4gKi9cblxudmFyIGlzZmYgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyA/IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgPiAwIDogZmFsc2U7IC8vIOe7keWumuS6i+S7tlxuXG5mdW5jdGlvbiBhZGRFdmVudChvYmplY3QsIGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpIHtcbiAgaWYgKG9iamVjdC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0LmF0dGFjaEV2ZW50KSB7XG4gICAgb2JqZWN0LmF0dGFjaEV2ZW50KFwib25cIi5jb25jYXQoZXZlbnQpLCBmdW5jdGlvbiAoKSB7XG4gICAgICBtZXRob2Qod2luZG93LmV2ZW50KTtcbiAgICB9KTtcbiAgfVxufSAvLyDkv67ppbDplK7ovazmjaLmiJDlr7nlupTnmoTplK7noIFcblxuXG5mdW5jdGlvbiBnZXRNb2RzKG1vZGlmaWVyLCBrZXkpIHtcbiAgdmFyIG1vZHMgPSBrZXkuc2xpY2UoMCwga2V5Lmxlbmd0aCAtIDEpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kcy5sZW5ndGg7IGkrKykge1xuICAgIG1vZHNbaV0gPSBtb2RpZmllclttb2RzW2ldLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgcmV0dXJuIG1vZHM7XG59IC8vIOWkhOeQhuS8oOeahGtleeWtl+espuS4sui9rOaNouaIkOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGdldEtleXMoa2V5KSB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykga2V5ID0gJyc7XG4gIGtleSA9IGtleS5yZXBsYWNlKC9cXHMvZywgJycpOyAvLyDljLnphY3ku7vkvZXnqbrnmb3lrZfnrKYs5YyF5ous56m65qC844CB5Yi26KGo56ym44CB5o2i6aG156ym562J562JXG5cbiAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJywnKTsgLy8g5ZCM5pe26K6+572u5aSa5Liq5b+r5o236ZSu77yM5LulJywn5YiG5YmyXG5cbiAgdmFyIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7IC8vIOW/q+aNt+mUruWPr+iDveWMheWQqycsJ++8jOmcgOeJueauiuWkhOeQhlxuXG4gIGZvciAoOyBpbmRleCA+PSAwOykge1xuICAgIGtleXNbaW5kZXggLSAxXSArPSAnLCc7XG4gICAga2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn0gLy8g5q+U6L6D5L+u6aWw6ZSu55qE5pWw57uEXG5cblxuZnVuY3Rpb24gY29tcGFyZUFycmF5KGExLCBhMikge1xuICB2YXIgYXJyMSA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMSA6IGEyO1xuICB2YXIgYXJyMiA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMiA6IGExO1xuICB2YXIgaXNJbmRleCA9IHRydWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycjIuaW5kZXhPZihhcnIxW2ldKSA9PT0gLTEpIGlzSW5kZXggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0luZGV4O1xufVxuXG52YXIgX2tleU1hcCA9IHtcbiAgYmFja3NwYWNlOiA4LFxuICB0YWI6IDksXG4gIGNsZWFyOiAxMixcbiAgZW50ZXI6IDEzLFxuICByZXR1cm46IDEzLFxuICBlc2M6IDI3LFxuICBlc2NhcGU6IDI3LFxuICBzcGFjZTogMzIsXG4gIGxlZnQ6IDM3LFxuICB1cDogMzgsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gIGRlbDogNDYsXG4gIGRlbGV0ZTogNDYsXG4gIGluczogNDUsXG4gIGluc2VydDogNDUsXG4gIGhvbWU6IDM2LFxuICBlbmQ6IDM1LFxuICBwYWdldXA6IDMzLFxuICBwYWdlZG93bjogMzQsXG4gIGNhcHNsb2NrOiAyMCxcbiAgbnVtXzA6IDk2LFxuICBudW1fMTogOTcsXG4gIG51bV8yOiA5OCxcbiAgbnVtXzM6IDk5LFxuICBudW1fNDogMTAwLFxuICBudW1fNTogMTAxLFxuICBudW1fNjogMTAyLFxuICBudW1fNzogMTAzLFxuICBudW1fODogMTA0LFxuICBudW1fOTogMTA1LFxuICBudW1fbXVsdGlwbHk6IDEwNixcbiAgbnVtX2FkZDogMTA3LFxuICBudW1fZW50ZXI6IDEwOCxcbiAgbnVtX3N1YnRyYWN0OiAxMDksXG4gIG51bV9kZWNpbWFsOiAxMTAsXG4gIG51bV9kaXZpZGU6IDExMSxcbiAgJ+KHqic6IDIwLFxuICAnLCc6IDE4OCxcbiAgJy4nOiAxOTAsXG4gICcvJzogMTkxLFxuICAnYCc6IDE5MixcbiAgJy0nOiBpc2ZmID8gMTczIDogMTg5LFxuICAnPSc6IGlzZmYgPyA2MSA6IDE4NyxcbiAgJzsnOiBpc2ZmID8gNTkgOiAxODYsXG4gICdcXCcnOiAyMjIsXG4gICdbJzogMjE5LFxuICAnXSc6IDIyMSxcbiAgJ1xcXFwnOiAyMjBcbn07IC8vIE1vZGlmaWVyIEtleXNcblxudmFyIF9tb2RpZmllciA9IHtcbiAgLy8gc2hpZnRLZXlcbiAgJ+KHpyc6IDE2LFxuICBzaGlmdDogMTYsXG4gIC8vIGFsdEtleVxuICAn4oylJzogMTgsXG4gIGFsdDogMTgsXG4gIG9wdGlvbjogMTgsXG4gIC8vIGN0cmxLZXlcbiAgJ+KMgyc6IDE3LFxuICBjdHJsOiAxNyxcbiAgY29udHJvbDogMTcsXG4gIC8vIG1ldGFLZXlcbiAgJ+KMmCc6IDkxLFxuICBjbWQ6IDkxLFxuICBjb21tYW5kOiA5MVxufTtcbnZhciBtb2RpZmllck1hcCA9IHtcbiAgMTY6ICdzaGlmdEtleScsXG4gIDE4OiAnYWx0S2V5JyxcbiAgMTc6ICdjdHJsS2V5JyxcbiAgOTE6ICdtZXRhS2V5JyxcbiAgc2hpZnRLZXk6IDE2LFxuICBjdHJsS2V5OiAxNyxcbiAgYWx0S2V5OiAxOCxcbiAgbWV0YUtleTogOTFcbn07XG52YXIgX21vZHMgPSB7XG4gIDE2OiBmYWxzZSxcbiAgMTg6IGZhbHNlLFxuICAxNzogZmFsc2UsXG4gIDkxOiBmYWxzZVxufTtcbnZhciBfaGFuZGxlcnMgPSB7fTsgLy8gRjF+RjEyIHNwZWNpYWwga2V5XG5cbmZvciAodmFyIGsgPSAxOyBrIDwgMjA7IGsrKykge1xuICBfa2V5TWFwW1wiZlwiLmNvbmNhdChrKV0gPSAxMTEgKyBrO1xufVxuXG52YXIgX2Rvd25LZXlzID0gW107IC8vIOiusOW9leaRgeS4i+eahOe7keWumumUrlxuXG52YXIgd2luTGlzdGVuZEZvY3VzID0gZmFsc2U7IC8vIHdpbmRvd+aYr+WQpuW3sue7j+ebkeWQrOS6hmZvY3Vz5LqL5Lu2XG5cbnZhciBfc2NvcGUgPSAnYWxsJzsgLy8g6buY6K6k54Ot6ZSu6IyD5Zu0XG5cbnZhciBlbGVtZW50SGFzQmluZEV2ZW50ID0gW107IC8vIOW3sue7keWumuS6i+S7tueahOiKgueCueiusOW9lVxuLy8g6L+U5Zue6ZSu56CBXG5cbnZhciBjb2RlID0gZnVuY3Rpb24gY29kZSh4KSB7XG4gIHJldHVybiBfa2V5TWFwW3gudG9Mb3dlckNhc2UoKV0gfHwgX21vZGlmaWVyW3gudG9Mb3dlckNhc2UoKV0gfHwgeC50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCk7XG59OyAvLyDorr7nva7ojrflj5blvZPliY3ojIPlm7TvvIjpu5jorqTkuLon5omA5pyJJ++8iVxuXG5cbmZ1bmN0aW9uIHNldFNjb3BlKHNjb3BlKSB7XG4gIF9zY29wZSA9IHNjb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5blvZPliY3ojIPlm7RcblxuXG5mdW5jdGlvbiBnZXRTY29wZSgpIHtcbiAgcmV0dXJuIF9zY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5pGB5LiL57uR5a6a6ZSu55qE6ZSu5YC8XG5cblxuZnVuY3Rpb24gZ2V0UHJlc3NlZEtleUNvZGVzKCkge1xuICByZXR1cm4gX2Rvd25LZXlzLnNsaWNlKDApO1xufSAvLyDooajljZXmjqfku7bmjqfku7bliKTmlq0g6L+U5ZueIEJvb2xlYW5cbi8vIGhvdGtleSBpcyBlZmZlY3RpdmUgb25seSB3aGVuIGZpbHRlciByZXR1cm4gdHJ1ZVxuXG5cbmZ1bmN0aW9uIGZpbHRlcihldmVudCkge1xuICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIHZhciB0YWdOYW1lID0gdGFyZ2V0LnRhZ05hbWU7XG4gIHZhciBmbGFnID0gdHJ1ZTsgLy8gaWdub3JlOiBpc0NvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnLCA8aW5wdXQ+IGFuZCA8dGV4dGFyZWE+IHdoZW4gcmVhZE9ubHkgc3RhdGUgaXMgZmFsc2UsIDxzZWxlY3Q+XG5cbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSB8fCAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8IHRhZ05hbWUgPT09ICdTRUxFQ1QnKSAmJiAhdGFyZ2V0LnJlYWRPbmx5KSB7XG4gICAgZmxhZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZsYWc7XG59IC8vIOWIpOaWreaRgeS4i+eahOmUruaYr+WQpuS4uuafkOS4qumUru+8jOi/lOWbnnRydWXmiJbogIVmYWxzZVxuXG5cbmZ1bmN0aW9uIGlzUHJlc3NlZChrZXlDb2RlKSB7XG4gIGlmICh0eXBlb2Yga2V5Q29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICBrZXlDb2RlID0gY29kZShrZXlDb2RlKTsgLy8g6L2s5o2i5oiQ6ZSu56CBXG4gIH1cblxuICByZXR1cm4gX2Rvd25LZXlzLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xO1xufSAvLyDlvqrnjq/liKDpmaRoYW5kbGVyc+S4reeahOaJgOaciSBzY29wZSjojIPlm7QpXG5cblxuZnVuY3Rpb24gZGVsZXRlU2NvcGUoc2NvcGUsIG5ld1Njb3BlKSB7XG4gIHZhciBoYW5kbGVycztcbiAgdmFyIGk7IC8vIOayoeacieaMh+WumnNjb3Bl77yM6I635Y+Wc2NvcGVcblxuICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG5cbiAgZm9yICh2YXIga2V5IGluIF9oYW5kbGVycykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2hhbmRsZXJzLCBrZXkpKSB7XG4gICAgICBoYW5kbGVycyA9IF9oYW5kbGVyc1trZXldO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOykge1xuICAgICAgICBpZiAoaGFuZGxlcnNbaV0uc2NvcGUgPT09IHNjb3BlKSBoYW5kbGVycy5zcGxpY2UoaSwgMSk7ZWxzZSBpKys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIOWmguaenHNjb3Bl6KKr5Yig6Zmk77yM5bCGc2NvcGXph43nva7kuLphbGxcblxuXG4gIGlmIChnZXRTY29wZSgpID09PSBzY29wZSkgc2V0U2NvcGUobmV3U2NvcGUgfHwgJ2FsbCcpO1xufSAvLyDmuIXpmaTkv67ppbDplK5cblxuXG5mdW5jdGlvbiBjbGVhck1vZGlmaWVyKGV2ZW50KSB7XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlO1xuXG4gIHZhciBpID0gX2Rvd25LZXlzLmluZGV4T2Yoa2V5KTsgLy8g5LuO5YiX6KGo5Lit5riF6Zmk5oyJ5Y6L6L+H55qE6ZSuXG5cblxuICBpZiAoaSA+PSAwKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZShpLCAxKTtcbiAgfSAvLyDnibnmrorlpITnkIYgY21tYW5kIOmUru+8jOWcqCBjbW1hbmQg57uE5ZCI5b+r5o236ZSuIGtleXVwIOWPquaJp+ihjOS4gOasoeeahOmXrumimFxuXG5cbiAgaWYgKGV2ZW50LmtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ21ldGEnKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZSgwLCBfZG93bktleXMubGVuZ3RoKTtcbiAgfSAvLyDkv67ppbDplK4gc2hpZnRLZXkgYWx0S2V5IGN0cmxLZXkgKGNvbW1hbmR8fG1ldGFLZXkpIOa4hemZpFxuXG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gZmFsc2U7IC8vIOWwhuS/rumlsOmUrumHjee9ruS4umZhbHNlXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVuYmluZChrZXlzSW5mbykge1xuICAvLyB1bmJpbmQoKSwgdW5iaW5kIGFsbCBrZXlzXG4gIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBkZWxldGUgX2hhbmRsZXJzW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzSW5mbykpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgOiB1bmJpbmQoW3trZXk6ICdjdHJsK2EnLCBzY29wZTogJ3MxJ30sIHtrZXk6ICdjdHJsLWEnLCBzY29wZTogJ3MyJywgc3BsaXRLZXk6ICctJ31dKVxuICAgIGtleXNJbmZvLmZvckVhY2goZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgIGlmIChpbmZvLmtleSkgZWFjaFVuYmluZChpbmZvKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdvYmplY3QnKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIHVuYmluZCh7a2V5OiAnY3RybCthLCBjdHJsK2InLCBzY29wZTonYWJjJ30pXG4gICAgaWYgKGtleXNJbmZvLmtleSkgZWFjaFVuYmluZChrZXlzSW5mbyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnc3RyaW5nJykge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnQgb2xkIG1ldGhvZFxuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB2YXIgc2NvcGUgPSBhcmdzWzBdLFxuICAgICAgICBtZXRob2QgPSBhcmdzWzFdO1xuXG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWV0aG9kID0gc2NvcGU7XG4gICAgICBzY29wZSA9ICcnO1xuICAgIH1cblxuICAgIGVhY2hVbmJpbmQoe1xuICAgICAga2V5OiBrZXlzSW5mbyxcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgc3BsaXRLZXk6ICcrJ1xuICAgIH0pO1xuICB9XG59IC8vIOino+mZpOe7keWumuafkOS4quiMg+WbtOeahOW/q+aNt+mUrlxuXG5cbnZhciBlYWNoVW5iaW5kID0gZnVuY3Rpb24gZWFjaFVuYmluZChfcmVmKSB7XG4gIHZhciBrZXkgPSBfcmVmLmtleSxcbiAgICAgIHNjb3BlID0gX3JlZi5zY29wZSxcbiAgICAgIG1ldGhvZCA9IF9yZWYubWV0aG9kLFxuICAgICAgX3JlZiRzcGxpdEtleSA9IF9yZWYuc3BsaXRLZXksXG4gICAgICBzcGxpdEtleSA9IF9yZWYkc3BsaXRLZXkgPT09IHZvaWQgMCA/ICcrJyA6IF9yZWYkc3BsaXRLZXk7XG4gIHZhciBtdWx0aXBsZUtleXMgPSBnZXRLZXlzKGtleSk7XG4gIG11bHRpcGxlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChvcmlnaW5LZXkpIHtcbiAgICB2YXIgdW5iaW5kS2V5cyA9IG9yaWdpbktleS5zcGxpdChzcGxpdEtleSk7XG4gICAgdmFyIGxlbiA9IHVuYmluZEtleXMubGVuZ3RoO1xuICAgIHZhciBsYXN0S2V5ID0gdW5iaW5kS2V5c1tsZW4gLSAxXTtcbiAgICB2YXIga2V5Q29kZSA9IGxhc3RLZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUobGFzdEtleSk7XG4gICAgaWYgKCFfaGFuZGxlcnNba2V5Q29kZV0pIHJldHVybjsgLy8g5Yik5pat5piv5ZCm5Lyg5YWl6IyD5Zu077yM5rKh5pyJ5bCx6I635Y+W6IyD5Zu0XG5cbiAgICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgdmFyIG1vZHMgPSBsZW4gPiAxID8gZ2V0TW9kcyhfbW9kaWZpZXIsIHVuYmluZEtleXMpIDogW107XG4gICAgX2hhbmRsZXJzW2tleUNvZGVdID0gX2hhbmRsZXJzW2tleUNvZGVdLmZpbHRlcihmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgICAvLyDpgJrov4flh73mlbDliKTmlq3vvIzmmK/lkKbop6PpmaTnu5HlrprvvIzlh73mlbDnm7jnrYnnm7TmjqXov5Tlm55cbiAgICAgIHZhciBpc01hdGNoaW5nTWV0aG9kID0gbWV0aG9kID8gcmVjb3JkLm1ldGhvZCA9PT0gbWV0aG9kIDogdHJ1ZTtcbiAgICAgIHJldHVybiAhKGlzTWF0Y2hpbmdNZXRob2QgJiYgcmVjb3JkLnNjb3BlID09PSBzY29wZSAmJiBjb21wYXJlQXJyYXkocmVjb3JkLm1vZHMsIG1vZHMpKTtcbiAgICB9KTtcbiAgfSk7XG59OyAvLyDlr7nnm5HlkKzlr7nlupTlv6vmjbfplK7nmoTlm57osIPlh73mlbDov5vooYzlpITnkIZcblxuXG5mdW5jdGlvbiBldmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIHNjb3BlLCBlbGVtZW50KSB7XG4gIGlmIChoYW5kbGVyLmVsZW1lbnQgIT09IGVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbW9kaWZpZXJzTWF0Y2g7IC8vIOeci+Wug+aYr+WQpuWcqOW9k+WJjeiMg+WbtFxuXG4gIGlmIChoYW5kbGVyLnNjb3BlID09PSBzY29wZSB8fCBoYW5kbGVyLnNjb3BlID09PSAnYWxsJykge1xuICAgIC8vIOajgOafpeaYr+WQpuWMuemFjeS/rumlsOespu+8iOWmguaenOaciei/lOWbnnRydWXvvIlcbiAgICBtb2RpZmllcnNNYXRjaCA9IGhhbmRsZXIubW9kcy5sZW5ndGggPiAwO1xuXG4gICAgZm9yICh2YXIgeSBpbiBfbW9kcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgeSkpIHtcbiAgICAgICAgaWYgKCFfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPiAtMSB8fCBfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPT09IC0xKSB7XG4gICAgICAgICAgbW9kaWZpZXJzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8g6LCD55So5aSE55CG56iL5bqP77yM5aaC5p6c5piv5L+u6aWw6ZSu5LiN5YGa5aSE55CGXG5cblxuICAgIGlmIChoYW5kbGVyLm1vZHMubGVuZ3RoID09PSAwICYmICFfbW9kc1sxNl0gJiYgIV9tb2RzWzE4XSAmJiAhX21vZHNbMTddICYmICFfbW9kc1s5MV0gfHwgbW9kaWZpZXJzTWF0Y2ggfHwgaGFuZGxlci5zaG9ydGN1dCA9PT0gJyonKSB7XG4gICAgICBpZiAoaGFuZGxlci5tZXRob2QoZXZlbnQsIGhhbmRsZXIpID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZWxzZSBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGV2ZW50LmNhbmNlbEJ1YmJsZSkgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5aSE55CGa2V5ZG93buS6i+S7tlxuXG5cbmZ1bmN0aW9uIGRpc3BhdGNoKGV2ZW50LCBlbGVtZW50KSB7XG4gIHZhciBhc3RlcmlzayA9IF9oYW5kbGVyc1snKiddO1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTsgLy8g6KGo5Y2V5o6n5Lu26L+H5rukIOm7mOiupOihqOWNleaOp+S7tuS4jeinpuWPkeW/q+aNt+mUrlxuXG4gIGlmICghaG90a2V5cy5maWx0ZXIuY2FsbCh0aGlzLCBldmVudCkpIHJldHVybjsgLy8gR2Vja28oRmlyZWZveCnnmoRjb21tYW5k6ZSu5YC8MjI077yM5ZyoV2Via2l0KENocm9tZSnkuK3kv53mjIHkuIDoh7RcbiAgLy8gV2Via2l05bem5Y+zIGNvbW1hbmQg6ZSu5YC85LiN5LiA5qC3XG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuICAvKipcbiAgICogQ29sbGVjdCBib3VuZCBrZXlzXG4gICAqIElmIGFuIElucHV0IE1ldGhvZCBFZGl0b3IgaXMgcHJvY2Vzc2luZyBrZXkgaW5wdXQgYW5kIHRoZSBldmVudCBpcyBrZXlkb3duLCByZXR1cm4gMjI5LlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNTA0MzkzNC9pcy1pdC1vay10by1pZ25vcmUta2V5ZG93bi1ldmVudHMtd2l0aC1rZXljb2RlLTIyOVxuICAgKiBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctZG9tLzIwMTBKdWxTZXAvYXR0LTAxODIva2V5Q29kZS1zcGVjLmh0bWxcbiAgICovXG5cbiAgaWYgKF9kb3duS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmIGtleSAhPT0gMjI5KSBfZG93bktleXMucHVzaChrZXkpO1xuICAvKipcbiAgICogSmVzdCB0ZXN0IGNhc2VzIGFyZSByZXF1aXJlZC5cbiAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgKi9cblxuICBbJ2N0cmxLZXknLCAnYWx0S2V5JywgJ3NoaWZ0S2V5JywgJ21ldGFLZXknXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlOYW1lKSB7XG4gICAgdmFyIGtleU51bSA9IG1vZGlmaWVyTWFwW2tleU5hbWVdO1xuXG4gICAgaWYgKGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaChrZXlOdW0pO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPiAtMSkge1xuICAgICAgX2Rvd25LZXlzLnNwbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pLCAxKTtcbiAgICB9IGVsc2UgaWYgKGtleU5hbWUgPT09ICdtZXRhS2V5JyAmJiBldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpeCBpZiBDb21tYW5kIGlzIHByZXNzZWQ6XG4gICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgKi9cbiAgICAgIGlmICghKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KSkge1xuICAgICAgICBfZG93bktleXMgPSBfZG93bktleXMuc2xpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSB0cnVlOyAvLyDlsIbnibnmrorlrZfnrKbnmoRrZXnms6jlhozliLAgaG90a2V5cyDkuIpcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYXN0ZXJpc2spIHJldHVybjtcbiAgfSAvLyDlsIYgbW9kaWZpZXJNYXAg6YeM6Z2i55qE5L+u6aWw6ZSu57uR5a6a5YiwIGV2ZW50IOS4rVxuXG5cbiAgZm9yICh2YXIgZSBpbiBfbW9kcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIGUpKSB7XG4gICAgICBfbW9kc1tlXSA9IGV2ZW50W21vZGlmaWVyTWFwW2VdXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXl3Y2psb3ZlL2hvdGtleXMvcHVsbC8xMjlcbiAgICogVGhpcyBzb2x2ZXMgdGhlIGlzc3VlIGluIEZpcmVmb3ggb24gV2luZG93cyB3aGVyZSBob3RrZXlzIGNvcnJlc3BvbmRpbmcgdG8gc3BlY2lhbCBjaGFyYWN0ZXJzIHdvdWxkIG5vdCB0cmlnZ2VyLlxuICAgKiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgY3RybCthbHQrbSBvbiBhIFN3ZWRpc2gga2V5Ym9hcmQgd2hpY2ggaXMgdXNlZCB0byB0eXBlIM68LlxuICAgKiBCcm93c2VyIHN1cHBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9a2V5Ym9hcmRldmVudC1nZXRtb2RpZmllcnN0YXRlXG4gICAqL1xuXG5cbiAgaWYgKGV2ZW50LmdldE1vZGlmaWVyU3RhdGUgJiYgIShldmVudC5hbHRLZXkgJiYgIWV2ZW50LmN0cmxLZXkpICYmIGV2ZW50LmdldE1vZGlmaWVyU3RhdGUoJ0FsdEdyYXBoJykpIHtcbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTcpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTcpO1xuICAgIH1cblxuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxOCkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxOCk7XG4gICAgfVxuXG4gICAgX21vZHNbMTddID0gdHJ1ZTtcbiAgICBfbW9kc1sxOF0gPSB0cnVlO1xuICB9IC8vIOiOt+WPluiMg+WbtCDpu5jorqTkuLogYGFsbGBcblxuXG4gIHZhciBzY29wZSA9IGdldFNjb3BlKCk7IC8vIOWvueS7u+S9leW/q+aNt+mUrumDvemcgOimgeWBmueahOWkhOeQhlxuXG4gIGlmIChhc3Rlcmlzaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN0ZXJpc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhc3Rlcmlza1tpXS5zY29wZSA9PT0gc2NvcGUgJiYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBhc3Rlcmlza1tpXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgYXN0ZXJpc2tbaV0ua2V5dXApKSB7XG4gICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgYXN0ZXJpc2tbaV0sIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8ga2V5IOS4jeWcqCBfaGFuZGxlcnMg5Lit6L+U5ZueXG5cblxuICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgcmV0dXJuO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBfaGFuZGxlcnNba2V5XS5sZW5ndGg7IF9pKyspIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleXVwKSB7XG4gICAgICBpZiAoX2hhbmRsZXJzW2tleV1bX2ldLmtleSkge1xuICAgICAgICB2YXIgcmVjb3JkID0gX2hhbmRsZXJzW2tleV1bX2ldO1xuICAgICAgICB2YXIgc3BsaXRLZXkgPSByZWNvcmQuc3BsaXRLZXk7XG4gICAgICAgIHZhciBrZXlTaG9ydGN1dCA9IHJlY29yZC5rZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgICAgICB2YXIgX2Rvd25LZXlzQ3VycmVudCA9IFtdOyAvLyDorrDlvZXlvZPliY3mjInplK7plK7lgLxcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGtleVNob3J0Y3V0Lmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgX2Rvd25LZXlzQ3VycmVudC5wdXNoKGNvZGUoa2V5U2hvcnRjdXRbYV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfZG93bktleXNDdXJyZW50LnNvcnQoKS5qb2luKCcnKSA9PT0gX2Rvd25LZXlzLnNvcnQoKS5qb2luKCcnKSkge1xuICAgICAgICAgIC8vIOaJvuWIsOWkhOeQhuWGheWuuVxuICAgICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgcmVjb3JkLCBzY29wZSwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5Yik5patIGVsZW1lbnQg5piv5ZCm5bey57uP57uR5a6a5LqL5Lu2XG5cblxuZnVuY3Rpb24gaXNFbGVtZW50QmluZChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50SGFzQmluZEV2ZW50LmluZGV4T2YoZWxlbWVudCkgPiAtMTtcbn1cblxuZnVuY3Rpb24gaG90a2V5cyhrZXksIG9wdGlvbiwgbWV0aG9kKSB7XG4gIF9kb3duS2V5cyA9IFtdO1xuICB2YXIga2V5cyA9IGdldEtleXMoa2V5KTsgLy8g6ZyA6KaB5aSE55CG55qE5b+r5o236ZSu5YiX6KGoXG5cbiAgdmFyIG1vZHMgPSBbXTtcbiAgdmFyIHNjb3BlID0gJ2FsbCc7IC8vIHNjb3Bl6buY6K6k5Li6YWxs77yM5omA5pyJ6IyD5Zu06YO95pyJ5pWIXG5cbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudDsgLy8g5b+r5o236ZSu5LqL5Lu257uR5a6a6IqC54K5XG5cbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5dXAgPSBmYWxzZTtcbiAgdmFyIGtleWRvd24gPSB0cnVlO1xuICB2YXIgc3BsaXRLZXkgPSAnKyc7XG4gIHZhciBjYXB0dXJlID0gZmFsc2U7IC8vIOWvueS4uuiuvuWumuiMg+WbtOeahOWIpOaWrVxuXG4gIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbWV0aG9kID0gb3B0aW9uO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb24pID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIGlmIChvcHRpb24uc2NvcGUpIHNjb3BlID0gb3B0aW9uLnNjb3BlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmVsZW1lbnQpIGVsZW1lbnQgPSBvcHRpb24uZWxlbWVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXl1cCkga2V5dXAgPSBvcHRpb24ua2V5dXA7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5ZG93biAhPT0gdW5kZWZpbmVkKSBrZXlkb3duID0gb3B0aW9uLmtleWRvd247IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uY2FwdHVyZSAhPT0gdW5kZWZpbmVkKSBjYXB0dXJlID0gb3B0aW9uLmNhcHR1cmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uLnNwbGl0S2V5ID09PSAnc3RyaW5nJykgc3BsaXRLZXkgPSBvcHRpb24uc3BsaXRLZXk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgc2NvcGUgPSBvcHRpb247IC8vIOWvueS6juavj+S4quW/q+aNt+mUrui/m+ihjOWkhOeQhlxuXG4gIGZvciAoOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV0uc3BsaXQoc3BsaXRLZXkpOyAvLyDmjInplK7liJfooahcblxuICAgIG1vZHMgPSBbXTsgLy8g5aaC5p6c5piv57uE5ZCI5b+r5o236ZSu5Y+W5b6X57uE5ZCI5b+r5o236ZSuXG5cbiAgICBpZiAoa2V5Lmxlbmd0aCA+IDEpIG1vZHMgPSBnZXRNb2RzKF9tb2RpZmllciwga2V5KTsgLy8g5bCG6Z2e5L+u6aWw6ZSu6L2s5YyW5Li66ZSu56CBXG5cbiAgICBrZXkgPSBrZXlba2V5Lmxlbmd0aCAtIDFdO1xuICAgIGtleSA9IGtleSA9PT0gJyonID8gJyonIDogY29kZShrZXkpOyAvLyAq6KGo56S65Yy56YWN5omA5pyJ5b+r5o236ZSuXG4gICAgLy8g5Yik5pata2V55piv5ZCm5ZyoX2hhbmRsZXJz5Lit77yM5LiN5Zyo5bCx6LWL5LiA5Liq56m65pWw57uEXG5cbiAgICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgX2hhbmRsZXJzW2tleV0gPSBbXTtcblxuICAgIF9oYW5kbGVyc1trZXldLnB1c2goe1xuICAgICAga2V5dXA6IGtleXVwLFxuICAgICAga2V5ZG93bjoga2V5ZG93bixcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1vZHM6IG1vZHMsXG4gICAgICBzaG9ydGN1dDoga2V5c1tpXSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAga2V5OiBrZXlzW2ldLFxuICAgICAgc3BsaXRLZXk6IHNwbGl0S2V5LFxuICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgIH0pO1xuICB9IC8vIOWcqOWFqOWxgGRvY3VtZW505LiK6K6+572u5b+r5o236ZSuXG5cblxuICBpZiAodHlwZW9mIGVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmICFpc0VsZW1lbnRCaW5kKGVsZW1lbnQpICYmIHdpbmRvdykge1xuICAgIGVsZW1lbnRIYXNCaW5kRXZlbnQucHVzaChlbGVtZW50KTtcbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlLCBlbGVtZW50KTtcbiAgICB9LCBjYXB0dXJlKTtcblxuICAgIGlmICghd2luTGlzdGVuZEZvY3VzKSB7XG4gICAgICB3aW5MaXN0ZW5kRm9jdXMgPSB0cnVlO1xuICAgICAgYWRkRXZlbnQod2luZG93LCAnZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IFtdO1xuICAgICAgfSwgY2FwdHVyZSk7XG4gICAgfVxuXG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleXVwJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgICAgY2xlYXJNb2RpZmllcihlKTtcbiAgICB9LCBjYXB0dXJlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmlnZ2VyKHNob3J0Y3V0KSB7XG4gIHZhciBzY29wZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2FsbCc7XG4gIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGRhdGEgPSBfaGFuZGxlcnNba2V5XS5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5zY29wZSA9PT0gc2NvcGUgJiYgaXRlbS5zaG9ydGN1dCA9PT0gc2hvcnRjdXQ7XG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLm1ldGhvZCkge1xuICAgICAgZGF0YS5tZXRob2QoKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgX2FwaSA9IHtcbiAgc2V0U2NvcGU6IHNldFNjb3BlLFxuICBnZXRTY29wZTogZ2V0U2NvcGUsXG4gIGRlbGV0ZVNjb3BlOiBkZWxldGVTY29wZSxcbiAgZ2V0UHJlc3NlZEtleUNvZGVzOiBnZXRQcmVzc2VkS2V5Q29kZXMsXG4gIGlzUHJlc3NlZDogaXNQcmVzc2VkLFxuICBmaWx0ZXI6IGZpbHRlcixcbiAgdHJpZ2dlcjogdHJpZ2dlcixcbiAgdW5iaW5kOiB1bmJpbmQsXG4gIGtleU1hcDogX2tleU1hcCxcbiAgbW9kaWZpZXI6IF9tb2RpZmllcixcbiAgbW9kaWZpZXJNYXA6IG1vZGlmaWVyTWFwXG59O1xuXG5mb3IgKHZhciBhIGluIF9hcGkpIHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfYXBpLCBhKSkge1xuICAgIGhvdGtleXNbYV0gPSBfYXBpW2FdO1xuICB9XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgX2hvdGtleXMgPSB3aW5kb3cuaG90a2V5cztcblxuICBob3RrZXlzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoZGVlcCkge1xuICAgIGlmIChkZWVwICYmIHdpbmRvdy5ob3RrZXlzID09PSBob3RrZXlzKSB7XG4gICAgICB3aW5kb3cuaG90a2V5cyA9IF9ob3RrZXlzO1xuICAgIH1cblxuICAgIHJldHVybiBob3RrZXlzO1xuICB9O1xuXG4gIHdpbmRvdy5ob3RrZXlzID0gaG90a2V5cztcbn1cblxuZXhwb3J0IHsgaG90a2V5cyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgaG90a2V5cyBmcm9tICdob3RrZXlzLWpzJztcbmltcG9ydCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIFVzZSBpc0hvdGtleVByZXNzZWQgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIHZlcnNpb24gNC5cclxuICovXG5cbmZ1bmN0aW9uIHVzZUlzSG90a2V5UHJlc3NlZCgpIHtcbiAgcmV0dXJuIGhvdGtleXMuaXNQcmVzc2VkO1xufVxuXG5ob3RrZXlzLmZpbHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG52YXIgdGFnRmlsdGVyID0gZnVuY3Rpb24gdGFnRmlsdGVyKF9yZWYsIGVuYWJsZU9uVGFncykge1xuICB2YXIgdGFyZ2V0ID0gX3JlZi50YXJnZXQ7XG4gIHZhciB0YXJnZXRUYWdOYW1lID0gdGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lO1xuICByZXR1cm4gQm9vbGVhbih0YXJnZXRUYWdOYW1lICYmIGVuYWJsZU9uVGFncyAmJiBlbmFibGVPblRhZ3MuaW5jbHVkZXModGFyZ2V0VGFnTmFtZSkpO1xufTtcblxudmFyIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQgPSBmdW5jdGlvbiBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGV2KSB7XG4gIHJldHVybiB0YWdGaWx0ZXIoZXYsIFsnSU5QVVQnLCAnVEVYVEFSRUEnLCAnU0VMRUNUJ10pO1xufTtcblxuZnVuY3Rpb24gdXNlSG90a2V5cyhrZXlzLCBjYWxsYmFjaywgb3B0aW9ucywgZGVwcykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgZGVwcyA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBfcmVmMiA9IG9wdGlvbnMgfHwge30sXG4gICAgICBlbmFibGVPblRhZ3MgPSBfcmVmMi5lbmFibGVPblRhZ3MsXG4gICAgICBmaWx0ZXIgPSBfcmVmMi5maWx0ZXIsXG4gICAgICBrZXl1cCA9IF9yZWYyLmtleXVwLFxuICAgICAga2V5ZG93biA9IF9yZWYyLmtleWRvd24sXG4gICAgICBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPSBfcmVmMi5maWx0ZXJQcmV2ZW50RGVmYXVsdCxcbiAgICAgIGZpbHRlclByZXZlbnREZWZhdWx0ID0gX3JlZjIkZmlsdGVyUHJldmVudERlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZmlsdGVyUHJldmVudERlLFxuICAgICAgX3JlZjIkZW5hYmxlZCA9IF9yZWYyLmVuYWJsZWQsXG4gICAgICBlbmFibGVkID0gX3JlZjIkZW5hYmxlZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGVuYWJsZWQsXG4gICAgICBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPSBfcmVmMi5lbmFibGVPbkNvbnRlbnRFZGl0YWJsZSxcbiAgICAgIGVuYWJsZU9uQ29udGVudEVkaXRhYmxlID0gX3JlZjIkZW5hYmxlT25Db250ZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGVuYWJsZU9uQ29udGVudDtcblxuICB2YXIgcmVmID0gdXNlUmVmKG51bGwpOyAvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgY2FsbGJhY2sgZGV0ZXJtaW5lcyBpZiB0aGUgYnJvd3NlcnMgZGVmYXVsdCBiZWhhdmlvciBpcyBwcmV2ZW50ZWQuXG5cbiAgdmFyIG1lbW9pc2VkQ2FsbGJhY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KSB7XG4gICAgdmFyIF9rZXlib2FyZEV2ZW50JHRhcmdldCwgX3JlZiRjdXJyZW50O1xuXG4gICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKGtleWJvYXJkRXZlbnQpKSB7XG4gICAgICByZXR1cm4gIWZpbHRlclByZXZlbnREZWZhdWx0O1xuICAgIH0gLy8gQ2hlY2sgd2hldGhlciB0aGUgaG90a2V5cyB3YXMgdHJpZ2dlcmVkIGluc2lkZSBhbiBpbnB1dCBhbmQgdGhhdCBpbnB1dCBpcyBlbmFibGVkIG9yIGlmIGl0IHdhcyB0cmlnZ2VyZWQgYnkgYSBjb250ZW50IGVkaXRhYmxlIHRhZyBhbmQgaXQgaXMgZW5hYmxlZC5cblxuXG4gICAgaWYgKGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoa2V5Ym9hcmRFdmVudCkgJiYgIXRhZ0ZpbHRlcihrZXlib2FyZEV2ZW50LCBlbmFibGVPblRhZ3MpIHx8IChfa2V5Ym9hcmRFdmVudCR0YXJnZXQgPSBrZXlib2FyZEV2ZW50LnRhcmdldCkgIT0gbnVsbCAmJiBfa2V5Ym9hcmRFdmVudCR0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgJiYgIWVuYWJsZU9uQ29udGVudEVkaXRhYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IG51bGwgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcmVmLmN1cnJlbnQgfHwgKF9yZWYkY3VycmVudCA9IHJlZi5jdXJyZW50KSAhPSBudWxsICYmIF9yZWYkY3VycmVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgY2FsbGJhY2soa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgZGVwcyA/IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXS5jb25jYXQoZGVwcykgOiBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJbiB0aGlzIGNhc2Uga2V5ZG93biBpcyBsaWtlbHkgdW5kZWZpbmVkLCBzbyB3ZSBzZXQgaXQgdG8gZmFsc2UsIHNpbmNlIGhvdGtleXMgbmVlZHMgdGhlIGBrZXlkb3duYCBrZXkgdG8gaGF2ZSBhIHZhbHVlLlxuXG5cbiAgICBpZiAoa2V5dXAgJiYga2V5ZG93biAhPT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5rZXlkb3duID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaG90a2V5cyhrZXlzLCBvcHRpb25zIHx8IHt9LCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIH07XG4gIH0sIFttZW1vaXNlZENhbGxiYWNrLCBrZXlzLCBlbmFibGVkXSk7XG4gIHJldHVybiByZWY7XG59XG5cbnZhciBpc0hvdGtleVByZXNzZWQgPSBob3RrZXlzLmlzUHJlc3NlZDtcblxuZXhwb3J0IHsgaXNIb3RrZXlQcmVzc2VkLCB1c2VIb3RrZXlzLCB1c2VJc0hvdGtleVByZXNzZWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlYWN0LWhvdGtleXMtaG9vay5lc20uanMubWFwXG4iLCJmdW5jdGlvbiByZXBsYWNlQ2xhc3NOYW1lKG9yaWdDbGFzcywgY2xhc3NUb1JlbW92ZSkge1xuICByZXR1cm4gb3JpZ0NsYXNzLnJlcGxhY2UobmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xhc3NUb1JlbW92ZSArIFwiKD86XFxcXHN8JClcIiwgJ2cnKSwgJyQxJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTtcbn1cbi8qKlxuICogUmVtb3ZlcyBhIENTUyBjbGFzcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gcmVwbGFjZUNsYXNzTmFtZShlbGVtZW50LmNsYXNzTmFtZSwgY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCByZXBsYWNlQ2xhc3NOYW1lKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgJycsIGNsYXNzTmFtZSkpO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQge1xuICBkaXNhYmxlZDogZmFsc2Vcbn07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7IiwiZXhwb3J0IHZhciBmb3JjZVJlZmxvdyA9IGZ1bmN0aW9uIGZvcmNlUmVmbG93KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsVG9wO1xufTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgdGltZW91dHNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcbmV4cG9ydCB2YXIgVU5NT1VOVEVEID0gJ3VubW91bnRlZCc7XG5leHBvcnQgdmFyIEVYSVRFRCA9ICdleGl0ZWQnO1xuZXhwb3J0IHZhciBFTlRFUklORyA9ICdlbnRlcmluZyc7XG5leHBvcnQgdmFyIEVOVEVSRUQgPSAnZW50ZXJlZCc7XG5leHBvcnQgdmFyIEVYSVRJTkcgPSAnZXhpdGluZyc7XG4vKipcbiAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudCBsZXRzIHlvdSBkZXNjcmliZSBhIHRyYW5zaXRpb24gZnJvbSBvbmUgY29tcG9uZW50XG4gKiBzdGF0ZSB0byBhbm90aGVyIF9vdmVyIHRpbWVfIHdpdGggYSBzaW1wbGUgZGVjbGFyYXRpdmUgQVBJLiBNb3N0IGNvbW1vbmx5XG4gKiBpdCdzIHVzZWQgdG8gYW5pbWF0ZSB0aGUgbW91bnRpbmcgYW5kIHVubW91bnRpbmcgb2YgYSBjb21wb25lbnQsIGJ1dCBjYW4gYWxzb1xuICogYmUgdXNlZCB0byBkZXNjcmliZSBpbi1wbGFjZSB0cmFuc2l0aW9uIHN0YXRlcyBhcyB3ZWxsLlxuICpcbiAqIC0tLVxuICpcbiAqICoqTm90ZSoqOiBgVHJhbnNpdGlvbmAgaXMgYSBwbGF0Zm9ybS1hZ25vc3RpYyBiYXNlIGNvbXBvbmVudC4gSWYgeW91J3JlIHVzaW5nXG4gKiB0cmFuc2l0aW9ucyBpbiBDU1MsIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZVxuICogW2BDU1NUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9jc3MtdHJhbnNpdGlvbilcbiAqIGluc3RlYWQuIEl0IGluaGVyaXRzIGFsbCB0aGUgZmVhdHVyZXMgb2YgYFRyYW5zaXRpb25gLCBidXQgY29udGFpbnNcbiAqIGFkZGl0aW9uYWwgZmVhdHVyZXMgbmVjZXNzYXJ5IHRvIHBsYXkgbmljZSB3aXRoIENTUyB0cmFuc2l0aW9ucyAoaGVuY2UgdGhlXG4gKiBuYW1lIG9mIHRoZSBjb21wb25lbnQpLlxuICpcbiAqIC0tLVxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGBUcmFuc2l0aW9uYCBjb21wb25lbnQgZG9lcyBub3QgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHRoZVxuICogY29tcG9uZW50IGl0IHJlbmRlcnMsIGl0IG9ubHkgdHJhY2tzIFwiZW50ZXJcIiBhbmQgXCJleGl0XCIgc3RhdGVzIGZvciB0aGVcbiAqIGNvbXBvbmVudHMuIEl0J3MgdXAgdG8geW91IHRvIGdpdmUgbWVhbmluZyBhbmQgZWZmZWN0IHRvIHRob3NlIHN0YXRlcy4gRm9yXG4gKiBleGFtcGxlIHdlIGNhbiBhZGQgc3R5bGVzIHRvIGEgY29tcG9uZW50IHdoZW4gaXQgZW50ZXJzIG9yIGV4aXRzOlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuICpcbiAqIGNvbnN0IGR1cmF0aW9uID0gMzAwO1xuICpcbiAqIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAqICAgdHJhbnNpdGlvbjogYG9wYWNpdHkgJHtkdXJhdGlvbn1tcyBlYXNlLWluLW91dGAsXG4gKiAgIG9wYWNpdHk6IDAsXG4gKiB9XG4gKlxuICogY29uc3QgdHJhbnNpdGlvblN0eWxlcyA9IHtcbiAqICAgZW50ZXJpbmc6IHsgb3BhY2l0eTogMSB9LFxuICogICBlbnRlcmVkOiAgeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGV4aXRpbmc6ICB7IG9wYWNpdHk6IDAgfSxcbiAqICAgZXhpdGVkOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiB9O1xuICpcbiAqIGNvbnN0IEZhZGUgPSAoeyBpbjogaW5Qcm9wIH0pID0+IChcbiAqICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17ZHVyYXRpb259PlxuICogICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICA8ZGl2IHN0eWxlPXt7XG4gKiAgICAgICAgIC4uLmRlZmF1bHRTdHlsZSxcbiAqICAgICAgICAgLi4udHJhbnNpdGlvblN0eWxlc1tzdGF0ZV1cbiAqICAgICAgIH19PlxuICogICAgICAgICBJJ20gYSBmYWRlIFRyYW5zaXRpb24hXG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICApfVxuICogICA8L1RyYW5zaXRpb24+XG4gKiApO1xuICogYGBgXG4gKlxuICogVGhlcmUgYXJlIDQgbWFpbiBzdGF0ZXMgYSBUcmFuc2l0aW9uIGNhbiBiZSBpbjpcbiAqICAtIGAnZW50ZXJpbmcnYFxuICogIC0gYCdlbnRlcmVkJ2BcbiAqICAtIGAnZXhpdGluZydgXG4gKiAgLSBgJ2V4aXRlZCdgXG4gKlxuICogVHJhbnNpdGlvbiBzdGF0ZSBpcyB0b2dnbGVkIHZpYSB0aGUgYGluYCBwcm9wLiBXaGVuIGB0cnVlYCB0aGUgY29tcG9uZW50XG4gKiBiZWdpbnMgdGhlIFwiRW50ZXJcIiBzdGFnZS4gRHVyaW5nIHRoaXMgc3RhZ2UsIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCBmcm9tXG4gKiBpdHMgY3VycmVudCB0cmFuc2l0aW9uIHN0YXRlLCB0byBgJ2VudGVyaW5nJ2AgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGVcbiAqIHRyYW5zaXRpb24gYW5kIHRoZW4gdG8gdGhlIGAnZW50ZXJlZCdgIHN0YWdlIG9uY2UgaXQncyBjb21wbGV0ZS4gTGV0J3MgdGFrZVxuICogdGhlIGZvbGxvd2luZyBleGFtcGxlICh3ZSdsbCB1c2UgdGhlXG4gKiBbdXNlU3RhdGVdKGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VzdGF0ZSkgaG9vayk6XG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezUwMH0+XG4gKiAgICAgICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICAgICAgLy8gLi4uXG4gKiAgICAgICAgICl9XG4gKiAgICAgICA8L1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCB0byB0aGUgYCdlbnRlcmluZydgIHN0YXRlXG4gKiBhbmQgc3RheSB0aGVyZSBmb3IgNTAwbXMgKHRoZSB2YWx1ZSBvZiBgdGltZW91dGApIGJlZm9yZSBpdCBmaW5hbGx5IHN3aXRjaGVzXG4gKiB0byBgJ2VudGVyZWQnYC5cbiAqXG4gKiBXaGVuIGBpbmAgaXMgYGZhbHNlYCB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIGV4Y2VwdCB0aGUgc3RhdGUgbW92ZXMgZnJvbVxuICogYCdleGl0aW5nJ2AgdG8gYCdleGl0ZWQnYC5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG4gICAgdmFyIHBhcmVudEdyb3VwID0gY29udGV4dDsgLy8gSW4gdGhlIGNvbnRleHQgb2YgYSBUcmFuc2l0aW9uR3JvdXAgYWxsIGVudGVycyBhcmUgcmVhbGx5IGFwcGVhcnNcblxuICAgIHZhciBhcHBlYXIgPSBwYXJlbnRHcm91cCAmJiAhcGFyZW50R3JvdXAuaXNNb3VudGluZyA/IHByb3BzLmVudGVyIDogcHJvcHMuYXBwZWFyO1xuICAgIHZhciBpbml0aWFsU3RhdHVzO1xuICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJvcHMuaW4pIHtcbiAgICAgIGlmIChhcHBlYXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gRU5URVJJTkc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRU5URVJFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BzLnVubW91bnRPbkV4aXQgfHwgcHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBVTk1PVU5URUQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBpbml0aWFsU3RhdHVzXG4gICAgfTtcbiAgICBfdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKF9yZWYsIHByZXZTdGF0ZSkge1xuICAgIHZhciBuZXh0SW4gPSBfcmVmLmluO1xuXG4gICAgaWYgKG5leHRJbiAmJiBwcmV2U3RhdGUuc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAvLyAgIGxldCBuZXh0U3RhdHVzID0gbnVsbFxuICAvLyAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgLy8gICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB0aGlzLnN0YXRlXG4gIC8vICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAvLyAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4geyBuZXh0U3RhdHVzIH1cbiAgLy8gfVxuICA7XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdHVzKHRydWUsIHRoaXMuYXBwZWFyU3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBuZXh0U3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElORztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKGZhbHNlLCBuZXh0U3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuICB9O1xuXG4gIF9wcm90by5nZXRUaW1lb3V0cyA9IGZ1bmN0aW9uIGdldFRpbWVvdXRzKCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0O1xuICAgIHZhciBleGl0LCBlbnRlciwgYXBwZWFyO1xuICAgIGV4aXQgPSBlbnRlciA9IGFwcGVhciA9IHRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsICYmIHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgZXhpdCA9IHRpbWVvdXQuZXhpdDtcbiAgICAgIGVudGVyID0gdGltZW91dC5lbnRlcjsgLy8gVE9ETzogcmVtb3ZlIGZhbGxiYWNrIGZvciBuZXh0IG1ham9yXG5cbiAgICAgIGFwcGVhciA9IHRpbWVvdXQuYXBwZWFyICE9PSB1bmRlZmluZWQgPyB0aW1lb3V0LmFwcGVhciA6IGVudGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleGl0OiBleGl0LFxuICAgICAgZW50ZXI6IGVudGVyLFxuICAgICAgYXBwZWFyOiBhcHBlYXJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGF0dXMgPSBmdW5jdGlvbiB1cGRhdGVTdGF0dXMobW91bnRpbmcsIG5leHRTdGF0dXMpIHtcbiAgICBpZiAobW91bnRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgbW91bnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgLy8gbmV4dFN0YXR1cyB3aWxsIGFsd2F5cyBiZSBFTlRFUklORyBvciBFWElUSU5HLlxuICAgICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcblxuICAgICAgaWYgKG5leHRTdGF0dXMgPT09IEVOVEVSSU5HKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgfHwgdGhpcy5wcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvcHVsbC83NDlcbiAgICAgICAgICAvLyBXaXRoIHVubW91bnRPbkV4aXQgb3IgbW91bnRPbkVudGVyLCB0aGUgZW50ZXIgYW5pbWF0aW9uIHNob3VsZCBoYXBwZW4gYXQgdGhlIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhpdGVkYCBhbmQgYGVudGVyaW5nYC5cbiAgICAgICAgICAvLyBUbyBtYWtlIHRoZSBhbmltYXRpb24gaGFwcGVuLCAgd2UgaGF2ZSB0byBzZXBhcmF0ZSBlYWNoIHJlbmRlcmluZyBhbmQgYXZvaWQgYmVpbmcgcHJvY2Vzc2VkIGFzIGJhdGNoZWQuXG5cbiAgICAgICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBlcmZvcm1FbnRlcihtb3VudGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcmZvcm1FeGl0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgJiYgdGhpcy5zdGF0ZS5zdGF0dXMgPT09IEVYSVRFRCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogVU5NT1VOVEVEXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FbnRlciA9IGZ1bmN0aW9uIHBlcmZvcm1FbnRlcihtb3VudGluZykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGVudGVyID0gdGhpcy5wcm9wcy5lbnRlcjtcbiAgICB2YXIgYXBwZWFyaW5nID0gdGhpcy5jb250ZXh0ID8gdGhpcy5jb250ZXh0LmlzTW91bnRpbmcgOiBtb3VudGluZztcblxuICAgIHZhciBfcmVmMiA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFthcHBlYXJpbmddIDogW1JlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpLCBhcHBlYXJpbmddLFxuICAgICAgICBtYXliZU5vZGUgPSBfcmVmMlswXSxcbiAgICAgICAgbWF5YmVBcHBlYXJpbmcgPSBfcmVmMlsxXTtcblxuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgZW50ZXJUaW1lb3V0ID0gYXBwZWFyaW5nID8gdGltZW91dHMuYXBwZWFyIDogdGltZW91dHMuZW50ZXI7IC8vIG5vIGVudGVyIGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVOVEVSRURcbiAgICAvLyBpZiB3ZSBhcmUgbW91bnRpbmcgYW5kIHJ1bm5pbmcgdGhpcyBpdCBtZWFucyBhcHBlYXIgX211c3RfIGJlIHNldFxuXG4gICAgaWYgKCFtb3VudGluZyAmJiAhZW50ZXIgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuXG4gICAgICBfdGhpczIub25UcmFuc2l0aW9uRW5kKGVudGVyVGltZW91dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FeGl0ID0gZnVuY3Rpb24gcGVyZm9ybUV4aXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgZXhpdCA9IHRoaXMucHJvcHMuZXhpdDtcbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIG1heWJlTm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBubyBleGl0IGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVYSVRFRFxuXG4gICAgaWYgKCFleGl0IHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuXG4gICAgICBfdGhpczMub25UcmFuc2l0aW9uRW5kKHRpbWVvdXRzLmV4aXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxOZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBjYW5jZWxOZXh0Q2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMubmV4dENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwoKTtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNhZmVTZXRTdGF0ZSA9IGZ1bmN0aW9uIHNhZmVTZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgdGhlcmUgYXJlIHdlaXJkIHJhY2UgY29uZGl0aW9ucyB3aXRoXG4gICAgLy8gc2V0U3RhdGUgY2FsbGJhY2tzIGFuZCB1bm1vdW50aW5nIGluIHRlc3RpbmcsIHNvIGFsd2F5cyBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIHdlIGNhbiBjYW5jZWwgYW55IHBlbmRpbmcgc2V0U3RhdGUgY2FsbGJhY2tzIGFmdGVyIHdlIHVubW91bnQuXG4gICAgY2FsbGJhY2sgPSB0aGlzLnNldE5leHRDYWxsYmFjayhjYWxsYmFjayk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0TmV4dENhbGxiYWNrID0gZnVuY3Rpb24gc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpczQubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMubmV4dENhbGxiYWNrO1xuICB9O1xuXG4gIF9wcm90by5vblRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQodGltZW91dCwgaGFuZGxlcikge1xuICAgIHRoaXMuc2V0TmV4dENhbGxiYWNrKGhhbmRsZXIpO1xuICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICB2YXIgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciA9IHRpbWVvdXQgPT0gbnVsbCAmJiAhdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcjtcblxuICAgIGlmICghbm9kZSB8fCBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcikge1xuICAgICAgdmFyIF9yZWYzID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW3RoaXMubmV4dENhbGxiYWNrXSA6IFtub2RlLCB0aGlzLm5leHRDYWxsYmFja10sXG4gICAgICAgICAgbWF5YmVOb2RlID0gX3JlZjNbMF0sXG4gICAgICAgICAgbWF5YmVOZXh0Q2FsbGJhY2sgPSBfcmVmM1sxXTtcblxuICAgICAgdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcihtYXliZU5vZGUsIG1heWJlTmV4dENhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCB0aW1lb3V0KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICBpZiAoc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIF9pbiA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBfbW91bnRPbkVudGVyID0gX3RoaXMkcHJvcHMubW91bnRPbkVudGVyLFxuICAgICAgICBfdW5tb3VudE9uRXhpdCA9IF90aGlzJHByb3BzLnVubW91bnRPbkV4aXQsXG4gICAgICAgIF9hcHBlYXIgPSBfdGhpcyRwcm9wcy5hcHBlYXIsXG4gICAgICAgIF9lbnRlciA9IF90aGlzJHByb3BzLmVudGVyLFxuICAgICAgICBfZXhpdCA9IF90aGlzJHByb3BzLmV4aXQsXG4gICAgICAgIF90aW1lb3V0ID0gX3RoaXMkcHJvcHMudGltZW91dCxcbiAgICAgICAgX2FkZEVuZExpc3RlbmVyID0gX3RoaXMkcHJvcHMuYWRkRW5kTGlzdGVuZXIsXG4gICAgICAgIF9vbkVudGVyID0gX3RoaXMkcHJvcHMub25FbnRlcixcbiAgICAgICAgX29uRW50ZXJpbmcgPSBfdGhpcyRwcm9wcy5vbkVudGVyaW5nLFxuICAgICAgICBfb25FbnRlcmVkID0gX3RoaXMkcHJvcHMub25FbnRlcmVkLFxuICAgICAgICBfb25FeGl0ID0gX3RoaXMkcHJvcHMub25FeGl0LFxuICAgICAgICBfb25FeGl0aW5nID0gX3RoaXMkcHJvcHMub25FeGl0aW5nLFxuICAgICAgICBfb25FeGl0ZWQgPSBfdGhpcyRwcm9wcy5vbkV4aXRlZCxcbiAgICAgICAgX25vZGVSZWYgPSBfdGhpcyRwcm9wcy5ub2RlUmVmLFxuICAgICAgICBjaGlsZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIiwgXCJtb3VudE9uRW50ZXJcIiwgXCJ1bm1vdW50T25FeGl0XCIsIFwiYXBwZWFyXCIsIFwiZW50ZXJcIiwgXCJleGl0XCIsIFwidGltZW91dFwiLCBcImFkZEVuZExpc3RlbmVyXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRpbmdcIiwgXCJvbkV4aXRlZFwiLCBcIm5vZGVSZWZcIl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHN0YXR1cywgY2hpbGRQcm9wcykgOiBSZWFjdC5jbG9uZUVsZW1lbnQoUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbiksIGNoaWxkUHJvcHMpKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb24uY29udGV4dFR5cGUgPSBUcmFuc2l0aW9uR3JvdXBDb250ZXh0O1xuVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBBIFJlYWN0IHJlZmVyZW5jZSB0byBET00gZWxlbWVudCB0aGF0IG5lZWQgdG8gdHJhbnNpdGlvbjpcbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxMTI3MTMwLzQ2NzE5MzJcbiAgICpcbiAgICogICAtIFdoZW4gYG5vZGVSZWZgIHByb3AgaXMgdXNlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQgdG8gY2FsbGJhY2sgZnVuY3Rpb25zXG4gICAqICAgICAgKGUuZy4gYG9uRW50ZXJgKSBiZWNhdXNlIHVzZXIgYWxyZWFkeSBoYXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgbm9kZS5cbiAgICogICAtIFdoZW4gY2hhbmdpbmcgYGtleWAgcHJvcCBvZiBgVHJhbnNpdGlvbmAgaW4gYSBgVHJhbnNpdGlvbkdyb3VwYCBhIG5ld1xuICAgKiAgICAgYG5vZGVSZWZgIG5lZWQgdG8gYmUgcHJvdmlkZWQgdG8gYFRyYW5zaXRpb25gIHdpdGggY2hhbmdlZCBga2V5YCBwcm9wXG4gICAqICAgICAoc2VlXG4gICAqICAgICBbdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi8xMzQzNWY4OTdiM2FiNzFmNmUxOWQ3MjRmMTQ1NTk2ZjU5MTA1ODFjL3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzI0wzNjItTDQzNykpLlxuICAgKi9cbiAgbm9kZVJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBQcm9wVHlwZXMuYW55IDogZnVuY3Rpb24gKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHByb3BWYWx1ZVtrZXldO1xuICAgICAgcmV0dXJuIFByb3BUeXBlcy5pbnN0YW5jZU9mKHZhbHVlICYmICdvd25lckRvY3VtZW50JyBpbiB2YWx1ZSA/IHZhbHVlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuRWxlbWVudCA6IEVsZW1lbnQpKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpO1xuICAgIH1cbiAgfSksXG5cbiAgLyoqXG4gICAqIEEgYGZ1bmN0aW9uYCBjaGlsZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgUmVhY3QgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpc1xuICAgKiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCB0cmFuc2l0aW9uIHN0YXR1cyAoYCdlbnRlcmluZydgLCBgJ2VudGVyZWQnYCxcbiAgICogYCdleGl0aW5nJ2AsIGAnZXhpdGVkJ2ApLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHBseSBjb250ZXh0XG4gICAqIHNwZWNpZmljIHByb3BzIHRvIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogPFRyYW5zaXRpb24gaW49e3RoaXMuc3RhdGUuaW59IHRpbWVvdXQ9ezE1MH0+XG4gICAqICAge3N0YXRlID0+IChcbiAgICogICAgIDxNeUNvbXBvbmVudCBjbGFzc05hbWU9e2BmYWRlIGZhZGUtJHtzdGF0ZX1gfSAvPlxuICAgKiAgICl9XG4gICAqIDwvVHJhbnNpdGlvbj5cbiAgICogYGBgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIGNvbXBvbmVudDsgdHJpZ2dlcnMgdGhlIGVudGVyIG9yIGV4aXQgc3RhdGVzXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBtb3VudGVkIGltbWVkaWF0ZWx5IGFsb25nIHdpdGhcbiAgICogdGhlIHBhcmVudCBgVHJhbnNpdGlvbmAgY29tcG9uZW50LiBJZiB5b3Ugd2FudCB0byBcImxhenkgbW91bnRcIiB0aGUgY29tcG9uZW50IG9uIHRoZVxuICAgKiBmaXJzdCBgaW49e3RydWV9YCB5b3UgY2FuIHNldCBgbW91bnRPbkVudGVyYC4gQWZ0ZXIgdGhlIGZpcnN0IGVudGVyIHRyYW5zaXRpb24gdGhlIGNvbXBvbmVudCB3aWxsIHN0YXlcbiAgICogbW91bnRlZCwgZXZlbiBvbiBcImV4aXRlZFwiLCB1bmxlc3MgeW91IGFsc28gc3BlY2lmeSBgdW5tb3VudE9uRXhpdGAuXG4gICAqL1xuICBtb3VudE9uRW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgc3RheXMgbW91bnRlZCBhZnRlciBpdCByZWFjaGVzIHRoZSBgJ2V4aXRlZCdgIHN0YXRlLlxuICAgKiBTZXQgYHVubW91bnRPbkV4aXRgIGlmIHlvdSdkIHByZWZlciB0byB1bm1vdW50IHRoZSBjb21wb25lbnQgYWZ0ZXIgaXQgZmluaXNoZXMgZXhpdGluZy5cbiAgICovXG4gIHVubW91bnRPbkV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgZG9lcyBub3QgcGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuXG4gICAqIGl0IGZpcnN0IG1vdW50cywgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgYGluYC4gSWYgeW91IHdhbnQgdGhpc1xuICAgKiBiZWhhdmlvciwgc2V0IGJvdGggYGFwcGVhcmAgYW5kIGBpbmAgdG8gYHRydWVgLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiB0aGVyZSBhcmUgbm8gc3BlY2lhbCBhcHBlYXIgc3RhdGVzIGxpa2UgYGFwcGVhcmluZ2AvYGFwcGVhcmVkYCwgdGhpcyBwcm9wXG4gICAqID4gb25seSBhZGRzIGFuIGFkZGl0aW9uYWwgZW50ZXIgdHJhbnNpdGlvbi4gSG93ZXZlciwgaW4gdGhlXG4gICAqID4gYDxDU1NUcmFuc2l0aW9uPmAgY29tcG9uZW50IHRoYXQgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiBkb2VzIHJlc3VsdCBpblxuICAgKiA+IGFkZGl0aW9uYWwgYC5hcHBlYXItKmAgY2xhc3NlcywgdGhhdCB3YXkgeW91IGNhbiBjaG9vc2UgdG8gc3R5bGUgaXRcbiAgICogPiBkaWZmZXJlbnRseS5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVudGVyIHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBleGl0IHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBSZXF1aXJlZCB1bmxlc3MgYGFkZEVuZExpc3RlbmVyYCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9uczpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9ezUwMH1cbiAgICogYGBgXG4gICAqXG4gICAqIG9yIGluZGl2aWR1YWxseTpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9e3tcbiAgICogIGFwcGVhcjogNTAwLFxuICAgKiAgZW50ZXI6IDMwMCxcbiAgICogIGV4aXQ6IDUwMCxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIC0gYGFwcGVhcmAgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBlbnRlcmBcbiAgICogLSBgZW50ZXJgIGRlZmF1bHRzIHRvIGAwYFxuICAgKiAtIGBleGl0YCBkZWZhdWx0cyB0byBgMGBcbiAgICpcbiAgICogQHR5cGUge251bWJlciB8IHsgZW50ZXI/OiBudW1iZXIsIGV4aXQ/OiBudW1iZXIsIGFwcGVhcj86IG51bWJlciB9fVxuICAgKi9cbiAgdGltZW91dDogZnVuY3Rpb24gdGltZW91dChwcm9wcykge1xuICAgIHZhciBwdCA9IHRpbWVvdXRzU2hhcGU7XG4gICAgaWYgKCFwcm9wcy5hZGRFbmRMaXN0ZW5lcikgcHQgPSBwdC5pc1JlcXVpcmVkO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHB0LmFwcGx5KHZvaWQgMCwgW3Byb3BzXS5jb25jYXQoYXJncykpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmdcbiAgICogRE9NIG5vZGUgYW5kIGEgYGRvbmVgIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiB7XG4gICAqICAgLy8gdXNlIHRoZSBjc3MgdHJhbnNpdGlvbmVuZCBldmVudCB0byBtYXJrIHRoZSBmaW5pc2ggb2YgYSB0cmFuc2l0aW9uXG4gICAqICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZG9uZSwgZmFsc2UpO1xuICAgKiB9fVxuICAgKiBgYGBcbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTsgLy8gTmFtZSB0aGUgZnVuY3Rpb24gc28gaXQgaXMgY2xlYXJlciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuXG5mdW5jdGlvbiBub29wKCkge31cblxuVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGluOiBmYWxzZSxcbiAgbW91bnRPbkVudGVyOiBmYWxzZSxcbiAgdW5tb3VudE9uRXhpdDogZmFsc2UsXG4gIGFwcGVhcjogZmFsc2UsXG4gIGVudGVyOiB0cnVlLFxuICBleGl0OiB0cnVlLFxuICBvbkVudGVyOiBub29wLFxuICBvbkVudGVyaW5nOiBub29wLFxuICBvbkVudGVyZWQ6IG5vb3AsXG4gIG9uRXhpdDogbm9vcCxcbiAgb25FeGl0aW5nOiBub29wLFxuICBvbkV4aXRlZDogbm9vcFxufTtcblRyYW5zaXRpb24uVU5NT1VOVEVEID0gVU5NT1VOVEVEO1xuVHJhbnNpdGlvbi5FWElURUQgPSBFWElURUQ7XG5UcmFuc2l0aW9uLkVOVEVSSU5HID0gRU5URVJJTkc7XG5UcmFuc2l0aW9uLkVOVEVSRUQgPSBFTlRFUkVEO1xuVHJhbnNpdGlvbi5FWElUSU5HID0gRVhJVElORztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb247IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBhZGRPbmVDbGFzcyBmcm9tICdkb20taGVscGVycy9hZGRDbGFzcyc7XG5pbXBvcnQgcmVtb3ZlT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvcmVtb3ZlQ2xhc3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uIGZyb20gJy4vVHJhbnNpdGlvbic7XG5pbXBvcnQgeyBjbGFzc05hbWVzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcblxudmFyIF9hZGRDbGFzcyA9IGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIGNsYXNzZXMpIHtcbiAgcmV0dXJuIG5vZGUgJiYgY2xhc3NlcyAmJiBjbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBhZGRPbmVDbGFzcyhub2RlLCBjKTtcbiAgfSk7XG59O1xuXG52YXIgcmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbiByZW1vdmVDbGFzcyhub2RlLCBjbGFzc2VzKSB7XG4gIHJldHVybiBub2RlICYmIGNsYXNzZXMgJiYgY2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gcmVtb3ZlT25lQ2xhc3Mobm9kZSwgYyk7XG4gIH0pO1xufTtcbi8qKlxuICogQSB0cmFuc2l0aW9uIGNvbXBvbmVudCBpbnNwaXJlZCBieSB0aGUgZXhjZWxsZW50XG4gKiBbbmctYW5pbWF0ZV0oaHR0cHM6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nQW5pbWF0ZSkgbGlicmFyeSwgeW91IHNob3VsZFxuICogdXNlIGl0IGlmIHlvdSdyZSB1c2luZyBDU1MgdHJhbnNpdGlvbnMgb3IgYW5pbWF0aW9ucy4gSXQncyBidWlsdCB1cG9uIHRoZVxuICogW2BUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uKVxuICogY29tcG9uZW50LCBzbyBpdCBpbmhlcml0cyBhbGwgb2YgaXRzIHByb3BzLlxuICpcbiAqIGBDU1NUcmFuc2l0aW9uYCBhcHBsaWVzIGEgcGFpciBvZiBjbGFzcyBuYW1lcyBkdXJpbmcgdGhlIGBhcHBlYXJgLCBgZW50ZXJgLFxuICogYW5kIGBleGl0YCBzdGF0ZXMgb2YgdGhlIHRyYW5zaXRpb24uIFRoZSBmaXJzdCBjbGFzcyBpcyBhcHBsaWVkIGFuZCB0aGVuIGFcbiAqIHNlY29uZCBgKi1hY3RpdmVgIGNsYXNzIGluIG9yZGVyIHRvIGFjdGl2YXRlIHRoZSBDU1MgdHJhbnNpdGlvbi4gQWZ0ZXIgdGhlXG4gKiB0cmFuc2l0aW9uLCBtYXRjaGluZyBgKi1kb25lYCBjbGFzcyBuYW1lcyBhcmUgYXBwbGllZCB0byBwZXJzaXN0IHRoZVxuICogdHJhbnNpdGlvbiBzdGF0ZS5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPENTU1RyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17MjAwfSBjbGFzc05hbWVzPVwibXktbm9kZVwiPlxuICogICAgICAgICA8ZGl2PlxuICogICAgICAgICAgIHtcIkknbGwgcmVjZWl2ZSBteS1ub2RlLSogY2xhc3Nlc1wifVxuICogICAgICAgICA8L2Rpdj5cbiAqICAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGBpbmAgcHJvcCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY2hpbGQgY29tcG9uZW50IHdpbGwgZmlyc3QgcmVjZWl2ZVxuICogdGhlIGNsYXNzIGBleGFtcGxlLWVudGVyYCwgdGhlbiB0aGUgYGV4YW1wbGUtZW50ZXItYWN0aXZlYCB3aWxsIGJlIGFkZGVkIGluXG4gKiB0aGUgbmV4dCB0aWNrLiBgQ1NTVHJhbnNpdGlvbmAgW2ZvcmNlcyBhXG4gKiByZWZsb3ddKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi81MDA3MzAzZTcyOWE3NGJlNjZhMjFjM2UyMjA1ZTQ5MTY4MjE1MjRiL3NyYy9DU1NUcmFuc2l0aW9uLmpzI0wyMDgtTDIxNSlcbiAqIGJldHdlZW4gYmVmb3JlIGFkZGluZyB0aGUgYGV4YW1wbGUtZW50ZXItYWN0aXZlYC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgdHJpY2tcbiAqIGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhhbXBsZS1lbnRlcmAgYW5kXG4gKiBgZXhhbXBsZS1lbnRlci1hY3RpdmVgIGV2ZW4gdGhvdWdoIHRoZXkgd2VyZSBhZGRlZCBpbW1lZGlhdGVseSBvbmUgYWZ0ZXJcbiAqIGFub3RoZXIuIE1vc3Qgbm90YWJseSwgdGhpcyBpcyB3aGF0IG1ha2VzIGl0IHBvc3NpYmxlIGZvciB1cyB0byBhbmltYXRlXG4gKiBfYXBwZWFyYW5jZV8uXG4gKlxuICogYGBgY3NzXG4gKiAubXktbm9kZS1lbnRlciB7XG4gKiAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAubXktbm9kZS1lbnRlci1hY3RpdmUge1xuICogICBvcGFjaXR5OiAxO1xuICogICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xuICogfVxuICogLm15LW5vZGUtZXhpdCB7XG4gKiAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAubXktbm9kZS1leGl0LWFjdGl2ZSB7XG4gKiAgIG9wYWNpdHk6IDA7XG4gKiAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgKi1hY3RpdmVgIGNsYXNzZXMgcmVwcmVzZW50IHdoaWNoIHN0eWxlcyB5b3Ugd2FudCB0byBhbmltYXRlICoqdG8qKiwgc28gaXQnc1xuICogaW1wb3J0YW50IHRvIGFkZCBgdHJhbnNpdGlvbmAgZGVjbGFyYXRpb24gb25seSB0byB0aGVtLCBvdGhlcndpc2UgdHJhbnNpdGlvbnNcbiAqIG1pZ2h0IG5vdCBiZWhhdmUgYXMgaW50ZW5kZWQhIFRoaXMgbWlnaHQgbm90IGJlIG9idmlvdXMgd2hlbiB0aGUgdHJhbnNpdGlvbnNcbiAqIGFyZSBzeW1tZXRyaWNhbCwgaS5lLiB3aGVuIGAqLWVudGVyLWFjdGl2ZWAgaXMgdGhlIHNhbWUgYXMgYCotZXhpdGAsIGxpa2UgaW5cbiAqIHRoZSBleGFtcGxlIGFib3ZlIChtaW51cyBgdHJhbnNpdGlvbmApLCBidXQgaXQgYmVjb21lcyBhcHBhcmVudCBpbiBtb3JlXG4gKiBjb21wbGV4IHRyYW5zaXRpb25zLlxuICpcbiAqICoqTm90ZSoqOiBJZiB5b3UncmUgdXNpbmcgdGhlXG4gKiBbYGFwcGVhcmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uI1RyYW5zaXRpb24tcHJvcC1hcHBlYXIpXG4gKiBwcm9wLCBtYWtlIHN1cmUgdG8gZGVmaW5lIHN0eWxlcyBmb3IgYC5hcHBlYXItKmAgY2xhc3NlcyBhcyB3ZWxsLlxuICovXG5cblxudmFyIENTU1RyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoQ1NTVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQ1NTVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5hcHBsaWVkQ2xhc3NlcyA9IHtcbiAgICAgIGFwcGVhcjoge30sXG4gICAgICBlbnRlcjoge30sXG4gICAgICBleGl0OiB7fVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnRbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50WzFdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdleGl0Jyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJywgJ2Jhc2UnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcihtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmluZyA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MiA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDJbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MlsxXTtcblxuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdhY3RpdmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXJpbmcpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmVkID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQzID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50M1swXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQzWzFdO1xuXG4gICAgICB2YXIgdHlwZSA9IGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJztcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCB0eXBlKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgdHlwZSwgJ2RvbmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXJlZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdCA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ0ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ0WzBdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdhcHBlYXInKTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZW50ZXInKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYmFzZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0KSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXRpbmcgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NSA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NVswXTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXRpbmcpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0aW5nKG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdGVkID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDYgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDZbMF07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2V4aXQnKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnZG9uZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMubm9kZVJlZiA/IFtfdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQsIG1heWJlTm9kZV0gLy8gaGVyZSBgbWF5YmVOb2RlYCBpcyBhY3R1YWxseSBgYXBwZWFyaW5nYFxuICAgICAgOiBbbWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZ107XG4gICAgfTtcblxuICAgIF90aGlzLmdldENsYXNzTmFtZXMgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgdmFyIGNsYXNzTmFtZXMgPSBfdGhpcy5wcm9wcy5jbGFzc05hbWVzO1xuICAgICAgdmFyIGlzU3RyaW5nQ2xhc3NOYW1lcyA9IHR5cGVvZiBjbGFzc05hbWVzID09PSAnc3RyaW5nJztcbiAgICAgIHZhciBwcmVmaXggPSBpc1N0cmluZ0NsYXNzTmFtZXMgJiYgY2xhc3NOYW1lcyA/IGNsYXNzTmFtZXMgKyBcIi1cIiA6ICcnO1xuICAgICAgdmFyIGJhc2VDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBcIlwiICsgcHJlZml4ICsgdHlwZSA6IGNsYXNzTmFtZXNbdHlwZV07XG4gICAgICB2YXIgYWN0aXZlQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gYmFzZUNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiIDogY2xhc3NOYW1lc1t0eXBlICsgXCJBY3RpdmVcIl07XG4gICAgICB2YXIgZG9uZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IGJhc2VDbGFzc05hbWUgKyBcIi1kb25lXCIgOiBjbGFzc05hbWVzW3R5cGUgKyBcIkRvbmVcIl07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlQ2xhc3NOYW1lOiBiYXNlQ2xhc3NOYW1lLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWU6IGFjdGl2ZUNsYXNzTmFtZSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZTogZG9uZUNsYXNzTmFtZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IENTU1RyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5hZGRDbGFzcyA9IGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIHR5cGUsIHBoYXNlKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lcyh0eXBlKVtwaGFzZSArIFwiQ2xhc3NOYW1lXCJdO1xuXG4gICAgdmFyIF90aGlzJGdldENsYXNzTmFtZXMgPSB0aGlzLmdldENsYXNzTmFtZXMoJ2VudGVyJyksXG4gICAgICAgIGRvbmVDbGFzc05hbWUgPSBfdGhpcyRnZXRDbGFzc05hbWVzLmRvbmVDbGFzc05hbWU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2FwcGVhcicgJiYgcGhhc2UgPT09ICdkb25lJyAmJiBkb25lQ2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBkb25lQ2xhc3NOYW1lO1xuICAgIH0gLy8gVGhpcyBpcyB0byBmb3JjZSBhIHJlcGFpbnQsXG4gICAgLy8gd2hpY2ggaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHRyYW5zaXRpb24gc3R5bGVzIHdoZW4gYWRkaW5nIGEgY2xhc3MgbmFtZS5cblxuXG4gICAgaWYgKHBoYXNlID09PSAnYWN0aXZlJykge1xuICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgIH1cblxuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV1bcGhhc2VdID0gY2xhc3NOYW1lO1xuXG4gICAgICBfYWRkQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZUNsYXNzZXMgPSBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKG5vZGUsIHR5cGUpIHtcbiAgICB2YXIgX3RoaXMkYXBwbGllZENsYXNzZXMkID0gdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSxcbiAgICAgICAgYmFzZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5iYXNlLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYWN0aXZlLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmRvbmU7XG4gICAgdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSA9IHt9O1xuXG4gICAgaWYgKGJhc2VDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGJhc2VDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGRvbmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGRvbmVDbGFzc05hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF8gPSBfdGhpcyRwcm9wcy5jbGFzc05hbWVzLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjbGFzc05hbWVzXCJdKTtcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIG9uRW50ZXI6IHRoaXMub25FbnRlcixcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5vbkVudGVyZWQsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLm9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQ6IHRoaXMub25FeGl0LFxuICAgICAgb25FeGl0aW5nOiB0aGlzLm9uRXhpdGluZyxcbiAgICAgIG9uRXhpdGVkOiB0aGlzLm9uRXhpdGVkXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiBDU1NUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5DU1NUcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lczogJydcbn07XG5DU1NUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IF9leHRlbmRzKHt9LCBUcmFuc2l0aW9uLnByb3BUeXBlcywge1xuICAvKipcbiAgICogVGhlIGFuaW1hdGlvbiBjbGFzc05hbWVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudCBhcyBpdCBhcHBlYXJzLCBlbnRlcnMsXG4gICAqIGV4aXRzIG9yIGhhcyBmaW5pc2hlZCB0aGUgdHJhbnNpdGlvbi4gQSBzaW5nbGUgbmFtZSBjYW4gYmUgcHJvdmlkZWQsIHdoaWNoXG4gICAqIHdpbGwgYmUgc3VmZml4ZWQgZm9yIGVhY2ggc3RhZ2UsIGUuZy4gYGNsYXNzTmFtZXM9XCJmYWRlXCJgIGFwcGxpZXM6XG4gICAqXG4gICAqIC0gYGZhZGUtYXBwZWFyYCwgYGZhZGUtYXBwZWFyLWFjdGl2ZWAsIGBmYWRlLWFwcGVhci1kb25lYFxuICAgKiAtIGBmYWRlLWVudGVyYCwgYGZhZGUtZW50ZXItYWN0aXZlYCwgYGZhZGUtZW50ZXItZG9uZWBcbiAgICogLSBgZmFkZS1leGl0YCwgYGZhZGUtZXhpdC1hY3RpdmVgLCBgZmFkZS1leGl0LWRvbmVgXG4gICAqXG4gICAqIEEgZmV3IGRldGFpbHMgdG8gbm90ZSBhYm91dCBob3cgdGhlc2UgY2xhc3NlcyBhcmUgYXBwbGllZDpcbiAgICpcbiAgICogMS4gVGhleSBhcmUgX2pvaW5lZF8gd2l0aCB0aGUgb25lcyB0aGF0IGFyZSBhbHJlYWR5IGRlZmluZWQgb24gdGhlIGNoaWxkXG4gICAqICAgIGNvbXBvbmVudCwgc28gaWYgeW91IHdhbnQgdG8gYWRkIHNvbWUgYmFzZSBzdHlsZXMsIHlvdSBjYW4gdXNlXG4gICAqICAgIGBjbGFzc05hbWVgIHdpdGhvdXQgd29ycnlpbmcgdGhhdCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAqXG4gICAqIDIuIElmIHRoZSB0cmFuc2l0aW9uIGNvbXBvbmVudCBtb3VudHMgd2l0aCBgaW49e2ZhbHNlfWAsIG5vIGNsYXNzZXMgYXJlXG4gICAqICAgIGFwcGxpZWQgeWV0LiBZb3UgbWlnaHQgYmUgZXhwZWN0aW5nIGAqLWV4aXQtZG9uZWAsIGJ1dCBpZiB5b3UgdGhpbmtcbiAgICogICAgYWJvdXQgaXQsIGEgY29tcG9uZW50IGNhbm5vdCBmaW5pc2ggZXhpdGluZyBpZiBpdCBoYXNuJ3QgZW50ZXJlZCB5ZXQuXG4gICAqXG4gICAqIDIuIGBmYWRlLWFwcGVhci1kb25lYCBhbmQgYGZhZGUtZW50ZXItZG9uZWAgd2lsbCBfYm90aF8gYmUgYXBwbGllZC4gVGhpc1xuICAgKiAgICBhbGxvd3MgeW91IHRvIGRlZmluZSBkaWZmZXJlbnQgYmVoYXZpb3IgZm9yIHdoZW4gYXBwZWFyaW5nIGlzIGRvbmUgYW5kXG4gICAqICAgIHdoZW4gcmVndWxhciBlbnRlcmluZyBpcyBkb25lLCB1c2luZyBzZWxlY3RvcnMgbGlrZVxuICAgKiAgICBgLmZhZGUtZW50ZXItZG9uZTpub3QoLmZhZGUtYXBwZWFyLWRvbmUpYC4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBhcHBseVxuICAgKiAgICBhbiBlcGljIGVudHJhbmNlIGFuaW1hdGlvbiB3aGVuIGVsZW1lbnQgZmlyc3QgYXBwZWFycyBpbiB0aGUgRE9NIHVzaW5nXG4gICAqICAgIFtBbmltYXRlLmNzc10oaHR0cHM6Ly9kYW5lZGVuLmdpdGh1Yi5pby9hbmltYXRlLmNzcy8pLiBPdGhlcndpc2UgeW91IGNhblxuICAgKiAgICBzaW1wbHkgdXNlIGBmYWRlLWVudGVyLWRvbmVgIGZvciBkZWZpbmluZyBib3RoIGNhc2VzLlxuICAgKlxuICAgKiBFYWNoIGluZGl2aWR1YWwgY2xhc3NOYW1lcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgaW5kZXBlbmRlbnRseSBsaWtlOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGFzc05hbWVzPXt7XG4gICAqICBhcHBlYXI6ICdteS1hcHBlYXInLFxuICAgKiAgYXBwZWFyQWN0aXZlOiAnbXktYWN0aXZlLWFwcGVhcicsXG4gICAqICBhcHBlYXJEb25lOiAnbXktZG9uZS1hcHBlYXInLFxuICAgKiAgZW50ZXI6ICdteS1lbnRlcicsXG4gICAqICBlbnRlckFjdGl2ZTogJ215LWFjdGl2ZS1lbnRlcicsXG4gICAqICBlbnRlckRvbmU6ICdteS1kb25lLWVudGVyJyxcbiAgICogIGV4aXQ6ICdteS1leGl0JyxcbiAgICogIGV4aXRBY3RpdmU6ICdteS1hY3RpdmUtZXhpdCcsXG4gICAqICBleGl0RG9uZTogJ215LWRvbmUtZXhpdCcsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBzZXQgdGhlc2UgY2xhc3NlcyB1c2luZyBDU1MgTW9kdWxlczpcbiAgICpcbiAgICogYGBganNcbiAgICogaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5jc3MnO1xuICAgKiBgYGBcbiAgICpcbiAgICogeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGNhbWVsQ2FzZSBpbiB5b3VyIENTUyBmaWxlLCB0aGF0IHdheSBjb3VsZCBzaW1wbHlcbiAgICogc3ByZWFkIHRoZW0gaW5zdGVhZCBvZiBsaXN0aW5nIHRoZW0gb25lIGJ5IG9uZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17eyAuLi5zdHlsZXMgfX1cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB7XG4gICAqICBhcHBlYXI/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJEb25lPzogc3RyaW5nLFxuICAgKiAgZW50ZXI/OiBzdHJpbmcsXG4gICAqICBlbnRlckFjdGl2ZT86IHN0cmluZyxcbiAgICogIGVudGVyRG9uZT86IHN0cmluZyxcbiAgICogIGV4aXQ/OiBzdHJpbmcsXG4gICAqICBleGl0QWN0aXZlPzogc3RyaW5nLFxuICAgKiAgZXhpdERvbmU/OiBzdHJpbmcsXG4gICAqIH19XG4gICAqL1xuICBjbGFzc05hbWVzOiBjbGFzc05hbWVzU2hhcGUsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3IgJ2FwcGVhcicgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlci1hY3RpdmUnIG9yXG4gICAqICdhcHBlYXItYWN0aXZlJyBjbGFzcyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyJyBvclxuICAgKiAnYXBwZWFyJyBjbGFzc2VzIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBkb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzcyBpc1xuICAgKiBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQtYWN0aXZlJyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQnIGNsYXNzZXNcbiAgICogYXJlICoqcmVtb3ZlZCoqIGFuZCB0aGUgYGV4aXQtZG9uZWAgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIERPTSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59KSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgQ1NTVHJhbnNpdGlvbjsiLCJpbXBvcnQgaGFzQ2xhc3MgZnJvbSAnLi9oYXNDbGFzcyc7XG4vKipcbiAqIEFkZHMgYSBDU1MgY2xhc3MgdG8gYSBnaXZlbiBlbGVtZW50LlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtlbHNlIGlmICghaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSkgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUgKyBcIiBcIiArIGNsYXNzTmFtZTtlbHNlIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIChlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8ICcnKSArIFwiIFwiICsgY2xhc3NOYW1lKTtcbn0iLCIvKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIGVsZW1lbnQgaGFzIGEgQ1NTIGNsYXNzLlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuICEhY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXCIgXCIgKyAoZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCBlbGVtZW50LmNsYXNzTmFtZSkgKyBcIiBcIikuaW5kZXhPZihcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiKSAhPT0gLTE7XG59IiwiaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEdpdmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYCwgcmV0dXJuIGFuIG9iamVjdCBtYXBwaW5nIGtleSB0byBjaGlsZC5cbiAqXG4gKiBAcGFyYW0geyp9IGNoaWxkcmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYFxuICogQHJldHVybiB7b2JqZWN0fSBNYXBwaW5nIG9mIGtleSB0byBjaGlsZFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGlsZE1hcHBpbmcoY2hpbGRyZW4sIG1hcEZuKSB7XG4gIHZhciBtYXBwZXIgPSBmdW5jdGlvbiBtYXBwZXIoY2hpbGQpIHtcbiAgICByZXR1cm4gbWFwRm4gJiYgaXNWYWxpZEVsZW1lbnQoY2hpbGQpID8gbWFwRm4oY2hpbGQpIDogY2hpbGQ7XG4gIH07XG5cbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmIChjaGlsZHJlbikgQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjO1xuICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIC8vIHJ1biB0aGUgbWFwIGZ1bmN0aW9uIGhlcmUgaW5zdGVhZCBzbyB0aGF0IHRoZSBrZXkgaXMgdGhlIGNvbXB1dGVkIG9uZVxuICAgIHJlc3VsdFtjaGlsZC5rZXldID0gbWFwcGVyKGNoaWxkKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFdoZW4geW91J3JlIGFkZGluZyBvciByZW1vdmluZyBjaGlsZHJlbiBzb21lIG1heSBiZSBhZGRlZCBvciByZW1vdmVkIGluIHRoZVxuICogc2FtZSByZW5kZXIgcGFzcy4gV2Ugd2FudCB0byBzaG93ICpib3RoKiBzaW5jZSB3ZSB3YW50IHRvIHNpbXVsdGFuZW91c2x5XG4gKiBhbmltYXRlIGVsZW1lbnRzIGluIGFuZCBvdXQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBwcmV2aW91cyBzZXQgb2Yga2V5c1xuICogYW5kIGEgbmV3IHNldCBvZiBrZXlzIGFuZCBtZXJnZXMgdGhlbSB3aXRoIGl0cyBiZXN0IGd1ZXNzIG9mIHRoZSBjb3JyZWN0XG4gKiBvcmRlcmluZy4gSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZXhwb3NlIHNvbWUgb2YgdGhlIHV0aWxpdGllcyBpblxuICogUmVhY3RNdWx0aUNoaWxkIHRvIG1ha2UgdGhpcyBlYXN5LCBidXQgZm9yIG5vdyBSZWFjdCBpdHNlbGYgZG9lcyBub3RcbiAqIGRpcmVjdGx5IGhhdmUgdGhpcyBjb25jZXB0IG9mIHRoZSB1bmlvbiBvZiBwcmV2Q2hpbGRyZW4gYW5kIG5leHRDaGlsZHJlblxuICogc28gd2UgaW1wbGVtZW50IGl0IGhlcmUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHByZXYgcHJldiBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0IG5leHQgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcmV0dXJuIHtvYmplY3R9IGEga2V5IHNldCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzIGluIGBwcmV2YCBhbmQgYWxsIGtleXNcbiAqIGluIGBuZXh0YCBpbiBhIHJlYXNvbmFibGUgb3JkZXIuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2LCBuZXh0KSB7XG4gIHByZXYgPSBwcmV2IHx8IHt9O1xuICBuZXh0ID0gbmV4dCB8fCB7fTtcblxuICBmdW5jdGlvbiBnZXRWYWx1ZUZvcktleShrZXkpIHtcbiAgICByZXR1cm4ga2V5IGluIG5leHQgPyBuZXh0W2tleV0gOiBwcmV2W2tleV07XG4gIH0gLy8gRm9yIGVhY2gga2V5IG9mIGBuZXh0YCwgdGhlIGxpc3Qgb2Yga2V5cyB0byBpbnNlcnQgYmVmb3JlIHRoYXQga2V5IGluXG4gIC8vIHRoZSBjb21iaW5lZCBsaXN0XG5cblxuICB2YXIgbmV4dEtleXNQZW5kaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHBlbmRpbmdLZXlzID0gW107XG5cbiAgZm9yICh2YXIgcHJldktleSBpbiBwcmV2KSB7XG4gICAgaWYgKHByZXZLZXkgaW4gbmV4dCkge1xuICAgICAgaWYgKHBlbmRpbmdLZXlzLmxlbmd0aCkge1xuICAgICAgICBuZXh0S2V5c1BlbmRpbmdbcHJldktleV0gPSBwZW5kaW5nS2V5cztcbiAgICAgICAgcGVuZGluZ0tleXMgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0tleXMucHVzaChwcmV2S2V5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIGNoaWxkTWFwcGluZyA9IHt9O1xuXG4gIGZvciAodmFyIG5leHRLZXkgaW4gbmV4dCkge1xuICAgIGlmIChuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0pIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBlbmRpbmdOZXh0S2V5ID0gbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldO1xuICAgICAgICBjaGlsZE1hcHBpbmdbbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdOZXh0S2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZE1hcHBpbmdbbmV4dEtleV0gPSBnZXRWYWx1ZUZvcktleShuZXh0S2V5KTtcbiAgfSAvLyBGaW5hbGx5LCBhZGQgdGhlIGtleXMgd2hpY2ggZGlkbid0IGFwcGVhciBiZWZvcmUgYW55IGtleSBpbiBgbmV4dGBcblxuXG4gIGZvciAoaSA9IDA7IGkgPCBwZW5kaW5nS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNoaWxkTWFwcGluZ1twZW5kaW5nS2V5c1tpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nS2V5c1tpXSk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRNYXBwaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wKGNoaWxkLCBwcm9wLCBwcm9wcykge1xuICByZXR1cm4gcHJvcHNbcHJvcF0gIT0gbnVsbCA/IHByb3BzW3Byb3BdIDogY2hpbGQucHJvcHNbcHJvcF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKHByb3BzLCBvbkV4aXRlZCkge1xuICByZXR1cm4gZ2V0Q2hpbGRNYXBwaW5nKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICBpbjogdHJ1ZSxcbiAgICAgIGFwcGVhcjogZ2V0UHJvcChjaGlsZCwgJ2FwcGVhcicsIHByb3BzKSxcbiAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBwcm9wcyksXG4gICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIHByb3BzKVxuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgb25FeGl0ZWQpIHtcbiAgdmFyIG5leHRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcobmV4dFByb3BzLmNoaWxkcmVuKTtcbiAgdmFyIGNoaWxkcmVuID0gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXZDaGlsZE1hcHBpbmcsIG5leHRDaGlsZE1hcHBpbmcpO1xuICBPYmplY3Qua2V5cyhjaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5ba2V5XTtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkKSkgcmV0dXJuO1xuICAgIHZhciBoYXNQcmV2ID0gKGtleSBpbiBwcmV2Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgaGFzTmV4dCA9IChrZXkgaW4gbmV4dENoaWxkTWFwcGluZyk7XG4gICAgdmFyIHByZXZDaGlsZCA9IHByZXZDaGlsZE1hcHBpbmdba2V5XTtcbiAgICB2YXIgaXNMZWF2aW5nID0gaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSAmJiAhcHJldkNoaWxkLnByb3BzLmluOyAvLyBpdGVtIGlzIG5ldyAoZW50ZXJpbmcpXG5cbiAgICBpZiAoaGFzTmV4dCAmJiAoIWhhc1ByZXYgfHwgaXNMZWF2aW5nKSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ2VudGVyaW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiB0cnVlLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFoYXNOZXh0ICYmIGhhc1ByZXYgJiYgIWlzTGVhdmluZykge1xuICAgICAgLy8gaXRlbSBpcyBvbGQgKGV4aXRpbmcpXG4gICAgICAvLyBjb25zb2xlLmxvZygnbGVhdmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgaW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGhhc05leHQgJiYgaGFzUHJldiAmJiBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpKSB7XG4gICAgICAvLyBpdGVtIGhhc24ndCBjaGFuZ2VkIHRyYW5zaXRpb24gc3RhdGVzXG4gICAgICAvLyBjb3B5IG92ZXIgdGhlIGxhc3QgdHJhbnNpdGlvbiBwcm9wcztcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd1bmNoYW5nZWQnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHByZXZDaGlsZC5wcm9wcy5pbixcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGdldENoaWxkTWFwcGluZywgZ2V0SW5pdGlhbENoaWxkTWFwcGluZywgZ2V0TmV4dENoaWxkTWFwcGluZyB9IGZyb20gJy4vdXRpbHMvQ2hpbGRNYXBwaW5nJztcblxudmFyIHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICByZXR1cm4gb2JqW2tdO1xuICB9KTtcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGNvbXBvbmVudDogJ2RpdicsXG4gIGNoaWxkRmFjdG9yeTogZnVuY3Rpb24gY2hpbGRGYWN0b3J5KGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG59O1xuLyoqXG4gKiBUaGUgYDxUcmFuc2l0aW9uR3JvdXA+YCBjb21wb25lbnQgbWFuYWdlcyBhIHNldCBvZiB0cmFuc2l0aW9uIGNvbXBvbmVudHNcbiAqIChgPFRyYW5zaXRpb24+YCBhbmQgYDxDU1NUcmFuc2l0aW9uPmApIGluIGEgbGlzdC4gTGlrZSB3aXRoIHRoZSB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnRzLCBgPFRyYW5zaXRpb25Hcm91cD5gIGlzIGEgc3RhdGUgbWFjaGluZSBmb3IgbWFuYWdpbmcgdGhlIG1vdW50aW5nXG4gKiBhbmQgdW5tb3VudGluZyBvZiBjb21wb25lbnRzIG92ZXIgdGltZS5cbiAqXG4gKiBDb25zaWRlciB0aGUgZXhhbXBsZSBiZWxvdy4gQXMgaXRlbXMgYXJlIHJlbW92ZWQgb3IgYWRkZWQgdG8gdGhlIFRvZG9MaXN0IHRoZVxuICogYGluYCBwcm9wIGlzIHRvZ2dsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YC5cbiAqXG4gKiBOb3RlIHRoYXQgYDxUcmFuc2l0aW9uR3JvdXA+YCAgZG9lcyBub3QgZGVmaW5lIGFueSBhbmltYXRpb24gYmVoYXZpb3IhXG4gKiBFeGFjdGx5IF9ob3dfIGEgbGlzdCBpdGVtIGFuaW1hdGVzIGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudC4gVGhpcyBtZWFucyB5b3UgY2FuIG1peCBhbmQgbWF0Y2ggYW5pbWF0aW9ucyBhY3Jvc3MgZGlmZmVyZW50IGxpc3RcbiAqIGl0ZW1zLlxuICovXG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbkdyb3VwLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uR3JvdXAocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcblxuICAgIHZhciBoYW5kbGVFeGl0ZWQgPSBfdGhpcy5oYW5kbGVFeGl0ZWQuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7IC8vIEluaXRpYWwgY2hpbGRyZW4gc2hvdWxkIGFsbCBiZSBlbnRlcmluZywgZGVwZW5kZW50IG9uIGFwcGVhclxuXG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgaGFuZGxlRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICBmaXJzdFJlbmRlcjogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIFRyYW5zaXRpb25Hcm91cC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBfcmVmKSB7XG4gICAgdmFyIHByZXZDaGlsZE1hcHBpbmcgPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICBoYW5kbGVFeGl0ZWQgPSBfcmVmLmhhbmRsZUV4aXRlZCxcbiAgICAgICAgZmlyc3RSZW5kZXIgPSBfcmVmLmZpcnN0UmVuZGVyO1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbjogZmlyc3RSZW5kZXIgPyBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKG5leHRQcm9wcywgaGFuZGxlRXhpdGVkKSA6IGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBoYW5kbGVFeGl0ZWQpLFxuICAgICAgZmlyc3RSZW5kZXI6IGZhbHNlXG4gICAgfTtcbiAgfSAvLyBub2RlIGlzIGB1bmRlZmluZWRgIHdoZW4gdXNlciBwcm92aWRlZCBgbm9kZVJlZmAgcHJvcFxuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUV4aXRlZCA9IGZ1bmN0aW9uIGhhbmRsZUV4aXRlZChjaGlsZCwgbm9kZSkge1xuICAgIHZhciBjdXJyZW50Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmIChjaGlsZC5rZXkgaW4gY3VycmVudENoaWxkTWFwcGluZykgcmV0dXJuO1xuXG4gICAgaWYgKGNoaWxkLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICBjaGlsZC5wcm9wcy5vbkV4aXRlZChub2RlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb3VudGVkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBfZXh0ZW5kcyh7fSwgc3RhdGUuY2hpbGRyZW4pO1xuXG4gICAgICAgIGRlbGV0ZSBjaGlsZHJlbltjaGlsZC5rZXldO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgQ29tcG9uZW50ID0gX3RoaXMkcHJvcHMuY29tcG9uZW50LFxuICAgICAgICBjaGlsZEZhY3RvcnkgPSBfdGhpcyRwcm9wcy5jaGlsZEZhY3RvcnksXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNvbXBvbmVudFwiLCBcImNoaWxkRmFjdG9yeVwiXSk7XG5cbiAgICB2YXIgY29udGV4dFZhbHVlID0gdGhpcy5zdGF0ZS5jb250ZXh0VmFsdWU7XG4gICAgdmFyIGNoaWxkcmVuID0gdmFsdWVzKHRoaXMuc3RhdGUuY2hpbGRyZW4pLm1hcChjaGlsZEZhY3RvcnkpO1xuICAgIGRlbGV0ZSBwcm9wcy5hcHBlYXI7XG4gICAgZGVsZXRlIHByb3BzLmVudGVyO1xuICAgIGRlbGV0ZSBwcm9wcy5leGl0O1xuXG4gICAgaWYgKENvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbkdyb3VwO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uR3JvdXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogYDxUcmFuc2l0aW9uR3JvdXA+YCByZW5kZXJzIGEgYDxkaXY+YCBieSBkZWZhdWx0LiBZb3UgY2FuIGNoYW5nZSB0aGlzXG4gICAqIGJlaGF2aW9yIGJ5IHByb3ZpZGluZyBhIGBjb21wb25lbnRgIHByb3AuXG4gICAqIElmIHlvdSB1c2UgUmVhY3QgdjE2KyBhbmQgd291bGQgbGlrZSB0byBhdm9pZCBhIHdyYXBwaW5nIGA8ZGl2PmAgZWxlbWVudFxuICAgKiB5b3UgY2FuIHBhc3MgaW4gYGNvbXBvbmVudD17bnVsbH1gLiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgd3JhcHBpbmcgZGl2XG4gICAqIGJvcmtzIHlvdXIgY3NzIHN0eWxlcy5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICogQSBzZXQgb2YgYDxUcmFuc2l0aW9uPmAgY29tcG9uZW50cywgdGhhdCBhcmUgdG9nZ2xlZCBgaW5gIGFuZCBvdXQgYXMgdGhleVxuICAgKiBsZWF2ZS4gdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgd2lsbCBpbmplY3Qgc3BlY2lmaWMgdHJhbnNpdGlvbiBwcm9wcywgc29cbiAgICogcmVtZW1iZXIgdG8gc3ByZWFkIHRoZW0gdGhyb3VnaCBpZiB5b3UgYXJlIHdyYXBwaW5nIHRoZSBgPFRyYW5zaXRpb24+YCBhc1xuICAgKiB3aXRoIG91ciBgPEZhZGU+YCBleGFtcGxlLlxuICAgKlxuICAgKiBXaGlsZSB0aGlzIGNvbXBvbmVudCBpcyBtZWFudCBmb3IgbXVsdGlwbGUgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYFxuICAgKiBjaGlsZHJlbiwgc29tZXRpbWVzIHlvdSBtYXkgd2FudCB0byBoYXZlIGEgc2luZ2xlIHRyYW5zaXRpb24gY2hpbGQgd2l0aFxuICAgKiBjb250ZW50IHRoYXQgeW91IHdhbnQgdG8gYmUgdHJhbnNpdGlvbmVkIG91dCBhbmQgaW4gd2hlbiB5b3UgY2hhbmdlIGl0XG4gICAqIChlLmcuIHJvdXRlcywgaW1hZ2VzIGV0Yy4pIEluIHRoYXQgY2FzZSB5b3UgY2FuIGNoYW5nZSB0aGUgYGtleWAgcHJvcCBvZlxuICAgKiB0aGUgdHJhbnNpdGlvbiBjaGlsZCBhcyB5b3UgY2hhbmdlIGl0cyBjb250ZW50LCB0aGlzIHdpbGwgY2F1c2VcbiAgICogYFRyYW5zaXRpb25Hcm91cGAgdG8gdHJhbnNpdGlvbiB0aGUgY2hpbGQgb3V0IGFuZCBiYWNrIGluLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGFwcGVhciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGVudGVyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBleGl0IGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBZb3UgbWF5IG5lZWQgdG8gYXBwbHkgcmVhY3RpdmUgdXBkYXRlcyB0byBhIGNoaWxkIGFzIGl0IGlzIGV4aXRpbmcuXG4gICAqIFRoaXMgaXMgZ2VuZXJhbGx5IGRvbmUgYnkgdXNpbmcgYGNsb25lRWxlbWVudGAgaG93ZXZlciBpbiB0aGUgY2FzZSBvZiBhbiBleGl0aW5nXG4gICAqIGNoaWxkIHRoZSBlbGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBhbmQgbm90IGFjY2Vzc2libGUgdG8gdGhlIGNvbnN1bWVyLlxuICAgKlxuICAgKiBJZiB5b3UgZG8gbmVlZCB0byB1cGRhdGUgYSBjaGlsZCBhcyBpdCBsZWF2ZXMgeW91IGNhbiBwcm92aWRlIGEgYGNoaWxkRmFjdG9yeWBcbiAgICogdG8gd3JhcCBldmVyeSBjaGlsZCwgZXZlbiB0aGUgb25lcyB0aGF0IGFyZSBsZWF2aW5nLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihjaGlsZDogUmVhY3RFbGVtZW50KSAtPiBSZWFjdEVsZW1lbnRcbiAgICovXG4gIGNoaWxkRmFjdG9yeTogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTtcblRyYW5zaXRpb25Hcm91cC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uR3JvdXA7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwIGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwJztcbi8qKlxuICogVGhlIGA8UmVwbGFjZVRyYW5zaXRpb24+YCBjb21wb25lbnQgaXMgYSBzcGVjaWFsaXplZCBgVHJhbnNpdGlvbmAgY29tcG9uZW50XG4gKiB0aGF0IGFuaW1hdGVzIGJldHdlZW4gdHdvIGNoaWxkcmVuLlxuICpcbiAqIGBgYGpzeFxuICogPFJlcGxhY2VUcmFuc2l0aW9uIGluPlxuICogICA8RmFkZT48ZGl2PkkgYXBwZWFyIGZpcnN0PC9kaXY+PC9GYWRlPlxuICogICA8RmFkZT48ZGl2PkkgcmVwbGFjZSB0aGUgYWJvdmU8L2Rpdj48L0ZhZGU+XG4gKiA8L1JlcGxhY2VUcmFuc2l0aW9uPlxuICogYGBgXG4gKi9cblxudmFyIFJlcGxhY2VUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFJlcGxhY2VUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBSZXBsYWNlVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgX2FyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBfYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KF9hcmdzKSkgfHwgdGhpcztcblxuICAgIF90aGlzLmhhbmRsZUVudGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcicsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlcmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXJpbmcnLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXJlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXJlZCcsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW41KSwgX2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0JywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjYpLCBfa2V5NiA9IDA7IF9rZXk2IDwgX2xlbjY7IF9rZXk2KyspIHtcbiAgICAgICAgYXJnc1tfa2V5Nl0gPSBhcmd1bWVudHNbX2tleTZdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXRpbmcnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTddID0gYXJndW1lbnRzW19rZXk3XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0ZWQnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFJlcGxhY2VUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlTGlmZWN5Y2xlID0gZnVuY3Rpb24gaGFuZGxlTGlmZWN5Y2xlKGhhbmRsZXIsIGlkeCwgb3JpZ2luYWxBcmdzKSB7XG4gICAgdmFyIF9jaGlsZCRwcm9wcztcblxuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgdmFyIGNoaWxkID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbilbaWR4XTtcbiAgICBpZiAoY2hpbGQucHJvcHNbaGFuZGxlcl0pIChfY2hpbGQkcHJvcHMgPSBjaGlsZC5wcm9wcylbaGFuZGxlcl0uYXBwbHkoX2NoaWxkJHByb3BzLCBvcmlnaW5hbEFyZ3MpO1xuXG4gICAgaWYgKHRoaXMucHJvcHNbaGFuZGxlcl0pIHtcbiAgICAgIHZhciBtYXliZU5vZGUgPSBjaGlsZC5wcm9wcy5ub2RlUmVmID8gdW5kZWZpbmVkIDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICB0aGlzLnByb3BzW2hhbmRsZXJdKG1heWJlTm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgaW5Qcm9wID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIl0pO1xuXG4gICAgdmFyIF9SZWFjdCRDaGlsZHJlbiR0b0FyciA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLFxuICAgICAgICBmaXJzdCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclswXSxcbiAgICAgICAgc2Vjb25kID0gX1JlYWN0JENoaWxkcmVuJHRvQXJyWzFdO1xuXG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRW50ZXJlZDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0O1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRpbmc7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdGVkO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXAsIHByb3BzLCBpblByb3AgPyBSZWFjdC5jbG9uZUVsZW1lbnQoZmlyc3QsIHtcbiAgICAgIGtleTogJ2ZpcnN0JyxcbiAgICAgIG9uRW50ZXI6IHRoaXMuaGFuZGxlRW50ZXIsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLmhhbmRsZUVudGVyaW5nLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLmhhbmRsZUVudGVyZWRcbiAgICB9KSA6IFJlYWN0LmNsb25lRWxlbWVudChzZWNvbmQsIHtcbiAgICAgIGtleTogJ3NlY29uZCcsXG4gICAgICBvbkVudGVyOiB0aGlzLmhhbmRsZUV4aXQsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLmhhbmRsZUV4aXRpbmcsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMuaGFuZGxlRXhpdGVkXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiBSZXBsYWNlVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuUmVwbGFjZVRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBpbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgY2hpbGRyZW46IGZ1bmN0aW9uIGNoaWxkcmVuKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIGlmIChSZWFjdC5DaGlsZHJlbi5jb3VudChwcm9wc1twcm9wTmFtZV0pICE9PSAyKSByZXR1cm4gbmV3IEVycm9yKFwiXFxcIlwiICsgcHJvcE5hbWUgKyBcIlxcXCIgbXVzdCBiZSBleGFjdGx5IHR3byB0cmFuc2l0aW9uIGNvbXBvbmVudHMuXCIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IDoge307XG5leHBvcnQgZGVmYXVsdCBSZXBsYWNlVHJhbnNpdGlvbjsiLCJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcblxudmFyIF9sZWF2ZVJlbmRlcnMsIF9lbnRlclJlbmRlcnM7XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgRU5URVJFRCwgRU5URVJJTkcsIEVYSVRJTkcgfSBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcblxuZnVuY3Rpb24gYXJlQ2hpbGRyZW5EaWZmZXJlbnQob2xkQ2hpbGRyZW4sIG5ld0NoaWxkcmVuKSB7XG4gIGlmIChvbGRDaGlsZHJlbiA9PT0gbmV3Q2hpbGRyZW4pIHJldHVybiBmYWxzZTtcblxuICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQob2xkQ2hpbGRyZW4pICYmIFJlYWN0LmlzVmFsaWRFbGVtZW50KG5ld0NoaWxkcmVuKSAmJiBvbGRDaGlsZHJlbi5rZXkgIT0gbnVsbCAmJiBvbGRDaGlsZHJlbi5rZXkgPT09IG5ld0NoaWxkcmVuLmtleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBFbnVtIG9mIG1vZGVzIGZvciBTd2l0Y2hUcmFuc2l0aW9uIGNvbXBvbmVudFxuICogQGVudW0geyBzdHJpbmcgfVxuICovXG5cblxuZXhwb3J0IHZhciBtb2RlcyA9IHtcbiAgb3V0OiAnb3V0LWluJyxcbiAgaW46ICdpbi1vdXQnXG59O1xuXG52YXIgY2FsbEhvb2sgPSBmdW5jdGlvbiBjYWxsSG9vayhlbGVtZW50LCBuYW1lLCBjYikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfZWxlbWVudCRwcm9wcztcblxuICAgIGVsZW1lbnQucHJvcHNbbmFtZV0gJiYgKF9lbGVtZW50JHByb3BzID0gZWxlbWVudC5wcm9wcylbbmFtZV0uYXBwbHkoX2VsZW1lbnQkcHJvcHMsIGFyZ3VtZW50cyk7XG4gICAgY2IoKTtcbiAgfTtcbn07XG5cbnZhciBsZWF2ZVJlbmRlcnMgPSAoX2xlYXZlUmVuZGVycyA9IHt9LCBfbGVhdmVSZW5kZXJzW21vZGVzLm91dF0gPSBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgY3VycmVudCA9IF9yZWYuY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZi5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjdXJyZW50LCB7XG4gICAgaW46IGZhbHNlLFxuICAgIG9uRXhpdGVkOiBjYWxsSG9vayhjdXJyZW50LCAnb25FeGl0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUklORywgbnVsbCk7XG4gICAgfSlcbiAgfSk7XG59LCBfbGVhdmVSZW5kZXJzW21vZGVzLmluXSA9IGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgY3VycmVudCA9IF9yZWYyLmN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYyLmNoYW5nZVN0YXRlLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgcmV0dXJuIFtjdXJyZW50LCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZSxcbiAgICBvbkVudGVyZWQ6IGNhbGxIb29rKGNoaWxkcmVuLCAnb25FbnRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJJTkcpO1xuICAgIH0pXG4gIH0pXTtcbn0sIF9sZWF2ZVJlbmRlcnMpO1xudmFyIGVudGVyUmVuZGVycyA9IChfZW50ZXJSZW5kZXJzID0ge30sIF9lbnRlclJlbmRlcnNbbW9kZXMub3V0XSA9IGZ1bmN0aW9uIChfcmVmMykge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMy5jaGlsZHJlbixcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjMuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZSxcbiAgICBvbkVudGVyZWQ6IGNhbGxIb29rKGNoaWxkcmVuLCAnb25FbnRlcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJFRCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSlcbiAgfSk7XG59LCBfZW50ZXJSZW5kZXJzW21vZGVzLmluXSA9IGZ1bmN0aW9uIChfcmVmNCkge1xuICB2YXIgY3VycmVudCA9IF9yZWY0LmN1cnJlbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY0LmNoaWxkcmVuLFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmNC5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFtSZWFjdC5jbG9uZUVsZW1lbnQoY3VycmVudCwge1xuICAgIGluOiBmYWxzZSxcbiAgICBvbkV4aXRlZDogY2FsbEhvb2soY3VycmVudCwgJ29uRXhpdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJFRCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KSk7XG4gICAgfSlcbiAgfSksIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlXG4gIH0pXTtcbn0sIF9lbnRlclJlbmRlcnMpO1xuLyoqXG4gKiBBIHRyYW5zaXRpb24gY29tcG9uZW50IGluc3BpcmVkIGJ5IHRoZSBbdnVlIHRyYW5zaXRpb24gbW9kZXNdKGh0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL3RyYW5zaXRpb25zLmh0bWwjVHJhbnNpdGlvbi1Nb2RlcykuXG4gKiBZb3UgY2FuIHVzZSBpdCB3aGVuIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIHJlbmRlciBiZXR3ZWVuIHN0YXRlIHRyYW5zaXRpb25zLlxuICogQmFzZWQgb24gdGhlIHNlbGVjdGVkIG1vZGUgYW5kIHRoZSBjaGlsZCdzIGtleSB3aGljaCBpcyB0aGUgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYCBjb21wb25lbnQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgbWFrZXMgYSBjb25zaXN0ZW50IHRyYW5zaXRpb24gYmV0d2VlbiB0aGVtLlxuICpcbiAqIElmIHRoZSBgb3V0LWluYCBtb2RlIGlzIHNlbGVjdGVkLCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIHdhaXRzIHVudGlsIHRoZSBvbGQgY2hpbGQgbGVhdmVzIGFuZCB0aGVuIGluc2VydHMgYSBuZXcgY2hpbGQuXG4gKiBJZiB0aGUgYGluLW91dGAgbW9kZSBpcyBzZWxlY3RlZCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCBpbnNlcnRzIGEgbmV3IGNoaWxkIGZpcnN0LCB3YWl0cyBmb3IgdGhlIG5ldyBjaGlsZCB0byBlbnRlciBhbmQgdGhlbiByZW1vdmVzIHRoZSBvbGQgY2hpbGQuXG4gKlxuICogKipOb3RlKio6IElmIHlvdSB3YW50IHRoZSBhbmltYXRpb24gdG8gaGFwcGVuIHNpbXVsdGFuZW91c2x5XG4gKiAodGhhdCBpcywgdG8gaGF2ZSB0aGUgb2xkIGNoaWxkIHJlbW92ZWQgYW5kIGEgbmV3IGNoaWxkIGluc2VydGVkICoqYXQgdGhlIHNhbWUgdGltZSoqKSxcbiAqIHlvdSBzaG91bGQgdXNlXG4gKiBbYFRyYW5zaXRpb25Hcm91cGBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi1ncm91cClcbiAqIGluc3RlYWQuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgcmV0dXJuIChcbiAqICAgIDxTd2l0Y2hUcmFuc2l0aW9uPlxuICogICAgICA8Q1NTVHJhbnNpdGlvblxuICogICAgICAgIGtleT17c3RhdGUgPyBcIkdvb2RieWUsIHdvcmxkIVwiIDogXCJIZWxsbywgd29ybGQhXCJ9XG4gKiAgICAgICAgYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiBub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsIGRvbmUsIGZhbHNlKX1cbiAqICAgICAgICBjbGFzc05hbWVzPSdmYWRlJ1xuICogICAgICA+XG4gKiAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRTdGF0ZShzdGF0ZSA9PiAhc3RhdGUpfT5cbiAqICAgICAgICAgIHtzdGF0ZSA/IFwiR29vZGJ5ZSwgd29ybGQhXCIgOiBcIkhlbGxvLCB3b3JsZCFcIn1cbiAqICAgICAgICA8L2J1dHRvbj5cbiAqICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICogICAgPC9Td2l0Y2hUcmFuc2l0aW9uPlxuICogICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgYGBjc3NcbiAqIC5mYWRlLWVudGVye1xuICogICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5mYWRlLWV4aXR7XG4gKiAgICBvcGFjaXR5OiAxO1xuICogfVxuICogLmZhZGUtZW50ZXItYWN0aXZle1xuICogICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5mYWRlLWV4aXQtYWN0aXZle1xuICogICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5mYWRlLWVudGVyLWFjdGl2ZSxcbiAqIC5mYWRlLWV4aXQtYWN0aXZle1xuICogICAgdHJhbnNpdGlvbjogb3BhY2l0eSA1MDBtcztcbiAqIH1cbiAqIGBgYFxuICovXG5cbnZhciBTd2l0Y2hUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFN3aXRjaFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN3aXRjaFRyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IEVOVEVSRUQsXG4gICAgICBjdXJyZW50OiBudWxsXG4gICAgfTtcbiAgICBfdGhpcy5hcHBlYXJlZCA9IGZhbHNlO1xuXG4gICAgX3RoaXMuY2hhbmdlU3RhdGUgPSBmdW5jdGlvbiAoc3RhdHVzLCBjdXJyZW50KSB7XG4gICAgICBpZiAoY3VycmVudCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGN1cnJlbnQgPSBfdGhpcy5zdGF0ZS5jdXJyZW50O1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgICBjdXJyZW50OiBjdXJyZW50XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN3aXRjaFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuYXBwZWFyZWQgPSB0cnVlO1xuICB9O1xuXG4gIFN3aXRjaFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuICAgIGlmIChwcm9wcy5jaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50OiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09IEVOVEVSSU5HICYmIHByb3BzLm1vZGUgPT09IG1vZGVzLmluKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5jdXJyZW50ICYmIGFyZUNoaWxkcmVuRGlmZmVyZW50KHN0YXRlLmN1cnJlbnQsIHByb3BzLmNoaWxkcmVuKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50OiBSZWFjdC5jbG9uZUVsZW1lbnQocHJvcHMuY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIG1vZGUgPSBfdGhpcyRwcm9wcy5tb2RlLFxuICAgICAgICBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgIHN0YXR1cyA9IF90aGlzJHN0YXRlLnN0YXR1cyxcbiAgICAgICAgY3VycmVudCA9IF90aGlzJHN0YXRlLmN1cnJlbnQ7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGU6IHRoaXMuY2hhbmdlU3RhdGUsXG4gICAgICBzdGF0dXM6IHN0YXR1c1xuICAgIH07XG4gICAgdmFyIGNvbXBvbmVudDtcblxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlIEVOVEVSSU5HOlxuICAgICAgICBjb21wb25lbnQgPSBlbnRlclJlbmRlcnNbbW9kZV0oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEVYSVRJTkc6XG4gICAgICAgIGNvbXBvbmVudCA9IGxlYXZlUmVuZGVyc1ttb2RlXShkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRU5URVJFRDpcbiAgICAgICAgY29tcG9uZW50ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogIXRoaXMuYXBwZWFyZWRcbiAgICAgIH1cbiAgICB9LCBjb21wb25lbnQpO1xuICB9O1xuXG4gIHJldHVybiBTd2l0Y2hUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Td2l0Y2hUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIFRyYW5zaXRpb24gbW9kZXMuXG4gICAqIGBvdXQtaW5gOiBDdXJyZW50IGVsZW1lbnQgdHJhbnNpdGlvbnMgb3V0IGZpcnN0LCB0aGVuIHdoZW4gY29tcGxldGUsIHRoZSBuZXcgZWxlbWVudCB0cmFuc2l0aW9ucyBpbi5cbiAgICogYGluLW91dGA6IE5ldyBlbGVtZW50IHRyYW5zaXRpb25zIGluIGZpcnN0LCB0aGVuIHdoZW4gY29tcGxldGUsIHRoZSBjdXJyZW50IGVsZW1lbnQgdHJhbnNpdGlvbnMgb3V0LlxuICAgKlxuICAgKiBAdHlwZSB7J291dC1pbid8J2luLW91dCd9XG4gICAqL1xuICBtb2RlOiBQcm9wVHlwZXMub25lT2YoW21vZGVzLmluLCBtb2Rlcy5vdXRdKSxcblxuICAvKipcbiAgICogQW55IGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmAgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKVxufSA6IHt9O1xuU3dpdGNoVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIG1vZGU6IG1vZGVzLm91dFxufTtcbmV4cG9ydCBkZWZhdWx0IFN3aXRjaFRyYW5zaXRpb247IiwiaW1wb3J0IHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzUmFuZ2VWaXNpYmxlKF9yZWYpIHtcbiAgdmFyIGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0b3BJbmRleCxcbiAgICAgIHN0YXJ0SW5kZXggPSBfcmVmLnN0YXJ0SW5kZXgsXG4gICAgICBzdG9wSW5kZXggPSBfcmVmLnN0b3BJbmRleDtcblxuICByZXR1cm4gIShzdGFydEluZGV4ID4gbGFzdFJlbmRlcmVkU3RvcEluZGV4IHx8IHN0b3BJbmRleCA8IGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgpO1xufVxuXG5mdW5jdGlvbiBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoX3JlZikge1xuICB2YXIgaXNJdGVtTG9hZGVkID0gX3JlZi5pc0l0ZW1Mb2FkZWQsXG4gICAgICBpdGVtQ291bnQgPSBfcmVmLml0ZW1Db3VudCxcbiAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcmVmLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgdmFyIHVubG9hZGVkUmFuZ2VzID0gW107XG5cbiAgdmFyIHJhbmdlU3RhcnRJbmRleCA9IG51bGw7XG4gIHZhciByYW5nZVN0b3BJbmRleCA9IG51bGw7XG5cbiAgZm9yICh2YXIgX2luZGV4ID0gc3RhcnRJbmRleDsgX2luZGV4IDw9IHN0b3BJbmRleDsgX2luZGV4KyspIHtcbiAgICB2YXIgbG9hZGVkID0gaXNJdGVtTG9hZGVkKF9pbmRleCk7XG5cbiAgICBpZiAoIWxvYWRlZCkge1xuICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXg7XG4gICAgICBpZiAocmFuZ2VTdGFydEluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIHJhbmdlU3RhcnRJbmRleCA9IF9pbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuXG4gICAgICByYW5nZVN0YXJ0SW5kZXggPSByYW5nZVN0b3BJbmRleCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgOnJhbmdlU3RvcEluZGV4IGlzIG5vdCBudWxsIGl0IG1lYW5zIHdlIGhhdmVuJ3QgcmFuIG91dCBvZiB1bmxvYWRlZCByb3dzLlxuICAvLyBTY2FuIGZvcndhcmQgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAocmFuZ2VTdG9wSW5kZXggIT09IG51bGwpIHtcbiAgICB2YXIgcG90ZW50aWFsU3RvcEluZGV4ID0gTWF0aC5taW4oTWF0aC5tYXgocmFuZ2VTdG9wSW5kZXgsIHJhbmdlU3RhcnRJbmRleCArIG1pbmltdW1CYXRjaFNpemUgLSAxKSwgaXRlbUNvdW50IC0gMSk7XG5cbiAgICBmb3IgKHZhciBfaW5kZXgyID0gcmFuZ2VTdG9wSW5kZXggKyAxOyBfaW5kZXgyIDw9IHBvdGVudGlhbFN0b3BJbmRleDsgX2luZGV4MisrKSB7XG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgyKSkge1xuICAgICAgICByYW5nZVN0b3BJbmRleCA9IF9pbmRleDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG8gc2VlIGlmIG91ciBmaXJzdCByYW5nZSBlbmRlZCBwcmVtYXR1cmVseS5cbiAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzY2FuIGJhY2t3YXJkcyB0byB0cnkgZmlsbGluZyBvdXIgOm1pbmltdW1CYXRjaFNpemUuXG4gIGlmICh1bmxvYWRlZFJhbmdlcy5sZW5ndGgpIHtcbiAgICB3aGlsZSAodW5sb2FkZWRSYW5nZXNbMV0gLSB1bmxvYWRlZFJhbmdlc1swXSArIDEgPCBtaW5pbXVtQmF0Y2hTaXplICYmIHVubG9hZGVkUmFuZ2VzWzBdID4gMCkge1xuICAgICAgdmFyIF9pbmRleDMgPSB1bmxvYWRlZFJhbmdlc1swXSAtIDE7XG5cbiAgICAgIGlmICghaXNJdGVtTG9hZGVkKF9pbmRleDMpKSB7XG4gICAgICAgIHVubG9hZGVkUmFuZ2VzWzBdID0gX2luZGV4MztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmxvYWRlZFJhbmdlcztcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxudmFyIGluaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufTtcblxudmFyIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gPSBmdW5jdGlvbiAoc2VsZiwgY2FsbCkge1xuICBpZiAoIXNlbGYpIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjtcbn07XG5cbnZhciBJbmZpbml0ZUxvYWRlciA9IGZ1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBpbmhlcml0cyhJbmZpbml0ZUxvYWRlciwgX1B1cmVDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEluZmluaXRlTG9hZGVyKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIEluZmluaXRlTG9hZGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IEluZmluaXRlTG9hZGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoSW5maW5pdGVMb2FkZXIpKS5jYWxsLmFwcGx5KF9yZWYsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IC0xLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gLTEsIF90aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gW10sIF90aGlzLl9vbkl0ZW1zUmVuZGVyZWQgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB2aXNpYmxlU3RhcnRJbmRleCA9IF9yZWYyLnZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdG9wSW5kZXggPSBfcmVmMi52aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIWlzSW50ZWdlcih2aXNpYmxlU3RhcnRJbmRleCkgfHwgIWlzSW50ZWdlcih2aXNpYmxlU3RvcEluZGV4KSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBvbkl0ZW1zUmVuZGVyZWQgc2lnbmF0dXJlOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgX3RoaXMucHJvcHMubG9hZE1vcmVSb3dzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbmZpbml0ZUxvYWRlciBcImxvYWRNb3JlUm93c1wiIHByb3AgaGFzIGJlZW4gcmVuYW1lZCB0byBcImxvYWRNb3JlSXRlbXNcIi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IHZpc2libGVTdGFydEluZGV4O1xuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IHZpc2libGVTdG9wSW5kZXg7XG5cbiAgICAgIF90aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHZpc2libGVTdGFydEluZGV4LCB2aXNpYmxlU3RvcEluZGV4KTtcbiAgICB9LCBfdGhpcy5fc2V0UmVmID0gZnVuY3Rpb24gKGxpc3RSZWYpIHtcbiAgICAgIF90aGlzLl9saXN0UmVmID0gbGlzdFJlZjtcbiAgICB9LCBfdGVtcCksIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgY3JlYXRlQ2xhc3MoSW5maW5pdGVMb2FkZXIsIFt7XG4gICAga2V5OiAncmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldGxvYWRNb3JlSXRlbXNDYWNoZSgpIHtcbiAgICAgIHZhciBhdXRvUmVsb2FkID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gICAgICBpZiAoYXV0b1JlbG9hZCkge1xuICAgICAgICB0aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHRoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsIHRoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0aGlzLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgbGlzdCByZWY7IHBsZWFzZSByZWZlciB0byBJbmZpbml0ZUxvYWRlciBkb2N1bWVudGF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcblxuXG4gICAgICByZXR1cm4gY2hpbGRyZW4oe1xuICAgICAgICBvbkl0ZW1zUmVuZGVyZWQ6IHRoaXMuX29uSXRlbXNSZW5kZXJlZCxcbiAgICAgICAgcmVmOiB0aGlzLl9zZXRSZWZcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19lbnN1cmVSb3dzTG9hZGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2Vuc3VyZVJvd3NMb2FkZWQoc3RhcnRJbmRleCwgc3RvcEluZGV4KSB7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0l0ZW1Mb2FkZWQgPSBfcHJvcHMuaXNJdGVtTG9hZGVkLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF9wcm9wcy5pdGVtQ291bnQsXG4gICAgICAgICAgX3Byb3BzJG1pbmltdW1CYXRjaFNpID0gX3Byb3BzLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgICAgbWluaW11bUJhdGNoU2l6ZSA9IF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9PT0gdW5kZWZpbmVkID8gMTAgOiBfcHJvcHMkbWluaW11bUJhdGNoU2ksXG4gICAgICAgICAgX3Byb3BzJHRocmVzaG9sZCA9IF9wcm9wcy50aHJlc2hvbGQsXG4gICAgICAgICAgdGhyZXNob2xkID0gX3Byb3BzJHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkID8gMTUgOiBfcHJvcHMkdGhyZXNob2xkO1xuXG5cbiAgICAgIHZhciB1bmxvYWRlZFJhbmdlcyA9IHNjYW5Gb3JVbmxvYWRlZFJhbmdlcyh7XG4gICAgICAgIGlzSXRlbUxvYWRlZDogaXNJdGVtTG9hZGVkLFxuICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgbWluaW11bUJhdGNoU2l6ZTogbWluaW11bUJhdGNoU2l6ZSxcbiAgICAgICAgc3RhcnRJbmRleDogTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIHRocmVzaG9sZCksXG4gICAgICAgIHN0b3BJbmRleDogTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgdGhyZXNob2xkKVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgbG9hZC1yb3dzIHVubGVzcyByYW5nZSBoYXMgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGlzIG1heWJlIG5pY2UgdG8gZG8uXG4gICAgICBpZiAodGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5sZW5ndGggIT09IHVubG9hZGVkUmFuZ2VzLmxlbmd0aCB8fCB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzLnNvbWUoZnVuY3Rpb24gKHN0YXJ0T3JTdG9wLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gdW5sb2FkZWRSYW5nZXNbaW5kZXhdICE9PSBzdGFydE9yU3RvcDtcbiAgICAgIH0pKSB7XG4gICAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSB1bmxvYWRlZFJhbmdlcztcbiAgICAgICAgdGhpcy5fbG9hZFVubG9hZGVkUmFuZ2VzKHVubG9hZGVkUmFuZ2VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfbG9hZFVubG9hZGVkUmFuZ2VzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIC8vIGxvYWRNb3JlUm93cyB3YXMgcmVuYW1lZCB0byBsb2FkTW9yZUl0ZW1zIGluIHYxLjAuMzsgd2lsbCBiZSByZW1vdmVkIGluIHYyLjBcbiAgICAgIHZhciBsb2FkTW9yZUl0ZW1zID0gdGhpcy5wcm9wcy5sb2FkTW9yZUl0ZW1zIHx8IHRoaXMucHJvcHMubG9hZE1vcmVSb3dzO1xuXG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaV07XG4gICAgICAgIHZhciBzdG9wSW5kZXggPSB1bmxvYWRlZFJhbmdlc1tpICsgMV07XG4gICAgICAgIHZhciBwcm9taXNlID0gbG9hZE1vcmVJdGVtcyhzdGFydEluZGV4LCBzdG9wSW5kZXgpO1xuICAgICAgICBpZiAocHJvbWlzZSAhPSBudWxsKSB7XG4gICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFJlZnJlc2ggdGhlIHZpc2libGUgcm93cyBpZiBhbnkgb2YgdGhlbSBoYXZlIGp1c3QgYmVlbiBsb2FkZWQuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhleSB3aWxsIHJlbWFpbiBpbiB0aGVpciB1bmxvYWRlZCB2aXN1YWwgc3RhdGUuXG4gICAgICAgICAgICBpZiAoaXNSYW5nZVZpc2libGUoe1xuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdGFydEluZGV4OiBfdGhpczIuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIGxhc3RSZW5kZXJlZFN0b3BJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIHN0b3BJbmRleDogc3RvcEluZGV4XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgYW4gdW5tb3VudCB3aGlsZSBwcm9taXNlcyBhcmUgc3RpbGwgaW4gZmxpZ2h0LlxuICAgICAgICAgICAgICBpZiAoX3RoaXMyLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBSZXNpemUgY2FjaGVkIHJvdyBzaXplcyBmb3IgVmFyaWFibGVTaXplTGlzdCxcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGp1c3QgcmUtcmVuZGVyIHRoZSBsaXN0LlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5yZXNldEFmdGVySW5kZXggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4KHN0YXJ0SW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhBQ0sgcmVzZXQgdGVtcG9yYXJpbHkgY2FjaGVkIGl0ZW0gc3R5bGVzIHRvIGZvcmNlIFB1cmVDb21wb25lbnQgdG8gcmUtcmVuZGVyLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGdyb3NzLCBidXQgSSdtIG9rYXkgd2l0aCBpdCBmb3Igbm93LlxuICAgICAgICAgICAgICAgIC8vIERvbid0IGp1ZGdlIG1lLlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5sb2FkZWRSYW5nZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgX2xvb3AoaSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBJbmZpbml0ZUxvYWRlcjtcbn0oUHVyZUNvbXBvbmVudCk7XG5cbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlTG9hZGVyO1xuIiwidmFyIHNhZmVJc05hTiA9IE51bWJlci5pc05hTiB8fFxuICAgIGZ1bmN0aW9uIHBvbnlmaWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZTtcbiAgICB9O1xuZnVuY3Rpb24gaXNFcXVhbChmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKGZpcnN0ID09PSBzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzYWZlSXNOYU4oZmlyc3QpICYmIHNhZmVJc05hTihzZWNvbmQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgICBpZiAobmV3SW5wdXRzLmxlbmd0aCAhPT0gbGFzdElucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0lucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXF1YWwobmV3SW5wdXRzW2ldLCBsYXN0SW5wdXRzW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplT25lKHJlc3VsdEZuLCBpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gYXJlSW5wdXRzRXF1YWw7IH1cbiAgICB2YXIgbGFzdFRoaXM7XG4gICAgdmFyIGxhc3RBcmdzID0gW107XG4gICAgdmFyIGxhc3RSZXN1bHQ7XG4gICAgdmFyIGNhbGxlZE9uY2UgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGVkT25jZSAmJiBsYXN0VGhpcyA9PT0gdGhpcyAmJiBpc0VxdWFsKG5ld0FyZ3MsIGxhc3RBcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0QXJncyA9IG5ld0FyZ3M7XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVPbmU7XG4iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UnO1xuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcbnZhciBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBub3cgPSBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA/IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xufSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59O1xuZnVuY3Rpb24gY2FuY2VsVGltZW91dCh0aW1lb3V0SUQpIHtcbiAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGltZW91dElELmlkKTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSkge1xuICB2YXIgc3RhcnQgPSBub3coKTtcblxuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmIChub3coKSAtIHN0YXJ0ID49IGRlbGF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lb3V0SUQuaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHRpbWVvdXRJRCA9IHtcbiAgICBpZDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gIH07XG4gIHJldHVybiB0aW1lb3V0SUQ7XG59XG5cbnZhciBzaXplID0gLTE7IC8vIFRoaXMgdXRpbGl0eSBjb3BpZWQgZnJvbSBcImRvbS1oZWxwZXJzXCIgcGFja2FnZS5cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyU2l6ZShyZWNhbGN1bGF0ZSkge1xuICBpZiAocmVjYWxjdWxhdGUgPT09IHZvaWQgMCkge1xuICAgIHJlY2FsY3VsYXRlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoc2l6ZSA9PT0gLTEgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdmFyIHN0eWxlID0gZGl2LnN0eWxlO1xuICAgIHN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIHN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBzdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICBzaXplID0gZGl2Lm9mZnNldFdpZHRoIC0gZGl2LmNsaWVudFdpZHRoO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgfVxuXG4gIHJldHVybiBzaXplO1xufVxudmFyIGNhY2hlZFJUTFJlc3VsdCA9IG51bGw7IC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbi8vIENocm9tZSBkb2VzIG5vdCBzZWVtIHRvIGFkaGVyZTsgaXRzIHNjcm9sbExlZnQgdmFsdWVzIGFyZSBwb3NpdGl2ZSAobWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuLy8gU2FmYXJpJ3MgZWxhc3RpYyBib3VuY2UgbWFrZXMgZGV0ZWN0aW5nIHRoaXMgZXZlbiBtb3JlIGNvbXBsaWNhdGVkIHdydCBwb3RlbnRpYWwgZmFsc2UgcG9zaXRpdmVzLlxuLy8gVGhlIHNhZmVzdCB3YXkgdG8gY2hlY2sgdGhpcyBpcyB0byBpbnRlbnRpb25hbGx5IHNldCBhIG5lZ2F0aXZlIG9mZnNldCxcbi8vIGFuZCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBzdWJzZXF1ZW50IFwic2Nyb2xsXCIgZXZlbnQgbWF0Y2hlcyB0aGUgbmVnYXRpdmUgb2Zmc2V0LlxuLy8gSWYgaXQgZG9lcyBub3QgbWF0Y2gsIHRoZW4gd2UgY2FuIGFzc3VtZSBhIG5vbi1zdGFuZGFyZCBSVEwgc2Nyb2xsIGltcGxlbWVudGF0aW9uLlxuXG5mdW5jdGlvbiBnZXRSVExPZmZzZXRUeXBlKHJlY2FsY3VsYXRlKSB7XG4gIGlmIChyZWNhbGN1bGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmVjYWxjdWxhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChjYWNoZWRSVExSZXN1bHQgPT09IG51bGwgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICB2YXIgb3V0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgb3V0ZXJTdHlsZSA9IG91dGVyRGl2LnN0eWxlO1xuICAgIG91dGVyU3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgb3V0ZXJTdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgb3V0ZXJTdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuICAgIG91dGVyU3R5bGUuZGlyZWN0aW9uID0gJ3J0bCc7XG4gICAgdmFyIGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdmFyIGlubmVyU3R5bGUgPSBpbm5lckRpdi5zdHlsZTtcbiAgICBpbm5lclN0eWxlLndpZHRoID0gJzEwMHB4JztcbiAgICBpbm5lclN0eWxlLmhlaWdodCA9ICcxMDBweCc7XG4gICAgb3V0ZXJEaXYuYXBwZW5kQ2hpbGQoaW5uZXJEaXYpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3V0ZXJEaXYpO1xuXG4gICAgaWYgKG91dGVyRGl2LnNjcm9sbExlZnQgPiAwKSB7XG4gICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtZGVzY2VuZGluZyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dGVyRGl2LnNjcm9sbExlZnQgPSAxO1xuXG4gICAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA9PT0gMCkge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAnbmVnYXRpdmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWFzY2VuZGluZyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlckRpdik7XG4gICAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG59XG5cbnZhciBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwgPSAxNTA7XG5cbnZhciBkZWZhdWx0SXRlbUtleSA9IGZ1bmN0aW9uIGRlZmF1bHRJdGVtS2V5KF9yZWYpIHtcbiAgdmFyIGNvbHVtbkluZGV4ID0gX3JlZi5jb2x1bW5JbmRleCxcbiAgICAgIGRhdGEgPSBfcmVmLmRhdGEsXG4gICAgICByb3dJbmRleCA9IF9yZWYucm93SW5kZXg7XG4gIHJldHVybiByb3dJbmRleCArIFwiOlwiICsgY29sdW1uSW5kZXg7XG59OyAvLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cblxuXG52YXIgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG51bGw7XG52YXIgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdyaWRDb21wb25lbnQoX3JlZjIpIHtcbiAgdmFyIF9jbGFzcztcblxuICB2YXIgZ2V0Q29sdW1uT2Zmc2V0ID0gX3JlZjIuZ2V0Q29sdW1uT2Zmc2V0LFxuICAgICAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCA9IF9yZWYyLmdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gICAgICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gX3JlZjIuZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGdldENvbHVtbldpZHRoID0gX3JlZjIuZ2V0Q29sdW1uV2lkdGgsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCA9IF9yZWYyLmdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IF9yZWYyLmdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gICAgICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQgPSBfcmVmMi5nZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQsXG4gICAgICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQgPSBfcmVmMi5nZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQsXG4gICAgICBnZXRSb3dIZWlnaHQgPSBfcmVmMi5nZXRSb3dIZWlnaHQsXG4gICAgICBnZXRSb3dPZmZzZXQgPSBfcmVmMi5nZXRSb3dPZmZzZXQsXG4gICAgICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZjIuZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmMi5nZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgaW5pdEluc3RhbmNlUHJvcHMgPSBfcmVmMi5pbml0SW5zdGFuY2VQcm9wcyxcbiAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgPSBfcmVmMi5zaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICAgICAgdmFsaWRhdGVQcm9wcyA9IF9yZWYyLnZhbGlkYXRlUHJvcHM7XG4gIHJldHVybiBfY2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoR3JpZCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIEdyaWQocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfUHVyZUNvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgX3RoaXMuX2luc3RhbmNlUHJvcHMgPSBpbml0SW5zdGFuY2VQcm9wcyhfdGhpcy5wcm9wcywgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuICAgICAgX3RoaXMuX291dGVyUmVmID0gdm9pZCAwO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGluc3RhbmNlOiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSxcbiAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICAgIHNjcm9sbExlZnQ6IHR5cGVvZiBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA6IDAsXG4gICAgICAgIHNjcm9sbFRvcDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbFRvcCA6IDAsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCdcbiAgICAgIH07XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAob3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LCBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCwgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LCBvdmVyc2NhblJvd1N0b3BJbmRleCwgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsIHZpc2libGVSb3dTdGFydEluZGV4LCB2aXNpYmxlUm93U3RvcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQoe1xuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleDogb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXg6IHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXg6IHZpc2libGVSb3dTdG9wSW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wLCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vblNjcm9sbCh7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IHZvaWQgMDtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IGZ1bmN0aW9uIChyb3dJbmRleCwgY29sdW1uSW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgICBjb2x1bW5XaWR0aCA9IF90aGlzJHByb3BzLmNvbHVtbldpZHRoLFxuICAgICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMucm93SGVpZ2h0O1xuXG4gICAgICAgIHZhciBpdGVtU3R5bGVDYWNoZSA9IF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGNvbHVtbldpZHRoLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbiwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiByb3dIZWlnaHQpO1xuXG4gICAgICAgIHZhciBrZXkgPSByb3dJbmRleCArIFwiOlwiICsgY29sdW1uSW5kZXg7XG4gICAgICAgIHZhciBzdHlsZTtcblxuICAgICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX29mZnNldCA9IGdldENvbHVtbk9mZnNldChfdGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAgIHZhciBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgICAgaXRlbVN0eWxlQ2FjaGVba2V5XSA9IHN0eWxlID0ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IF9vZmZzZXQsXG4gICAgICAgICAgICByaWdodDogaXNSdGwgPyBfb2Zmc2V0IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdG9wOiBnZXRSb3dPZmZzZXQoX3RoaXMucHJvcHMsIHJvd0luZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgICBoZWlnaHQ6IGdldFJvd0hlaWdodChfdGhpcy5wcm9wcywgcm93SW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICAgIHdpZHRoOiBnZXRDb2x1bW5XaWR0aChfdGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChfLCBfXywgX19fKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9ldmVudCRjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIGNsaWVudFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICBzY3JvbGxMZWZ0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFRvcCxcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsV2lkdGg7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJiBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF90aGlzLnByb3BzLmRpcmVjdGlvbjsgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuXG4gICAgICAgICAgdmFyIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcblxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1kZXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG5cblxuICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY2FsY3VsYXRlZFNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpKTtcbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbExlZnQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbExlZnQ6IGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wOiBjYWxjdWxhdGVkU2Nyb2xsVG9wLFxuICAgICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vdXRlclJlZlNldHRlciA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gX3RoaXMucHJvcHMub3V0ZXJSZWY7XG4gICAgICAgIF90aGlzLl9vdXRlclJlZiA9IHJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdXRlclJlZiAhPSBudWxsICYmIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiYgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogZmFsc2VcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIEdyaWQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgX3Byb3RvID0gR3JpZC5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG8gPSBmdW5jdGlvbiBzY3JvbGxUbyhfcmVmMykge1xuICAgICAgdmFyIHNjcm9sbExlZnQgPSBfcmVmMy5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF9yZWYzLnNjcm9sbFRvcDtcblxuICAgICAgaWYgKHNjcm9sbExlZnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbExlZnQgPSBwcmV2U3RhdGUuc2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY3JvbGxUb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbFRvcCA9IHByZXZTdGF0ZS5zY3JvbGxUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiYgcHJldlN0YXRlLnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWUsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvSXRlbSA9IGZ1bmN0aW9uIHNjcm9sbFRvSXRlbShfcmVmNCkge1xuICAgICAgdmFyIF9yZWY0JGFsaWduID0gX3JlZjQuYWxpZ24sXG4gICAgICAgICAgYWxpZ24gPSBfcmVmNCRhbGlnbiA9PT0gdm9pZCAwID8gJ2F1dG8nIDogX3JlZjQkYWxpZ24sXG4gICAgICAgICAgY29sdW1uSW5kZXggPSBfcmVmNC5jb2x1bW5JbmRleCxcbiAgICAgICAgICByb3dJbmRleCA9IF9yZWY0LnJvd0luZGV4O1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczIuY29sdW1uQ291bnQsXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHMyLmhlaWdodCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzMi5yb3dDb3VudCxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzMi53aWR0aDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUuc2Nyb2xsVG9wO1xuICAgICAgdmFyIHNjcm9sbGJhclNpemUgPSBnZXRTY3JvbGxiYXJTaXplKCk7XG5cbiAgICAgIGlmIChjb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbHVtbkluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uSW5kZXgsIGNvbHVtbkNvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAocm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByb3dJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0luZGV4LCByb3dDb3VudCAtIDEpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldyxcbiAgICAgIC8vIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuXG4gICAgICB2YXIgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUgPSBlc3RpbWF0ZWRUb3RhbFdpZHRoID4gd2lkdGggPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIHZhciB2ZXJ0aWNhbFNjcm9sbGJhclNpemUgPSBlc3RpbWF0ZWRUb3RhbEhlaWdodCA+IGhlaWdodCA/IHNjcm9sbGJhclNpemUgOiAwO1xuICAgICAgdGhpcy5zY3JvbGxUbyh7XG4gICAgICAgIHNjcm9sbExlZnQ6IGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQgPyBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIGFsaWduLCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzLCB2ZXJ0aWNhbFNjcm9sbGJhclNpemUpIDogc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wOiByb3dJbmRleCAhPT0gdW5kZWZpbmVkID8gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KHRoaXMucHJvcHMsIHJvd0luZGV4LCBhbGlnbiwgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzLCBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSkgOiBzY3JvbGxUb3BcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxMZWZ0ID0gX3RoaXMkcHJvcHMzLmluaXRpYWxTY3JvbGxMZWZ0LFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxUb3AgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbFRvcDtcblxuICAgICAgaWYgKHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbExlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbFRvcDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLnByb3BzLmRpcmVjdGlvbjtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsVG9wLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlMi5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgIGlmIChzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gb3V0ZXJSZWYuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aCA9IG91dGVyUmVmLnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICAgIH1cblxuICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczQuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM0LmNsYXNzTmFtZSxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNC5jb2x1bW5Db3VudCxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczQuZGlyZWN0aW9uLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzNC5oZWlnaHQsXG4gICAgICAgICAgaW5uZXJSZWYgPSBfdGhpcyRwcm9wczQuaW5uZXJSZWYsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNC5pbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICAgIGlubmVyVGFnTmFtZSA9IF90aGlzJHByb3BzNC5pbm5lclRhZ05hbWUsXG4gICAgICAgICAgaXRlbURhdGEgPSBfdGhpcyRwcm9wczQuaXRlbURhdGEsXG4gICAgICAgICAgX3RoaXMkcHJvcHM0JGl0ZW1LZXkgPSBfdGhpcyRwcm9wczQuaXRlbUtleSxcbiAgICAgICAgICBpdGVtS2V5ID0gX3RoaXMkcHJvcHM0JGl0ZW1LZXkgPT09IHZvaWQgMCA/IGRlZmF1bHRJdGVtS2V5IDogX3RoaXMkcHJvcHM0JGl0ZW1LZXksXG4gICAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNC5vdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICAgIG91dGVyVGFnTmFtZSA9IF90aGlzJHByb3BzNC5vdXRlclRhZ05hbWUsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczQucm93Q291bnQsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczQuc3R5bGUsXG4gICAgICAgICAgdXNlSXNTY3JvbGxpbmcgPSBfdGhpcyRwcm9wczQudXNlSXNTY3JvbGxpbmcsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczQud2lkdGg7XG4gICAgICB2YXIgaXNTY3JvbGxpbmcgPSB0aGlzLnN0YXRlLmlzU2Nyb2xsaW5nO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldEhvcml6b250YWxSID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICBjb2x1bW5TdGFydEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSWzBdLFxuICAgICAgICAgIGNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUlsxXTtcblxuICAgICAgdmFyIF90aGlzJF9nZXRWZXJ0aWNhbFJhbiA9IHRoaXMuX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIHJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW5bMF0sXG4gICAgICAgICAgcm93U3RvcEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuWzFdO1xuXG4gICAgICB2YXIgaXRlbXMgPSBbXTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCkge1xuICAgICAgICBmb3IgKHZhciBfcm93SW5kZXggPSByb3dTdGFydEluZGV4OyBfcm93SW5kZXggPD0gcm93U3RvcEluZGV4OyBfcm93SW5kZXgrKykge1xuICAgICAgICAgIGZvciAodmFyIF9jb2x1bW5JbmRleCA9IGNvbHVtblN0YXJ0SW5kZXg7IF9jb2x1bW5JbmRleCA8PSBjb2x1bW5TdG9wSW5kZXg7IF9jb2x1bW5JbmRleCsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IF9jb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBrZXk6IGl0ZW1LZXkoe1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBfY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgICAgcm93SW5kZXg6IF9yb3dJbmRleFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgcm93SW5kZXg6IF9yb3dJbmRleCxcbiAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShfcm93SW5kZXgsIF9jb2x1bW5JbmRleClcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cblxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBvblNjcm9sbDogdGhpcy5fb25TY3JvbGwsXG4gICAgICAgIHJlZjogdGhpcy5fb3V0ZXJSZWZTZXR0ZXIsXG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgICAgfSwgc3R5bGUpXG4gICAgICB9LCBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgcmVmOiBpbm5lclJlZixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBoZWlnaHQ6IGVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiBlc3RpbWF0ZWRUb3RhbFdpZHRoXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jYWxsUHJvcHNDYWxsYmFja3MgPSBmdW5jdGlvbiBfY2FsbFByb3BzQ2FsbGJhY2tzKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczUuY29sdW1uQ291bnQsXG4gICAgICAgICAgb25JdGVtc1JlbmRlcmVkID0gX3RoaXMkcHJvcHM1Lm9uSXRlbXNSZW5kZXJlZCxcbiAgICAgICAgICBvblNjcm9sbCA9IF90aGlzJHByb3BzNS5vblNjcm9sbCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNS5yb3dDb3VudDtcblxuICAgICAgaWYgKHR5cGVvZiBvbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCA+IDApIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2dldEhvcml6b250YWxSMiA9IHRoaXMuX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZUNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbM107XG5cbiAgICAgICAgICB2YXIgX3RoaXMkX2dldFZlcnRpY2FsUmFuMiA9IHRoaXMuX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Sb3dTdGFydEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlswXSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuUm93U3RvcEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlsxXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVSb3dTdGFydEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlsyXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVSb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzNdO1xuXG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LCBfb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsIF9vdmVyc2NhblJvd1N0YXJ0SW5kZXgsIF9vdmVyc2NhblJvd1N0b3BJbmRleCwgX3Zpc2libGVDb2x1bW5TdGFydEluZGV4LCBfdmlzaWJsZUNvbHVtblN0b3BJbmRleCwgX3Zpc2libGVSb3dTdGFydEluZGV4LCBfdmlzaWJsZVJvd1N0b3BJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgX3RoaXMkc3RhdGUzID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIF9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLmhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgICBfc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlMy5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgX3Njcm9sbFRvcCA9IF90aGlzJHN0YXRlMy5zY3JvbGxUb3AsXG4gICAgICAgICAgICBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUzLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgICAgIF92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMy52ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjtcblxuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoX3Njcm9sbExlZnQsIF9zY3JvbGxUb3AsIF9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLCBfdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpO1xuICAgICAgfVxuICAgIH0gLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICA7XG5cbiAgICBfcHJvdG8uX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczYuY29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvbHVtbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db3VudCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNi5yb3dDb3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTQgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTQuaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlNC5pc1Njcm9sbGluZyxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGU0LnNjcm9sbExlZnQ7XG4gICAgICB2YXIgb3ZlcnNjYW5Db3VudFJlc29sdmVkID0gb3ZlcnNjYW5Db2x1bW5Db3VudCB8fCBvdmVyc2NhbkNvbHVtbnNDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsTGVmdCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuXG4gICAgICB2YXIgb3ZlcnNjYW5CYWNrd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM3LmNvbHVtbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhblJvd0NvdW50ID0gX3RoaXMkcHJvcHM3Lm92ZXJzY2FuUm93Q291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dzQ291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczcucm93Q291bnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGU1ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlNS5pc1Njcm9sbGluZyxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlNS52ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZTUuc2Nyb2xsVG9wO1xuICAgICAgdmFyIG92ZXJzY2FuQ291bnRSZXNvbHZlZCA9IG92ZXJzY2FuUm93Q291bnQgfHwgb3ZlcnNjYW5Sb3dzQ291bnQgfHwgb3ZlcnNjYW5Db3VudCB8fCAxO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPT09IDAgfHwgcm93Q291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KHRoaXMucHJvcHMsIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLCBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLCBzdGFydEluZGV4LCBzdG9wSW5kZXhdO1xuICAgIH07XG5cbiAgICByZXR1cm4gR3JpZDtcbiAgfShQdXJlQ29tcG9uZW50KSwgX2NsYXNzLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlXG4gIH0sIF9jbGFzcztcbn1cblxudmFyIHZhbGlkYXRlU2hhcmVkUHJvcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZVNoYXJlZFByb3BzKF9yZWY1LCBfcmVmNikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNS5jaGlsZHJlbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWY1LmRpcmVjdGlvbixcbiAgICAgIGhlaWdodCA9IF9yZWY1LmhlaWdodCxcbiAgICAgIGlubmVyVGFnTmFtZSA9IF9yZWY1LmlubmVyVGFnTmFtZSxcbiAgICAgIG91dGVyVGFnTmFtZSA9IF9yZWY1Lm91dGVyVGFnTmFtZSxcbiAgICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50ID0gX3JlZjUub3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICBvdmVyc2NhbkNvdW50ID0gX3JlZjUub3ZlcnNjYW5Db3VudCxcbiAgICAgIG92ZXJzY2FuUm93c0NvdW50ID0gX3JlZjUub3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgICB3aWR0aCA9IF9yZWY1LndpZHRoO1xuICB2YXIgaW5zdGFuY2UgPSBfcmVmNi5pbnN0YW5jZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBvdmVyc2NhbkNvdW50IHByb3AgaGFzIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvdmVyc2NhbkNvbHVtbnNDb3VudCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG92ZXJzY2FuUm93c0NvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ICYmICFkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIG92ZXJzY2FuQ29sdW1uc0NvdW50IGFuZCBvdmVyc2NhblJvd3NDb3VudCBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlubmVyVGFnTmFtZSAhPSBudWxsIHx8IG91dGVyVGFnTmFtZSAhPSBudWxsKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NUYWdOYW1lICYmICFkZXZXYXJuaW5nc1RhZ05hbWUuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc1RhZ05hbWUuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgaW5uZXJUYWdOYW1lIGFuZCBvdXRlclRhZ05hbWUgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNoaWxkcmVuXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICsgKFwiXFxcIlwiICsgKGNoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVuKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgKyAoXCJcXFwiXCIgKyBkaXJlY3Rpb24gKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArIChcIlxcXCJcIiArICh3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArIChcIlxcXCJcIiArIChoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFID0gNTA7XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KF9yZWYsIF9yZWYyKSB7XG4gIHZhciByb3dDb3VudCA9IF9yZWYucm93Q291bnQ7XG4gIHZhciByb3dNZXRhZGF0YU1hcCA9IF9yZWYyLnJvd01ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0ID0gX3JlZjIuZXN0aW1hdGVkUm93SGVpZ2h0LFxuICAgICAgbGFzdE1lYXN1cmVkUm93SW5kZXggPSBfcmVmMi5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gcm93Q291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IHJvd0NvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IHJvd01ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZFJvd0luZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSByb3dDb3VudCAtIGxhc3RNZWFzdXJlZFJvd0luZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkUm93SGVpZ2h0O1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChfcmVmMywgX3JlZjQpIHtcbiAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjMuY29sdW1uQ291bnQ7XG4gIHZhciBjb2x1bW5NZXRhZGF0YU1hcCA9IF9yZWY0LmNvbHVtbk1ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGggPSBfcmVmNC5lc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gX3JlZjQubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIHZhciB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IDA7IC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IGNvbHVtbkNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBjb2x1bW5Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gMCkge1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBjb2x1bW5NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRDb2x1bW5JbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICB2YXIgbnVtVW5tZWFzdXJlZEl0ZW1zID0gY29sdW1uQ291bnQgLSBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCAtIDE7XG4gIHZhciB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZENvbHVtbldpZHRoO1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBnZXRJdGVtTWV0YWRhdGEgPSBmdW5jdGlvbiBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwLCBpdGVtU2l6ZSwgbGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSBwcm9wcy5jb2x1bW5XaWR0aDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9IHByb3BzLnJvd0hlaWdodDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgdmFyIHNpemUgPSBpdGVtU2l6ZShpKTtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHNpemU6IHNpemVcbiAgICAgIH07XG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gaW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlbU1ldGFkYXRhTWFwW2luZGV4XTtcbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW0gPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW0oaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXA7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgdmFyIGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPSBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGxhc3RNZWFzdXJlZEluZGV4LCAwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLCBvZmZzZXQpO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgaGlnaCwgbG93LCBvZmZzZXQpIHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgdmFyIG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBpbmRleCwgb2Zmc2V0KSB7XG4gIHZhciBpdGVtQ291bnQgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy5jb2x1bW5Db3VudCA6IHByb3BzLnJvd0NvdW50O1xuICB2YXIgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChpbmRleCA8IGl0ZW1Db3VudCAmJiBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksIE1hdGguZmxvb3IoaW5kZXggLyAyKSwgb2Zmc2V0KTtcbn07XG5cbnZhciBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgdmFyIHNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy53aWR0aCA6IHByb3BzLmhlaWdodDtcbiAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTsgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cblxuICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChwcm9wcywgaW5zdGFuY2VQcm9wcykgOiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG4gIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KSk7XG4gIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtTWV0YWRhdGEub2Zmc2V0IC0gc2l6ZSArIHNjcm9sbGJhclNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSk7XG5cbiAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICB9IGVsc2Uge1xuICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgIGNhc2UgJ2VuZCc6XG4gICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICBjYXNlICdhdXRvJzpcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIH1cblxuICB9XG59O1xuXG52YXIgVmFyaWFibGVTaXplR3JpZCA9IC8qI19fUFVSRV9fKi9jcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5PZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQocHJvcHMsIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtKCdjb2x1bW4nLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsTGVmdCk7XG4gIH0sXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBwcm9wcy5jb2x1bW5Db3VudCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbExlZnQgKyB3aWR0aDtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGNvbHVtbkNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gZ2V0Q29sdW1uV2lkdGgocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXBbaW5kZXhdLnNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQocHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpO1xuICB9LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICByZXR1cm4gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoJ3JvdycsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSk7XG4gIH0sXG4gIGdldFJvd09mZnNldDogZnVuY3Rpb24gZ2V0Um93T2Zmc2V0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuICB9LFxuICBnZXRSb3dIZWlnaHQ6IGZ1bmN0aW9uIGdldFJvd0hlaWdodChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbSgncm93JywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbFRvcCk7XG4gIH0sXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciByb3dDb3VudCA9IHByb3BzLnJvd0NvdW50LFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBzY3JvbGxUb3AgKyBoZWlnaHQ7XG4gICAgdmFyIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB2YXIgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCByb3dDb3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzLCBpbnN0YW5jZSkge1xuICAgIHZhciBfcmVmNSA9IHByb3BzLFxuICAgICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCA9IF9yZWY1LmVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQgPSBfcmVmNS5lc3RpbWF0ZWRSb3dIZWlnaHQ7XG4gICAgdmFyIGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBjb2x1bW5NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogZXN0aW1hdGVkQ29sdW1uV2lkdGggfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0OiBlc3RpbWF0ZWRSb3dIZWlnaHQgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg6IC0xLFxuICAgICAgbGFzdE1lYXN1cmVkUm93SW5kZXg6IC0xLFxuICAgICAgcm93TWV0YWRhdGFNYXA6IHt9XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJDb2x1bW5JbmRleCA9IGZ1bmN0aW9uIChjb2x1bW5JbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoe1xuICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlOiBzaG91bGRGb3JjZVVwZGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJSb3dJbmRleCA9IGZ1bmN0aW9uIChyb3dJbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoe1xuICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlOiBzaG91bGRGb3JjZVVwZGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzID0gZnVuY3Rpb24gKF9yZWY2KSB7XG4gICAgICB2YXIgY29sdW1uSW5kZXggPSBfcmVmNi5jb2x1bW5JbmRleCxcbiAgICAgICAgICByb3dJbmRleCA9IF9yZWY2LnJvd0luZGV4LFxuICAgICAgICAgIF9yZWY2JHNob3VsZEZvcmNlVXBkYSA9IF9yZWY2LnNob3VsZEZvcmNlVXBkYXRlLFxuICAgICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gX3JlZjYkc2hvdWxkRm9yY2VVcGRhID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjYkc2hvdWxkRm9yY2VVcGRhO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCwgY29sdW1uSW5kZXggLSAxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IE1hdGgubWluKGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXgsIHJvd0luZGV4IC0gMSk7XG4gICAgICB9IC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuXG5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjcpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmNy5jb2x1bW5XaWR0aCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjcucm93SGVpZ2h0O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArIChcIlxcXCJcIiArIChyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCQxID0gMTUwO1xuXG52YXIgZGVmYXVsdEl0ZW1LZXkkMSA9IGZ1bmN0aW9uIGRlZmF1bHRJdGVtS2V5KGluZGV4LCBkYXRhKSB7XG4gIHJldHVybiBpbmRleDtcbn07IC8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxuXG5cbnZhciBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IG51bGw7XG52YXIgZGV2V2FybmluZ3NUYWdOYW1lJDEgPSBudWxsO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzRGlyZWN0aW9uID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lJDEgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMaXN0Q29tcG9uZW50KF9yZWYpIHtcbiAgdmFyIF9jbGFzcztcblxuICB2YXIgZ2V0SXRlbU9mZnNldCA9IF9yZWYuZ2V0SXRlbU9mZnNldCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsU2l6ZSA9IF9yZWYuZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgZ2V0SXRlbVNpemUgPSBfcmVmLmdldEl0ZW1TaXplLFxuICAgICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSBfcmVmLmdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50LFxuICAgICAgZ2V0U3RhcnRJbmRleEZvck9mZnNldCA9IF9yZWYuZ2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmLmdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBpbml0SW5zdGFuY2VQcm9wcyA9IF9yZWYuaW5pdEluc3RhbmNlUHJvcHMsXG4gICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlID0gX3JlZi5zaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICAgICAgdmFsaWRhdGVQcm9wcyA9IF9yZWYudmFsaWRhdGVQcm9wcztcbiAgcmV0dXJuIF9jbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShMaXN0LCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgICAvLyBBbHdheXMgdXNlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgIC8vIEl0IHByb2R1Y2VzIGxlc3MgY29kZSBhZnRlciB0cmFuc3BpbGF0aW9uLiAoIzI2KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gTGlzdChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9QdXJlQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICBfdGhpcy5faW5zdGFuY2VQcm9wcyA9IGluaXRJbnN0YW5jZVByb3BzKF90aGlzLnByb3BzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICBfdGhpcy5fb3V0ZXJSZWYgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW5zdGFuY2U6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLFxuICAgICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICAgIHNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgICBzY3JvbGxPZmZzZXQ6IHR5cGVvZiBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXQgOiAwLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKG92ZXJzY2FuU3RhcnRJbmRleCwgb3ZlcnNjYW5TdG9wSW5kZXgsIHZpc2libGVTdGFydEluZGV4LCB2aXNpYmxlU3RvcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQoe1xuICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleDogb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleDogdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0b3BJbmRleDogdmlzaWJsZVN0b3BJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbE9mZnNldCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vblNjcm9sbCh7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSB2b2lkIDA7XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgICAgICBpdGVtU2l6ZSA9IF90aGlzJHByb3BzLml0ZW1TaXplLFxuICAgICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMubGF5b3V0O1xuXG4gICAgICAgIHZhciBpdGVtU3R5bGVDYWNoZSA9IF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGl0ZW1TaXplLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGxheW91dCwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb24pO1xuXG4gICAgICAgIHZhciBzdHlsZTtcblxuICAgICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoaW5kZXgpKSB7XG4gICAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtpbmRleF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9vZmZzZXQgPSBnZXRJdGVtT2Zmc2V0KF90aGlzLnByb3BzLCBpbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpO1xuXG4gICAgICAgICAgdmFyIHNpemUgPSBnZXRJdGVtU2l6ZShfdGhpcy5wcm9wcywgaW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICAgICAgdmFyIGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgICB2YXIgb2Zmc2V0SG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbCA/IF9vZmZzZXQgOiAwO1xuICAgICAgICAgIGl0ZW1TdHlsZUNhY2hlW2luZGV4XSA9IHN0eWxlID0ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IG9mZnNldEhvcml6b250YWwsXG4gICAgICAgICAgICByaWdodDogaXNSdGwgPyBvZmZzZXRIb3Jpem9udGFsIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdG9wOiAhaXNIb3Jpem9udGFsID8gX29mZnNldCA6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6ICFpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJSdcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoXywgX18sIF9fXykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuX29uU2Nyb2xsSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50V2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxXaWR0aDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbExlZnQpIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF90aGlzLnByb3BzLmRpcmVjdGlvbjtcbiAgICAgICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsTGVmdDtcblxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsT2Zmc2V0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGxWZXJ0aWNhbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQyID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLnNjcm9sbFRvcDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX291dGVyUmVmU2V0dGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSBfdGhpcy5wcm9wcy5vdXRlclJlZjtcbiAgICAgICAgX3RoaXMuX291dGVyUmVmID0gcmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKG91dGVyUmVmICE9IG51bGwgJiYgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJiBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZywgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGJyZWFrIHB1cmUgc0NVIGZvciBpdGVtcyB0aGF0IGRvbid0IHVzZSBpc1Njcm9sbGluZyBwYXJhbS5cbiAgICAgICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEsIG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICBMaXN0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFsaWRhdGVTaGFyZWRQcm9wcyQxKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgX3Byb3RvID0gTGlzdC5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG8gPSBmdW5jdGlvbiBzY3JvbGxUbyhzY3JvbGxPZmZzZXQpIHtcbiAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIHNjcm9sbE9mZnNldCk7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9wcm90by5zY3JvbGxUb0l0ZW0gPSBmdW5jdGlvbiBzY3JvbGxUb0l0ZW0oaW5kZXgsIGFsaWduKSB7XG4gICAgICBpZiAoYWxpZ24gPT09IHZvaWQgMCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHMyLml0ZW1Db3VudCxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczIubGF5b3V0O1xuICAgICAgdmFyIHNjcm9sbE9mZnNldCA9IHRoaXMuc3RhdGUuc2Nyb2xsT2Zmc2V0O1xuICAgICAgaW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSkpOyAvLyBUaGUgc2Nyb2xsYmFyIHNpemUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBzY3JvbGxpbmcgYW4gaXRlbSBpbnRvIHZpZXcsIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuICAgICAgLy8gVGhpcyBpcyBhbiBlZGdlIGNhc2UgZm9yIGxpc3RzOyBub3JtYWxseSB0aGV5IG9ubHkgc2Nyb2xsIGluIHRoZSBkb21pbmFudCBkaXJlY3Rpb24uXG5cbiAgICAgIHZhciBzY3JvbGxiYXJTaXplID0gMDtcblxuICAgICAgaWYgKHRoaXMuX291dGVyUmVmKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmIChsYXlvdXQgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGggPiBvdXRlclJlZi5jbGllbnRXaWR0aCA/IGdldFNjcm9sbGJhclNpemUoKSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9IG91dGVyUmVmLnNjcm9sbEhlaWdodCA+IG91dGVyUmVmLmNsaWVudEhlaWdodCA/IGdldFNjcm9sbGJhclNpemUoKSA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUbyhnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCh0aGlzLnByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzMy5kaXJlY3Rpb24sXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbE9mZnNldCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzMy5sYXlvdXQ7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbE9mZnNldCA9PT0gJ251bWJlcicgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNC5kaXJlY3Rpb24sXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHM0LmxheW91dDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUuc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHZhciBjbGllbnRXaWR0aCA9IG91dGVyUmVmLmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aCA9IG91dGVyUmVmLnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM1LmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNS5jbGFzc05hbWUsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHM1LmRpcmVjdGlvbixcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczUuaGVpZ2h0LFxuICAgICAgICAgIGlubmVyUmVmID0gX3RoaXMkcHJvcHM1LmlubmVyUmVmLFxuICAgICAgICAgIGlubmVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczUuaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBpbm5lclRhZ05hbWUgPSBfdGhpcyRwcm9wczUuaW5uZXJUYWdOYW1lLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzNS5pdGVtQ291bnQsXG4gICAgICAgICAgaXRlbURhdGEgPSBfdGhpcyRwcm9wczUuaXRlbURhdGEsXG4gICAgICAgICAgX3RoaXMkcHJvcHM1JGl0ZW1LZXkgPSBfdGhpcyRwcm9wczUuaXRlbUtleSxcbiAgICAgICAgICBpdGVtS2V5ID0gX3RoaXMkcHJvcHM1JGl0ZW1LZXkgPT09IHZvaWQgMCA/IGRlZmF1bHRJdGVtS2V5JDEgOiBfdGhpcyRwcm9wczUkaXRlbUtleSxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczUubGF5b3V0LFxuICAgICAgICAgIG91dGVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczUub3V0ZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBvdXRlclRhZ05hbWUgPSBfdGhpcyRwcm9wczUub3V0ZXJUYWdOYW1lLFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM1LnN0eWxlLFxuICAgICAgICAgIHVzZUlzU2Nyb2xsaW5nID0gX3RoaXMkcHJvcHM1LnVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHM1LndpZHRoO1xuICAgICAgdmFyIGlzU2Nyb2xsaW5nID0gdGhpcy5zdGF0ZS5pc1Njcm9sbGluZzsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICAgIHZhciBvblNjcm9sbCA9IGlzSG9yaXpvbnRhbCA/IHRoaXMuX29uU2Nyb2xsSG9yaXpvbnRhbCA6IHRoaXMuX29uU2Nyb2xsVmVydGljYWw7XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQgPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgc3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZFswXSxcbiAgICAgICAgICBzdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmRbMV07XG5cbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICBmb3IgKHZhciBfaW5kZXggPSBzdGFydEluZGV4OyBfaW5kZXggPD0gc3RvcEluZGV4OyBfaW5kZXgrKykge1xuICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICBrZXk6IGl0ZW1LZXkoX2luZGV4LCBpdGVtRGF0YSksXG4gICAgICAgICAgICBpbmRleDogX2luZGV4LFxuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKF9pbmRleClcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cblxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQob3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIG9uU2Nyb2xsOiBvblNjcm9sbCxcbiAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJyxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9LCBzdHlsZSlcbiAgICAgIH0sIGNyZWF0ZUVsZW1lbnQoaW5uZXJFbGVtZW50VHlwZSB8fCBpbm5lclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogZXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBlc3RpbWF0ZWRUb3RhbFNpemUgOiAnMTAwJSdcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2NhbGxQcm9wc0NhbGxiYWNrcyA9IGZ1bmN0aW9uIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBpdGVtQ291bnQgPSB0aGlzLnByb3BzLml0ZW1Db3VudDtcblxuICAgICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyID0gdGhpcy5fZ2V0UmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5TdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlswXSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuU3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlsxXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVTdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlsyXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVTdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzNdO1xuXG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChfb3ZlcnNjYW5TdGFydEluZGV4LCBfb3ZlcnNjYW5TdG9wSW5kZXgsIF92aXNpYmxlU3RhcnRJbmRleCwgX3Zpc2libGVTdG9wSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIF9zY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgICAgX3Njcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlMi5zY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUyLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoX3Njcm9sbERpcmVjdGlvbiwgX3Njcm9sbE9mZnNldCwgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCk7XG4gICAgICB9XG4gICAgfSAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0UmFuZ2VUb1JlbmRlciA9IGZ1bmN0aW9uIF9nZXRSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHM2Lml0ZW1Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ291bnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUzID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlMy5pc1Njcm9sbGluZyxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlMy5zY3JvbGxPZmZzZXQ7XG5cbiAgICAgIGlmIChpdGVtQ291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KHRoaXMucHJvcHMsIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIHJldHVybiBMaXN0O1xuICB9KFB1cmVDb21wb25lbnQpLCBfY2xhc3MuZGVmYXVsdFByb3BzID0ge1xuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICBsYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gICAgb3ZlcnNjYW5Db3VudDogMixcbiAgICB1c2VJc1Njcm9sbGluZzogZmFsc2VcbiAgfSwgX2NsYXNzO1xufSAvLyBOT1RFOiBJIGNvbnNpZGVyZWQgZnVydGhlciB3cmFwcGluZyBpbmRpdmlkdWFsIGl0ZW1zIHdpdGggYSBwdXJlIExpc3RJdGVtIGNvbXBvbmVudC5cbi8vIFRoaXMgd291bGQgYXZvaWQgZXZlciBjYWxsaW5nIHRoZSByZW5kZXIgZnVuY3Rpb24gZm9yIHRoZSBzYW1lIGluZGV4IG1vcmUgdGhhbiBvbmNlLFxuLy8gQnV0IGl0IHdvdWxkIGFsc28gYWRkIHRoZSBvdmVyaGVhZCBvZiBhIGxvdCBvZiBjb21wb25lbnRzL2ZpYmVycy5cbi8vIEkgYXNzdW1lIHBlb3BsZSBhbHJlYWR5IGRvIHRoaXMgKHJlbmRlciBmdW5jdGlvbiByZXR1cm5pbmcgYSBjbGFzcyBjb21wb25lbnQpLFxuLy8gU28gbXkgZG9pbmcgaXQgd291bGQganVzdCB1bm5lY2Vzc2FyaWx5IGRvdWJsZSB0aGUgd3JhcHBlcnMuXG5cbnZhciB2YWxpZGF0ZVNoYXJlZFByb3BzJDEgPSBmdW5jdGlvbiB2YWxpZGF0ZVNoYXJlZFByb3BzKF9yZWYyLCBfcmVmMykge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWYyLmRpcmVjdGlvbixcbiAgICAgIGhlaWdodCA9IF9yZWYyLmhlaWdodCxcbiAgICAgIGxheW91dCA9IF9yZWYyLmxheW91dCxcbiAgICAgIGlubmVyVGFnTmFtZSA9IF9yZWYyLmlubmVyVGFnTmFtZSxcbiAgICAgIG91dGVyVGFnTmFtZSA9IF9yZWYyLm91dGVyVGFnTmFtZSxcbiAgICAgIHdpZHRoID0gX3JlZjIud2lkdGg7XG4gIHZhciBpbnN0YW5jZSA9IF9yZWYzLmluc3RhbmNlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGlubmVyVGFnTmFtZSAhPSBudWxsIHx8IG91dGVyVGFnTmFtZSAhPSBudWxsKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NUYWdOYW1lJDEgJiYgIWRldldhcm5pbmdzVGFnTmFtZSQxLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lJDEuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgaW5uZXJUYWdOYW1lIGFuZCBvdXRlclRhZ05hbWUgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH0gLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgaWYgKGRldldhcm5pbmdzRGlyZWN0aW9uICYmICFkZXZXYXJuaW5nc0RpcmVjdGlvbi5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgZGV2V2FybmluZ3NEaXJlY3Rpb24uYWRkKGluc3RhbmNlKTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBkaXJlY3Rpb24gcHJvcCBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgKGRlZmF1bHQpIG9yIFwicnRsXCIuICcgKyAnUGxlYXNlIHVzZSB0aGUgbGF5b3V0IHByb3AgdG8gc3BlY2lmeSBcInZlcnRpY2FsXCIgKGRlZmF1bHQpIG9yIFwiaG9yaXpvbnRhbFwiIG9yaWVudGF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgKyAoXCJcXFwiXCIgKyBkaXJlY3Rpb24gKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIHN3aXRjaCAobGF5b3V0KSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImxheW91dFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJob3Jpem9udGFsXCIgb3IgXCJ2ZXJ0aWNhbFwiLiAnICsgKFwiXFxcIlwiICsgbGF5b3V0ICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArIChcIlxcXCJcIiArIChjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbikgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmIChpc0hvcml6b250YWwgJiYgdHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0hvcml6b250YWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArIChcIlxcXCJcIiArICh3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiB0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWZXJ0aWNhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArIChcIlxcXCJcIiArIChoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFJDEgPSA1MDtcblxudmFyIGdldEl0ZW1NZXRhZGF0YSQxID0gZnVuY3Rpb24gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICB2YXIgX3JlZiA9IHByb3BzLFxuICAgICAgaXRlbVNpemUgPSBfcmVmLml0ZW1TaXplO1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICB2YXIgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIHZhciBzaXplID0gaXRlbVNpemUoaSk7XG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBzaXplOiBzaXplXG4gICAgICB9O1xuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW0ocHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCkge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXg7XG4gIHZhciBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID0gbGFzdE1lYXN1cmVkSW5kZXggPiAwID8gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XS5vZmZzZXQgOiAwO1xuXG4gIGlmIChsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID49IG9mZnNldCkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgbWVhc3VyZWQgaXRlbXMgd2l0aGluIHRoaXMgcmFuZ2UganVzdCB1c2UgYSBiaW5hcnkgc2VhcmNoIGFzIGl0J3MgZmFzdGVyLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgbGFzdE1lYXN1cmVkSW5kZXgsIDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLCBvZmZzZXQpO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gocHJvcHMsIGluc3RhbmNlUHJvcHMsIGhpZ2gsIGxvdywgb2Zmc2V0KSB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIHZhciBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIG1pZGRsZSwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKHByb3BzLCBpbnN0YW5jZVByb3BzLCBpbmRleCwgb2Zmc2V0KSB7XG4gIHZhciBpdGVtQ291bnQgPSBwcm9wcy5pdGVtQ291bnQ7XG4gIHZhciBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKGluZGV4IDwgaXRlbUNvdW50ICYmIGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpLCBNYXRoLmZsb29yKGluZGV4IC8gMiksIG9mZnNldCk7XG59O1xuXG52YXIgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxTaXplKF9yZWYyLCBfcmVmMykge1xuICB2YXIgaXRlbUNvdW50ID0gX3JlZjIuaXRlbUNvdW50O1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gX3JlZjMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemUgPSBfcmVmMy5lc3RpbWF0ZWRJdGVtU2l6ZSxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gX3JlZjMubGFzdE1lYXN1cmVkSW5kZXg7XG4gIHZhciB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSBpdGVtQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGl0ZW1Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSBpdGVtQ291bnQgLSBsYXN0TWVhc3VyZWRJbmRleCAtIDE7XG4gIHZhciB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZEl0ZW1TaXplO1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG52YXIgVmFyaWFibGVTaXplTGlzdCA9IC8qI19fUFVSRV9fKi9jcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogZnVuY3Rpb24gZ2V0SXRlbU9mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldEl0ZW1TaXplOiBmdW5jdGlvbiBnZXRJdGVtU2l6ZShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXBbaW5kZXhdLnNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQocHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0LFxuICAgICAgICBsYXlvdXQgPSBwcm9wcy5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gcHJvcHMud2lkdGg7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcyk7IC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gICAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cblxuICAgIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUocHJvcHMsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgaXRlbU1ldGFkYXRhLnNpemUgKyBzY3JvbGxiYXJTaXplKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQocHJvcHMsIG9mZnNldCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0kMShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KTtcbiAgfSxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBwcm9wcy5pdGVtQ291bnQsXG4gICAgICAgIGxheW91dCA9IHByb3BzLmxheW91dCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBzY3JvbGxPZmZzZXQgKyBzaXplO1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgaXRlbUNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzLCBpbnN0YW5jZSkge1xuICAgIHZhciBfcmVmNCA9IHByb3BzLFxuICAgICAgICBlc3RpbWF0ZWRJdGVtU2l6ZSA9IF9yZWY0LmVzdGltYXRlZEl0ZW1TaXplO1xuICAgIHZhciBpbnN0YW5jZVByb3BzID0ge1xuICAgICAgaXRlbU1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZEl0ZW1TaXplOiBlc3RpbWF0ZWRJdGVtU2l6ZSB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUkMSxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4OiAtMVxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kZXggPSBmdW5jdGlvbiAoaW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4LCBpbmRleCAtIDEpOyAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cblxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNSkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWY1Lml0ZW1TaXplO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKGl0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIEZpeGVkU2l6ZUdyaWQgPSAvKiNfX1BVUkVfXyovY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uT2Zmc2V0KF9yZWYsIGluZGV4KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gaW5kZXggKiBjb2x1bW5XaWR0aDtcbiAgfSxcbiAgZ2V0Q29sdW1uV2lkdGg6IGZ1bmN0aW9uIGdldENvbHVtbldpZHRoKF9yZWYyLCBpbmRleCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYyLmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aDtcbiAgfSxcbiAgZ2V0Um93T2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dPZmZzZXQoX3JlZjMsIGluZGV4KSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYzLnJvd0hlaWdodDtcbiAgICByZXR1cm4gaW5kZXggKiByb3dIZWlnaHQ7XG4gIH0sXG4gIGdldFJvd0hlaWdodDogZnVuY3Rpb24gZ2V0Um93SGVpZ2h0KF9yZWY0LCBpbmRleCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmNC5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIHJvd0hlaWdodDtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KF9yZWY1KSB7XG4gICAgdmFyIHJvd0NvdW50ID0gX3JlZjUucm93Q291bnQsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWY1LnJvd0hlaWdodDtcbiAgICByZXR1cm4gcm93SGVpZ2h0ICogcm93Q291bnQ7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsV2lkdGgoX3JlZjYpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBfcmVmNi5jb2x1bW5Db3VudCxcbiAgICAgICAgY29sdW1uV2lkdGggPSBfcmVmNi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gY29sdW1uV2lkdGggKiBjb2x1bW5Db3VudDtcbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQoX3JlZjcsIGNvbHVtbkluZGV4LCBhbGlnbiwgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IF9yZWY3LmNvbHVtbkNvdW50LFxuICAgICAgICBjb2x1bW5XaWR0aCA9IF9yZWY3LmNvbHVtbldpZHRoLFxuICAgICAgICB3aWR0aCA9IF9yZWY3LndpZHRoO1xuICAgIHZhciBsYXN0Q29sdW1uT2Zmc2V0ID0gTWF0aC5tYXgoMCwgY29sdW1uQ291bnQgKiBjb2x1bW5XaWR0aCAtIHdpZHRoKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdENvbHVtbk9mZnNldCwgY29sdW1uSW5kZXggKiBjb2x1bW5XaWR0aCk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGNvbHVtbkluZGV4ICogY29sdW1uV2lkdGggLSB3aWR0aCArIHNjcm9sbGJhclNpemUgKyBjb2x1bW5XaWR0aCk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAtIHdpZHRoICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0ICsgd2lkdGgpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Q29sdW1uT2Zmc2V0ICsgTWF0aC5mbG9vcih3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RDb2x1bW5PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChfcmVmOCwgcm93SW5kZXgsIGFsaWduLCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjgucm93SGVpZ2h0LFxuICAgICAgICBoZWlnaHQgPSBfcmVmOC5oZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjgucm93Q291bnQ7XG4gICAgdmFyIGxhc3RSb3dPZmZzZXQgPSBNYXRoLm1heCgwLCByb3dDb3VudCAqIHJvd0hlaWdodCAtIGhlaWdodCk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RSb3dPZmZzZXQsIHJvd0luZGV4ICogcm93SGVpZ2h0KTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm93SW5kZXggKiByb3dIZWlnaHQgLSBoZWlnaHQgKyBzY3JvbGxiYXJTaXplICsgcm93SGVpZ2h0KTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgLSBoZWlnaHQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCArIGhlaWdodCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChoZWlnaHQgLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Um93T2Zmc2V0ICsgTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0Um93T2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxUb3A7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFRvcCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWY5LCBzY3JvbGxMZWZ0KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjkuY29sdW1uV2lkdGgsXG4gICAgICAgIGNvbHVtbkNvdW50ID0gX3JlZjkuY29sdW1uQ291bnQ7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgTWF0aC5mbG9vcihzY3JvbGxMZWZ0IC8gY29sdW1uV2lkdGgpKSk7XG4gIH0sXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjEwLCBzdGFydEluZGV4LCBzY3JvbGxMZWZ0KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjEwLmNvbHVtbldpZHRoLFxuICAgICAgICBjb2x1bW5Db3VudCA9IF9yZWYxMC5jb2x1bW5Db3VudCxcbiAgICAgICAgd2lkdGggPSBfcmVmMTAud2lkdGg7XG4gICAgdmFyIGxlZnQgPSBzdGFydEluZGV4ICogY29sdW1uV2lkdGg7XG4gICAgdmFyIG51bVZpc2libGVDb2x1bW5zID0gTWF0aC5jZWlsKCh3aWR0aCArIHNjcm9sbExlZnQgLSBsZWZ0KSAvIGNvbHVtbldpZHRoKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUNvbHVtbnMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldChfcmVmMTEsIHNjcm9sbFRvcCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMTEucm93SGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWYxMS5yb3dDb3VudDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHJvd0hlaWdodCkpKTtcbiAgfSxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmMTIsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMTIucm93SGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWYxMi5yb3dDb3VudCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjEyLmhlaWdodDtcbiAgICB2YXIgdG9wID0gc3RhcnRJbmRleCAqIHJvd0hlaWdodDtcbiAgICB2YXIgbnVtVmlzaWJsZVJvd3MgPSBNYXRoLmNlaWwoKGhlaWdodCArIHNjcm9sbFRvcCAtIHRvcCkgLyByb3dIZWlnaHQpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlUm93cyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMpIHsvLyBOb29wXG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjEzKSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjEzLmNvbHVtbldpZHRoLFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmMTMucm93SGVpZ2h0O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY29sdW1uV2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAoY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKHJvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgRml4ZWRTaXplTGlzdCA9IC8qI19fUFVSRV9fKi9jcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogZnVuY3Rpb24gZ2V0SXRlbU9mZnNldChfcmVmLCBpbmRleCkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWYuaXRlbVNpemU7XG4gICAgcmV0dXJuIGluZGV4ICogaXRlbVNpemU7XG4gIH0sXG4gIGdldEl0ZW1TaXplOiBmdW5jdGlvbiBnZXRJdGVtU2l6ZShfcmVmMiwgaW5kZXgpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmMi5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaXRlbVNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxTaXplKF9yZWYzKSB7XG4gICAgdmFyIGl0ZW1Db3VudCA9IF9yZWYzLml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmMy5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaXRlbVNpemUgKiBpdGVtQ291bnQ7XG4gIH0sXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChfcmVmNCwgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gX3JlZjQuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBfcmVmNC5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IF9yZWY0Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNC5pdGVtU2l6ZSxcbiAgICAgICAgbGF5b3V0ID0gX3JlZjQubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IF9yZWY0LndpZHRoO1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBsYXN0SXRlbU9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1Db3VudCAqIGl0ZW1TaXplIC0gc2l6ZSk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RJdGVtT2Zmc2V0LCBpbmRleCAqIGl0ZW1TaXplKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaW5kZXggKiBpdGVtU2l6ZSAtIHNpemUgKyBpdGVtU2l6ZSArIHNjcm9sbGJhclNpemUpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHNpemUgLyAyKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdEl0ZW1PZmZzZXQgKyBNYXRoLmZsb29yKHNpemUgLyAyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RJdGVtT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0U3RhcnRJbmRleEZvck9mZnNldChfcmVmNSwgb2Zmc2V0KSB7XG4gICAgdmFyIGl0ZW1Db3VudCA9IF9yZWY1Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNS5pdGVtU2l6ZTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgTWF0aC5mbG9vcihvZmZzZXQgLyBpdGVtU2l6ZSkpKTtcbiAgfSxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmNiwgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IF9yZWY2LmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjYuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBfcmVmNi5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjYuaXRlbVNpemUsXG4gICAgICAgIGxheW91dCA9IF9yZWY2LmxheW91dCxcbiAgICAgICAgd2lkdGggPSBfcmVmNi53aWR0aDtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIG9mZnNldCA9IHN0YXJ0SW5kZXggKiBpdGVtU2l6ZTtcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoKHNpemUgKyBzY3JvbGxPZmZzZXQgLSBvZmZzZXQpIC8gaXRlbVNpemUpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUl0ZW1zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcykgey8vIE5vb3BcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNykge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWY3Lml0ZW1TaXplO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAoaXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemUpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBQdWxsZWQgZnJvbSByZWFjdC1jb21wYXRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9ibG9iLzdjNWRlMDBlN2M4NWUyZmZkMDExYmYzYWYwMjg5OWI2M2Y2OTlkM2Evc3JjL2luZGV4LmpzI0wzNDlcbmZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKHByZXYsIG5leHQpIHtcbiAgZm9yICh2YXIgYXR0cmlidXRlIGluIHByZXYpIHtcbiAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbmV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIF9hdHRyaWJ1dGUgaW4gbmV4dCkge1xuICAgIGlmIChwcmV2W19hdHRyaWJ1dGVdICE9PSBuZXh0W19hdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZVwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wic3R5bGVcIl07XG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0bWVtb1xuXG5mdW5jdGlvbiBhcmVFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0eWxlID0gcHJldlByb3BzLnN0eWxlLFxuICAgICAgcHJldlJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcmV2UHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgdmFyIG5leHRTdHlsZSA9IG5leHRQcm9wcy5zdHlsZSxcbiAgICAgIG5leHRSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UobmV4dFByb3BzLCBfZXhjbHVkZWQyKTtcblxuICByZXR1cm4gIXNoYWxsb3dEaWZmZXJzKHByZXZTdHlsZSwgbmV4dFN0eWxlKSAmJiAhc2hhbGxvd0RpZmZlcnMocHJldlJlc3QsIG5leHRSZXN0KTtcbn1cblxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcblxuZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gIHJldHVybiAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpO1xufVxuXG5leHBvcnQgeyBGaXhlZFNpemVHcmlkLCBGaXhlZFNpemVMaXN0LCBWYXJpYWJsZVNpemVHcmlkLCBWYXJpYWJsZVNpemVMaXN0LCBhcmVFcXVhbCwgc2hvdWxkQ29tcG9uZW50VXBkYXRlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20uanMubWFwXG4iLCIoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKFtdLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5TY3JvbGxwYXJlbnQgPSBmYWN0b3J5KCk7XG4gIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICB2YXIgcmVnZXggPSAvKGF1dG98c2Nyb2xsKS87XG5cbiAgdmFyIHBhcmVudHMgPSBmdW5jdGlvbiAobm9kZSwgcHMpIHtcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlID09PSBudWxsKSB7IHJldHVybiBwczsgfVxuXG4gICAgcmV0dXJuIHBhcmVudHMobm9kZS5wYXJlbnROb2RlLCBwcy5jb25jYXQoW25vZGVdKSk7XG4gIH07XG5cbiAgdmFyIHN0eWxlID0gZnVuY3Rpb24gKG5vZGUsIHByb3ApIHtcbiAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApO1xuICB9O1xuXG4gIHZhciBvdmVyZmxvdyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIHN0eWxlKG5vZGUsIFwib3ZlcmZsb3dcIikgKyBzdHlsZShub2RlLCBcIm92ZXJmbG93LXlcIikgKyBzdHlsZShub2RlLCBcIm92ZXJmbG93LXhcIik7XG4gIH07XG5cbiAgdmFyIHNjcm9sbCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICByZXR1cm4gcmVnZXgudGVzdChvdmVyZmxvdyhub2RlKSk7XG4gIH07XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB2YXIgcHMgPSBwYXJlbnRzKG5vZGUucGFyZW50Tm9kZSwgW10pO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHNjcm9sbChwc1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIHBzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfTtcblxuICByZXR1cm4gc2Nyb2xsUGFyZW50O1xufSkpO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBCdXR0b25Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuICBvblBvaW50ZXJEb3duPzogKGV2ZW50OiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xuICBzaXplPzogU2l6ZTtcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcImxlZnRcIiB8IFwicmlnaHRcIj47XG59O1xuXG5mdW5jdGlvbiBCdXR0b24oe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBvbkNsaWNrLFxuICBvblBvaW50ZXJEb3duLFxuICBjb250YWluZXJSZWYsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUsXG59OiBCdXR0b25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25Qb2ludGVyRG93bj17b25Qb2ludGVyRG93bn1cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3NcIjtcblxudHlwZSBCdXR0b25CYWRnZVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbkJhZGdlKHsgY2hpbGRyZW4sIGludmVydGVkID0gZmFsc2UsIGNsYXNzTmFtZSB9OiBCdXR0b25CYWRnZVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuYnV0dG9uQmFkZ2UsIHtbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWR9LCBjbGFzc05hbWVdKX0+e2NoaWxkcmVufTwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYWRnZTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi9CdXR0b25CYWRnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIE9mZnNldFNpZGUgPSBcImxlZnRcIiB8IFwicmlnaHRcIjtcblxudHlwZSBCdXR0b25MaW5rUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gQnV0dG9uTGluayh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHNpemUsXG4gIGNvbnRhaW5lclJlZixcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIC4uLnByb3BzXG59OiBCdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uTGluaztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uTGluayB9IGZyb20gXCIuL0J1dHRvbkxpbmtcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBDaGVja2JveFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICBzaXplPzogU2l6ZTtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgaW5kZXRlcm1pbmF0ZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIENoZWNrYm94KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgY2hlY2tlZCxcbiAgZGlzYWJsZWQsXG4gIG5hbWUsXG4gIGNsYXNzTmFtZSxcbiAgaW5kZXRlcm1pbmF0ZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxufTogQ2hlY2tib3hQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9uQ2hhbmdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8aW5wdXRcbiAgICAgIGRhdGEtdGVzdGlkPVwiY2hlY2tib3hcIlxuICAgICAgcmVmPXsoaW5wdXRSZWYpID0+IHtcbiAgICAgICAgaWYgKGlucHV0UmVmKSB7XG4gICAgICAgICAgaW5wdXRSZWYuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNoZWNrYm94LCBjbGFzc05hbWUsIHN0eWxlc1tzaXplXV0pfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIG5hbWU9e25hbWV9XG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgLz5cbiAgKTtcblxuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9DaGVja2JveFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBDb2xvclN3YXRjaCB9IGZyb20gXCIuLi9Db2xvclN3YXRjaFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclBpY2tlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIENvbG9yUGlja2VyUHJvcHMgPSB7XG4gIGNvbG9yczogQ29sb3JbXTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgZGlyZWN0aW9uPzogXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCI7XG4gIG9uU2VsZWN0OiAoY29sb3I6IENvbG9yKSA9PiB2b2lkO1xuICBzZWxlY3RlZENvbG9yPzogQ29sb3I7XG4gIGNhblRvZ2dsZT86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBDb2xvclBpY2tlcih7XG4gIGNvbG9ycyxcbiAgY29udGFpbmVyUmVmLFxuICBvblNlbGVjdCxcbiAgc2VsZWN0ZWRDb2xvcixcbiAgZGlyZWN0aW9uID0gXCJ2ZXJ0aWNhbFwiLFxuICBjYW5Ub2dnbGUgPSBmYWxzZSxcbn06IENvbG9yUGlja2VyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb2xvclBpY2tlciwgc3R5bGVzW2RpcmVjdGlvbl1dKX1cbiAgICA+XG4gICAgICB7Y29sb3JzLm1hcCgoY29sb3I6IENvbG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoY2FuVG9nZ2xlICYmIGNvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5KSB7XG4gICAgICAgICAgICBvblNlbGVjdChudWxsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb25TZWxlY3QoY29sb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxDb2xvclN3YXRjaFxuICAgICAgICAgICAga2V5PXtjb2xvci5rZXl9XG4gICAgICAgICAgICBjb2xvcj17Y29sb3J9XG4gICAgICAgICAgICBpc1NlbGVjdGVkPXtjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbGVjdH1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yUGlja2VyO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclBpY2tlciB9IGZyb20gXCIuL0NvbG9yUGlja2VyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JTd2F0Y2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclN3YXRjaFByb3BzID0ge1xuICBjb2xvcjogQ29sb3I7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBDb2xvclN3YXRjaCh7XG4gIGNvbG9yLFxuICBjb250YWluZXJSZWYsXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIG9uQ2xpY2ssXG59OiBDb2xvclN3YXRjaFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbG9yU3dhdGNoLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnNlbGVjdGVkXTogaXNTZWxlY3RlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJjb2xvci1zd2F0Y2hcIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogY29sb3IuaGV4Q29kZSB9fVxuICAgID5cbiAgICAgIHtjb2xvci5sYWJlbCAmJiA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zck9ubHl9PntgU2VsZWN0ICR7Y29sb3IubGFiZWx9IGNvbG9yYH08L3NwYW4+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclN3YXRjaDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi9Db2xvclN3YXRjaFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiLi4vTW9kYWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIENvbmZpcm1hdGlvbk1vZGFsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgYnV0dG9uc0xlZnQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgYnV0dG9uc1JpZ2h0PzogUmVhY3RFbGVtZW50W107XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1vZGFsKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGlzT3BlbixcbiAgYnV0dG9uc0xlZnQgPSBbXSxcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBiYXNlWkluZGV4ID0gMTAxOSxcbn06IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgbm9PdmVybGF5PXtub092ZXJsYXl9XG4gICAgICBub1NoYWRvdz17bm9TaGFkb3d9XG4gICAgICBiYXNlWkluZGV4PXtiYXNlWkluZGV4fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgICB7ISFoZWFkZXIgJiYgPGgxIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsSGVhZGVyfT57aGVhZGVyfTwvaDE+fVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWxDb250ZW50LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc0xlZnR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zUmlnaHR9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuQ29uZmlybWF0aW9uTW9kYWwuZGlzcGxheU5hbWUgPSBcIkNvbmZpcm1hdGlvbk1vZGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpcm1hdGlvbk1vZGFsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCB0eXBlIERyYXdlckNvbnRleHRWYWx1ZSA9IHtcbiAgbm9DbG9zZUljb24/OiBib29sZWFuO1xuICBvbkNsb3NlPygpOiB2b2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IERyYXdlckNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PERyYXdlckNvbnRleHRWYWx1ZT4oXG4gIHt9IGFzIERyYXdlckNvbnRleHRWYWx1ZVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZURyYXdlckNvbnRleHQoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KERyYXdlckNvbnRleHQpO1xufVxuIiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0RyYXdlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDU1NUcmFuc2l0aW9uIH0gZnJvbSBcInJlYWN0LXRyYW5zaXRpb24tZ3JvdXBcIjtcbmltcG9ydCB7IENTU1RyYW5zaXRpb25DbGFzc05hbWVzIH0gZnJvbSBcInJlYWN0LXRyYW5zaXRpb24tZ3JvdXAvQ1NTVHJhbnNpdGlvblwiO1xuaW1wb3J0IHsgRHJhd2VyRm9vdGVyIH0gZnJvbSBcIi4vRHJhd2VyRm9vdGVyXCI7XG5pbXBvcnQgeyBEcmF3ZXJIZWFkZXIgfSBmcm9tIFwiLi9EcmF3ZXJIZWFkZXJcIjtcbmltcG9ydCB7IERyYXdlckNvbnRlbnQgfSBmcm9tIFwiLi9EcmF3ZXJDb250ZW50XCI7XG5pbXBvcnQgeyBEcmF3ZXJDb250ZXh0IH0gZnJvbSBcIi4vQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcblxudHlwZSBEcmF3ZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIG9wZW46IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBub0Nsb3NlSWNvbj86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIHVubW91bnRPbkV4aXQ/OiBib29sZWFuO1xuICBtb3VudE9uRW50ZXI/OiBib29sZWFuO1xuICBwb3J0YWxDb250YWluZXI/OiBFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudDtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIG9uQ2xvc2VBbmltYXRpb25FbmQ/OiAoKSA9PiB2b2lkO1xufTtcblxuY29uc3QgVFJBTlNJVElPTl9DTEFTU19OQU1FUzogQ1NTVHJhbnNpdGlvbkNsYXNzTmFtZXMgPSB7XG4gIGVudGVyOiBzdHlsZXMuZHJhd2VyUGFwZXJFbnRlcixcbiAgZW50ZXJBY3RpdmU6IHN0eWxlcy5kcmF3ZXJQYXBlckVudGVyQWN0aXZlLFxuICBlbnRlckRvbmU6IHN0eWxlcy5kcmF3ZXJQYXBlckVudGVyRG9uZSxcbiAgZXhpdDogc3R5bGVzLmRyYXdlclBhcGVyRXhpdCxcbiAgZXhpdEFjdGl2ZTogc3R5bGVzLmRyYXdlclBhcGVyRXhpdEFjdGl2ZSxcbiAgZXhpdERvbmU6IHN0eWxlcy5kcmF3ZXJQYXBlckV4aXREb25lLFxufTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zaXRpb25DbGFzc05hbWUoXG4gIG5vZGVSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD5cbikge1xuICByZXR1cm4gbm9kZVJlZi5jdXJyZW50Py5jbGFzc05hbWUubWF0Y2goXG4gICAgT2JqZWN0LnZhbHVlcyhUUkFOU0lUSU9OX0NMQVNTX05BTUVTKS5qb2luKFwifFwiKVxuICApPy5bMF07XG59XG5cbmZ1bmN0aW9uIERyYXdlcih7XG4gIG9wZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gIG5vQ2xvc2VJY29uID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBjaGlsZHJlbixcbiAgdW5tb3VudE9uRXhpdCA9IGZhbHNlLFxuICBtb3VudE9uRW50ZXIgPSBmYWxzZSxcbiAgcG9ydGFsQ29udGFpbmVyID0gZG9jdW1lbnQuYm9keSxcbiAgb25DbG9zZSxcbiAgb25DbG9zZUFuaW1hdGlvbkVuZCxcbn06IERyYXdlclByb3BzKSB7XG4gIGNvbnN0IFtpc0RyYXdlclZpc2libGUsIHNldERyYXdlclZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNPdmVybGF5VmlzaWJsZSwgc2V0SXNPdmVybGF5VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgbm9kZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGN1cnJlbnRUcmFuc2l0aW9uQ2xhc3NOYW1lID0gZ2V0Q3VycmVudFRyYW5zaXRpb25DbGFzc05hbWUobm9kZVJlZik7XG5cbiAgY29uc3QgY29udGV4dCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHsgb25DbG9zZSwgbm9DbG9zZUljb24gfSksXG4gICAgW29uQ2xvc2UsIG5vQ2xvc2VJY29uXVxuICApO1xuXG4gIHVzZUhvdGtleXMoXCJFc2NhcGVcIiwgb25DbG9zZSk7XG5cbiAgY29uc3QgaGFuZGxlRW50ZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RHJhd2VyVmlzaWJsZSh0cnVlKTtcbiAgICBzZXRJc092ZXJsYXlWaXNpYmxlKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlRXhpdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRJc092ZXJsYXlWaXNpYmxlKGZhbHNlKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZUV4aXRlZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXREcmF3ZXJWaXNpYmxlKGZhbHNlKTtcbiAgICBvbkNsb3NlQW5pbWF0aW9uRW5kPy4oKTtcbiAgfSwgW29uQ2xvc2VBbmltYXRpb25FbmRdKTtcblxuICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgIDxDU1NUcmFuc2l0aW9uXG4gICAgICBub2RlUmVmPXtub2RlUmVmfVxuICAgICAgaW49e29wZW59XG4gICAgICB0aW1lb3V0PXszMDB9XG4gICAgICBjbGFzc05hbWVzPXtUUkFOU0lUSU9OX0NMQVNTX05BTUVTfVxuICAgICAgdW5tb3VudE9uRXhpdD17dW5tb3VudE9uRXhpdH1cbiAgICAgIG1vdW50T25FbnRlcj17bW91bnRPbkVudGVyfVxuICAgICAgb25FeGl0ZWQ9e2hhbmRsZUV4aXRlZH1cbiAgICAgIG9uRW50ZXI9e2hhbmRsZUVudGVyfVxuICAgICAgb25FeGl0PXtoYW5kbGVFeGl0fVxuICAgID5cbiAgICAgIDxEcmF3ZXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmRyYXdlcixcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy52aXNpYmxlXTogaXNEcmF3ZXJWaXNpYmxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHJlZj17bm9kZVJlZn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuZHJhd2VyUGFwZXIsXG4gICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gYWRkIHRoZSBjdXJyZW50IHRyYW5zaXRpb24gY2xhc3MgbmFtZSBoZXJlIGJlY2F1c2UgaXQgZ2V0cyBkaXNhcHBlYXJlZCBhbG9uZyB3aXRoIHRoZSBkcmF3ZXJcbiAgICAgICAgICAgICAgLy8gd2hlbiBjbGFzc05hbWUgY2hhbmdlc1xuICAgICAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbkNsYXNzTmFtZSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VyUGFwZXJDb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgIHN0eWxlcy5kcmF3ZXJPdmVybGF5LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgW3N0eWxlcy5ub092ZXJsYXldOiBub092ZXJsYXksXG4gICAgICAgICAgICAgICAgW3N0eWxlcy52aXNpYmxlXTogaXNPdmVybGF5VmlzaWJsZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRHJhd2VyQ29udGV4dC5Qcm92aWRlcj5cbiAgICA8L0NTU1RyYW5zaXRpb24+LFxuICAgIHBvcnRhbENvbnRhaW5lclxuICApO1xufVxuXG5EcmF3ZXIuSGVhZGVyID0gRHJhd2VySGVhZGVyO1xuRHJhd2VyLkNvbnRlbnQgPSBEcmF3ZXJDb250ZW50O1xuRHJhd2VyLkZvb3RlciA9IERyYXdlckZvb3RlcjtcblxuZXhwb3J0IGRlZmF1bHQgRHJhd2VyO1xuIiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0RyYXdlckNvbnRlbnQubW9kdWxlLmNzc1wiO1xuXG50eXBlIERyYXdlckNvbnRlbnRQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIERyYXdlckNvbnRlbnQoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH06IERyYXdlckNvbnRlbnRQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmRyYXdlckNvbnRlbnQsIGNsYXNzTmFtZV0pfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJhd2VyQ29udGVudDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRHJhd2VyQ29udGVudCB9IGZyb20gXCIuL0RyYXdlckNvbnRlbnRcIjtcbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9EcmF3ZXJGb290ZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIERyYXdlckZvb3RlclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gRHJhd2VyRm9vdGVyKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSB9OiBEcmF3ZXJGb290ZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmRyYXdlckZvb3RlciwgY2xhc3NOYW1lXSl9PntjaGlsZHJlbn08L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJhd2VyRm9vdGVyO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBEcmF3ZXJGb290ZXIgfSBmcm9tIFwiLi9EcmF3ZXJGb290ZXJcIjtcbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vLi4vSWNvblwiO1xuaW1wb3J0IGNsb3NlSWNvbiBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL2Nsb3NlLnN2Z1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0RyYXdlckhlYWRlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyB1c2VEcmF3ZXJDb250ZXh0IH0gZnJvbSBcIi4uL0NvbnRleHRcIjtcblxudHlwZSBEcmF3ZXJIZWFkZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIERyYXdlckhlYWRlcih7IGNoaWxkcmVuLCBjbGFzc05hbWUgfTogRHJhd2VySGVhZGVyUHJvcHMpIHtcbiAgY29uc3QgeyBvbkNsb3NlLCBub0Nsb3NlSWNvbiB9ID0gdXNlRHJhd2VyQ29udGV4dCgpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuZHJhd2VySGVhZGVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7IW5vQ2xvc2VJY29uICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJIZWFkZXJDbG9zZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJIZWFkZXJDbG9zZUljb259IG9uQ2xpY2s9e29uQ2xvc2V9PlxuICAgICAgICAgICAgPEljb24gc3JjPXtjbG9zZUljb259IHNpemU9e1wieGxhcmdlXCJ9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRHJhd2VySGVhZGVyO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBEcmF3ZXJIZWFkZXIgfSBmcm9tIFwiLi9EcmF3ZXJIZWFkZXJcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRHJhd2VyIH0gZnJvbSBcIi4vRHJhd2VyXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHsgSXRlbSwgUmVuZGVyRGlzcGxheVByb3BzIH0gZnJvbSBcIi4vRHJvcGRvd25cIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9DbGlja2FibGUubW9kdWxlLmNzc1wiO1xuXG5pbXBvcnQgaWNvbk1lbnUgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC1kb3duLnN2Z1wiO1xuXG5leHBvcnQgdHlwZSBDbGlja2FibGVQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBPbWl0PFxuICBSZW5kZXJEaXNwbGF5UHJvcHM8VD4sXG4gIFwic2VsZWN0ZWRJdGVtXCIgfCBcInRvZ2dsZUlzT3BlblwiXG4+ICYge1xuICBvbkNsaWNrOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5bXCJ0b2dnbGVJc09wZW5cIl07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2xpY2thYmxlPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGRpc3BsYXksXG4gIGlzRGlzYWJsZWQsXG4gIG9uQ2xpY2s6IGhhbmRsZUNsaWNrLFxufTogQ2xpY2thYmxlUHJvcHM8VD4pIHtcbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICBhbGlnbj1cImxlZnRcIlxuICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuY29udGFpbmVyfT5cbiAgICAgICAge2Rpc3BsYXl9XG4gICAgICAgIDxJY29uIGFsdD1cIkRyb3Bkb3duXCIgc3JjPXtpY29uTWVudX0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvQnV0dG9uPlxuICApO1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Q2hpbGQsIFJlYWN0RWxlbWVudCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljayB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuXG5pbXBvcnQgeyBDbGlja2FibGUgfSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbmltcG9ydCB7IE1lbnUsIE1lbnVDb250YWluZXIsIE1lbnVJdGVtLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4uL01lbnVcIjtcblxuZXhwb3J0IHR5cGUgSXRlbSA9IHsgaWQ6IG51bWJlciB8IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckRpc3BsYXlQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBQaWNrPFxuICBEcm9wZG93blByb3BzPFQ+LFxuICBcImRpc3BsYXlcIiB8IFwic2VsZWN0ZWRJdGVtXCJcbj4gJiB7IGlzRGlzYWJsZWQ6IGJvb2xlYW47IHRvZ2dsZUlzT3BlbjogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJDbGlja2FibGVGbjxUIGV4dGVuZHMgSXRlbT4gPSAoXG4gIHByb3BzOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5cbikgPT4gUmVhY3RFbGVtZW50O1xuXG5leHBvcnQgdHlwZSBJdGVtQm9keVJlbmRlcmVyRm48VCBleHRlbmRzIEl0ZW0+ID0gKHN0YXRlOiB7XG4gIGl0ZW06IFQ7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59KSA9PiBSZWFjdENoaWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duUHJvcHM8VCBleHRlbmRzIEl0ZW0+IHtcbiAgaXRlbUJvZHlSZW5kZXJlcj86IEl0ZW1Cb2R5UmVuZGVyZXJGbjxUPjtcbiAgaXRlbXM6IFRbXTtcbiAgb25TZWxlY3Q6IChpdGVtOiBUKSA9PiB2b2lkO1xuICBkaXNwbGF5OiBSZWFjdENoaWxkO1xuICByZW5kZXJDbGlja2FibGU/OiBSZW5kZXJDbGlja2FibGVGbjxUPjtcbiAgc2VsZWN0ZWRJdGVtOiBUIHwgbnVsbDtcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGl0ZW1Cb2R5UmVuZGVyZXIsXG4gIGl0ZW1zLFxuICBvblNlbGVjdDogaGFuZGxlU2VsZWN0LFxuICBkaXNwbGF5LFxuICByZW5kZXJDbGlja2FibGUsXG4gIHNlbGVjdGVkSXRlbSxcbiAgcGxhY2VtZW50ID0geyB2ZXJ0aWNhbDogXCJib3R0b21cIiwgaG9yaXpvbnRhbDogXCJsZWZ0XCIgfVxufTogRHJvcGRvd25Qcm9wczxUPikge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gc2V0SXNPcGVuKGZhbHNlKSk7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGl0ZW06IFQpID0+IHtcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSk7XG4gICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgfTtcbiAgY29uc3QgaXNEaXNhYmxlZCA9ICFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHRvZ2dsZUlzT3BlbiA9ICgpID0+IHNldElzT3BlbighaXNPcGVuKTtcblxuICByZXR1cm4gKFxuICAgIDxNZW51Q29udGFpbmVyXG4gICAgICBidXR0b249e1xuICAgICAgICB0eXBlb2YgcmVuZGVyQ2xpY2thYmxlID09PSBcImZ1bmN0aW9uXCIgPyAoXG4gICAgICAgICAgcmVuZGVyQ2xpY2thYmxlKHtcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLFxuICAgICAgICAgICAgdG9nZ2xlSXNPcGVuLFxuICAgICAgICAgIH0pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENsaWNrYWJsZVxuICAgICAgICAgICAgZGlzcGxheT17ZGlzcGxheX1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVJc09wZW59XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcGxhY2VtZW50PXtwbGFjZW1lbnR9XG4gICAgICByZWY9e3JlZn1cbiAgICA+XG4gICAgICA8TWVudSBpc09wZW49e2lzT3Blbn0+XG4gICAgICAgIHtpdGVtcyAmJlxuICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgPE1lbnVJdGVtXG4gICAgICAgICAgICAgIGlzQWN0aXZlPXtpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkfVxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNsaWNrKGl0ZW0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aXRlbUJvZHlSZW5kZXJlclxuICAgICAgICAgICAgICAgID8gaXRlbUJvZHlSZW5kZXJlcih7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGl0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogaXRlbS5uYW1lfVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICApKX1cbiAgICAgIDwvTWVudT5cbiAgICA8L01lbnVDb250YWluZXI+XG4gICk7XG59XG4iLCJleHBvcnQge1xuICBEcm9wZG93bixcbiAgRHJvcGRvd25Qcm9wcyxcbiAgSXRlbSBhcyBEcm9wZG93bkl0ZW0sXG4gIEl0ZW1Cb2R5UmVuZGVyZXJGbiBhcyBEcm9wZG93bkl0ZW1Cb2R5UmVuZGVyZXJGbixcbiAgUmVuZGVyQ2xpY2thYmxlRm4gYXMgRHJvcGRvd25SZW5kZXJDbGlja2FibGVGbixcbiAgUmVuZGVyRGlzcGxheVByb3BzIGFzIERyb3Bkb3duUmVuZGVyRGlzcGxheVByb3BzLFxufSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuZXhwb3J0IHtcbiAgQ2xpY2thYmxlIGFzIERyb3Bkb3duQ2xpY2thYmxlLFxuICBDbGlja2FibGVQcm9wcyBhcyBEcm9wZG93bkNsaWNrYWJsZVByb3BzXG59IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgRmlsZUlucHV0U2l6ZSA9IFNpemU7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uQ2hhbmdlOiAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGFjY2VwdD86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBzaXplPzogRmlsZUlucHV0U2l6ZTtcbn07XG5cbmZ1bmN0aW9uIEZpbGVJbnB1dCh7XG4gIGNoaWxkcmVuLFxuICBhY2NlcHQsXG4gIG9uQ2hhbmdlLFxuICBpbnB1dFJlZixcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxhYmVsXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmxhYmVsLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5pbnB1dH1cbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBpZD1cImZpbGVcIlxuICAgICAgICBhY2NlcHQ9e2FjY2VwdH1cbiAgICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgIC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZUlucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlSW5wdXQgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcbmV4cG9ydCB7IEZpbGVJbnB1dFNpemUgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDpcbiAgICB8IFwicmlnaHRcIlxuICAgIHwgXCJyaWdodEVkZ2VcIlxuICAgIHwgXCJyaWdodE9uRWRnZVwiXG4gICAgfCBcImxlZnRcIlxuICAgIHwgXCJsZWZ0RWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsOlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJ0b3BFZGdlXCJcbiAgICB8IFwidG9wT25FZGdlXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwiYm90dG9tRWRnZVwiXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XG59O1xuXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvbHVtblwiIHwgXCJyb3dcIjtcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xufTtcblxuZnVuY3Rpb24gRmxvYXRpbmdQYW5lbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb2x1bW5cIixcbiAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImNlbnRlclwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiwgcGFyZW50OiBcInZpZXdwb3J0XCIgfSxcbn06IEZsb2F0aW5nUGFuZWxQcm9wcykge1xuICBjb25zdCBob3Jpem9udGFsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQuaG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIlxuICAgICAgPyBcImhvcml6b250YWxDZW50ZXJcIlxuICAgICAgOiBwbGFjZW1lbnQuaG9yaXpvbnRhbDtcblxuICBjb25zdCB2ZXJ0aWNhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50LnZlcnRpY2FsID09PSBcImNlbnRlclwiID8gXCJ2ZXJ0aWNhbENlbnRlclwiIDogcGxhY2VtZW50LnZlcnRpY2FsO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImZsb2F0aW5nLXBhbmVsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbaG9yaXpvbnRhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1t2ZXJ0aWNhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1tsYXlvdXRdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IHBsYWNlbWVudC5wYXJlbnQgIT09IFwiY29udGFpbmVyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbi5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgSWNvblByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MSW1hZ2VFbGVtZW50PjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBzcmM6IHN0cmluZztcbiAgc2l6ZT86IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCIgfCBcInhsYXJnZVwiO1xufTtcblxuZnVuY3Rpb24gSWNvbih7XG4gIHNyYyxcbiAgYWx0LFxuICBjb250YWluZXJSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxufTogSWNvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGltZ1xuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmljb24sXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQgfSxcbiAgICAgIF0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbiB9IGZyb20gXCIuL0ljb25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBJY29uQnV0dG9uUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIHNyYzogc3RyaW5nO1xuICBhbHQ6IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xuICBzaXplPzogU2l6ZTtcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI+O1xufTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbih7XG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgc3JjLFxuICBhbHQsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSA9IFwiYnV0dG9uXCIsXG59OiBJY29uQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbiB9IGZyb20gXCIuL0ljb25CdXR0b25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI7XG5cbnR5cGUgSWNvbkJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBzcmM6IHN0cmluZztcbiAgICAgIGFsdDogc3RyaW5nO1xuICAgICAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBJY29uQnV0dG9uTGluayh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3JjLFxuICBhbHQsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBJY29uQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uLWJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbkxpbms7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b25MaW5rIH0gZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmtcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JbWFnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEltYWdlUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGxheW91dD86IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG4gIHNyYzogc3RyaW5nO1xuICBzcmNXaWR0aD86IG51bWJlcjtcbiAgc3JjSGVpZ2h0PzogbnVtYmVyO1xuICBkZWNvZGluZz86IFwiYXN5bmNcIiB8IFwic3luY1wiIHwgXCJhdXRvXCI7XG4gIGxvYWRpbmc/OiBcImVhZ2VyXCIgfCBcImxhenlcIjtcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xufTtcblxuZnVuY3Rpb24gSW1hZ2VDb21wb25lbnQoe1xuICBzcmMsXG4gIGFsdCxcbiAgc3JjV2lkdGgsXG4gIHNyY0hlaWdodCxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXG4gIGRlY29kaW5nID0gXCJhdXRvXCIsXG4gIGxvYWRpbmcgPSBcImVhZ2VyXCIsXG4gIHN0eWxlLFxufTogSW1hZ2VQcm9wcykge1xuICBjb25zdCBpbWFnZUVsZW1lbnQgPSAoXG4gICAgPGltZ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmltYWdlLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZVwiXG4gICAgICBhbHQ9e2FsdH1cbiAgICAgIHNyYz17c3JjfVxuICAgICAgd2lkdGg9e3NyY1dpZHRofVxuICAgICAgaGVpZ2h0PXtzcmNIZWlnaHR9XG4gICAgICBkZWNvZGluZz17ZGVjb2Rpbmd9XG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgIC8+XG4gICk7XG5cbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICB7aW1hZ2VFbGVtZW50fVxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICBpbWFnZUVsZW1lbnRcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VDb21wb25lbnQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEltYWdlLCBJbWFnZVByb3BzIH0gZnJvbSBcIi4vSW1hZ2VcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMYWJlbElucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MTGFiZWxFbGVtZW50PjtcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9XG4gICAgPlxuICAgICAge3ZhbHVlfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMYWJlbCB9IGZyb20gXCIuL0xhYmVsXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlldy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiB7IHRleHQ6IHN0cmluZzsgaWQ6IHN0cmluZyB9O1xuICBoZWFkZXJBY3Rpb25zPzogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXcoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaGVhZGVyQWN0aW9ucyxcbn06IExpc3RWaWV3UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7KGhlYWRlciB8fCBoZWFkZXJBY3Rpb25zKSAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT5cbiAgICAgICAgICB7aGVhZGVyICYmIChcbiAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJMYWJlbH0gaWQ9e2hlYWRlci5pZH0+XG4gICAgICAgICAgICAgIHtoZWFkZXIudGV4dH1cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aGVhZGVyQWN0aW9uc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPHVsIGFyaWEtbGFiZWxsZWRieT17aGVhZGVyPy5pZH0gY2xhc3NOYW1lPXtzdHlsZXMubGlzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXdJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogTGlzdFZpZXdJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uTGluayB9IGZyb20gXCIuLi9CdXR0b25MaW5rXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgTGlzdFZpZXdMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nOiBib29sZWFuO1xuICAgICAgYWxpZ246IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICAgIHNpemU6IFNpemU7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gTGlzdFZpZXdMaW5rSXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhczogQ29tcG9uZW50LFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBMaXN0Vmlld0xpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uTGlua1xuICAgICAgICBhcz17Q29tcG9uZW50fVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbkxpbms+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXcgfSBmcm9tIFwiLi9MaXN0Vmlld1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0l0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdMaW5rSXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIFJlZk9iamVjdCxcbiAgdXNlQ29udGV4dCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBQbGFjZW1lbnRDb250ZXh0IH0gZnJvbSBcIi4vTWVudUNvbnRhaW5lclwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNPcGVuPzogYm9vbGVhbjtcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBmb290ZXI/OiBSZWFjdE5vZGU7XG4gIHNtYXJ0TGF5b3V0PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIE1lbnUoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBjbGFzc05hbWUsXG4gIGlzT3BlbiA9IHRydWUsXG4gIGhlYWRlcixcbiAgZm9vdGVyLFxuICBzbWFydExheW91dCA9IHRydWUsXG59OiBNZW51UHJvcHMpIHtcbiAgY29uc3QgbWVudVBsYWNlbWVudCA9IHVzZUNvbnRleHQoUGxhY2VtZW50Q29udGV4dCk7XG4gIGNvbnN0IGlubmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlZiA9IGNvbnRhaW5lclJlZiB8fCBpbm5lclJlZjtcblxuICBpZiAoIW1lbnVQbGFjZW1lbnQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJNZW51IGNvbXBvbmVudCBtdXN0IGJlIHdyYXBwZWQgYnkgYSBNZW51Q29udGFpbmVyIGNvbXBvbmVudC5cIlxuICAgICk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc21hcnRMYXlvdXQgJiYgcmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHsgdG9wLCBib3R0b20gfSA9IHJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZGlzdGFuY2VUb0VkZ2UgPVxuICAgICAgICBtZW51UGxhY2VtZW50LnZlcnRpY2FsID09PSBcInRvcFwiID8gdG9wIDogd2luZG93LmlubmVySGVpZ2h0IC0gYm90dG9tO1xuXG4gICAgICBpZiAoZGlzdGFuY2VUb0VkZ2UgPCAwKSB7XG4gICAgICAgIGNvbnN0IHVsRWwgPSByZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKFwidWxcIik7XG4gICAgICAgIGNvbnN0IGNoaWxkRWxlbWVudHMgPSB1bEVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSxhXCIpO1xuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSB1bEVsLmNsaWVudEhlaWdodCArIGRpc3RhbmNlVG9FZGdlO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBjaGlsZEVsZW1lbnRzLmxlbmd0aFxuICAgICAgICAgID8gZ2V0Q29tcHV0ZWRTdHlsZShjaGlsZEVsZW1lbnRzWzBdKS5taW5IZWlnaHRcbiAgICAgICAgICA6IDA7XG4gICAgICAgIHVsRWwuc3R5bGUubWF4SGVpZ2h0ID0gYGNhbGMoJHtuZXdIZWlnaHR9cHggLSAke29mZnNldH0pYDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc09wZW4sIG1lbnVQbGFjZW1lbnQsIHNtYXJ0TGF5b3V0XSk7XG5cbiAgaWYgKCFpc09wZW4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy5tZW51LFxuICAgICAgICAgIHsgW3N0eWxlcy5vcGVuXTogaXNPcGVuIH0sXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7aGVhZGVyICYmIGlzT3BlbiAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT57aGVhZGVyfTwvaDM+fVxuICAgICAgICAgIDx1bD57Y2hpbGRyZW59PC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtmb290ZXIgJiYgaXNPcGVuICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgc3R5bGVzLmZvb3RlcixcbiAgICAgICAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogIWNoaWxkcmVuIH0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Zm9vdGVyfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnU7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgUGxhY2VtZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8XG4gIE1lbnVDb250YWluZXJQcm9wc1tcInBsYWNlbWVudFwiXSB8IHVuZGVmaW5lZFxuPih1bmRlZmluZWQpO1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cbiAgICAgIDxQbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1c2VNZW1vKCgpID0+IHBsYWNlbWVudCwgW3BsYWNlbWVudF0pfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1lbnVDb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC52ZXJ0aWNhbF0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9QbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3J3YXJkUmVmKE1lbnVDb250YWluZXIpO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudUl0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MTElFbGVtZW50PikgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE1lbnVJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGlzQWN0aXZlID0gZmFsc2UsXG59OiBNZW51SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVJdGVtLFxuICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUgfSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51TGlua0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBhczogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIE1lbnVMaW5rSXRlbSh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICAuLi5wcm9wc1xufTogTWVudUxpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgZGF0YS10ZXN0aWQ9XCJtZW51LWxpbmstaXRlbVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVMaW5rSXRlbSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudSB9IGZyb20gXCIuL01lbnVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUNvbnRhaW5lciwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUl0ZW0gfSBmcm9tIFwiLi9NZW51SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51TGlua0l0ZW0gfSBmcm9tIFwiLi9NZW51TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUhvdGtleXMgfSBmcm9tIFwicmVhY3QtaG90a2V5cy1ob29rXCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1vZGFsUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJ1dHRvbj86IFJlYWN0Tm9kZTtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBNb2RhbCh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGlzT3BlbixcbiAgYnV0dG9uLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBiYXNlWkluZGV4ID0gMTAwOSxcbn06IE1vZGFsUHJvcHMpIHtcbiAgdXNlSG90a2V5cyhcIkVzY2FwZVwiLCBvbkNsb3NlKTtcblxuICBjb25zdCBoYW5kbGVPdmVybGF5Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25DbG9zZSgpO1xuICB9LCBbb25DbG9zZV0pO1xuXG4gIHJldHVybiAoXG4gICAgaXNPcGVuICYmIChcbiAgICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub092ZXJsYXldOiBub092ZXJsYXkgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLW92ZXJsYXlcIlxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU92ZXJsYXlDbGlja31cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDEgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2J1dHRvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b259XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2J1dHRvbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vTnVtcGFkLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGJhY2tzcGFjZUljb24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnXCI7XG5cbnR5cGUgRGlnaXQgPSAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IDggfCA5O1xuXG5jb25zdCBhcHBlbmREaWdpdCA9IChudW1iZXI6IG51bWJlciwgZGlnaXQ6IERpZ2l0KSA9PiB7XG4gIHJldHVybiBudW1iZXIgKiAxMCArIGRpZ2l0O1xufTtcblxuY29uc3QgcG9wRGlnaXQgPSAobnVtYmVyOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyIC8gMTApO1xufTtcblxuY29uc3QgZXZlbnREaWdpdEtleXMgPSBbXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE51bXBhZFByb3BzIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25DaGFuZ2U6IChuZXdOdW1iZXI6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE51bXBhZCA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTERpdkVsZW1lbnQsIE51bXBhZFByb3BzPihcbiAgKHsgbnVtYmVyLCBvbkNoYW5nZSwgZGlzYWJsZWQgPSBmYWxzZSB9LCByZWYpID0+IHtcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwiQmFja3NwYWNlXCIpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShwb3BEaWdpdChudW1iZXIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnREaWdpdEtleXMuaW5jbHVkZXMoZS5rZXkpKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZGlnaXQgPSBwYXJzZUludChlLmtleSwgMTApIGFzIERpZ2l0O1xuICAgICAgICBvbkNoYW5nZShhcHBlbmREaWdpdChudW1iZXIsIGRpZ2l0KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyID1cbiAgICAgIChuZXdOdW1iZXI6IG51bWJlcikgPT4gKGU6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShuZXdOdW1iZXIpO1xuICAgICAgfTtcblxuICAgIGNvbnN0IE51bXBhZEtleXMgPSBBcnJheSgxMClcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBudW1wYWRWYWx1ZSA9ICgoaW5kZXggKyAxKSAlIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihcbiAgICAgICAgICAgICAgYXBwZW5kRGlnaXQobnVtYmVyLCBudW1wYWRWYWx1ZSlcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge251bXBhZFZhbHVlfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2Nzcy5udW1wYWR9XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJudW1wYWRcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLm51bWJlcnN9PlxuICAgICAgICAgIHtOdW1wYWRLZXlzfVxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzLmJ1dHRvbn1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249e2NyZWF0ZUVtaXROdW1iZXJIYW5kbGVyKHBvcERpZ2l0KG51bWJlcikpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGFsdD1cIkJhY2tzcGFjZVwiIHNyYz17YmFja3NwYWNlSWNvbn0gLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4pO1xuIiwiZXhwb3J0IHsgTnVtcGFkIH0gZnJvbSBcIi4vTnVtcGFkXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3ZlcmxheS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgT3ZlcmxheVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIGlzRml4ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE92ZXJsYXkoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBpc0ZpeGVkID0gZmFsc2UsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IE92ZXJsYXlQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJvdmVybGF5XCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogaXNGaXhlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE92ZXJsYXk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE92ZXJsYXkgfSBmcm9tIFwiLi9PdmVybGF5XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Hcm91cE9wdGlvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcbmltcG9ydCB7IE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gXCIuLi9PcHRpb25cIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vLi4vSWNvbkJ1dHRvblwiO1xuaW1wb3J0IGljb25DYXJldERvd24gZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9zZWxlY3QtY2FyZXQtZG93bi5zdmdcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+O1xufTtcblxuZnVuY3Rpb24gR3JvdXBPcHRpb24oeyBjbGFzc05hbWUsIGxhYmVsLCBvcHRpb25zIH06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2hvd0V4cGFuZGVkR3JvdXAgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG4gIGNvbnN0IFtleHBhbmRlZCwgdG9nZ2xlRXhwYW5kXSA9IHVzZVRvZ2dsZShzaG93RXhwYW5kZWRHcm91cCk7XG5cbiAgY29uc3QgaGFuZGxlR3JvdXBDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVFeHBhbmQoKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0gb25DbGljaz17aGFuZGxlR3JvdXBDbGlja30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9PntsYWJlbH08L2Rpdj5cbiAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHsgW3N0eWxlcy5leHBhbmRlZF06IGV4cGFuZGVkIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgc3JjPXtpY29uQ2FyZXREb3dufVxuICAgICAgICAgIGFsdD17ZXhwYW5kZWQgPyBcIkNvbGxhcHNlXCIgOiBcIkV4cGFuZFwifVxuICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAge2V4cGFuZGVkICYmXG4gICAgICAgIG9wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICA8T3B0aW9uIGtleT17b3B0aW9uLnZhbHVlfSBkYXRhPXtvcHRpb259PlxuICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdyb3VwT3B0aW9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBHcm91cE9wdGlvbiB9IGZyb20gXCIuL0dyb3VwT3B0aW9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL09wdGlvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gXCIuLi8uLi9DaGVja2JveFwiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGF0YTogT3B0aW9uVHlwZTtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbih7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGRhdGEgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgc2VsZWN0ZWRPcHRpb25zLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiB9ID1cbiAgICB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGlzQ2hlY2tlZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRPcHRpb25zLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkuaW5jbHVkZXMoZGF0YS52YWx1ZSksXG4gICAgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihkYXRhKTtcbiAgfSwgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5zZWxlY3RlZF06IGlzQ2hlY2tlZCAmJiAhbXVsdGlwbGUgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICA+XG4gICAgICB7bXVsdGlwbGUgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveH1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT57Y2hpbGRyZW59PC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPcHRpb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE9wdGlvbiB9IGZyb20gXCIuL09wdGlvblwiO1xuIiwiaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIi4uLy4uL0NoZWNrYm94XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvbiB9IGZyb20gXCIuLi9Hcm91cE9wdGlvblwiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSBcIi4uL09wdGlvblwiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3B0aW9uTGlzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xufTtcblxuLy8gc2VlIGRvY3MgdG8gdW5kZXJzdGFuZCBuZWVkIG9mIHRoZSBmdW5jdGlvbiBiZWxvdyBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL25hcnJvd2luZy5odG1sI3VzaW5nLXR5cGUtcHJlZGljYXRlc1xuZXhwb3J0IGNvbnN0IGlzT3B0aW9uID0gKFxuICBvcHRpb246IE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGVcbik6IG9wdGlvbiBpcyBPcHRpb25UeXBlID0+IHtcbiAgcmV0dXJuIChvcHRpb24gYXMgT3B0aW9uVHlwZSkudmFsdWUgIT09IHVuZGVmaW5lZDtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbkxpc3QoeyBvcHRpb25zLCBvbkZpbHRlciwgb25DaGFuZ2UgfTogUHJvcHMpIHtcbiAgY29uc3QgW3NlbGVjdEFsbENoZWNrZWQsIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIG11bHRpcGxlLFxuICAgIHNlYXJjaEtleXdvcmQsXG4gICAgc2VsZWN0QWxsLFxuICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhc0dyb3VwT3B0aW9uID0gb3B0aW9ucy5zb21lKChvcHRpb24pID0+ICFpc09wdGlvbihvcHRpb24pKTtcblxuICBjb25zdCBmaWx0ZXJPcHRpb25zID0gKG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+KSA9PiB7XG4gICAgY29uc3Qga2V5d29yZCA9IHNlYXJjaEtleXdvcmQudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICByZXR1cm4ga2V5d29yZC5sZW5ndGhcbiAgICAgID8gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBvbkZpbHRlclxuICAgICAgICAgICAgPyBvbkZpbHRlcihvcHRpb24sIGtleXdvcmQpXG4gICAgICAgICAgICA6IG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpXG4gICAgICAgIClcbiAgICAgIDogb3B0aW9ucztcbiAgfTtcblxuICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB1c2VNZW1vPEFycmF5PEdyb3VwT3B0aW9uVHlwZSB8IE9wdGlvblR5cGU+PigoKSA9PiB7XG4gICAgaWYgKGhhc0dyb3VwT3B0aW9uKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgIChmaWx0ZXJlZDogQXJyYXk8R3JvdXBPcHRpb25UeXBlPiwgZ3JvdXBPcHRpb246IEdyb3VwT3B0aW9uVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBPcHRpb25zID0gZmlsdGVyT3B0aW9ucyhncm91cE9wdGlvbi5vcHRpb25zKTtcblxuICAgICAgICAgIGlmIChmaWx0ZXJlZEdyb3VwT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIC4uLmZpbHRlcmVkLFxuICAgICAgICAgICAgICB7IC4uLmdyb3VwT3B0aW9uLCBvcHRpb25zOiBmaWx0ZXJlZEdyb3VwT3B0aW9ucyB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyT3B0aW9ucyhvcHRpb25zIGFzIEFycmF5PE9wdGlvblR5cGU+KTtcbiAgICB9XG4gIH0sIFtoYXNHcm91cE9wdGlvbiwgb3B0aW9ucywgc2VhcmNoS2V5d29yZF0pO1xuXG4gIGNvbnN0IGZpbHRlcmVkT3B0aW9uc0NvdW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucy5yZWR1Y2UoKGxlbmd0aDogbnVtYmVyLCBuZXh0T3B0aW9uKSA9PiB7XG4gICAgICBpZiAoaXNPcHRpb24obmV4dE9wdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbGVuZ3RoICsgbmV4dE9wdGlvbi5vcHRpb25zLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfSwgW2hhc0dyb3VwT3B0aW9uLCBmaWx0ZXJlZE9wdGlvbnMsIGlzT3B0aW9uXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbHRlcigoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZE9wdGlvbnMuZmluZCgoZmlsdGVyZWRPcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIGlzT3B0aW9uKGZpbHRlcmVkT3B0aW9uKVxuICAgICAgICAgID8gZmlsdGVyZWRPcHRpb24udmFsdWUgPT09IHNlbGVjdGVkT3B0aW9uLnZhbHVlXG4gICAgICAgICAgOiBmaWx0ZXJlZE9wdGlvbi5vcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb24udmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KS5sZW5ndGg7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnMsIGZpbHRlcmVkT3B0aW9uc10pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEFsbENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc2VsZWN0QWxsQ2hlY2tlZCkge1xuICAgICAgY29uc3Qgb3B0aW9uc1RvU2VsZWN0ID0gZmlsdGVyZWRPcHRpb25zXG4gICAgICAgIC5tYXAoKGZpbHRlcmVkT3B0aW9uKSA9PlxuICAgICAgICAgIGlzT3B0aW9uKGZpbHRlcmVkT3B0aW9uKSA/IGZpbHRlcmVkT3B0aW9uIDogZmlsdGVyZWRPcHRpb24ub3B0aW9uc1xuICAgICAgICApXG4gICAgICAgIC5mbGF0KCk7XG5cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhvcHRpb25zVG9TZWxlY3QpO1xuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2Uob3B0aW9uc1RvU2VsZWN0Lm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMoW10pO1xuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoW10pO1xuICAgIH1cblxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQoKTtcbiAgfSwgW1xuICAgIGZpbHRlcmVkT3B0aW9ucyxcbiAgICBpc09wdGlvbixcbiAgICBzZWxlY3RBbGxDaGVja2VkLFxuICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkLFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbnNDb3VudCA9PT0gZmlsdGVyZWRPcHRpb25zQ291bnQpIHtcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtcbiAgICBzZWxlY3RlZE9wdGlvbnNDb3VudCxcbiAgICBmaWx0ZXJlZE9wdGlvbnNDb3VudCxcbiAgICBzZWxlY3RBbGxDaGVja2VkLFxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQsXG4gIF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAge3NlbGVjdEFsbCAmJiBtdWx0aXBsZSAmJiAhIWZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2VsZWN0QWxsQ29udGFpbmVyfVxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbGVjdEFsbENsaWNrfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3hDb250YWluZXJ9PlxuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94fVxuICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RBbGxDaGVja2VkfVxuICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtcbiAgICAgICAgICAgICAgICAhIXNlbGVjdGVkT3B0aW9uc0NvdW50ICYmXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zQ291bnQgIT09IGZpbHRlcmVkT3B0aW9uc0NvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT5TZWxlY3QgQWxsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7ISFmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgICAgICBmaWx0ZXJlZE9wdGlvbnMubWFwKChvcHRpb24pID0+XG4gICAgICAgICAgaXNPcHRpb24ob3B0aW9uKSA/IChcbiAgICAgICAgICAgIDxPcHRpb24ga2V5PXtvcHRpb24udmFsdWV9IGRhdGE9e29wdGlvbn0+XG4gICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPEdyb3VwT3B0aW9uXG4gICAgICAgICAgICAgIGtleT17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICBsYWJlbD17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb24ub3B0aW9uc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm5vT3B0aW9uc30+XG4gICAgICAgICAgTm8gbWF0Y2hlcyBmb3JcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zZWFyY2hLZXl3b3JkfT57YCAke3NlYXJjaEtleXdvcmR9YH08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3B0aW9uTGlzdDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3B0aW9uTGlzdCwgaXNPcHRpb24gfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWFyY2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tIFwiLi4vLi4vVGV4dElucHV0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uLy4uL0ljb25cIjtcbmltcG9ydCBpY29uU2VhcmNoIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvc2VhcmNoLnN2Z1wiO1xuaW1wb3J0IGljb25Dcm9zc2VkIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvY3Jvc3NlZC5zdmdcIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vLi4vSWNvbkJ1dHRvblwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBTZWFyY2goeyBjbGFzc05hbWUgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBzZWFyY2hLZXl3b3JkLCBzZXRTZWFyY2hLZXl3b3JkIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgc2V0U2VhcmNoS2V5d29yZCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2VhcmNoS2V5d29yZF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTZWFyY2hLZXl3b3JkKFwiXCIpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvblNlYXJjaENvbnRhaW5lcn0+XG4gICAgICAgIDxJY29uIHNyYz17aWNvblNlYXJjaH0gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPFRleHRJbnB1dFxuICAgICAgICB2YWx1ZT17c2VhcmNoS2V5d29yZH1cbiAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHRvIHNlYXJjaC4uLlwiXG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTZWFyY2hLZXl3b3JkQ2hhbmdlfVxuICAgICAgICBub0JvcmRlclxuICAgICAgLz5cbiAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnJlc2V0QnV0dG9ufVxuICAgICAgICBzcmM9e2ljb25Dcm9zc2VkfVxuICAgICAgICBhbHQ9XCJDbGVhclwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlYXJjaEtleXdvcmRSZXNldENsaWNrfVxuICAgICAgICBkaXNhYmxlZD17IXNlYXJjaEtleXdvcmR9XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWFyY2g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gXCIuL1NlYXJjaFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2ssIHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dFByb3ZpZGVyIH0gZnJvbSBcIi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uL0ljb25CdXR0b25cIjtcbmltcG9ydCB7IE9wdGlvbkxpc3QgfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuXG50eXBlIFNlbGVjdFByb3BzID0ge1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzaG93U2VsZWN0ZWRBc1RhZ3M/OiBib29sZWFuO1xuICBzaG93U2VhcmNoPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBzY3JvbGxNZW51SW50b1ZpZXc/OiBib29sZWFuO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlPjtcbiAgd2lkdGg6IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG4gIGNsYXNzTmFtZSxcbiAgZGVmYXVsdFZhbHVlLFxuICBkaXNhYmxlZCxcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgb3B0aW9ucyxcbiAgcGxhY2Vob2xkZXIsXG4gIGxhYmVsLFxuICBzZWxlY3RBbGwsXG4gIHNob3dFeHBhbmRlZEdyb3VwLFxuICBzY3JvbGxNZW51SW50b1ZpZXcgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHNob3dTZWxlY3RlZEFzVGFncyA9IGZhbHNlLFxuICBzaG93U2VhcmNoID0gZmFsc2UsXG4gIHdpZHRoLFxuICBvbkNoYW5nZSxcbiAgb25GaWx0ZXIsXG59OiBTZWxlY3RQcm9wcykge1xuICBjb25zdCBbb3BlbmVkLCB0b2dnbGVPcGVuZWRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcblxuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gdG9nZ2xlT3BlbmVkKGZhbHNlKSk7XG4gIGNvbnN0IGNvbnRlbnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgY29uc3Qgb25SZXNpemUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFjb250ZW50UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGVudFJlZi5jdXJyZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6IFwic21vb3RoXCIsIGJsb2NrOiBcIm5lYXJlc3RcIiB9KTtcbiAgfSwgW10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250ZW50UmVmLmN1cnJlbnQgfHwgIW9wZW5lZCB8fCAhc2Nyb2xsTWVudUludG9WaWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IFJPID0gbmV3IFJlc2l6ZU9ic2VydmVyKG9uUmVzaXplKTtcbiAgICBSTy5vYnNlcnZlKGNvbnRlbnRSZWYuY3VycmVudCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgUk8uZGlzY29ubmVjdCgpO1xuICAgICAgUk8gPSBudWxsO1xuICAgIH07XG4gIH0sIFtvcGVuZWQsIHNjcm9sbE1lbnVJbnRvVmlldywgb25SZXNpemVdKTtcblxuICBjb25zdCBoYW5kbGVPcGVuU2VsZWN0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZU9wZW5lZCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4ge1xuICAgICAgaWYgKCFtdWx0aXBsZSkgdG9nZ2xlT3BlbmVkKGZhbHNlKTtcblxuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UodmFsdWVzKTtcbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RDb250ZXh0UHJvdmlkZXJcbiAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBzZWxlY3RBbGw9e3NlbGVjdEFsbH1cbiAgICAgIHNob3dFeHBhbmRlZEdyb3VwPXtzaG93RXhwYW5kZWRHcm91cH1cbiAgICA+XG4gICAgICA8ZGl2IHJlZj17cmVmfT5cbiAgICAgICAge2xhYmVsID8gPExhYmVsIHZhbHVlPXtsYWJlbH0gLz4gOiBudWxsfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaGVhZGVyLCB7IFtzdHlsZXMuYWN0aXZlXTogb3BlbmVkIH1dKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU9wZW5TZWxlY3R9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNlbGVjdG9yXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgc2hvd1NlbGVjdGVkQXNUYWdzPXtzaG93U2VsZWN0ZWRBc1RhZ3N9XG4gICAgICAgICAgICAgIGlzRHJvcGRvd25PcGVuZWQ9e29wZW5lZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgICBzdHlsZXMuaWNvbkJ1dHRvbixcbiAgICAgICAgICAgICAgICB7IFtzdHlsZXMuZXhwYW5kZWRdOiBvcGVuZWQgfSxcbiAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAgIHNyYz17aWNvbkNhcmV0RG93bn1cbiAgICAgICAgICAgICAgYWx0PXtvcGVuZWQgPyBcIkNvbGxhcHNlXCIgOiBcIkV4cGFuZFwifVxuICAgICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7b3BlbmVkICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0gcmVmPXtjb250ZW50UmVmfT5cbiAgICAgICAgICAgICAge29wdGlvbnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubm9PcHRpb25zfT5ObyBvcHRpb25zIGF2YWlsYWJsZTwvZGl2PlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7c2hvd1NlYXJjaCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2VhcmNoQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgICAgICAgICA8U2VhcmNoIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxPcHRpb25MaXN0XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvU2VsZWN0Q29udGV4dFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uTGlzdFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBkZWZhdWx0VmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dFeHBhbmRlZEdyb3VwPzogYm9vbGVhbjtcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZT47XG4gIG9uQ2hhbmdlPzogKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDtcbn07XG5cbnR5cGUgU2VsZWN0Q29udGV4dFN0YXRlID0ge1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dFeHBhbmRlZEdyb3VwPzogYm9vbGVhbjtcbiAgc2VsZWN0ZWRPcHRpb25zOiBBcnJheTxPcHRpb25UeXBlPjtcbiAgdXBkYXRlU2VsZWN0ZWRPcHRpb246IChvcHRpb246IE9wdGlvblR5cGUpID0+IHZvaWQ7XG4gIHNlYXJjaEtleXdvcmQ6IHN0cmluZztcbiAgc2V0U2VhcmNoS2V5d29yZDogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNldFNlbGVjdGVkT3B0aW9uczogKHZhbHVlczogT3B0aW9uVHlwZVtdKSA9PiB2b2lkO1xufTtcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBTZWxlY3RDb250ZXh0U3RhdGUgPSB7XG4gIG11bHRpcGxlOiBmYWxzZSxcbiAgc2VsZWN0QWxsOiBmYWxzZSxcbiAgc2hvd0V4cGFuZGVkR3JvdXA6IHRydWUsXG4gIHNlbGVjdGVkT3B0aW9uczogW10sXG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiAodmFsdWU6IE9wdGlvblR5cGUpID0+IHt9LFxuICBzZWFyY2hLZXl3b3JkOiBcIlwiLFxuICBzZXRTZWFyY2hLZXl3b3JkOiAodmFsdWU6IHN0cmluZykgPT4ge30sXG4gIHNldFNlbGVjdGVkT3B0aW9uczogKHZhbHVlczogT3B0aW9uVHlwZVtdKSA9PiB7fSxcbn07XG5cbmNvbnN0IFNlbGVjdENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNlbGVjdENvbnRleHRTdGF0ZT4oaW5pdGlhbFN0YXRlKTtcblxuY29uc3QgU2VsZWN0Q29udGV4dFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGRlZmF1bHRWYWx1ZSxcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgc2VsZWN0QWxsID0gZmFsc2UsXG4gIHNob3dFeHBhbmRlZEdyb3VwID0gdHJ1ZSxcbiAgb3B0aW9ucyxcbiAgb25DaGFuZ2UsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdID0gdXNlU3RhdGU8T3B0aW9uVHlwZVtdPihcbiAgICBpbml0aWFsU3RhdGUuc2VsZWN0ZWRPcHRpb25zXG4gICk7XG4gIGNvbnN0IFtzZWFyY2hLZXl3b3JkLCBzZXRTZWFyY2hLZXl3b3JkXSA9IHVzZVN0YXRlKFxuICAgIGluaXRpYWxTdGF0ZS5zZWFyY2hLZXl3b3JkXG4gICk7XG5cbiAgY29uc3QgdXBkYXRlU2VsZWN0ZWRPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBPcHRpb25UeXBlKSA9PiB7XG4gICAgICBsZXQgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucztcbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gc2VsZWN0ZWRPcHRpb25zLnNvbWUoXG4gICAgICAgICAgKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IG9wdGlvbi52YWx1ZVxuICAgICAgICApXG4gICAgICAgICAgPyBzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKCh7IHZhbHVlIH0pID0+IHZhbHVlICE9PSBvcHRpb24udmFsdWUpXG4gICAgICAgICAgOiBbLi4uc2VsZWN0ZWRPcHRpb25zLCBvcHRpb25dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IFtvcHRpb25dO1xuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMpO1xuXG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZSh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkpO1xuICAgIH0sXG4gICAgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRPcHRpb25zLCBvbkNoYW5nZV1cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgICAgOiBbZGVmYXVsdFZhbHVlXTtcblxuICAgICAgbGV0IHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgIGlmIChkZWZhdWx0VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoKGFsbCwgaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpc09wdGlvbihpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIGl0ZW1dO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgLi4uaXRlbS5vcHRpb25zXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gYWxsT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zKTtcbiAgICB9XG4gIH0sIFtkZWZhdWx0VmFsdWUsIG9wdGlvbnNdKTtcblxuICBjb25zdCBjb250ZXh0VmFsdWU6IFNlbGVjdENvbnRleHRTdGF0ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIG11bHRpcGxlLFxuICAgICAgc2VsZWN0QWxsLFxuICAgICAgc2hvd0V4cGFuZGVkR3JvdXAsXG4gICAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICAgIHNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgIH0pLFxuICAgIFtcbiAgICAgIHNlbGVjdEFsbCxcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uLFxuICAgICAgc2VhcmNoS2V5d29yZCxcbiAgICAgIHNldFNlYXJjaEtleXdvcmQsXG4gICAgXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TZWxlY3RDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IHsgU2VsZWN0Q29udGV4dCwgU2VsZWN0Q29udGV4dFByb3ZpZGVyIH07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWxlY3Rvci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcbmltcG9ydCB7IFRhZyB9IGZyb20gXCIuLi8uLi9UYWdcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgc2hvd1NlbGVjdGVkQXNUYWdzOiBib29sZWFuO1xuICBpc0Ryb3Bkb3duT3BlbmVkOiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gU2VsZWN0b3Ioe1xuICBwbGFjZWhvbGRlcixcbiAgc2hvd1NlbGVjdGVkQXNUYWdzLFxuICBpc0Ryb3Bkb3duT3BlbmVkLFxufTogUHJvcHMpIHtcbiAgY29uc3QgeyBzZWxlY3RlZE9wdGlvbnMsIG11bHRpcGxlLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiB9ID1cbiAgICB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0NsaWNrID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVUYWdDbG9zZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRWxlbWVudD4sIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBzZWxlY3RlZE9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IHZhbHVlKTtcblxuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IHBsYWNlaG9sZGVyVG9TaG93ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoXG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzRHJvcGRvd25PcGVuZWQgfSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIHtwbGFjZWhvbGRlcn1cbiAgICAgIDwvc3Bhbj5cbiAgICApLFxuICAgIFtwbGFjZWhvbGRlciwgaXNEcm9wZG93bk9wZW5lZF1cbiAgKTtcblxuICBjb25zdCBzaG93QXNUYWdzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgICAgIHBsYWNlaG9sZGVyVG9TaG93XG4gICAgICApIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIHtzZWxlY3RlZE9wdGlvbnMubWFwKCh7IGxhYmVsLCB2YWx1ZSB9KSA9PiAoXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBrZXk9e3ZhbHVlfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy50YWdXcmFwcGVyfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVUYWdDbGlja31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFRhZyBrZXk9e3ZhbHVlfSB2YWx1ZT17dmFsdWV9IGNsb3NhYmxlIG9uQ2xvc2U9e2hhbmRsZVRhZ0Nsb3NlfT5cbiAgICAgICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgICAgIDwvVGFnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICkpfVxuICAgICAgICA8Lz5cbiAgICAgICksXG4gICAgW3NlbGVjdGVkT3B0aW9ucywgcGxhY2Vob2xkZXJUb1Nob3ddXG4gICk7XG5cbiAgY29uc3Qgc2hvd0FzVGV4dCA9IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNlbGVjdGVkT3B0aW9uc31cbiAgICA+e2Ake3BsYWNlaG9sZGVyfSAoJHtzZWxlY3RlZE9wdGlvbnMubGVuZ3RofSlgfTwvc3Bhbj5cbiAgKSA6IChcbiAgICBwbGFjZWhvbGRlclRvU2hvd1xuICApO1xuXG4gIGxldCBjb250ZW50O1xuICBpZiAobXVsdGlwbGUpIHtcbiAgICBjb250ZW50ID0gc2hvd1NlbGVjdGVkQXNUYWdzID8gc2hvd0FzVGFncyA6IHNob3dBc1RleHQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGVudCA9ICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgICAgcGxhY2Vob2xkZXJUb1Nob3dcbiAgICApIDogKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc2VsZWN0ZWRPcHRpb259PntzZWxlY3RlZE9wdGlvbnNbMF0ubGFiZWx9PC9zcGFuPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0b3I7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdG9yIH0gZnJvbSBcIi4vU2VsZWN0b3JcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0IH0gZnJvbSBcIi4vU2VsZWN0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBGaXhlZFNpemVMaXN0LCBMaXN0T25TY3JvbGxQcm9wcyB9IGZyb20gXCJyZWFjdC13aW5kb3dcIjtcbmltcG9ydCBJbmZpbml0ZUxvYWRlciBmcm9tIFwicmVhY3Qtd2luZG93LWluZmluaXRlLWxvYWRlclwiO1xuXG5pbXBvcnQgVGFibGVIZWFkZXIgZnJvbSBcIi4vVGFibGVIZWFkZXJcIjtcbmltcG9ydCBUYWJsZVJvdyBmcm9tIFwiLi9UYWJsZVJvd1wiO1xuaW1wb3J0IHsgU29ydE9yZGVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3RhYmxlXCI7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZS5tb2R1bGUuY3NzXCI7XG5cblxuXG5cbmV4cG9ydCB0eXBlIENvbHVtblR5cGUgPSB7XG4gIGtleTogc3RyaW5nO1xuICB0aXRsZTogSlNYLkVsZW1lbnQgfCBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGF0YUluZGV4OiBzdHJpbmc7XG4gIHJlbmRlcj86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nKSA9PiBKU1guRWxlbWVudDtcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIGRlZmF1bHRTb3J0T3JkZXI/OiBTb3J0T3JkZXI7XG4gIHNvcnRlZD86IGJvb2xlYW47XG4gIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgb25Tb3J0PzogKHNvcnRPcmRlcjogc3RyaW5nKSA9PiB2b2lkO1xufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBkYXRhU291cmNlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG4gIHRhYmxlSGVpZ2h0OiBudW1iZXI7XG4gIG9uUm93Q2xpY2s/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbiAgaGFzQXJyb3c/OiBib29sZWFuO1xuICBvbkxvYWRNb3JlPzogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZT86IG51bWJlcjtcbiAgc2V0UGFnZT86IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICBwbGFjZWhvbGRlcj86IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgcm93SGVpZ2h0PzogbnVtYmVyO1xuICBoZWFkZXJIZWlnaHQ/OiBudW1iZXI7XG4gIGRpc2FibGVMYXp5TG9hZGVyPzogYm9vbGVhbjtcbiAgYWN0aXZlUm93cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGl0ZW1zQ291bnQ/OiBudW1iZXI7XG4gIGlzSGVhZGVyU3RpY2t5PzogYm9vbGVhbjtcbiAgaGFzVmlydHVhbFNjcm9sbD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFRhYmxlKHtcbiAgY29sdW1ucyxcbiAgZGF0YVNvdXJjZSxcbiAgb25Sb3dDbGljayxcbiAgaGFzQXJyb3csXG4gIG9uTG9hZE1vcmUsXG4gIHBhZ2UsXG4gIHNldFBhZ2UsXG4gIHBhZ2VTaXplID0gVGFibGVDb25maWcuUEFHRV9TSVpFLFxuICB0YWJsZUhlaWdodCxcbiAgcGxhY2Vob2xkZXIsXG4gIHJvd0hlaWdodCA9IFRhYmxlQ29uZmlnLlJPV19IRUlHSFQsXG4gIGhlYWRlckhlaWdodCA9IFRhYmxlQ29uZmlnLkhFQURFUl9IRUlHSFQsXG4gIGRpc2FibGVMYXp5TG9hZGVyLFxuICBhY3RpdmVSb3dzLFxuICBpdGVtc0NvdW50LFxuICBpc0hlYWRlclN0aWNreSA9IGZhbHNlLFxuICBoYXNWaXJ0dWFsU2Nyb2xsID0gdHJ1ZSxcbiAgY2xhc3NOYW1lLFxufTogUHJvcHMpIHtcbiAgY29uc3QgW3Njcm9sbFRvcCwgc2V0U2Nyb2xsVG9wXSA9IHVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IHJlbmRlclJvdyA9IHVzZUNhbGxiYWNrKFxuICAgICh7IGRhdGEsIGluZGV4LCBzdHlsZSB9OiB7IGRhdGE6IGFueTsgaW5kZXg6IG51bWJlcjsgc3R5bGU6IGFueSB9KSA9PiB7XG4gICAgICBjb25zdCByb3cgPSBkYXRhW2luZGV4XTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uc3R5bGUsIHRvcDogc3R5bGUudG9wIH19PlxuICAgICAgICAgIDxUYWJsZVJvd1xuICAgICAgICAgICAgZGF0YT17cm93fVxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIG9uUm93Q2xpY2s9e29uUm93Q2xpY2t9XG4gICAgICAgICAgICBoYXNBcnJvdz17aGFzQXJyb3d9XG4gICAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXshIWFjdGl2ZVJvd3M/Lltyb3cuaWRdfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9LFxuICAgIFtjb2x1bW5zLCBhY3RpdmVSb3dzLCBoYXNBcnJvdywgcm93SGVpZ2h0LCBvblJvd0NsaWNrXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUxpc3RTY3JvbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBzY3JvbGxPZmZzZXQgfTogTGlzdE9uU2Nyb2xsUHJvcHMpID0+IHtcbiAgICAgIHNldFNjcm9sbFRvcChzY3JvbGxPZmZzZXQpO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBsb2FkTW9yZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZUxhenlMb2FkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPT09IGl0ZW1zQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPCBwYWdlU2l6ZSAqIHBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2V0UGFnZSAmJiBvbkxvYWRNb3JlKSB7XG4gICAgICBzZXRQYWdlKHBhZ2UgKyAxKTtcbiAgICAgIG9uTG9hZE1vcmUocGFnZSArIDEpO1xuICAgIH1cbiAgfSwgW1xuICAgIGRpc2FibGVMYXp5TG9hZGVyLFxuICAgIGRhdGFTb3VyY2UubGVuZ3RoLFxuICAgIGl0ZW1zQ291bnQsXG4gICAgcGFnZVNpemUsXG4gICAgcGFnZSxcbiAgICBzZXRQYWdlLFxuICAgIG9uTG9hZE1vcmUsXG4gIF0pO1xuXG4gIGNvbnN0IGlzSXRlbUxvYWRlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUxhenlMb2FkZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXggPCBkYXRhU291cmNlLmxlbmd0aCAtIFRhYmxlQ29uZmlnLklURU1TX0xPQURFRDtcbiAgICB9LFxuICAgIFtkYXRhU291cmNlLmxlbmd0aCwgZGlzYWJsZUxhenlMb2FkZXJdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2hhc1ZpcnR1YWxTY3JvbGwgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGFibGV9PlxuICAgICAgICAgICAgPFRhYmxlSGVhZGVyXG4gICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgIHNjcm9sbFRvcD17c2Nyb2xsVG9wfVxuICAgICAgICAgICAgICBoZWFkZXJIZWlnaHQ9e2hlYWRlckhlaWdodH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7ISFwbGFjZWhvbGRlciAmJiAhZGF0YVNvdXJjZS5sZW5ndGggPyAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5wbGFjZWhvbGRlckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlSGVpZ2h0IH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEluZmluaXRlTG9hZGVyXG4gICAgICAgICAgICAgICAgaXNJdGVtTG9hZGVkPXtpc0l0ZW1Mb2FkZWR9XG4gICAgICAgICAgICAgICAgaXRlbUNvdW50PXtkYXRhU291cmNlLmxlbmd0aH1cbiAgICAgICAgICAgICAgICBsb2FkTW9yZUl0ZW1zPXtsb2FkTW9yZX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsoeyBvbkl0ZW1zUmVuZGVyZWQsIHJlZiB9KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Rml4ZWRTaXplTGlzdFxuICAgICAgICAgICAgICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXt0YWJsZUhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgaXRlbVNpemU9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgaXRlbUNvdW50PXtkYXRhU291cmNlLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGE9e2RhdGFTb3VyY2V9XG4gICAgICAgICAgICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVMaXN0U2Nyb2xsfVxuICAgICAgICAgICAgICAgICAgICBvbkl0ZW1zUmVuZGVyZWQ9e29uSXRlbXNSZW5kZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2Nyb2xsYmFyQ29udGFpbmVyfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUm93fVxuICAgICAgICAgICAgICAgICAgPC9GaXhlZFNpemVMaXN0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvSW5maW5pdGVMb2FkZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXMuc2Nyb2xsYmFyQ29udGFpbmVyLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxUYWJsZUhlYWRlclxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIHNjcm9sbFRvcD17c2Nyb2xsVG9wfVxuICAgICAgICAgICAgaXNIZWFkZXJTdGlja3k9e2lzSGVhZGVyU3RpY2t5fVxuICAgICAgICAgICAgaGVhZGVySGVpZ2h0PXtoZWFkZXJIZWlnaHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7ZGF0YVNvdXJjZS5tYXAoKHJvdywgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxUYWJsZVJvd1xuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICBkYXRhPXtyb3d9XG4gICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgIG9uUm93Q2xpY2s9e29uUm93Q2xpY2t9XG4gICAgICAgICAgICAgIGhhc0Fycm93PXtoYXNBcnJvd31cbiAgICAgICAgICAgICAgcm93SGVpZ2h0PXtyb3dIZWlnaHR9XG4gICAgICAgICAgICAgIGlzQWN0aXZlPXshIWFjdGl2ZVJvd3M/Lltyb3c/LmlkXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBUYWJsZUhlYWRlckNlbGwgZnJvbSBcIi4vVGFibGVIZWFkZXJDZWxsXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZUhlYWRlci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgc2Nyb2xsVG9wOiBudW1iZXI7XG4gIGlzSGVhZGVyU3RpY2t5PzogYm9vbGVhbjtcbiAgaGVhZGVySGVpZ2h0PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gVGFibGVIZWFkZXIoe1xuICBjb2x1bW5zLFxuICBzY3JvbGxUb3AsXG4gIGlzSGVhZGVyU3RpY2t5LFxuICBoZWFkZXJIZWlnaHQsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuYm9yZGVyQm90dG9tXTogISFzY3JvbGxUb3AgfSxcbiAgICAgICAgeyBbc3R5bGVzLmlzSGVhZGVyU3RpY2t5XTogaXNIZWFkZXJTdGlja3kgfSxcbiAgICAgIF0pfVxuICAgICAgc3R5bGU9e3sgaGVpZ2h0OiBoZWFkZXJIZWlnaHQgfX1cbiAgICA+XG4gICAgICB7Y29sdW1ucy5tYXAoKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IChcbiAgICAgICAgPFRhYmxlSGVhZGVyQ2VsbFxuICAgICAgICAgIGtleT17YHRhYmxlLWhlYWQtY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXI7XG4iLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IGljb25DYXJldERvd24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IGljb25DYXJldFVwIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtdXAuc3ZnXCI7XG5pbXBvcnQgeyBTb3J0T3JkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdGFibGVcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlSGVhZGVyQ2VsbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbjogQ29sdW1uVHlwZTtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlSGVhZGVyQ2VsbCh7IGNvbHVtbiB9OiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgb25Tb3J0LFxuICAgIHNvcnRhYmxlLFxuICAgIHNvcnRlZCxcbiAgICBkZWZhdWx0U29ydE9yZGVyLFxuICAgIHRpdGxlLFxuICAgIHdpZHRoLFxuICAgIGNsYXNzTmFtZSxcbiAgfSA9IGNvbHVtbjtcblxuICBjb25zdCBbc29ydE9yZGVyLCBzZXRTb3J0T3JkZXJdID0gdXNlU3RhdGUoXG4gICAgKCkgPT4gZGVmYXVsdFNvcnRPcmRlciB8fCBTb3J0T3JkZXIuREVTQ1xuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNvcnRDb2x1bW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzb3J0ZWQpIHtcbiAgICAgIHJldHVybiBvblNvcnQoc29ydE9yZGVyKTtcbiAgICB9XG4gICAgY29uc3QgbmV3U29ydE9yZGVyID1cbiAgICAgIHNvcnRPcmRlciA9PT0gU29ydE9yZGVyLkRFU0MgPyBTb3J0T3JkZXIuQVNDIDogU29ydE9yZGVyLkRFU0M7XG4gICAgc2V0U29ydE9yZGVyKG5ld1NvcnRPcmRlcik7XG4gICAgb25Tb3J0KG5ld1NvcnRPcmRlcik7XG4gIH0sIFtvblNvcnQsIHNvcnRPcmRlciwgc29ydGVkXSk7XG5cbiAgY29uc3QgY2VsbFByb3BzID1cbiAgICBvblNvcnQgJiYgc29ydGFibGVcbiAgICAgID8ge1xuICAgICAgICAgIG9uQ2xpY2s6IGhhbmRsZVNvcnRDb2x1bW4sXG4gICAgICAgIH1cbiAgICAgIDoge307XG5cbiAgY29uc3QgZGlzcGxheUFycm93ID0gKCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHNvcnRPcmRlciA9PT0gU29ydE9yZGVyLkRFU0MpIHtcbiAgICAgIHJldHVybiBpY29uQ2FyZXREb3duO1xuICAgIH1cbiAgICByZXR1cm4gaWNvbkNhcmV0VXA7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uY2VsbFByb3BzfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy50YWJsZUhlYWRlckNlbGwsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc29ydEljb25WaXNpYmxlXTogc29ydGFibGUgJiYgc29ydGVkLFxuICAgICAgICAgIFtzdHlsZXMuc29ydGFibGVdOiBzb3J0YWJsZSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgc3R5bGU9e3sgd2lkdGggfX1cbiAgICA+XG4gICAgICB7dGl0bGV9XG4gICAgICB7c29ydGFibGUgPyAoXG4gICAgICAgIDxJY29uIGFsdD17XCJTb3J0IGJ1dHRvblwifSBzaXplPVwic21hbGxcIiBzcmM9e2Rpc3BsYXlBcnJvdygpfSAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyQ2VsbDtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgVGFibGVSb3dDZWxsIGZyb20gXCIuL1RhYmxlUm93Q2VsbFwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVSb3cubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nO1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIG9uUm93Q2xpY2s/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbiAgaGFzQXJyb3c/OiBib29sZWFuO1xuICByb3dIZWlnaHQ6IG51bWJlcjtcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gVGFibGVSb3coe1xuICBkYXRhLFxuICBjb2x1bW5zLFxuICBvblJvd0NsaWNrLFxuICBoYXNBcnJvdyxcbiAgcm93SGVpZ2h0LFxuICBpc0FjdGl2ZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZVJvd0NsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChvblJvd0NsaWNrICYmIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICBvblJvd0NsaWNrKGRhdGEpO1xuICAgIH1cbiAgfSwgW2RhdGEsIG9uUm93Q2xpY2tdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5oYXNBcnJvd106IGhhc0Fycm93LFxuICAgICAgICAgIFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZVJvd0NsaWNrfVxuICAgID5cbiAgICAgIHtjb2x1bW5zLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKFxuICAgICAgICA8VGFibGVSb3dDZWxsXG4gICAgICAgICAga2V5PXtgdGFibGUtcm93LWNlbGwtJHtjb2x1bW5JbmRleH1gfVxuICAgICAgICAgIGl0ZW09e2RhdGF9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgcm93SGVpZ2h0PXtyb3dIZWlnaHR9XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3c7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlUm93Q2VsbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGl0ZW06IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmc7XG4gIGNvbHVtbjogQ29sdW1uVHlwZTtcbiAgcm93SGVpZ2h0OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUYWJsZVJvd0NlbGwoeyBpdGVtLCBjb2x1bW4sIHJvd0hlaWdodCB9OiBQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgZGF0YSA9IHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiID8gaXRlbSA6IGl0ZW1bY29sdW1uLmRhdGFJbmRleF07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjb2x1bW4uY2xhc3NOYW1lXSl9XG4gICAgICBzdHlsZT17eyBoZWlnaHQ6IHJvd0hlaWdodCwgd2lkdGg6IGNvbHVtbj8ud2lkdGggfX1cbiAgICA+XG4gICAgICB7Y29sdW1uLnJlbmRlciA/IGNvbHVtbi5yZW5kZXIoZGF0YSkgOiBkYXRhfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvd0NlbGw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhYmxlIH0gZnJvbSBcIi4vVGFibGVcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgaWNvbkNyb3NzZWQgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jcm9zc2VkLnN2Z1wiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhZy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2xvc2FibGU/OiBib29sZWFuO1xuICB2YWx1ZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25EZWxldGU/OiAoaWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25DbG9zZT86IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRWxlbWVudD4sIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBUYWcoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjbG9zYWJsZSxcbiAgdmFsdWUsXG4gIG9uQ2xvc2UsXG4gIGRpc2FibGVkLFxuICBvbkRlbGV0ZSxcbiAgaWQsXG59OiBQcm9wcykge1xuICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9uRGVsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25EZWxldGUoaWQpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvbkNsb3NlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2xvc2UsIG9uRGVsZXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgeyBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQgfV0pfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L3NwYW4+XG4gICAgICB7Y2xvc2FibGUgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZUJ1dHRvbn0gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxuICAgICAgICAgIDxJY29uIHNyYz17aWNvbkNyb3NzZWR9IGFsdD1cIkNsb3NlXCIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFnO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWcgfSBmcm9tIFwiLi9UYWdcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IEhpbnQgfSBmcm9tIFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnRcIjtcblxuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vVGFnXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlLCBUYWdUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFnc0lucHV0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUYWdzSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmdbXTtcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIHdpdGhTY3JvbGw/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW5wdXRNb2RlPzogVGV4dElucHV0TW9kZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0YWdPcHRpb25zPzogc3RyaW5nW107XG59O1xuXG5mdW5jdGlvbiBUYWdzSW5wdXQoe1xuICBjbGFzc05hbWUsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIHBhdHRlcm4sXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJzbWFsbFwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB3aXRoU2Nyb2xsID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbiAgZGlzYWJsZWQsXG4gIHRhZ09wdGlvbnMgPSBbXSxcbn06IFRhZ3NJbnB1dFByb3BzKSB7XG4gIGNvbnN0IFt0ZXh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG4gIGNvbnN0IFt0YWdzLCBzZXRUYWdzXSA9IHVzZVN0YXRlPFRhZ1R5cGVbXT4oKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgdGFnc0FyciA9IHZhbHVlLm1hcCgodGFnKSA9PiAoeyBpZDogdXVpZHY0KCksIGxhYmVsOiB0YWcgfSkpO1xuICAgICAgc2V0VGFncyh0YWdzQXJyKTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgc2V0VGFnc10pO1xuXG4gIGNvbnN0IGhhbmRsZVRleHRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgICAgc2V0VGV4dCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0VGV4dF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUYWdEZWxldGUgPSB1c2VDYWxsYmFjayhcbiAgICAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZFRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcuaWQgIT09IGlkKTtcbiAgICAgIHNldFRhZ3ModXBkYXRlZFRhZ3MpO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHRhZ3NBcnIgPSB1cGRhdGVkVGFncy5tYXAoKHRhZykgPT4gdGFnLmxhYmVsKTtcbiAgICAgICAgb25DaGFuZ2UodGFnc0Fycik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdGFncywgc2V0VGFncywgb25DaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGFnQWRkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRyaW1tZWRUZXh0ID0gdGV4dC50cmltKCk7XG4gICAgbGV0IHVwZGF0ZWRUYWdzID0gWy4uLnRhZ3NdO1xuXG4gICAgaWYgKHRyaW1tZWRUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRhZyA9IHsgaWQ6IHV1aWR2NCgpLCBsYWJlbDogdHJpbW1lZFRleHQgfTtcbiAgICAgIHVwZGF0ZWRUYWdzID0gWy4uLnRhZ3MsIHRhZ107XG4gICAgfVxuXG4gICAgc2V0VGFncyh1cGRhdGVkVGFncyk7XG4gICAgc2V0VGV4dChcIlwiKTtcblxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgY29uc3QgdGFnc0FyciA9IHVwZGF0ZWRUYWdzLm1hcCgodGFnKSA9PiB0YWcubGFiZWwpO1xuICAgICAgb25DaGFuZ2UodGFnc0Fycik7XG4gICAgfVxuICB9LCBbdGFncywgdGV4dCwgc2V0VGFncywgc2V0VGV4dF0pO1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChlLmNvZGUgPT09IFwiRW50ZXJcIiB8fCBlLmNvZGUgPT09IFwiTnVtcGFkRW50ZXJcIikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGhhbmRsZVRhZ0FkZCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZVRhZ0FkZF1cbiAgKTtcblxuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4ge1xuICAgIGNvbnN0IHRyaW1tZWRUZXh0ID0gdGV4dC50cmltKCk7XG5cbiAgICBpZiAodHJpbW1lZFRleHQubGVuZ3RoID4gMCkge1xuICAgICAgaGFuZGxlVGFnQWRkKCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXG4gICAgPEhpbnQgb3B0aW9ucz17dGFnT3B0aW9uc30gYWxsb3dFbnRlckZpbGw9e3RydWV9IGFsbG93VGFiRmlsbD17dHJ1ZX0+XG4gICAgICA8aW5wdXRcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy50ZXh0SW5wdXQsXG4gICAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyIH0sXG4gICAgICAgIF0pfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlVGV4dENoYW5nZX1cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICBwYXR0ZXJuPXtwYXR0ZXJufVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgIHZhbHVlPXt0ZXh0fVxuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgICAgaW5wdXRNb2RlPXtpbnB1dE1vZGV9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIC8+XG4gICAgPC9IaW50PlxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLCBbc3R5bGVzLnNjcm9sbGFibGVdOiB3aXRoU2Nyb2xsIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgcmVmPXtyZWZ9XG4gICAgPlxuICAgICAge3RhZ3M/Lm1hcCgoeyBpZCwgbGFiZWwgfSkgPT4gKFxuICAgICAgICA8VGFnIGtleT17aWR9IHZhbHVlPXtsYWJlbH0gaWQ9e2lkfSBvbkRlbGV0ZT17aGFuZGxlVGFnRGVsZXRlfSBjbG9zYWJsZT5cbiAgICAgICAgICB7bGFiZWx9XG4gICAgICAgIDwvVGFnPlxuICAgICAgKSl9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRhZ0lucHV0fT57aW5wdXRFbGVtZW50fTwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuZXhwb3J0IGRlZmF1bHQgVGFnc0lucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWdzSW5wdXQgfSBmcm9tIFwiLi9UYWdzSW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UZXh0SW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSwgVGV4dElucHV0TW9kZSwgVGV4dElucHV0VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcbiAgb25LZXlEb3duPzogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICBzaXplPzogU2l6ZTtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW5wdXRNb2RlPzogVGV4dElucHV0TW9kZTtcbn07XG5cbmZ1bmN0aW9uIFRleHRJbnB1dCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgb25CbHVyLFxuICBvbktleURvd24sXG4gIHBsYWNlaG9sZGVyLFxuICB2YWx1ZSxcbiAgbmFtZSxcbiAgcGF0dGVybixcbiAgaW5wdXRSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBpbnB1dE1vZGUsXG59OiBUZXh0SW5wdXRQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXG4gICAgPGlucHV0XG4gICAgICBkYXRhLXRlc3RpZD1cImlucHV0XCJcbiAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLnRleHRJbnB1dCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlciB9LFxuICAgICAgXSl9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgIHBhdHRlcm49e3BhdHRlcm59XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgaW5wdXRNb2RlPXtpbnB1dE1vZGV9XG4gICAgLz5cbiAgKTtcbiAgaWYgKGxhYmVsKSB7XG4gICAgcmV0dXJuIDxMYWJlbCB2YWx1ZT17bGFiZWx9PntpbnB1dEVsZW1lbnR9PC9MYWJlbD47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDw+e2lucHV0RWxlbWVudH08Lz47XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IFRleHRJbnB1dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGV4dElucHV0IH0gZnJvbSBcIi4vVGV4dElucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBUb2FzdCh7IGNoaWxkcmVuLCBjb250YWluZXJSZWYsIG9uQ2xpY2sgPSAoKSA9PiB7fSB9OiBUb2FzdFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy50b2FzdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0XCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb2FzdENvbnRhaW5lclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5mdW5jdGlvbiBUb2FzdENvbnRhaW5lcih7IGNoaWxkcmVuLCBiYXNlWkluZGV4IH06IFRvYXN0Q29udGFpbmVyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudG9hc3RDb250YWluZXJdKX1cbiAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdC1jb250YWluZXJcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9hc3RDb250YWluZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0IH0gZnJvbSBcIi4vVG9hc3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3RDb250YWluZXIgfSBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlU3RhdGUsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgc2Nyb2xsUGFyZW50IGZyb20gXCJzY3JvbGxwYXJlbnRcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub29sdGlwLm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb29sdGlwUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIHRleHQ6IHN0cmluZztcbiAgcGxhY2VtZW50OiBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiO1xuICBwb3NpdGlvbj86IFwiYWJzb2x1dGVcIiB8IFwiZml4ZWRcIjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICB0b3VjaFNjcmVlbkhpZGluZ0RlbGF5PzogbnVtYmVyO1xuICBzaG93VG9vbHRpcDogYm9vbGVhbjtcbn07XG5cbmNvbnN0IG1hcFBsYWNlbWVudFRvUG9zaXRpb25TdHlsZXMgPSAoXG4gIHBsYWNlbWVudDogXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcInRvcFwiIHwgXCJib3R0b21cIixcbiAgcG9zaXRpb246IFwiYWJzb2x1dGVcIiB8IFwiZml4ZWRcIixcbiAgcmVjdDogRE9NUmVjdFxuKSA9PiB7XG4gIGNvbnN0IHsgdG9wLCBsZWZ0LCBoZWlnaHQsIHdpZHRoIH0gPSByZWN0O1xuICBsZXQgcG9zaXRpb25TdHlsZXMgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuICBzd2l0Y2ggKHBsYWNlbWVudCkge1xuICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICBwb3NpdGlvblN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AgKyBoZWlnaHQgLyAyLFxuICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgcG9zaXRpb25TdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wICsgaGVpZ2h0IC8gMixcbiAgICAgICAgbGVmdDogbGVmdCArIHdpZHRoLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJib3R0b21cIjpcbiAgICAgIHBvc2l0aW9uU3R5bGVzID0ge1xuICAgICAgICB0b3A6IHRvcCArIGhlaWdodCxcbiAgICAgICAgbGVmdDogbGVmdCArIHdpZHRoIC8gMixcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidG9wXCI6XG4gICAgICBwb3NpdGlvblN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgIGxlZnQ6IGxlZnQgKyB3aWR0aCAvIDIsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIlxuICAgID8ge1xuICAgICAgICB0b3A6IHBvc2l0aW9uU3R5bGVzLnRvcCArIHdpbmRvdy5zY3JvbGxZLFxuICAgICAgICBsZWZ0OiBwb3NpdGlvblN0eWxlcy5sZWZ0ICsgd2luZG93LnNjcm9sbFgsXG4gICAgICB9XG4gICAgOiBwb3NpdGlvblN0eWxlcztcbn07XG5cbmZ1bmN0aW9uIFRvb2x0aXAoe1xuICBjaGlsZHJlbixcbiAgdGV4dCxcbiAgcGxhY2VtZW50LFxuICBwb3NpdGlvbiA9IFwiYWJzb2x1dGVcIixcbiAgc2hvd1Rvb2x0aXAsXG4gIGNsYXNzTmFtZSxcbiAgdG91Y2hTY3JlZW5IaWRpbmdEZWxheSA9IDUwMDAsXG59OiBUb29sdGlwUHJvcHMpIHtcbiAgY29uc3QgW3Bvc2l0aW9uU3R5bGVzLCBzZXRQb3NpdGlvblN0eWxlc10gPSB1c2VTdGF0ZSh7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gIH0pO1xuICBjb25zdCBbdG9vbHRpcElzVmlzaWJsZSwgc2V0VG9vbHRpcElzVmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgdGltZXJSZWYgPSB1c2VSZWY8Tm9kZUpTLlRpbWVvdXQ+KG51bGwpO1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTFNwYW5FbGVtZW50PihudWxsKTtcblxuICBjb25zdCB1cGRhdGVQb3NpdGlvblN0eWxlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVjdCA9IGNvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uU3R5bGVzID0gbWFwUGxhY2VtZW50VG9Qb3NpdGlvblN0eWxlcyhcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgcmVjdFxuICAgICk7XG4gICAgc2V0UG9zaXRpb25TdHlsZXMobmV3UG9zaXRpb25TdHlsZXMpO1xuICAgIHNldFRvb2x0aXBJc1Zpc2libGUodHJ1ZSk7XG4gIH0sIFtwbGFjZW1lbnQsIHBvc2l0aW9uXSk7XG5cbiAgY29uc3Qgb25Nb3VzZUVudGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHVwZGF0ZVBvc2l0aW9uU3R5bGVzKCk7XG4gIH0sIFt1cGRhdGVQb3NpdGlvblN0eWxlc10pO1xuXG4gIGNvbnN0IG9uTW91c2VMZWF2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRUb29sdGlwSXNWaXNpYmxlKGZhbHNlKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IG9uVG91Y2hTdGFydEhhbmRsZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHRpbWVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KTtcbiAgICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cblxuICAgIHVwZGF0ZVBvc2l0aW9uU3R5bGVzKCk7XG4gIH0sIFt1cGRhdGVQb3NpdGlvblN0eWxlc10pO1xuXG4gIGNvbnN0IG9uVG91Y2hFbmRIYW5kbGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldFRvb2x0aXBJc1Zpc2libGUoZmFsc2UpO1xuICAgICAgdGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfSwgdG91Y2hTY3JlZW5IaWRpbmdEZWxheSk7XG4gIH0sIFt0b3VjaFNjcmVlbkhpZGluZ0RlbGF5XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4gdGltZXJSZWYuY3VycmVudCAmJiBjbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY29udGFpbmVyUmVmLmN1cnJlbnQgfHwgcG9zaXRpb24gIT09IFwiYWJzb2x1dGVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcm9sbGFibGVQYXJlbnQgPSBzY3JvbGxQYXJlbnQoY29udGFpbmVyUmVmLmN1cnJlbnQpO1xuICAgIGlmICghc2Nyb2xsYWJsZVBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhpZGVUb29sdGlwID0gKCkgPT4gc2V0VG9vbHRpcElzVmlzaWJsZShmYWxzZSk7XG4gICAgc2Nyb2xsYWJsZVBhcmVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGhpZGVUb29sdGlwKTtcbiAgICBzY3JvbGxhYmxlUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgaGlkZVRvb2x0aXApO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzY3JvbGxhYmxlUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgaGlkZVRvb2x0aXApO1xuICAgICAgc2Nyb2xsYWJsZVBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhpZGVUb29sdGlwKTtcbiAgICB9O1xuICB9LCBbcG9zaXRpb25dKTtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBvblRvdWNoU3RhcnQ9e29uVG91Y2hTdGFydEhhbmRsZXJ9XG4gICAgICBvbk1vdXNlRW50ZXI9e29uTW91c2VFbnRlcn1cbiAgICAgIG9uTW91c2VMZWF2ZT17b25Nb3VzZUxlYXZlfVxuICAgICAgb25Ub3VjaEVuZD17b25Ub3VjaEVuZEhhbmRsZXJ9XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICB7Y3JlYXRlUG9ydGFsKFxuICAgICAgICA8PlxuICAgICAgICAgIHtzaG93VG9vbHRpcCAmJiB0b29sdGlwSXNWaXNpYmxlID8gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17cG9zaXRpb25TdHlsZXN9XG4gICAgICAgICAgICAgIGRhdGEtdGV4dD17dGV4dH1cbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0b29sdGlwXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgICAgc3R5bGVzLnRvb2x0aXAsXG4gICAgICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudF0sXG4gICAgICAgICAgICAgICAgc3R5bGVzW3Bvc2l0aW9uXSxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC8+LFxuICAgICAgICBkb2N1bWVudC5ib2R5XG4gICAgICApfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9vbHRpcCB9IGZyb20gXCIuL1Rvb2x0aXBcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1ZpZGVvLm1vZHVsZS5jc3NcIjtcblxuLyoqXG4gKiBUaGVyZSBpcyBhIGtub3duIGlzc3VlIGluIFJlYWN0IGluIHJlZ2FyZHMgdG8gdGhlICdtdXRlZCcgcHJvcGVydHkgd2hpY2ggY2F1c2VzIHRoZSB3YXJuaW5nOlxuICogXCJXYXJuaW5nOiB1bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlczogQ2Fubm90IGZsdXNoIHVwZGF0ZXMgd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy5cIlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTAzODlcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjU0NFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Rlc3RpbmctbGlicmFyeS9yZWFjdC10ZXN0aW5nLWxpYnJhcnkvaXNzdWVzLzQ3MFxuICovXG5cbnR5cGUgTGF5b3V0ID0gXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcblxuZXhwb3J0IHR5cGUgVmlkZW9Qcm9wcyA9IHtcbiAgc3JjOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgbGF5b3V0PzogTGF5b3V0O1xuICBhdXRvUGxheT86IGJvb2xlYW47XG4gIGxvb3A/OiBib29sZWFuO1xuICBtdXRlZD86IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBwb3N0ZXI/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBWaWRlbyh7XG4gIHNyYyxcbiAgdHlwZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgcG9zdGVyLFxuICBtdXRlZCA9IHRydWUsXG4gIGxvb3AgPSB0cnVlLFxuICBhdXRvUGxheSA9IHRydWUsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxufTogVmlkZW9Qcm9wcykge1xuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIDx2aWRlb1xuICAgICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgICAgbG9vcD17bG9vcH1cbiAgICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgICAgcGxheXNJbmxpbmVcbiAgICAgID5cbiAgICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgICAgPC92aWRlbz5cbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XG4gICAgPC9kaXY+XG4gICkgOiAoXG4gICAgPHZpZGVvXG4gICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgIGxvb3A9e2xvb3B9XG4gICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgIHBsYXlzSW5saW5lXG4gICAgPlxuICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgIDwvdmlkZW8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlbywgVmlkZW9Qcm9wcyB9IGZyb20gXCIuL1ZpZGVvXCI7XG4iLCJleHBvcnQgZW51bSBUYWJsZUNvbmZpZyB7XG4gIFJPV19IRUlHSFQgPSA0OCxcbiAgSEVBREVSX0hFSUdIVD0zMixcbiAgUEFHRV9TSVpFID0gMTAwLFxuICBJVEVNU19MT0FERUQgPSA1LFxufVxuIiwiZXhwb3J0ICogZnJvbSBcIi4uL2NvbnN0YW50cy9UYWJsZVwiO1xuIiwiZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uTGlua1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9DaGVja2JveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclBpY2tlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclN3YXRjaFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GaWxlSW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGlzdFZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTWVudVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9OdW1wYWRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9TZWxlY3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFibGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhZ3NJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0SW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9hc3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9vbHRpcFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9WaWRlb1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9EcmF3ZXJcIjtcbiIsImV4cG9ydCBlbnVtIFNvcnRPcmRlciB7XG4gICAgQVNDID0gXCJhc2NcIixcbiAgICBERVNDID0gXCJkZXNjXCIsXG4gIH1cbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nNjknIGhlaWdodD0nMjcnIHZpZXdCb3g9JzAgMCA2OSAyNycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC4xMzMzIDI2TDEzLjc4ODYgMjYuMzYyMkMxMy44ODE2IDI2LjQ1MDcgMTQuMDA1IDI2LjUgMTQuMTMzMyAyNi41VjI2Wk0xIDEzLjVMMC42NTUyODcgMTMuMTM3OEMwLjU1NjEyNyAxMy4yMzIyIDAuNSAxMy4zNjMxIDAuNSAxMy41QzAuNSAxMy42MzY5IDAuNTU2MTI3IDEzLjc2NzggMC42NTUyODcgMTMuODYyMkwxIDEzLjVaTTE0LjEzMzMgMVYwLjVDMTQuMDA1IDAuNSAxMy44ODE2IDAuNTQ5MzQ1IDEzLjc4ODYgMC42Mzc4MjJMMTQuMTMzMyAxWk02Ny41IDJWMjVINjguNVYySDY3LjVaTTYzLjQ2NjcgMjUuNUgxNC4xMzMzVjI2LjVINjMuNDY2N1YyNS41Wk0xNC40NzggMjUuNjM3OEwxLjM0NDcxIDEzLjEzNzhMMC42NTUyODcgMTMuODYyMkwxMy43ODg2IDI2LjM2MjJMMTQuNDc4IDI1LjYzNzhaTTEuMzQ0NzEgMTMuODYyMkwxNC40NzggMS4zNjIxOEwxMy43ODg2IDAuNjM3ODIyTDAuNjU1Mjg3IDEzLjEzNzhMMS4zNDQ3MSAxMy44NjIyWk0xNC4xMzMzIDEuNUg2My40NjY3VjAuNUgxNC4xMzMzVjEuNVpNNjcgMjUuNUg2My40NjY3VjI2LjVINjdWMjUuNVpNNjcgMC41SDYzLjQ2NjdWMS41SDY3VjAuNVpNNjcuNSAyNUM2Ny41IDI1LjI3NjEgNjcuMjc2MSAyNS41IDY3IDI1LjVWMjYuNUM2Ny44Mjg0IDI2LjUgNjguNSAyNS44Mjg0IDY4LjUgMjVINjcuNVpNNjguNSAyQzY4LjUgMS4xNzE1NyA2Ny44Mjg0IDAuNSA2NyAwLjVWMS41QzY3LjI3NjEgMS41IDY3LjUgMS43MjM4NiA2Ny41IDJINjguNVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzY3BhdGggZD0nTTMyLjY0NjQgNi4zNTM1NUw0Ni42NDY0IDIwLjM1MzZMNDcuMzUzNiAxOS42NDY0TDMzLjM1MzYgNS42NDY0NUwzMi42NDY0IDYuMzUzNTVaTTQ2LjY0NjQgNS42NDY0NUwzMi42NDY0IDE5LjY0NjRMMzMuMzUzNiAyMC4zNTM2TDQ3LjM1MzYgNi4zNTM1NUw0Ni42NDY0IDUuNjQ2NDVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTEgMTBMNy41IDNMMTQgMTAnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjAgMjAnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMC4zOTg0MzggMC4zOTk5MDJMMTkuNTk4NCAxOS41OTk5TTAuMzk4NDM4IDE5LjU5OTlMMTkuNTk4NCAwLjM5OTkwMicgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNSAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xLjUgMS41TDEzLjUgMTMuNU0xLjUgMTMuNUwxMy41IDEuNScgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNS40Njg1IDE1LjQ2NjVMMTEuMjAxOCAxMS4xOTk5TTYuOTM1MTYgMTMuMzMzMkMzLjQwMDUzIDEzLjMzMzIgMC41MzUxNTYgMTAuNDY3OCAwLjUzNTE1NiA2LjkzMzJDMC41MzUxNTYgMy4zOTg1OCAzLjQwMDUzIDAuNTMzMjAzIDYuOTM1MTYgMC41MzMyMDNDMTAuNDY5OCAwLjUzMzIwMyAxMy4zMzUyIDMuMzk4NTggMTMuMzM1MiA2LjkzMzJDMTMuMzM1MiAxMC40Njc4IDEwLjQ2OTggMTMuMzMzMiA2LjkzNTE2IDEzLjMzMzJaJyBzdHJva2U9JyUyMzg5ODg5MScvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC45MzMxIDQuMjY3NThMNy45OTk3NCAxMS43MzQyTDEuMDY2NDEgNC4yNjc1OCcgc3Ryb2tlPSclMjM4OTg4OTEnIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5JTFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbmlsLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2MVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92Mi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92My5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY1XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92NC5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhbGlkYXRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92YWxpZGF0ZS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZlcnNpb24uZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjEuanNcIikpO1xuXG52YXIgX3YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92My5qc1wiKSk7XG5cbnZhciBfdjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Y0LmpzXCIpKTtcblxudmFyIF92NCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjUuanNcIikpO1xuXG52YXIgX25pbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbmlsLmpzXCIpKTtcblxudmFyIF92ZXJzaW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92ZXJzaW9uLmpzXCIpKTtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpKTtcblxudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vKlxuICogQnJvd3Nlci1jb21wYXRpYmxlIEphdmFTY3JpcHQgTUQ1XG4gKlxuICogTW9kaWZpY2F0aW9uIG9mIEphdmFTY3JpcHQgTUQ1XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9KYXZhU2NyaXB0LU1ENVxuICpcbiAqIENvcHlyaWdodCAyMDExLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiBCYXNlZCBvblxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZVxuICogRGlnZXN0IEFsZ29yaXRobSwgYXMgZGVmaW5lZCBpbiBSRkMgMTMyMS5cbiAqIFZlcnNpb24gMi4yIENvcHlyaWdodCAoQykgUGF1bCBKb2huc3RvbiAxOTk5IC0gMjAwOVxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgbW9yZSBpbmZvLlxuICovXG5mdW5jdGlvbiBtZDUoYnl0ZXMpIHtcbiAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBtc2cgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYnl0ZXMpKTsgLy8gVVRGOCBlc2NhcGVcblxuICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobXNnLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1zZy5sZW5ndGg7ICsraSkge1xuICAgICAgYnl0ZXNbaV0gPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWQ1VG9IZXhFbmNvZGVkQXJyYXkod29yZHNUb01kNShieXRlc1RvV29yZHMoYnl0ZXMpLCBieXRlcy5sZW5ndGggKiA4KSk7XG59XG4vKlxuICogQ29udmVydCBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzIHRvIGFuIGFycmF5IG9mIGJ5dGVzXG4gKi9cblxuXG5mdW5jdGlvbiBtZDVUb0hleEVuY29kZWRBcnJheShpbnB1dCkge1xuICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgY29uc3QgbGVuZ3RoMzIgPSBpbnB1dC5sZW5ndGggKiAzMjtcbiAgY29uc3QgaGV4VGFiID0gJzAxMjM0NTY3ODlhYmNkZWYnO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoMzI7IGkgKz0gOCkge1xuICAgIGNvbnN0IHggPSBpbnB1dFtpID4+IDVdID4+PiBpICUgMzIgJiAweGZmO1xuICAgIGNvbnN0IGhleCA9IHBhcnNlSW50KGhleFRhYi5jaGFyQXQoeCA+Pj4gNCAmIDB4MGYpICsgaGV4VGFiLmNoYXJBdCh4ICYgMHgwZiksIDE2KTtcbiAgICBvdXRwdXQucHVzaChoZXgpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIG91dHB1dCBsZW5ndGggd2l0aCBwYWRkaW5nIGFuZCBiaXQgbGVuZ3RoXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGg4KSB7XG4gIHJldHVybiAoaW5wdXRMZW5ndGg4ICsgNjQgPj4+IDkgPDwgNCkgKyAxNCArIDE7XG59XG4vKlxuICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcywgYW5kIGEgYml0IGxlbmd0aC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHdvcmRzVG9NZDUoeCwgbGVuKSB7XG4gIC8qIGFwcGVuZCBwYWRkaW5nICovXG4gIHhbbGVuID4+IDVdIHw9IDB4ODAgPDwgbGVuICUgMzI7XG4gIHhbZ2V0T3V0cHV0TGVuZ3RoKGxlbikgLSAxXSA9IGxlbjtcbiAgbGV0IGEgPSAxNzMyNTg0MTkzO1xuICBsZXQgYiA9IC0yNzE3MzM4Nzk7XG4gIGxldCBjID0gLTE3MzI1ODQxOTQ7XG4gIGxldCBkID0gMjcxNzMzODc4O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICBjb25zdCBvbGRhID0gYTtcbiAgICBjb25zdCBvbGRiID0gYjtcbiAgICBjb25zdCBvbGRjID0gYztcbiAgICBjb25zdCBvbGRkID0gZDtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpXSwgNywgLTY4MDg3NjkzNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDFdLCAxMiwgLTM4OTU2NDU4Nik7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNywgNjA2MTA1ODE5KTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgM10sIDIyLCAtMTA0NDUyNTMzMCk7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA3LCAtMTc2NDE4ODk3KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgNV0sIDEyLCAxMjAwMDgwNDI2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDddLCAyMiwgLTQ1NzA1OTgzKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgOF0sIDcsIDE3NzAwMzU0MTYpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNywgLTQyMDYzKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTFdLCAyMiwgLTE5OTA0MDQxNjIpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDcsIDE4MDQ2MDM2ODIpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyAxM10sIDEyLCAtNDAzNDExMDEpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsIDEyMzY1MzUzMjkpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNSwgLTE2NTc5NjUxMCk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDZdLCA5LCAtMTA2OTUwMTYzMik7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTQsIDY0MzcxNzcxMyk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaV0sIDIwLCAtMzczODk3MzAyKTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgNV0sIDUsIC03MDE1NTg2OTEpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxMF0sIDksIDM4MDE2MDgzKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDRdLCAyMCwgLTQwNTUzNzg0OCk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDldLCA1LCA1Njg0NDY0MzgpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxNF0sIDksIC0xMDE5ODAzNjkwKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgM10sIDE0LCAtMTg3MzYzOTYxKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgOF0sIDIwLCAxMTYzNTMxNTAxKTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMTNdLCA1LCAtMTQ0NDY4MTQ2Nyk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDJdLCA5LCAtNTE0MDM3ODQpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTQsIDE3MzUzMjg0NzMpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyAxMl0sIDIwLCAtMTkyNjYwNzczNCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA0LCAtMzc4NTU4KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgOF0sIDExLCAtMjAyMjU3NDQ2Myk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTYsIDE4MzkwMzA1NjIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNCwgLTE1MzA5OTIwNjApO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA0XSwgMTEsIDEyNzI4OTMzNTMpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxMF0sIDIzLCAtMTA5NDczMDY0MCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNCwgNjgxMjc5MTc0KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpXSwgMTEsIC0zNTg1MzcyMjIpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTYsIC03MjI1MjE5NzkpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyA2XSwgMjMsIDc2MDI5MTg5KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgOV0sIDQsIC02NDAzNjQ0ODcpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyAxMl0sIDExLCAtNDIxODE1ODM1KTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNiwgNTMwNzQyNTIwKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpXSwgNiwgLTE5ODYzMDg0NCk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDddLCAxMCwgMTEyNjg5MTQxNSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgNV0sIDIxLCAtNTc0MzQwNTUpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDYsIDE3MDA0ODU1NzEpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgOF0sIDYsIDE4NzMzMTMzNTkpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgMTNdLCAyMSwgMTMwOTE1MTY0OSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA2LCAtMTQ1NTIzMDcwKTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTUsIDcxODc4NzI1OSk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDldLCAyMSwgLTM0MzQ4NTU1MSk7XG4gICAgYSA9IHNhZmVBZGQoYSwgb2xkYSk7XG4gICAgYiA9IHNhZmVBZGQoYiwgb2xkYik7XG4gICAgYyA9IHNhZmVBZGQoYywgb2xkYyk7XG4gICAgZCA9IHNhZmVBZGQoZCwgb2xkZCk7XG4gIH1cblxuICByZXR1cm4gW2EsIGIsIGMsIGRdO1xufVxuLypcbiAqIENvbnZlcnQgYW4gYXJyYXkgYnl0ZXMgdG8gYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICogQ2hhcmFjdGVycyA+MjU1IGhhdmUgdGhlaXIgaGlnaC1ieXRlIHNpbGVudGx5IGlnbm9yZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBieXRlc1RvV29yZHMoaW5wdXQpIHtcbiAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aDggPSBpbnB1dC5sZW5ndGggKiA4O1xuICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDMyQXJyYXkoZ2V0T3V0cHV0TGVuZ3RoKGxlbmd0aDgpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDg7IGkgKz0gOCkge1xuICAgIG91dHB1dFtpID4+IDVdIHw9IChpbnB1dFtpIC8gOF0gJiAweGZmKSA8PCBpICUgMzI7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuLypcbiAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcgYXQgMl4zMi4gVGhpcyB1c2VzIDE2LWJpdCBvcGVyYXRpb25zIGludGVybmFsbHlcbiAqIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuXG4gKi9cblxuXG5mdW5jdGlvbiBzYWZlQWRkKHgsIHkpIHtcbiAgY29uc3QgbHN3ID0gKHggJiAweGZmZmYpICsgKHkgJiAweGZmZmYpO1xuICBjb25zdCBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcbiAgcmV0dXJuIG1zdyA8PCAxNiB8IGxzdyAmIDB4ZmZmZjtcbn1cbi8qXG4gKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXG4gKi9cblxuXG5mdW5jdGlvbiBiaXRSb3RhdGVMZWZ0KG51bSwgY250KSB7XG4gIHJldHVybiBudW0gPDwgY250IHwgbnVtID4+PiAzMiAtIGNudDtcbn1cbi8qXG4gKiBUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBmb3VyIGJhc2ljIG9wZXJhdGlvbnMgdGhlIGFsZ29yaXRobSB1c2VzLlxuICovXG5cblxuZnVuY3Rpb24gbWQ1Y21uKHEsIGEsIGIsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIHNhZmVBZGQoYml0Um90YXRlTGVmdChzYWZlQWRkKHNhZmVBZGQoYSwgcSksIHNhZmVBZGQoeCwgdCkpLCBzKSwgYik7XG59XG5cbmZ1bmN0aW9uIG1kNWZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiICYgYyB8IH5iICYgZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWdnKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiICYgZCB8IGMgJiB+ZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWhoKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xufVxuXG5mdW5jdGlvbiBtZDVpaShhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxudmFyIF9kZWZhdWx0ID0gbWQ1O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5jb25zdCByYW5kb21VVUlEID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnJhbmRvbVVVSUQgJiYgY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pO1xudmFyIF9kZWZhdWx0ID0ge1xuICByYW5kb21VVUlEXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHBhcnNlKHV1aWQpIHtcbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIFVVSUQnKTtcbiAgfVxuXG4gIGxldCB2O1xuICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSgxNik7IC8vIFBhcnNlICMjIyMjIyMjLS4uLi4tLi4uLi0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFyclswXSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgwLCA4KSwgMTYpKSA+Pj4gMjQ7XG4gIGFyclsxXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzJdID0gdiA+Pj4gOCAmIDB4ZmY7XG4gIGFyclszXSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0jIyMjLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbNF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoOSwgMTMpLCAxNikpID4+PiA4O1xuICBhcnJbNV0gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0jIyMjLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzZdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE0LCAxOCksIDE2KSkgPj4+IDg7XG4gIGFycls3XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tIyMjIy0uLi4uLi4uLi4uLi5cblxuICBhcnJbOF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTksIDIzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzldID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tLi4uLi0uLi4uLSMjIyMjIyMjIyMjI1xuICAvLyAoVXNlIFwiL1wiIHRvIGF2b2lkIDMyLWJpdCB0cnVuY2F0aW9uIHdoZW4gYml0LXNoaWZ0aW5nIGhpZ2gtb3JkZXIgYnl0ZXMpXG5cbiAgYXJyWzEwXSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgyNCwgMzYpLCAxNikpIC8gMHgxMDAwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMV0gPSB2IC8gMHgxMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTJdID0gdiA+Pj4gMjQgJiAweGZmO1xuICBhcnJbMTNdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMTRdID0gdiA+Pj4gOCAmIDB4ZmY7XG4gIGFyclsxNV0gPSB2ICYgMHhmZjtcbiAgcmV0dXJuIGFycjtcbn1cblxudmFyIF9kZWZhdWx0ID0gcGFyc2U7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVmYXVsdCA9IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcm5nO1xuLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5cbmZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vLyBBZGFwdGVkIGZyb20gQ2hyaXMgVmVuZXNzJyBTSEExIGNvZGUgYXRcbi8vIGh0dHA6Ly93d3cubW92YWJsZS10eXBlLmNvLnVrL3NjcmlwdHMvc2hhMS5odG1sXG5mdW5jdGlvbiBmKHMsIHgsIHksIHopIHtcbiAgc3dpdGNoIChzKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIHggJiB5IF4gfnggJiB6O1xuXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHggXiB5IF4gejtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiB4ICYgeSBeIHggJiB6IF4geSAmIHo7XG5cbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4geCBeIHkgXiB6O1xuICB9XG59XG5cbmZ1bmN0aW9uIFJPVEwoeCwgbikge1xuICByZXR1cm4geCA8PCBuIHwgeCA+Pj4gMzIgLSBuO1xufVxuXG5mdW5jdGlvbiBzaGExKGJ5dGVzKSB7XG4gIGNvbnN0IEsgPSBbMHg1YTgyNzk5OSwgMHg2ZWQ5ZWJhMSwgMHg4ZjFiYmNkYywgMHhjYTYyYzFkNl07XG4gIGNvbnN0IEggPSBbMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMF07XG5cbiAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBtc2cgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYnl0ZXMpKTsgLy8gVVRGOCBlc2NhcGVcblxuICAgIGJ5dGVzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1zZy5sZW5ndGg7ICsraSkge1xuICAgICAgYnl0ZXMucHVzaChtc2cuY2hhckNvZGVBdChpKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGJ5dGVzKSkge1xuICAgIC8vIENvbnZlcnQgQXJyYXktbGlrZSB0byBBcnJheVxuICAgIGJ5dGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYnl0ZXMpO1xuICB9XG5cbiAgYnl0ZXMucHVzaCgweDgwKTtcbiAgY29uc3QgbCA9IGJ5dGVzLmxlbmd0aCAvIDQgKyAyO1xuICBjb25zdCBOID0gTWF0aC5jZWlsKGwgLyAxNik7XG4gIGNvbnN0IE0gPSBuZXcgQXJyYXkoTik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyArK2kpIHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDMyQXJyYXkoMTYpO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICBhcnJbal0gPSBieXRlc1tpICogNjQgKyBqICogNF0gPDwgMjQgfCBieXRlc1tpICogNjQgKyBqICogNCArIDFdIDw8IDE2IHwgYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAyXSA8PCA4IHwgYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAzXTtcbiAgICB9XG5cbiAgICBNW2ldID0gYXJyO1xuICB9XG5cbiAgTVtOIC0gMV1bMTRdID0gKGJ5dGVzLmxlbmd0aCAtIDEpICogOCAvIE1hdGgucG93KDIsIDMyKTtcbiAgTVtOIC0gMV1bMTRdID0gTWF0aC5mbG9vcihNW04gLSAxXVsxNF0pO1xuICBNW04gLSAxXVsxNV0gPSAoYnl0ZXMubGVuZ3RoIC0gMSkgKiA4ICYgMHhmZmZmZmZmZjtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IE47ICsraSkge1xuICAgIGNvbnN0IFcgPSBuZXcgVWludDMyQXJyYXkoODApO1xuXG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCAxNjsgKyt0KSB7XG4gICAgICBXW3RdID0gTVtpXVt0XTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCB0ID0gMTY7IHQgPCA4MDsgKyt0KSB7XG4gICAgICBXW3RdID0gUk9UTChXW3QgLSAzXSBeIFdbdCAtIDhdIF4gV1t0IC0gMTRdIF4gV1t0IC0gMTZdLCAxKTtcbiAgICB9XG5cbiAgICBsZXQgYSA9IEhbMF07XG4gICAgbGV0IGIgPSBIWzFdO1xuICAgIGxldCBjID0gSFsyXTtcbiAgICBsZXQgZCA9IEhbM107XG4gICAgbGV0IGUgPSBIWzRdO1xuXG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCA4MDsgKyt0KSB7XG4gICAgICBjb25zdCBzID0gTWF0aC5mbG9vcih0IC8gMjApO1xuICAgICAgY29uc3QgVCA9IFJPVEwoYSwgNSkgKyBmKHMsIGIsIGMsIGQpICsgZSArIEtbc10gKyBXW3RdID4+PiAwO1xuICAgICAgZSA9IGQ7XG4gICAgICBkID0gYztcbiAgICAgIGMgPSBST1RMKGIsIDMwKSA+Pj4gMDtcbiAgICAgIGIgPSBhO1xuICAgICAgYSA9IFQ7XG4gICAgfVxuXG4gICAgSFswXSA9IEhbMF0gKyBhID4+PiAwO1xuICAgIEhbMV0gPSBIWzFdICsgYiA+Pj4gMDtcbiAgICBIWzJdID0gSFsyXSArIGMgPj4+IDA7XG4gICAgSFszXSA9IEhbM10gKyBkID4+PiAwO1xuICAgIEhbNF0gPSBIWzRdICsgZSA+Pj4gMDtcbiAgfVxuXG4gIHJldHVybiBbSFswXSA+PiAyNCAmIDB4ZmYsIEhbMF0gPj4gMTYgJiAweGZmLCBIWzBdID4+IDggJiAweGZmLCBIWzBdICYgMHhmZiwgSFsxXSA+PiAyNCAmIDB4ZmYsIEhbMV0gPj4gMTYgJiAweGZmLCBIWzFdID4+IDggJiAweGZmLCBIWzFdICYgMHhmZiwgSFsyXSA+PiAyNCAmIDB4ZmYsIEhbMl0gPj4gMTYgJiAweGZmLCBIWzJdID4+IDggJiAweGZmLCBIWzJdICYgMHhmZiwgSFszXSA+PiAyNCAmIDB4ZmYsIEhbM10gPj4gMTYgJiAweGZmLCBIWzNdID4+IDggJiAweGZmLCBIWzNdICYgMHhmZiwgSFs0XSA+PiAyNCAmIDB4ZmYsIEhbNF0gPj4gMTYgJiAweGZmLCBIWzRdID4+IDggJiAweGZmLCBIWzRdICYgMHhmZl07XG59XG5cbnZhciBfZGVmYXVsdCA9IHNoYTE7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMudW5zYWZlU3RyaW5naWZ5ID0gdW5zYWZlU3RyaW5naWZ5O1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZnVuY3Rpb24gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICAvLyBOb3RlOiBCZSBjYXJlZnVsIGVkaXRpbmcgdGhpcyBjb2RlISAgSXQncyBiZWVuIHR1bmVkIGZvciBwZXJmb3JtYW5jZVxuICAvLyBhbmQgd29ya3MgaW4gd2F5cyB5b3UgbWF5IG5vdCBleHBlY3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQvcHVsbC80MzRcbiAgcmV0dXJuIChieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXSkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxudmFyIF9kZWZhdWx0ID0gc3RyaW5naWZ5O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfcm5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ybmcuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxuLy9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9MaW9zSy9VVUlELmpzXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxubGV0IF9ub2RlSWQ7XG5cbmxldCBfY2xvY2tzZXE7IC8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxuXG5cbmxldCBfbGFzdE1TZWNzID0gMDtcbmxldCBfbGFzdE5TZWNzID0gMDsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCBmb3IgQVBJIGRldGFpbHNcblxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgbGV0IGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIGNvbnN0IGIgPSBidWYgfHwgbmV3IEFycmF5KDE2KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxldCBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XG4gIGxldCBjbG9ja3NlcSA9IG9wdGlvbnMuY2xvY2tzZXEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuY2xvY2tzZXEgOiBfY2xvY2tzZXE7IC8vIG5vZGUgYW5kIGNsb2Nrc2VxIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gcmFuZG9tIHZhbHVlcyBpZiB0aGV5J3JlIG5vdFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcbiAgLy8gc3lzdGVtIGVudHJvcHkuICBTZWUgIzE4OVxuXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBfcm5nLmRlZmF1bHQpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICBsZXQgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIGxldCBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIGNvbnN0IGR0ID0gbXNlY3MgLSBfbGFzdE1TZWNzICsgKG5zZWNzIC0gX2xhc3ROU2VjcykgLyAxMDAwMDsgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2xvY2tzZXEgPSBjbG9ja3NlcSArIDEgJiAweDNmZmY7XG4gIH0gLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuXG5cbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH0gLy8gUGVyIDQuMi4xLjIgVGhyb3cgZXJyb3IgaWYgdG9vIG1hbnkgdXVpZHMgYXJlIHJlcXVlc3RlZFxuXG5cbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXVpZC52MSgpOiBDYW4ndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWNcIik7XG4gIH1cblxuICBfbGFzdE1TZWNzID0gbXNlY3M7XG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7IC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwOyAvLyBgdGltZV9sb3dgXG5cbiAgY29uc3QgdGwgPSAoKG1zZWNzICYgMHhmZmZmZmZmKSAqIDEwMDAwICsgbnNlY3MpICUgMHgxMDAwMDAwMDA7XG4gIGJbaSsrXSA9IHRsID4+PiAyNCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdGwgJiAweGZmOyAvLyBgdGltZV9taWRgXG5cbiAgY29uc3QgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGIpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2MTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzNS5qc1wiKSk7XG5cbnZhciBfbWQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21kNS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHYzID0gKDAsIF92LmRlZmF1bHQpKCd2MycsIDB4MzAsIF9tZC5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IHYzO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlVSTCA9IGV4cG9ydHMuRE5TID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0ID0gdjM1O1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBzdHJpbmdUb0J5dGVzKHN0cikge1xuICBzdHIgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgY29uc3QgYnl0ZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5jb25zdCBETlMgPSAnNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuRE5TID0gRE5TO1xuY29uc3QgVVJMID0gJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnRzLlVSTCA9IFVSTDtcblxuZnVuY3Rpb24gdjM1KG5hbWUsIHZlcnNpb24sIGhhc2hmdW5jKSB7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlVVVJRCh2YWx1ZSwgbmFtZXNwYWNlLCBidWYsIG9mZnNldCkge1xuICAgIHZhciBfbmFtZXNwYWNlO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gc3RyaW5nVG9CeXRlcyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lc3BhY2UgPSAoMCwgX3BhcnNlLmRlZmF1bHQpKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgaWYgKCgoX25hbWVzcGFjZSA9IG5hbWVzcGFjZSkgPT09IG51bGwgfHwgX25hbWVzcGFjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hbWVzcGFjZS5sZW5ndGgpICE9PSAxNikge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdOYW1lc3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpJyk7XG4gICAgfSAvLyBDb21wdXRlIGhhc2ggb2YgbmFtZXNwYWNlIGFuZCB2YWx1ZSwgUGVyIDQuM1xuICAgIC8vIEZ1dHVyZTogVXNlIHNwcmVhZCBzeW50YXggd2hlbiBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtcywgZS5nLiBgYnl0ZXMgPVxuICAgIC8vIGhhc2hmdW5jKFsuLi5uYW1lc3BhY2UsIC4uLiB2YWx1ZV0pYFxuXG5cbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNiArIHZhbHVlLmxlbmd0aCk7XG4gICAgYnl0ZXMuc2V0KG5hbWVzcGFjZSk7XG4gICAgYnl0ZXMuc2V0KHZhbHVlLCBuYW1lc3BhY2UubGVuZ3RoKTtcbiAgICBieXRlcyA9IGhhc2hmdW5jKGJ5dGVzKTtcbiAgICBieXRlc1s2XSA9IGJ5dGVzWzZdICYgMHgwZiB8IHZlcnNpb247XG4gICAgYnl0ZXNbOF0gPSBieXRlc1s4XSAmIDB4M2YgfCAweDgwO1xuXG4gICAgaWYgKGJ1Zikge1xuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgICBidWZbb2Zmc2V0ICsgaV0gPSBieXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShieXRlcyk7XG4gIH0gLy8gRnVuY3Rpb24jbmFtZSBpcyBub3Qgc2V0dGFibGUgb24gc29tZSBwbGF0Zm9ybXMgKCMyNzApXG5cblxuICB0cnkge1xuICAgIGdlbmVyYXRlVVVJRC5uYW1lID0gbmFtZTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gIH0gY2F0Y2ggKGVycikge30gLy8gRm9yIENvbW1vbkpTIGRlZmF1bHQgZXhwb3J0IHN1cHBvcnRcblxuXG4gIGdlbmVyYXRlVVVJRC5ETlMgPSBETlM7XG4gIGdlbmVyYXRlVVVJRC5VUkwgPSBVUkw7XG4gIHJldHVybiBnZW5lcmF0ZVVVSUQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfbmF0aXZlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uYXRpdmUuanNcIikpO1xuXG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcblxudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChfbmF0aXZlLmRlZmF1bHQucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG5cbiAgcm5kc1s2XSA9IHJuZHNbNl0gJiAweDBmIHwgMHg0MDtcbiAgcm5kc1s4XSA9IHJuZHNbOF0gJiAweDNmIHwgMHg4MDsgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG5cbiAgaWYgKGJ1Zikge1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICBidWZbb2Zmc2V0ICsgaV0gPSBybmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBidWY7XG4gIH1cblxuICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShybmRzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdjQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX3NoYSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2hhMS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHY1ID0gKDAsIF92LmRlZmF1bHQpKCd2NScsIDB4NTAsIF9zaGEuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2NTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWdleC5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKHV1aWQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyAmJiBfcmVnZXguZGVmYXVsdC50ZXN0KHV1aWQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2YWxpZGF0ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZlcnNpb24odXVpZCkge1xuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE1KSwgMTYpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2ZXJzaW9uO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYwNyk7XG4iXSwibmFtZXMiOlsiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9leHRlbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImFwcGx5IiwidGhpcyIsIl9pbmhlcml0c0xvb3NlIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJfX3Byb3RvX18iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImV4Y2x1ZGVkIiwic291cmNlS2V5cyIsImtleXMiLCJpbmRleE9mIiwib3B0aW9ucyIsImNhcHR1cmUiLCJ1c2VPdXRzaWRlQ2xpY2siLCJjYWxsYmFjayIsInJlZiIsInVzZVJlZiIsInVzZUVmZmVjdCIsImhhbmRsZUNsaWNrIiwiZXZlbnQiLCJjdXJyZW50IiwiY29udGFpbnMiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX19yZWFkIiwibyIsIm4iLCJtIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJyIiwiZSIsImFyIiwibmV4dCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJlcnJvciIsInVzZVByb21pc2UiLCJfdGhpcyIsIl9hIiwidXNlU3RhdGUiLCJkYXRhIiwidW5kZWZpbmVkIiwiaXNQZW5kaW5nIiwiaXNSZXNvbHZlZCIsImlzUmVqZWN0ZWQiLCJpc1NldHRsZWQiLCJyZXN1bHQiLCJzZXRSZXN1bHQiLCJoYXNVbm1vdW50ZWQiLCJkaXNwYXRjaCIsInVzZUNhbGxiYWNrIiwicHJvbWlzZSIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiZ2VuZXJhdG9yIiwiZXJyb3JfMSIsImJvZHkiLCJmIiwieSIsInQiLCJnIiwiXyIsImxhYmVsIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwidiIsIm9wIiwiVHlwZUVycm9yIiwicG9wIiwic3RlcCIsIl9fZ2VuZXJhdG9yIiwiUCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJ0aGVuIiwiU1dSR2xvYmFsU3RhdGUiLCJXZWFrTWFwIiwiRU1QVFlfQ0FDSEUiLCJJTklUSUFMX0NBQ0hFIiwibm9vcCIsIlVOREVGSU5FRCIsIk9CSkVDVCIsImlzVW5kZWZpbmVkIiwiaXNGdW5jdGlvbiIsIm1lcmdlT2JqZWN0cyIsImEiLCJiIiwiU1RSX1VOREVGSU5FRCIsImlzV2luZG93RGVmaW5lZCIsIndpbmRvdyIsImlzRG9jdW1lbnREZWZpbmVkIiwiY3JlYXRlQ2FjaGVIZWxwZXIiLCJjYWNoZSIsInN0YXRlIiwiZ2V0IiwiaW5mbyIsInByZXYiLCJ0YWJsZSIsImNvdW50ZXIiLCJzdGFibGVIYXNoIiwiYXJnIiwidHlwZSIsImlzRGF0ZSIsIkRhdGUiLCJpbmRleCIsIlJlZ0V4cCIsInRvSlNPTiIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldCIsIkFycmF5Iiwic29ydCIsIm9ubGluZSIsIm9uV2luZG93RXZlbnQiLCJvZmZXaW5kb3dFdmVudCIsImJpbmQiLCJwcmVzZXQiLCJpc09ubGluZSIsImlzVmlzaWJsZSIsInZpc2liaWxpdHlTdGF0ZSIsImRlZmF1bHRDb25maWdPcHRpb25zIiwiaW5pdEZvY3VzIiwiaW5pdFJlY29ubmVjdCIsIm9uT25saW5lIiwib25PZmZsaW5lIiwiSVNfUkVBQ1RfTEVHQUNZIiwiSVNfU0VSVkVSIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIm5hdmlnYXRvckNvbm5lY3Rpb24iLCJuYXZpZ2F0b3IiLCJjb25uZWN0aW9uIiwic2xvd0Nvbm5lY3Rpb24iLCJpbmNsdWRlcyIsImVmZmVjdGl2ZVR5cGUiLCJzYXZlRGF0YSIsImVyciIsImFyZ3MiLCJpc0FycmF5IiwiX190aW1lc3RhbXAiLCJnZXRUaW1lc3RhbXAiLCJNVVRBVEVfRVZFTlQiLCJjb25zdGFudHMiLCJhc3luYyIsImludGVybmFsTXV0YXRlIiwiX2tleSIsIl9kYXRhIiwiX29wdHMiLCJwb3B1bGF0ZUNhY2hlIiwidGhyb3dPbkVycm9yIiwicmV2YWxpZGF0ZSIsInJvbGxiYWNrT25FcnJvck9wdGlvbiIsInJvbGxiYWNrT25FcnJvciIsIm9wdGltaXN0aWNEYXRhIiwia2V5RmlsdGVyIiwibWF0Y2hlZEtleXMiLCJpdCIsImtleUl0IiwidGVzdCIsIl9rIiwiYWxsIiwibWFwIiwibXV0YXRlQnlLZXkiLCJFVkVOVF9SRVZBTElEQVRPUlMiLCJNVVRBVElPTiIsIkZFVENIIiwicmV2YWxpZGF0b3JzIiwic3RhcnRSZXZhbGlkYXRlIiwiYmVmb3JlTXV0YXRpb25UcyIsImhhc09wdGltaXN0aWNEYXRhIiwiZGlzcGxheWVkRGF0YSIsImN1cnJlbnREYXRhIiwiX2MiLCJjb21taXR0ZWREYXRhIiwiY2F0Y2giLCJyZXMiLCJyZXZhbGlkYXRlQWxsS2V5cyIsImluaXRDYWNoZSIsInByb3ZpZGVyIiwiaGFzIiwib3B0cyIsIm11dGF0ZSIsInVubW91bnQiLCJzdWJzY3JpcHRpb25zIiwic3Vic2NyaWJlIiwic3VicyIsInNwbGljZSIsInNldHRlciIsImZuIiwiaW5pdFByb3ZpZGVyIiwicmVsZWFzZUZvY3VzIiwic2V0VGltZW91dCIsInJlbGVhc2VSZWNvbm5lY3QiLCJkZWxldGUiLCJNYXAiLCJkZWZhdWx0Q29uZmlnIiwib25Mb2FkaW5nU2xvdyIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJvbkVycm9yUmV0cnkiLCJfXyIsImNvbmZpZyIsIm1heFJldHJ5Q291bnQiLCJlcnJvclJldHJ5Q291bnQiLCJjdXJyZW50UmV0cnlDb3VudCIsInJldHJ5Q291bnQiLCJ0aW1lb3V0IiwiTWF0aCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIlNXUkNvbmZpZ0NvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZW5hYmxlRGV2dG9vbHMiLCJfX1NXUl9ERVZUT09MU19VU0VfXyIsInVzZSIsInVzZVNXUkNvbmZpZyIsInVzZUNvbnRleHQiLCJjb25jYXQiLCJ1c2VTV1JOZXh0Iiwia2V5XyIsImZldGNoZXJfIiwiUFJFTE9BRCIsInJlcSIsIl9fU1dSX0RFVlRPT0xTX1JFQUNUX18iLCJXSVRIX0RFRFVQRSIsImRlZHVwZSIsInVzZVNXUkhvb2tzQ29uZmlnIiwic3dyQ29uZmlnIiwidXNlTWVtbyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJkZWZpbmVQcm9wZXJ0eSIsInByb3BzIiwicGFyZW50Q29uZmlnIiwiaXNGdW5jdGlvbmFsQ29uZmlnIiwiZXh0ZW5kZWRDb25maWciLCJ1MSIsImYxIiwidTIiLCJmMiIsIm1lcmdlQ29uZmlncyIsImNhY2hlQ29udGV4dFJlZiIsImNhY2hlQ29udGV4dCIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsImNjIiwib2JqIiwib3V0IiwidG1wIiwiayIsIl9fYXNzaWduIiwicyIsInAiLCJfX2NyZWF0ZUJpbmRpbmciLCJrMiIsImVudW1lcmFibGUiLCJfX3NldE1vZHVsZURlZmF1bHQiLCJfX2ltcG9ydFN0YXIiLCJtb2QiLCJfX2VzTW9kdWxlIiwiZXhwb3J0cyIsIkhpbnQiLCJyZWFjdF8xIiwidXRpbHNfMSIsIl9iIiwiY2hpbGQiLCJkZWZhdWx0IiwiQ2hpbGRyZW4iLCJvbmx5IiwiY2hpbGRyZW4iLCJ0b0xvd2VyQ2FzZSIsImRpc2FibGVIaW50IiwiYWxsb3dUYWJGaWxsIiwiYWxsb3dFbnRlckZpbGwiLCJvbkZpbGwiLCJvbkhpbnQiLCJ2YWx1ZU1vZGlmaWVyIiwiY2hpbGRQcm9wcyIsIm1haW5JbnB1dFJlZiIsImhpbnRXcmFwcGVyUmVmIiwiaGludFJlZiIsInVuTW9kaWZpZWRJbnB1dFRleHQiLCJzZXRVbm1vZGlmaWVkSW5wdXRUZXh0IiwiX2QiLCJ0ZXh0Iiwic2V0VGV4dCIsIl9lIiwiaGludCIsInNldEhpbnQiLCJfZiIsIm1hdGNoIiwic2V0TWF0Y2giLCJfZyIsImNoYW5nZUV2ZW50Iiwic2V0Q2hhbmdlRXZlbnQiLCJkdXBsaWNhdGUiLCJnZXRGaXJzdER1cGxpY2F0ZU9wdGlvbiIsImNvbnNvbGUiLCJ3YXJuIiwiaW5wdXRTdHlsZSIsImdldENvbXB1dGVkU3R5bGUiLCJzdHlsZUhpbnQiLCJzZXRIaW50VGV4dEFuZElkIiwiZmlsdGVyIiwieCIsInN0YXJ0c1dpdGgiLCJzb3J0QXNjIiwiZ2V0TWF0Y2giLCJzbGljZSIsImhhbmRsZU9uRmlsbCIsIm5ld1VuTW9kaWZpZWRUZXh0Iiwib25DaGFuZ2UiLCJzdHlsZSIsImZvbnRGYW1pbHkiLCJmb250U2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwibGluZUhlaWdodCIsImJveFNpemluZyIsIm1hcmdpbiIsImludGVycG9sYXRlU3R5bGUiLCJwYWRkaW5nIiwiYm9yZGVyU3R5bGUiLCJib3JkZXJXaWR0aCIsImNoaWxkUmVmIiwiY2xvbmVFbGVtZW50IiwibWFpbklucHV0IiwicGVyc2lzdCIsIm1vZGlmaWVkVmFsdWUiLCJvbkJsdXIiLCJyZWxhdGVkVGFyZ2V0Iiwib25Gb2N1cyIsIm9uS2V5RG93biIsImNhcmV0SXNBdFRleHRFbmQiLCJjdXJyZW50VGFyZ2V0Iiwic2VsZWN0aW9uRW5kIiwicHJldmVudERlZmF1bHQiLCJtZXJnZVJlZnMiLCJjbGFzc05hbWUiLCJwb3NpdGlvbiIsIkZyYWdtZW50IiwiZGlzcGxheSIsInBvaW50ZXJFdmVudHMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJDb2xvciIsImJveFNoYWRvdyIsImNvbG9yIiwidG9wIiwibGVmdCIsInZpc2liaWxpdHkiLCJ3aGl0ZVNwYWNlIiwib25DbGljayIsImhpbnRDYXJldFBvc2l0aW9uIiwiZm9jdXMiLCJjYXJldFBvc2l0aW9uIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJiYWNrZ3JvdW5kIiwib3V0bGluZSIsImJvcmRlciIsImNhcmV0Q29sb3IiLCJkZWZhdWx0VmFsdWUiLCJ0YWJJbmRleCIsInJlZnMiLCJfaSIsImZpbHRlcmVkUmVmcyIsIkJvb2xlYW4iLCJpbnN0IiwiZmlsdGVyZWRSZWZzXzEiLCJzdHlsZXMiLCJhdHRyIiwic3ViYXR0ciIsInJlcGxhY2UiLCJ0b1VwcGVyQ2FzZSIsImRpciIsImpvaW4iLCJhcnJheSIsInRyYWNrZXIiLCJpc2ZmIiwidXNlckFnZW50IiwiYWRkRXZlbnQiLCJvYmplY3QiLCJtZXRob2QiLCJ1c2VDYXB0dXJlIiwiYXR0YWNoRXZlbnQiLCJnZXRNb2RzIiwibW9kaWZpZXIiLCJtb2RzIiwiZ2V0S2V5cyIsInNwbGl0IiwibGFzdEluZGV4T2YiLCJfa2V5TWFwIiwiYmFja3NwYWNlIiwidGFiIiwiY2xlYXIiLCJlbnRlciIsInJldHVybiIsImVzYyIsImVzY2FwZSIsInNwYWNlIiwidXAiLCJyaWdodCIsImRvd24iLCJkZWwiLCJpbnMiLCJpbnNlcnQiLCJob21lIiwiZW5kIiwicGFnZXVwIiwicGFnZWRvd24iLCJjYXBzbG9jayIsIm51bV8wIiwibnVtXzEiLCJudW1fMiIsIm51bV8zIiwibnVtXzQiLCJudW1fNSIsIm51bV82IiwibnVtXzciLCJudW1fOCIsIm51bV85IiwibnVtX211bHRpcGx5IiwibnVtX2FkZCIsIm51bV9lbnRlciIsIm51bV9zdWJ0cmFjdCIsIm51bV9kZWNpbWFsIiwibnVtX2RpdmlkZSIsIl9tb2RpZmllciIsInNoaWZ0IiwiYWx0Iiwib3B0aW9uIiwiY3RybCIsImNvbnRyb2wiLCJjbWQiLCJjb21tYW5kIiwibW9kaWZpZXJNYXAiLCJzaGlmdEtleSIsImN0cmxLZXkiLCJhbHRLZXkiLCJtZXRhS2V5IiwiX21vZHMiLCJfaGFuZGxlcnMiLCJfZG93bktleXMiLCJ3aW5MaXN0ZW5kRm9jdXMiLCJfc2NvcGUiLCJlbGVtZW50SGFzQmluZEV2ZW50IiwiY29kZSIsImNoYXJDb2RlQXQiLCJzZXRTY29wZSIsInNjb3BlIiwiZ2V0U2NvcGUiLCJlYWNoVW5iaW5kIiwiX3JlZiIsIl9yZWYkc3BsaXRLZXkiLCJzcGxpdEtleSIsImZvckVhY2giLCJvcmlnaW5LZXkiLCJ1bmJpbmRLZXlzIiwibGVuIiwibGFzdEtleSIsImtleUNvZGUiLCJyZWNvcmQiLCJhMSIsImEyIiwiYXJyMSIsImFycjIiLCJpc0luZGV4IiwiY29tcGFyZUFycmF5IiwiZXZlbnRIYW5kbGVyIiwiaGFuZGxlciIsImVsZW1lbnQiLCJtb2RpZmllcnNNYXRjaCIsInNob3J0Y3V0IiwicmV0dXJuVmFsdWUiLCJzdG9wUHJvcGFnYXRpb24iLCJjYW5jZWxCdWJibGUiLCJhc3RlcmlzayIsIndoaWNoIiwiY2hhckNvZGUiLCJob3RrZXlzIiwia2V5TmFtZSIsImtleU51bSIsImdldE1vZGlmaWVyU3RhdGUiLCJrZXlkb3duIiwia2V5dXAiLCJrZXlTaG9ydGN1dCIsIl9kb3duS2V5c0N1cnJlbnQiLCJpc0VsZW1lbnRCaW5kIiwiY2xlYXJNb2RpZmllciIsIl9hcGkiLCJkZWxldGVTY29wZSIsIm5ld1Njb3BlIiwiaGFuZGxlcnMiLCJnZXRQcmVzc2VkS2V5Q29kZXMiLCJpc1ByZXNzZWQiLCJzcmNFbGVtZW50IiwidGFnTmFtZSIsImZsYWciLCJpc0NvbnRlbnRFZGl0YWJsZSIsInJlYWRPbmx5IiwidHJpZ2dlciIsImZpbmQiLCJpdGVtIiwidW5iaW5kIiwia2V5c0luZm8iLCJfbGVuIiwia2V5TWFwIiwiX2hvdGtleXMiLCJub0NvbmZsaWN0IiwiZGVlcCIsInVzZUlzSG90a2V5UHJlc3NlZCIsInRhZ0ZpbHRlciIsImVuYWJsZU9uVGFncyIsInRhcmdldFRhZ05hbWUiLCJpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0IiwiZXYiLCJ1c2VIb3RrZXlzIiwiZGVwcyIsIl9yZWYyIiwiX3JlZjIkZmlsdGVyUHJldmVudERlIiwiZmlsdGVyUHJldmVudERlZmF1bHQiLCJfcmVmMiRlbmFibGVkIiwiZW5hYmxlZCIsIl9yZWYyJGVuYWJsZU9uQ29udGVudCIsImVuYWJsZU9uQ29udGVudEVkaXRhYmxlIiwibWVtb2lzZWRDYWxsYmFjayIsImtleWJvYXJkRXZlbnQiLCJob3RrZXlzRXZlbnQiLCJfa2V5Ym9hcmRFdmVudCR0YXJnZXQiLCJfcmVmJGN1cnJlbnQiLCJhY3RpdmVFbGVtZW50IiwiaXNIb3RrZXlQcmVzc2VkIiwicmVwbGFjZUNsYXNzTmFtZSIsIm9yaWdDbGFzcyIsImNsYXNzVG9SZW1vdmUiLCJkaXNhYmxlZCIsImZvcmNlUmVmbG93Iiwibm9kZSIsInNjcm9sbFRvcCIsIlVOTU9VTlRFRCIsIkVYSVRFRCIsIkVOVEVSSU5HIiwiRU5URVJFRCIsIkVYSVRJTkciLCJUcmFuc2l0aW9uIiwiX1JlYWN0JENvbXBvbmVudCIsImNvbnRleHQiLCJpbml0aWFsU3RhdHVzIiwiYXBwZWFyIiwiaXNNb3VudGluZyIsImFwcGVhclN0YXR1cyIsImluIiwidW5tb3VudE9uRXhpdCIsIm1vdW50T25FbnRlciIsInN0YXR1cyIsIm5leHRDYWxsYmFjayIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsInByZXZTdGF0ZSIsIl9wcm90byIsImNvbXBvbmVudERpZE1vdW50IiwidXBkYXRlU3RhdHVzIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwibmV4dFN0YXR1cyIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY2FuY2VsTmV4dENhbGxiYWNrIiwiZ2V0VGltZW91dHMiLCJleGl0IiwibW91bnRpbmciLCJub2RlUmVmIiwicGVyZm9ybUVudGVyIiwicGVyZm9ybUV4aXQiLCJzZXRTdGF0ZSIsIl90aGlzMiIsImFwcGVhcmluZyIsIm1heWJlTm9kZSIsIm1heWJlQXBwZWFyaW5nIiwidGltZW91dHMiLCJlbnRlclRpbWVvdXQiLCJzYWZlU2V0U3RhdGUiLCJvbkVudGVyZWQiLCJvbkVudGVyIiwib25FbnRlcmluZyIsIm9uVHJhbnNpdGlvbkVuZCIsIl90aGlzMyIsIm9uRXhpdCIsIm9uRXhpdGluZyIsIm9uRXhpdGVkIiwiY2FuY2VsIiwibmV4dFN0YXRlIiwic2V0TmV4dENhbGxiYWNrIiwiX3RoaXM0IiwiYWN0aXZlIiwiZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciIsImFkZEVuZExpc3RlbmVyIiwiX3JlZjMiLCJtYXliZU5leHRDYWxsYmFjayIsInJlbmRlciIsIl90aGlzJHByb3BzIiwiVHJhbnNpdGlvbkdyb3VwQ29udGV4dCIsImNvbnRleHRUeXBlIiwicHJvcFR5cGVzIiwiZGVmYXVsdFByb3BzIiwicmVtb3ZlQ2xhc3MiLCJjbGFzc2VzIiwiYyIsImNsYXNzTGlzdCIsInJlbW92ZSIsInNldEF0dHJpYnV0ZSIsImJhc2VWYWwiLCJDU1NUcmFuc2l0aW9uIiwiYXBwbGllZENsYXNzZXMiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQiLCJyZXNvbHZlQXJndW1lbnRzIiwicmVtb3ZlQ2xhc3NlcyIsImFkZENsYXNzIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MiIsIl90aGlzJHJlc29sdmVBcmd1bWVudDMiLCJnZXRDbGFzc05hbWVzIiwiY2xhc3NOYW1lcyIsImlzU3RyaW5nQ2xhc3NOYW1lcyIsImJhc2VDbGFzc05hbWUiLCJhY3RpdmVDbGFzc05hbWUiLCJkb25lQ2xhc3NOYW1lIiwicGhhc2UiLCJhZGQiLCJoYXNDbGFzcyIsIl9hZGRDbGFzcyIsIl90aGlzJGFwcGxpZWRDbGFzc2VzJCIsImJhc2UiLCJnZXRDaGlsZE1hcHBpbmciLCJtYXBGbiIsImlzVmFsaWRFbGVtZW50IiwibWFwcGVyIiwiZ2V0UHJvcCIsInByb3AiLCJnZXROZXh0Q2hpbGRNYXBwaW5nIiwibmV4dFByb3BzIiwicHJldkNoaWxkTWFwcGluZyIsIm5leHRDaGlsZE1hcHBpbmciLCJnZXRWYWx1ZUZvcktleSIsIm5leHRLZXlzUGVuZGluZyIsInBlbmRpbmdLZXlzIiwicHJldktleSIsImNoaWxkTWFwcGluZyIsIm5leHRLZXkiLCJwZW5kaW5nTmV4dEtleSIsIm1lcmdlQ2hpbGRNYXBwaW5ncyIsImhhc1ByZXYiLCJoYXNOZXh0IiwicHJldkNoaWxkIiwiaXNMZWF2aW5nIiwidmFsdWVzIiwiVHJhbnNpdGlvbkdyb3VwIiwiaGFuZGxlRXhpdGVkIiwiY29udGV4dFZhbHVlIiwiZmlyc3RSZW5kZXIiLCJtb3VudGVkIiwiY3VycmVudENoaWxkTWFwcGluZyIsIkNvbXBvbmVudCIsImNvbXBvbmVudCIsImNoaWxkRmFjdG9yeSIsIlJlcGxhY2VUcmFuc2l0aW9uIiwiX2FyZ3MiLCJoYW5kbGVFbnRlciIsIl9sZW4yIiwiX2tleTIiLCJoYW5kbGVMaWZlY3ljbGUiLCJoYW5kbGVFbnRlcmluZyIsIl9sZW4zIiwiX2tleTMiLCJoYW5kbGVFbnRlcmVkIiwiX2xlbjQiLCJfa2V5NCIsImhhbmRsZUV4aXQiLCJfbGVuNSIsIl9rZXk1IiwiaGFuZGxlRXhpdGluZyIsIl9sZW42IiwiX2tleTYiLCJfbGVuNyIsIl9rZXk3IiwiaWR4Iiwib3JpZ2luYWxBcmdzIiwiX2NoaWxkJHByb3BzIiwiaW5Qcm9wIiwiX1JlYWN0JENoaWxkcmVuJHRvQXJyIiwiZmlyc3QiLCJzZWNvbmQiLCJfbGVhdmVSZW5kZXJzIiwiX2VudGVyUmVuZGVycyIsIm1vZGVzIiwiY2FsbEhvb2siLCJuYW1lIiwiY2IiLCJfZWxlbWVudCRwcm9wcyIsImxlYXZlUmVuZGVycyIsImNoYW5nZVN0YXRlIiwiZW50ZXJSZW5kZXJzIiwiX3JlZjQiLCJTd2l0Y2hUcmFuc2l0aW9uIiwiYXBwZWFyZWQiLCJtb2RlIiwib2xkQ2hpbGRyZW4iLCJuZXdDaGlsZHJlbiIsIl90aGlzJHN0YXRlIiwiY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiSW5maW5pdGVMb2FkZXIiLCJfUHVyZUNvbXBvbmVudCIsIl90ZW1wIiwiaW5zdGFuY2UiLCJjbGFzc0NhbGxDaGVjayIsImdldFByb3RvdHlwZU9mIiwiX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgiLCJfbGFzdFJlbmRlcmVkU3RvcEluZGV4IiwiX21lbW9pemVkVW5sb2FkZWRSYW5nZXMiLCJfb25JdGVtc1JlbmRlcmVkIiwidmlzaWJsZVN0YXJ0SW5kZXgiLCJ2aXNpYmxlU3RvcEluZGV4IiwiX2Vuc3VyZVJvd3NMb2FkZWQiLCJfc2V0UmVmIiwibGlzdFJlZiIsIl9saXN0UmVmIiwic2V0UHJvdG90eXBlT2YiLCJpbmhlcml0cyIsImF1dG9SZWxvYWQiLCJvbkl0ZW1zUmVuZGVyZWQiLCJzdGFydEluZGV4Iiwic3RvcEluZGV4IiwiX3Byb3BzIiwiaXNJdGVtTG9hZGVkIiwiaXRlbUNvdW50IiwiX3Byb3BzJG1pbmltdW1CYXRjaFNpIiwibWluaW11bUJhdGNoU2l6ZSIsIl9wcm9wcyR0aHJlc2hvbGQiLCJ0aHJlc2hvbGQiLCJ1bmxvYWRlZFJhbmdlcyIsInJhbmdlU3RhcnRJbmRleCIsInJhbmdlU3RvcEluZGV4IiwiX2luZGV4IiwicG90ZW50aWFsU3RvcEluZGV4IiwibWluIiwibWF4IiwiX2luZGV4MiIsIl9pbmRleDMiLCJzY2FuRm9yVW5sb2FkZWRSYW5nZXMiLCJzb21lIiwic3RhcnRPclN0b3AiLCJfbG9hZFVubG9hZGVkUmFuZ2VzIiwibG9hZE1vcmVJdGVtcyIsImxvYWRNb3JlUm93cyIsIl9sb29wIiwibGFzdFJlbmRlcmVkU3RhcnRJbmRleCIsImxhc3RSZW5kZXJlZFN0b3BJbmRleCIsInJlc2V0QWZ0ZXJJbmRleCIsIl9nZXRJdGVtU3R5bGVDYWNoZSIsImZvcmNlVXBkYXRlIiwiUHVyZUNvbXBvbmVudCIsInNhZmVJc05hTiIsIk51bWJlciIsImlzTmFOIiwiYXJlSW5wdXRzRXF1YWwiLCJuZXdJbnB1dHMiLCJsYXN0SW5wdXRzIiwicmVzdWx0Rm4iLCJpc0VxdWFsIiwibGFzdFRoaXMiLCJsYXN0UmVzdWx0IiwibGFzdEFyZ3MiLCJjYWxsZWRPbmNlIiwibmV3QXJncyIsIm5vdyIsInBlcmZvcm1hbmNlIiwiY2FuY2VsVGltZW91dCIsInRpbWVvdXRJRCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaWQiLCJyZXF1ZXN0VGltZW91dCIsImRlbGF5Iiwic3RhcnQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aWNrIiwic2l6ZSIsImdldFNjcm9sbGJhclNpemUiLCJyZWNhbGN1bGF0ZSIsImRpdiIsIm92ZXJmbG93IiwiYXBwZW5kQ2hpbGQiLCJvZmZzZXRXaWR0aCIsImNsaWVudFdpZHRoIiwicmVtb3ZlQ2hpbGQiLCJjYWNoZWRSVExSZXN1bHQiLCJnZXRSVExPZmZzZXRUeXBlIiwib3V0ZXJEaXYiLCJvdXRlclN0eWxlIiwiZGlyZWN0aW9uIiwiaW5uZXJEaXYiLCJpbm5lclN0eWxlIiwic2Nyb2xsTGVmdCIsIklTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCIsImRlZmF1bHRJdGVtS2V5IiwiY29sdW1uSW5kZXgiLCJyb3dJbmRleCIsImNyZWF0ZUdyaWRDb21wb25lbnQiLCJfY2xhc3MiLCJnZXRDb2x1bW5PZmZzZXQiLCJnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0IiwiZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsImdldENvbHVtbldpZHRoIiwiZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQiLCJnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoIiwiZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50IiwiZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50IiwiZ2V0Um93SGVpZ2h0IiwiZ2V0Um93T2Zmc2V0IiwiZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCIsImdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJpbml0SW5zdGFuY2VQcm9wcyIsInNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UiLCJ2YWxpZGF0ZVByb3BzIiwiR3JpZCIsIl9pbnN0YW5jZVByb3BzIiwiX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQiLCJfb3V0ZXJSZWYiLCJpc1Njcm9sbGluZyIsImhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24iLCJpbml0aWFsU2Nyb2xsTGVmdCIsImluaXRpYWxTY3JvbGxUb3AiLCJzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQiLCJ2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiIsIl9jYWxsT25JdGVtc1JlbmRlcmVkIiwib3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4Iiwib3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgiLCJvdmVyc2NhblJvd1N0YXJ0SW5kZXgiLCJvdmVyc2NhblJvd1N0b3BJbmRleCIsInZpc2libGVDb2x1bW5TdGFydEluZGV4IiwidmlzaWJsZUNvbHVtblN0b3BJbmRleCIsInZpc2libGVSb3dTdGFydEluZGV4IiwidmlzaWJsZVJvd1N0b3BJbmRleCIsIl9jYWxsT25TY3JvbGwiLCJvblNjcm9sbCIsIl9nZXRJdGVtU3R5bGUiLCJjb2x1bW5XaWR0aCIsInJvd0hlaWdodCIsIml0ZW1TdHlsZUNhY2hlIiwiX29mZnNldCIsImlzUnRsIiwiX19fIiwiX29uU2Nyb2xsIiwiX2V2ZW50JGN1cnJlbnRUYXJnZXQiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxXaWR0aCIsImNhbGN1bGF0ZWRTY3JvbGxMZWZ0IiwiY2FsY3VsYXRlZFNjcm9sbFRvcCIsIl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkIiwiX291dGVyUmVmU2V0dGVyIiwib3V0ZXJSZWYiLCJfcmVzZXRJc1Njcm9sbGluZyIsInZhbGlkYXRlU2hhcmVkUHJvcHMiLCJzY3JvbGxUbyIsInNjcm9sbFRvSXRlbSIsIl9yZWY0JGFsaWduIiwiYWxpZ24iLCJfdGhpcyRwcm9wczIiLCJjb2x1bW5Db3VudCIsInJvd0NvdW50Iiwic2Nyb2xsYmFyU2l6ZSIsImVzdGltYXRlZFRvdGFsSGVpZ2h0IiwiaG9yaXpvbnRhbFNjcm9sbGJhclNpemUiLCJ2ZXJ0aWNhbFNjcm9sbGJhclNpemUiLCJfdGhpcyRwcm9wczMiLCJfY2FsbFByb3BzQ2FsbGJhY2tzIiwiX3RoaXMkc3RhdGUyIiwiX3RoaXMkcHJvcHM0IiwiaW5uZXJSZWYiLCJpbm5lckVsZW1lbnRUeXBlIiwiaW5uZXJUYWdOYW1lIiwiaXRlbURhdGEiLCJfdGhpcyRwcm9wczQkaXRlbUtleSIsIml0ZW1LZXkiLCJvdXRlckVsZW1lbnRUeXBlIiwib3V0ZXJUYWdOYW1lIiwidXNlSXNTY3JvbGxpbmciLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIiLCJfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIiLCJjb2x1bW5TdGFydEluZGV4IiwiY29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuIiwiX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciIsInJvd1N0YXJ0SW5kZXgiLCJyb3dTdG9wSW5kZXgiLCJpdGVtcyIsIl9yb3dJbmRleCIsIl9jb2x1bW5JbmRleCIsImVzdGltYXRlZFRvdGFsV2lkdGgiLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsIndpbGxDaGFuZ2UiLCJfdGhpcyRwcm9wczUiLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyIiwiX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIl9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuMiIsIl9vdmVyc2NhblJvd1N0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJfdmlzaWJsZVJvd1N0YXJ0SW5kZXgiLCJfdmlzaWJsZVJvd1N0b3BJbmRleCIsIl90aGlzJHN0YXRlMyIsIl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiX3Njcm9sbExlZnQiLCJfc2Nyb2xsVG9wIiwiX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsIl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiIsIl90aGlzJHByb3BzNiIsIm92ZXJzY2FuQ29sdW1uQ291bnQiLCJvdmVyc2NhbkNvbHVtbnNDb3VudCIsIm92ZXJzY2FuQ291bnQiLCJfdGhpcyRzdGF0ZTQiLCJvdmVyc2NhbkNvdW50UmVzb2x2ZWQiLCJvdmVyc2NhbkJhY2t3YXJkIiwib3ZlcnNjYW5Gb3J3YXJkIiwiX3RoaXMkcHJvcHM3Iiwib3ZlcnNjYW5Sb3dDb3VudCIsIm92ZXJzY2FuUm93c0NvdW50IiwiX3RoaXMkc3RhdGU1IiwiX3JlZjUiLCJfcmVmNiIsInJvd01ldGFkYXRhTWFwIiwiZXN0aW1hdGVkUm93SGVpZ2h0IiwibGFzdE1lYXN1cmVkUm93SW5kZXgiLCJ0b3RhbFNpemVPZk1lYXN1cmVkUm93cyIsIml0ZW1NZXRhZGF0YSIsIm9mZnNldCIsImNvbHVtbk1ldGFkYXRhTWFwIiwiZXN0aW1hdGVkQ29sdW1uV2lkdGgiLCJsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCIsImdldEl0ZW1NZXRhZGF0YSIsIml0ZW1UeXBlIiwiaW5zdGFuY2VQcm9wcyIsIml0ZW1NZXRhZGF0YU1hcCIsIml0ZW1TaXplIiwibGFzdE1lYXN1cmVkSW5kZXgiLCJmaW5kTmVhcmVzdEl0ZW0iLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2giLCJmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCIsImhpZ2giLCJsb3ciLCJtaWRkbGUiLCJmbG9vciIsImN1cnJlbnRPZmZzZXQiLCJpbnRlcnZhbCIsImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50Iiwic2Nyb2xsT2Zmc2V0IiwiZXN0aW1hdGVkVG90YWxTaXplIiwibWF4T2Zmc2V0IiwibWluT2Zmc2V0Iiwicm91bmQiLCJWYXJpYWJsZVNpemVHcmlkIiwicmVzZXRBZnRlckNvbHVtbkluZGV4Iiwic2hvdWxkRm9yY2VVcGRhdGUiLCJyZXNldEFmdGVySW5kaWNlcyIsInJlc2V0QWZ0ZXJSb3dJbmRleCIsIl9yZWY2JHNob3VsZEZvcmNlVXBkYSIsIl9yZWY3IiwiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEiLCJkZWZhdWx0SXRlbUtleSQxIiwiY3JlYXRlTGlzdENvbXBvbmVudCIsImdldEl0ZW1PZmZzZXQiLCJnZXRFc3RpbWF0ZWRUb3RhbFNpemUiLCJnZXRJdGVtU2l6ZSIsImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiTGlzdCIsInNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxPZmZzZXQiLCJvdmVyc2NhblN0YXJ0SW5kZXgiLCJvdmVyc2NhblN0b3BJbmRleCIsImxheW91dCIsImlzSG9yaXpvbnRhbCIsIm9mZnNldEhvcml6b250YWwiLCJfb25TY3JvbGxIb3Jpem9udGFsIiwiX29uU2Nyb2xsVmVydGljYWwiLCJfZXZlbnQkY3VycmVudFRhcmdldDIiLCJ2YWxpZGF0ZVNoYXJlZFByb3BzJDEiLCJfdGhpcyRwcm9wczUkaXRlbUtleSIsIl90aGlzJF9nZXRSYW5nZVRvUmVuZCIsIl9nZXRSYW5nZVRvUmVuZGVyIiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kMiIsIl9vdmVyc2NhblN0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5TdG9wSW5kZXgiLCJfdmlzaWJsZVN0YXJ0SW5kZXgiLCJfdmlzaWJsZVN0b3BJbmRleCIsIl9zY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsT2Zmc2V0IiwiZ2V0SXRlbU1ldGFkYXRhJDEiLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSIsImVzdGltYXRlZEl0ZW1TaXplIiwidG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zIiwiVmFyaWFibGVTaXplTGlzdCIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEiLCJmaW5kTmVhcmVzdEl0ZW0kMSIsIkZpeGVkU2l6ZUdyaWQiLCJsYXN0Q29sdW1uT2Zmc2V0IiwibWlkZGxlT2Zmc2V0IiwiY2VpbCIsIl9yZWY4IiwibGFzdFJvd09mZnNldCIsIl9yZWY5IiwiX3JlZjEwIiwibnVtVmlzaWJsZUNvbHVtbnMiLCJfcmVmMTEiLCJfcmVmMTIiLCJudW1WaXNpYmxlUm93cyIsIl9yZWYxMyIsIkZpeGVkU2l6ZUxpc3QiLCJsYXN0SXRlbU9mZnNldCIsIm51bVZpc2libGVJdGVtcyIsInNoYWxsb3dEaWZmZXJzIiwiYXR0cmlidXRlIiwiX2F0dHJpYnV0ZSIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJhcmVFcXVhbCIsInByZXZTdHlsZSIsInByZXZSZXN0IiwibmV4dFN0eWxlIiwibmV4dFJlc3QiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJyZWdleCIsInBhcmVudHMiLCJwcyIsInBhcmVudE5vZGUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwic2Nyb2xsIiwiSFRNTEVsZW1lbnQiLCJTVkdFbGVtZW50Iiwic2Nyb2xsaW5nRWxlbWVudCIsImRvY3VtZW50RWxlbWVudCIsIm9uUG9pbnRlckRvd24iLCJjb250YWluZXJSZWYiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoSG9yaXpvbnRhbGx5Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsImNvbnRhaW5lciIsImxlZnRPZmZzZXQiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiYnV0dG9uQmFkZ2UiLCJwbGFjZWhvbGRlciIsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiaGFuZGxlQ2hhbmdlIiwiaW5wdXRFbGVtZW50IiwiaW5wdXRSZWYiLCJjaGVja2JveCIsIkxhYmVsIiwiY29sb3JzIiwib25TZWxlY3QiLCJzZWxlY3RlZENvbG9yIiwiY2FuVG9nZ2xlIiwiY29sb3JQaWNrZXIiLCJDb2xvclN3YXRjaCIsImlzU2VsZWN0ZWQiLCJjb2xvclN3YXRjaCIsInNlbGVjdGVkIiwiaGV4Q29kZSIsInNyT25seSIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiaGVhZGVyIiwiaXNPcGVuIiwiYnV0dG9uc0xlZnQiLCJidXR0b25zUmlnaHQiLCJvbkNsb3NlIiwibm9PdmVybGF5IiwiYmFzZVpJbmRleCIsIk1vZGFsIiwibW9kYWxIZWFkZXIiLCJtb2RhbENvbnRlbnQiLCJtb2RhbEJ1dHRvbnNDb250YWluZXIiLCJtb2RhbEJ1dHRvbnMiLCJkaXNwbGF5TmFtZSIsIkRyYXdlckNvbnRleHQiLCJUUkFOU0lUSU9OX0NMQVNTX05BTUVTIiwiZHJhd2VyUGFwZXJFbnRlciIsImVudGVyQWN0aXZlIiwiZHJhd2VyUGFwZXJFbnRlckFjdGl2ZSIsImVudGVyRG9uZSIsImRyYXdlclBhcGVyRW50ZXJEb25lIiwiZHJhd2VyUGFwZXJFeGl0IiwiZXhpdEFjdGl2ZSIsImRyYXdlclBhcGVyRXhpdEFjdGl2ZSIsImV4aXREb25lIiwiZHJhd2VyUGFwZXJFeGl0RG9uZSIsIkRyYXdlciIsIm9wZW4iLCJub0Nsb3NlSWNvbiIsInBvcnRhbENvbnRhaW5lciIsIm9uQ2xvc2VBbmltYXRpb25FbmQiLCJpc0RyYXdlclZpc2libGUiLCJzZXREcmF3ZXJWaXNpYmxlIiwiaXNPdmVybGF5VmlzaWJsZSIsInNldElzT3ZlcmxheVZpc2libGUiLCJjdXJyZW50VHJhbnNpdGlvbkNsYXNzTmFtZSIsImdldEN1cnJlbnRUcmFuc2l0aW9uQ2xhc3NOYW1lIiwiY3JlYXRlUG9ydGFsIiwiZHJhd2VyIiwidmlzaWJsZSIsImRyYXdlclBhcGVyIiwiZHJhd2VyUGFwZXJDb250ZW50IiwiZHJhd2VyT3ZlcmxheSIsIkhlYWRlciIsIkRyYXdlckhlYWRlciIsIkNvbnRlbnQiLCJEcmF3ZXJDb250ZW50IiwiRm9vdGVyIiwiRHJhd2VyRm9vdGVyIiwiZHJhd2VyQ29udGVudCIsImRyYXdlckZvb3RlciIsInVzZURyYXdlckNvbnRleHQiLCJkcmF3ZXJIZWFkZXIiLCJkcmF3ZXJIZWFkZXJDbG9zZSIsImRyYXdlckhlYWRlckNsb3NlSWNvbiIsIkljb24iLCJzcmMiLCJpc0Rpc2FibGVkIiwiQnV0dG9uIiwiaXRlbUJvZHlSZW5kZXJlciIsImhhbmRsZVNlbGVjdCIsInJlbmRlckNsaWNrYWJsZSIsInNlbGVjdGVkSXRlbSIsInBsYWNlbWVudCIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInNldElzT3BlbiIsInRvZ2dsZUlzT3BlbiIsIk1lbnVDb250YWluZXIiLCJidXR0b24iLCJDbGlja2FibGUiLCJNZW51IiwiTWVudUl0ZW0iLCJpc0FjdGl2ZSIsIkRyb3Bkb3duIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpbnB1dCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwiaWNvbiIsImNyb3NzT3JpZ2luIiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0Iiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsImhhc092ZXJsYXkiLCJvdmVybGF5IiwiaGVhZGVyQWN0aW9ucyIsImhlYWRlckxhYmVsIiwibGlzdCIsImxpc3RWaWV3SXRlbSIsIkJ1dHRvbkxpbmsiLCJhcyIsImZvb3RlciIsInNtYXJ0TGF5b3V0IiwibWVudVBsYWNlbWVudCIsIlBsYWNlbWVudENvbnRleHQiLCJFcnJvciIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImJvdHRvbSIsImRpc3RhbmNlVG9FZGdlIiwiaW5uZXJIZWlnaHQiLCJ1bEVsIiwicXVlcnlTZWxlY3RvciIsImNoaWxkRWxlbWVudHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibmV3SGVpZ2h0IiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibWVudSIsImZvcndhcmRSZWYiLCJtZW51Q29udGFpbmVyIiwibWVudUl0ZW0iLCJtZW51TGlua0l0ZW0iLCJoYW5kbGVPdmVybGF5Q2xpY2siLCJ6SW5kZXgiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiYXBwZW5kRGlnaXQiLCJudW1iZXIiLCJkaWdpdCIsInBvcERpZ2l0IiwiZXZlbnREaWdpdEtleXMiLCJOdW1wYWQiLCJjcmVhdGVFbWl0TnVtYmVySGFuZGxlciIsIm5ld051bWJlciIsIk51bXBhZEtleXMiLCJmaWxsIiwibnVtcGFkVmFsdWUiLCJudW1wYWQiLCJwYXJzZUludCIsIm51bWJlcnMiLCJpc0ZpeGVkIiwic2hvd0V4cGFuZGVkR3JvdXAiLCJTZWxlY3RDb250ZXh0IiwiZXhwYW5kZWQiLCJ0b2dnbGVFeHBhbmQiLCJoYW5kbGVHcm91cENsaWNrIiwiSWNvbkJ1dHRvbiIsIk9wdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInVwZGF0ZVNlbGVjdGVkT3B0aW9uIiwiaXNDaGVja2VkIiwiY2hlY2tib3hDb250YWluZXIiLCJDaGVja2JveCIsImlzT3B0aW9uIiwib25GaWx0ZXIiLCJzZWxlY3RBbGxDaGVja2VkIiwidG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCIsInNlYXJjaEtleXdvcmQiLCJzZWxlY3RBbGwiLCJzZXRTZWxlY3RlZE9wdGlvbnMiLCJoYXNHcm91cE9wdGlvbiIsImZpbHRlck9wdGlvbnMiLCJrZXl3b3JkIiwidHJpbSIsImZpbHRlcmVkT3B0aW9ucyIsInJlZHVjZSIsImZpbHRlcmVkIiwiZ3JvdXBPcHRpb24iLCJmaWx0ZXJlZEdyb3VwT3B0aW9ucyIsImZpbHRlcmVkT3B0aW9uc0NvdW50IiwibmV4dE9wdGlvbiIsInNlbGVjdGVkT3B0aW9uc0NvdW50Iiwic2VsZWN0ZWRPcHRpb24iLCJmaWx0ZXJlZE9wdGlvbiIsImhhbmRsZVNlbGVjdEFsbENsaWNrIiwib3B0aW9uc1RvU2VsZWN0IiwiZmxhdCIsInNlbGVjdEFsbENvbnRhaW5lciIsIkdyb3VwT3B0aW9uIiwibm9PcHRpb25zIiwic2V0U2VhcmNoS2V5d29yZCIsImhhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2UiLCJoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGljayIsImljb25TZWFyY2hDb250YWluZXIiLCJUZXh0SW5wdXQiLCJyZXNldEJ1dHRvbiIsInNjcm9sbE1lbnVJbnRvVmlldyIsInNob3dTZWxlY3RlZEFzVGFncyIsInNob3dTZWFyY2giLCJvcGVuZWQiLCJ0b2dnbGVPcGVuZWQiLCJjb250ZW50UmVmIiwib25SZXNpemUiLCJzY3JvbGxJbnRvVmlldyIsImJlaGF2aW9yIiwiYmxvY2siLCJSTyIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJoYW5kbGVPcGVuU2VsZWN0IiwiU2VsZWN0Q29udGV4dFByb3ZpZGVyIiwiU2VsZWN0b3IiLCJpc0Ryb3Bkb3duT3BlbmVkIiwiaWNvbkJ1dHRvbiIsInNlYXJjaENvbnRhaW5lciIsIlNlYXJjaCIsIk9wdGlvbkxpc3QiLCJpbml0aWFsU3RhdGUiLCJ1cGRhdGVkU2VsZWN0ZWRPcHRpb25zIiwiaGFuZGxlVGFnQ2xpY2siLCJoYW5kbGVUYWdDbG9zZSIsInBsYWNlaG9sZGVyVG9TaG93Iiwic2hvd0FzVGFncyIsInRhZ1dyYXBwZXIiLCJUYWciLCJjbG9zYWJsZSIsInNob3dBc1RleHQiLCJjb2x1bW5zIiwiZGF0YVNvdXJjZSIsIm9uUm93Q2xpY2siLCJoYXNBcnJvdyIsIm9uTG9hZE1vcmUiLCJwYWdlIiwic2V0UGFnZSIsInBhZ2VTaXplIiwiVGFibGVDb25maWciLCJQQUdFX1NJWkUiLCJ0YWJsZUhlaWdodCIsIlJPV19IRUlHSFQiLCJoZWFkZXJIZWlnaHQiLCJIRUFERVJfSEVJR0hUIiwiZGlzYWJsZUxhenlMb2FkZXIiLCJhY3RpdmVSb3dzIiwiaXRlbXNDb3VudCIsImlzSGVhZGVyU3RpY2t5IiwiaGFzVmlydHVhbFNjcm9sbCIsInNldFNjcm9sbFRvcCIsInJlbmRlclJvdyIsInJvdyIsImhhbmRsZUxpc3RTY3JvbGwiLCJsb2FkTW9yZSIsIklURU1TX0xPQURFRCIsInBsYWNlaG9sZGVyQ29udGFpbmVyIiwic2Nyb2xsYmFyQ29udGFpbmVyIiwiYm9yZGVyQm90dG9tIiwiY29sdW1uIiwib25Tb3J0Iiwic29ydGFibGUiLCJzb3J0ZWQiLCJkZWZhdWx0U29ydE9yZGVyIiwidGl0bGUiLCJTb3J0T3JkZXIiLCJERVNDIiwic29ydE9yZGVyIiwic2V0U29ydE9yZGVyIiwiaGFuZGxlU29ydENvbHVtbiIsIm5ld1NvcnRPcmRlciIsIkFTQyIsImNlbGxQcm9wcyIsInRhYmxlSGVhZGVyQ2VsbCIsInNvcnRJY29uVmlzaWJsZSIsImhhbmRsZVJvd0NsaWNrIiwiZGF0YUluZGV4Iiwib25EZWxldGUiLCJjbG9zZUJ1dHRvbiIsInBhdHRlcm4iLCJ3aXRoU2Nyb2xsIiwiaW5wdXRNb2RlIiwidGFnT3B0aW9ucyIsInRhZ3MiLCJzZXRUYWdzIiwidGFnc0FyciIsInRhZyIsImhhbmRsZVRleHRDaGFuZ2UiLCJoYW5kbGVUYWdEZWxldGUiLCJ1cGRhdGVkVGFncyIsImhhbmRsZVRhZ0FkZCIsInRyaW1tZWRUZXh0IiwiaGFuZGxlS2V5RG93biIsInRleHRJbnB1dCIsInNjcm9sbGFibGUiLCJ0YWdJbnB1dCIsInRvYXN0IiwidG9hc3RDb250YWluZXIiLCJzaG93VG9vbHRpcCIsInRvdWNoU2NyZWVuSGlkaW5nRGVsYXkiLCJwb3NpdGlvblN0eWxlcyIsInNldFBvc2l0aW9uU3R5bGVzIiwidG9vbHRpcElzVmlzaWJsZSIsInNldFRvb2x0aXBJc1Zpc2libGUiLCJ0aW1lclJlZiIsInVwZGF0ZVBvc2l0aW9uU3R5bGVzIiwicmVjdCIsIm5ld1Bvc2l0aW9uU3R5bGVzIiwic2Nyb2xsWSIsInNjcm9sbFgiLCJtYXBQbGFjZW1lbnRUb1Bvc2l0aW9uU3R5bGVzIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwib25Ub3VjaFN0YXJ0SGFuZGxlciIsImNsZWFyVGltZW91dCIsIm9uVG91Y2hFbmRIYW5kbGVyIiwic2Nyb2xsYWJsZVBhcmVudCIsImhpZGVUb29sdGlwIiwib25Ub3VjaFN0YXJ0Iiwib25Ub3VjaEVuZCIsInRvb2x0aXAiLCJwb3N0ZXIiLCJtdXRlZCIsImxvb3AiLCJhdXRvUGxheSIsInZpZGVvIiwicGxheXNJbmxpbmUiLCJpcyIsImwiLCJ1c2VEZWJ1Z1ZhbHVlIiwiZ2V0U25hcHNob3QiLCJkIiwidSIsInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwibW9kdWxlIiwiX25pbCIsIl9wYXJzZSIsIl9zdHJpbmdpZnkiLCJfdiIsIl92MiIsIl92MyIsIl92NCIsIl92YWxpZGF0ZSIsIl92ZXJzaW9uIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImdldE91dHB1dExlbmd0aCIsImlucHV0TGVuZ3RoOCIsInNhZmVBZGQiLCJsc3ciLCJtZDVjbW4iLCJxIiwibnVtIiwiY250IiwibWQ1ZmYiLCJtZDVnZyIsIm1kNWhoIiwibWQ1aWkiLCJieXRlcyIsIm1zZyIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiVWludDhBcnJheSIsIm91dHB1dCIsImxlbmd0aDMyIiwiaGV4VGFiIiwiaGV4IiwiY2hhckF0IiwibWQ1VG9IZXhFbmNvZGVkQXJyYXkiLCJvbGRhIiwib2xkYiIsIm9sZGMiLCJvbGRkIiwid29yZHNUb01kNSIsImxlbmd0aDgiLCJVaW50MzJBcnJheSIsImJ5dGVzVG9Xb3JkcyIsIl9kZWZhdWx0IiwicmFuZG9tVVVJRCIsImNyeXB0byIsInV1aWQiLCJhcnIiLCJnZXRSYW5kb21WYWx1ZXMiLCJybmRzOCIsInoiLCJST1RMIiwiSyIsIkgiLCJOIiwiTSIsImoiLCJwb3ciLCJXIiwiVCIsInVuc2FmZVN0cmluZ2lmeSIsImJ5dGVUb0hleCIsIl9ybmciLCJfbm9kZUlkIiwiX2Nsb2Nrc2VxIiwiX2xhc3RNU2VjcyIsIl9sYXN0TlNlY3MiLCJidWYiLCJjbG9ja3NlcSIsInNlZWRCeXRlcyIsInJuZyIsIm1zZWNzIiwibnNlY3MiLCJkdCIsInRsIiwidG1oIiwiX21kIiwiVVJMIiwiRE5TIiwidmVyc2lvbiIsImhhc2hmdW5jIiwiZ2VuZXJhdGVVVUlEIiwibmFtZXNwYWNlIiwiX25hbWVzcGFjZSIsInN0ciIsInN0cmluZ1RvQnl0ZXMiLCJfbmF0aXZlIiwicm5kcyIsIl9zaGEiLCJfcmVnZXgiLCJyZXF1aXJlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsImRlZmluaXRpb24iLCJ0b1N0cmluZ1RhZyIsIl9fd2VicGFja19leHBvcnRzX18iXSwic291cmNlUm9vdCI6IiJ9
|