@touchtech/baselayer-ui 8.2.9 → 8.2.10
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 -2
- 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
|
-
(()=>{"use strict";var e={5348:(e,t,n)=>{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 c=new WeakMap,d={},s={},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=c.get(e);return[()=>e.get(t)||d,r=>{if(!h(t)){const o=e.get(t);t in s||(s[t]=o),n[5](t,_(o,r),o||d)}},n[6],()=>!h(t)&&t in s?s[t]:e.get(t)||d]},w=new WeakMap;let M=0;const S=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=++M+"~",w.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=S(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+":"+S(e[a])+",");w.set(e,o)}}return o};let P=!0;const[C,x]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[f,f],j={isOnline:()=>P,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},E={initFocus:e=>(y&&document.addEventListener("visibilitychange",e),C("focus",e),()=>{y&&document.removeEventListener("visibilitychange",e),x("focus",e)}),initReconnect:e=>{const t=()=>{P=!0,e()},n=()=>{P=!1};return C("online",t),C("offline",n),()=>{x("online",t),x("offline",n)}}},I=!r.useId,k=!b||"Deno"in window,D=k?r.useEffect:r.useLayoutEffect,R="undefined"!=typeof navigator&&navigator.connection,L=!k&&R&&(["slow-2g","2g"].includes(R.effectiveType)||R.saveData),T=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)?S(e):"",t]};let z=0;const N=()=>++z,H=2;var A=H;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 d=!1!==a.revalidate,s=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;!o.startsWith("$inf$")&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(v))}return v(n);async function v(n){const[o]=T(n);if(!o)return;const[a,l]=O(t,o),[v,_,g]=c.get(t),b=v[o],y=()=>d&&(delete g[o],b&&b[0])?b[0](H).then((()=>a().data)):a().data;if(e.length<3)return y();let w,M=r;const S=N();_[o]=[S,0];const P=!h(u),C=a(),x=C.data,j=C._c,E=h(j)?x:j;if(P&&(u=m(u)?u(E):u,l({data:u,_c:E})),m(M))try{M=M(E)}catch(e){w=e}if(M&&m(M.then)){if(M=await M.catch((e=>{w=e})),S!==_[o][0]){if(w)throw w;return M}w&&P&&s(w)&&(i=!0,M=E,l({data:M,_c:p}))}i&&(w||(m(i)&&(M=i(M,E)),l({data:M,_c:p}))),_[o][1]=N();const I=await y();if(l({_c:p}),!w)return i?I:M;if(f)throw w}}const F=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},V=(e,t)=>{if(!c.has(e)){const n=_(E,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(let e=o.length;e--;)o[e](n,r)},d=()=>{if(!c.has(e)&&(c.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(),c.delete(e)}}};return d(),[e,o,d,a]}return[e,c.get(e)[4]]},[W,G]=V(new Map),K=_({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:L?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:L?5e3:3e3,compare:(e,t)=>S(e)==S(t),isPaused:()=>!1,cache:W,mutate:G,fallback:{}},j),U=(0,r.createContext)({}),Z=b&&window.__SWR_DEVTOOLS_USE__,q=Z?window.__SWR_DEVTOOLS_USE__:[],Q=()=>_(K,(0,r.useContext)(U));q.concat((e=>(t,n,r)=>e(t,n&&((...e)=>{const r=T(t)[0],[,,,o]=c.get(W),a=o[r];return a?(delete o[r],a):n(...e)}),r)));Z&&(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)(U),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.useState)((()=>l?V(l(i.cache||W),a):p));return u&&(i.cache=u[0],i.mutate=u[1]),D((()=>{if(u)return u[2]&&u[2](),u[3]}),[]),(0,r.createElement)(U.Provider,_(e,{value:i}))}),"defaultValue",{value:K})},7659:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ZZVHcX45XCblmDab9ewZ",modalHeader:"xTX1XJfCSUsrh_yLlZoi",modalContent:"Te6jHdlyjsQXmnTs9ban",noPadding:"Lz_gwSwP3QCN5zYzFsEi",modalButtonsContainer:"Gh1uvxMfEgPTdt66Qis2",modalButtons:"Iaw34FkMJqjrGQ58BGfx"}},6114:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{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)=>{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)=>{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)=>{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)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4"}},186:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={header:"WSYYBAz53dhquIOZPWBP",label:"b55hyZ0oHl0s4Ot9OhwM",expanded:"N3AzO5kZlh4HAPknnYzq"}},8054:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ",iconSearchContainer:"Z5LPx47ybEKeX29XBYBC",resetButton:"hjT9ZXvmvc5QUruwz8El"}},7917:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={placeholder:"ddlRidnIzYhQC9DGpgIt",active:"shHsEJGtbz4cmA6x1G1l",tagWrapper:"BGEShc7qu2fk9DZE2RUs",selectedOption:"ma9BIjuGCQeKF44sgucT",selectedOptions:"nRpAwv97CesqQbDLcet9"}},6684:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",content:"o_21r_EjLKB3xhgGy74s",closeButton:"ZZPRZLUq9MQyifD8x2jH",disabled:"uCLz0vbNnQZFX8kVuUiG"}},9067:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"gwYKRPpGdIMVXkiN0H9B",tagInput:"avImGs3XcLeDLGhxD8bw",disabled:"yT8Pp8TUvP7sQSGeGLNJ",textInput:"ZiNNf2oLVjExxp9RT2s_",small:"LemMUTseigxHbmIYVVTc",medium:"PUHJdM7ZEb3LFReM1_Ug",large:"j9mk52hGhoFwjw4FWHQ9",xlarge:"EiWqeFqQXE9LHUh1vxpX",noBorder:"O6WsOpUZoZeThUb_ViXn"}},7792:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},8907:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={tooltip:"Km6UUy0jpqM0LA2eXccc",visible:"uToJfcRCR6eVHIm80wGb",notVisible:"hGxgyhPmQmM97ViOpcv8",left:"yBv1lwDHpexxO3DPpd1v",right:"v852ExxmQ6AtSQF2sX8A",top:"iV2yzPizoou9omW811hg",bottom:"VmmE8ENsCkzbwLpL3XJg"}},6504:(e,t,n)=>{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){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,c=e.allowTabFill,d=e.allowEnterFill,s=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],M=O[1],S=l.useState(""),P=S[0],C=S[1],x=l.useState(),j=x[0],E=x[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&&T(m,_,e)}}));var R=function(e){M(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):"",C(t),E(n),f&&f(n)},L=function(){if(""!==P&&k){var e=b+P;k.target.value=e,v.onChange&&v.onChange(k),R(""),s&&s(j),y(e)}},T=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)},z=l.cloneElement(o).ref,N=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?L():(t&&c&&"Tab"===e.key&&""!==P||t&&d&&"Enter"===e.key&&""!==P)&&(e.preventDefault(),L()),v.onKeyDown&&v.onKeyDown(e)},ref:z&&"string"!=typeof z?u.mergeRefs(z,h):h}));return l.default.createElement("div",{className:"rah-input-wrapper",style:{position:"relative"}},i?o:l.default.createElement(l.default.Fragment,null,N,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?P&&""!==P&&(L(),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:P&&""!==P?"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:P,tabIndex:-1}))))}},2394:(e,t)=>{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)=>{n.r(t),n.d(t,{isHotkeyPressed:()=>D,useHotkeys:()=>k,useIsHotkeyPressed:()=>j});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},c={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},d={16:!1,18:!1,17:!1,91:!1},s={},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],c="*"===i?"*":_(i);if(s[c]){n||(n=b());var d=o>1?a(u,t):[];s[c]=s[c].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,d))}))}}))};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,d)Object.prototype.hasOwnProperty.call(d,a)&&(!d[a]&&t.mods.indexOf(+a)>-1||d[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||d[16]||d[18]||d[17]||d[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=s["*"],r=e.keyCode||e.which||e.charCode;if(M.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=c[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 d){for(var o in d[r]=!0,u)u[o]===r&&(M[o]=!0);if(!n)return}for(var a in d)Object.prototype.hasOwnProperty.call(d,a)&&(d[a]=e[c[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===p.indexOf(17)&&p.push(17),-1===p.indexOf(18)&&p.push(18),d[17]=!0,d[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 s)for(var f=0;f<s[r].length;f++)if(("keydown"===e.type&&s[r][f].keydown||"keyup"===e.type&&s[r][f].keyup)&&s[r][f].key){for(var v=s[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 M(e,t,n){p=[];var r=i(e),l=[],c="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&&(c=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&&(c=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 s||(s[e]=[]),s[e].push({keyup:g,keydown:b,scope:c,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 d)for(var r in d[t]=!1,u)u[r]===t&&(M[r]=!1)}(e)}),O))}var S={setScope:g,getScope:b,deleteScope:function(e,t){var n,r;for(var o in e||(e=b()),s)if(Object.prototype.hasOwnProperty.call(s,o))for(n=s[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(s).forEach((function(n){var r=s[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(s).forEach((function(e){return delete s[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:c};for(var P in S)Object.prototype.hasOwnProperty.call(S,P)&&(M[P]=S[P]);if("undefined"!=typeof window){var C=window.hotkeys;M.noConflict=function(e){return e&&window.hotkeys===M&&(window.hotkeys=C),M},window.hotkeys=M}var x=n(6689);function j(){return M.isPressed}M.filter=function(){return!0};var E=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},I=function(e){return E(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,c=o.filterPreventDefault,d=void 0===c||c,s=o.enabled,f=void 0===s||s,p=o.enableOnContentEditable,v=void 0!==p&&p,h=(0,x.useRef)(null),m=(0,x.useCallback)((function(e,n){var r,o;return i&&!i(e)?!d:!!(I(e)&&!E(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,x.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),M(e,n||{},m),function(){return M.unbind(e,m)};M.unbind(e,m)}),[m,e,f]),h}var D=M.isPressed},5691:(e,t,n)=>{n.r(t),n.d(t,{default:()=>u});var r=n(6689),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},a=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}}(),i=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},l=function(e){function t(){var e,n,r;o(this,t);for(var a=arguments.length,l=Array(a),u=0;u<a;u++)l[u]=arguments[u];return n=r=i(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),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},i(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),a(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,c=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 c=Math.min(Math.max(l,i+r-1),n-1),d=l+1;d<=c&&!t(d);d++)l=d;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var s=a[0]-1;if(t(s))break;a[0]=s}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==c.length||this._memoizedUnloadedRanges.some((function(e,t){return c[t]!==e})))&&(this._memoizedUnloadedRanges=c,this._loadUnloadedRanges(c))}},{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 u=l},5022:(e,t,n)=>{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)}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.r(t),n.d(t,{FixedSizeGrid:()=>H,FixedSizeList:()=>A,VariableSizeGrid:()=>E,VariableSizeList:()=>N,areEqual:()=>W,shouldComponentUpdate:()=>G});var 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 c=n(6689);function d(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}var s="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=s(),r={id:requestAnimationFrame((function o(){s()-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,d=e.getColumnWidth,s=e.getEstimatedTotalHeight,v=e.getEstimatedTotalWidth,m=e.getOffsetForColumnAndAlignment,y=e.getOffsetForRowAndAlignment,w=e.getRowHeight,M=e.getRowOffset,S=e.getRowStartIndexForOffset,P=e.getRowStopIndexForStartIndex,C=e.initInstanceProps,x=e.shouldResetStyleCacheOnItemSizeChange,j=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=C(r.props,o(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:o(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,c=r._getItemStyleCache(x&&i,x&&l,x&&u),s=e+":"+t;if(c.hasOwnProperty(s))o=c[s];else{var f=n(r.props,t,r._instanceProps),p="rtl"===l;c[s]=o={position:"absolute",left:p?void 0:f,right:p?f:void 0,top:M(r.props,e,r._instanceProps),height:w(r.props,e,r._instanceProps),width:d(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,c=a;if("rtl"===t)switch(_()){case"negative":c=-a;break;case"positive-descending":c=u-o-a}c=Math.max(0,Math.min(c,u-o));var d=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:c,scrollTop:d,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}a(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),j(e),null};var E=t.prototype;return E.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)},E.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,c=a.width,d=this.state,f=d.scrollLeft,p=d.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=s(this.props,this._instanceProps),b=v(this.props,this._instanceProps)>c?_: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})},E.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()},E.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()},E.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},E.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,d=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,M=this.state.isScrolling,S=this._getHorizontalRangeToRender(),P=S[0],C=S[1],x=this._getVerticalRangeToRender(),j=x[0],E=x[1],I=[];if(o>0&&g)for(var k=j;k<=E;k++)for(var D=P;D<=C;D++)I.push((0,c.createElement)(t,{columnIndex:D,data:f,isScrolling:O?M:void 0,key:h({columnIndex:D,data:f,rowIndex:k}),rowIndex:k,style:this._getItemStyle(k,D)}));var R=s(this.props,this._instanceProps),L=v(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:r({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},y)},(0,c.createElement)(u||d||"div",{children:I,ref:l,style:{height:R,pointerEvents:M?"none":void 0,width:L}}))},E._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],c=a[3],d=this._getVerticalRangeToRender(),s=d[0],f=d[1],p=d[2],v=d[3];this._callOnItemsRendered(i,l,s,f,u,c,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)}},E._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,c=u.horizontalScrollDirection,d=u.isScrolling,s=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var p=i(this.props,s,this._instanceProps),v=l(this.props,p,s,this._instanceProps),h=d&&"backward"!==c?1:Math.max(1,f),m=d&&"forward"!==c?1:Math.max(1,f);return[Math.max(0,p-h),Math.max(0,Math.min(t-1,v+m)),p,v]},E._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,c=i.scrollTop,d=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var s=S(this.props,c,this._instanceProps),f=P(this.props,s,c,this._instanceProps),p=l&&"backward"!==u?1:Math.max(1,d),v=l&&"forward"!==u?1:Math.max(1,d);return[Math.max(0,s-p),Math.max(0,Math.min(a-1,f+v)),s,f]},t}(c.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},M=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},S=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 c=i+1;c<=n;c++){var d=a(c);o[c]={offset:l,size:d},l+=d}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},P=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?C(e,t,n,a,0,r):x(e,t,n,Math.max(0,a),r)},C=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=S(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},x=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&S(e,t,r,n).offset<o;)r+=i,i*=2;return C(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},j=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=S(e,t,n,a),c="column"===e?M(t,a):w(t,a),d=Math.max(0,Math.min(c-l,u.offset)),s=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=s-l&&o<=d+l?"auto":"center"),r){case"start":return d;case"end":return s;case"center":return Math.round(s+(d-s)/2);default:return o>=s&&o<=d?o:s>d||o<s?s:d}},E=y({getColumnOffset:function(e,t,n){return S("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return P("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=S("column",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("column",e,c,r).size;return c},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:M,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return j("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return j("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return S("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return P("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=S("row",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("row",e,c,r).size;return c},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,d=e.getOffsetForIndexAndAlignment,s=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,o(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:o(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,c=r._getItemStyleCache(g&&i,g&&u,g&&a);if(c.hasOwnProperty(e))t=c[e];else{var d=n(r.props,e,r._instanceProps),s=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,p="rtl"===a,v=f?d:0;c[e]=t={position:"absolute",left:p?void 0:v,right:p?v:void 0,top:f?0:d,height:f?"100%":s,width:f?s:"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}a(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(d(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,d=e.innerTagName,s=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,M=w?this._onScrollHorizontal:this._onScrollVertical,S=this._getRangeToRender(),P=S[0],C=S[1],x=[];if(s>0)for(var j=P;j<=C;j++)x.push((0,c.createElement)(t,{data:f,key:v(j,f),index:j,isScrolling:b?O:void 0,style:this._getItemStyle(j)}));var E=i(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:M,ref:this._outerRefSetter,style:r({position:"relative",height:a,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},g)},(0,c.createElement)(u||d||"div",{children:x,ref:l,style:{height:w?"100%":E,pointerEvents:O?"none":void 0,width:w?E:"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=s(this.props,i,this._instanceProps),u=v(this.props,l,i,this._instanceProps),c=o&&"backward"!==a?1:Math.max(1,n),d=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-c),Math.max(0,Math.min(t-1,u+d)),l,u]},t}(c.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},L=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 c=r(u);o[u]={offset:i,size:c},i+=c}n.lastMeasuredIndex=t}return o[t]},T=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=L(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},z=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},N=D({getItemOffset:function(e,t,n){return L(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:z,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,c=e.width,d="horizontal"===i||"horizontal"===u?c:l,s=L(e,t,o),f=z(e,o),p=Math.max(0,Math.min(f-d,s.offset)),v=Math.max(0,s.offset-d+s.size+a);switch("smart"===n&&(n=r>=v-d&&r<=p+d?"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?T(e,t,o,0,n):function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&L(e,n,t).offset<r;)n+=a,a*=2;return T(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,c="horizontal"===o||"horizontal"===l?u:a,d=L(e,t,r),s=n+c,f=d.offset+d.size,p=t;p<i-1&&f<s;)p++,f+=L(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}}),H=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,c=Math.max(0,i*l-u),d=Math.min(c,t*l),s=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=s-u&&r<=d+u?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(u/2)?0:f>c+Math.floor(u/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,c=Math.max(0,u*i-l),d=Math.min(c,t*i),s=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=s-l&&r<=d+l?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(l/2)?0:f>c+Math.floor(l/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},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}}),A=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,c=e.itemSize,d=e.layout,s=e.width,f="horizontal"===i||"horizontal"===d?s:l,p=Math.max(0,u*c-f),v=Math.min(p,t*c),h=Math.max(0,t*c-f+c+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,c=t*i,d="horizontal"===r||"horizontal"===l?u:o,s=Math.ceil((d+n-c)/i);return Math.max(0,Math.min(a-1,t+s-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=d(e,F),o=t.style,a=d(t,V);return!B(n,o)&&!B(r,a)}function G(e,t){return!W(this.props,e)||B(this.state,t)}},7237:function(e,t,n){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,c=e.containerRef,d=e.disabled,s=void 0!==d&&d,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,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,x=void 0!==C&&C,j=e.autoFocus,E=void 0!==j&&j,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,L=e.size,T=void 0===L?"medium":L,z=e.type;return o.default.createElement("button",{ref:c,className:(0,a.default)([i.default.container,i.default[T],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]=M,t[i.default.stretchHorizontally]=P,t[i.default.stretchVertically]=x,t[i.default.leftOffset]=h&&k.includes("left"),t[i.default.rightOffset]=h&&k.includes("right"),t),r]),disabled:s,autoFocus:E,type:z,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){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){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){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){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,c=e.className,d=e.size,s=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,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,x=void 0!==C&&C,j=e.disabled,E=void 0!==j&&j,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,L=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:s,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[d],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]=M,t[u.default.disabled]=E,t[u.default.transparent]=_,t[u.default.stretchHorizontally]=P,t[u.default.stretchVertically]=x,t[u.default.leftOffset]=h&&k.includes("left"),t[u.default.rightOffset]=h&&k.includes("right"),t),c])},L),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){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){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)),c=n(4115),d=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,s=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]);return l.default.createElement(c.Label,{value:t},l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([d.default.checkbox,s,d.default[v]]),onChange:_,placeholder:r,name:i,type:"checkbox",autoFocus:m}))}},4616:function(e,t,n){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){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,c=e.direction,d=void 0===c?"vertical":c,s=e.canToggle,f=void 0!==s&&s;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[d]])},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){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){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,c=e.size,d=void 0===c?"medium":c,s=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[d],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:s,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){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){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,c=e.header,d=e.isOpen,s=e.buttonsLeft,f=void 0===s?[]:s,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,M=e.baseZIndex,S=void 0===M?1019:M;return o.default.createElement(i.Modal,{containerRef:u,isOpen:d,onClose:m,noOverlay:y,noShadow:w,baseZIndex:S},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!c&&o.default.createElement("h1",{className:l.default.modalHeader},c),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){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}})},943:function(e,t,n){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){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),c=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,d=e.selectedItem,s=e.placement,f=void 0===s?{vertical:"bottom",horizontal:"left"}:s,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(c.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:_,selectedItem:d,toggleIsOpen:g}):i.default.createElement(u.Clickable,{display:o,isDisabled:_,onClick:g}),placement:f,ref:m},i.default.createElement(c.Menu,{isOpen:v},n&&n.map((function(e){return i.default.createElement(c.MenuItem,{isActive:e.id===(null==d?void 0:d.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==d?void 0:d.id)}):e.name)}))))}},1889:(e,t,n)=>{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){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,c=e.multiple,d=void 0!==c&&c,s=e.disabled,f=void 0!==s&&s,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,M=e.stretchHorizontally,S=void 0!==M&&M,P=e.stretchVertically,C=void 0!==P&&P,x=e.rounded,j=void 0!==x&&x,E=e.size,I=void 0===E?"medium":E;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]=j,t[i.default.noShadow]=m,t[i.default.noBorder]=g,t[i.default.noPadding]=y,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=C,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:d,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){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){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,c=void 0===u?"column":u,d=e.placement,s=void 0===d?{horizontal:"center",vertical:"bottom",parent:"viewport"}:d,f="center"===s.horizontal?"horizontalCenter":s.horizontal,p="center"===s.vertical?"verticalCenter":s.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[c],(t={},t[i.default.fixed]="container"!==s.parent,t),n])},r)}},6384:function(e,t,n){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){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,c=void 0===u?"medium":u,d=e.inverted,s=void 0!==d&&d;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[c],(t={},t[i.default.inverted]=s,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){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){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,c=e.src,d=e.alt,s=e.offsetSides,f=void 0===s?[]:s,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,M=e.transparent,S=void 0!==M&&M,P=e.rounded,C=void 0!==P&&P,x=e.size,j=void 0===x?"medium":x,E=e.type,I=void 0===E?"button":E;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[j],(t={},t[l.default.inverted]=g,t[l.default.rounded]=C,t[l.default.noShadow]=y,t[l.default.noBorder]=w,t[l.default.transparent]=S,t[l.default.topOffset]=C&&f.includes("top"),t[l.default.rightOffset]=C&&f.includes("right"),t[l.default.bottomOffset]=C&&f.includes("bottom"),t[l.default.leftOffset]=C&&f.includes("left"),t),n]),disabled:m,onClick:v,type:I,role:"button"},o.default.createElement(i.Icon,{src:c,alt:d,size:j,inverted:g}),u)}},2847:function(e,t,n){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){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),c=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,d=e.children,s=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,M=void 0!==w&&w,S=e.offsetSides,P=void 0===S?[]:S,C=e.disabled,x=void 0!==C&&C,j=e.size,E=void 0===j?"medium":j,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)([c.default.container,c.default[E],(t={},t[c.default.inverted]=h,t[c.default.rounded]=M,t[c.default.noShadow]=_,t[c.default.noBorder]=b,t[c.default.disabled]=x,t[c.default.transparent]=O,t[c.default.topOffset]=M&&P.includes("top"),t[c.default.rightOffset]=M&&P.includes("right"),t[c.default.bottomOffset]=M&&P.includes("bottom"),t[c.default.leftOffset]=M&&P.includes("left"),t),s])},I),i.default.createElement(u.Icon,{src:f,alt:p,size:E,inverted:h}),d)}},5860:function(e,t,n){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){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,c=e.containerRef,d=e.layout,s=void 0===d?"contain":d,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[s]]),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:c,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){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){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){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){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){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,c=void 0!==u&&u,d=e.transparent,s=void 0!==d&&d,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:c,inverted:r,transparent:s,noPadding:p,align:_,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){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),c=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,d=void 0!==a&&a,s=e.transparent,f=void 0!==s&&s,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)([c.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:d,transparent:f,noPadding:v,align:m,size:g,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){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){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)),c=n(9633),d=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,s=void 0===i||i,f=e.header,p=e.footer,v=e.smartLayout,h=void 0===v||v,m=(0,l.useContext)(c.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,")")}}}),[s,m,h]),s?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:g,className:(0,u.default)([d.default.menu,(t={},t[d.default.open]=s,t),a])},l.default.createElement("div",null,f&&s&&l.default.createElement("h3",{className:d.default.header},f),l.default.createElement("ul",null,r)),p&&s&&l.default.createElement("div",{className:(0,u.default)([d.default.footer,(n={},n[d.default.noBorder]=!r,n)])},p))):null}},9633:function(e,t,n){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)),c=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,d=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([c.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return d}),[d])},l.default.createElement("div",{className:(0,u.default)([c.default.menuContainer,c.default[d.horizontal],c.default[d.vertical]])},r)))}))},9385:function(e,t,n){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,c=e.noPadding,d=void 0!==c&&c,s=e.isActive,f=void 0!==s&&s;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=d,n),l]),onClick:u},r)}},9762:function(e,t,n){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,c=e.className,d=e.noPadding,s=void 0!==d&&d,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,c,(t={},t[u.default.noPadding]=s,t)])},f),a)}},3814:function(e,t,n){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){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),c=i(n(7659)),d=i(n(9118));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,s=e.transparent,f=void 0!==s&&s,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,c.default)([d.default.overlay,(t={},t[d.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:y+1},className:(0,c.default)([d.default.modal,(n={},n[d.default.transparent]=f,n[d.default.noShadow]=v,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:y+2},className:d.default.modalButton},i))}},1391:function(e,t,n){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){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)),c=function(e,t){return 10*e+t},d=function(e){return Math.floor(e/10)},s=["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(c(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(d(n));else if(s.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(c(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(d(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{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){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,c=e.isFixed,d=void 0!==c&&c,s=e.onClick,f=void 0===s?function(){}:s;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]=d,t)]),onClick:f},n)}},6650:function(e,t,n){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){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)),c=i(n(4685)),d=n(5348),s=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,d.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:c.default.header,onClick:_},l.default.createElement("div",{className:c.default.label},r),l.default.createElement(f.IconButton,{className:(0,u.default)([(t={},t[c.default.expanded]=h,t)]),src:p.default,alt:h?"Collapse":"Expand",noBorder:!0,transparent:!0})),h&&o.map((function(e){return l.default.createElement(s.Option,{key:e.value,data:e},e.label)})))}},9087:function(e,t,n){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){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)),c=i(n(8054)),d=n(4616),s=n(2568);t.default=function(e){var t,n=e.children,r=e.className,o=e.data,a=(0,l.useContext)(s.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)([c.default.container,(t={},t[c.default.selected]=v&&!i,t),r]),onClick:h},i&&l.default.createElement("span",{className:c.default.checkboxContainer},l.default.createElement(d.Checkbox,{className:c.default.checkbox,checked:v,size:"small"})),l.default.createElement("span",{className:c.default.label},n))}},3781:function(e,t,n){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){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 c=n(5348),d=i(n(6689)),s=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,c.useToggle)(!1),u=i[0],m=i[1],_=(0,d.useContext)(v.SelectContext),g=_.multiple,b=_.searchKeyword,y=_.selectAll,O=_.selectedOptions,w=_.setSelectedOptions,M=n.some((function(e){return!(0,t.isOption)(e)})),S=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},P=(0,d.useMemo)((function(){return M?n.reduce((function(e,t){var n=S(t.options);return n.length?l(l([],e,!0),[r(r({},t),{options:n})],!1):e}),[]):S(n)}),[M,n,b]),C=(0,d.useMemo)((function(){return P.reduce((function(e,n){return(0,t.isOption)(n)?e+1:e+n.options.length}),0)}),[M,P,t.isOption]),x=(0,d.useMemo)((function(){return O.filter((function(e){return P.find((function(n){return(0,t.isOption)(n)?n.value===e.value:n.options.find((function(t){return t.value===e.value}))}))})).length}),[O,P]),j=(0,d.useCallback)((function(){if(u)w([]),a&&a([]);else{var e=P.map((function(e){return(0,t.isOption)(e)?e:e.options})).flat();w(e),a&&a(e.map((function(e){return e.value})))}m()}),[P,t.isOption,u,w,m]);return(0,d.useEffect)((function(){x===C?m(!0):u&&m(!1)}),[x,C,u,m]),d.default.createElement("div",{className:h.default.container},y&&g&&!!P.length&&d.default.createElement("div",{className:h.default.selectAllContainer,onClick:j},d.default.createElement("span",{className:h.default.checkboxContainer},d.default.createElement(s.Checkbox,{className:h.default.checkbox,checked:u,indeterminate:!!x&&x!==C,size:"small"})),d.default.createElement("span",{className:h.default.label},"Select All")),P.length?P.map((function(e){return(0,t.isOption)(e)?d.default.createElement(p.Option,{key:e.value,data:e},e.label):d.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})):d.default.createElement("div",{className:h.default.noOptions},"No matches for",d.default.createElement("span",{className:h.default.searchKeyword}," ".concat(b))))}},4292:function(e,t,n){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){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)),c=i(n(2396)),d=n(2568),s=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)(d.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)([c.default.container,t])},l.default.createElement("div",{className:c.default.iconSearchContainer},l.default.createElement(f.Icon,{src:p.default})),l.default.createElement(s.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(h.IconButton,{className:c.default.resetButton,src:v.default,alt:"Clear",onClick:i,disabled:!r,noBorder:!0,noShadow:!0,transparent:!0}))}},8947:function(e,t,n){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){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)),c=i(n(3790)),d=i(n(7917)),s=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,M=e.selectAll,S=e.showExpandedGroup,P=e.size,C=void 0===P?"medium":P,x=e.showSelectedAsTags,j=void 0!==x&&x,E=e.showSearch,I=void 0!==E&&E,k=e.width,D=e.onChange,R=e.onFilter,L=(0,s.useToggle)(!1),T=L[0],z=L[1],N=(0,s.useOutsideClick)((function(){return z(!1)})),H=(0,l.useCallback)((function(){z()}),[]),A=(0,l.useCallback)((function(e){b||z(!1),D&&D(e)}),[]);return l.default.createElement(f.SelectContextProvider,{defaultValue:a,multiple:b,options:y,onChange:A,selectAll:M,showExpandedGroup:S},l.default.createElement("div",{ref:N},w?l.default.createElement(_.Label,{value:w}):null,l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.disabled]=i,t),d.default[C],o]),style:{width:k}},l.default.createElement("div",{className:(0,u.default)([d.default.header,(n={},n[d.default.active]=T,n)]),onClick:H},l.default.createElement(p.Selector,{placeholder:O,showSelectedAsTags:j,isDropdownOpened:T}),l.default.createElement(h.IconButton,{className:(0,u.default)([d.default.iconButton,(r={},r[d.default.expanded]=T,r)]),src:c.default,alt:T?"Collapse":"Expand",noBorder:!0,transparent:!0})),T&&l.default.createElement("div",{className:d.default.content},0===y.length?l.default.createElement("div",{className:d.default.noOptions},"No options available"):l.default.createElement(l.default.Fragment,null,I&&l.default.createElement("div",{className:d.default.searchContainer},l.default.createElement(v.Search,null)),l.default.createElement(m.OptionList,{options:y,onFilter:R,onChange:A}))))))}},2568:function(e,t,n){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),c={multiple:!1,selectAll:!1,showExpandedGroup:!0,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){}},d=(0,l.createContext)(c);t.SelectContext=d,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,s=void 0!==a&&a,f=e.showExpandedGroup,p=void 0===f||f,v=e.options,h=e.onChange,m=(0,l.useState)(c.selectedOptions),_=m[0],g=m[1],b=(0,l.useState)(c.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]);(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 M=(0,l.useMemo)((function(){return{multiple:o,selectAll:s,showExpandedGroup:p,selectedOptions:_,updateSelectedOption:w,searchKeyword:y,setSearchKeyword:O,setSelectedOptions:g}}),[s,_,g,w,y,O]);return l.default.createElement(d.Provider,{value:M},t)}},237:function(e,t,n){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)),c=n(2568),d=n(2149),s=i(n(7659));t.default=function(e){var t=e.placeholder,n=e.showSelectedAsTags,r=e.isDropdownOpened,o=(0,l.useContext)(c.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,s.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(d.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){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){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){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)),c=l(n(7659)),d=n(5022),s=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,M=e.headerHeight,S=void 0===M?v.TableConfig.HEADER_HEIGHT:M,P=e.disableLazyLoader,C=e.activeRows,x=e.itemsCount,j=e.isHeaderSticky,E=void 0!==j&&j,I=e.hasVirtualScroll,k=void 0===I||I,D=e.className,R=(0,u.useState)(0),L=R[0],T=R[1],z=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,c=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(p.default,{data:c,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==C?void 0:C[c.id])}))}),[t,C,a,w,o]),N=(0,u.useCallback)((function(e){var t=e.scrollOffset;T(t)}),[]),H=(0,u.useCallback)((function(){P||n.length!==x&&(n.length<g*l||m&&i&&(m(l+1),i(l+1)))}),[P,n.length,x,g,l,m,i]),A=(0,u.useCallback)((function(e){return!P&&e<n.length-v.TableConfig.ITEMS_LOADED}),[n.length,P]);return u.default.createElement(u.default.Fragment,null,k?u.default.createElement("div",{className:(0,c.default)([h.default.container,D])},u.default.createElement("div",{className:h.default.table},u.default.createElement(f.default,{columns:t,scrollTop:L,headerHeight:S}),y&&!n.length?u.default.createElement("div",{className:h.default.placeholderContainer,style:{height:b}},y):u.default.createElement(s.default,{isItemLoaded:A,itemCount:n.length,loadMoreItems:H},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(d.FixedSizeList,{ref:r,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:N,onItemsRendered:t,className:h.default.scrollbarContainer},z)})))):u.default.createElement("div",{className:(0,c.default)([h.default.container,h.default.scrollbarContainer,D]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:L,isHeaderSticky:E,headerHeight:S}),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==C?void 0:C[null==e?void 0:e.id])})}))))}},5038:function(e,t,n){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,c=e.isHeaderSticky,d=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]=c,n)]),style:{height:d}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){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)),c=i(n(6689)),d=n(4958),s=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,c.useState)((function(){return l||p.SortOrder.DESC})),b=g[0],y=g[1],O=(0,c.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 c.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?c.default.createElement(d.Icon,{alt:"Sort button",size:"small",src:b===p.SortOrder.DESC?s.default:f.default}):null)}},8784:function(e,t,n){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)),c=i(n(8605)),d=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,s=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.hasArrow]=a,t[d.default.active]=s,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(c.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){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){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){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)),c=i(n(7451)),d=n(4958),s=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=(0,l.useCallback)((function(e){"function"==typeof f&&f(o),"function"==typeof a&&a(e,o)}),[a]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,(t={},t[s.default.disabled]=i,t)])},l.default.createElement("span",{className:s.default.content},n),r&&l.default.createElement("span",{className:s.default.closeButton,onClick:p},l.default.createElement(d.Icon,{src:c.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){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){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)),c=l(n(7659)),d=n(1914),s=l(n(9067)),f=n(2149);t.default=function(e){var t,n,r=e.className,o=e.onChange,a=e.placeholder,l=e.value,p=e.name,v=e.pattern,h=e.inputRef,m=e.size,_=void 0===m?"small":m,g=e.type,b=void 0===g?"text":g,y=e.autoFocus,O=void 0!==y&&y,w=e.noBorder,M=void 0!==w&&w,S=e.inputMode,P=e.disabled,C=e.tagOptions,x=void 0===C?[]:C,j=(0,u.useState)(""),E=j[0],I=j[1],k=(0,u.useState)(l),D=k[0],R=k[1];(0,u.useEffect)((function(){l&&R(l)}),[l,R]);var L=(0,u.useCallback)((function(e){var t=e.target.value;I(t)}),[I]),T=(0,u.useCallback)((function(e){var t=D.filter((function(t){return t!==e}));R(t),o&&o(t)}),[D,R]),z=(0,u.useCallback)((function(e){if("Enter"===e.code){e.preventDefault();var t=i(i([],D,!0),[E],!1);R(t),I(""),e.target,o&&o(t)}}),[D,E,R,I]),N=u.default.createElement(d.Hint,{options:x,allowEnterFill:!1,allowTabFill:!0},u.default.createElement("input",{"data-testid":"input",ref:h,className:(0,c.default)([s.default.textInput,s.default[_],(t={},t[s.default.noBorder]=M,t)]),onChange:L,onKeyDown:z,pattern:v,placeholder:a,name:p,type:b,value:E,autoFocus:O,inputMode:S,disabled:P}));return u.default.createElement("div",{className:(0,c.default)([s.default.container,(n={},n[s.default.disabled]=P,n),r])},D.map((function(e){return u.default.createElement(f.Tag,{key:e,value:e,onDelete:T,closable:!0},e)})),u.default.createElement("div",{className:s.default.tagInput},N))}},2819:function(e,t,n){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){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)),c=n(4115),d=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,s=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,M=e.inputMode,S=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),P=l.default.createElement("input",{"data-testid":"input",ref:v,className:(0,u.default)([d.default.textInput,d.default[m],(t={},t[d.default.noBorder]=w,t)]),onChange:S,onBlur:o,onKeyDown:a,pattern:p,placeholder:i,name:f,type:g,value:s,autoFocus:y,inputMode:M});return n?l.default.createElement(c.Label,{value:n},P):l.default.createElement(l.default.Fragment,null,P)}},1143:function(e,t,n){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){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){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){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){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)),c=i(n(8907));t.default=function(e){var t=e.children,n=e.text,r=e.placement,o=e.showTooltip,a=(0,l.useState)(),i=a[0],d=a[1],s=(0,l.useCallback)((function(){d(!0)}),[]);return(0,l.useEffect)((function(){var e=setTimeout((function(){return Boolean}));return i&&(e=setTimeout((function(){return d(!1)}),5e3)),function(){return clearTimeout(e)}}),[i]),l.default.createElement(l.default.Fragment,null,o?l.default.createElement("div",{"data-text":n,"data-testid":"tooltip",className:(0,u.default)([c.default.tooltip,c.default[r],void 0===i?null:i?c.default.visible:c.default.notVisible]),onTouchEnd:s},t):t)}},746:function(e,t,n){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){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,c=e.muted,d=void 0===c||c,s=e.loop,f=void 0===s||s,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:d,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:d,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){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)=>{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){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){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)},2802:(e,t)=>{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)=>{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)=>{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)=>{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"},7451:(e,t,n)=>{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)=>{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)=>{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)=>{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 c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var d="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,d=r[1];return l((function(){o.value=n,o.getSnapshot=t,c(o)&&d({inst:o})}),[e,n,t]),i((function(){return c(o)&&d({inst:o}),e((function(){c(o)&&d({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:d},1688:(e,t,n)=>{e.exports=n(3250)},6689:e=>{e.exports=require("react")}},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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T242QixRQUFTczZCLEdBR3BFSCxFQUFPbjZCLE9BQ2YsQ0NyQkFzNkIsRUFBb0JwckMsRUFBS2lyQyxJQUN4QixJQUFJTyxFQUFTUCxHQUFVQSxFQUFPcDZCLFdBQzdCLElBQU9vNkIsRUFBaUIsUUFDeEIsSUFBTSxFQUVQLE9BREFHLEVBQW9CUCxFQUFFVyxFQUFRLENBQUUvbUMsRUFBRyttQyxJQUM1QkEsQ0FBTSxFQ0xkSixFQUFvQlAsRUFBSSxDQUFDLzVCLEVBQVMyNkIsS0FDakMsSUFBSSxJQUFJeG1DLEtBQU93bUMsRUFDWEwsRUFBb0JyckMsRUFBRTByQyxFQUFZeG1DLEtBQVNtbUMsRUFBb0JyckMsRUFBRStRLEVBQVM3TCxJQUM1RXBCLE9BQU9pTCxlQUFlZ0MsRUFBUzdMLEVBQUssQ0FBRXdMLFlBQVksRUFBTXRMLElBQUtzbUMsRUFBV3htQyxJQUUxRSxFQ05EbW1DLEVBQW9CcnJDLEVBQUksQ0FBQzZQLEVBQUs4N0IsSUFBVTduQyxPQUFPeU0sVUFBVU4sZUFBZXpQLEtBQUtxUCxFQUFLODdCLEdDQ2xGTixFQUFvQmhyQyxFQUFLMFEsSUFDSCxvQkFBWDVRLFFBQTBCQSxPQUFPeXJDLGFBQzFDOW5DLE9BQU9pTCxlQUFlZ0MsRUFBUzVRLE9BQU95ckMsWUFBYSxDQUFFL3FDLE1BQU8sV0FFN0RpRCxPQUFPaUwsZUFBZWdDLEVBQVMsYUFBYyxDQUFFbFEsT0FBTyxHQUFPLEVDRjlELElBQUlnckMsRUFBc0JSLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VPdXRzaWRlQ2xpY2svdXNlT3V0c2lkZUNsaWNrLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9zd3IvX2ludGVybmFsL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3N3ci9jb3JlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlU1dSSG9va3NDb25maWcvdXNlU1dSSG9va3NDb25maWcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VUb2dnbGUvdXNlVG9nZ2xlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2NsYXNzY2F0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9mZjFiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UubW9kdWxlLmNzcz80MzI4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLm1vZHVsZS5jc3M/YzBiNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94Lm1vZHVsZS5jc3M/ZmYyZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ODcxOSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3M/ZmNlMiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3M/YThhZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0NsaWNrYWJsZS5tb2R1bGUuY3NzPzdhMGQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/ZDU1NyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzPzA5OWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24ubW9kdWxlLmNzcz8xY2FjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/NTk2ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3M/MmM0NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLm1vZHVsZS5jc3M/ZjEwZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLm1vZHVsZS5jc3M/NDY5ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/M2NkNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzP2RmZmEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8xOTBhIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/Y2QzNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUl0ZW0ubW9kdWxlLmNzcz9hYWNlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz9iNWRiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwubW9kdWxlLmNzcz84YTg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzY1YmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8zNzE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLm1vZHVsZS5jc3M/NGRiNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLm1vZHVsZS5jc3M/YjY3NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L09wdGlvbkxpc3QubW9kdWxlLmNzcz80OWFjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gubW9kdWxlLmNzcz9lZDQzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5tb2R1bGUuY3NzPzFlNzkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0b3IvU2VsZWN0b3IubW9kdWxlLmNzcz85YWJkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGUubW9kdWxlLmNzcz85M2E5Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXIubW9kdWxlLmNzcz83MGRmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXJDZWxsLm1vZHVsZS5jc3M/MWQwYyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Lm1vZHVsZS5jc3M/Yjk1NSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Q2VsbC5tb2R1bGUuY3NzP2RhNWEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLm1vZHVsZS5jc3M/OGYzNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9UYWdzSW5wdXQubW9kdWxlLmNzcz84ZmQxIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC5tb2R1bGUuY3NzPzNmMWYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC5tb2R1bGUuY3NzPzU4ODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzP2VjODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL1Rvb2x0aXAubW9kdWxlLmNzcz8wNmFkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8ubW9kdWxlLmNzcz9lZGE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWF1dG9jb21wbGV0ZS1oaW50L2Rpc3Qvc3JjL2luZGV4LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWF1dG9jb21wbGV0ZS1oaW50L2Rpc3Qvc3JjL3V0aWxzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3RrZXlzLWhvb2svZGlzdC9yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy1pbmZpbml0ZS1sb2FkZXIvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9kaXN0L21lbW9pemUtb25lLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL051bXBhZC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9PcHRpb25MaXN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdENvbnRleHQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdG9yL1NlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyQ2VsbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9UYWdzSW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnc0lucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1Rvb2x0aXAvVG9vbHRpcC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29uc3RhbnRzL1RhYmxlLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbnN0YW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy90eXBlcy90YWJsZS50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LXVwLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jcm9zc2VkLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9zZWFyY2guc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xudmFyIG9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPdXRzaWRlQ2xpY2soY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlUmVmKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgfSwgW2NhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZU91dHNpZGVDbGljay5qcy5tYXAiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IsIF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlUHJvbWlzZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgIH0pLCAyKSwgcmVzdWx0ID0gX2FbMF0sIHNldFJlc3VsdCA9IF9hWzFdO1xuICAgIC8vIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBpZiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIHVubW91bnRlZFxuICAgIC8vIHdoaWxlIHRoZSBwcm9taXNlIHdhcyBzdGlsbCBwZW5kaW5nIHRvIGF2b2lkIHNldHRpbmcgc3RhdGVcbiAgICAvLyBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlxuICAgIHZhciBoYXNVbm1vdW50ZWQgPSB1c2VSZWYoZmFsc2UpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhhc1VubW91bnRlZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciBkaXNwYXRjaCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwcm9taXNlKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhLCBlcnJvcl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcHJvbWlzZV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGRhdGFdO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JfMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfSwgW2hhc1VubW91bnRlZF0pO1xuICAgIHJldHVybiBbcmVzdWx0LCBkaXNwYXRjaF07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VQcm9taXNlLmpzLm1hcCIsImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlU3RhdGUsIGNyZWF0ZUVsZW1lbnQsIHVzZVJlZiwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5cbi8vIEdsb2JhbCBzdGF0ZSB1c2VkIHRvIGRlZHVwbGljYXRlIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnNcbmNvbnN0IFNXUkdsb2JhbFN0YXRlID0gbmV3IFdlYWtNYXAoKTtcblxuY29uc3QgRU1QVFlfQ0FDSEUgPSB7fTtcbmNvbnN0IElOSVRJQUxfQ0FDSEUgPSB7fTtcbmNvbnN0IG5vb3AgPSAoKT0+e307XG4vLyBVc2luZyBub29wKCkgYXMgdGhlIHVuZGVmaW5lZCB2YWx1ZSBhcyB1bmRlZmluZWQgY2FuIGJlIHJlcGxhY2VkXG4vLyBieSBzb21ldGhpbmcgZWxzZS4gUHJldHRpZXIgaWdub3JlIGFuZCBleHRyYSBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5IGhlcmVcbi8vIHRvIGVuc3VyZSB0aGF0IHRzYyBkb2Vzbid0IHJlbW92ZSB0aGUgX19OT0lOTElORV9fIGNvbW1lbnQuXG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IFVOREVGSU5FRCA9IC8qI19fTk9JTkxJTkVfXyovIG5vb3AoKTtcbmNvbnN0IE9CSkVDVCA9IE9iamVjdDtcbmNvbnN0IGlzVW5kZWZpbmVkID0gKHYpPT52ID09PSBVTkRFRklORUQ7XG5jb25zdCBpc0Z1bmN0aW9uID0gKHYpPT50eXBlb2YgdiA9PSAnZnVuY3Rpb24nO1xuY29uc3QgbWVyZ2VPYmplY3RzID0gKGEsIGIpPT4oe1xuICAgICAgICAuLi5hLFxuICAgICAgICAuLi5iXG4gICAgfSk7XG5jb25zdCBTVFJfVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG4vLyBOT1RFOiBVc2UgdGhlIGZ1bmN0aW9uIHRvIGd1YXJhbnRlZSBpdCdzIHJlLWV2YWx1YXRlZCBiZXR3ZWVuIGpzZG9tIGFuZCBub2RlIHJ1bnRpbWUgZm9yIHRlc3RzLlxuY29uc3QgaXNXaW5kb3dEZWZpbmVkID0gdHlwZW9mIHdpbmRvdyAhPSBTVFJfVU5ERUZJTkVEO1xuY29uc3QgaXNEb2N1bWVudERlZmluZWQgPSB0eXBlb2YgZG9jdW1lbnQgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSA9ICgpPT5pc1dpbmRvd0RlZmluZWQgJiYgdHlwZW9mIHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10gIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGNyZWF0ZUNhY2hlSGVscGVyID0gKGNhY2hlLCBrZXkpPT57XG4gICAgY29uc3Qgc3RhdGUgPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIHJldHVybiBbXG4gICAgICAgIC8vIEdldHRlclxuICAgICAgICAoKT0+Y2FjaGUuZ2V0KGtleSkgfHwgRU1QVFlfQ0FDSEUsXG4gICAgICAgIC8vIFNldHRlclxuICAgICAgICAoaW5mbyk9PntcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAvLyBCZWZvcmUgd3JpdGluZyB0byB0aGUgc3RvcmUsIHdlIGtlZXAgdGhlIHZhbHVlIGluIHRoZSBpbml0aWFsIGNhY2hlXG4gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBub3QgdGhlcmUgeWV0LlxuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBJTklUSUFMX0NBQ0hFKSkge1xuICAgICAgICAgICAgICAgICAgICBJTklUSUFMX0NBQ0hFW2tleV0gPSBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZVs1XShrZXksIG1lcmdlT2JqZWN0cyhwcmV2LCBpbmZvKSwgcHJldiB8fCBFTVBUWV9DQUNIRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFN1YnNjcmliZXJcbiAgICAgICAgc3RhdGVbNl0sXG4gICAgICAgIC8vIEdldCBzZXJ2ZXIgY2FjaGUgc25hcHNob3RcbiAgICAgICAgKCk9PntcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjYWNoZSB3YXMgdXBkYXRlZCBvbiB0aGUgY2xpZW50LCB3ZSByZXR1cm4gdGhlIHN0b3JlZCBpbml0aWFsIHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gSU5JVElBTF9DQUNIRSkgcmV0dXJuIElOSVRJQUxfQ0FDSEVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZG9uZSBhbnkgY2xpZW50LXNpZGUgdXBkYXRlcywgd2UgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpIHx8IEVNUFRZX0NBQ0hFO1xuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8vIHVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBvYmplY3QtPmtleSBtYXBwaW5nXG4vLyBzbyB0aGUgb2JqZWN0cyBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4vLyBXZWFrTWFwIHVzZXMgYSBoYXNodGFibGUgdW5kZXIgdGhlIGhvb2QsIHNvIHRoZSBsb29rdXBcbi8vIGNvbXBsZXhpdHkgaXMgYWxtb3N0IE8oMSkuXG5jb25zdCB0YWJsZSA9IG5ldyBXZWFrTWFwKCk7XG4vLyBjb3VudGVyIG9mIHRoZSBrZXlcbmxldCBjb3VudGVyID0gMDtcbi8vIEEgc3RhYmxlIGhhc2ggaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0czpcbi8vIC0gRmFzdCBhbmQgZW5zdXJlcyB1bmlxdWUgaGFzaCBwcm9wZXJ0aWVzXG4vLyAtIEhhbmRsZXMgdW5zZXJpYWxpemFibGUgdmFsdWVzXG4vLyAtIEhhbmRsZXMgb2JqZWN0IGtleSBvcmRlcmluZ1xuLy8gLSBHZW5lcmF0ZXMgc2hvcnQgcmVzdWx0c1xuLy9cbi8vIFRoaXMgaXMgbm90IGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiwgYW5kIHRoZSByZXN1bHQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmVcbi8vIHBhcnNhYmxlLlxuY29uc3Qgc3RhYmxlSGFzaCA9IChhcmcpPT57XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgY29uc3QgY29uc3RydWN0b3IgPSBhcmcgJiYgYXJnLmNvbnN0cnVjdG9yO1xuICAgIGNvbnN0IGlzRGF0ZSA9IGNvbnN0cnVjdG9yID09IERhdGU7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBsZXQgaW5kZXg7XG4gICAgaWYgKE9CSkVDVChhcmcpID09PSBhcmcgJiYgIWlzRGF0ZSAmJiBjb25zdHJ1Y3RvciAhPSBSZWdFeHApIHtcbiAgICAgICAgLy8gT2JqZWN0L2Z1bmN0aW9uLCBub3QgbnVsbC9kYXRlL3JlZ2V4cC4gVXNlIFdlYWtNYXAgdG8gc3RvcmUgdGhlIGlkIGZpcnN0LlxuICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkgaGFzaGVkLCBkaXJlY3RseSByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgICAgcmVzdWx0ID0gdGFibGUuZ2V0KGFyZyk7XG4gICAgICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBoYXNoIGZpcnN0IGZvciBjaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0aW9uIGJlZm9yZSBlbnRlcmluZyB0aGVcbiAgICAgICAgLy8gcmVjdXJzaXZlIGBzdGFibGVIYXNoYCBjYWxscy5cbiAgICAgICAgLy8gRm9yIG90aGVyIG9iamVjdHMgbGlrZSBzZXQgYW5kIG1hcCwgd2UgdXNlIHRoaXMgaWQgZGlyZWN0bHkgYXMgdGhlIGhhc2guXG4gICAgICAgIHJlc3VsdCA9ICsrY291bnRlciArICd+JztcbiAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IEFycmF5KSB7XG4gICAgICAgICAgICAvLyBBcnJheS5cbiAgICAgICAgICAgIHJlc3VsdCA9ICdAJztcbiAgICAgICAgICAgIGZvcihpbmRleCA9IDA7IGluZGV4IDwgYXJnLmxlbmd0aDsgaW5kZXgrKyl7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBPQkpFQ1QpIHtcbiAgICAgICAgICAgIC8vIE9iamVjdCwgc29ydCBrZXlzLlxuICAgICAgICAgICAgcmVzdWx0ID0gJyMnO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9CSkVDVC5rZXlzKGFyZykuc29ydCgpO1xuICAgICAgICAgICAgd2hpbGUoIWlzVW5kZWZpbmVkKGluZGV4ID0ga2V5cy5wb3AoKSkpe1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGluZGV4ICsgJzonICsgc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaXNEYXRlID8gYXJnLnRvSlNPTigpIDogdHlwZSA9PSAnc3ltYm9sJyA/IGFyZy50b1N0cmluZygpIDogdHlwZSA9PSAnc3RyaW5nJyA/IEpTT04uc3RyaW5naWZ5KGFyZykgOiAnJyArIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogRHVlIHRvIHRoZSBidWcgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Njc4MDc1LFxuICogaXQncyBub3QgcmVsaWFibGUgdG8gZGV0ZWN0IGlmIHRoZSBicm93c2VyIGlzIGN1cnJlbnRseSBvbmxpbmUgb3Igb2ZmbGluZVxuICogYmFzZWQgb24gYG5hdmlnYXRvci5vbkxpbmVgLlxuICogQXMgYSB3b3JrYXJvdW5kLCB3ZSBhbHdheXMgYXNzdW1lIGl0J3Mgb25saW5lIG9uIHRoZSBmaXJzdCBsb2FkLCBhbmQgY2hhbmdlXG4gKiB0aGUgc3RhdHVzIHVwb24gYG9ubGluZWAgb3IgYG9mZmxpbmVgIGV2ZW50cy5cbiAqLyBsZXQgb25saW5lID0gdHJ1ZTtcbmNvbnN0IGlzT25saW5lID0gKCk9Pm9ubGluZTtcbi8vIEZvciBub2RlIGFuZCBSZWFjdCBOYXRpdmUsIGBhZGQvcmVtb3ZlRXZlbnRMaXN0ZW5lcmAgZG9lc24ndCBleGlzdCBvbiB3aW5kb3cuXG5jb25zdCBbb25XaW5kb3dFdmVudCwgb2ZmV2luZG93RXZlbnRdID0gaXNXaW5kb3dEZWZpbmVkICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID8gW1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyLmJpbmQod2luZG93KSxcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdylcbl0gOiBbXG4gICAgbm9vcCxcbiAgICBub29wXG5dO1xuY29uc3QgaXNWaXNpYmxlID0gKCk9PntcbiAgICBjb25zdCB2aXNpYmlsaXR5U3RhdGUgPSBpc0RvY3VtZW50RGVmaW5lZCAmJiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZpc2liaWxpdHlTdGF0ZSkgfHwgdmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJztcbn07XG5jb25zdCBpbml0Rm9jdXMgPSAoY2FsbGJhY2spPT57XG4gICAgLy8gZm9jdXMgcmV2YWxpZGF0ZVxuICAgIGlmIChpc0RvY3VtZW50RGVmaW5lZCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgIH1cbiAgICBvbldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgaWYgKGlzRG9jdW1lbnREZWZpbmVkKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICB9O1xufTtcbmNvbnN0IGluaXRSZWNvbm5lY3QgPSAoY2FsbGJhY2spPT57XG4gICAgLy8gcmV2YWxpZGF0ZSBvbiByZWNvbm5lY3RlZFxuICAgIGNvbnN0IG9uT25saW5lID0gKCk9PntcbiAgICAgICAgb25saW5lID0gdHJ1ZTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICAgIC8vIG5vdGhpbmcgdG8gcmV2YWxpZGF0ZSwganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICAgIGNvbnN0IG9uT2ZmbGluZSA9ICgpPT57XG4gICAgICAgIG9ubGluZSA9IGZhbHNlO1xuICAgIH07XG4gICAgb25XaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgIG9uV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgfTtcbn07XG5jb25zdCBwcmVzZXQgPSB7XG4gICAgaXNPbmxpbmUsXG4gICAgaXNWaXNpYmxlXG59O1xuY29uc3QgZGVmYXVsdENvbmZpZ09wdGlvbnMgPSB7XG4gICAgaW5pdEZvY3VzLFxuICAgIGluaXRSZWNvbm5lY3Rcbn07XG5cbmNvbnN0IElTX1JFQUNUX0xFR0FDWSA9ICFSZWFjdC51c2VJZDtcbmNvbnN0IElTX1NFUlZFUiA9ICFpc1dpbmRvd0RlZmluZWQgfHwgJ0Rlbm8nIGluIHdpbmRvdztcbi8vIFBvbHlmaWxsIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuY29uc3QgckFGID0gKGYpPT5oYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSA/IHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10oZikgOiBzZXRUaW1lb3V0KGYsIDEpO1xuLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gSVNfU0VSVkVSID8gdXNlRWZmZWN0IDogdXNlTGF5b3V0RWZmZWN0O1xuLy8gVGhpcyBhc3NpZ25tZW50IGlzIHRvIGV4dGVuZCB0aGUgTmF2aWdhdG9yIHR5cGUgdG8gdXNlIGVmZmVjdGl2ZVR5cGUuXG5jb25zdCBuYXZpZ2F0b3JDb25uZWN0aW9uID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4vLyBBZGp1c3QgdGhlIGNvbmZpZyBiYXNlZCBvbiBzbG93IGNvbm5lY3Rpb24gc3RhdHVzICg8PSA3MEticHMpLlxuY29uc3Qgc2xvd0Nvbm5lY3Rpb24gPSAhSVNfU0VSVkVSICYmIG5hdmlnYXRvckNvbm5lY3Rpb24gJiYgKFtcbiAgICAnc2xvdy0yZycsXG4gICAgJzJnJ1xuXS5pbmNsdWRlcyhuYXZpZ2F0b3JDb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUpIHx8IG5hdmlnYXRvckNvbm5lY3Rpb24uc2F2ZURhdGEpO1xuXG5jb25zdCBzZXJpYWxpemUgPSAoa2V5KT0+e1xuICAgIGlmIChpc0Z1bmN0aW9uKGtleSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGtleSA9IGtleSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBub3QgcmVhZHlcbiAgICAgICAgICAgIGtleSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwga2V5IGFzIHRoZSBhcmd1bWVudCBvZiBmZXRjaGVyLiBUaGlzIGNhbiBiZSBhIHN0cmluZyBvciBhblxuICAgIC8vIGFycmF5IG9mIHZhbHVlcy5cbiAgICBjb25zdCBhcmdzID0ga2V5O1xuICAgIC8vIElmIGtleSBpcyBub3QgZmFsc3ksIG9yIG5vdCBhbiBlbXB0eSBhcnJheSwgaGFzaCBpdC5cbiAgICBrZXkgPSB0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleS5sZW5ndGggOiBrZXkpID8gc3RhYmxlSGFzaChrZXkpIDogJyc7XG4gICAgcmV0dXJuIFtcbiAgICAgICAga2V5LFxuICAgICAgICBhcmdzXG4gICAgXTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lc3RhbXAuXG5sZXQgX190aW1lc3RhbXAgPSAwO1xuY29uc3QgZ2V0VGltZXN0YW1wID0gKCk9PisrX190aW1lc3RhbXA7XG5cbmNvbnN0IEZPQ1VTX0VWRU5UID0gMDtcbmNvbnN0IFJFQ09OTkVDVF9FVkVOVCA9IDE7XG5jb25zdCBNVVRBVEVfRVZFTlQgPSAyO1xuXG52YXIgY29uc3RhbnRzID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIEZPQ1VTX0VWRU5UOiBGT0NVU19FVkVOVCxcbiAgUkVDT05ORUNUX0VWRU5UOiBSRUNPTk5FQ1RfRVZFTlQsXG4gIE1VVEFURV9FVkVOVDogTVVUQVRFX0VWRU5UXG59O1xuXG5hc3luYyBmdW5jdGlvbiBpbnRlcm5hbE11dGF0ZSguLi5hcmdzKSB7XG4gICAgY29uc3QgW2NhY2hlLCBfa2V5LCBfZGF0YSwgX29wdHNdID0gYXJncztcbiAgICAvLyBXaGVuIHBhc3NpbmcgYXMgYSBib29sZWFuLCBpdCdzIGV4cGxpY2l0bHkgdXNlZCB0byBkaXNhYmxlL2VuYWJsZVxuICAgIC8vIHJldmFsaWRhdGlvbi5cbiAgICBjb25zdCBvcHRpb25zID0gbWVyZ2VPYmplY3RzKHtcbiAgICAgICAgcG9wdWxhdGVDYWNoZTogdHJ1ZSxcbiAgICAgICAgdGhyb3dPbkVycm9yOiB0cnVlXG4gICAgfSwgdHlwZW9mIF9vcHRzID09PSAnYm9vbGVhbicgPyB7XG4gICAgICAgIHJldmFsaWRhdGU6IF9vcHRzXG4gICAgfSA6IF9vcHRzIHx8IHt9KTtcbiAgICBsZXQgcG9wdWxhdGVDYWNoZSA9IG9wdGlvbnMucG9wdWxhdGVDYWNoZTtcbiAgICBjb25zdCByb2xsYmFja09uRXJyb3JPcHRpb24gPSBvcHRpb25zLnJvbGxiYWNrT25FcnJvcjtcbiAgICBsZXQgb3B0aW1pc3RpY0RhdGEgPSBvcHRpb25zLm9wdGltaXN0aWNEYXRhO1xuICAgIGNvbnN0IHJldmFsaWRhdGUgPSBvcHRpb25zLnJldmFsaWRhdGUgIT09IGZhbHNlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvciA9IChlcnJvcik9PntcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByb2xsYmFja09uRXJyb3JPcHRpb24gPT09ICdmdW5jdGlvbicgPyByb2xsYmFja09uRXJyb3JPcHRpb24oZXJyb3IpIDogcm9sbGJhY2tPbkVycm9yT3B0aW9uICE9PSBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHRocm93T25FcnJvciA9IG9wdGlvbnMudGhyb3dPbkVycm9yO1xuICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBrZXkgZmlsdGVyLCByZXR1cm4gdGhlIG11dGF0aW9uIHJlc3VsdHMgZm9yIGFsbFxuICAgIC8vIGZpbHRlcmVkIGtleXMuXG4gICAgaWYgKGlzRnVuY3Rpb24oX2tleSkpIHtcbiAgICAgICAgY29uc3Qga2V5RmlsdGVyID0gX2tleTtcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleXMgPSBbXTtcbiAgICAgICAgY29uc3QgaXQgPSBjYWNoZS5rZXlzKCk7XG4gICAgICAgIGZvcihsZXQga2V5SXQgPSBpdC5uZXh0KCk7ICFrZXlJdC5kb25lOyBrZXlJdCA9IGl0Lm5leHQoKSl7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlJdC52YWx1ZTtcbiAgICAgICAgICAgIGlmICgvLyBTa2lwIHRoZSBzcGVjaWFsIHVzZVNXUkluZmluaXRlIGtleXMuXG4gICAgICAgICAgICAha2V5LnN0YXJ0c1dpdGgoJyRpbmYkJykgJiYga2V5RmlsdGVyKGNhY2hlLmdldChrZXkpLl9rKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWF0Y2hlZEtleXMubWFwKG11dGF0ZUJ5S2V5KSk7XG4gICAgfVxuICAgIHJldHVybiBtdXRhdGVCeUtleShfa2V5KTtcbiAgICBhc3luYyBmdW5jdGlvbiBtdXRhdGVCeUtleShfaykge1xuICAgICAgICAvLyBTZXJpYWxpemUga2V5XG4gICAgICAgIGNvbnN0IFtrZXldID0gc2VyaWFsaXplKF9rKTtcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3QgW2dldCwgc2V0XSA9IGNyZWF0ZUNhY2hlSGVscGVyKGNhY2hlLCBrZXkpO1xuICAgICAgICBjb25zdCBbRVZFTlRfUkVWQUxJREFUT1JTLCBNVVRBVElPTiwgRkVUQ0hdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAgICAgY29uc3QgcmV2YWxpZGF0b3JzID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV07XG4gICAgICAgIGNvbnN0IHN0YXJ0UmV2YWxpZGF0ZSA9ICgpPT57XG4gICAgICAgICAgICBpZiAocmV2YWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIEludmFsaWRhdGUgdGhlIGtleSBieSBkZWxldGluZyB0aGUgY29uY3VycmVudCByZXF1ZXN0IG1hcmtlcnMgc28gbmV3XG4gICAgICAgICAgICAgICAgLy8gcmVxdWVzdHMgd2lsbCBub3QgYmUgZGVkdXBlZC5cbiAgICAgICAgICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAocmV2YWxpZGF0b3JzICYmIHJldmFsaWRhdG9yc1swXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0b3JzWzBdKE1VVEFURV9FVkVOVCkudGhlbigoKT0+Z2V0KCkuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdldCgpLmRhdGE7XG4gICAgICAgIH07XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG5ldyBkYXRhIHByb3ZpZGVkLCByZXZhbGlkYXRlIHRoZSBrZXkgd2l0aCBjdXJyZW50IHN0YXRlLlxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGFuZCBicm9hZGNhc3Qgc3RhdGUuXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRSZXZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGEgPSBfZGF0YTtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAvLyBVcGRhdGUgZ2xvYmFsIHRpbWVzdGFtcHMuXG4gICAgICAgIGNvbnN0IGJlZm9yZU11dGF0aW9uVHMgPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgTVVUQVRJT05ba2V5XSA9IFtcbiAgICAgICAgICAgIGJlZm9yZU11dGF0aW9uVHMsXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGhhc09wdGltaXN0aWNEYXRhID0gIWlzVW5kZWZpbmVkKG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBnZXQoKTtcbiAgICAgICAgLy8gYGRpc3BsYXllZERhdGFgIGlzIHRoZSBjdXJyZW50IHZhbHVlIG9uIHNjcmVlbi4gSXQgY291bGQgYmUgdGhlIG9wdGltaXN0aWMgdmFsdWVcbiAgICAgICAgLy8gdGhhdCBpcyBnb2luZyB0byBiZSBvdmVycmlkZGVuIGJ5IGEgYGNvbW1pdHRlZERhdGFgLCBvciBnZXQgcmV2ZXJ0ZWQgYmFjay5cbiAgICAgICAgLy8gYGNvbW1pdHRlZERhdGFgIGlzIHRoZSB2YWxpZGF0ZWQgdmFsdWUgdGhhdCBjb21lcyBmcm9tIGEgZmV0Y2ggb3IgbXV0YXRpb24uXG4gICAgICAgIGNvbnN0IGRpc3BsYXllZERhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0YSA9IHN0YXRlLl9jO1xuICAgICAgICBjb25zdCBjb21taXR0ZWREYXRhID0gaXNVbmRlZmluZWQoY3VycmVudERhdGEpID8gZGlzcGxheWVkRGF0YSA6IGN1cnJlbnREYXRhO1xuICAgICAgICAvLyBEbyBvcHRpbWlzdGljIGRhdGEgdXBkYXRlLlxuICAgICAgICBpZiAoaGFzT3B0aW1pc3RpY0RhdGEpIHtcbiAgICAgICAgICAgIG9wdGltaXN0aWNEYXRhID0gaXNGdW5jdGlvbihvcHRpbWlzdGljRGF0YSkgPyBvcHRpbWlzdGljRGF0YShjb21taXR0ZWREYXRhKSA6IG9wdGltaXN0aWNEYXRhO1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBzZXQgb3B0aW1pc3RpYyBkYXRhLCBiYWNrdXAgdGhlIGN1cnJlbnQgY29tbWl0dGVkRGF0YSBkYXRhIGluIGBfY2AuXG4gICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IG9wdGltaXN0aWNEYXRhLFxuICAgICAgICAgICAgICAgIF9jOiBjb21taXR0ZWREYXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgICAgLy8gYGRhdGFgIGlzIGEgZnVuY3Rpb24sIGNhbGwgaXQgcGFzc2luZyBjdXJyZW50IGNhY2hlIHZhbHVlLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YShjb21taXR0ZWREYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0IHRocm93cyBhbiBlcnJvciBzeW5jaHJvbm91c2x5LCB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBgZGF0YWAgaXMgYSBwcm9taXNlL3RoZW5hYmxlLCByZXNvbHZlIHRoZSBmaW5hbCBkYXRhIGZpcnN0LlxuICAgICAgICBpZiAoZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEudGhlbikpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgbXV0YXRpb24gaXMgYXN5bmMsIHdlIG5lZWQgdG8gY2hlY2sgdGltZXN0YW1wcyB0b1xuICAgICAgICAgICAgLy8gYXZvaWQgcmFjZSBjb25kaXRpb25zLlxuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IGRhdGEuY2F0Y2goKGVycik9PntcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb3RoZXIgbXV0YXRpb25zIGhhdmUgb2NjdXJyZWQgc2luY2Ugd2UndmUgc3RhcnRlZCB0aGlzIG11dGF0aW9uLlxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhIHJhY2Ugd2UgZG9uJ3QgdXBkYXRlIGNhY2hlIG9yIGJyb2FkY2FzdCB0aGUgY2hhbmdlLFxuICAgICAgICAgICAgLy8ganVzdCByZXR1cm4gdGhlIGRhdGEuXG4gICAgICAgICAgICBpZiAoYmVmb3JlTXV0YXRpb25UcyAhPT0gTVVUQVRJT05ba2V5XVswXSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGhhc09wdGltaXN0aWNEYXRhICYmIHJvbGxiYWNrT25FcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAvLyBSb2xsYmFjay4gQWx3YXlzIHBvcHVsYXRlIHRoZSBjYWNoZSBpbiB0aGlzIGNhc2UgYnV0IHdpdGhvdXRcbiAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm1pbmcgdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgcG9wdWxhdGVDYWNoZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGNvbW1pdHRlZERhdGE7XG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSB0byBiZSB0aGUgbGF0ZXN0IGNvbW1pdHRlZCBkYXRhLCBhbmQgY2xlYXIgdGhlIGBfY2AgdmFsdWUuXG4gICAgICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHdlIHNob3VsZCB3cml0ZSBiYWNrIHRoZSBjYWNoZSBhZnRlciByZXF1ZXN0LlxuICAgICAgICBpZiAocG9wdWxhdGVDYWNoZSkge1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcmVzdWx0IGludG8gZGF0YS5cbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwb3B1bGF0ZUNhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gcG9wdWxhdGVDYWNoZShkYXRhLCBjb21taXR0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgY2FjaGVkIGRhdGEgaWYgdGhlcmUncyBubyBlcnJvci4gRGF0YSBjYW4gYmUgYHVuZGVmaW5lZGAgaGVyZS5cbiAgICAgICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVzZXQgdGhlIHRpbWVzdGFtcCB0byBtYXJrIHRoZSBtdXRhdGlvbiBoYXMgZW5kZWQuXG4gICAgICAgIE1VVEFUSU9OW2tleV1bMV0gPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIFNXUiBIb29rcycgaW50ZXJuYWwgc3RhdGVzOlxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBzdGFydFJldmFsaWRhdGUoKTtcbiAgICAgICAgLy8gVGhlIG11dGF0aW9uIGFuZCByZXZhbGlkYXRpb24gYXJlIGVuZGVkLCB3ZSBjYW4gY2xlYXIgaXQgc2luY2UgdGhlIGRhdGEgaXNcbiAgICAgICAgLy8gbm90IGFuIG9wdGltaXN0aWMgdmFsdWUgYW55bW9yZS5cbiAgICAgICAgc2V0KHtcbiAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRocm93IGVycm9yIG9yIHJldHVybiBkYXRhXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHRocm93T25FcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvcHVsYXRlQ2FjaGUgPyByZXMgOiBkYXRhO1xuICAgIH1cbn1cblxuY29uc3QgcmV2YWxpZGF0ZUFsbEtleXMgPSAocmV2YWxpZGF0b3JzLCB0eXBlKT0+e1xuICAgIGZvcihjb25zdCBrZXkgaW4gcmV2YWxpZGF0b3JzKXtcbiAgICAgICAgaWYgKHJldmFsaWRhdG9yc1trZXldWzBdKSByZXZhbGlkYXRvcnNba2V5XVswXSh0eXBlKTtcbiAgICB9XG59O1xuY29uc3QgaW5pdENhY2hlID0gKHByb3ZpZGVyLCBvcHRpb25zKT0+e1xuICAgIC8vIFRoZSBnbG9iYWwgc3RhdGUgZm9yIGEgc3BlY2lmaWMgcHJvdmlkZXIgd2lsbCBiZSB1c2VkIHRvIGRlZHVwbGljYXRlXG4gICAgLy8gcmVxdWVzdHMgYW5kIHN0b3JlIGxpc3RlbmVycy4gQXMgd2VsbCBhcyBhIG11dGF0ZSBmdW5jdGlvbiB0aGF0IGlzIGJvdW5kIHRvXG4gICAgLy8gdGhlIGNhY2hlLlxuICAgIC8vIFRoZSBwcm92aWRlcidzIGdsb2JhbCBzdGF0ZSBtaWdodCBiZSBhbHJlYWR5IGluaXRpYWxpemVkLiBMZXQncyB0cnkgdG8gZ2V0IHRoZVxuICAgIC8vIGdsb2JhbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVyIGZpcnN0LlxuICAgIGlmICghU1dSR2xvYmFsU3RhdGUuaGFzKHByb3ZpZGVyKSkge1xuICAgICAgICBjb25zdCBvcHRzID0gbWVyZ2VPYmplY3RzKGRlZmF1bHRDb25maWdPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBnbG9iYWwgc3RhdGUgYm91bmQgdG8gdGhlIHByb3ZpZGVyLCBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlXG4gICAgICAgIC8vIG5ldyBtdXRhdGUgZnVuY3Rpb24uXG4gICAgICAgIGNvbnN0IEVWRU5UX1JFVkFMSURBVE9SUyA9IHt9O1xuICAgICAgICBjb25zdCBtdXRhdGUgPSBpbnRlcm5hbE11dGF0ZS5iaW5kKFVOREVGSU5FRCwgcHJvdmlkZXIpO1xuICAgICAgICBsZXQgdW5tb3VudCA9IG5vb3A7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlID0gKGtleSwgY2FsbGJhY2spPT57XG4gICAgICAgICAgICBjb25zdCBzdWJzID0gc3Vic2NyaXB0aW9uc1trZXldIHx8IFtdO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uc1trZXldID0gc3VicztcbiAgICAgICAgICAgIHN1YnMucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICByZXR1cm4gKCk9PnN1YnMuc3BsaWNlKHN1YnMuaW5kZXhPZihjYWxsYmFjayksIDEpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXR0ZXIgPSAoa2V5LCB2YWx1ZSwgcHJldik9PntcbiAgICAgICAgICAgIHByb3ZpZGVyLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YnMgPSBzdWJzY3JpcHRpb25zW2tleV07XG4gICAgICAgICAgICBpZiAoc3Vicykge1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IHN1YnMubGVuZ3RoOyBpLS07KXtcbiAgICAgICAgICAgICAgICAgICAgc3Vic1tpXSh2YWx1ZSwgcHJldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbml0UHJvdmlkZXIgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGF0ZSBpZiBpdCdzIG5ldywgb3IgaWYgdGhlIHByb3ZpZGVyIGhhcyBiZWVuIGV4dGVuZGVkLlxuICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLnNldChwcm92aWRlciwgW1xuICAgICAgICAgICAgICAgICAgICBFVkVOVF9SRVZBTElEQVRPUlMsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVyLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlTX1NFUlZFUikge1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGxpc3RlbmluZyB0byB0aGUgbmF0aXZlIGV2ZW50cyBmb3IgYXV0byByZXZhbGlkYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IHB1dCBhIGRlbGF5IChzZXRUaW1lb3V0KSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZVxuICAgICAgICAgICAgICAgICAgICAvLyBmaXJlZCBhZnRlciBpbW1lZGlhdGUgSmF2YVNjcmlwdCBleGVjdXRpb25zLCB3aGljaCBjYW4gYmVcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVhY3QncyBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGF2b2lkcyBzb21lIHVubmVjZXNzYXJ5IHJldmFsaWRhdGlvbnMgc3VjaCBhc1xuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTY4MC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZUZvY3VzID0gb3B0cy5pbml0Rm9jdXMoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgRk9DVVNfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VSZWNvbm5lY3QgPSBvcHRzLmluaXRSZWNvbm5lY3Qoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgUkVDT05ORUNUX0VWRU5UKSkpO1xuICAgICAgICAgICAgICAgICAgICB1bm1vdW50ID0gKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VGb2N1cyAmJiByZWxlYXNlRm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VSZWNvbm5lY3QgJiYgcmVsZWFzZVJlY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB1bi1tb3VudGluZywgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNhY2hlIHByb3ZpZGVyIGZyb20gdGhlIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yYWdlIHRvbyBiZWNhdXNlIGl0J3MgYSBzaWRlLWVmZmVjdC4gT3RoZXJ3aXNlLCB3aGVuIHJlLW1vdW50aW5nIHdlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCByZS1yZWdpc3RlciB0aG9zZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBTV1JHbG9iYWxTdGF0ZS5kZWxldGUocHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaW5pdFByb3ZpZGVyKCk7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvdmlkZXIsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdCBhbmQgc2V0dXAgRE9NIGV2ZW50c1xuICAgICAgICAvLyBsaXN0ZW5lcnMgZm9yIGBmb2N1c2AgYW5kIGByZWNvbm5lY3RgIGFjdGlvbnMuXG4gICAgICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gaW5qZWN0IGFuIGV4dHJhIGxheWVyIG9uIHRvcCBvZiBgcHJvdmlkZXJgIGluIHRoZSBmdXR1cmUsXG4gICAgICAgIC8vIHN1Y2ggYXMga2V5IHNlcmlhbGl6YXRpb24sIGF1dG8gR0MsIGV0Yy5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQncyBqdXN0IGEgYE1hcGAgaW50ZXJmYWNlIHdpdGhvdXQgYW55IG1vZGlmaWNhdGlvbnMuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgIGluaXRQcm92aWRlcixcbiAgICAgICAgICAgIHVubW91bnRcbiAgICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgIFNXUkdsb2JhbFN0YXRlLmdldChwcm92aWRlcilbNF1cbiAgICBdO1xufTtcblxuLy8gZXJyb3IgcmV0cnlcbmNvbnN0IG9uRXJyb3JSZXRyeSA9IChfLCBfXywgY29uZmlnLCByZXZhbGlkYXRlLCBvcHRzKT0+e1xuICAgIGNvbnN0IG1heFJldHJ5Q291bnQgPSBjb25maWcuZXJyb3JSZXRyeUNvdW50O1xuICAgIGNvbnN0IGN1cnJlbnRSZXRyeUNvdW50ID0gb3B0cy5yZXRyeUNvdW50O1xuICAgIC8vIEV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICBjb25zdCB0aW1lb3V0ID0gfn4oKE1hdGgucmFuZG9tKCkgKyAwLjUpICogKDEgPDwgKGN1cnJlbnRSZXRyeUNvdW50IDwgOCA/IGN1cnJlbnRSZXRyeUNvdW50IDogOCkpKSAqIGNvbmZpZy5lcnJvclJldHJ5SW50ZXJ2YWw7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtYXhSZXRyeUNvdW50KSAmJiBjdXJyZW50UmV0cnlDb3VudCA+IG1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJldmFsaWRhdGUsIHRpbWVvdXQsIG9wdHMpO1xufTtcbmNvbnN0IGNvbXBhcmUgPSAoY3VycmVudERhdGEsIG5ld0RhdGEpPT5zdGFibGVIYXNoKGN1cnJlbnREYXRhKSA9PSBzdGFibGVIYXNoKG5ld0RhdGEpO1xuLy8gRGVmYXVsdCBjYWNoZSBwcm92aWRlclxuY29uc3QgW2NhY2hlLCBtdXRhdGVdID0gaW5pdENhY2hlKG5ldyBNYXAoKSk7XG4vLyBEZWZhdWx0IGNvbmZpZ1xuY29uc3QgZGVmYXVsdENvbmZpZyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgLy8gZXZlbnRzXG4gICAgb25Mb2FkaW5nU2xvdzogbm9vcCxcbiAgICBvblN1Y2Nlc3M6IG5vb3AsXG4gICAgb25FcnJvcjogbm9vcCxcbiAgICBvbkVycm9yUmV0cnksXG4gICAgb25EaXNjYXJkZWQ6IG5vb3AsXG4gICAgLy8gc3dpdGNoZXNcbiAgICByZXZhbGlkYXRlT25Gb2N1czogdHJ1ZSxcbiAgICByZXZhbGlkYXRlT25SZWNvbm5lY3Q6IHRydWUsXG4gICAgcmV2YWxpZGF0ZUlmU3RhbGU6IHRydWUsXG4gICAgc2hvdWxkUmV0cnlPbkVycm9yOiB0cnVlLFxuICAgIC8vIHRpbWVvdXRzXG4gICAgZXJyb3JSZXRyeUludGVydmFsOiBzbG93Q29ubmVjdGlvbiA/IDEwMDAwIDogNTAwMCxcbiAgICBmb2N1c1Rocm90dGxlSW50ZXJ2YWw6IDUgKiAxMDAwLFxuICAgIGRlZHVwaW5nSW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgIGxvYWRpbmdUaW1lb3V0OiBzbG93Q29ubmVjdGlvbiA/IDUwMDAgOiAzMDAwLFxuICAgIC8vIHByb3ZpZGVyc1xuICAgIGNvbXBhcmUsXG4gICAgaXNQYXVzZWQ6ICgpPT5mYWxzZSxcbiAgICBjYWNoZSxcbiAgICBtdXRhdGUsXG4gICAgZmFsbGJhY2s6IHt9XG59LCAvLyB1c2Ugd2ViIHByZXNldCBieSBkZWZhdWx0XG5wcmVzZXQpO1xuXG5jb25zdCBtZXJnZUNvbmZpZ3MgPSAoYSwgYik9PntcbiAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGhlcmUuXG4gICAgY29uc3QgdiA9IG1lcmdlT2JqZWN0cyhhLCBiKTtcbiAgICAvLyBJZiB0d28gY29uZmlncyBhcmUgcHJvdmlkZWQsIG1lcmdlIHRoZWlyIGB1c2VgIGFuZCBgZmFsbGJhY2tgIG9wdGlvbnMuXG4gICAgaWYgKGIpIHtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUxICwgZmFsbGJhY2s6IGYxICB9ID0gYTtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUyICwgZmFsbGJhY2s6IGYyICB9ID0gYjtcbiAgICAgICAgaWYgKHUxICYmIHUyKSB7XG4gICAgICAgICAgICB2LnVzZSA9IHUxLmNvbmNhdCh1Mik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYxICYmIGYyKSB7XG4gICAgICAgICAgICB2LmZhbGxiYWNrID0gbWVyZ2VPYmplY3RzKGYxLCBmMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG5jb25zdCBTV1JDb25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5jb25zdCBTV1JDb25maWcgPSAocHJvcHMpPT57XG4gICAgY29uc3QgeyB2YWx1ZSAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBhcmVudENvbmZpZyA9IHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCk7XG4gICAgY29uc3QgaXNGdW5jdGlvbmFsQ29uZmlnID0gaXNGdW5jdGlvbih2YWx1ZSk7XG4gICAgY29uc3QgY29uZmlnID0gdXNlTWVtbygoKT0+aXNGdW5jdGlvbmFsQ29uZmlnID8gdmFsdWUocGFyZW50Q29uZmlnKSA6IHZhbHVlLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICB2YWx1ZVxuICAgIF0pO1xuICAgIC8vIEV4dGVuZCBwYXJlbnQgY29udGV4dCB2YWx1ZXMgYW5kIG1pZGRsZXdhcmUuXG4gICAgY29uc3QgZXh0ZW5kZWRDb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyBjb25maWcgOiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICBjb25maWdcbiAgICBdKTtcbiAgICAvLyBTaG91bGQgbm90IHVzZSB0aGUgaW5oZXJpdGVkIHByb3ZpZGVyLlxuICAgIGNvbnN0IHByb3ZpZGVyID0gY29uZmlnICYmIGNvbmZpZy5wcm92aWRlcjtcbiAgICAvLyBVc2UgYSBsYXp5IGluaXRpYWxpemVkIHN0YXRlIHRvIGNyZWF0ZSB0aGUgY2FjaGUgb24gZmlyc3QgYWNjZXNzLlxuICAgIGNvbnN0IFtjYWNoZUNvbnRleHRdID0gdXNlU3RhdGUoKCk9PnByb3ZpZGVyID8gaW5pdENhY2hlKHByb3ZpZGVyKGV4dGVuZGVkQ29uZmlnLmNhY2hlIHx8IGNhY2hlKSwgY29uZmlnKSA6IFVOREVGSU5FRCk7XG4gICAgLy8gT3ZlcnJpZGUgdGhlIGNhY2hlIGlmIGEgbmV3IHByb3ZpZGVyIGlzIGdpdmVuLlxuICAgIGlmIChjYWNoZUNvbnRleHQpIHtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcuY2FjaGUgPSBjYWNoZUNvbnRleHRbMF07XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLm11dGF0ZSA9IGNhY2hlQ29udGV4dFsxXTtcbiAgICB9XG4gICAgLy8gVW5zdWJzY3JpYmUgZXZlbnRzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICAgICAgY2FjaGVDb250ZXh0WzJdICYmIGNhY2hlQ29udGV4dFsyXSgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlQ29udGV4dFszXTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChTV1JDb25maWdDb250ZXh0LlByb3ZpZGVyLCBtZXJnZU9iamVjdHMocHJvcHMsIHtcbiAgICAgICAgdmFsdWU6IGV4dGVuZGVkQ29uZmlnXG4gICAgfSkpO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvclxuY29uc3QgZW5hYmxlRGV2dG9vbHMgPSBpc1dpbmRvd0RlZmluZWQgJiYgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1VTRV9fO1xuY29uc3QgdXNlID0gZW5hYmxlRGV2dG9vbHMgPyB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX18gOiBbXTtcbmNvbnN0IHNldHVwRGV2VG9vbHMgPSAoKT0+e1xuICAgIGlmIChlbmFibGVEZXZ0b29scykge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHdpbmRvdy5fX1NXUl9ERVZUT09MU19SRUFDVF9fID0gUmVhY3Q7XG4gICAgfVxufTtcblxuY29uc3Qgbm9ybWFsaXplID0gKGFyZ3MpPT57XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oYXJnc1sxXSkgPyBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIGFyZ3NbMV0sXG4gICAgICAgIGFyZ3NbMl0gfHwge31cbiAgICBdIDogW1xuICAgICAgICBhcmdzWzBdLFxuICAgICAgICBudWxsLFxuICAgICAgICAoYXJnc1sxXSA9PT0gbnVsbCA/IGFyZ3NbMl0gOiBhcmdzWzFdKSB8fCB7fVxuICAgIF07XG59O1xuXG5jb25zdCB1c2VTV1JDb25maWcgPSAoKT0+e1xuICAgIHJldHVybiBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZywgdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KSk7XG59O1xuXG5jb25zdCBwcmVsb2FkID0gKGtleV8sIGZldGNoZXIpPT57XG4gICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gUHJldmVudCBwcmVsb2FkIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdXNlZC5cbiAgICBpZiAoUFJFTE9BRFtrZXldKSByZXR1cm4gUFJFTE9BRFtrZXldO1xuICAgIGNvbnN0IHJlcSA9IGZldGNoZXIoa2V5Xyk7XG4gICAgUFJFTE9BRFtrZXldID0gcmVxO1xuICAgIHJldHVybiByZXE7XG59O1xuY29uc3QgbWlkZGxld2FyZSA9ICh1c2VTV1JOZXh0KT0+KGtleV8sIGZldGNoZXJfLCBjb25maWcpPT57XG4gICAgICAgIC8vIGZldGNoZXIgbWlnaHQgYmUgYSBzeW5jIGZ1bmN0aW9uLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICAgICAgY29uc3QgZmV0Y2hlciA9IGZldGNoZXJfICYmICgoLi4uYXJncyk9PntcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlcmlhbGl6ZShrZXlfKVswXTtcbiAgICAgICAgICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBQUkVMT0FEW2tleV07XG4gICAgICAgICAgICBpZiAocmVxKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZldGNoZXJfKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUk5leHQoa2V5XywgZmV0Y2hlciwgY29uZmlnKTtcbiAgICB9O1xuXG5jb25zdCBCVUlMVF9JTl9NSURETEVXQVJFID0gdXNlLmNvbmNhdChtaWRkbGV3YXJlKTtcblxuLy8gSXQncyB0cmlja3kgdG8gcGFzcyBnZW5lcmljIHR5cGVzIGFzIHBhcmFtZXRlcnMsIHNvIHdlIGp1c3QgZGlyZWN0bHkgb3ZlcnJpZGVcbi8vIHRoZSB0eXBlcyBoZXJlLlxuY29uc3Qgd2l0aEFyZ3MgPSAoaG9vayk9PntcbiAgICByZXR1cm4gZnVuY3Rpb24gdXNlU1dSQXJncyguLi5hcmdzKSB7XG4gICAgICAgIC8vIEdldCB0aGUgZGVmYXVsdCBhbmQgaW5oZXJpdGVkIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBhcmd1bWVudHMuXG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBfY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgLy8gTWVyZ2UgY29uZmlndXJhdGlvbnMuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IG1lcmdlQ29uZmlncyhmYWxsYmFja0NvbmZpZywgX2NvbmZpZyk7XG4gICAgICAgIC8vIEFwcGx5IG1pZGRsZXdhcmVcbiAgICAgICAgbGV0IG5leHQgPSBob29rO1xuICAgICAgICBjb25zdCB7IHVzZSAgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZSA9ICh1c2UgfHwgW10pLmNvbmNhdChCVUlMVF9JTl9NSURETEVXQVJFKTtcbiAgICAgICAgZm9yKGxldCBpID0gbWlkZGxld2FyZS5sZW5ndGg7IGktLTspe1xuICAgICAgICAgICAgbmV4dCA9IG1pZGRsZXdhcmVbaV0obmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQoa2V5LCBmbiB8fCBjb25maWcuZmV0Y2hlciB8fCBudWxsLCBjb25maWcpO1xuICAgIH07XG59O1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHdpdGggZGVwZW5kZW5jeS10cmFja2luZy5cbiAqLyBjb25zdCB1c2VTdGF0ZVdpdGhEZXBzID0gKHN0YXRlKT0+e1xuICAgIGNvbnN0IHJlcmVuZGVyID0gdXNlU3RhdGUoe30pWzFdO1xuICAgIGNvbnN0IHVubW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qgc3RhdGVSZWYgPSB1c2VSZWYoc3RhdGUpO1xuICAgIC8vIElmIGEgc3RhdGUgcHJvcGVydHkgKGRhdGEsIGVycm9yLCBvciBpc1ZhbGlkYXRpbmcpIGlzIGFjY2Vzc2VkIGJ5IHRoZSByZW5kZXJcbiAgICAvLyBmdW5jdGlvbiwgd2UgbWFyayB0aGUgcHJvcGVydHkgYXMgYSBkZXBlbmRlbmN5IHNvIGlmIGl0IGlzIHVwZGF0ZWQgYWdhaW5cbiAgICAvLyBpbiB0aGUgZnV0dXJlLCB3ZSB0cmlnZ2VyIGEgcmVyZW5kZXIuXG4gICAgLy8gVGhpcyBpcyBhbHNvIGtub3duIGFzIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gICAgY29uc3Qgc3RhdGVEZXBlbmRlbmNpZXNSZWYgPSB1c2VSZWYoe1xuICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgfSk7XG4gICAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRvIGNoYW5nZSBzdGF0ZVJlZiwgcGFzcyB0aGUgdmFsdWVzIGV4cGxpY2l0bHkgdG8gc2V0U3RhdGU6XG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogbmV3RGF0YSAvLyBzZXQgZGF0YSB0byBuZXdEYXRhXG4gICAqICAgZXJyb3I6IHVuZGVmaW5lZCAvLyBzZXQgZXJyb3IgdG8gdW5kZWZpbmVkXG4gICAqIH0pXG4gICAqXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogdW5kZWZpbmVkIC8vIHNldCBkYXRhIHRvIHVuZGVmaW5lZFxuICAgKiAgIGVycm9yOiBlcnIgLy8gc2V0IGVycm9yIHRvIGVyclxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovIGNvbnN0IHNldFN0YXRlID0gdXNlQ2FsbGJhY2soKHBheWxvYWQpPT57XG4gICAgICAgIGxldCBzaG91bGRSZXJlbmRlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBzdGF0ZVJlZi5jdXJyZW50O1xuICAgICAgICBmb3IoY29uc3QgXyBpbiBwYXlsb2FkKXtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBfO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBtYXJrIHJlcmVuZGVyIGFzXG4gICAgICAgICAgICAvLyBuZWVkZWQuXG4gICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlW2tdICE9PSBwYXlsb2FkW2tdKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlW2tdID0gcGF5bG9hZFtrXTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYWNjZXNzZWQgYnkgdGhlIGNvbXBvbmVudCwgYSByZXJlbmRlciBzaG91bGQgYmVcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVyZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkUmVyZW5kZXIgJiYgIXVubW91bnRlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmVyZW5kZXIoe30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBSZWFjdC5zdGFydFRyYW5zaXRpb24oKCk9PnJlcmVuZGVyKHt9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCAvLyBjb25maWcuc3VzcGVuc2UgaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlY3ljbGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3RhdGVSZWYsXG4gICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnQsXG4gICAgICAgIHNldFN0YXRlXG4gICAgXTtcbn07XG5cbi8vIEFkZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgbGlzdCBvZiBrZXllZCBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHJldHVyblxuLy8gdGhlIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLlxuY29uc3Qgc3Vic2NyaWJlQ2FsbGJhY2sgPSAoa2V5LCBjYWxsYmFja3MsIGNhbGxiYWNrKT0+e1xuICAgIGNvbnN0IGtleWVkUmV2YWxpZGF0b3JzID0gY2FsbGJhY2tzW2tleV0gfHwgKGNhbGxiYWNrc1trZXldID0gW10pO1xuICAgIGtleWVkUmV2YWxpZGF0b3JzLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBjb25zdCBpbmRleCA9IGtleWVkUmV2YWxpZGF0b3JzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gTygxKTogZmFzdGVyIHRoYW4gc3BsaWNlXG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9yc1tpbmRleF0gPSBrZXllZFJldmFsaWRhdG9yc1trZXllZFJldmFsaWRhdG9ycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbi8vIENyZWF0ZSBhIGN1c3RvbSBob29rIHdpdGggYSBtaWRkbGV3YXJlXG5jb25zdCB3aXRoTWlkZGxld2FyZSA9ICh1c2VTV1IsIG1pZGRsZXdhcmUpPT57XG4gICAgcmV0dXJuICguLi5hcmdzKT0+e1xuICAgICAgICBjb25zdCBba2V5LCBmbiwgY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgY29uc3QgdXNlcyA9IChjb25maWcudXNlIHx8IFtdKS5jb25jYXQobWlkZGxld2FyZSk7XG4gICAgICAgIHJldHVybiB1c2VTV1Ioa2V5LCBmbiwge1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgdXNlOiB1c2VzXG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuXG5zZXR1cERldlRvb2xzKCk7XG5cbmV4cG9ydCB7IElTX1JFQUNUX0xFR0FDWSwgSVNfU0VSVkVSLCBPQkpFQ1QsIFNXUkNvbmZpZywgU1dSR2xvYmFsU3RhdGUsIFVOREVGSU5FRCwgY2FjaGUsIGNvbXBhcmUsIGNyZWF0ZUNhY2hlSGVscGVyLCBkZWZhdWx0Q29uZmlnLCBkZWZhdWx0Q29uZmlnT3B0aW9ucywgZ2V0VGltZXN0YW1wLCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGluaXRDYWNoZSwgaW50ZXJuYWxNdXRhdGUsIGlzRG9jdW1lbnREZWZpbmVkLCBpc0Z1bmN0aW9uLCBpc1VuZGVmaW5lZCwgaXNXaW5kb3dEZWZpbmVkLCBtZXJnZUNvbmZpZ3MsIG1lcmdlT2JqZWN0cywgbXV0YXRlLCBub29wLCBub3JtYWxpemUsIHByZWxvYWQsIHByZXNldCwgckFGLCBjb25zdGFudHMgYXMgcmV2YWxpZGF0ZUV2ZW50cywgc2VyaWFsaXplLCBzbG93Q29ubmVjdGlvbiwgc3RhYmxlSGFzaCwgc3Vic2NyaWJlQ2FsbGJhY2ssIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHVzZVNXUkNvbmZpZywgdXNlU3RhdGVXaXRoRGVwcywgd2l0aEFyZ3MsIHdpdGhNaWRkbGV3YXJlIH07XG4iLCJpbXBvcnQgeyB1c2VSZWYsIHVzZU1lbW8sIHVzZUNhbGxiYWNrLCB1c2VEZWJ1Z1ZhbHVlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzJztcbmltcG9ydCB7IE9CSkVDVCwgU1dSQ29uZmlnIGFzIFNXUkNvbmZpZyQxLCBkZWZhdWx0Q29uZmlnLCB3aXRoQXJncywgU1dSR2xvYmFsU3RhdGUsIHNlcmlhbGl6ZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGlzVW5kZWZpbmVkLCBnZXRUaW1lc3RhbXAsIFVOREVGSU5FRCwgaXNGdW5jdGlvbiwgaW50ZXJuYWxNdXRhdGUsIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHN1YnNjcmliZUNhbGxiYWNrLCBJU19TRVJWRVIsIHJBRiwgSVNfUkVBQ1RfTEVHQUNZLCBtZXJnZU9iamVjdHMsIHJldmFsaWRhdGVFdmVudHMgfSBmcm9tICdzd3IvX2ludGVybmFsJztcbmV4cG9ydCB7IG11dGF0ZSwgcHJlbG9hZCwgdXNlU1dSQ29uZmlnIH0gZnJvbSAnc3dyL19pbnRlcm5hbCc7XG5cbmNvbnN0IFdJVEhfREVEVVBFID0ge1xuICAgIGRlZHVwZTogdHJ1ZVxufTtcbmNvbnN0IHVzZVNXUkhhbmRsZXIgPSAoX2tleSwgZmV0Y2hlciwgY29uZmlnKT0+e1xuICAgIGNvbnN0IHsgY2FjaGUgLCBjb21wYXJlICwgc3VzcGVuc2UgLCBmYWxsYmFja0RhdGEgLCByZXZhbGlkYXRlT25Nb3VudCAsIHJldmFsaWRhdGVJZlN0YWxlICwgcmVmcmVzaEludGVydmFsICwgcmVmcmVzaFdoZW5IaWRkZW4gLCByZWZyZXNoV2hlbk9mZmxpbmUgLCBrZWVwUHJldmlvdXNEYXRhICB9ID0gY29uZmlnO1xuICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIC8vIGBrZXlgIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBTV1IgYGRhdGFgIHN0YXRlLCBga2V5SW5mb2AgaG9sZHMgZXh0cmFcbiAgICAvLyBzdGF0ZXMgc3VjaCBhcyBgZXJyb3JgIGFuZCBgaXNWYWxpZGF0aW5nYCBpbnNpZGUsXG4gICAgLy8gYWxsIG9mIHRoZW0gYXJlIGRlcml2ZWQgZnJvbSBgX2tleWAuXG4gICAgLy8gYGZuQXJnYCBpcyB0aGUgYXJndW1lbnQvYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBrZXksIHdoaWNoIHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdG8gdGhlIGZldGNoZXIuXG4gICAgY29uc3QgW2tleSwgZm5BcmddID0gc2VyaWFsaXplKF9rZXkpO1xuICAgIC8vIElmIGl0J3MgdGhlIGluaXRpYWwgcmVuZGVyIG9mIHRoaXMgaG9vay5cbiAgICBjb25zdCBpbml0aWFsTW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gSWYgdGhlIGhvb2sgaXMgdW5tb3VudGVkIGFscmVhZHkuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByZXZlbnQgc29tZSBlZmZlY3RzXG4gICAgLy8gdG8gYmUgY2FsbGVkIGFmdGVyIHVubW91bnRpbmcuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBSZWZzIHRvIGtlZXAgdGhlIGtleSBhbmQgY29uZmlnLlxuICAgIGNvbnN0IGtleVJlZiA9IHVzZVJlZihrZXkpO1xuICAgIGNvbnN0IGZldGNoZXJSZWYgPSB1c2VSZWYoZmV0Y2hlcik7XG4gICAgY29uc3QgY29uZmlnUmVmID0gdXNlUmVmKGNvbmZpZyk7XG4gICAgY29uc3QgZ2V0Q29uZmlnID0gKCk9PmNvbmZpZ1JlZi5jdXJyZW50O1xuICAgIGNvbnN0IGlzQWN0aXZlID0gKCk9PmdldENvbmZpZygpLmlzVmlzaWJsZSgpICYmIGdldENvbmZpZygpLmlzT25saW5lKCk7XG4gICAgY29uc3QgW2dldENhY2hlLCBzZXRDYWNoZSwgc3Vic2NyaWJlQ2FjaGUsIGdldEluaXRpYWxDYWNoZV0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llcyA9IHVzZVJlZih7fSkuY3VycmVudDtcbiAgICBjb25zdCBmYWxsYmFjayA9IGlzVW5kZWZpbmVkKGZhbGxiYWNrRGF0YSkgPyBjb25maWcuZmFsbGJhY2tba2V5XSA6IGZhbGxiYWNrRGF0YTtcbiAgICBjb25zdCBpc0VxdWFsID0gKHByZXYsIGN1cnJlbnQpPT57XG4gICAgICAgIGxldCBlcXVhbCA9IHRydWU7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHN0YXRlRGVwZW5kZW5jaWVzKXtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBfO1xuICAgICAgICAgICAgaWYgKHQgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCBwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJldlt0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCByZXR1cm5lZERhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50W3RdICE9PSBwcmV2W3RdKSB7XG4gICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcXVhbDtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNuYXBzaG90ID0gdXNlTWVtbygoKT0+e1xuICAgICAgICBjb25zdCBzaG91bGRTdGFydFJlcXVlc3QgPSAoKCk9PntcbiAgICAgICAgICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWZldGNoZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIGByZXZhbGlkYXRlT25Nb3VudGAgaXMgc2V0LCB3ZSB0YWtlIHRoZSB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVJZlN0YWxlKSkgcmV0dXJuIHJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIC8vIEdldCB0aGUgY2FjaGUgYW5kIG1lcmdlIGl0IHdpdGggZXhwZWN0ZWQgc3RhdGVzLlxuICAgICAgICBjb25zdCBnZXRTZWxlY3RlZENhY2hlID0gKHN0YXRlKT0+e1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzZWxlY3QgdGhlIG5lZWRlZCBmaWVsZHMgZnJvbSB0aGUgc3RhdGUuXG4gICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IG1lcmdlT2JqZWN0cyhzdGF0ZSk7XG4gICAgICAgICAgICBkZWxldGUgc25hcHNob3QuX2s7XG4gICAgICAgICAgICBpZiAoIXNob3VsZFN0YXJ0UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5zbmFwc2hvdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVG8gbWFrZSBzdXJlIHRoYXQgd2UgYXJlIHJldHVybmluZyB0aGUgc2FtZSBvYmplY3QgcmVmZXJlbmNlIHRvIGF2b2lkXG4gICAgICAgIC8vIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMsIHdlIGtlZXAgdGhlIHByZXZpb3VzIHNuYXBzaG90IGFuZCB1c2UgZGVlcFxuICAgICAgICAvLyBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmV0dXJuIGEgbmV3IG9uZS5cbiAgICAgICAgbGV0IG1lbW9yaXplZFNuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShnZXRDYWNoZSgpKTtcbiAgICAgICAgY29uc3QgbWVtb3JpemVkSW5pdGlhbFNuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShnZXRJbml0aWFsQ2FjaGUoKSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAoKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShnZXRDYWNoZSgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNFcXVhbChuZXdTbmFwc2hvdCwgbWVtb3JpemVkU25hcHNob3QpID8gbWVtb3JpemVkU25hcHNob3QgOiBtZW1vcml6ZWRTbmFwc2hvdCA9IG5ld1NuYXBzaG90O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpPT5tZW1vcml6ZWRJbml0aWFsU25hcHNob3RcbiAgICAgICAgXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgU1dSIHNob3VsZCByZXR1cm4uXG4gICAgY29uc3QgY2FjaGVkID0gdXNlU3luY0V4dGVybmFsU3RvcmUodXNlQ2FsbGJhY2soKGNhbGxiYWNrKT0+c3Vic2NyaWJlQ2FjaGUoa2V5LCAoY3VycmVudCwgcHJldik9PntcbiAgICAgICAgICAgIGlmICghaXNFcXVhbChwcmV2LCBjdXJyZW50KSkgY2FsbGJhY2soKTtcbiAgICAgICAgfSksIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKSwgZ2V0U25hcHNob3RbMF0sIGdldFNuYXBzaG90WzFdKTtcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9ICFpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGhhc1JldmFsaWRhdG9yID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV0gJiYgRVZFTlRfUkVWQUxJREFUT1JTW2tleV0ubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gY2FjaGVkLmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGlzVW5kZWZpbmVkKGNhY2hlZERhdGEpID8gZmFsbGJhY2sgOiBjYWNoZWREYXRhO1xuICAgIGNvbnN0IGVycm9yID0gY2FjaGVkLmVycm9yO1xuICAgIC8vIFVzZSBhIHJlZiB0byBzdG9yZSBwcmV2aW91c2x5IHJldHVybmVkIGRhdGEuIFVzZSB0aGUgaW5pdGlhbCBkYXRhIGFzIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgIGNvbnN0IGxhZ2d5RGF0YVJlZiA9IHVzZVJlZihkYXRhKTtcbiAgICBjb25zdCByZXR1cm5lZERhdGEgPSBrZWVwUHJldmlvdXNEYXRhID8gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBsYWdneURhdGFSZWYuY3VycmVudCA6IGNhY2hlZERhdGEgOiBkYXRhO1xuICAgIC8vIC0gU3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUncyBzdGFsZSBkYXRhIGZvciB0aGUgaW5pdGlhbCByZW5kZXIuXG4gICAgLy8gLSBOb3Qgc3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUgaXMgbm8gZmFsbGJhY2sgZGF0YSBhbmQgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkLlxuICAgIC8vIC0gYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkIGJ1dCBgZGF0YWAgaXMgbm90IGRlZmluZWQuXG4gICAgY29uc3Qgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uID0gKCgpPT57XG4gICAgICAgIC8vIGlmIGEga2V5IGFscmVhZHkgaGFzIHJldmFsaWRhdG9ycyBhbmQgYWxzbyBoYXMgZXJyb3IsIHdlIHNob3VsZCBub3QgdHJpZ2dlciByZXZhbGlkYXRpb25cbiAgICAgICAgaWYgKGhhc1JldmFsaWRhdG9yICYmICFpc1VuZGVmaW5lZChlcnJvcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnQgJiYgIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSkgcmV0dXJuIHJldmFsaWRhdGVPbk1vdW50O1xuICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIFVuZGVyIHN1c3BlbnNlIG1vZGUsIGl0IHdpbGwgYWx3YXlzIGZldGNoIG9uIHJlbmRlciBpZiB0aGVyZSBpcyBub1xuICAgICAgICAvLyBzdGFsZSBkYXRhIHNvIG5vIG5lZWQgdG8gcmV2YWxpZGF0ZSBpbW1lZGlhdGVseSBtb3VudCBpdCBhZ2Fpbi5cbiAgICAgICAgLy8gSWYgZGF0YSBleGlzdHMsIG9ubHkgcmV2YWxpZGF0ZSBpZiBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIHRydWUuXG4gICAgICAgIGlmIChzdXNwZW5zZSkgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpID8gZmFsc2UgOiByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3RhbGUgZGF0YSwgd2UgbmVlZCB0byByZXZhbGlkYXRlIHdoZW4gbW91bnQ7XG4gICAgICAgIC8vIElmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgc2V0IHRvIHRydWUsIHdlIHdpbGwgYWx3YXlzIHJldmFsaWRhdGUuXG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChkYXRhKSB8fCByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9KSgpO1xuICAgIC8vIFJlc29sdmUgdGhlIGRlZmF1bHQgdmFsaWRhdGluZyBzdGF0ZTpcbiAgICAvLyBJZiBpdCdzIGFibGUgdG8gdmFsaWRhdGUsIGFuZCBpdCBzaG91bGQgcmV2YWxpZGF0ZSB3aGVuIG1vdW50LCB0aGlzIHdpbGwgYmUgdHJ1ZS5cbiAgICBjb25zdCBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlID0gISEoa2V5ICYmIGZldGNoZXIgJiYgaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKTtcbiAgICBjb25zdCBpc1ZhbGlkYXRpbmcgPSBpc1VuZGVmaW5lZChjYWNoZWQuaXNWYWxpZGF0aW5nKSA/IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgOiBjYWNoZWQuaXNWYWxpZGF0aW5nO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc0xvYWRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc0xvYWRpbmc7XG4gICAgLy8gVGhlIHJldmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBhIGNhcmVmdWxseSBjcmFmdGVkIHdyYXBwZXIgb2YgdGhlIG9yaWdpbmFsXG4gICAgLy8gYGZldGNoZXJgLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBtYW55IGVkZ2UgY2FzZXMuXG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChyZXZhbGlkYXRlT3B0cyk9PntcbiAgICAgICAgY29uc3QgY3VycmVudEZldGNoZXIgPSBmZXRjaGVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICgha2V5IHx8ICFjdXJyZW50RmV0Y2hlciB8fCB1bm1vdW50ZWRSZWYuY3VycmVudCB8fCBnZXRDb25maWcoKS5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0RhdGE7XG4gICAgICAgIGxldCBzdGFydEF0O1xuICAgICAgICBsZXQgbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IG9wdHMgPSByZXZhbGlkYXRlT3B0cyB8fCB7fTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gb25nb2luZyBjb25jdXJyZW50IHJlcXVlc3QsIG9yIGBkZWR1cGVgIGlzIG5vdCBzZXQsIGFcbiAgICAgICAgLy8gbmV3IHJlcXVlc3Qgc2hvdWxkIGJlIGluaXRpYXRlZC5cbiAgICAgICAgY29uc3Qgc2hvdWxkU3RhcnROZXdSZXF1ZXN0ID0gIUZFVENIW2tleV0gfHwgIW9wdHMuZGVkdXBlO1xuICAgICAgICAvKlxuICAgICAgICAgRm9yIFJlYWN0IDE3XG4gICAgICAgICBEbyB1bm1vdW50IGNoZWNrIGZvciBjYWxsczpcbiAgICAgICAgIElmIGtleSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIHJldmFsaWRhdGlvbiwgb3IgdGhlIGNvbXBvbmVudCBoYXMgYmVlblxuICAgICAgICAgdW5tb3VudGVkLCBvbGQgZGlzcGF0Y2ggYW5kIG9sZCBldmVudCBjYWxsYmFja3Mgc2hvdWxkIG5vdCB0YWtlIGFueVxuICAgICAgICAgZWZmZWN0XG5cbiAgICAgICAgRm9yIFJlYWN0IDE4XG4gICAgICAgIG9ubHkgY2hlY2sgaWYga2V5IGhhcyBjaGFuZ2VkXG4gICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdHdnL3JlYWN0LTE4L2Rpc2N1c3Npb25zLzgyXG4gICAgICAqLyBjb25zdCBjYWxsYmFja1NhZmVndWFyZCA9ICgpPT57XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF1bm1vdW50ZWRSZWYuY3VycmVudCAmJiBrZXkgPT09IGtleVJlZi5jdXJyZW50ICYmIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5ID09PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVGhlIGZpbmFsIHN0YXRlIG9iamVjdCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzLlxuICAgICAgICBjb25zdCBmaW5hbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlID0gKCk9PntcbiAgICAgICAgICAgIHNldENhY2hlKGZpbmFsU3RhdGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjbGVhbnVwU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBzdGlsbCB0aGUgc2FtZSByZXF1ZXN0IGJlZm9yZSBkZWxldGluZyBpdC5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJbmZvID0gRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SW5mbyAmJiByZXF1ZXN0SW5mb1sxXSA9PT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTdGFydCBmZXRjaGluZy4gQ2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZSwgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIC8vIEl0IGlzIGluIHRoZSBgaXNMb2FkaW5nYCBzdGF0ZSwgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgbm8gY2FjaGVkIGRhdGEuXG4gICAgICAgIC8vIFRoaXMgYnlwYXNzZXMgZmFsbGJhY2sgZGF0YSBhbmQgbGFnZ3kgZGF0YS5cbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGdldENhY2hlKCkuZGF0YSkpIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgc2V0Q2FjaGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAvLyBJZiBubyBjYWNoZSBpcyBiZWluZyByZW5kZXJlZCBjdXJyZW50bHkgKGl0IHNob3dzIGEgYmxhbmsgcGFnZSksXG4gICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgIGlmIChjb25maWcubG9hZGluZ1RpbWVvdXQgJiYgaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZyAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25Mb2FkaW5nU2xvdyhrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSByZXF1ZXN0IGFuZCBzYXZlIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgICAgLy8gS2V5IG11c3QgYmUgdHJ1dGh5IGlmIGVudGVyaW5nIGhlcmUuXG4gICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZldGNoZXIoZm5BcmcpLFxuICAgICAgICAgICAgICAgICAgICBnZXRUaW1lc3RhbXAoKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbbmV3RGF0YSwgc3RhcnRBdF0gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgbmV3RGF0YSA9IGF3YWl0IG5ld0RhdGE7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXNuJ3QgaW50ZXJydXB0ZWQsIGNsZWFuIGl0IHVwIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChjbGVhbnVwU3RhdGUsIGNvbmZpZy5kZWR1cGluZ0ludGVydmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgY3VycmVudCBvbmUgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zOlxuICAgICAgICAgICAgLy8gICByZXExLS0tLS0tLS0tLS0tLS0tLS0tPnJlczEgICAgICAgIChjdXJyZW50IG9uZSlcbiAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAvLyB0aGUgcmVxdWVzdCB0aGF0IGZpcmVkIGxhdGVyIHdpbGwgYWx3YXlzIGJlIGtlcHQuXG4gICAgICAgICAgICAvLyBUaGUgdGltZXN0YW1wIG1heWJlIGJlIGB1bmRlZmluZWRgIG9yIGEgbnVtYmVyXG4gICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xlYXIgZXJyb3IuXG4gICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gVU5ERUZJTkVEO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgbXV0YXRpb25zKHMpLCB0aGF0IG92ZXJsYXBwZWQgd2l0aCB0aGUgY3VycmVudCByZXZhbGlkYXRpb246XG4gICAgICAgICAgICAvLyBjYXNlIDE6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMjpcbiAgICAgICAgICAgIC8vICAgICAgICAgcmVxLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICBtdXRhdGUtLS0tLS0+ZW5kXG4gICAgICAgICAgICAvLyBjYXNlIDM6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLS0uLi4tLS0tLS0tLS0tPlxuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBpZ25vcmUgdGhlIHJldmFsaWRhdGlvbiByZXN1bHQgKHJlcykgYmVjYXVzZSBpdCdzIG5vIGxvbmdlciBmcmVzaC5cbiAgICAgICAgICAgIC8vIG1lYW53aGlsZSwgYSBuZXcgcmV2YWxpZGF0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbXV0YXRpb24gZW5kcy5cbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uSW5mbyA9IE1VVEFUSU9OW2tleV07XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKG11dGF0aW9uSW5mbykgJiYgLy8gY2FzZSAxXG4gICAgICAgICAgICAoc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMF0gfHwgLy8gY2FzZSAyXG4gICAgICAgICAgICBzdGFydEF0IDw9IG11dGF0aW9uSW5mb1sxXSB8fCAvLyBjYXNlIDNcbiAgICAgICAgICAgIG11dGF0aW9uSW5mb1sxXSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlZXAgY29tcGFyZSB3aXRoIHRoZSBsYXRlc3Qgc3RhdGUgdG8gYXZvaWQgZXh0cmEgcmUtcmVuZGVycy5cbiAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgY29uc3QgY2FjaGVEYXRhID0gZ2V0Q2FjaGUoKS5kYXRhO1xuICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbXBhcmUgZm4gY291bGQgYmUgY3VzdG9tIGZuXG4gICAgICAgICAgICAvLyBjYWNoZURhdGEgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gbmV3RGF0YSBldmVuIHdoZW4gY29tcGFyZSBmbiByZXR1cm5zIFRydWVcbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZGF0YSA9IGNvbXBhcmUoY2FjaGVEYXRhLCBuZXdEYXRhKSA/IGNhY2hlRGF0YSA6IG5ld0RhdGE7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25TdWNjZXNzKG5ld0RhdGEsIGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY2xlYW51cFN0YXRlKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICBjb25zdCB7IHNob3VsZFJldHJ5T25FcnJvciAgfSA9IGN1cnJlbnRDb25maWc7XG4gICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSwgZGlzY2FyZCBpdC5cbiAgICAgICAgICAgIGlmICghY3VycmVudENvbmZpZy5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3IGVycm9yLCBkb24ndCB1c2UgZGVlcCBjb21wYXJpc29uIGZvciBlcnJvcnMuXG4gICAgICAgICAgICAgICAgZmluYWxTdGF0ZS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAvLyBFcnJvciBldmVudCBhbmQgcmV0cnkgbG9naWMuIE9ubHkgZm9yIHRoZSBhY3R1YWwgcmVxdWVzdCwgbm90XG4gICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QgJiYgY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3IoZXJyLCBrZXksIGN1cnJlbnRDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmV0cnlPbkVycm9yID09PSB0cnVlIHx8IGlzRnVuY3Rpb24oc2hvdWxkUmV0cnlPbkVycm9yKSAmJiBzaG91bGRSZXRyeU9uRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGluYWN0aXZlLCBzdG9wLiBJdCB3aWxsIGF1dG8tcmV2YWxpZGF0ZSB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmb2N1c2luZyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBsaWNhdGlvbiBpcyBhbHdheXMgZW5hYmxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3JSZXRyeShlcnIsIGtleSwgY3VycmVudENvbmZpZywgcmV2YWxpZGF0ZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50OiAob3B0cy5yZXRyeUNvdW50IHx8IDApICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdXBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFyayBsb2FkaW5nIGFzIHN0b3BwZWQuXG4gICAgICAgIGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IGhvb2sncyBzdGF0ZS5cbiAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIC8vIGBzZXRTdGF0ZWAgaXMgaW1tdXRhYmxlLCBhbmQgYGV2ZW50c0NhbGxiYWNrYCwgYGZuQXJnYCwgYW5kXG4gICAgLy8gYGtleVZhbGlkYXRpbmdgIGFyZSBkZXBlbmRpbmcgb24gYGtleWAsIHNvIHdlIGNhbiBleGNsdWRlIHRoZW0gZnJvbVxuICAgIC8vIHRoZSBkZXBzIGFycmF5LlxuICAgIC8vXG4gICAgLy8gRklYTUU6XG4gICAgLy8gYGZuYCBhbmQgYGNvbmZpZ2AgbWlnaHQgYmUgY2hhbmdlZCBkdXJpbmcgdGhlIGxpZmVjeWNsZSxcbiAgICAvLyBidXQgdGhleSBtaWdodCBiZSBjaGFuZ2VkIGV2ZXJ5IHJlbmRlciBsaWtlIHRoaXMuXG4gICAgLy8gYHVzZVNXUigna2V5JywgKCkgPT4gZmV0Y2goJy9hcGkvJyksIHsgc3VzcGVuc2U6IHRydWUgfSlgXG4gICAgLy8gU28gd2Ugb21pdCB0aGUgdmFsdWVzIGZyb20gdGhlIGRlcHMgYXJyYXlcbiAgICAvLyBldmVuIHRob3VnaCBpdCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW1xuICAgICAgICBrZXksXG4gICAgICAgIGNhY2hlXG4gICAgXSk7XG4gICAgLy8gU2ltaWxhciB0byB0aGUgZ2xvYmFsIG11dGF0ZSBidXQgYm91bmQgdG8gdGhlIGN1cnJlbnQgY2FjaGUgYW5kIGtleS5cbiAgICAvLyBgY2FjaGVgIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBjb25zdCBib3VuZE11dGF0ZSA9IHVzZUNhbGxiYWNrKC8vIFVzZSBjYWxsYmFjayB0byBtYWtlIHN1cmUgYGtleVJlZi5jdXJyZW50YCByZXR1cm5zIGxhdGVzdCByZXN1bHQgZXZlcnkgdGltZVxuICAgICguLi5hcmdzKT0+e1xuICAgICAgICByZXR1cm4gaW50ZXJuYWxNdXRhdGUoY2FjaGUsIGtleVJlZi5jdXJyZW50LCAuLi5hcmdzKTtcbiAgICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIC8vIFRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgcmVmcy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGZldGNoZXJSZWYuY3VycmVudCA9IGZldGNoZXI7XG4gICAgICAgIGNvbmZpZ1JlZi5jdXJyZW50ID0gY29uZmlnO1xuICAgICAgICAvLyBIYW5kbGUgbGFnZ3kgZGF0YSB1cGRhdGVzLiBJZiB0aGVyZSdzIGNhY2hlZCBkYXRhIG9mIHRoZSBjdXJyZW50IGtleSxcbiAgICAgICAgLy8gaXQnbGwgYmUgdGhlIGNvcnJlY3QgcmVmZXJlbmNlLlxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGNhY2hlZERhdGEpKSB7XG4gICAgICAgICAgICBsYWdneURhdGFSZWYuY3VycmVudCA9IGNhY2hlZERhdGE7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBZnRlciBtb3VudGVkIG9yIGtleSBjaGFuZ2VkLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc29mdFJldmFsaWRhdGUgPSByZXZhbGlkYXRlLmJpbmQoVU5ERUZJTkVELCBXSVRIX0RFRFVQRSk7XG4gICAgICAgIC8vIEV4cG9zZSByZXZhbGlkYXRvcnMgdG8gZ2xvYmFsIGV2ZW50IGxpc3RlbmVycy4gU28gd2UgY2FuIHRyaWdnZXJcbiAgICAgICAgLy8gcmV2YWxpZGF0aW9uIGZyb20gdGhlIG91dHNpZGUuXG4gICAgICAgIGxldCBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gMDtcbiAgICAgICAgY29uc3Qgb25SZXZhbGlkYXRlID0gKHR5cGUpPT57XG4gICAgICAgICAgICBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uRm9jdXMgJiYgbm93ID4gbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSBub3cgKyBnZXRDb25maWcoKS5mb2N1c1Rocm90dGxlSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuTVVUQVRFX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdW5zdWJFdmVudHMgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIEVWRU5UX1JFVkFMSURBVE9SUywgb25SZXZhbGlkYXRlKTtcbiAgICAgICAgLy8gTWFyayB0aGUgY29tcG9uZW50IGFzIG1vdW50ZWQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIHJlZnMuXG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGtleVJlZi5jdXJyZW50ID0ga2V5O1xuICAgICAgICBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwga2V5IGluIHRoZSBjYWNoZS5cbiAgICAgICAgc2V0Q2FjaGUoe1xuICAgICAgICAgICAgX2s6IGZuQXJnXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgcmV2YWxpZGF0ZSBpZiB3ZSBoYXZlIGRhdGEgdG8gcmV0dXJuIHNvIHdlIHdvbid0IGJsb2NrXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgIHJBRihzb2Z0UmV2YWxpZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViRXZlbnRzKCk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBsZXQgdGltZXI7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIHBhc3NlZCBpbnRlcnZhbFxuICAgICAgICAgICAgLy8gLi4ub3IgaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSB1cGRhdGVkIGRhdGEgdG8gZ2V0IHRoZSBpbnRlcnZhbFxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbCkgPyByZWZyZXNoSW50ZXJ2YWwoZGF0YSkgOiByZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHN0YXJ0IHRoZSBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUsIGFuZCBub3QgZXJyb3JlZC5cbiAgICAgICAgICAgIGlmICghZ2V0Q2FjaGUoKS5lcnJvciAmJiAocmVmcmVzaFdoZW5IaWRkZW4gfHwgZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkpICYmIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmICh0aW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgdGltZXIgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbCxcbiAgICAgICAgcmVmcmVzaFdoZW5IaWRkZW4sXG4gICAgICAgIHJlZnJlc2hXaGVuT2ZmbGluZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gRGlzcGxheSBkZWJ1ZyBpbmZvIGluIFJlYWN0IERldlRvb2xzLlxuICAgIHVzZURlYnVnVmFsdWUocmV0dXJuZWREYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIFNXUiBzaG91bGQgdGhyb3cgd2hlbiB0cnlpbmcgdG8gdXNlIFN1c3BlbnNlIG9uIHRoZSBzZXJ2ZXIgd2l0aCBSZWFjdCAxOCxcbiAgICAgICAgLy8gd2l0aG91dCBwcm92aWRpbmcgYW55IGluaXRpYWwgZGF0YS4gU2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTgzMlxuICAgICAgICBpZiAoIUlTX1JFQUNUX0xFR0FDWSAmJiBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFsbGJhY2sgZGF0YSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHN1c3BlbnNlIGluIFNTUi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGZldGNoZXIgYW5kIGNvbmZpZyByZWZzIGV2ZW4gd2l0aCB0aGUgU3VzcGVuc2UgbW9kZS5cbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHRocm93IGlzVW5kZWZpbmVkKGVycm9yKSA/IHJldmFsaWRhdGUoV0lUSF9ERURVUEUpIDogZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG11dGF0ZTogYm91bmRNdXRhdGUsXG4gICAgICAgIGdldCBkYXRhICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkRGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVycm9yICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzVmFsaWRhdGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzTG9hZGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgU1dSQ29uZmlnID0gT0JKRUNULmRlZmluZVByb3BlcnR5KFNXUkNvbmZpZyQxLCAnZGVmYXVsdFZhbHVlJywge1xuICAgIHZhbHVlOiBkZWZhdWx0Q29uZmlnXG59KTtcbmNvbnN0IHVuc3RhYmxlX3NlcmlhbGl6ZSA9IChrZXkpPT5zZXJpYWxpemUoa2V5KVswXTtcbi8qKlxuICogQSBob29rIHRvIGZldGNoIGRhdGEuXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9zd3IudmVyY2VsLmFwcFxuICogQGV4YW1wbGVcbiAqIGBgYGpzeFxuICogaW1wb3J0IHVzZVNXUiBmcm9tICdzd3InXG4gKiBmdW5jdGlvbiBQcm9maWxlKCkge1xuICogICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSB1c2VTV1IoJy9hcGkvdXNlcicsIGZldGNoZXIpXG4gKiAgIGlmIChlcnJvcikgcmV0dXJuIDxkaXY+ZmFpbGVkIHRvIGxvYWQ8L2Rpdj5cbiAqICAgaWYgKCFkYXRhKSByZXR1cm4gPGRpdj5sb2FkaW5nLi4uPC9kaXY+XG4gKiAgIHJldHVybiA8ZGl2PmhlbGxvIHtkYXRhLm5hbWV9ITwvZGl2PlxuICogfVxuICogYGBgXG4gKi8gdmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgdW5zdGFibGVfc2VyaWFsaXplIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTV1JDb25maWcgfSBmcm9tIFwic3dyXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTV1JIb29rc0NvbmZpZygpIHtcbiAgICB2YXIgc3dyQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgdmFyIHZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBtdXRhdGU6IHN3ckNvbmZpZy5tdXRhdGUsIGNhY2hlOiBzd3JDb25maWcuY2FjaGUgfSk7IH0sIFtzd3JDb25maWcubXV0YXRlLCBzd3JDb25maWcuY2FjaGVdKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VTV1JIb29rc0NvbmZpZy5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKGluaXRpYWxWYWx1ZSkge1xuICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgeyBpbml0aWFsVmFsdWUgPSBmYWxzZTsgfVxuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShpbml0aWFsVmFsdWUpLCAyKSwgdmFsdWUgPSBfYVswXSwgc2V0VmFsdWUgPSBfYVsxXTtcbiAgICB2YXIgdG9nZ2xlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShmdW5jdGlvbiAocHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlVG9nZ2xlLmpzLm1hcCIsInZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYyhvYmopIHtcbiAgdmFyIG91dCA9IFwiXCJcblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiKSByZXR1cm4gb2JqIHx8IFwiXCJcblxuICBpZiAoaXNBcnJheShvYmopKVxuICAgIGZvciAodmFyIGsgPSAwLCB0bXA7IGsgPCBvYmoubGVuZ3RoOyBrKyspIHtcbiAgICAgIGlmICgodG1wID0gY2Mob2JqW2tdKSkgIT09IFwiXCIpIHtcbiAgICAgICAgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsgdG1wXG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykgJiYgb2JqW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ1bUtBWm1Ma0FSTHpYM2dudUtrcFwiLFwibGVmdFwiOlwidTFsNUFKR2JVaVA2UlZGSUt4T0lcIixcInNtYWxsXCI6XCJoeFpwSzlDcEJLMXdSMFcwdjRTRFwiLFwibGFyZ2VcIjpcIm85RFltdDR4ZkxhSW1pVnpJOWRRXCIsXCJ4bGFyZ2VcIjpcInFtRVZ4U1pTNWtmTDNhVmJlZTFuXCIsXCJpbnZlcnRlZFwiOlwiQ05PWkhMZDlYYm9rek9XNkxZQlBcIixcInJvdW5kZWRcIjpcImpKQ0F6dzJTeWFINHRJV1hyQWxSXCIsXCJyaWdodE9mZnNldFwiOlwiS0dDdTdhUGpReV9hRk5qSFdOdXdcIixcImxlZnRPZmZzZXRcIjpcImRESFl5R3pYTmk3NzNGQWwxM0dYXCIsXCJub1NoYWRvd1wiOlwibFFGMVljVXFNME9IdlBTbFN3bF9cIixcIm5vQm9yZGVyXCI6XCJzRW8yNUVpdjZ6czFEX3g1cThWeVwiLFwidHJhbnNwYXJlbnRcIjpcInZtM2NtQU5OdVlsYVFNNVlxejlHXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJQaWtmemo3ellnMkludGRKeW11S1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIm9TZ1Y1Y3dYNmlua1NiQ0c5OHc4XCIsXCJub1BhZGRpbmdcIjpcImdTWnJHUjF4cW04UTFpUlVmR2dhXCIsXCJjb250ZW50XCI6XCJwWUxVajlub0FxVDhXeXRqRE9PYlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImJ1dHRvbkJhZGdlXCI6XCJpT3lfdGhVZnd4SXFaT3JXU0l6eFwiLFwiaW52ZXJ0ZWRcIjpcImc3OWpqY1dWbm14TG9QTnlBeDQ5XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJVbmo0cnAxRHk3MUFDcnV6WGw3NVwiLFwibGVmdFwiOlwiRVhXTVJ2dmVSdlFpZml4elRIMDJcIixcInNtYWxsXCI6XCJfVTB6blVrNVFUQXpQblMyZ2FMQ1wiLFwibWVkaXVtXCI6XCJhSDh1NHMyTXRZYzV5NHZ5dWJEd1wiLFwibGFyZ2VcIjpcImMzMDZ5Vjc4YWxfZUd3QlNrbUZtXCIsXCJ4bGFyZ2VcIjpcInh2QTFtZVVtRTI4QUVPcGpzV2M5XCIsXCJpbnZlcnRlZFwiOlwiV0I3N1lJRE9Td0pvWDY4TmpsVUdcIixcInJvdW5kZWRcIjpcImsybkpDc0VOTmdDejJIbHNqX2JHXCIsXCJyaWdodE9mZnNldFwiOlwiakFlNUVWRTM3T3JLWXZrWGRjMXNcIixcImxlZnRPZmZzZXRcIjpcIkRnYnRCNkc0TG9CRGQwNFBfTXpPXCIsXCJub1NoYWRvd1wiOlwiS3BRSTk1X2Y4bkh2azdHMko2aDhcIixcInRyYW5zcGFyZW50XCI6XCJMOFBueFVRb2d6Z0ZNTVQ3UUk0ZFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSnVsYXhTY2NvR21xdGdUTkptazlcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ6VFlyOVc3ZzJTcWJWalBGQW9rR1wiLFwibm9QYWRkaW5nXCI6XCJVSHpUbTUxa1Z5bGw1Ml9TN3NHQlwiLFwibm9Cb3JkZXJcIjpcImhSUDFYWWZ1SjQ5VHNZVV9jTzVBXCIsXCJkaXNhYmxlZFwiOlwibHdXSVRQaE05VE1vNTg1RHNhdzhcIixcImNvbnRlbnRcIjpcIk15VF9QdWZKZEV2c1pFM2hTVzhQXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY2hlY2tib3hcIjpcInN5OGxLVldQNTZBbE9SN3lzXzlBXCIsXCJzbWFsbFwiOlwiWGpmcGN1UHRndUZadktyeHh0N3lcIixcIm1lZGl1bVwiOlwidExQM2RaV2VwWEgzSEtnMTdzT0hcIixcImxhcmdlXCI6XCJXZ3A5cUhXRHJRaTlmbWN4UUlWS1wiLFwieGxhcmdlXCI6XCJsVUE2dHBMa1djR0Znbm9xQ0Z2dVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yUGlja2VyXCI6XCJLazJkcDE1SHdNWnpJTmJVRkFaNFwiLFwiaG9yaXpvbnRhbFwiOlwiSnN6T19VZzdwS0xZUTBEZWhOOF9cIixcInZlcnRpY2FsXCI6XCJFVlQ2MmxnaEM5OWU5YmRqWWx5NVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yU3dhdGNoXCI6XCJQdmJlQm00U010TXFsUU5UeVFqUVwiLFwic21hbGxcIjpcIlM3RTNFUHlfQVdRdWtFZXh1dlRmXCIsXCJsYXJnZVwiOlwiYTFGc0l0S1BRRU9CZVRxQkN1RGxcIixcInhsYXJnZVwiOlwic0ZoZ1FFTl9VT0wzWnhPQVIxSWVcIixcInNlbGVjdGVkXCI6XCJhVXgydVNCU3MxNFZxd1BxanZsUVwiLFwic3JPbmx5XCI6XCJKSVFtZVpkZDlURmw1SV9naWZQaVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiWlpWSGNYNDVYQ2JsbURhYjlld1pcIixcIm1vZGFsSGVhZGVyXCI6XCJ4VFgxWEpmQ1NVc3JoX3lMbFpvaVwiLFwibW9kYWxDb250ZW50XCI6XCJUZTZqSGRseWpzUVhtblRzOWJhblwiLFwibm9QYWRkaW5nXCI6XCJMel9nd1N3UDNRQ041ell6RnNFaVwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJHaDF1dnhNZkVnUFRkdDY2UWlzMlwiLFwibW9kYWxCdXR0b25zXCI6XCJJYXczNEZrTUpxanJHUTU4QkdmeFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwickJhZlhrb1RDbjJBaDZ4WVlteGZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpbnB1dFwiOlwiS1drN29aOHR2UGZRaWNnUVlsVmFcIixcImxhYmVsXCI6XCJlNnpyeDdVT1BfQlNvTU0zR3JqUVwiLFwic21hbGxcIjpcImloU25EUWcweWd4Y1ZMSXlTSmtNXCIsXCJsYXJnZVwiOlwiRnB3aGJEN0hYeF91RlQzbDAxd2JcIixcInhsYXJnZVwiOlwiWVZkczR1X0RmV1NHMXIwU0FHblNcIixcImludmVydGVkXCI6XCJDS3lub0xoaUxkNkt6QVlpNU50R1wiLFwicm91bmRlZFwiOlwidjcybXpKdW1GU2lET09FMU1uWEhcIixcIm5vU2hhZG93XCI6XCJFb2V3SkVEYkdkdGVKX05SZlM1RlwiLFwibm9Cb3JkZXJcIjpcImNiN2w0eHZjTm5ITmxRWm1MamtiXCIsXCJub1BhZGRpbmdcIjpcInZjT3dEWXVHRjJldG9QZnlGRFg1XCIsXCJ0cmFuc3BhcmVudFwiOlwibDA4a2hhWElVT2NydUJGSHdzN1hcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkkweHZKYkIwTE5UMFMxNWpUTVdXXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiWDZmcVVjVkgxQmxDUkpCaWlKaWlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImoxbWZpWUVHb2xUUm1iQm1HS2xRXCIsXCJyb3dcIjpcIkVHYUt2bXFNMlNhd2lGclc4Q3R1XCIsXCJjb2x1bW5cIjpcIk5NaTBNVDFiN3JwMVpqeWU4VVZBXCIsXCJmaXhlZFwiOlwiZzBqM2trUXJfQWpDS0ZkOTRTMXNcIixcInBsYWluXCI6XCJGcjFxN1duRjFuRm5uYmZncGFSelwiLFwidHJhbnNwYXJlbnRcIjpcInVkUlplOUgwYktVSFhqT3dHMUZuXCIsXCJ0b3BcIjpcInVZaUt3NlZ2REVraGpaSHp2bzdlXCIsXCJ0b3BFZGdlXCI6XCJ0UmJFY1lqRTNLbmNzTndUYnZWTVwiLFwidG9wT25FZGdlXCI6XCJMR3VuRzM3WDFfSFJldXczcXp1YVwiLFwicmlnaHRcIjpcImx3MjdyR1ZsbzM0YXhDeHczUUhpXCIsXCJyaWdodEVkZ2VcIjpcIlBaSXR2bGVGSUlqMEp4Mk1pa1JFXCIsXCJyaWdodE9uRWRnZVwiOlwiS051R2FEUHE5cm1YZmdtTzNwY2JcIixcImJvdHRvbVwiOlwiZG4xdWgxdGFzR3hER3FtVTE4SE5cIixcImJvdHRvbUVkZ2VcIjpcImVEMFVDckJScHNSVFBQd3dJb1ZnXCIsXCJib3R0b21PbkVkZ2VcIjpcIklyaEg1Z2Z5R3NRNmtkY1A5NFJRXCIsXCJsZWZ0XCI6XCJENWZHSG5BR0NNUjRMdGI5eTRIclwiLFwibGVmdEVkZ2VcIjpcIl9BdEFkMnRyN3Qxa1h1c1JiWFN6XCIsXCJsZWZ0T25FZGdlXCI6XCJfOEM5ZGQwWF9KWFk0dUh6dzVOalwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiUURrczhvdnQ5UlZjRldlRUI4d2JcIixcInZlcnRpY2FsQ2VudGVyXCI6XCJDVnVRUkU2NTJHSDJWSm44ek9Uc1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImljb25cIjpcImZwX0JMSjJGVzRPeXliMGJIaUQ0XCIsXCJzbWFsbFwiOlwienNWRE5mTlJrb3MwUTV1djlGUjlcIixcIm1lZGl1bVwiOlwiZVNsaWwzZXZQdFBCc3dXRjgwQzVcIixcImxhcmdlXCI6XCJUN1VMeXExeUU5QVZYRU1rblY0R1wiLFwieGxhcmdlXCI6XCJRUEFjZVZRZFo2UUlRMlF2aWp3Z1wiLFwiaW52ZXJ0ZWRcIjpcIm1GVEdiaExhNE5sVU8xNm52SnJrXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJXY2VteXIyR3I4WkNHYzZCamJxd1wiLFwic21hbGxcIjpcIlRfcGE4Q2NwTDFHdnVEc2R2c3FxXCIsXCJtZWRpdW1cIjpcIm5MTEVyak9nZmE1YjJzT2VaclE1XCIsXCJsYXJnZVwiOlwiUTcxTkZCSHJTeFFMUUU0QUdEMmhcIixcInhsYXJnZVwiOlwiRWJCaXlGMXJnNndSYXhTTUs4c29cIixcInJvdW5kZWRcIjpcInRManV3UlNzSWlMSkdWc3JhcmJkXCIsXCJ0b3BPZmZzZXRcIjpcImQ0S0xwSTc5Q3VTVTZna1BQSW5BXCIsXCJyaWdodE9mZnNldFwiOlwiRzdoSlpvWXY4cUlyTm1GQ3lnTUVcIixcImJvdHRvbU9mZnNldFwiOlwiRFpzM0F2R2tWZE92SmZMZUo4R2hcIixcImxlZnRPZmZzZXRcIjpcIndFRW5XUmN2dXZvbWhfT0xPNWlxXCIsXCJpbnZlcnRlZFwiOlwiSzlXR0NGcFVhZE85V0lYd0Zhal9cIixcIm5vU2hhZG93XCI6XCJlQVFKMTBrRWtQbUR4TUd2bFl6eVwiLFwibm9Cb3JkZXJcIjpcIk9sRU5SOW50dVdZTEdPS0tLckdSXCIsXCJ0cmFuc3BhcmVudFwiOlwiS09jc1ByaXZyOTRyeG5mSFZsZmVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImdVU1R5M19OcDFtR0pIVzFOM2d4XCIsXCJzbWFsbFwiOlwiSVl1VnpoMUhCemdvVENpMldRX3BcIixcIm1lZGl1bVwiOlwiSk5nM19iQ0VmSXZpNGdlRWNzUzNcIixcImxhcmdlXCI6XCJuNjFzYXhBMjBfRXdNZ3Q5R3c0c1wiLFwieGxhcmdlXCI6XCJncUdudm5IOVg2bUd2endsNGFHelwiLFwicm91bmRlZFwiOlwiRGt6dXFoRWFpTVIzWE1zMU0xSWZcIixcInRvcE9mZnNldFwiOlwic0dudmV2dnN4QlpVYVhycFpRcElcIixcInJpZ2h0T2Zmc2V0XCI6XCJoZ1kzWnBreUQ3MHA3RThybjNiaVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJST29RWTZPYVJuUXpET2ZYX1FERlwiLFwibGVmdE9mZnNldFwiOlwiS2V2bTU4MmUzZ1hQSkUzT0RvcGFcIixcImludmVydGVkXCI6XCJPT3puQ2JBYmpPTGM0X2JDRXFmeVwiLFwibm9TaGFkb3dcIjpcInhySHhmY2UwMzRkZ1lORWtubFZNXCIsXCJub0JvcmRlclwiOlwiZUh0X1JJcThKR29ZSGM0aUNvZWdcIixcInRyYW5zcGFyZW50XCI6XCJuZmdxdFNnZnJ0ckdGRFdmWm9uUVwiLFwiZGlzYWJsZWRcIjpcIklfbmhKOXU2cFREXzJTRjNxbF9sXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJyTzVXNkRRazROdG9XcndtS01XZ1wiLFwiaGFzT3ZlcmxheVwiOlwibGx2bm1JOEsxM2c5UFRCaUNOejNcIixcIm92ZXJsYXlcIjpcIkdWazJqOHdWMXQzZ1k1dVhRNHFJXCIsXCJpbWFnZVwiOlwiZ1hqWXFLZTl3M05nWXVyWXdVUXBcIixcImNvdmVyXCI6XCJfbDdPTk9XYXlyOHR5dUdpeVVzY1wiLFwiY29udGFpblwiOlwiU1lqT2I4bEFobURiZHlsRklRWTlcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkhrcm96U2ZsbFRGbGtrYnF4WFdoXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwieHlIWGhoSEVZWE1ZZWF2V1p3X05cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlJEWnlsQ01sR2ZlQ1V3U2J5ZUlxXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJpOEd1X1cxdzhXQkFZZmxMSVl6d1wiLFwiaGVhZGVyXCI6XCJHcDdSOHdZd2FMdEZvS0ZjUnRnTlwiLFwiaGVhZGVyTGFiZWxcIjpcIlZHa290TVRucVBSYUtjR1Y4UmpnXCIsXCJsaXN0XCI6XCJ2ZzlRTHRDWVRBczV4M2ZGNzl6cFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImxpc3RWaWV3SXRlbVwiOlwiWkZVZDdvU3BQTHQwRWQyWHFhV1pcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJ4UTlCZmswWDFIbVpnaWhDdXRaVlwiLFwib3BlblwiOlwidXR2OUZZT1U3UTBKTm5aVzFlanZcIixcImVudHJhbmNlXCI6XCJ5WUtqY0N2RDJMOTRGcFBnT2lnUVwiLFwiaGVhZGVyXCI6XCJ3Tkw4NnM5ekdGaThYSzExS2xvUlwiLFwiZm9vdGVyXCI6XCJtdTRKZXYxYzRLY2lmZUY4TXpxZ1wiLFwibm9Cb3JkZXJcIjpcIkVhUFNqTDFuWHN6N1RDeDExTHJmXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrWWg3REtZcUg2amRMWGQ3UGRKd1wiLFwibWVudUNvbnRhaW5lclwiOlwiUWxlQU8zeW1UbGlVNlpOQlF4ZmdcIixcInRvcFwiOlwiYXhmY3JqU0g0bHZ1anpyc2syUXBcIixcInJpZ2h0XCI6XCJMdFZsdFczQlBaNWdOWFZ4eGtyUFwiLFwibGVmdFwiOlwiUFJiNWY4WGNNWk9jWTV1ZlBNZHFcIixcImJvdHRvbVwiOlwiX19NWjVPb2lJclZpZEZYYlFmanVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51SXRlbVwiOlwiZ0daZl9Hc1dzd2tyME5URF9uYlFcIixcIm5vUGFkZGluZ1wiOlwiQ00yYkhTQ3h3dWl0TWVzN3U5V2ZcIixcImFjdGl2ZVwiOlwiczR0SmxLNE9GYzNyblhMME14cWtcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51TGlua0l0ZW1cIjpcIlgxRjRTUWtoUWgwZnh6NVl1M3RIXCIsXCJub1BhZGRpbmdcIjpcImtwRExYWlNEMktwMTloOXN1UkxBXCIsXCJhY3RpdmVcIjpcIkl3SVRqR242dlRadGVFS2pOb1ljXCIsXCJtZW51SXRlbVwiOlwibGRvUjZwR09ydGdITVhTcG1IN0ZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJqMGg5aGRfZ2x2STl4ZE9uYWF1WVwiLFwibm9PdmVybGF5XCI6XCJTTDQ4U3padWZLZ2RNaUdZM1lUTlwiLFwibW9kYWxcIjpcImhUWGNaZXZHeXlJMEFjdnByWFZKXCIsXCJ0cmFuc3BhcmVudFwiOlwiaWJxbG9HMUh4SHgzc3Rka1ZaU2pcIixcIm5vU2hhZG93XCI6XCJJRW81dkVlZnR2THBtd2kwVnlqRFwiLFwibW9kYWxCdXR0b25cIjpcIkZvUGZDM2o3Y0lnMkJZZnpxUUdFXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibnVtcGFkXCI6XCJHZXZiYkczRDBSMzR4R1VGczVZMVwiLFwibnVtYmVyc1wiOlwiZkw1STFXS1hDYVU5dnJCR3lKQjRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJEaDZqc1ExNWVNeWRzU01UQ3dSd1wiLFwidHJhbnNwYXJlbnRcIjpcIldUNk9QbGpDMnFmYkFXc2swejRyXCIsXCJmaXhlZFwiOlwicHU2czlNajVUMVlJZ212NExPbkNcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJoZWFkZXJcIjpcIldTWVlCQXo1M2RocXVJT1pQV0JQXCIsXCJsYWJlbFwiOlwiYjU1aHlaMG9IbDBzNE90OU9od01cIixcImV4cGFuZGVkXCI6XCJOM0F6TzVrWmxoNEhBUGtubll6cVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiU21DaTR4T3hFc0x0aTYxR29ZazRcIixcInNlbGVjdGVkXCI6XCJfNHJKdENPWnBuZjN4bjhwbUZ2Q1FcIixcImNoZWNrYm94Q29udGFpbmVyXCI6XCJNU1haRjd4Y0M1YW9xSGxxcEkwZ1wiLFwiY2hlY2tib3hcIjpcIk5KanE5X2dBZWREUnJPRV9YV0UxXCIsXCJsYWJlbFwiOlwidndtRExjOTZEOXRYZ1dxczRJS3pcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImUzeVhKQnJZVFc0c1ZaS1kyTkZtXCIsXCJzZWxlY3RBbGxDb250YWluZXJcIjpcImN6SExhNEwzdFJDSkRDaURCNkF6XCIsXCJjaGVja2JveFwiOlwiaUtxaldVZDk2elNwOXhtb2NYemtcIixcImNoZWNrYm94Q29udGFpbmVyXCI6XCJheGloOUVudXpLMWZ3aHFZRFZSQVwiLFwibGFiZWxcIjpcInE1V3M5aHI4Wk1YN2ZTdkRLX3FuXCIsXCJub09wdGlvbnNcIjpcIm92S3ZCNUg4RW9Gem51TXFVdWpsXCIsXCJzZWFyY2hLZXl3b3JkXCI6XCJUd2NWYVJEejhjb2tJSzlEOUR4SlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiaXgzYVpXTWVONUFsNFVLOHllYkpcIixcImljb25TZWFyY2hDb250YWluZXJcIjpcIlo1TFB4NDd5YkVLZVgyOVhCWUJDXCIsXCJyZXNldEJ1dHRvblwiOlwiaGpUOVpYdm12YzVRVXJ1d3o4RWxcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkVUR2JYVGRZQXAwRzQwVEpQTG5LXCIsXCJkaXNhYmxlZFwiOlwibkVDZ0dkWE9zcFVyUVdIanp3a2dcIixcImhlYWRlclwiOlwiWEFvSmh4VEFwY1I5bEdlZ3lwOUFcIixcImFjdGl2ZVwiOlwiZWJlbXp0WkVXSVY0XzZBc0tQUUhcIixcImNvbnRlbnRcIjpcInJSRFd2MnFxd1NyQnkzZXZaN0R3XCIsXCJub09wdGlvbnNcIjpcImZMUDR4NEl4bnlpV2hwNUJQNXNUXCIsXCJzZWFyY2hDb250YWluZXJcIjpcInlPRUNESmVEVlQ1ejVZYVhwZUpuXCIsXCJpY29uQnV0dG9uXCI6XCJhVktwM0gzSldyYUJmN0c1VWRhUFwiLFwiZXhwYW5kZWRcIjpcIkJyeHJ0RDNhTVg3SVU1MnJBMjIwXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wicGxhY2Vob2xkZXJcIjpcImRkbFJpZG5JelloUUM5REdwZ0l0XCIsXCJhY3RpdmVcIjpcInNoSHNFSkd0Yno0Y21BNngxRzFsXCIsXCJ0YWdXcmFwcGVyXCI6XCJCR0VTaGM3cXUyZms5RFpFMlJVc1wiLFwic2VsZWN0ZWRPcHRpb25cIjpcIm1hOUJJanVHQ1FlS0Y0NHNndWNUXCIsXCJzZWxlY3RlZE9wdGlvbnNcIjpcIm5ScEF3djk3Q2VzcVFiRExjZXQ5XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnNU9SMGFPTk9XMU9zMXh0a05IaVwiLFwidGFibGVcIjpcInNNUjFWYjYyWEV2T09XUnJXYzRRXCIsXCJwbGFjZWhvbGRlckNvbnRhaW5lclwiOlwiXzd4Mno3cF9rYlFPTERtRVg1NGlBXCIsXCJzY3JvbGxiYXJDb250YWluZXJcIjpcIkVBSDE0WFBlSkJ1RFdHcDVOVllvXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJqNFBpZ0pPTDVEZ3pEOE9ZeHNrelwiLFwiaXNIZWFkZXJTdGlja3lcIjpcIkFZUl80SGVvbEFqSkNPc2wzSFpKXCIsXCJib3JkZXJCb3R0b21cIjpcImlackQzdEgxMnpESUZPV3ZKVUQ3XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGFibGVIZWFkZXJDZWxsXCI6XCJKY0ExVnpWNE13VlEzTkVoMHZ6RVwiLFwic29ydEljb25WaXNpYmxlXCI6XCJJcTdPeHNRekwwNnhqOThPMExxSlwiLFwic29ydGFibGVcIjpcIlZTVFNoWTdMVGhfSUlqbnJQX19sXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJkT3ZpZ1NnaHh5UTRDYmJDTWtDUlwiLFwiYWN0aXZlXCI6XCJ0cW5ZZFkwSHREbG1XNjF0akdiUVwiLFwiaGFzQXJyb3dcIjpcInFxTzZhMWpOTDZIVEpHN0hSMTF0XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJBdlI3V0NEUnhDd3ZSVUFfajgwUFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiektGMzRhS3ZZWm5iTHVaempFZU9cIixcImNvbnRlbnRcIjpcIm9fMjFyX0VqTEtCM3hoZ0d5NzRzXCIsXCJjbG9zZUJ1dHRvblwiOlwiWlpQUlpMVXE5TVF5aWZEOHgyakhcIixcImRpc2FibGVkXCI6XCJ1Q0x6MHZiTm5RWkZYOGtWdVVpR1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZ3dZS1JQcEdkSU1WWGtpTjBIOUJcIixcInRhZ0lucHV0XCI6XCJhdkltR3MzWGNMZURMR2h4RDhid1wiLFwiZGlzYWJsZWRcIjpcInlUOFBwOFRVdlA3c1FTR2VHTE5KXCIsXCJ0ZXh0SW5wdXRcIjpcIlppTk5mMm9MVmpFeHhwOVJUMnNfXCIsXCJzbWFsbFwiOlwiTGVtTVVUc2VpZ3hIYm1JWVZWVGNcIixcIm1lZGl1bVwiOlwiUFVISmRNN1pFYjNMRlJlTTFfVWdcIixcImxhcmdlXCI6XCJqOW1rNTJoR2hvRndqdzRGV0hROVwiLFwieGxhcmdlXCI6XCJFaVdxZUZxUVhFOUxIVWgxdnhwWFwiLFwibm9Cb3JkZXJcIjpcIk82V3NPcFVab1plVGhVYl9WaVhuXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGV4dElucHV0XCI6XCJOUFpya3NDcG5YVkpTcV9zbkhqUlwiLFwic21hbGxcIjpcImpRR3JpUUpTYTA0enNvRzFhMnU5XCIsXCJtZWRpdW1cIjpcImxWb1k5RHAxN0hPQmluTWowUTdvXCIsXCJsYXJnZVwiOlwiUWxVYVBiWDhFYUlpN3JaNEZiOG9cIixcInhsYXJnZVwiOlwicllQT005Zk50VkxkUEZ5V0trR0VcIixcIm5vQm9yZGVyXCI6XCJLRFRJTnNIZG9sWVJlU2JMY29vSFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0XCI6XCJ6Rml1QVRnc1NCNDJWZEVtY0paWVwiLFwiZW50cmFuY2VcIjpcIlI4cnBPVU90bmdZT0V0N0kwcEdNXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIlhsTFFPZTQ3NE90QmlhY19nVTdIXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9vbHRpcFwiOlwiS202VVV5MGpwcU0wTEEyZVhjY2NcIixcInZpc2libGVcIjpcInVUb0pmY1JDUjZlVkhJbTgwd0diXCIsXCJub3RWaXNpYmxlXCI6XCJoR3hneWhQbVFtTTk3VmlPcGN2OFwiLFwibGVmdFwiOlwieUJ2MWx3REhwZXh4TzNEUHBkMXZcIixcInJpZ2h0XCI6XCJ2ODUyRXh4bVE2QXRTUUYyc1g4QVwiLFwidG9wXCI6XCJpVjJ5elBpem9vdTlvbVc4MTFoZ1wiLFwiYm90dG9tXCI6XCJWbW1FOEVOc0NremJ3THBMM1hKZ1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwieVk5SFY0MElUVFdnQVY4cUx3MXdcIixcImhhc092ZXJsYXlcIjpcInp1YjVicWRWWG00TkZ4cEk0SEJmXCIsXCJ2aWRlb1wiOlwiTVZDRFZqZmdtSEU3UWVtY1l4R2xcIixcImNvdmVyXCI6XCJWNG5FY20xNzl2WmUyTUxnUlZhTVwiLFwiY29udGFpblwiOlwidTJfTWZlQ2pNU2xfYUJOSm41bkxcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcImxqZnNZczhCUXFsZUt6Ykxra2FkXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiSEp0UnFiQUZMT25YVnlHejhpRlVcIixcIm92ZXJsYXlcIjpcIkFMSGhPSEFlTGxCRHkxRHBZcWl2XCJ9OyIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhpbnQgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmV4cG9ydHMuSGludCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIGNoaWxkID0gcmVhY3RfMS5kZWZhdWx0LkNoaWxkcmVuLm9ubHkocHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmICgoKF9iID0gKF9hID0gY2hpbGQudHlwZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvU3RyaW5nKCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50b0xvd2VyQ2FzZSgpKSAhPT0gJ2lucHV0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQ6ICdIaW50JyBvbmx5IGFjY2VwdHMgYW4gJ2lucHV0JyBlbGVtZW50IGFzIGNoaWxkLlwiKTtcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zLCBkaXNhYmxlSGludCA9IHByb3BzLmRpc2FibGVIaW50LCBhbGxvd1RhYkZpbGwgPSBwcm9wcy5hbGxvd1RhYkZpbGwsIGFsbG93RW50ZXJGaWxsID0gcHJvcHMuYWxsb3dFbnRlckZpbGwsIG9uRmlsbCA9IHByb3BzLm9uRmlsbCwgb25IaW50ID0gcHJvcHMub25IaW50LCB2YWx1ZU1vZGlmaWVyID0gcHJvcHMudmFsdWVNb2RpZmllcjtcbiAgICB2YXIgY2hpbGRQcm9wcyA9IGNoaWxkLnByb3BzO1xuICAgIHZhciBtYWluSW5wdXRSZWYgPSByZWFjdF8xLnVzZVJlZihudWxsKTtcbiAgICB2YXIgaGludFdyYXBwZXJSZWYgPSByZWFjdF8xLnVzZVJlZihudWxsKTtcbiAgICB2YXIgaGludFJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBfYyA9IHJlYWN0XzEudXNlU3RhdGUoJycpLCB1bk1vZGlmaWVkSW5wdXRUZXh0ID0gX2NbMF0sIHNldFVubW9kaWZpZWRJbnB1dFRleHQgPSBfY1sxXTtcbiAgICB2YXIgX2QgPSByZWFjdF8xLnVzZVN0YXRlKCcnKSwgdGV4dCA9IF9kWzBdLCBzZXRUZXh0ID0gX2RbMV07XG4gICAgdmFyIF9lID0gcmVhY3RfMS51c2VTdGF0ZSgnJyksIGhpbnQgPSBfZVswXSwgc2V0SGludCA9IF9lWzFdO1xuICAgIHZhciBfZiA9IHJlYWN0XzEudXNlU3RhdGUoKSwgbWF0Y2ggPSBfZlswXSwgc2V0TWF0Y2ggPSBfZlsxXTtcbiAgICB2YXIgX2cgPSByZWFjdF8xLnVzZVN0YXRlKCksIGNoYW5nZUV2ZW50ID0gX2dbMF0sIHNldENoYW5nZUV2ZW50ID0gX2dbMV07XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB2YXIgZHVwbGljYXRlID0gdXRpbHNfMS5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbihvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJyZWFjdC1hdXRvY29tcGxldGUtaGludDogXFxcIlwiICsgZHVwbGljYXRlICsgXCJcXFwiIG9jY3VycyBtb3JlIHRoYW4gb25jZSBhbmQgbWF5IGNhdXNlIGVycm9ycy4gT3B0aW9ucyBzaG91bGQgbm90IGNvbnRhaW4gZHVwbGljYXRlIHZhbHVlcyFcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbb3B0aW9uc10pO1xuICAgIHJlYWN0XzEudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGRpc2FibGVIaW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlucHV0U3R5bGUgPSBtYWluSW5wdXRSZWYuY3VycmVudCAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShtYWluSW5wdXRSZWYuY3VycmVudCk7XG4gICAgICAgIGlucHV0U3R5bGUgJiYgc3R5bGVIaW50KGhpbnRXcmFwcGVyUmVmLCBoaW50UmVmLCBpbnB1dFN0eWxlKTtcbiAgICB9KTtcbiAgICB2YXIgZ2V0TWF0Y2ggPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBpZiAoIXRleHQgfHwgdGV4dCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIChvcHRpb25zWzBdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaF8xID0gb3B0aW9uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudG9Mb3dlckNhc2UoKSAhPT0gdGV4dC50b0xvd2VyQ2FzZSgpICYmIHgudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHRleHQudG9Mb3dlckNhc2UoKSk7IH0pXG4gICAgICAgICAgICAgICAgLnNvcnQoKVswXTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaF8xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIG1hdGNoXzIgPSBvcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5sYWJlbC50b0xvd2VyQ2FzZSgpICE9PSB0ZXh0LnRvTG93ZXJDYXNlKCkgJiYgeC5sYWJlbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGV4dC50b0xvd2VyQ2FzZSgpKTsgfSlcbiAgICAgICAgICAgICAgICAuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdXRpbHNfMS5zb3J0QXNjKGEubGFiZWwsIGIubGFiZWwpOyB9KVswXTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaF8yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgc2V0SGludFRleHRBbmRJZCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHNldFRleHQodGV4dCk7XG4gICAgICAgIHZhciBtYXRjaCA9IGdldE1hdGNoKHRleHQpO1xuICAgICAgICB2YXIgaGludDtcbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgaGludCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGhpbnQgPSBtYXRjaC5zbGljZSh0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoaW50ID0gbWF0Y2gubGFiZWwuc2xpY2UodGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHNldEhpbnQoaGludCk7XG4gICAgICAgIHNldE1hdGNoKG1hdGNoKTtcbiAgICAgICAgb25IaW50ICYmIG9uSGludChtYXRjaCk7XG4gICAgfTtcbiAgICB2YXIgaGFuZGxlT25GaWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaGludCA9PT0gJycgfHwgIWNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5ld1VuTW9kaWZpZWRUZXh0ID0gdW5Nb2RpZmllZElucHV0VGV4dCArIGhpbnQ7XG4gICAgICAgIGNoYW5nZUV2ZW50LnRhcmdldC52YWx1ZSA9IG5ld1VuTW9kaWZpZWRUZXh0O1xuICAgICAgICBjaGlsZFByb3BzLm9uQ2hhbmdlICYmIGNoaWxkUHJvcHMub25DaGFuZ2UoY2hhbmdlRXZlbnQpO1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKCcnKTtcbiAgICAgICAgb25GaWxsICYmIG9uRmlsbChtYXRjaCk7XG4gICAgICAgIHNldFVubW9kaWZpZWRJbnB1dFRleHQobmV3VW5Nb2RpZmllZFRleHQpO1xuICAgIH07XG4gICAgdmFyIHN0eWxlSGludCA9IGZ1bmN0aW9uIChoaW50V3JhcHBlclJlZiwgaGludFJlZiwgaW5wdXRTdHlsZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoKF9hID0gaGludFdyYXBwZXJSZWYgPT09IG51bGwgfHwgaGludFdyYXBwZXJSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdHlsZSkge1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5mb250RmFtaWx5ID0gaW5wdXRTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5mb250U2l6ZSA9IGlucHV0U3R5bGUuZm9udFNpemU7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLndpZHRoID0gaW5wdXRTdHlsZS53aWR0aDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gaW5wdXRTdHlsZS5oZWlnaHQ7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmxpbmVIZWlnaHQgPSBpbnB1dFN0eWxlLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmJveFNpemluZyA9IGlucHV0U3R5bGUuYm94U2l6aW5nO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5tYXJnaW4gPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ21hcmdpbicpO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5wYWRkaW5nID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdwYWRkaW5nJyk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmJvcmRlclN0eWxlID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdib3JkZXInLCAnc3R5bGUnKTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm9yZGVyV2lkdGggPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ2JvcmRlcicsICd3aWR0aCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoX2IgPSBoaW50UmVmID09PSBudWxsIHx8IGhpbnRSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGhpbnRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnN0eWxlKSB7XG4gICAgICAgICAgICBoaW50UmVmLmN1cnJlbnQuc3R5bGUuZm9udEZhbWlseSA9IGlucHV0U3R5bGUuZm9udEZhbWlseTtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5mb250U2l6ZSA9IGlucHV0U3R5bGUuZm9udFNpemU7XG4gICAgICAgICAgICBoaW50UmVmLmN1cnJlbnQuc3R5bGUubGluZUhlaWdodCA9IGlucHV0U3R5bGUubGluZUhlaWdodDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgc2V0Q2hhbmdlRXZlbnQoZSk7XG4gICAgICAgIGUucGVyc2lzdCgpO1xuICAgICAgICBzZXRVbm1vZGlmaWVkSW5wdXRUZXh0KGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgdmFyIG1vZGlmaWVkVmFsdWUgPSB2YWx1ZU1vZGlmaWVyID8gdmFsdWVNb2RpZmllcihlLnRhcmdldC52YWx1ZSkgOiBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgc2V0SGludFRleHRBbmRJZChtb2RpZmllZFZhbHVlKTtcbiAgICAgICAgY2hpbGRQcm9wcy5vbkNoYW5nZSAmJiBjaGlsZFByb3BzLm9uQ2hhbmdlKGUpO1xuICAgIH07XG4gICAgdmFyIG9uRm9jdXMgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgY2hpbGRQcm9wcy5vbkZvY3VzICYmIGNoaWxkUHJvcHMub25Gb2N1cyhlKTtcbiAgICB9O1xuICAgIHZhciBvbkJsdXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAvL09ubHkgYmx1ciBpdCBpZiB0aGUgbmV3IGZvY3VzIGlzbid0IHRoZSB0aGUgaGludCBpbnB1dFxuICAgICAgICBpZiAoKGhpbnRSZWYgPT09IG51bGwgfHwgaGludFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFJlZi5jdXJyZW50KSAhPT0gZS5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICBzZXRIaW50VGV4dEFuZElkKCcnKTtcbiAgICAgICAgICAgIGNoaWxkUHJvcHMub25CbHVyICYmIGNoaWxkUHJvcHMub25CbHVyKGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgQVJST1dSSUdIVCA9ICdBcnJvd1JpZ2h0JztcbiAgICB2YXIgVEFCID0gJ1RhYic7XG4gICAgdmFyIEVOVEVSID0gJ0VudGVyJztcbiAgICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIGNhcmV0SXNBdFRleHRFbmQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gRm9yIHNlbGVjdGFibGUgaW5wdXQgdHlwZXMgKFwidGV4dFwiLCBcInNlYXJjaFwiKSwgb25seSBzZWxlY3QgdGhlIGhpbnQgaWZcbiAgICAgICAgICAgIC8vIGl0J3MgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgdmFsdWUuIEZvciBub24tc2VsZWN0YWJsZSB0eXBlcyAoXCJlbWFpbFwiLFxuICAgICAgICAgICAgLy8gXCJudW1iZXJcIiksIGFsd2F5cyBzZWxlY3QgdGhlIGhpbnQuXG4gICAgICAgICAgICB2YXIgaXNOb25TZWxlY3RhYmxlVHlwZSA9IGUuY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgPT09IG51bGw7XG4gICAgICAgICAgICB2YXIgY2FyZXRJc0F0VGV4dEVuZCA9IGlzTm9uU2VsZWN0YWJsZVR5cGUgfHwgZS5jdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9PT0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBjYXJldElzQXRUZXh0RW5kO1xuICAgICAgICB9KSgpO1xuICAgICAgICBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBlLmtleSA9PT0gQVJST1dSSUdIVCkge1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBhbGxvd1RhYkZpbGwgJiYgZS5rZXkgPT09IFRBQiAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBhbGxvd0VudGVyRmlsbCAmJiBlLmtleSA9PT0gRU5URVIgJiYgaGludCAhPT0gJycpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGhhbmRsZU9uRmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkUHJvcHMub25LZXlEb3duICYmIGNoaWxkUHJvcHMub25LZXlEb3duKGUpO1xuICAgIH07XG4gICAgdmFyIG9uSGludENsaWNrID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgaGludENhcmV0UG9zaXRpb24gPSBlLmN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uRW5kIHx8IDA7XG4gICAgICAgIC8vIElmIHVzZXIgY2xpY2tzIHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgaGludCwgXG4gICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gdGhlIGVuZCBvZiB0aGUgbWFpbklucHV0IHRleHRcbiAgICAgICAgaWYgKGhpbnRDYXJldFBvc2l0aW9uID09PSAwKSB7XG4gICAgICAgICAgICAoX2EgPSBtYWluSW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhaGludCAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIChfYSA9IG1haW5JbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB2YXIgY2FyZXRQb3NpdGlvbiA9IHRleHQubGVuZ3RoICsgaGludENhcmV0UG9zaXRpb247XG4gICAgICAgICAgICAgICAgKF9iID0gbWFpbklucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZXRTZWxlY3Rpb25SYW5nZShjYXJldFBvc2l0aW9uLCBjYXJldFBvc2l0aW9uKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgY2hpbGRSZWYgPSByZWFjdF8xLmNsb25lRWxlbWVudChjaGlsZCkucmVmO1xuICAgIHZhciBtYWluSW5wdXQgPSByZWFjdF8xLmNsb25lRWxlbWVudChjaGlsZCwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNoaWxkUHJvcHMpLCB7IG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgICAgIG9uS2V5RG93bjogb25LZXlEb3duLCByZWY6IGNoaWxkUmVmICYmIHR5cGVvZiAoY2hpbGRSZWYpICE9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyB1dGlsc18xLm1lcmdlUmVmcyhjaGlsZFJlZiwgbWFpbklucHV0UmVmKVxuICAgICAgICAgICAgOiBtYWluSW5wdXRSZWYgfSkpO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmFoLWlucHV0LXdyYXBwZXJcIiwgc3R5bGU6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gICAgICAgIH0gfSwgZGlzYWJsZUhpbnRcbiAgICAgICAgPyBjaGlsZFxuICAgICAgICA6IChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyZWFjdF8xLmRlZmF1bHQuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgICAgICBtYWluSW5wdXQsXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmFoLWhpbnQtd3JhcHBlclwiLCByZWY6IGhpbnRXcmFwcGVyUmVmLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjM1KScsXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgfSB9LFxuICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogJ3JhaC10ZXh0LWZpbGxlcicsIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdwcmUnXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgdGV4dCksXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaGludFwiLCByZWY6IGhpbnRSZWYsIG9uQ2xpY2s6IG9uSGludENsaWNrLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogIWhpbnQgfHwgaGludCA9PT0gJycgPyAnbm9uZScgOiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuMzApJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgICAgICAgICAgICAgICAgfSwgZGVmYXVsdFZhbHVlOiBoaW50LCB0YWJJbmRleDogLTEgfSkpKSkpKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24gPSBleHBvcnRzLnNvcnRBc2MgPSBleHBvcnRzLmludGVycG9sYXRlU3R5bGUgPSBleHBvcnRzLm1lcmdlUmVmcyA9IHZvaWQgMDtcbmZ1bmN0aW9uIG1lcmdlUmVmcygpIHtcbiAgICB2YXIgcmVmcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHJlZnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGZpbHRlcmVkUmVmcyA9IHJlZnMuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoaW5zdCkge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGZpbHRlcmVkUmVmc18xID0gZmlsdGVyZWRSZWZzOyBfaSA8IGZpbHRlcmVkUmVmc18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIHJlZiA9IGZpbHRlcmVkUmVmc18xW19pXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmVmKGluc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydHMubWVyZ2VSZWZzID0gbWVyZ2VSZWZzO1xuO1xuLy8gSUUgZG9lc24ndCBzZWVtIHRvIGdldCB0aGUgY29tcG9zaXRlIGNvbXB1dGVkIHZhbHVlIChlZzogJ3BhZGRpbmcnLFxuLy8gJ2JvcmRlclN0eWxlJywgZXRjLiksIHNvIGdlbmVyYXRlIHRoZXNlIGZyb20gdGhlIGluZGl2aWR1YWwgdmFsdWVzLlxuZnVuY3Rpb24gaW50ZXJwb2xhdGVTdHlsZShzdHlsZXMsIGF0dHIsIHN1YmF0dHIpIHtcbiAgICBpZiAoc3ViYXR0ciA9PT0gdm9pZCAwKSB7IHN1YmF0dHIgPSAnJzsgfVxuICAgIC8vIFRpdGxlLWNhc2UgdGhlIHN1Yi1hdHRyaWJ1dGUuXG4gICAgaWYgKHN1YmF0dHIpIHtcbiAgICAgICAgc3ViYXR0ciA9IHN1YmF0dHIucmVwbGFjZShzdWJhdHRyWzBdLCBzdWJhdHRyWzBdLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gWydUb3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXVxuICAgICAgICAvLyBAdHMtaWdub3JlOiAoYXR0ciArIGRpciArIHN1YmF0dHIpIHByb3BlcnR5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChkaXIpIHsgcmV0dXJuIHN0eWxlc1thdHRyICsgZGlyICsgc3ViYXR0cl07IH0pXG4gICAgICAgIC5qb2luKCcgJyk7XG59XG5leHBvcnRzLmludGVycG9sYXRlU3R5bGUgPSBpbnRlcnBvbGF0ZVN0eWxlO1xuZnVuY3Rpb24gc29ydEFzYyhhLCBiKSB7XG4gICAgaWYgKGEgPiBiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmV4cG9ydHMuc29ydEFzYyA9IHNvcnRBc2M7XG5mdW5jdGlvbiBnZXRGaXJzdER1cGxpY2F0ZU9wdGlvbihhcnJheSkge1xuICAgIHZhciB0cmFja2VyID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodHJhY2tlclthcnJheVtpXS5sYWJlbF0pIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheVtpXS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICB0cmFja2VyW2FycmF5W2ldLmxhYmVsXSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZXhwb3J0cy5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbiA9IGdldEZpcnN0RHVwbGljYXRlT3B0aW9uO1xuIiwiLyoqISBcbiAqIGhvdGtleXMtanMgdjMuOS40IFxuICogQSBzaW1wbGUgbWljcm8tbGlicmFyeSBmb3IgZGVmaW5pbmcgYW5kIGRpc3BhdGNoaW5nIGtleWJvYXJkIHNob3J0Y3V0cy4gSXQgaGFzIG5vIGRlcGVuZGVuY2llcy4gXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAyMiBrZW5ueSB3b25nIDx3b3dvaG9vQHFxLmNvbT4gXG4gKiBodHRwOi8vamF5d2NqbG92ZS5naXRodWIuaW8vaG90a2V5cyBcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBcbiAqL1xuXG52YXIgaXNmZiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnID8gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IDAgOiBmYWxzZTsgLy8g57uR5a6a5LqL5Lu2XG5cbmZ1bmN0aW9uIGFkZEV2ZW50KG9iamVjdCwgZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSkge1xuICBpZiAob2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKTtcbiAgfSBlbHNlIGlmIChvYmplY3QuYXR0YWNoRXZlbnQpIHtcbiAgICBvYmplY3QuYXR0YWNoRXZlbnQoXCJvblwiLmNvbmNhdChldmVudCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1ldGhvZCh3aW5kb3cuZXZlbnQpO1xuICAgIH0pO1xuICB9XG59IC8vIOS/rumlsOmUrui9rOaNouaIkOWvueW6lOeahOmUrueggVxuXG5cbmZ1bmN0aW9uIGdldE1vZHMobW9kaWZpZXIsIGtleSkge1xuICB2YXIgbW9kcyA9IGtleS5zbGljZSgwLCBrZXkubGVuZ3RoIC0gMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgbW9kc1tpXSA9IG1vZGlmaWVyW21vZHNbaV0udG9Mb3dlckNhc2UoKV07XG4gIH1cblxuICByZXR1cm4gbW9kcztcbn0gLy8g5aSE55CG5Lyg55qEa2V55a2X56ym5Liy6L2s5o2i5oiQ5pWw57uEXG5cblxuZnVuY3Rpb24gZ2V0S2V5cyhrZXkpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBrZXkgPSAnJztcbiAga2V5ID0ga2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7IC8vIOWMuemFjeS7u+S9leepuueZveWtl+espizljIXmi6znqbrmoLzjgIHliLbooajnrKbjgIHmjaLpobXnrKbnrYnnrYlcblxuICB2YXIga2V5cyA9IGtleS5zcGxpdCgnLCcpOyAvLyDlkIzml7borr7nva7lpJrkuKrlv6vmjbfplK7vvIzku6UnLCfliIblibJcblxuICB2YXIgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTsgLy8g5b+r5o236ZSu5Y+v6IO95YyF5ZCrJywn77yM6ZyA54m55q6K5aSE55CGXG5cbiAgZm9yICg7IGluZGV4ID49IDA7KSB7XG4gICAga2V5c1tpbmRleCAtIDFdICs9ICcsJztcbiAgICBrZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufSAvLyDmr5TovoPkv67ppbDplK7nmoTmlbDnu4RcblxuXG5mdW5jdGlvbiBjb21wYXJlQXJyYXkoYTEsIGEyKSB7XG4gIHZhciBhcnIxID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGExIDogYTI7XG4gIHZhciBhcnIyID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGEyIDogYTE7XG4gIHZhciBpc0luZGV4ID0gdHJ1ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyMi5pbmRleE9mKGFycjFbaV0pID09PSAtMSkgaXNJbmRleCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzSW5kZXg7XG59XG5cbnZhciBfa2V5TWFwID0ge1xuICBiYWNrc3BhY2U6IDgsXG4gIHRhYjogOSxcbiAgY2xlYXI6IDEyLFxuICBlbnRlcjogMTMsXG4gIHJldHVybjogMTMsXG4gIGVzYzogMjcsXG4gIGVzY2FwZTogMjcsXG4gIHNwYWNlOiAzMixcbiAgbGVmdDogMzcsXG4gIHVwOiAzOCxcbiAgcmlnaHQ6IDM5LFxuICBkb3duOiA0MCxcbiAgZGVsOiA0NixcbiAgZGVsZXRlOiA0NixcbiAgaW5zOiA0NSxcbiAgaW5zZXJ0OiA0NSxcbiAgaG9tZTogMzYsXG4gIGVuZDogMzUsXG4gIHBhZ2V1cDogMzMsXG4gIHBhZ2Vkb3duOiAzNCxcbiAgY2Fwc2xvY2s6IDIwLFxuICBudW1fMDogOTYsXG4gIG51bV8xOiA5NyxcbiAgbnVtXzI6IDk4LFxuICBudW1fMzogOTksXG4gIG51bV80OiAxMDAsXG4gIG51bV81OiAxMDEsXG4gIG51bV82OiAxMDIsXG4gIG51bV83OiAxMDMsXG4gIG51bV84OiAxMDQsXG4gIG51bV85OiAxMDUsXG4gIG51bV9tdWx0aXBseTogMTA2LFxuICBudW1fYWRkOiAxMDcsXG4gIG51bV9lbnRlcjogMTA4LFxuICBudW1fc3VidHJhY3Q6IDEwOSxcbiAgbnVtX2RlY2ltYWw6IDExMCxcbiAgbnVtX2RpdmlkZTogMTExLFxuICAn4oeqJzogMjAsXG4gICcsJzogMTg4LFxuICAnLic6IDE5MCxcbiAgJy8nOiAxOTEsXG4gICdgJzogMTkyLFxuICAnLSc6IGlzZmYgPyAxNzMgOiAxODksXG4gICc9JzogaXNmZiA/IDYxIDogMTg3LFxuICAnOyc6IGlzZmYgPyA1OSA6IDE4NixcbiAgJ1xcJyc6IDIyMixcbiAgJ1snOiAyMTksXG4gICddJzogMjIxLFxuICAnXFxcXCc6IDIyMFxufTsgLy8gTW9kaWZpZXIgS2V5c1xuXG52YXIgX21vZGlmaWVyID0ge1xuICAvLyBzaGlmdEtleVxuICAn4oenJzogMTYsXG4gIHNoaWZ0OiAxNixcbiAgLy8gYWx0S2V5XG4gICfijKUnOiAxOCxcbiAgYWx0OiAxOCxcbiAgb3B0aW9uOiAxOCxcbiAgLy8gY3RybEtleVxuICAn4oyDJzogMTcsXG4gIGN0cmw6IDE3LFxuICBjb250cm9sOiAxNyxcbiAgLy8gbWV0YUtleVxuICAn4oyYJzogOTEsXG4gIGNtZDogOTEsXG4gIGNvbW1hbmQ6IDkxXG59O1xudmFyIG1vZGlmaWVyTWFwID0ge1xuICAxNjogJ3NoaWZ0S2V5JyxcbiAgMTg6ICdhbHRLZXknLFxuICAxNzogJ2N0cmxLZXknLFxuICA5MTogJ21ldGFLZXknLFxuICBzaGlmdEtleTogMTYsXG4gIGN0cmxLZXk6IDE3LFxuICBhbHRLZXk6IDE4LFxuICBtZXRhS2V5OiA5MVxufTtcbnZhciBfbW9kcyA9IHtcbiAgMTY6IGZhbHNlLFxuICAxODogZmFsc2UsXG4gIDE3OiBmYWxzZSxcbiAgOTE6IGZhbHNlXG59O1xudmFyIF9oYW5kbGVycyA9IHt9OyAvLyBGMX5GMTIgc3BlY2lhbCBrZXlcblxuZm9yICh2YXIgayA9IDE7IGsgPCAyMDsgaysrKSB7XG4gIF9rZXlNYXBbXCJmXCIuY29uY2F0KGspXSA9IDExMSArIGs7XG59XG5cbnZhciBfZG93bktleXMgPSBbXTsgLy8g6K6w5b2V5pGB5LiL55qE57uR5a6a6ZSuXG5cbnZhciB3aW5MaXN0ZW5kRm9jdXMgPSBmYWxzZTsgLy8gd2luZG935piv5ZCm5bey57uP55uR5ZCs5LqGZm9jdXPkuovku7ZcblxudmFyIF9zY29wZSA9ICdhbGwnOyAvLyDpu5jorqTng63plK7ojIPlm7RcblxudmFyIGVsZW1lbnRIYXNCaW5kRXZlbnQgPSBbXTsgLy8g5bey57uR5a6a5LqL5Lu255qE6IqC54K56K6w5b2VXG4vLyDov5Tlm57plK7noIFcblxudmFyIGNvZGUgPSBmdW5jdGlvbiBjb2RlKHgpIHtcbiAgcmV0dXJuIF9rZXlNYXBbeC50b0xvd2VyQ2FzZSgpXSB8fCBfbW9kaWZpZXJbeC50b0xvd2VyQ2FzZSgpXSB8fCB4LnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKTtcbn07IC8vIOiuvue9ruiOt+WPluW9k+WJjeiMg+WbtO+8iOm7mOiupOS4uifmiYDmnIkn77yJXG5cblxuZnVuY3Rpb24gc2V0U2NvcGUoc2NvcGUpIHtcbiAgX3Njb3BlID0gc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluW9k+WJjeiMg+WbtFxuXG5cbmZ1bmN0aW9uIGdldFNjb3BlKCkge1xuICByZXR1cm4gX3Njb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5bmkYHkuIvnu5HlrprplK7nmoTplK7lgLxcblxuXG5mdW5jdGlvbiBnZXRQcmVzc2VkS2V5Q29kZXMoKSB7XG4gIHJldHVybiBfZG93bktleXMuc2xpY2UoMCk7XG59IC8vIOihqOWNleaOp+S7tuaOp+S7tuWIpOaWrSDov5Tlm54gQm9vbGVhblxuLy8gaG90a2V5IGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gZmlsdGVyIHJldHVybiB0cnVlXG5cblxuZnVuY3Rpb24gZmlsdGVyKGV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgdmFyIHRhZ05hbWUgPSB0YXJnZXQudGFnTmFtZTtcbiAgdmFyIGZsYWcgPSB0cnVlOyAvLyBpZ25vcmU6IGlzQ29udGVudEVkaXRhYmxlID09PSAndHJ1ZScsIDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4gd2hlbiByZWFkT25seSBzdGF0ZSBpcyBmYWxzZSwgPHNlbGVjdD5cblxuICBpZiAodGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlIHx8ICh0YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgdGFnTmFtZSA9PT0gJ1NFTEVDVCcpICYmICF0YXJnZXQucmVhZE9ubHkpIHtcbiAgICBmbGFnID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmxhZztcbn0gLy8g5Yik5pat5pGB5LiL55qE6ZSu5piv5ZCm5Li65p+Q5Liq6ZSu77yM6L+U5ZuedHJ1ZeaIluiAhWZhbHNlXG5cblxuZnVuY3Rpb24gaXNQcmVzc2VkKGtleUNvZGUpIHtcbiAgaWYgKHR5cGVvZiBrZXlDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGtleUNvZGUgPSBjb2RlKGtleUNvZGUpOyAvLyDovazmjaLmiJDplK7noIFcbiAgfVxuXG4gIHJldHVybiBfZG93bktleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTE7XG59IC8vIOW+queOr+WIoOmZpGhhbmRsZXJz5Lit55qE5omA5pyJIHNjb3BlKOiMg+WbtClcblxuXG5mdW5jdGlvbiBkZWxldGVTY29wZShzY29wZSwgbmV3U2NvcGUpIHtcbiAgdmFyIGhhbmRsZXJzO1xuICB2YXIgaTsgLy8g5rKh5pyJ5oyH5a6ac2NvcGXvvIzojrflj5ZzY29wZVxuXG4gIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gX2hhbmRsZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfaGFuZGxlcnMsIGtleSkpIHtcbiAgICAgIGhhbmRsZXJzID0gX2hhbmRsZXJzW2tleV07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChoYW5kbGVyc1tpXS5zY29wZSA9PT0gc2NvcGUpIGhhbmRsZXJzLnNwbGljZShpLCAxKTtlbHNlIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8g5aaC5p6cc2NvcGXooqvliKDpmaTvvIzlsIZzY29wZemHjee9ruS4umFsbFxuXG5cbiAgaWYgKGdldFNjb3BlKCkgPT09IHNjb3BlKSBzZXRTY29wZShuZXdTY29wZSB8fCAnYWxsJyk7XG59IC8vIOa4hemZpOS/rumlsOmUrlxuXG5cbmZ1bmN0aW9uIGNsZWFyTW9kaWZpZXIoZXZlbnQpIHtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7XG5cbiAgdmFyIGkgPSBfZG93bktleXMuaW5kZXhPZihrZXkpOyAvLyDku47liJfooajkuK3muIXpmaTmjInljovov4fnmoTplK5cblxuXG4gIGlmIChpID49IDApIHtcbiAgICBfZG93bktleXMuc3BsaWNlKGksIDEpO1xuICB9IC8vIOeJueauiuWkhOeQhiBjbW1hbmQg6ZSu77yM5ZyoIGNtbWFuZCDnu4TlkIjlv6vmjbfplK4ga2V5dXAg5Y+q5omn6KGM5LiA5qyh55qE6Zeu6aKYXG5cblxuICBpZiAoZXZlbnQua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbWV0YScpIHtcbiAgICBfZG93bktleXMuc3BsaWNlKDAsIF9kb3duS2V5cy5sZW5ndGgpO1xuICB9IC8vIOS/rumlsOmUriBzaGlmdEtleSBhbHRLZXkgY3RybEtleSAoY29tbWFuZHx8bWV0YUtleSkg5riF6ZmkXG5cblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSBmYWxzZTsgLy8g5bCG5L+u6aWw6ZSu6YeN572u5Li6ZmFsc2VcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5iaW5kKGtleXNJbmZvKSB7XG4gIC8vIHVuYmluZCgpLCB1bmJpbmQgYWxsIGtleXNcbiAgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGRlbGV0ZSBfaGFuZGxlcnNba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXNJbmZvKSkge1xuICAgIC8vIHN1cHBvcnQgbGlrZSA6IHVuYmluZChbe2tleTogJ2N0cmwrYScsIHNjb3BlOiAnczEnfSwge2tleTogJ2N0cmwtYScsIHNjb3BlOiAnczInLCBzcGxpdEtleTogJy0nfV0pXG4gICAga2V5c0luZm8uZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgaWYgKGluZm8ua2V5KSBlYWNoVW5iaW5kKGluZm8pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgdW5iaW5kKHtrZXk6ICdjdHJsK2EsIGN0cmwrYicsIHNjb3BlOidhYmMnfSlcbiAgICBpZiAoa2V5c0luZm8ua2V5KSBlYWNoVW5iaW5kKGtleXNJbmZvKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBvbGQgbWV0aG9kXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBzY29wZSA9IGFyZ3NbMF0sXG4gICAgICAgIG1ldGhvZCA9IGFyZ3NbMV07XG5cbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtZXRob2QgPSBzY29wZTtcbiAgICAgIHNjb3BlID0gJyc7XG4gICAgfVxuXG4gICAgZWFjaFVuYmluZCh7XG4gICAgICBrZXk6IGtleXNJbmZvLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBzcGxpdEtleTogJysnXG4gICAgfSk7XG4gIH1cbn0gLy8g6Kej6Zmk57uR5a6a5p+Q5Liq6IyD5Zu055qE5b+r5o236ZSuXG5cblxudmFyIGVhY2hVbmJpbmQgPSBmdW5jdGlvbiBlYWNoVW5iaW5kKF9yZWYpIHtcbiAgdmFyIGtleSA9IF9yZWYua2V5LFxuICAgICAgc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgbWV0aG9kID0gX3JlZi5tZXRob2QsXG4gICAgICBfcmVmJHNwbGl0S2V5ID0gX3JlZi5zcGxpdEtleSxcbiAgICAgIHNwbGl0S2V5ID0gX3JlZiRzcGxpdEtleSA9PT0gdm9pZCAwID8gJysnIDogX3JlZiRzcGxpdEtleTtcbiAgdmFyIG11bHRpcGxlS2V5cyA9IGdldEtleXMoa2V5KTtcbiAgbXVsdGlwbGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbktleSkge1xuICAgIHZhciB1bmJpbmRLZXlzID0gb3JpZ2luS2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICB2YXIgbGVuID0gdW5iaW5kS2V5cy5sZW5ndGg7XG4gICAgdmFyIGxhc3RLZXkgPSB1bmJpbmRLZXlzW2xlbiAtIDFdO1xuICAgIHZhciBrZXlDb2RlID0gbGFzdEtleSA9PT0gJyonID8gJyonIDogY29kZShsYXN0S2V5KTtcbiAgICBpZiAoIV9oYW5kbGVyc1trZXlDb2RlXSkgcmV0dXJuOyAvLyDliKTmlq3mmK/lkKbkvKDlhaXojIPlm7TvvIzmsqHmnInlsLHojrflj5bojIPlm7RcblxuICAgIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICB2YXIgbW9kcyA9IGxlbiA+IDEgPyBnZXRNb2RzKF9tb2RpZmllciwgdW5iaW5kS2V5cykgOiBbXTtcbiAgICBfaGFuZGxlcnNba2V5Q29kZV0gPSBfaGFuZGxlcnNba2V5Q29kZV0uZmlsdGVyKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgIC8vIOmAmui/h+WHveaVsOWIpOaWre+8jOaYr+WQpuino+mZpOe7keWumu+8jOWHveaVsOebuOetieebtOaOpei/lOWbnlxuICAgICAgdmFyIGlzTWF0Y2hpbmdNZXRob2QgPSBtZXRob2QgPyByZWNvcmQubWV0aG9kID09PSBtZXRob2QgOiB0cnVlO1xuICAgICAgcmV0dXJuICEoaXNNYXRjaGluZ01ldGhvZCAmJiByZWNvcmQuc2NvcGUgPT09IHNjb3BlICYmIGNvbXBhcmVBcnJheShyZWNvcmQubW9kcywgbW9kcykpO1xuICAgIH0pO1xuICB9KTtcbn07IC8vIOWvueebkeWQrOWvueW6lOW/q+aNt+mUrueahOWbnuiwg+WHveaVsOi/m+ihjOWkhOeQhlxuXG5cbmZ1bmN0aW9uIGV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlciwgc2NvcGUsIGVsZW1lbnQpIHtcbiAgaWYgKGhhbmRsZXIuZWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtb2RpZmllcnNNYXRjaDsgLy8g55yL5a6D5piv5ZCm5Zyo5b2T5YmN6IyD5Zu0XG5cbiAgaWYgKGhhbmRsZXIuc2NvcGUgPT09IHNjb3BlIHx8IGhhbmRsZXIuc2NvcGUgPT09ICdhbGwnKSB7XG4gICAgLy8g5qOA5p+l5piv5ZCm5Yy56YWN5L+u6aWw56ym77yI5aaC5p6c5pyJ6L+U5ZuedHJ1Ze+8iVxuICAgIG1vZGlmaWVyc01hdGNoID0gaGFuZGxlci5tb2RzLmxlbmd0aCA+IDA7XG5cbiAgICBmb3IgKHZhciB5IGluIF9tb2RzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCB5KSkge1xuICAgICAgICBpZiAoIV9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA+IC0xIHx8IF9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA9PT0gLTEpIHtcbiAgICAgICAgICBtb2RpZmllcnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyDosIPnlKjlpITnkIbnqIvluo/vvIzlpoLmnpzmmK/kv67ppbDplK7kuI3lgZrlpITnkIZcblxuXG4gICAgaWYgKGhhbmRsZXIubW9kcy5sZW5ndGggPT09IDAgJiYgIV9tb2RzWzE2XSAmJiAhX21vZHNbMThdICYmICFfbW9kc1sxN10gJiYgIV9tb2RzWzkxXSB8fCBtb2RpZmllcnNNYXRjaCB8fCBoYW5kbGVyLnNob3J0Y3V0ID09PSAnKicpIHtcbiAgICAgIGlmIChoYW5kbGVyLm1ldGhvZChldmVudCwgaGFuZGxlcikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNlIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDlpITnkIZrZXlkb3du5LqL5Lu2XG5cblxuZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIGFzdGVyaXNrID0gX2hhbmRsZXJzWycqJ107XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlOyAvLyDooajljZXmjqfku7bov4fmu6Qg6buY6K6k6KGo5Y2V5o6n5Lu25LiN6Kem5Y+R5b+r5o236ZSuXG5cbiAgaWYgKCFob3RrZXlzLmZpbHRlci5jYWxsKHRoaXMsIGV2ZW50KSkgcmV0dXJuOyAvLyBHZWNrbyhGaXJlZm94KeeahGNvbW1hbmTplK7lgLwyMjTvvIzlnKhXZWJraXQoQ2hyb21lKeS4reS/neaMgeS4gOiHtFxuICAvLyBXZWJraXTlt6blj7MgY29tbWFuZCDplK7lgLzkuI3kuIDmoLdcblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG4gIC8qKlxuICAgKiBDb2xsZWN0IGJvdW5kIGtleXNcbiAgICogSWYgYW4gSW5wdXQgTWV0aG9kIEVkaXRvciBpcyBwcm9jZXNzaW5nIGtleSBpbnB1dCBhbmQgdGhlIGV2ZW50IGlzIGtleWRvd24sIHJldHVybiAyMjkuXG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1MDQzOTM0L2lzLWl0LW9rLXRvLWlnbm9yZS1rZXlkb3duLWV2ZW50cy13aXRoLWtleWNvZGUtMjI5XG4gICAqIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1kb20vMjAxMEp1bFNlcC9hdHQtMDE4Mi9rZXlDb2RlLXNwZWMuaHRtbFxuICAgKi9cblxuICBpZiAoX2Rvd25LZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYga2V5ICE9PSAyMjkpIF9kb3duS2V5cy5wdXNoKGtleSk7XG4gIC8qKlxuICAgKiBKZXN0IHRlc3QgY2FzZXMgYXJlIHJlcXVpcmVkLlxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqL1xuXG4gIFsnY3RybEtleScsICdhbHRLZXknLCAnc2hpZnRLZXknLCAnbWV0YUtleSddLmZvckVhY2goZnVuY3Rpb24gKGtleU5hbWUpIHtcbiAgICB2YXIga2V5TnVtID0gbW9kaWZpZXJNYXBba2V5TmFtZV07XG5cbiAgICBpZiAoZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKGtleU51bSk7XG4gICAgfSBlbHNlIGlmICghZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA+IC0xKSB7XG4gICAgICBfZG93bktleXMuc3BsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSksIDEpO1xuICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PT0gJ21ldGFLZXknICYmIGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRml4IGlmIENvbW1hbmQgaXMgcHJlc3NlZDpcbiAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAqL1xuICAgICAgaWYgKCEoZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IF9kb3duS2V5cy5zbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IHRydWU7IC8vIOWwhueJueauiuWtl+espueahGtleeazqOWGjOWIsCBob3RrZXlzIOS4ilxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhc3RlcmlzaykgcmV0dXJuO1xuICB9IC8vIOWwhiBtb2RpZmllck1hcCDph4zpnaLnmoTkv67ppbDplK7nu5HlrprliLAgZXZlbnQg5LitXG5cblxuICBmb3IgKHZhciBlIGluIF9tb2RzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgZSkpIHtcbiAgICAgIF9tb2RzW2VdID0gZXZlbnRbbW9kaWZpZXJNYXBbZV1dO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvaG90a2V5cy9wdWxsLzEyOVxuICAgKiBUaGlzIHNvbHZlcyB0aGUgaXNzdWUgaW4gRmlyZWZveCBvbiBXaW5kb3dzIHdoZXJlIGhvdGtleXMgY29ycmVzcG9uZGluZyB0byBzcGVjaWFsIGNoYXJhY3RlcnMgd291bGQgbm90IHRyaWdnZXIuXG4gICAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBjdHJsK2FsdCttIG9uIGEgU3dlZGlzaCBrZXlib2FyZCB3aGljaCBpcyB1c2VkIHRvIHR5cGUgzrwuXG4gICAqIEJyb3dzZXIgc3VwcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1rZXlib2FyZGV2ZW50LWdldG1vZGlmaWVyc3RhdGVcbiAgICovXG5cblxuICBpZiAoZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAhKGV2ZW50LmFsdEtleSAmJiAhZXZlbnQuY3RybEtleSkgJiYgZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSgnQWx0R3JhcGgnKSkge1xuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxNykgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxNyk7XG4gICAgfVxuXG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE4KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE4KTtcbiAgICB9XG5cbiAgICBfbW9kc1sxN10gPSB0cnVlO1xuICAgIF9tb2RzWzE4XSA9IHRydWU7XG4gIH0gLy8g6I635Y+W6IyD5Zu0IOm7mOiupOS4uiBgYWxsYFxuXG5cbiAgdmFyIHNjb3BlID0gZ2V0U2NvcGUoKTsgLy8g5a+55Lu75L2V5b+r5o236ZSu6YO96ZyA6KaB5YGa55qE5aSE55CGXG5cbiAgaWYgKGFzdGVyaXNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3Rlcmlzay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzdGVyaXNrW2ldLnNjb3BlID09PSBzY29wZSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIGFzdGVyaXNrW2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBhc3Rlcmlza1tpXS5rZXl1cCkpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCBhc3Rlcmlza1tpXSwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBrZXkg5LiN5ZyoIF9oYW5kbGVycyDkuK3ov5Tlm55cblxuXG4gIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSByZXR1cm47XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9oYW5kbGVyc1trZXldLmxlbmd0aDsgX2krKykge1xuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5dXApIHtcbiAgICAgIGlmIChfaGFuZGxlcnNba2V5XVtfaV0ua2V5KSB7XG4gICAgICAgIHZhciByZWNvcmQgPSBfaGFuZGxlcnNba2V5XVtfaV07XG4gICAgICAgIHZhciBzcGxpdEtleSA9IHJlY29yZC5zcGxpdEtleTtcbiAgICAgICAgdmFyIGtleVNob3J0Y3V0ID0gcmVjb3JkLmtleS5zcGxpdChzcGxpdEtleSk7XG4gICAgICAgIHZhciBfZG93bktleXNDdXJyZW50ID0gW107IC8vIOiusOW9leW9k+WJjeaMiemUrumUruWAvFxuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwga2V5U2hvcnRjdXQubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICBfZG93bktleXNDdXJyZW50LnB1c2goY29kZShrZXlTaG9ydGN1dFthXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9kb3duS2V5c0N1cnJlbnQuc29ydCgpLmpvaW4oJycpID09PSBfZG93bktleXMuc29ydCgpLmpvaW4oJycpKSB7XG4gICAgICAgICAgLy8g5om+5Yiw5aSE55CG5YaF5a65XG4gICAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCByZWNvcmQsIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDliKTmlq0gZWxlbWVudCDmmK/lkKblt7Lnu4/nu5Hlrprkuovku7ZcblxuXG5mdW5jdGlvbiBpc0VsZW1lbnRCaW5kKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnRIYXNCaW5kRXZlbnQuaW5kZXhPZihlbGVtZW50KSA+IC0xO1xufVxuXG5mdW5jdGlvbiBob3RrZXlzKGtleSwgb3B0aW9uLCBtZXRob2QpIHtcbiAgX2Rvd25LZXlzID0gW107XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhrZXkpOyAvLyDpnIDopoHlpITnkIbnmoTlv6vmjbfplK7liJfooahcblxuICB2YXIgbW9kcyA9IFtdO1xuICB2YXIgc2NvcGUgPSAnYWxsJzsgLy8gc2NvcGXpu5jorqTkuLphbGzvvIzmiYDmnInojIPlm7Tpg73mnInmlYhcblxuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50OyAvLyDlv6vmjbfplK7kuovku7bnu5HlrproioLngrlcblxuICB2YXIgaSA9IDA7XG4gIHZhciBrZXl1cCA9IGZhbHNlO1xuICB2YXIga2V5ZG93biA9IHRydWU7XG4gIHZhciBzcGxpdEtleSA9ICcrJztcbiAgdmFyIGNhcHR1cmUgPSBmYWxzZTsgLy8g5a+55Li66K6+5a6a6IyD5Zu055qE5Yik5patXG5cbiAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBtZXRob2QgPSBvcHRpb247XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgaWYgKG9wdGlvbi5zY29wZSkgc2NvcGUgPSBvcHRpb24uc2NvcGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uZWxlbWVudCkgZWxlbWVudCA9IG9wdGlvbi5lbGVtZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleXVwKSBrZXl1cCA9IG9wdGlvbi5rZXl1cDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXlkb3duICE9PSB1bmRlZmluZWQpIGtleWRvd24gPSBvcHRpb24ua2V5ZG93bjsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5jYXB0dXJlICE9PSB1bmRlZmluZWQpIGNhcHR1cmUgPSBvcHRpb24uY2FwdHVyZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uc3BsaXRLZXkgPT09ICdzdHJpbmcnKSBzcGxpdEtleSA9IG9wdGlvbi5zcGxpdEtleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSBzY29wZSA9IG9wdGlvbjsgLy8g5a+55LqO5q+P5Liq5b+r5o236ZSu6L+b6KGM5aSE55CGXG5cbiAgZm9yICg7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXS5zcGxpdChzcGxpdEtleSk7IC8vIOaMiemUruWIl+ihqFxuXG4gICAgbW9kcyA9IFtdOyAvLyDlpoLmnpzmmK/nu4TlkIjlv6vmjbfplK7lj5blvpfnu4TlkIjlv6vmjbfplK5cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMSkgbW9kcyA9IGdldE1vZHMoX21vZGlmaWVyLCBrZXkpOyAvLyDlsIbpnZ7kv67ppbDplK7ovazljJbkuLrplK7noIFcblxuICAgIGtleSA9IGtleVtrZXkubGVuZ3RoIC0gMV07XG4gICAga2V5ID0ga2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGtleSk7IC8vICrooajnpLrljLnphY3miYDmnInlv6vmjbfplK5cbiAgICAvLyDliKTmlq1rZXnmmK/lkKblnKhfaGFuZGxlcnPkuK3vvIzkuI3lnKjlsLHotYvkuIDkuKrnqbrmlbDnu4RcblxuICAgIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSBfaGFuZGxlcnNba2V5XSA9IFtdO1xuXG4gICAgX2hhbmRsZXJzW2tleV0ucHVzaCh7XG4gICAgICBrZXl1cDoga2V5dXAsXG4gICAgICBrZXlkb3duOiBrZXlkb3duLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbW9kczogbW9kcyxcbiAgICAgIHNob3J0Y3V0OiBrZXlzW2ldLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBrZXk6IGtleXNbaV0sXG4gICAgICBzcGxpdEtleTogc3BsaXRLZXksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gLy8g5Zyo5YWo5bGAZG9jdW1lbnTkuIrorr7nva7lv6vmjbfplK5cblxuXG4gIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRWxlbWVudEJpbmQoZWxlbWVudCkgJiYgd2luZG93KSB7XG4gICAgZWxlbWVudEhhc0JpbmRFdmVudC5wdXNoKGVsZW1lbnQpO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgIH0sIGNhcHR1cmUpO1xuXG4gICAgaWYgKCF3aW5MaXN0ZW5kRm9jdXMpIHtcbiAgICAgIHdpbkxpc3RlbmRGb2N1cyA9IHRydWU7XG4gICAgICBhZGRFdmVudCh3aW5kb3csICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gW107XG4gICAgICB9LCBjYXB0dXJlKTtcbiAgICB9XG5cbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5dXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgICBjbGVhck1vZGlmaWVyKGUpO1xuICAgIH0sIGNhcHR1cmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIoc2hvcnRjdXQpIHtcbiAgdmFyIHNjb3BlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnYWxsJztcbiAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZGF0YSA9IF9oYW5kbGVyc1trZXldLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnNjb3BlID09PSBzY29wZSAmJiBpdGVtLnNob3J0Y3V0ID09PSBzaG9ydGN1dDtcbiAgICB9KTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEubWV0aG9kKSB7XG4gICAgICBkYXRhLm1ldGhvZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBfYXBpID0ge1xuICBzZXRTY29wZTogc2V0U2NvcGUsXG4gIGdldFNjb3BlOiBnZXRTY29wZSxcbiAgZGVsZXRlU2NvcGU6IGRlbGV0ZVNjb3BlLFxuICBnZXRQcmVzc2VkS2V5Q29kZXM6IGdldFByZXNzZWRLZXlDb2RlcyxcbiAgaXNQcmVzc2VkOiBpc1ByZXNzZWQsXG4gIGZpbHRlcjogZmlsdGVyLFxuICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICB1bmJpbmQ6IHVuYmluZCxcbiAga2V5TWFwOiBfa2V5TWFwLFxuICBtb2RpZmllcjogX21vZGlmaWVyLFxuICBtb2RpZmllck1hcDogbW9kaWZpZXJNYXBcbn07XG5cbmZvciAodmFyIGEgaW4gX2FwaSkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9hcGksIGEpKSB7XG4gICAgaG90a2V5c1thXSA9IF9hcGlbYV07XG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBfaG90a2V5cyA9IHdpbmRvdy5ob3RrZXlzO1xuXG4gIGhvdGtleXMubm9Db25mbGljdCA9IGZ1bmN0aW9uIChkZWVwKSB7XG4gICAgaWYgKGRlZXAgJiYgd2luZG93LmhvdGtleXMgPT09IGhvdGtleXMpIHtcbiAgICAgIHdpbmRvdy5ob3RrZXlzID0gX2hvdGtleXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdGtleXM7XG4gIH07XG5cbiAgd2luZG93LmhvdGtleXMgPSBob3RrZXlzO1xufVxuXG5leHBvcnQgeyBob3RrZXlzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBob3RrZXlzIGZyb20gJ2hvdGtleXMtanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIGlzSG90a2V5UHJlc3NlZCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgdmVyc2lvbiA0LlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlSXNIb3RrZXlQcmVzc2VkKCkge1xuICByZXR1cm4gaG90a2V5cy5pc1ByZXNzZWQ7XG59XG5cbmhvdGtleXMuZmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciB0YWdGaWx0ZXIgPSBmdW5jdGlvbiB0YWdGaWx0ZXIoX3JlZiwgZW5hYmxlT25UYWdzKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgdmFyIHRhcmdldFRhZ05hbWUgPSB0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWU7XG4gIHJldHVybiBCb29sZWFuKHRhcmdldFRhZ05hbWUgJiYgZW5hYmxlT25UYWdzICYmIGVuYWJsZU9uVGFncy5pbmNsdWRlcyh0YXJnZXRUYWdOYW1lKSk7XG59O1xuXG52YXIgaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCA9IGZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoZXYpIHtcbiAgcmV0dXJuIHRhZ0ZpbHRlcihldiwgWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXSk7XG59O1xuXG5mdW5jdGlvbiB1c2VIb3RrZXlzKGtleXMsIGNhbGxiYWNrLCBvcHRpb25zLCBkZXBzKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBkZXBzID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIF9yZWYyID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgIGVuYWJsZU9uVGFncyA9IF9yZWYyLmVuYWJsZU9uVGFncyxcbiAgICAgIGZpbHRlciA9IF9yZWYyLmZpbHRlcixcbiAgICAgIGtleXVwID0gX3JlZjIua2V5dXAsXG4gICAgICBrZXlkb3duID0gX3JlZjIua2V5ZG93bixcbiAgICAgIF9yZWYyJGZpbHRlclByZXZlbnREZSA9IF9yZWYyLmZpbHRlclByZXZlbnREZWZhdWx0LFxuICAgICAgZmlsdGVyUHJldmVudERlZmF1bHQgPSBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUsXG4gICAgICBfcmVmMiRlbmFibGVkID0gX3JlZjIuZW5hYmxlZCxcbiAgICAgIGVuYWJsZWQgPSBfcmVmMiRlbmFibGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZW5hYmxlZCxcbiAgICAgIF9yZWYyJGVuYWJsZU9uQ29udGVudCA9IF9yZWYyLmVuYWJsZU9uQ29udGVudEVkaXRhYmxlLFxuICAgICAgZW5hYmxlT25Db250ZW50RWRpdGFibGUgPSBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZW5hYmxlT25Db250ZW50O1xuXG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7IC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIGlmIHRoZSBicm93c2VycyBkZWZhdWx0IGJlaGF2aW9yIGlzIHByZXZlbnRlZC5cblxuICB2YXIgbWVtb2lzZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpIHtcbiAgICB2YXIgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LCBfcmVmJGN1cnJlbnQ7XG5cbiAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoa2V5Ym9hcmRFdmVudCkpIHtcbiAgICAgIHJldHVybiAhZmlsdGVyUHJldmVudERlZmF1bHQ7XG4gICAgfSAvLyBDaGVjayB3aGV0aGVyIHRoZSBob3RrZXlzIHdhcyB0cmlnZ2VyZWQgaW5zaWRlIGFuIGlucHV0IGFuZCB0aGF0IGlucHV0IGlzIGVuYWJsZWQgb3IgaWYgaXQgd2FzIHRyaWdnZXJlZCBieSBhIGNvbnRlbnQgZWRpdGFibGUgdGFnIGFuZCBpdCBpcyBlbmFibGVkLlxuXG5cbiAgICBpZiAoaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChrZXlib2FyZEV2ZW50KSAmJiAhdGFnRmlsdGVyKGtleWJvYXJkRXZlbnQsIGVuYWJsZU9uVGFncykgfHwgKF9rZXlib2FyZEV2ZW50JHRhcmdldCA9IGtleWJvYXJkRXZlbnQudGFyZ2V0KSAhPSBudWxsICYmIF9rZXlib2FyZEV2ZW50JHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhZW5hYmxlT25Db250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZWYuY3VycmVudCA9PT0gbnVsbCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSByZWYuY3VycmVudCB8fCAoX3JlZiRjdXJyZW50ID0gcmVmLmN1cnJlbnQpICE9IG51bGwgJiYgX3JlZiRjdXJyZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICBjYWxsYmFjayhrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBkZXBzID8gW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdLmNvbmNhdChkZXBzKSA6IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHRoaXMgY2FzZSBrZXlkb3duIGlzIGxpa2VseSB1bmRlZmluZWQsIHNvIHdlIHNldCBpdCB0byBmYWxzZSwgc2luY2UgaG90a2V5cyBuZWVkcyB0aGUgYGtleWRvd25gIGtleSB0byBoYXZlIGEgdmFsdWUuXG5cblxuICAgIGlmIChrZXl1cCAmJiBrZXlkb3duICE9PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmtleWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBob3RrZXlzKGtleXMsIG9wdGlvbnMgfHwge30sIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW21lbW9pc2VkQ2FsbGJhY2ssIGtleXMsIGVuYWJsZWRdKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleXMuaXNQcmVzc2VkO1xuXG5leHBvcnQgeyBpc0hvdGtleVByZXNzZWQsIHVzZUhvdGtleXMsIHVzZUlzSG90a2V5UHJlc3NlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcy5tYXBcbiIsImltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpc1JhbmdlVmlzaWJsZShfcmVmKSB7XG4gIHZhciBsYXN0UmVuZGVyZWRTdGFydEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgcmV0dXJuICEoc3RhcnRJbmRleCA+IGxhc3RSZW5kZXJlZFN0b3BJbmRleCB8fCBzdG9wSW5kZXggPCBsYXN0UmVuZGVyZWRTdGFydEluZGV4KTtcbn1cblxuZnVuY3Rpb24gc2NhbkZvclVubG9hZGVkUmFuZ2VzKF9yZWYpIHtcbiAgdmFyIGlzSXRlbUxvYWRlZCA9IF9yZWYuaXNJdGVtTG9hZGVkLFxuICAgICAgaXRlbUNvdW50ID0gX3JlZi5pdGVtQ291bnQsXG4gICAgICBtaW5pbXVtQmF0Y2hTaXplID0gX3JlZi5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgc3RhcnRJbmRleCA9IF9yZWYuc3RhcnRJbmRleCxcbiAgICAgIHN0b3BJbmRleCA9IF9yZWYuc3RvcEluZGV4O1xuXG4gIHZhciB1bmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gIHZhciByYW5nZVN0YXJ0SW5kZXggPSBudWxsO1xuICB2YXIgcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuXG4gIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0SW5kZXg7IF9pbmRleCA8PSBzdG9wSW5kZXg7IF9pbmRleCsrKSB7XG4gICAgdmFyIGxvYWRlZCA9IGlzSXRlbUxvYWRlZChfaW5kZXgpO1xuXG4gICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgIHJhbmdlU3RvcEluZGV4ID0gX2luZGV4O1xuICAgICAgaWYgKHJhbmdlU3RhcnRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICByYW5nZVN0YXJ0SW5kZXggPSBfaW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyYW5nZVN0b3BJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcblxuICAgICAgcmFuZ2VTdGFydEluZGV4ID0gcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIDpyYW5nZVN0b3BJbmRleCBpcyBub3QgbnVsbCBpdCBtZWFucyB3ZSBoYXZlbid0IHJhbiBvdXQgb2YgdW5sb2FkZWQgcm93cy5cbiAgLy8gU2NhbiBmb3J3YXJkIHRvIHRyeSBmaWxsaW5nIG91ciA6bWluaW11bUJhdGNoU2l6ZS5cbiAgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgdmFyIHBvdGVudGlhbFN0b3BJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KHJhbmdlU3RvcEluZGV4LCByYW5nZVN0YXJ0SW5kZXggKyBtaW5pbXVtQmF0Y2hTaXplIC0gMSksIGl0ZW1Db3VudCAtIDEpO1xuXG4gICAgZm9yICh2YXIgX2luZGV4MiA9IHJhbmdlU3RvcEluZGV4ICsgMTsgX2luZGV4MiA8PSBwb3RlbnRpYWxTdG9wSW5kZXg7IF9pbmRleDIrKykge1xuICAgICAgaWYgKCFpc0l0ZW1Mb2FkZWQoX2luZGV4MikpIHtcbiAgICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXgyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcbiAgfVxuXG4gIC8vIENoZWNrIHRvIHNlZSBpZiBvdXIgZmlyc3QgcmFuZ2UgZW5kZWQgcHJlbWF0dXJlbHkuXG4gIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc2NhbiBiYWNrd2FyZHMgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAodW5sb2FkZWRSYW5nZXMubGVuZ3RoKSB7XG4gICAgd2hpbGUgKHVubG9hZGVkUmFuZ2VzWzFdIC0gdW5sb2FkZWRSYW5nZXNbMF0gKyAxIDwgbWluaW11bUJhdGNoU2l6ZSAmJiB1bmxvYWRlZFJhbmdlc1swXSA+IDApIHtcbiAgICAgIHZhciBfaW5kZXgzID0gdW5sb2FkZWRSYW5nZXNbMF0gLSAxO1xuXG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgzKSkge1xuICAgICAgICB1bmxvYWRlZFJhbmdlc1swXSA9IF9pbmRleDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5sb2FkZWRSYW5nZXM7XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cbnZhciBpbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07XG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG52YXIgSW5maW5pdGVMb2FkZXIgPSBmdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoSW5maW5pdGVMb2FkZXIsIF9QdXJlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBJbmZpbml0ZUxvYWRlcigpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBJbmZpbml0ZUxvYWRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9yZWYgPSBJbmZpbml0ZUxvYWRlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEluZmluaXRlTG9hZGVyKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSAtMSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IC0xLCBfdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdLCBfdGhpcy5fb25JdGVtc1JlbmRlcmVkID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgdmlzaWJsZVN0YXJ0SW5kZXggPSBfcmVmMi52aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4ID0gX3JlZjIudmlzaWJsZVN0b3BJbmRleDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIodmlzaWJsZVN0YXJ0SW5kZXgpIHx8ICFpc0ludGVnZXIodmlzaWJsZVN0b3BJbmRleCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgb25JdGVtc1JlbmRlcmVkIHNpZ25hdHVyZTsgcGxlYXNlIHJlZmVyIHRvIEluZmluaXRlTG9hZGVyIGRvY3VtZW50YXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmxvYWRNb3JlUm93cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW5maW5pdGVMb2FkZXIgXCJsb2FkTW9yZVJvd3NcIiBwcm9wIGhhcyBiZWVuIHJlbmFtZWQgdG8gXCJsb2FkTW9yZUl0ZW1zXCIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSB2aXNpYmxlU3RhcnRJbmRleDtcbiAgICAgIF90aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXggPSB2aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBfdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh2aXNpYmxlU3RhcnRJbmRleCwgdmlzaWJsZVN0b3BJbmRleCk7XG4gICAgfSwgX3RoaXMuX3NldFJlZiA9IGZ1bmN0aW9uIChsaXN0UmVmKSB7XG4gICAgICBfdGhpcy5fbGlzdFJlZiA9IGxpc3RSZWY7XG4gICAgfSwgX3RlbXApLCBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIGNyZWF0ZUNsYXNzKEluZmluaXRlTG9hZGVyLCBbe1xuICAgIGtleTogJ3Jlc2V0bG9hZE1vcmVJdGVtc0NhY2hlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUoKSB7XG4gICAgICB2YXIgYXV0b1JlbG9hZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSBbXTtcblxuICAgICAgaWYgKGF1dG9SZWxvYWQpIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh0aGlzLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LCB0aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodGhpcy5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGxpc3QgcmVmOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG5cblxuICAgICAgcmV0dXJuIGNoaWxkcmVuKHtcbiAgICAgICAgb25JdGVtc1JlbmRlcmVkOiB0aGlzLl9vbkl0ZW1zUmVuZGVyZWQsXG4gICAgICAgIHJlZjogdGhpcy5fc2V0UmVmXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZW5zdXJlUm93c0xvYWRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9lbnN1cmVSb3dzTG9hZGVkKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNJdGVtTG9hZGVkID0gX3Byb3BzLmlzSXRlbUxvYWRlZCxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfcHJvcHMuaXRlbUNvdW50LFxuICAgICAgICAgIF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9IF9wcm9wcy5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcHJvcHMkbWluaW11bUJhdGNoU2kgPT09IHVuZGVmaW5lZCA/IDEwIDogX3Byb3BzJG1pbmltdW1CYXRjaFNpLFxuICAgICAgICAgIF9wcm9wcyR0aHJlc2hvbGQgPSBfcHJvcHMudGhyZXNob2xkLFxuICAgICAgICAgIHRocmVzaG9sZCA9IF9wcm9wcyR0aHJlc2hvbGQgPT09IHVuZGVmaW5lZCA/IDE1IDogX3Byb3BzJHRocmVzaG9sZDtcblxuXG4gICAgICB2YXIgdW5sb2FkZWRSYW5nZXMgPSBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoe1xuICAgICAgICBpc0l0ZW1Mb2FkZWQ6IGlzSXRlbUxvYWRlZCxcbiAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgIG1pbmltdW1CYXRjaFNpemU6IG1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgIHN0YXJ0SW5kZXg6IE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSB0aHJlc2hvbGQpLFxuICAgICAgICBzdG9wSW5kZXg6IE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIHRocmVzaG9sZClcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIGxvYWQtcm93cyB1bmxlc3MgcmFuZ2UgaGFzIGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpcyBtYXliZSBuaWNlIHRvIGRvLlxuICAgICAgaWYgKHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMubGVuZ3RoICE9PSB1bmxvYWRlZFJhbmdlcy5sZW5ndGggfHwgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5zb21lKGZ1bmN0aW9uIChzdGFydE9yU3RvcCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHVubG9hZGVkUmFuZ2VzW2luZGV4XSAhPT0gc3RhcnRPclN0b3A7XG4gICAgICB9KSkge1xuICAgICAgICB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gdW5sb2FkZWRSYW5nZXM7XG4gICAgICAgIHRoaXMuX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2xvYWRVbmxvYWRlZFJhbmdlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9sb2FkVW5sb2FkZWRSYW5nZXModW5sb2FkZWRSYW5nZXMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBsb2FkTW9yZVJvd3Mgd2FzIHJlbmFtZWQgdG8gbG9hZE1vcmVJdGVtcyBpbiB2MS4wLjM7IHdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wXG4gICAgICB2YXIgbG9hZE1vcmVJdGVtcyA9IHRoaXMucHJvcHMubG9hZE1vcmVJdGVtcyB8fCB0aGlzLnByb3BzLmxvYWRNb3JlUm93cztcblxuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHVubG9hZGVkUmFuZ2VzW2ldO1xuICAgICAgICB2YXIgc3RvcEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaSArIDFdO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IGxvYWRNb3JlSXRlbXMoc3RhcnRJbmRleCwgc3RvcEluZGV4KTtcbiAgICAgICAgaWYgKHByb21pc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSB2aXNpYmxlIHJvd3MgaWYgYW55IG9mIHRoZW0gaGF2ZSBqdXN0IGJlZW4gbG9hZGVkLlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgd2lsbCByZW1haW4gaW4gdGhlaXIgdW5sb2FkZWQgdmlzdWFsIHN0YXRlLlxuICAgICAgICAgICAgaWYgKGlzUmFuZ2VWaXNpYmxlKHtcbiAgICAgICAgICAgICAgbGFzdFJlbmRlcmVkU3RhcnRJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXg6IF90aGlzMi5fbGFzdFJlbmRlcmVkU3RvcEluZGV4LFxuICAgICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgICBzdG9wSW5kZXg6IHN0b3BJbmRleFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGFuIHVubW91bnQgd2hpbGUgcHJvbWlzZXMgYXJlIHN0aWxsIGluIGZsaWdodC5cbiAgICAgICAgICAgICAgaWYgKF90aGlzMi5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gUmVzaXplIGNhY2hlZCByb3cgc2l6ZXMgZm9yIFZhcmlhYmxlU2l6ZUxpc3QsXG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHJlLXJlbmRlciB0aGUgbGlzdC5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLnJlc2V0QWZ0ZXJJbmRleChzdGFydEluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBIQUNLIHJlc2V0IHRlbXBvcmFyaWx5IGNhY2hlZCBpdGVtIHN0eWxlcyB0byBmb3JjZSBQdXJlQ29tcG9uZW50IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBncm9zcywgYnV0IEknbSBva2F5IHdpdGggaXQgZm9yIG5vdy5cbiAgICAgICAgICAgICAgICAvLyBEb24ndCBqdWRnZSBtZS5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVubG9hZGVkUmFuZ2VzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gSW5maW5pdGVMb2FkZXI7XG59KFB1cmVDb21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBJbmZpbml0ZUxvYWRlcjtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59IiwidmFyIHNhZmVJc05hTiA9IE51bWJlci5pc05hTiB8fFxuICAgIGZ1bmN0aW9uIHBvbnlmaWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZTtcbiAgICB9O1xuZnVuY3Rpb24gaXNFcXVhbChmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKGZpcnN0ID09PSBzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzYWZlSXNOYU4oZmlyc3QpICYmIHNhZmVJc05hTihzZWNvbmQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgICBpZiAobmV3SW5wdXRzLmxlbmd0aCAhPT0gbGFzdElucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0lucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXF1YWwobmV3SW5wdXRzW2ldLCBsYXN0SW5wdXRzW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplT25lKHJlc3VsdEZuLCBpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gYXJlSW5wdXRzRXF1YWw7IH1cbiAgICB2YXIgbGFzdFRoaXM7XG4gICAgdmFyIGxhc3RBcmdzID0gW107XG4gICAgdmFyIGxhc3RSZXN1bHQ7XG4gICAgdmFyIGNhbGxlZE9uY2UgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGVkT25jZSAmJiBsYXN0VGhpcyA9PT0gdGhpcyAmJiBpc0VxdWFsKG5ld0FyZ3MsIGxhc3RBcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0QXJncyA9IG5ld0FyZ3M7XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVPbmU7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UnO1xuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcbnZhciBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBub3cgPSBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA/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/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoKHNpemUgKyBzY3JvbGxPZmZzZXQgLSBvZmZzZXQpIC8gaXRlbVNpemUpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUl0ZW1zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcykgey8vIE5vb3BcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNykge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWY3Lml0ZW1TaXplO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAoaXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemUpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBQdWxsZWQgZnJvbSByZWFjdC1jb21wYXRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9ibG9iLzdjNWRlMDBlN2M4NWUyZmZkMDExYmYzYWYwMjg5OWI2M2Y2OTlkM2Evc3JjL2luZGV4LmpzI0wzNDlcbmZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKHByZXYsIG5leHQpIHtcbiAgZm9yICh2YXIgYXR0cmlidXRlIGluIHByZXYpIHtcbiAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbmV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIF9hdHRyaWJ1dGUgaW4gbmV4dCkge1xuICAgIGlmIChwcmV2W19hdHRyaWJ1dGVdICE9PSBuZXh0W19hdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZVwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wic3R5bGVcIl07XG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0bWVtb1xuXG5mdW5jdGlvbiBhcmVFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0eWxlID0gcHJldlByb3BzLnN0eWxlLFxuICAgICAgcHJldlJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcmV2UHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgdmFyIG5leHRTdHlsZSA9IG5leHRQcm9wcy5zdHlsZSxcbiAgICAgIG5leHRSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UobmV4dFByb3BzLCBfZXhjbHVkZWQyKTtcblxuICByZXR1cm4gIXNoYWxsb3dEaWZmZXJzKHByZXZTdHlsZSwgbmV4dFN0eWxlKSAmJiAhc2hhbGxvd0RpZmZlcnMocHJldlJlc3QsIG5leHRSZXN0KTtcbn1cblxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcblxuZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gIHJldHVybiAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpO1xufVxuXG5leHBvcnQgeyBGaXhlZFNpemVHcmlkLCBGaXhlZFNpemVMaXN0LCBWYXJpYWJsZVNpemVHcmlkLCBWYXJpYWJsZVNpemVMaXN0LCBhcmVFcXVhbCwgc2hvdWxkQ29tcG9uZW50VXBkYXRlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20uanMubWFwXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIEJ1dHRvblByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gIG9uUG9pbnRlckRvd24/OiAoZXZlbnQ6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwibGVmdFwiIHwgXCJyaWdodFwiPjtcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG9uUG9pbnRlckRvd24sXG4gIGNvbnRhaW5lclJlZixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSxcbn06IEJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBvblBvaW50ZXJEb3duPXtvblBvaW50ZXJEb3dufVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uIH0gZnJvbSBcIi4vQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uQmFkZ2UubW9kdWxlLmNzc1wiO1xuXG50eXBlIEJ1dHRvbkJhZGdlUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQnV0dG9uQmFkZ2UoeyBjaGlsZHJlbiwgaW52ZXJ0ZWQgPSBmYWxzZSwgY2xhc3NOYW1lIH06IEJ1dHRvbkJhZGdlUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5idXR0b25CYWRnZSwge1tzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZH0sIGNsYXNzTmFtZV0pfT57Y2hpbGRyZW59PC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhZGdlO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25CYWRnZSB9IGZyb20gXCIuL0J1dHRvbkJhZGdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuXG50eXBlIEJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gICAgICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBCdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc2l6ZSxcbiAgY29udGFpbmVyUmVmLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgLi4ucHJvcHNcbn06IEJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25MaW5rO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25MaW5rIH0gZnJvbSBcIi4vQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuXG50eXBlIENoZWNrYm94UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpemU/OiBTaXplO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIHBsYWNlaG9sZGVyLFxuICBjaGVja2VkLFxuICBkaXNhYmxlZCxcbiAgbmFtZSxcbiAgY2xhc3NOYW1lLFxuICBpbmRldGVybWluYXRlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG59OiBDaGVja2JveFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TGFiZWwgdmFsdWU9e2xhYmVsfT5cbiAgICAgIDxpbnB1dFxuICAgICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPXsoaW5wdXRSZWYpID0+IHtcbiAgICAgICAgICBpZiAoaW5wdXRSZWYpIHtcbiAgICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY2hlY2tib3gsIGNsYXNzTmFtZSwgc3R5bGVzW3NpemVdXSl9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAvPlxuICAgIDwvTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGVja2JveCB9IGZyb20gXCIuL0NoZWNrYm94XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbG9yU3dhdGNoIH0gZnJvbSBcIi4uL0NvbG9yU3dhdGNoXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yUGlja2VyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JQaWNrZXJQcm9wcyA9IHtcbiAgY29sb3JzOiBDb2xvcltdO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBkaXJlY3Rpb24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcbiAgb25TZWxlY3Q6IChjb2xvcjogQ29sb3IpID0+IHZvaWQ7XG4gIHNlbGVjdGVkQ29sb3I/OiBDb2xvcjtcbiAgY2FuVG9nZ2xlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIENvbG9yUGlja2VyKHtcbiAgY29sb3JzLFxuICBjb250YWluZXJSZWYsXG4gIG9uU2VsZWN0LFxuICBzZWxlY3RlZENvbG9yLFxuICBkaXJlY3Rpb24gPSBcInZlcnRpY2FsXCIsXG4gIGNhblRvZ2dsZSA9IGZhbHNlLFxufTogQ29sb3JQaWNrZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbG9yUGlja2VyLCBzdHlsZXNbZGlyZWN0aW9uXV0pfVxuICAgID5cbiAgICAgIHtjb2xvcnMubWFwKChjb2xvcjogQ29sb3IpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ub2dnbGUgJiYgY29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXkpIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvblNlbGVjdChjb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPENvbG9yU3dhdGNoXG4gICAgICAgICAgICBrZXk9e2NvbG9yLmtleX1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2NvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JQaWNrZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yUGlja2VyIH0gZnJvbSBcIi4vQ29sb3JQaWNrZXJcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclN3YXRjaC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xvciwgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIENvbG9yU3dhdGNoUHJvcHMgPSB7XG4gIGNvbG9yOiBDb2xvcjtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIENvbG9yU3dhdGNoKHtcbiAgY29sb3IsXG4gIGNvbnRhaW5lclJlZixcbiAgaXNTZWxlY3RlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgb25DbGljayxcbn06IENvbG9yU3dhdGNoUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29sb3JTd2F0Y2gsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc1NlbGVjdGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBkYXRhLXRlc3RpZD1cImNvbG9yLXN3YXRjaFwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvci5oZXhDb2RlIH19XG4gICAgPlxuICAgICAge2NvbG9yLmxhYmVsICYmIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNyT25seX0+e2BTZWxlY3QgJHtjb2xvci5sYWJlbH0gY29sb3JgfTwvc3Bhbj59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yU3dhdGNoO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclN3YXRjaCB9IGZyb20gXCIuL0NvbG9yU3dhdGNoXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuLi9Nb2RhbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ29uZmlybWF0aW9uTW9kYWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBidXR0b25zTGVmdD86IFJlYWN0RWxlbWVudFtdO1xuICBidXR0b25zUmlnaHQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaXNPcGVuOiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gQ29uZmlybWF0aW9uTW9kYWwoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaXNPcGVuLFxuICBidXR0b25zTGVmdCA9IFtdLFxuICBidXR0b25zUmlnaHQgPSBbXSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIGJhc2VaSW5kZXggPSAxMDE5LFxufTogQ29uZmlybWF0aW9uTW9kYWxQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgY29udGFpbmVyUmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBub092ZXJsYXk9e25vT3ZlcmxheX1cbiAgICAgIG5vU2hhZG93PXtub1NoYWRvd31cbiAgICAgIGJhc2VaSW5kZXg9e2Jhc2VaSW5kZXh9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgIHshIWhlYWRlciAmJiA8aDEgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxIZWFkZXJ9PntoZWFkZXJ9PC9oMT59XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbENvbnRlbnQsXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zTGVmdH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNSaWdodH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L01vZGFsPlxuICApO1xufVxuXG5Db25maXJtYXRpb25Nb2RhbC5kaXNwbGF5TmFtZSA9IFwiQ29uZmlybWF0aW9uTW9kYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlybWF0aW9uTW9kYWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgeyBJdGVtLCBSZW5kZXJEaXNwbGF5UHJvcHMgfSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL0NsaWNrYWJsZS5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBpY29uTWVudSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5cbmV4cG9ydCB0eXBlIENsaWNrYWJsZVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IE9taXQ8XG4gIFJlbmRlckRpc3BsYXlQcm9wczxUPixcbiAgXCJzZWxlY3RlZEl0ZW1cIiB8IFwidG9nZ2xlSXNPcGVuXCJcbj4gJiB7XG4gIG9uQ2xpY2s6IFJlbmRlckRpc3BsYXlQcm9wczxUPltcInRvZ2dsZUlzT3BlblwiXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDbGlja2FibGU8VCBleHRlbmRzIEl0ZW0+KHtcbiAgZGlzcGxheSxcbiAgaXNEaXNhYmxlZCxcbiAgb25DbGljazogaGFuZGxlQ2xpY2ssXG59OiBDbGlja2FibGVQcm9wczxUPikge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5jb250YWluZXJ9PlxuICAgICAgICB7ZGlzcGxheX1cbiAgICAgICAgPEljb24gYWx0PVwiRHJvcGRvd25cIiBzcmM9e2ljb25NZW51fSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RDaGlsZCwgUmVhY3RFbGVtZW50LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5cbmltcG9ydCB7IENsaWNrYWJsZSB9IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuaW1wb3J0IHsgTWVudSwgTWVudUNvbnRhaW5lciwgTWVudUl0ZW0sIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi4vTWVudVwiO1xuXG5leHBvcnQgdHlwZSBJdGVtID0geyBpZDogbnVtYmVyIHwgc3RyaW5nOyBuYW1lOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyRGlzcGxheVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IFBpY2s8XG4gIERyb3Bkb3duUHJvcHM8VD4sXG4gIFwiZGlzcGxheVwiIHwgXCJzZWxlY3RlZEl0ZW1cIlxuPiAmIHsgaXNEaXNhYmxlZDogYm9vbGVhbjsgdG9nZ2xlSXNPcGVuOiAoKSA9PiB2b2lkIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckNsaWNrYWJsZUZuPFQgZXh0ZW5kcyBJdGVtPiA9IChcbiAgcHJvcHM6IFJlbmRlckRpc3BsYXlQcm9wczxUPlxuKSA9PiBSZWFjdEVsZW1lbnQ7XG5cbmV4cG9ydCB0eXBlIEl0ZW1Cb2R5UmVuZGVyZXJGbjxUIGV4dGVuZHMgSXRlbT4gPSAoc3RhdGU6IHtcbiAgaXRlbTogVDtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbn0pID0+IFJlYWN0Q2hpbGQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25Qcm9wczxUIGV4dGVuZHMgSXRlbT4ge1xuICBpdGVtQm9keVJlbmRlcmVyPzogSXRlbUJvZHlSZW5kZXJlckZuPFQ+O1xuICBpdGVtczogVFtdO1xuICBvblNlbGVjdDogKGl0ZW06IFQpID0+IHZvaWQ7XG4gIGRpc3BsYXk6IFJlYWN0Q2hpbGQ7XG4gIHJlbmRlckNsaWNrYWJsZT86IFJlbmRlckNsaWNrYWJsZUZuPFQ+O1xuICBzZWxlY3RlZEl0ZW06IFQgfCBudWxsO1xuICBwbGFjZW1lbnQ/OiBNZW51UGxhY2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd248VCBleHRlbmRzIEl0ZW0+KHtcbiAgaXRlbUJvZHlSZW5kZXJlcixcbiAgaXRlbXMsXG4gIG9uU2VsZWN0OiBoYW5kbGVTZWxlY3QsXG4gIGRpc3BsYXksXG4gIHJlbmRlckNsaWNrYWJsZSxcbiAgc2VsZWN0ZWRJdGVtLFxuICBwbGFjZW1lbnQgPSB7IHZlcnRpY2FsOiBcImJvdHRvbVwiLCBob3Jpem9udGFsOiBcImxlZnRcIiB9XG59OiBEcm9wZG93blByb3BzPFQ+KSB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiBzZXRJc09wZW4oZmFsc2UpKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoaXRlbTogVCkgPT4ge1xuICAgIGhhbmRsZVNlbGVjdChpdGVtKTtcbiAgICBzZXRJc09wZW4oZmFsc2UpO1xuICB9O1xuICBjb25zdCBpc0Rpc2FibGVkID0gIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgdG9nZ2xlSXNPcGVuID0gKCkgPT4gc2V0SXNPcGVuKCFpc09wZW4pO1xuXG4gIHJldHVybiAoXG4gICAgPE1lbnVDb250YWluZXJcbiAgICAgIGJ1dHRvbj17XG4gICAgICAgIHR5cGVvZiByZW5kZXJDbGlja2FibGUgPT09IFwiZnVuY3Rpb25cIiA/IChcbiAgICAgICAgICByZW5kZXJDbGlja2FibGUoe1xuICAgICAgICAgICAgZGlzcGxheSxcbiAgICAgICAgICAgIGlzRGlzYWJsZWQsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW0sXG4gICAgICAgICAgICB0b2dnbGVJc09wZW4sXG4gICAgICAgICAgfSlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q2xpY2thYmxlXG4gICAgICAgICAgICBkaXNwbGF5PXtkaXNwbGF5fVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUlzT3Blbn1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG4gICAgICBwbGFjZW1lbnQ9e3BsYWNlbWVudH1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIDxNZW51IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAge2l0ZW1zICYmXG4gICAgICAgICAgaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICA8TWVudUl0ZW1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9e2l0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWR9XG4gICAgICAgICAgICAgIGtleT17aXRlbS5pZH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ2xpY2soaXRlbSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtpdGVtQm9keVJlbmRlcmVyXG4gICAgICAgICAgICAgICAgPyBpdGVtQm9keVJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogaXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBpdGVtLm5hbWV9XG4gICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICkpfVxuICAgICAgPC9NZW51PlxuICAgIDwvTWVudUNvbnRhaW5lcj5cbiAgKTtcbn1cbiIsImV4cG9ydCB7XG4gIERyb3Bkb3duLFxuICBEcm9wZG93blByb3BzLFxuICBJdGVtIGFzIERyb3Bkb3duSXRlbSxcbiAgSXRlbUJvZHlSZW5kZXJlckZuIGFzIERyb3Bkb3duSXRlbUJvZHlSZW5kZXJlckZuLFxuICBSZW5kZXJDbGlja2FibGVGbiBhcyBEcm9wZG93blJlbmRlckNsaWNrYWJsZUZuLFxuICBSZW5kZXJEaXNwbGF5UHJvcHMgYXMgRHJvcGRvd25SZW5kZXJEaXNwbGF5UHJvcHMsXG59IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5leHBvcnQge1xuICBDbGlja2FibGUgYXMgRHJvcGRvd25DbGlja2FibGUsXG4gIENsaWNrYWJsZVByb3BzIGFzIERyb3Bkb3duQ2xpY2thYmxlUHJvcHNcbn0gZnJvbSBcIi4vQ2xpY2thYmxlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcblxudHlwZSBQcm9wcyA9IHtcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIHNpemU/OiBGaWxlSW5wdXRTaXplO1xufTtcblxuZnVuY3Rpb24gRmlsZUlucHV0KHtcbiAgY2hpbGRyZW4sXG4gIGFjY2VwdCxcbiAgb25DaGFuZ2UsXG4gIGlucHV0UmVmLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubGFiZWwsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGlkPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEZpbGVJbnB1dCB9IGZyb20gXCIuL0ZpbGVJbnB1dFwiO1xuZXhwb3J0IHsgRmlsZUlucHV0U2l6ZSB9IGZyb20gXCIuL0ZpbGVJbnB1dFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUGxhY2VtZW50ID0ge1xuICBob3Jpem9udGFsOlxuICAgIHwgXCJyaWdodFwiXG4gICAgfCBcInJpZ2h0RWRnZVwiXG4gICAgfCBcInJpZ2h0T25FZGdlXCJcbiAgICB8IFwibGVmdFwiXG4gICAgfCBcImxlZnRFZGdlXCJcbiAgICB8IFwibGVmdE9uRWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJjZW50ZXJcIjtcbiAgdmVydGljYWw6XG4gICAgfCBcInRvcFwiXG4gICAgfCBcInRvcEVkZ2VcIlxuICAgIHwgXCJ0b3BPbkVkZ2VcIlxuICAgIHwgXCJib3R0b21cIlxuICAgIHwgXCJib3R0b21FZGdlXCJcbiAgICB8IFwiYm90dG9tT25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHBhcmVudDogXCJ2aWV3cG9ydFwiIHwgXCJjb250YWluZXJcIjtcbn07XG5cbnR5cGUgRmxvYXRpbmdQYW5lbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGxheW91dD86IFwiY29sdW1uXCIgfCBcInJvd1wiO1xuICBwbGFjZW1lbnQ/OiBQbGFjZW1lbnQ7XG59O1xuXG5mdW5jdGlvbiBGbG9hdGluZ1BhbmVsKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbHVtblwiLFxuICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiLCBwYXJlbnQ6IFwidmlld3BvcnRcIiB9LFxufTogRmxvYXRpbmdQYW5lbFByb3BzKSB7XG4gIGNvbnN0IGhvcml6b250YWxQbGFjZW1lbnQgPVxuICAgIHBsYWNlbWVudC5ob3Jpem9udGFsID09PSBcImNlbnRlclwiXG4gICAgICA/IFwiaG9yaXpvbnRhbENlbnRlclwiXG4gICAgICA6IHBsYWNlbWVudC5ob3Jpem9udGFsO1xuXG4gIGNvbnN0IHZlcnRpY2FsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQudmVydGljYWwgPT09IFwiY2VudGVyXCIgPyBcInZlcnRpY2FsQ2VudGVyXCIgOiBwbGFjZW1lbnQudmVydGljYWw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiZmxvYXRpbmctcGFuZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tob3Jpem9udGFsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW3ZlcnRpY2FsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW2xheW91dF0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogcGxhY2VtZW50LnBhcmVudCAhPT0gXCJjb250YWluZXJcIixcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGbG9hdGluZ1BhbmVsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9hdGluZ1BhbmVsIH0gZnJvbSBcIi4vRmxvYXRpbmdQYW5lbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBJY29uUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxJbWFnZUVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHNyYzogc3RyaW5nO1xuICBzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIiB8IFwieGxhcmdlXCI7XG59O1xuXG5mdW5jdGlvbiBJY29uKHtcbiAgc3JjLFxuICBhbHQsXG4gIGNvbnRhaW5lclJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGludmVydGVkID0gZmFsc2UsXG59OiBJY29uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8aW1nXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCB9LFxuICAgICAgXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImljb25cIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e3NyY31cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uIH0gZnJvbSBcIi4vSWNvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBCdXR0b25CYWRnZSB9IGZyb20gXCIuLi9CdXR0b25CYWRnZVwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIEljb25CdXR0b25Qcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgc3JjOiBzdHJpbmc7XG4gIGFsdDogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIj47XG59O1xuXG5mdW5jdGlvbiBJY29uQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIGNoaWxkcmVuLFxuICBzcmMsXG4gIGFsdCxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgb25DbGljayA9ICgpID0+IHt9LFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlID0gXCJidXR0b25cIixcbn06IEljb25CdXR0b25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMudG9wT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInRvcFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICAgIFtzdHlsZXMuYm90dG9tT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImJvdHRvbVwiKSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uIH0gZnJvbSBcIi4vSWNvbkJ1dHRvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIjtcblxudHlwZSBJY29uQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIHNyYzogc3RyaW5nO1xuICAgICAgYWx0OiBzdHJpbmc7XG4gICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEljb25CdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzcmMsXG4gIGFsdCxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IEljb25CdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImljb24tYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uTGluaztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9JY29uQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ltYWdlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VQcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNyY1dpZHRoPzogbnVtYmVyO1xuICBzcmNIZWlnaHQ/OiBudW1iZXI7XG4gIGRlY29kaW5nPzogXCJhc3luY1wiIHwgXCJzeW5jXCIgfCBcImF1dG9cIjtcbiAgbG9hZGluZz86IFwiZWFnZXJcIiB8IFwibGF6eVwiO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBJbWFnZUNvbXBvbmVudCh7XG4gIHNyYyxcbiAgYWx0LFxuICBzcmNXaWR0aCxcbiAgc3JjSGVpZ2h0LFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbiAgZGVjb2RpbmcgPSBcImF1dG9cIixcbiAgbG9hZGluZyA9IFwiZWFnZXJcIixcbiAgc3R5bGUsXG59OiBJbWFnZVByb3BzKSB7XG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IChcbiAgICA8aW1nXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW1hZ2UsIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImltYWdlXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgICB3aWR0aD17c3JjV2lkdGh9XG4gICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cbiAgICAgIGRlY29kaW5nPXtkZWNvZGluZ31cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgLz5cbiAgKTtcblxuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIHtpbWFnZUVsZW1lbnR9XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIGltYWdlRWxlbWVudFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZUNvbXBvbmVudDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiLi9JbWFnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGFiZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIExhYmVsSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxMYWJlbEVsZW1lbnQ+O1xuICB2YWx1ZTogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGFiZWwoeyBjbGFzc05hbWUsIGNoaWxkcmVuLCB2YWx1ZSwgY29udGFpbmVyUmVmIH06IExhYmVsSW5wdXRQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX1cbiAgICA+XG4gICAgICB7dmFsdWV9XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIExhYmVsIH0gZnJvbSBcIi4vTGFiZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld1Byb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHsgdGV4dDogc3RyaW5nOyBpZDogc3RyaW5nIH07XG4gIGhlYWRlckFjdGlvbnM/OiBSZWFjdE5vZGU7XG59O1xuXG5mdW5jdGlvbiBMaXN0Vmlldyh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgaGVhZGVyLFxuICBoZWFkZXJBY3Rpb25zLFxufTogTGlzdFZpZXdQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIHsoaGVhZGVyIHx8IGhlYWRlckFjdGlvbnMpICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PlxuICAgICAgICAgIHtoZWFkZXIgJiYgKFxuICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlckxhYmVsfSBpZD17aGVhZGVyLmlkfT5cbiAgICAgICAgICAgICAge2hlYWRlci50ZXh0fVxuICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtoZWFkZXJBY3Rpb25zfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8dWwgYXJpYS1sYWJlbGxlZGJ5PXtoZWFkZXI/LmlkfSBjbGFzc05hbWU9e3N0eWxlcy5saXN0fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXc7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld0l0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYWN0aXZlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBMaXN0Vmlld0l0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0l0ZW07XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b25MaW5rIH0gZnJvbSBcIi4uL0J1dHRvbkxpbmtcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBMaXN0Vmlld0xpbmtJdGVtUHJvcHMgPVxuICB8IHtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgYWN0aXZlOiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc6IGJvb2xlYW47XG4gICAgICBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgICAgc2l6ZTogU2l6ZTtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0xpbmtJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFzOiBDb21wb25lbnQsXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IExpc3RWaWV3TGlua0l0ZW1Qcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25MaW5rXG4gICAgICAgIGFzPXtDb21wb25lbnR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uTGluaz5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0xpbmtJdGVtO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0VmlldyB9IGZyb20gXCIuL0xpc3RWaWV3XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3SXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0xpbmtJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdMaW5rSXRlbVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFBsYWNlbWVudENvbnRleHQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnUubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcbiAgc21hcnRMYXlvdXQ/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gTWVudSh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGNsYXNzTmFtZSxcbiAgaXNPcGVuID0gdHJ1ZSxcbiAgaGVhZGVyLFxuICBmb290ZXIsXG4gIHNtYXJ0TGF5b3V0ID0gdHJ1ZSxcbn06IE1lbnVQcm9wcykge1xuICBjb25zdCBtZW51UGxhY2VtZW50ID0gdXNlQ29udGV4dChQbGFjZW1lbnRDb250ZXh0KTtcbiAgY29uc3QgaW5uZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVmID0gY29udGFpbmVyUmVmIHx8IGlubmVyUmVmO1xuXG4gIGlmICghbWVudVBsYWNlbWVudClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIk1lbnUgY29tcG9uZW50IG11c3QgYmUgd3JhcHBlZCBieSBhIE1lbnVDb250YWluZXIgY29tcG9uZW50LlwiXG4gICAgKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzbWFydExheW91dCAmJiByZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgeyB0b3AsIGJvdHRvbSB9ID0gcmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBkaXN0YW5jZVRvRWRnZSA9XG4gICAgICAgIG1lbnVQbGFjZW1lbnQudmVydGljYWwgPT09IFwidG9wXCIgPyB0b3AgOiB3aW5kb3cuaW5uZXJIZWlnaHQgLSBib3R0b207XG5cbiAgICAgIGlmIChkaXN0YW5jZVRvRWRnZSA8IDApIHtcbiAgICAgICAgY29uc3QgdWxFbCA9IHJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJ1bFwiKTtcbiAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IHVsRWwucXVlcnlTZWxlY3RvckFsbChcImxpLGFcIik7XG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHVsRWwuY2xpZW50SGVpZ2h0ICsgZGlzdGFuY2VUb0VkZ2U7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGNoaWxkRWxlbWVudHMubGVuZ3RoXG4gICAgICAgICAgPyBnZXRDb21wdXRlZFN0eWxlKGNoaWxkRWxlbWVudHNbMF0pLm1pbkhlaWdodFxuICAgICAgICAgIDogMDtcbiAgICAgICAgdWxFbC5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke25ld0hlaWdodH1weCAtICR7b2Zmc2V0fSlgO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgbWVudVBsYWNlbWVudCwgc21hcnRMYXlvdXRdKTtcblxuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLm1lbnUsXG4gICAgICAgICAgeyBbc3R5bGVzLm9wZW5dOiBpc09wZW4gfSxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIF0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHtoZWFkZXIgJiYgaXNPcGVuICYmIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PntoZWFkZXJ9PC9oMz59XG4gICAgICAgICAgPHVsPntjaGlsZHJlbn08L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2Zvb3RlciAmJiBpc09wZW4gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuZm9vdGVyLFxuICAgICAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiAhY2hpbGRyZW4gfSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmb290ZXJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudTtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIFJlYWN0RWxlbWVudCxcbiAgZm9yd2FyZFJlZixcbiAgRm9yd2FyZGVkUmVmLFxuICB1c2VNZW1vLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTWVudVBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDogXCJyaWdodFwiIHwgXCJsZWZ0XCI7XG4gIHZlcnRpY2FsOiBcInRvcFwiIHwgXCJib3R0b21cIjtcbn07XG5cbnR5cGUgTWVudUNvbnRhaW5lclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBidXR0b24/OiBSZWFjdEVsZW1lbnQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBQbGFjZW1lbnRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxcbiAgTWVudUNvbnRhaW5lclByb3BzW1wicGxhY2VtZW50XCJdIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmZ1bmN0aW9uIE1lbnVDb250YWluZXIoXG4gIHtcbiAgICBjaGlsZHJlbixcbiAgICBidXR0b24sXG4gICAgY2xhc3NOYW1lLFxuICAgIHBsYWNlbWVudCA9IHsgaG9yaXpvbnRhbDogXCJsZWZ0XCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiIH0sXG4gIH06IE1lbnVDb250YWluZXJQcm9wcyxcbiAgcmVmOiBGb3J3YXJkZWRSZWY8SFRNTERpdkVsZW1lbnQ+XG4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7YnV0dG9ufVxuICAgICAgPFBsYWNlbWVudENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3VzZU1lbW8oKCkgPT4gcGxhY2VtZW50LCBbcGxhY2VtZW50XSl9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubWVudUNvbnRhaW5lcixcbiAgICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQuaG9yaXpvbnRhbF0sXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50LnZlcnRpY2FsXSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1BsYWNlbWVudENvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcndhcmRSZWYoTWVudUNvbnRhaW5lcik7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51SXRlbVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxMSUVsZW1lbnQ+KSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTWVudUl0ZW0oe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBvbkNsaWNrLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgaXNBY3RpdmUgPSBmYWxzZSxcbn06IE1lbnVJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGlcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubWVudUl0ZW0sXG4gICAgICAgIHsgW3N0eWxlcy5hY3RpdmVdOiBpc0FjdGl2ZSB9LFxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudUl0ZW07XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVMaW5rSXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudUxpbmtJdGVtUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzOiBFbGVtZW50VHlwZTtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU6IHN0cmluZztcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gTWVudUxpbmtJdGVtKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIC4uLnByb3BzXG59OiBNZW51TGlua0l0ZW1Qcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICBkYXRhLXRlc3RpZD1cIm1lbnUtbGluay1pdGVtXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubWVudUxpbmtJdGVtLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudUxpbmtJdGVtO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51IH0gZnJvbSBcIi4vTWVudVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51Q29udGFpbmVyLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4vTWVudUNvbnRhaW5lclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51SXRlbSB9IGZyb20gXCIuL01lbnVJdGVtXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVMaW5rSXRlbSB9IGZyb20gXCIuL01lbnVMaW5rSXRlbVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTW9kYWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYnV0dG9uPzogUmVhY3ROb2RlO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIE1vZGFsKHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaXNPcGVuLFxuICBidXR0b24sXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIGJhc2VaSW5kZXggPSAxMDA5LFxufTogTW9kYWxQcm9wcykge1xuICB1c2VIb3RrZXlzKFwiRXNjYXBlXCIsIG9uQ2xvc2UpO1xuXG4gIGNvbnN0IGhhbmRsZU92ZXJsYXlDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNsb3NlKCk7XG4gIH0sIFtvbkNsb3NlXSk7XG5cbiAgcmV0dXJuIChcbiAgICBpc09wZW4gJiYgKFxuICAgICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlT3ZlcmxheUNsaWNrfVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMSB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7YnV0dG9uICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAyIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YnV0dG9ufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTW9kYWwgfSBmcm9tIFwiLi9Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9OdW1wYWQubW9kdWxlLmNzc1wiO1xuXG5pbXBvcnQgYmFja3NwYWNlSWNvbiBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2JhY2tzcGFjZS5zdmdcIjtcblxudHlwZSBEaWdpdCA9IDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDk7XG5cbmNvbnN0IGFwcGVuZERpZ2l0ID0gKG51bWJlcjogbnVtYmVyLCBkaWdpdDogRGlnaXQpID0+IHtcbiAgcmV0dXJuIG51bWJlciAqIDEwICsgZGlnaXQ7XG59O1xuXG5jb25zdCBwb3BEaWdpdCA9IChudW1iZXI6IG51bWJlcikgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIgLyAxMCk7XG59O1xuXG5jb25zdCBldmVudERpZ2l0S2V5cyA9IFtcIjBcIiwgXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtcGFkUHJvcHMge1xuICBudW1iZXI6IG51bWJlcjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBvbkNoYW5nZTogKG5ld051bWJlcjogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgTnVtcGFkID0gUmVhY3QuZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgTnVtcGFkUHJvcHM+KFxuICAoeyBudW1iZXIsIG9uQ2hhbmdlLCBkaXNhYmxlZCA9IGZhbHNlIH0sIHJlZikgPT4geyAgICBcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwiQmFja3NwYWNlXCIpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShwb3BEaWdpdChudW1iZXIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnREaWdpdEtleXMuaW5jbHVkZXMoZS5rZXkpKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZGlnaXQgPSBwYXJzZUludChlLmtleSwgMTApIGFzIERpZ2l0O1xuICAgICAgICBvbkNoYW5nZShhcHBlbmREaWdpdChudW1iZXIsIGRpZ2l0KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyID0gKG5ld051bWJlcjogbnVtYmVyKSA9PlxuICAgICAgKGU6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShuZXdOdW1iZXIpO1xuICAgICAgfTtcblxuICAgIGNvbnN0IE51bXBhZEtleXMgPSBBcnJheSgxMClcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBudW1wYWRWYWx1ZSA9ICgoaW5kZXggKyAxKSAlIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihhcHBlbmREaWdpdChudW1iZXIsIG51bXBhZFZhbHVlKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge251bXBhZFZhbHVlfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1wYWR9IHJlZj17cmVmfSB0YWJJbmRleD17LTF9IG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn0gZGF0YS10ZXN0aWQ9XCJudW1wYWRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1iZXJzfT5cbiAgICAgICAgICB7TnVtcGFkS2V5c31cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihwb3BEaWdpdChudW1iZXIpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBhbHQ9XCJCYWNrc3BhY2VcIiBzcmM9e2JhY2tzcGFjZUljb259IC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuKTtcbiIsImV4cG9ydCB7IE51bXBhZCB9IGZyb20gXCIuL051bXBhZFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL092ZXJsYXkubW9kdWxlLmNzc1wiO1xuXG50eXBlIE92ZXJsYXlQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBpc0ZpeGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBPdmVybGF5KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgaXNGaXhlZCA9IGZhbHNlLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBPdmVybGF5UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IGlzRml4ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPdmVybGF5O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5IH0gZnJvbSBcIi4vT3ZlcmxheVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vR3JvdXBPcHRpb24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tIFwiLi4vT3B0aW9uXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uLy4uL0ljb25CdXR0b25cIjtcbmltcG9ydCBpY29uQ2FyZXREb3duIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvc2VsZWN0LWNhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlPjtcbn07XG5cbmZ1bmN0aW9uIEdyb3VwT3B0aW9uKHsgY2xhc3NOYW1lLCBsYWJlbCwgb3B0aW9ucyB9OiBQcm9wcykge1xuICBjb25zdCB7IHNob3dFeHBhbmRlZEdyb3VwIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuICBjb25zdCBbZXhwYW5kZWQsIHRvZ2dsZUV4cGFuZF0gPSB1c2VUb2dnbGUoc2hvd0V4cGFuZGVkR3JvdXApO1xuXG4gIGNvbnN0IGhhbmRsZUdyb3VwQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlRXhwYW5kKCk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9IG9uQ2xpY2s9e2hhbmRsZUdyb3VwQ2xpY2t9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT57bGFiZWx9PC9kaXY+XG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICB7IFtzdHlsZXMuZXhwYW5kZWRdOiBleHBhbmRlZCB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIHNyYz17aWNvbkNhcmV0RG93bn1cbiAgICAgICAgICBhbHQ9e2V4cGFuZGVkID8gXCJDb2xsYXBzZVwiIDogXCJFeHBhbmRcIn1cbiAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtleHBhbmRlZCAmJlxuICAgICAgICBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiAoXG4gICAgICAgICAgPE9wdGlvbiBrZXk9e29wdGlvbi52YWx1ZX0gZGF0YT17b3B0aW9ufT5cbiAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgPC9PcHRpb24+XG4gICAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBHcm91cE9wdGlvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgR3JvdXBPcHRpb24gfSBmcm9tIFwiLi9Hcm91cE9wdGlvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIHVzZUNhbGxiYWNrLFxuICB1c2VDb250ZXh0LFxuICB1c2VNZW1vLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PcHRpb24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tIFwiLi4vLi4vQ2hlY2tib3hcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRhdGE6IE9wdGlvblR5cGU7XG59O1xuXG5mdW5jdGlvbiBPcHRpb24oeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBkYXRhIH06IFByb3BzKSB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIHNlbGVjdGVkT3B0aW9ucywgdXBkYXRlU2VsZWN0ZWRPcHRpb24gfSA9XG4gICAgdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcblxuICBjb25zdCBpc0NoZWNrZWQgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkT3B0aW9ucy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpLmluY2x1ZGVzKGRhdGEudmFsdWUpLFxuICAgIFtkYXRhLCBzZWxlY3RlZE9wdGlvbnNdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24oZGF0YSk7XG4gIH0sIFtkYXRhLCBzZWxlY3RlZE9wdGlvbnNdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuc2VsZWN0ZWRdOiBpc0NoZWNrZWQgJiYgIW11bHRpcGxlIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgPlxuICAgICAge211bHRpcGxlICYmIChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3hDb250YWluZXJ9PlxuICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3h9XG4gICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICl9XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sYWJlbH0+e2NoaWxkcmVufTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3B0aW9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPcHRpb24gfSBmcm9tIFwiLi9PcHRpb25cIjtcbiIsImltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gXCIuLi8uLi9DaGVja2JveFwiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb24gfSBmcm9tIFwiLi4vR3JvdXBPcHRpb25cIjtcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gXCIuLi9PcHRpb25cIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL09wdGlvbkxpc3QubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlPjtcbiAgb25GaWx0ZXI/OiAob3B0aW9uOiBPcHRpb25UeXBlLCBzZWFyY2hLZXl3b3JkOiBzdHJpbmcpID0+IGJvb2xlYW47XG4gIG9uQ2hhbmdlPzogKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDtcbn07XG5cbi8vIHNlZSBkb2NzIHRvIHVuZGVyc3RhbmQgbmVlZCBvZiB0aGUgZnVuY3Rpb24gYmVsb3cgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9uYXJyb3dpbmcuaHRtbCN1c2luZy10eXBlLXByZWRpY2F0ZXNcbmV4cG9ydCBjb25zdCBpc09wdGlvbiA9IChcbiAgb3B0aW9uOiBPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlXG4pOiBvcHRpb24gaXMgT3B0aW9uVHlwZSA9PiB7XG4gIHJldHVybiAob3B0aW9uIGFzIE9wdGlvblR5cGUpLnZhbHVlICE9PSB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiBPcHRpb25MaXN0KHsgb3B0aW9ucywgb25GaWx0ZXIsIG9uQ2hhbmdlIH06IFByb3BzKSB7XG4gIGNvbnN0IFtzZWxlY3RBbGxDaGVja2VkLCB0b2dnbGVTZWxlY3RBbGxDaGVja2VkXSA9IHVzZVRvZ2dsZShmYWxzZSk7XG4gIGNvbnN0IHtcbiAgICBtdWx0aXBsZSxcbiAgICBzZWFyY2hLZXl3b3JkLFxuICAgIHNlbGVjdEFsbCxcbiAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICB9ID0gdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcblxuICBjb25zdCBoYXNHcm91cE9wdGlvbiA9IG9wdGlvbnMuc29tZSgob3B0aW9uKSA9PiAhaXNPcHRpb24ob3B0aW9uKSk7XG5cbiAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IChvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlPikgPT4ge1xuICAgIGNvbnN0IGtleXdvcmQgPSBzZWFyY2hLZXl3b3JkLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgcmV0dXJuIGtleXdvcmQubGVuZ3RoXG4gICAgICA/IG9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgb25GaWx0ZXJcbiAgICAgICAgICAgID8gb25GaWx0ZXIob3B0aW9uLCBrZXl3b3JkKVxuICAgICAgICAgICAgOiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhrZXl3b3JkKVxuICAgICAgICApXG4gICAgICA6IG9wdGlvbnM7XG4gIH07XG5cbiAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gdXNlTWVtbzxBcnJheTxHcm91cE9wdGlvblR5cGUgfCBPcHRpb25UeXBlPj4oKCkgPT4ge1xuICAgIGlmIChoYXNHcm91cE9wdGlvbikge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAoZmlsdGVyZWQ6IEFycmF5PEdyb3VwT3B0aW9uVHlwZT4sIGdyb3VwT3B0aW9uOiBHcm91cE9wdGlvblR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZEdyb3VwT3B0aW9ucyA9IGZpbHRlck9wdGlvbnMoZ3JvdXBPcHRpb24ub3B0aW9ucyk7XG5cbiAgICAgICAgICBpZiAoZmlsdGVyZWRHcm91cE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAuLi5maWx0ZXJlZCxcbiAgICAgICAgICAgICAgeyAuLi5ncm91cE9wdGlvbiwgb3B0aW9uczogZmlsdGVyZWRHcm91cE9wdGlvbnMgfSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgICAgICB9LFxuICAgICAgICBbXVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbHRlck9wdGlvbnMob3B0aW9ucyBhcyBBcnJheTxPcHRpb25UeXBlPik7XG4gICAgfVxuICB9LCBbaGFzR3JvdXBPcHRpb24sIG9wdGlvbnMsIHNlYXJjaEtleXdvcmRdKTtcblxuICBjb25zdCBmaWx0ZXJlZE9wdGlvbnNDb3VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBmaWx0ZXJlZE9wdGlvbnMucmVkdWNlKChsZW5ndGg6IG51bWJlciwgbmV4dE9wdGlvbikgPT4ge1xuICAgICAgaWYgKGlzT3B0aW9uKG5leHRPcHRpb24pKSB7XG4gICAgICAgIHJldHVybiBsZW5ndGggKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCArIG5leHRPcHRpb24ub3B0aW9ucy5sZW5ndGg7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH0sIFtoYXNHcm91cE9wdGlvbiwgZmlsdGVyZWRPcHRpb25zLCBpc09wdGlvbl0pO1xuXG4gIGNvbnN0IHNlbGVjdGVkT3B0aW9uc0NvdW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKHNlbGVjdGVkT3B0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zLmZpbmQoKGZpbHRlcmVkT3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBpc09wdGlvbihmaWx0ZXJlZE9wdGlvbilcbiAgICAgICAgICA/IGZpbHRlcmVkT3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvbi52YWx1ZVxuICAgICAgICAgIDogZmlsdGVyZWRPcHRpb24ub3B0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IHNlbGVjdGVkT3B0aW9uLnZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSkubGVuZ3RoO1xuICB9LCBbc2VsZWN0ZWRPcHRpb25zLCBmaWx0ZXJlZE9wdGlvbnNdKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBbGxDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXNlbGVjdEFsbENoZWNrZWQpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnNUb1NlbGVjdCA9IGZpbHRlcmVkT3B0aW9uc1xuICAgICAgICAubWFwKChmaWx0ZXJlZE9wdGlvbikgPT5cbiAgICAgICAgICBpc09wdGlvbihmaWx0ZXJlZE9wdGlvbikgPyBmaWx0ZXJlZE9wdGlvbiA6IGZpbHRlcmVkT3B0aW9uLm9wdGlvbnNcbiAgICAgICAgKVxuICAgICAgICAuZmxhdCgpO1xuXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMob3B0aW9uc1RvU2VsZWN0KTtcbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKG9wdGlvbnNUb1NlbGVjdC5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKFtdKTtcbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKFtdKTtcbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkKCk7XG4gIH0sIFtcbiAgICBmaWx0ZXJlZE9wdGlvbnMsXG4gICAgaXNPcHRpb24sXG4gICAgc2VsZWN0QWxsQ2hlY2tlZCxcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCxcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb25zQ291bnQgPT09IGZpbHRlcmVkT3B0aW9uc0NvdW50KSB7XG4gICAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkKHRydWUpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0QWxsQ2hlY2tlZCkge1xuICAgICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZChmYWxzZSk7XG4gICAgfVxuICB9LCBbXG4gICAgc2VsZWN0ZWRPcHRpb25zQ291bnQsXG4gICAgZmlsdGVyZWRPcHRpb25zQ291bnQsXG4gICAgc2VsZWN0QWxsQ2hlY2tlZCxcbiAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkLFxuICBdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgIHtzZWxlY3RBbGwgJiYgbXVsdGlwbGUgJiYgISFmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNlbGVjdEFsbENvbnRhaW5lcn1cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3RBbGxDbGlja31cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94Q29udGFpbmVyfT5cbiAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveH1cbiAgICAgICAgICAgICAgY2hlY2tlZD17c2VsZWN0QWxsQ2hlY2tlZH1cbiAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZT17XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZE9wdGlvbnNDb3VudCAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uc0NvdW50ICE9PSBmaWx0ZXJlZE9wdGlvbnNDb3VudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sYWJlbH0+U2VsZWN0IEFsbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgeyEhZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICAgICAgZmlsdGVyZWRPcHRpb25zLm1hcCgob3B0aW9uKSA9PlxuICAgICAgICAgIGlzT3B0aW9uKG9wdGlvbikgPyAoXG4gICAgICAgICAgICA8T3B0aW9uIGtleT17b3B0aW9uLnZhbHVlfSBkYXRhPXtvcHRpb259PlxuICAgICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgPC9PcHRpb24+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxHcm91cE9wdGlvblxuICAgICAgICAgICAgICBrZXk9e29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgbGFiZWw9e29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uLm9wdGlvbnN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ub09wdGlvbnN9PlxuICAgICAgICAgIE5vIG1hdGNoZXMgZm9yXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc2VhcmNoS2V5d29yZH0+e2AgJHtzZWFyY2hLZXl3b3JkfWB9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wdGlvbkxpc3Q7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE9wdGlvbkxpc3QsIGlzT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uTGlzdFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vU2VhcmNoLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSBcIi4uLy4uL1RleHRJbnB1dFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi8uLi9JY29uXCI7XG5pbXBvcnQgaWNvblNlYXJjaCBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL3NlYXJjaC5zdmdcIjtcbmltcG9ydCBpY29uQ3Jvc3NlZCBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL2Nyb3NzZWQuc3ZnXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uLy4uL0ljb25CdXR0b25cIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gU2VhcmNoKHsgY2xhc3NOYW1lIH06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2VhcmNoS2V5d29yZCwgc2V0U2VhcmNoS2V5d29yZCB9ID0gdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hLZXl3b3JkQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldFNlYXJjaEtleXdvcmQodmFsdWUpO1xuICAgIH0sXG4gICAgW3NlYXJjaEtleXdvcmRdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoS2V5d29yZFJlc2V0Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2VhcmNoS2V5d29yZChcIlwiKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb25TZWFyY2hDb250YWluZXJ9PlxuICAgICAgICA8SWNvbiBzcmM9e2ljb25TZWFyY2h9IC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgdmFsdWU9e3NlYXJjaEtleXdvcmR9XG4gICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBzZWFyY2guLi5cIlxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlU2VhcmNoS2V5d29yZENoYW5nZX1cbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgIC8+XG4gICAgICA8SWNvbkJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5yZXNldEJ1dHRvbn1cbiAgICAgICAgc3JjPXtpY29uQ3Jvc3NlZH1cbiAgICAgICAgYWx0PVwiQ2xlYXJcIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGlja31cbiAgICAgICAgZGlzYWJsZWQ9eyFzZWFyY2hLZXl3b3JkfVxuICAgICAgICBub0JvcmRlclxuICAgICAgICBub1NoYWRvd1xuICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VhcmNoO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWFyY2ggfSBmcm9tIFwiLi9TZWFyY2hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2ssIHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dFByb3ZpZGVyIH0gZnJvbSBcIi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uL0ljb25CdXR0b25cIjtcbmltcG9ydCB7IE9wdGlvbkxpc3QgfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuXG50eXBlIFNlbGVjdFByb3BzID0ge1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzaG93U2VsZWN0ZWRBc1RhZ3M/OiBib29sZWFuO1xuICBzaG93U2VhcmNoPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlPjtcbiAgd2lkdGg6IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG4gIGNsYXNzTmFtZSxcbiAgZGVmYXVsdFZhbHVlLFxuICBkaXNhYmxlZCxcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgb3B0aW9ucyxcbiAgcGxhY2Vob2xkZXIsXG4gIGxhYmVsLFxuICBzZWxlY3RBbGwsXG4gIHNob3dFeHBhbmRlZEdyb3VwLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgc2hvd1NlbGVjdGVkQXNUYWdzID0gZmFsc2UsXG4gIHNob3dTZWFyY2ggPSBmYWxzZSxcbiAgd2lkdGgsXG4gIG9uQ2hhbmdlLFxuICBvbkZpbHRlcixcbn06IFNlbGVjdFByb3BzKSB7XG4gIGNvbnN0IFtvcGVuZWQsIHRvZ2dsZU9wZW5lZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuXG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiB0b2dnbGVPcGVuZWQoZmFsc2UpKTtcblxuICBjb25zdCBoYW5kbGVPcGVuU2VsZWN0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZU9wZW5lZCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4ge1xuICAgIGlmICghbXVsdGlwbGUpIHRvZ2dsZU9wZW5lZChmYWxzZSk7XG5cbiAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZSh2YWx1ZXMpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0Q29udGV4dFByb3ZpZGVyXG4gICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgc2VsZWN0QWxsPXtzZWxlY3RBbGx9XG4gICAgICBzaG93RXhwYW5kZWRHcm91cD17c2hvd0V4cGFuZGVkR3JvdXB9XG4gICAgPlxuICAgICAgPGRpdiByZWY9e3JlZn0+XG4gICAgICAgIHtsYWJlbCA/IDxMYWJlbCB2YWx1ZT17bGFiZWx9IC8+IDogbnVsbH1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aCB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmhlYWRlciwgeyBbc3R5bGVzLmFjdGl2ZV06IG9wZW5lZCB9XSl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPcGVuU2VsZWN0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWxlY3RvclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIHNob3dTZWxlY3RlZEFzVGFncz17c2hvd1NlbGVjdGVkQXNUYWdzfVxuICAgICAgICAgICAgICBpc0Ryb3Bkb3duT3BlbmVkPXtvcGVuZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmljb25CdXR0b24sXG4gICAgICAgICAgICAgICAgeyBbc3R5bGVzLmV4cGFuZGVkXTogb3BlbmVkIH0sXG4gICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICBzcmM9e2ljb25DYXJldERvd259XG4gICAgICAgICAgICAgIGFsdD17b3BlbmVkID8gXCJDb2xsYXBzZVwiIDogXCJFeHBhbmRcIn1cbiAgICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge29wZW5lZCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PlxuICAgICAgICAgICAgICB7b3B0aW9ucy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ub09wdGlvbnN9Pk5vIG9wdGlvbnMgYXZhaWxhYmxlPC9kaXY+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtzaG93U2VhcmNoICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5zZWFyY2hDb250YWluZXJ9PlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWFyY2ggLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPE9wdGlvbkxpc3RcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgb25GaWx0ZXI9e29uRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9TZWxlY3RDb250ZXh0UHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDtcbiIsImltcG9ydCBSZWFjdCwge1xuICBjcmVhdGVDb250ZXh0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHVzZUVmZmVjdCxcbiAgdXNlUmVmLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEdyb3VwT3B0aW9uVHlwZSwgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgaXNPcHRpb24gfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGRlZmF1bHRWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlPjtcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xufTtcblxudHlwZSBTZWxlY3RDb250ZXh0U3RhdGUgPSB7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBzZWxlY3RlZE9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+O1xuICB1cGRhdGVTZWxlY3RlZE9wdGlvbjogKG9wdGlvbjogT3B0aW9uVHlwZSkgPT4gdm9pZDtcbiAgc2VhcmNoS2V5d29yZDogc3RyaW5nO1xuICBzZXRTZWFyY2hLZXl3b3JkOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgc2V0U2VsZWN0ZWRPcHRpb25zOiAodmFsdWVzOiBPcHRpb25UeXBlW10pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBpbml0aWFsU3RhdGU6IFNlbGVjdENvbnRleHRTdGF0ZSA9IHtcbiAgbXVsdGlwbGU6IGZhbHNlLFxuICBzZWxlY3RBbGw6IGZhbHNlLFxuICBzaG93RXhwYW5kZWRHcm91cDogdHJ1ZSxcbiAgc2VsZWN0ZWRPcHRpb25zOiBbXSxcbiAgdXBkYXRlU2VsZWN0ZWRPcHRpb246ICh2YWx1ZTogT3B0aW9uVHlwZSkgPT4ge30sXG4gIHNlYXJjaEtleXdvcmQ6IFwiXCIsXG4gIHNldFNlYXJjaEtleXdvcmQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB7fSxcbiAgc2V0U2VsZWN0ZWRPcHRpb25zOiAodmFsdWVzOiBPcHRpb25UeXBlW10pID0+IHt9LFxufTtcblxuY29uc3QgU2VsZWN0Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8U2VsZWN0Q29udGV4dFN0YXRlPihpbml0aWFsU3RhdGUpO1xuXG5jb25zdCBTZWxlY3RDb250ZXh0UHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgZGVmYXVsdFZhbHVlLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBzZWxlY3RBbGwgPSBmYWxzZSxcbiAgc2hvd0V4cGFuZGVkR3JvdXAgPSB0cnVlLFxuICBvcHRpb25zLFxuICBvbkNoYW5nZSxcbn06IFByb3BzKSA9PiB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxPcHRpb25UeXBlW10+KFxuICAgIGluaXRpYWxTdGF0ZS5zZWxlY3RlZE9wdGlvbnNcbiAgKTtcbiAgY29uc3QgW3NlYXJjaEtleXdvcmQsIHNldFNlYXJjaEtleXdvcmRdID0gdXNlU3RhdGUoXG4gICAgaW5pdGlhbFN0YXRlLnNlYXJjaEtleXdvcmRcbiAgKTtcblxuICBjb25zdCB1cGRhdGVTZWxlY3RlZE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IE9wdGlvblR5cGUpID0+IHtcbiAgICAgIGxldCB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zO1xuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBzZWxlY3RlZE9wdGlvbnMuc29tZShcbiAgICAgICAgICAoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlXG4gICAgICAgIClcbiAgICAgICAgICA/IHNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gdmFsdWUgIT09IG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICA6IFsuLi5zZWxlY3RlZE9wdGlvbnMsIG9wdGlvbl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gW29wdGlvbl07XG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnModXBkYXRlZFNlbGVjdGVkT3B0aW9ucyk7XG5cbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSk7XG4gICAgfSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpXG4gICAgICAgID8gZGVmYXVsdFZhbHVlXG4gICAgICAgIDogW2RlZmF1bHRWYWx1ZV07XG5cbiAgICAgIGxldCB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYWxsT3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKChhbGwsIGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXNPcHRpb24oaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWxsLCBpdGVtXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIC4uLml0ZW0ub3B0aW9uc107XG4gICAgICAgICAgfVxuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IGFsbE9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgZGVmYXVsdFZhbHVlcy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnModXBkYXRlZFNlbGVjdGVkT3B0aW9ucyk7XG4gICAgfVxuICB9LCBbZGVmYXVsdFZhbHVlLCBvcHRpb25zXSk7XG5cbiAgY29uc3QgY29udGV4dFZhbHVlOiBTZWxlY3RDb250ZXh0U3RhdGUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBtdWx0aXBsZSxcbiAgICAgIHNlbGVjdEFsbCxcbiAgICAgIHNob3dFeHBhbmRlZEdyb3VwLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24sXG4gICAgICBzZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VhcmNoS2V5d29yZCxcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgICB9KSxcbiAgICBbXG4gICAgICBzZWxlY3RBbGwsXG4gICAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICAgIHNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWFyY2hLZXl3b3JkLFxuICAgIF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU2VsZWN0Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCB7IFNlbGVjdENvbnRleHQsIFNlbGVjdENvbnRleHRQcm92aWRlciB9O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vU2VsZWN0b3IubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vLi4vVGFnXCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHNob3dTZWxlY3RlZEFzVGFnczogYm9vbGVhbjtcbiAgaXNEcm9wZG93bk9wZW5lZDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFNlbGVjdG9yKHtcbiAgcGxhY2Vob2xkZXIsXG4gIHNob3dTZWxlY3RlZEFzVGFncyxcbiAgaXNEcm9wZG93bk9wZW5lZCxcbn06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2VsZWN0ZWRPcHRpb25zLCBtdWx0aXBsZSwgdXBkYXRlU2VsZWN0ZWRPcHRpb24gfSA9XG4gICAgdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcblxuICBjb25zdCBoYW5kbGVUYWdDbGljayA9IHVzZUNhbGxiYWNrKChldmVudDogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlVGFnQ2xvc2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gc2VsZWN0ZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sXG4gICAgW3NlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICBjb25zdCBwbGFjZWhvbGRlclRvU2hvdyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIHsgW3N0eWxlcy5hY3RpdmVdOiBpc0Ryb3Bkb3duT3BlbmVkIH0sXG4gICAgICAgIF0pfVxuICAgICAgPlxuICAgICAgICB7cGxhY2Vob2xkZXJ9XG4gICAgICA8L3NwYW4+XG4gICAgKSxcbiAgICBbcGxhY2Vob2xkZXIsIGlzRHJvcGRvd25PcGVuZWRdXG4gICk7XG5cbiAgY29uc3Qgc2hvd0FzVGFncyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgICAgICBwbGFjZWhvbGRlclRvU2hvd1xuICAgICAgKSA6IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7c2VsZWN0ZWRPcHRpb25zLm1hcCgoeyBsYWJlbCwgdmFsdWUgfSkgPT4gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAga2V5PXt2YWx1ZX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudGFnV3JhcHBlcn1cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlVGFnQ2xpY2t9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxUYWcga2V5PXt2YWx1ZX0gdmFsdWU9e3ZhbHVlfSBjbG9zYWJsZSBvbkNsb3NlPXtoYW5kbGVUYWdDbG9zZX0+XG4gICAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgICA8L1RhZz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC8+XG4gICAgICApLFxuICAgIFtzZWxlY3RlZE9wdGlvbnMsIHBsYWNlaG9sZGVyVG9TaG93XVxuICApO1xuXG4gIGNvbnN0IHNob3dBc1RleHQgPSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RlZE9wdGlvbnN9XG4gICAgPntgJHtwbGFjZWhvbGRlcn0gKCR7c2VsZWN0ZWRPcHRpb25zLmxlbmd0aH0pYH08L3NwYW4+XG4gICkgOiAoXG4gICAgcGxhY2Vob2xkZXJUb1Nob3dcbiAgKTtcblxuICBsZXQgY29udGVudDtcbiAgaWYgKG11bHRpcGxlKSB7XG4gICAgY29udGVudCA9IHNob3dTZWxlY3RlZEFzVGFncyA/IHNob3dBc1RhZ3MgOiBzaG93QXNUZXh0O1xuICB9IGVsc2Uge1xuICAgIGNvbnRlbnQgPSAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICAgIHBsYWNlaG9sZGVyVG9TaG93XG4gICAgKSA6IChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNlbGVjdGVkT3B0aW9ufT57c2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsfTwvc3Bhbj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdG9yO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWxlY3RvciB9IGZyb20gXCIuL1NlbGVjdG9yXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdCB9IGZyb20gXCIuL1NlbGVjdFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgRml4ZWRTaXplTGlzdCwgTGlzdE9uU2Nyb2xsUHJvcHMgfSBmcm9tIFwicmVhY3Qtd2luZG93XCI7XG5pbXBvcnQgSW5maW5pdGVMb2FkZXIgZnJvbSBcInJlYWN0LXdpbmRvdy1pbmZpbml0ZS1sb2FkZXJcIjtcblxuaW1wb3J0IFRhYmxlSGVhZGVyIGZyb20gXCIuL1RhYmxlSGVhZGVyXCI7XG5pbXBvcnQgVGFibGVSb3cgZnJvbSBcIi4vVGFibGVSb3dcIjtcbmltcG9ydCB7IFNvcnRPcmRlciB9IGZyb20gXCIuLi8uLi90eXBlcy90YWJsZVwiO1xuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGUubW9kdWxlLmNzc1wiO1xuXG5cblxuXG5leHBvcnQgdHlwZSBDb2x1bW5UeXBlID0ge1xuICBrZXk6IHN0cmluZztcbiAgdGl0bGU6IEpTWC5FbGVtZW50IHwgc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRhdGFJbmRleDogc3RyaW5nO1xuICByZW5kZXI/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZykgPT4gSlNYLkVsZW1lbnQ7XG4gIHdpZHRoPzogc3RyaW5nO1xuICBkZWZhdWx0U29ydE9yZGVyPzogU29ydE9yZGVyO1xuICBzb3J0ZWQ/OiBib29sZWFuO1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIG9uU29ydD86IChzb3J0T3JkZXI6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgZGF0YVNvdXJjZTogUmVjb3JkPHN0cmluZywgYW55PltdO1xuICB0YWJsZUhlaWdodDogbnVtYmVyO1xuICBvblJvd0NsaWNrPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIGhhc0Fycm93PzogYm9vbGVhbjtcbiAgb25Mb2FkTW9yZT86IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIHNldFBhZ2U/OiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgcGxhY2Vob2xkZXI/OiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIHJvd0hlaWdodD86IG51bWJlcjtcbiAgaGVhZGVySGVpZ2h0PzogbnVtYmVyO1xuICBkaXNhYmxlTGF6eUxvYWRlcj86IGJvb2xlYW47XG4gIGFjdGl2ZVJvd3M/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpdGVtc0NvdW50PzogbnVtYmVyO1xuICBpc0hlYWRlclN0aWNreT86IGJvb2xlYW47XG4gIGhhc1ZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBUYWJsZSh7XG4gIGNvbHVtbnMsXG4gIGRhdGFTb3VyY2UsXG4gIG9uUm93Q2xpY2ssXG4gIGhhc0Fycm93LFxuICBvbkxvYWRNb3JlLFxuICBwYWdlLFxuICBzZXRQYWdlLFxuICBwYWdlU2l6ZSA9IFRhYmxlQ29uZmlnLlBBR0VfU0laRSxcbiAgdGFibGVIZWlnaHQsXG4gIHBsYWNlaG9sZGVyLFxuICByb3dIZWlnaHQgPSBUYWJsZUNvbmZpZy5ST1dfSEVJR0hULFxuICBoZWFkZXJIZWlnaHQgPSBUYWJsZUNvbmZpZy5IRUFERVJfSEVJR0hULFxuICBkaXNhYmxlTGF6eUxvYWRlcixcbiAgYWN0aXZlUm93cyxcbiAgaXRlbXNDb3VudCxcbiAgaXNIZWFkZXJTdGlja3kgPSBmYWxzZSxcbiAgaGFzVmlydHVhbFNjcm9sbCA9IHRydWUsXG4gIGNsYXNzTmFtZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IFtzY3JvbGxUb3AsIHNldFNjcm9sbFRvcF0gPSB1c2VTdGF0ZSgwKTtcblxuICBjb25zdCByZW5kZXJSb3cgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBkYXRhLCBpbmRleCwgc3R5bGUgfTogeyBkYXRhOiBhbnk7IGluZGV4OiBudW1iZXI7IHN0eWxlOiBhbnkgfSkgPT4ge1xuICAgICAgY29uc3Qgcm93ID0gZGF0YVtpbmRleF07XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLnN0eWxlLCB0b3A6IHN0eWxlLnRvcCB9fT5cbiAgICAgICAgICA8VGFibGVSb3dcbiAgICAgICAgICAgIGRhdGE9e3Jvd31cbiAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBvblJvd0NsaWNrPXtvblJvd0NsaWNrfVxuICAgICAgICAgICAgaGFzQXJyb3c9e2hhc0Fycm93fVxuICAgICAgICAgICAgcm93SGVpZ2h0PXtyb3dIZWlnaHR9XG4gICAgICAgICAgICBpc0FjdGl2ZT17ISFhY3RpdmVSb3dzPy5bcm93LmlkXX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSxcbiAgICBbY29sdW1ucywgYWN0aXZlUm93cywgaGFzQXJyb3csIHJvd0hlaWdodCwgb25Sb3dDbGlja11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVMaXN0U2Nyb2xsID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgc2Nyb2xsT2Zmc2V0IH06IExpc3RPblNjcm9sbFByb3BzKSA9PiB7XG4gICAgICBzZXRTY3JvbGxUb3Aoc2Nyb2xsT2Zmc2V0KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgbG9hZE1vcmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVMYXp5TG9hZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGFTb3VyY2UubGVuZ3RoID09PSBpdGVtc0NvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGFTb3VyY2UubGVuZ3RoIDwgcGFnZVNpemUgKiBwYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNldFBhZ2UgJiYgb25Mb2FkTW9yZSkge1xuICAgICAgc2V0UGFnZShwYWdlICsgMSk7XG4gICAgICBvbkxvYWRNb3JlKHBhZ2UgKyAxKTtcbiAgICB9XG4gIH0sIFtcbiAgICBkaXNhYmxlTGF6eUxvYWRlcixcbiAgICBkYXRhU291cmNlLmxlbmd0aCxcbiAgICBpdGVtc0NvdW50LFxuICAgIHBhZ2VTaXplLFxuICAgIHBhZ2UsXG4gICAgc2V0UGFnZSxcbiAgICBvbkxvYWRNb3JlLFxuICBdKTtcblxuICBjb25zdCBpc0l0ZW1Mb2FkZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKGRpc2FibGVMYXp5TG9hZGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZGV4IDwgZGF0YVNvdXJjZS5sZW5ndGggLSBUYWJsZUNvbmZpZy5JVEVNU19MT0FERUQ7XG4gICAgfSxcbiAgICBbZGF0YVNvdXJjZS5sZW5ndGgsIGRpc2FibGVMYXp5TG9hZGVyXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtoYXNWaXJ0dWFsU2Nyb2xsID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRhYmxlfT5cbiAgICAgICAgICAgIDxUYWJsZUhlYWRlclxuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBzY3JvbGxUb3A9e3Njcm9sbFRvcH1cbiAgICAgICAgICAgICAgaGVhZGVySGVpZ2h0PXtoZWFkZXJIZWlnaHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyEhcGxhY2Vob2xkZXIgJiYgIWRhdGFTb3VyY2UubGVuZ3RoID8gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucGxhY2Vob2xkZXJDb250YWluZXJ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUhlaWdodCB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxJbmZpbml0ZUxvYWRlclxuICAgICAgICAgICAgICAgIGlzSXRlbUxvYWRlZD17aXNJdGVtTG9hZGVkfVxuICAgICAgICAgICAgICAgIGl0ZW1Db3VudD17ZGF0YVNvdXJjZS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgbG9hZE1vcmVJdGVtcz17bG9hZE1vcmV9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7KHsgb25JdGVtc1JlbmRlcmVkLCByZWYgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPEZpeGVkU2l6ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17dGFibGVIZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1TaXplPXtyb3dIZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Db3VudD17ZGF0YVNvdXJjZS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhPXtkYXRhU291cmNlfVxuICAgICAgICAgICAgICAgICAgICBvblNjcm9sbD17aGFuZGxlTGlzdFNjcm9sbH1cbiAgICAgICAgICAgICAgICAgICAgb25JdGVtc1JlbmRlcmVkPXtvbkl0ZW1zUmVuZGVyZWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNjcm9sbGJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3JlbmRlclJvd31cbiAgICAgICAgICAgICAgICAgIDwvRml4ZWRTaXplTGlzdD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L0luZmluaXRlTG9hZGVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICAgICAgc3R5bGVzLnNjcm9sbGJhckNvbnRhaW5lcixcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlSGVpZ2h0IH19XG4gICAgICAgID5cbiAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBzY3JvbGxUb3A9e3Njcm9sbFRvcH1cbiAgICAgICAgICAgIGlzSGVhZGVyU3RpY2t5PXtpc0hlYWRlclN0aWNreX1cbiAgICAgICAgICAgIGhlYWRlckhlaWdodD17aGVhZGVySGVpZ2h0fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2RhdGFTb3VyY2UubWFwKChyb3csIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8VGFibGVSb3dcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgZGF0YT17cm93fVxuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBvblJvd0NsaWNrPXtvblJvd0NsaWNrfVxuICAgICAgICAgICAgICBoYXNBcnJvdz17aGFzQXJyb3d9XG4gICAgICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAgICAgICBpc0FjdGl2ZT17ISFhY3RpdmVSb3dzPy5bcm93Py5pZF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgVGFibGVIZWFkZXJDZWxsIGZyb20gXCIuL1RhYmxlSGVhZGVyQ2VsbFwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVIZWFkZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIHNjcm9sbFRvcDogbnVtYmVyO1xuICBpc0hlYWRlclN0aWNreT86IGJvb2xlYW47XG4gIGhlYWRlckhlaWdodD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlSGVhZGVyKHtcbiAgY29sdW1ucyxcbiAgc2Nyb2xsVG9wLFxuICBpc0hlYWRlclN0aWNreSxcbiAgaGVhZGVySGVpZ2h0LFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgeyBbc3R5bGVzLmJvcmRlckJvdHRvbV06ICEhc2Nyb2xsVG9wIH0sXG4gICAgICAgIHsgW3N0eWxlcy5pc0hlYWRlclN0aWNreV06IGlzSGVhZGVyU3RpY2t5IH0sXG4gICAgICBdKX1cbiAgICAgIHN0eWxlPXt7IGhlaWdodDogaGVhZGVySGVpZ2h0IH19XG4gICAgPlxuICAgICAge2NvbHVtbnMubWFwKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiAoXG4gICAgICAgIDxUYWJsZUhlYWRlckNlbGxcbiAgICAgICAgICBrZXk9e2B0YWJsZS1oZWFkLWNlbGwtJHtjb2x1bW5JbmRleH1gfVxuICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyO1xuIiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBpY29uQ2FyZXREb3duIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtZG93bi5zdmdcIjtcbmltcG9ydCBpY29uQ2FyZXRVcCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LXVwLnN2Z1wiO1xuaW1wb3J0IHsgU29ydE9yZGVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3RhYmxlXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZUhlYWRlckNlbGwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW46IENvbHVtblR5cGU7XG59O1xuXG5mdW5jdGlvbiBUYWJsZUhlYWRlckNlbGwoeyBjb2x1bW4gfTogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIG9uU29ydCxcbiAgICBzb3J0YWJsZSxcbiAgICBzb3J0ZWQsXG4gICAgZGVmYXVsdFNvcnRPcmRlcixcbiAgICB0aXRsZSxcbiAgICB3aWR0aCxcbiAgICBjbGFzc05hbWUsXG4gIH0gPSBjb2x1bW47XG5cbiAgY29uc3QgW3NvcnRPcmRlciwgc2V0U29ydE9yZGVyXSA9IHVzZVN0YXRlKFxuICAgICgpID0+IGRlZmF1bHRTb3J0T3JkZXIgfHwgU29ydE9yZGVyLkRFU0NcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTb3J0Q29sdW1uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc29ydGVkKSB7XG4gICAgICByZXR1cm4gb25Tb3J0KHNvcnRPcmRlcik7XG4gICAgfVxuICAgIGNvbnN0IG5ld1NvcnRPcmRlciA9XG4gICAgICBzb3J0T3JkZXIgPT09IFNvcnRPcmRlci5ERVNDID8gU29ydE9yZGVyLkFTQyA6IFNvcnRPcmRlci5ERVNDO1xuICAgIHNldFNvcnRPcmRlcihuZXdTb3J0T3JkZXIpO1xuICAgIG9uU29ydChuZXdTb3J0T3JkZXIpO1xuICB9LCBbb25Tb3J0LCBzb3J0T3JkZXIsIHNvcnRlZF0pO1xuXG4gIGNvbnN0IGNlbGxQcm9wcyA9XG4gICAgb25Tb3J0ICYmIHNvcnRhYmxlXG4gICAgICA/IHtcbiAgICAgICAgICBvbkNsaWNrOiBoYW5kbGVTb3J0Q29sdW1uLFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuXG4gIGNvbnN0IGRpc3BsYXlBcnJvdyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgIGlmIChzb3J0T3JkZXIgPT09IFNvcnRPcmRlci5ERVNDKSB7XG4gICAgICByZXR1cm4gaWNvbkNhcmV0RG93bjtcbiAgICB9XG4gICAgcmV0dXJuIGljb25DYXJldFVwO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLmNlbGxQcm9wc31cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMudGFibGVIZWFkZXJDZWxsLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnNvcnRJY29uVmlzaWJsZV06IHNvcnRhYmxlICYmIHNvcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnNvcnRhYmxlXTogc29ydGFibGUsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIHN0eWxlPXt7IHdpZHRoIH19XG4gICAgPlxuICAgICAge3RpdGxlfVxuICAgICAge3NvcnRhYmxlID8gKFxuICAgICAgICA8SWNvbiBhbHQ9e1wiU29ydCBidXR0b25cIn0gc2l6ZT1cInNtYWxsXCIgc3JjPXtkaXNwbGF5QXJyb3coKX0gLz5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlckNlbGw7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IFRhYmxlUm93Q2VsbCBmcm9tIFwiLi9UYWJsZVJvd0NlbGxcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlUm93Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBvblJvd0NsaWNrPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIGhhc0Fycm93PzogYm9vbGVhbjtcbiAgcm93SGVpZ2h0OiBudW1iZXI7XG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93KHtcbiAgZGF0YSxcbiAgY29sdW1ucyxcbiAgb25Sb3dDbGljayxcbiAgaGFzQXJyb3csXG4gIHJvd0hlaWdodCxcbiAgaXNBY3RpdmUsXG59OiBQcm9wcykge1xuICBjb25zdCBoYW5kbGVSb3dDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Sb3dDbGljayAmJiB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgb25Sb3dDbGljayhkYXRhKTtcbiAgICB9XG4gIH0sIFtkYXRhLCBvblJvd0NsaWNrXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaGFzQXJyb3ddOiBoYXNBcnJvdyxcbiAgICAgICAgICBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVSb3dDbGlja31cbiAgICA+XG4gICAgICB7Y29sdW1ucy5tYXAoKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IChcbiAgICAgICAgPFRhYmxlUm93Q2VsbFxuICAgICAgICAgIGtleT17YHRhYmxlLXJvdy1jZWxsLSR7Y29sdW1uSW5kZXh9YH1cbiAgICAgICAgICBpdGVtPXtkYXRhfVxuICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZVJvd0NlbGwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBpdGVtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nO1xuICBjb2x1bW46IENvbHVtblR5cGU7XG4gIHJvd0hlaWdodDogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gVGFibGVSb3dDZWxsKHsgaXRlbSwgY29sdW1uLCByb3dIZWlnaHQgfTogUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IGRhdGEgPSB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIiA/IGl0ZW0gOiBpdGVtW2NvbHVtbi5kYXRhSW5kZXhdO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY29sdW1uLmNsYXNzTmFtZV0pfVxuICAgICAgc3R5bGU9e3sgaGVpZ2h0OiByb3dIZWlnaHQsIHdpZHRoOiBjb2x1bW4/LndpZHRoIH19XG4gICAgPlxuICAgICAge2NvbHVtbi5yZW5kZXIgPyBjb2x1bW4ucmVuZGVyKGRhdGEpIDogZGF0YX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3dDZWxsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWJsZSB9IGZyb20gXCIuL1RhYmxlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IGljb25Dcm9zc2VkIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY3Jvc3NlZC5zdmdcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWcubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNsb3NhYmxlPzogYm9vbGVhbjtcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25EZWxldGU/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICBvbkNsb3NlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRhZyh7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGNsb3NhYmxlLCB2YWx1ZSwgb25DbG9zZSwgZGlzYWJsZWQsIG9uRGVsZXRlIH06IFByb3BzKSB7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgICAgaWYodHlwZW9mIG9uRGVsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25EZWxldGUodmFsdWUpXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9uQ2xvc2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsb3NlKGV2ZW50LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DbG9zZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgeyBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQgfV0pfT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L3NwYW4+XG4gICAgICB7Y2xvc2FibGUgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZUJ1dHRvbn0gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxuICAgICAgICAgIDxJY29uIHNyYz17aWNvbkNyb3NzZWR9IGFsdD1cIkNsb3NlXCIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFnO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWcgfSBmcm9tIFwiLi9UYWdcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgSGludCB9IGZyb20gXCJyZWFjdC1hdXRvY29tcGxldGUtaGludFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhZ3NJbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vVGFnXCI7XG5cbnR5cGUgVGFnc0lucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nW107XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICBzaXplPzogU2l6ZTtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW5wdXRNb2RlPzogVGV4dElucHV0TW9kZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0YWdPcHRpb25zPzogc3RyaW5nW107XG59O1xuXG5mdW5jdGlvbiBUYWdzSW5wdXQoe1xuICBjbGFzc05hbWUsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIHBhdHRlcm4sXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJzbWFsbFwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBpbnB1dE1vZGUsXG4gIGRpc2FibGVkLFxuICB0YWdPcHRpb25zID0gW10sXG59OiBUYWdzSW5wdXRQcm9wcykge1xuICBjb25zdCBbdGV4dCwgc2V0VGV4dF0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpO1xuICBjb25zdCBbdGFncywgc2V0VGFnc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4odmFsdWUpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBzZXRUYWdzKHZhbHVlKTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgc2V0VGFnc10pO1xuXG4gIGNvbnN0IGhhbmRsZVRleHRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgICAgc2V0VGV4dCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0VGV4dF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUYWdEZWxldGUgPSB1c2VDYWxsYmFjayhcbiAgICAodGFnOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUYWdzID0gdGFncy5maWx0ZXIoKHRhZ0l0ZW0pID0+IHRhZ0l0ZW0gIT09IHRhZyk7XG4gICAgICBzZXRUYWdzKHVwZGF0ZWRUYWdzKTtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZSh1cGRhdGVkVGFncyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdGFncywgc2V0VGFnc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5jb2RlID09PSBcIkVudGVyXCIpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCB1cGRhdGVkVGFncyA9IFsuLi50YWdzLCB0ZXh0XTtcblxuICAgICAgICBzZXRUYWdzKHVwZGF0ZWRUYWdzKTtcbiAgICAgICAgc2V0VGV4dChcIlwiKTtcblxuICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICBvbkNoYW5nZSh1cGRhdGVkVGFncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFt0YWdzLCB0ZXh0LCBzZXRUYWdzLCBzZXRUZXh0XVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8SGludCBvcHRpb25zPXt0YWdPcHRpb25zfSBhbGxvd0VudGVyRmlsbD17ZmFsc2V9IGFsbG93VGFiRmlsbD17dHJ1ZX0+XG4gICAgICA8aW5wdXRcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy50ZXh0SW5wdXQsXG4gICAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyIH0sXG4gICAgICAgIF0pfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlVGV4dENoYW5nZX1cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICBwYXR0ZXJuPXtwYXR0ZXJufVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgIHZhbHVlPXt0ZXh0fVxuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgICAgaW5wdXRNb2RlPXtpbnB1dE1vZGV9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIC8+XG4gICAgPC9IaW50PlxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHt0YWdzLm1hcCgodGFnKSA9PiAoXG4gICAgICAgIDxUYWcga2V5PXt0YWd9IHZhbHVlPXt0YWd9IG9uRGVsZXRlPXtoYW5kbGVUYWdEZWxldGV9IGNsb3NhYmxlPlxuICAgICAgICAgIHt0YWd9XG4gICAgICAgIDwvVGFnPlxuICAgICAgKSl9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRhZ0lucHV0fT57aW5wdXRFbGVtZW50fTwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuZXhwb3J0IGRlZmF1bHQgVGFnc0lucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWdzSW5wdXQgfSBmcm9tIFwiLi9UYWdzSW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UZXh0SW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSwgVGV4dElucHV0TW9kZSwgVGV4dElucHV0VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcbiAgb25LZXlEb3duPzogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICBzaXplPzogU2l6ZTtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW5wdXRNb2RlPzogVGV4dElucHV0TW9kZTtcbn07XG5cbmZ1bmN0aW9uIFRleHRJbnB1dCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgb25CbHVyLFxuICBvbktleURvd24sXG4gIHBsYWNlaG9sZGVyLFxuICB2YWx1ZSxcbiAgbmFtZSxcbiAgcGF0dGVybixcbiAgaW5wdXRSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBpbnB1dE1vZGUsXG59OiBUZXh0SW5wdXRQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXG4gICAgPGlucHV0XG4gICAgICBkYXRhLXRlc3RpZD1cImlucHV0XCJcbiAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLnRleHRJbnB1dCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlciB9LFxuICAgICAgXSl9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgIHBhdHRlcm49e3BhdHRlcm59XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgaW5wdXRNb2RlPXtpbnB1dE1vZGV9XG4gICAgLz5cbiAgKTtcbiAgaWYgKGxhYmVsKSB7XG4gICAgcmV0dXJuIDxMYWJlbCB2YWx1ZT17bGFiZWx9PntpbnB1dEVsZW1lbnR9PC9MYWJlbD47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDw+e2lucHV0RWxlbWVudH08Lz47XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IFRleHRJbnB1dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGV4dElucHV0IH0gZnJvbSBcIi4vVGV4dElucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBUb2FzdCh7IGNoaWxkcmVuLCBjb250YWluZXJSZWYsIG9uQ2xpY2sgPSAoKSA9PiB7fSB9OiBUb2FzdFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy50b2FzdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0XCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb2FzdENvbnRhaW5lclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5mdW5jdGlvbiBUb2FzdENvbnRhaW5lcih7IGNoaWxkcmVuLCBiYXNlWkluZGV4IH06IFRvYXN0Q29udGFpbmVyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudG9hc3RDb250YWluZXJdKX1cbiAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdC1jb250YWluZXJcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9hc3RDb250YWluZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0IH0gZnJvbSBcIi4vVG9hc3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3RDb250YWluZXIgfSBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub29sdGlwLm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb29sdGlwUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIHRleHQ6IHN0cmluZztcbiAgcGxhY2VtZW50OiBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiO1xuICBzaG93VG9vbHRpcDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFRvb2x0aXAoeyBjaGlsZHJlbiwgdGV4dCwgcGxhY2VtZW50LCBzaG93VG9vbHRpcCB9OiBUb29sdGlwUHJvcHMpIHtcbiAgY29uc3QgW3Rvb2x0aXBJc1Zpc2libGUsIHNldFRvb2x0aXBJc1Zpc2libGVdID0gdXNlU3RhdGU8Ym9vbGVhbj4oKTtcblxuICBjb25zdCBvblRvdWNoRW5kSGFuZGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRUb29sdGlwSXNWaXNpYmxlKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gc2V0VGltZW91dCgoKSA9PiBCb29sZWFuKTtcbiAgICBpZiAodG9vbHRpcElzVmlzaWJsZSkge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHNldFRvb2x0aXBJc1Zpc2libGUoZmFsc2UpLCA1MDAwKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XG4gIH0sIFt0b29sdGlwSXNWaXNpYmxlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge3Nob3dUb29sdGlwID8gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXh0PXt0ZXh0fVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwidG9vbHRpcFwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMudG9vbHRpcCxcbiAgICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnRdLFxuICAgICAgICAgICAgdHlwZW9mIHRvb2x0aXBJc1Zpc2libGUgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogdG9vbHRpcElzVmlzaWJsZVxuICAgICAgICAgICAgICA/IHN0eWxlcy52aXNpYmxlXG4gICAgICAgICAgICAgIDogc3R5bGVzLm5vdFZpc2libGUsXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgb25Ub3VjaEVuZD17b25Ub3VjaEVuZEhhbmRsZXJ9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXA7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvb2x0aXAgfSBmcm9tIFwiLi9Ub29sdGlwXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9WaWRlby5tb2R1bGUuY3NzXCI7XG5cbi8qKlxuICogVGhlcmUgaXMgYSBrbm93biBpc3N1ZSBpbiBSZWFjdCBpbiByZWdhcmRzIHRvIHRoZSAnbXV0ZWQnIHByb3BlcnR5IHdoaWNoIGNhdXNlcyB0aGUgd2FybmluZzpcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEwMzg5XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcbiAqL1xuXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG5cbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSB7XG4gIHNyYzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGxheW91dD86IExheW91dDtcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xuICBsb29wPzogYm9vbGVhbjtcbiAgbXV0ZWQ/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcG9zdGVyPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlkZW8oe1xuICBzcmMsXG4gIHR5cGUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHBvc3RlcixcbiAgbXV0ZWQgPSB0cnVlLFxuICBsb29wID0gdHJ1ZSxcbiAgYXV0b1BsYXkgPSB0cnVlLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbn06IFZpZGVvUHJvcHMpIHtcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICA8dmlkZW9cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICAgIGxvb3A9e2xvb3B9XG4gICAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICAgIHBsYXlzSW5saW5lXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICAgIDwvdmlkZW8+XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDx2aWRlb1xuICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICBsb29wPXtsb29wfVxuICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICBwbGF5c0lubGluZVxuICAgID5cbiAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICA8L3ZpZGVvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW8sIFZpZGVvUHJvcHMgfSBmcm9tIFwiLi9WaWRlb1wiO1xuIiwiZXhwb3J0IGVudW0gVGFibGVDb25maWcge1xuICBST1dfSEVJR0hUID0gNDgsXG4gIEhFQURFUl9IRUlHSFQ9MzIsXG4gIFBBR0VfU0laRSA9IDEwMCxcbiAgSVRFTVNfTE9BREVEID0gNSxcbn1cbiIsImV4cG9ydCAqIGZyb20gXCIuLi9jb25zdGFudHMvVGFibGVcIjtcbiIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTnVtcGFkXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL092ZXJsYXlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvU2VsZWN0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhYmxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UYWdzSW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGV4dElucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RvYXN0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1Rvb2x0aXBcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVmlkZW9cIjtcbiIsImV4cG9ydCBlbnVtIFNvcnRPcmRlciB7XG4gICAgQVNDID0gXCJhc2NcIixcbiAgICBERVNDID0gXCJkZXNjXCIsXG4gIH1cbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nNjknIGhlaWdodD0nMjcnIHZpZXdCb3g9JzAgMCA2OSAyNycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC4xMzMzIDI2TDEzLjc4ODYgMjYuMzYyMkMxMy44ODE2IDI2LjQ1MDcgMTQuMDA1IDI2LjUgMTQuMTMzMyAyNi41VjI2Wk0xIDEzLjVMMC42NTUyODcgMTMuMTM3OEMwLjU1NjEyNyAxMy4yMzIyIDAuNSAxMy4zNjMxIDAuNSAxMy41QzAuNSAxMy42MzY5IDAuNTU2MTI3IDEzLjc2NzggMC42NTUyODcgMTMuODYyMkwxIDEzLjVaTTE0LjEzMzMgMVYwLjVDMTQuMDA1IDAuNSAxMy44ODE2IDAuNTQ5MzQ1IDEzLjc4ODYgMC42Mzc4MjJMMTQuMTMzMyAxWk02Ny41IDJWMjVINjguNVYySDY3LjVaTTYzLjQ2NjcgMjUuNUgxNC4xMzMzVjI2LjVINjMuNDY2N1YyNS41Wk0xNC40NzggMjUuNjM3OEwxLjM0NDcxIDEzLjEzNzhMMC42NTUyODcgMTMuODYyMkwxMy43ODg2IDI2LjM2MjJMMTQuNDc4IDI1LjYzNzhaTTEuMzQ0NzEgMTMuODYyMkwxNC40NzggMS4zNjIxOEwxMy43ODg2IDAuNjM3ODIyTDAuNjU1Mjg3IDEzLjEzNzhMMS4zNDQ3MSAxMy44NjIyWk0xNC4xMzMzIDEuNUg2My40NjY3VjAuNUgxNC4xMzMzVjEuNVpNNjcgMjUuNUg2My40NjY3VjI2LjVINjdWMjUuNVpNNjcgMC41SDYzLjQ2NjdWMS41SDY3VjAuNVpNNjcuNSAyNUM2Ny41IDI1LjI3NjEgNjcuMjc2MSAyNS41IDY3IDI1LjVWMjYuNUM2Ny44Mjg0IDI2LjUgNjguNSAyNS44Mjg0IDY4LjUgMjVINjcuNVpNNjguNSAyQzY4LjUgMS4xNzE1NyA2Ny44Mjg0IDAuNSA2NyAwLjVWMS41QzY3LjI3NjEgMS41IDY3LjUgMS43MjM4NiA2Ny41IDJINjguNVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzY3BhdGggZD0nTTMyLjY0NjQgNi4zNTM1NUw0Ni42NDY0IDIwLjM1MzZMNDcuMzUzNiAxOS42NDY0TDMzLjM1MzYgNS42NDY0NUwzMi42NDY0IDYuMzUzNTVaTTQ2LjY0NjQgNS42NDY0NUwzMi42NDY0IDE5LjY0NjRMMzMuMzUzNiAyMC4zNTM2TDQ3LjM1MzYgNi4zNTM1NUw0Ni42NDY0IDUuNjQ2NDVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTEgMTBMNy41IDNMMTQgMTAnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMS41IDEuNUwxMy41IDEzLjVNMS41IDEzLjVMMTMuNSAxLjUnIHN0cm9rZT0nYmxhY2snLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTUuNDY4NSAxNS40NjY1TDExLjIwMTggMTEuMTk5OU02LjkzNTE2IDEzLjMzMzJDMy40MDA1MyAxMy4zMzMyIDAuNTM1MTU2IDEwLjQ2NzggMC41MzUxNTYgNi45MzMyQzAuNTM1MTU2IDMuMzk4NTggMy40MDA1MyAwLjUzMzIwMyA2LjkzNTE2IDAuNTMzMjAzQzEwLjQ2OTggMC41MzMyMDMgMTMuMzM1MiAzLjM5ODU4IDEzLjMzNTIgNi45MzMyQzEzLjMzNTIgMTAuNDY3OCAxMC40Njk4IDEzLjMzMzIgNi45MzUxNiAxMy4zMzMyWicgc3Ryb2tlPSclMjM4OTg4OTEnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQuOTMzMSA0LjI2NzU4TDcuOTk5NzQgMTEuNzM0MkwxLjA2NjQxIDQuMjY3NTgnIHN0cm9rZT0nJTIzODk4ODkxJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGU9cmVxdWlyZShcInJlYWN0XCIpO2Z1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBrPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmgsbD1lLnVzZVN0YXRlLG09ZS51c2VFZmZlY3Qsbj1lLnVzZUxheW91dEVmZmVjdCxwPWUudXNlRGVidWdWYWx1ZTtmdW5jdGlvbiBxKGEsYil7dmFyIGQ9YigpLGY9bCh7aW5zdDp7dmFsdWU6ZCxnZXRTbmFwc2hvdDpifX0pLGM9ZlswXS5pbnN0LGc9ZlsxXTtuKGZ1bmN0aW9uKCl7Yy52YWx1ZT1kO2MuZ2V0U25hcHNob3Q9YjtyKGMpJiZnKHtpbnN0OmN9KX0sW2EsZCxiXSk7bShmdW5jdGlvbigpe3IoYykmJmcoe2luc3Q6Y30pO3JldHVybiBhKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSl9KX0sW2FdKTtwKGQpO3JldHVybiBkfVxuZnVuY3Rpb24gcihhKXt2YXIgYj1hLmdldFNuYXBzaG90O2E9YS52YWx1ZTt0cnl7dmFyIGQ9YigpO3JldHVybiFrKGEsZCl9Y2F0Y2goZil7cmV0dXJuITB9fWZ1bmN0aW9uIHQoYSxiKXtyZXR1cm4gYigpfXZhciB1PVwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudHx8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudD90OnE7ZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZT12b2lkIDAhPT1lLnVzZVN5bmNFeHRlcm5hbFN0b3JlP2UudXNlU3luY0V4dGVybmFsU3RvcmU6dTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNjA3KTtcbiJdLCJuYW1lcyI6WyJvcHRpb25zIiwiY2FwdHVyZSIsInVzZU91dHNpZGVDbGljayIsImNhbGxiYWNrIiwicmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaGFuZGxlQ2xpY2siLCJldmVudCIsImN1cnJlbnQiLCJjb250YWlucyIsInRhcmdldCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX3JlYWQiLCJvIiwibiIsIm0iLCJTeW1ib2wiLCJpdGVyYXRvciIsInIiLCJlIiwiaSIsImNhbGwiLCJhciIsIm5leHQiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiZXJyb3IiLCJ1c2VQcm9taXNlIiwiX3RoaXMiLCJ0aGlzIiwiX2EiLCJ1c2VTdGF0ZSIsImRhdGEiLCJ1bmRlZmluZWQiLCJpc1BlbmRpbmciLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsImlzU2V0dGxlZCIsInJlc3VsdCIsInNldFJlc3VsdCIsImhhc1VubW91bnRlZCIsImRpc3BhdGNoIiwidXNlQ2FsbGJhY2siLCJwcm9taXNlIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJnZW5lcmF0b3IiLCJlcnJvcl8xIiwiYm9keSIsImYiLCJ5IiwidCIsImciLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJsZW5ndGgiLCJzdGVwIiwiX19nZW5lcmF0b3IiLCJQIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInRoZW4iLCJhcHBseSIsIk9iamVjdCIsImNyZWF0ZSIsIlNXUkdsb2JhbFN0YXRlIiwiV2Vha01hcCIsIkVNUFRZX0NBQ0hFIiwiSU5JVElBTF9DQUNIRSIsIm5vb3AiLCJVTkRFRklORUQiLCJPQkpFQ1QiLCJpc1VuZGVmaW5lZCIsImlzRnVuY3Rpb24iLCJtZXJnZU9iamVjdHMiLCJhIiwiYiIsIlNUUl9VTkRFRklORUQiLCJpc1dpbmRvd0RlZmluZWQiLCJ3aW5kb3ciLCJpc0RvY3VtZW50RGVmaW5lZCIsImNyZWF0ZUNhY2hlSGVscGVyIiwiY2FjaGUiLCJrZXkiLCJzdGF0ZSIsImdldCIsImluZm8iLCJwcmV2IiwidGFibGUiLCJjb3VudGVyIiwic3RhYmxlSGFzaCIsImFyZyIsInR5cGUiLCJjb25zdHJ1Y3RvciIsImlzRGF0ZSIsIkRhdGUiLCJpbmRleCIsIlJlZ0V4cCIsInRvSlNPTiIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldCIsIkFycmF5Iiwia2V5cyIsInNvcnQiLCJvbmxpbmUiLCJvbldpbmRvd0V2ZW50Iiwib2ZmV2luZG93RXZlbnQiLCJiaW5kIiwicHJlc2V0IiwiaXNPbmxpbmUiLCJpc1Zpc2libGUiLCJ2aXNpYmlsaXR5U3RhdGUiLCJkZWZhdWx0Q29uZmlnT3B0aW9ucyIsImluaXRGb2N1cyIsImluaXRSZWNvbm5lY3QiLCJvbk9ubGluZSIsIm9uT2ZmbGluZSIsIklTX1JFQUNUX0xFR0FDWSIsIklTX1NFUlZFUiIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJuYXZpZ2F0b3JDb25uZWN0aW9uIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsInNsb3dDb25uZWN0aW9uIiwiaW5jbHVkZXMiLCJlZmZlY3RpdmVUeXBlIiwic2F2ZURhdGEiLCJlcnIiLCJhcmdzIiwiaXNBcnJheSIsIl9fdGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiTVVUQVRFX0VWRU5UIiwiY29uc3RhbnRzIiwiYXN5bmMiLCJpbnRlcm5hbE11dGF0ZSIsIl9rZXkiLCJfZGF0YSIsIl9vcHRzIiwicG9wdWxhdGVDYWNoZSIsInRocm93T25FcnJvciIsInJldmFsaWRhdGUiLCJyb2xsYmFja09uRXJyb3JPcHRpb24iLCJyb2xsYmFja09uRXJyb3IiLCJvcHRpbWlzdGljRGF0YSIsImtleUZpbHRlciIsIm1hdGNoZWRLZXlzIiwiaXQiLCJrZXlJdCIsInN0YXJ0c1dpdGgiLCJfayIsImFsbCIsIm1hcCIsIm11dGF0ZUJ5S2V5IiwiRVZFTlRfUkVWQUxJREFUT1JTIiwiTVVUQVRJT04iLCJGRVRDSCIsInJldmFsaWRhdG9ycyIsInN0YXJ0UmV2YWxpZGF0ZSIsImJlZm9yZU11dGF0aW9uVHMiLCJoYXNPcHRpbWlzdGljRGF0YSIsImRpc3BsYXllZERhdGEiLCJjdXJyZW50RGF0YSIsIl9jIiwiY29tbWl0dGVkRGF0YSIsImNhdGNoIiwicmVzIiwicmV2YWxpZGF0ZUFsbEtleXMiLCJpbml0Q2FjaGUiLCJwcm92aWRlciIsImhhcyIsIm9wdHMiLCJtdXRhdGUiLCJ1bm1vdW50Iiwic3Vic2NyaXB0aW9ucyIsInN1YnNjcmliZSIsInN1YnMiLCJzcGxpY2UiLCJpbmRleE9mIiwic2V0dGVyIiwiaW5pdFByb3ZpZGVyIiwicmVsZWFzZUZvY3VzIiwic2V0VGltZW91dCIsInJlbGVhc2VSZWNvbm5lY3QiLCJkZWxldGUiLCJNYXAiLCJkZWZhdWx0Q29uZmlnIiwib25Mb2FkaW5nU2xvdyIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJvbkVycm9yUmV0cnkiLCJfXyIsImNvbmZpZyIsIm1heFJldHJ5Q291bnQiLCJlcnJvclJldHJ5Q291bnQiLCJjdXJyZW50UmV0cnlDb3VudCIsInJldHJ5Q291bnQiLCJ0aW1lb3V0IiwiTWF0aCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIlNXUkNvbmZpZ0NvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZW5hYmxlRGV2dG9vbHMiLCJfX1NXUl9ERVZUT09MU19VU0VfXyIsInVzZSIsInVzZVNXUkNvbmZpZyIsInVzZUNvbnRleHQiLCJjb25jYXQiLCJ1c2VTV1JOZXh0Iiwia2V5XyIsImZldGNoZXJfIiwiUFJFTE9BRCIsInJlcSIsIl9fU1dSX0RFVlRPT0xTX1JFQUNUX18iLCJXSVRIX0RFRFVQRSIsImRlZHVwZSIsInVzZVNXUkhvb2tzQ29uZmlnIiwic3dyQ29uZmlnIiwidXNlTWVtbyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJkZWZpbmVQcm9wZXJ0eSIsInByb3BzIiwicGFyZW50Q29uZmlnIiwiaXNGdW5jdGlvbmFsQ29uZmlnIiwiZXh0ZW5kZWRDb25maWciLCJ1MSIsImYxIiwidTIiLCJmMiIsIm1lcmdlQ29uZmlncyIsImNhY2hlQ29udGV4dCIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsImNjIiwib2JqIiwib3V0IiwidG1wIiwiayIsImhhc093blByb3BlcnR5IiwiX19hc3NpZ24iLCJhc3NpZ24iLCJzIiwiYXJndW1lbnRzIiwicCIsInByb3RvdHlwZSIsIl9fY3JlYXRlQmluZGluZyIsImsyIiwiZW51bWVyYWJsZSIsIl9fc2V0TW9kdWxlRGVmYXVsdCIsIl9faW1wb3J0U3RhciIsIm1vZCIsIl9fZXNNb2R1bGUiLCJleHBvcnRzIiwiSGludCIsInJlYWN0XzEiLCJ1dGlsc18xIiwiX2IiLCJjaGlsZCIsImRlZmF1bHQiLCJDaGlsZHJlbiIsIm9ubHkiLCJjaGlsZHJlbiIsInRvTG93ZXJDYXNlIiwiZGlzYWJsZUhpbnQiLCJhbGxvd1RhYkZpbGwiLCJhbGxvd0VudGVyRmlsbCIsIm9uRmlsbCIsIm9uSGludCIsInZhbHVlTW9kaWZpZXIiLCJjaGlsZFByb3BzIiwibWFpbklucHV0UmVmIiwiaGludFdyYXBwZXJSZWYiLCJoaW50UmVmIiwidW5Nb2RpZmllZElucHV0VGV4dCIsInNldFVubW9kaWZpZWRJbnB1dFRleHQiLCJfZCIsInRleHQiLCJzZXRUZXh0IiwiX2UiLCJoaW50Iiwic2V0SGludCIsIl9mIiwibWF0Y2giLCJzZXRNYXRjaCIsIl9nIiwiY2hhbmdlRXZlbnQiLCJzZXRDaGFuZ2VFdmVudCIsImR1cGxpY2F0ZSIsImdldEZpcnN0RHVwbGljYXRlT3B0aW9uIiwiY29uc29sZSIsIndhcm4iLCJpbnB1dFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlSGludCIsInNldEhpbnRUZXh0QW5kSWQiLCJmaWx0ZXIiLCJ4Iiwic29ydEFzYyIsImdldE1hdGNoIiwic2xpY2UiLCJoYW5kbGVPbkZpbGwiLCJuZXdVbk1vZGlmaWVkVGV4dCIsIm9uQ2hhbmdlIiwic3R5bGUiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJ3aWR0aCIsImhlaWdodCIsImxpbmVIZWlnaHQiLCJib3hTaXppbmciLCJtYXJnaW4iLCJpbnRlcnBvbGF0ZVN0eWxlIiwicGFkZGluZyIsImJvcmRlclN0eWxlIiwiYm9yZGVyV2lkdGgiLCJjaGlsZFJlZiIsImNsb25lRWxlbWVudCIsIm1haW5JbnB1dCIsInBlcnNpc3QiLCJtb2RpZmllZFZhbHVlIiwib25CbHVyIiwicmVsYXRlZFRhcmdldCIsIm9uRm9jdXMiLCJvbktleURvd24iLCJjYXJldElzQXRUZXh0RW5kIiwiY3VycmVudFRhcmdldCIsInNlbGVjdGlvbkVuZCIsInByZXZlbnREZWZhdWx0IiwibWVyZ2VSZWZzIiwiY2xhc3NOYW1lIiwicG9zaXRpb24iLCJGcmFnbWVudCIsImRpc3BsYXkiLCJwb2ludGVyRXZlbnRzIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3hTaGFkb3ciLCJjb2xvciIsInRvcCIsImxlZnQiLCJ2aXNpYmlsaXR5Iiwid2hpdGVTcGFjZSIsIm9uQ2xpY2siLCJoaW50Q2FyZXRQb3NpdGlvbiIsImZvY3VzIiwiY2FyZXRQb3NpdGlvbiIsInNldFNlbGVjdGlvblJhbmdlIiwiYmFja2dyb3VuZCIsIm91dGxpbmUiLCJib3JkZXIiLCJjYXJldENvbG9yIiwiZGVmYXVsdFZhbHVlIiwidGFiSW5kZXgiLCJyZWZzIiwiX2kiLCJmaWx0ZXJlZFJlZnMiLCJCb29sZWFuIiwiaW5zdCIsImZpbHRlcmVkUmVmc18xIiwic3R5bGVzIiwiYXR0ciIsInN1YmF0dHIiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJkaXIiLCJqb2luIiwiYXJyYXkiLCJ0cmFja2VyIiwiaXNmZiIsInVzZXJBZ2VudCIsImFkZEV2ZW50Iiwib2JqZWN0IiwibWV0aG9kIiwidXNlQ2FwdHVyZSIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsImdldEtleXMiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsInVwIiwicmlnaHQiLCJkb3duIiwiZGVsIiwiaW5zIiwiaW5zZXJ0IiwiaG9tZSIsImVuZCIsInBhZ2V1cCIsInBhZ2Vkb3duIiwiY2Fwc2xvY2siLCJudW1fMCIsIm51bV8xIiwibnVtXzIiLCJudW1fMyIsIm51bV80IiwibnVtXzUiLCJudW1fNiIsIm51bV83IiwibnVtXzgiLCJudW1fOSIsIm51bV9tdWx0aXBseSIsIm51bV9hZGQiLCJudW1fZW50ZXIiLCJudW1fc3VidHJhY3QiLCJudW1fZGVjaW1hbCIsIm51bV9kaXZpZGUiLCJfbW9kaWZpZXIiLCJzaGlmdCIsImFsdCIsIm9wdGlvbiIsImN0cmwiLCJjb250cm9sIiwiY21kIiwiY29tbWFuZCIsIm1vZGlmaWVyTWFwIiwic2hpZnRLZXkiLCJjdHJsS2V5IiwiYWx0S2V5IiwibWV0YUtleSIsIl9tb2RzIiwiX2hhbmRsZXJzIiwiX2Rvd25LZXlzIiwid2luTGlzdGVuZEZvY3VzIiwiX3Njb3BlIiwiZWxlbWVudEhhc0JpbmRFdmVudCIsImNvZGUiLCJjaGFyQ29kZUF0Iiwic2V0U2NvcGUiLCJzY29wZSIsImdldFNjb3BlIiwiZWFjaFVuYmluZCIsIl9yZWYiLCJfcmVmJHNwbGl0S2V5Iiwic3BsaXRLZXkiLCJmb3JFYWNoIiwib3JpZ2luS2V5IiwidW5iaW5kS2V5cyIsImxlbiIsImxhc3RLZXkiLCJrZXlDb2RlIiwicmVjb3JkIiwiYTEiLCJhMiIsImFycjEiLCJhcnIyIiwiaXNJbmRleCIsImNvbXBhcmVBcnJheSIsImV2ZW50SGFuZGxlciIsImhhbmRsZXIiLCJlbGVtZW50IiwibW9kaWZpZXJzTWF0Y2giLCJzaG9ydGN1dCIsInJldHVyblZhbHVlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2FuY2VsQnViYmxlIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImtleU5hbWUiLCJrZXlOdW0iLCJnZXRNb2RpZmllclN0YXRlIiwia2V5ZG93biIsImtleXVwIiwia2V5U2hvcnRjdXQiLCJfZG93bktleXNDdXJyZW50IiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInRyaWdnZXIiLCJmaW5kIiwiaXRlbSIsInVuYmluZCIsImtleXNJbmZvIiwiX2xlbiIsImtleU1hcCIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCIsImV2IiwidXNlSG90a2V5cyIsImRlcHMiLCJfcmVmMiIsIl9yZWYyJGZpbHRlclByZXZlbnREZSIsImZpbHRlclByZXZlbnREZWZhdWx0IiwiX3JlZjIkZW5hYmxlZCIsImVuYWJsZWQiLCJfcmVmMiRlbmFibGVPbkNvbnRlbnQiLCJlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSIsIm1lbW9pc2VkQ2FsbGJhY2siLCJrZXlib2FyZEV2ZW50IiwiaG90a2V5c0V2ZW50IiwiX2tleWJvYXJkRXZlbnQkdGFyZ2V0IiwiX3JlZiRjdXJyZW50IiwiYWN0aXZlRWxlbWVudCIsImlzSG90a2V5UHJlc3NlZCIsImNsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsImNyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJJbmZpbml0ZUxvYWRlciIsIl9QdXJlQ29tcG9uZW50IiwiX3RlbXAiLCJfX3Byb3RvX18iLCJnZXRQcm90b3R5cGVPZiIsIl9sYXN0UmVuZGVyZWRTdGFydEluZGV4IiwiX2xhc3RSZW5kZXJlZFN0b3BJbmRleCIsIl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzIiwiX29uSXRlbXNSZW5kZXJlZCIsInZpc2libGVTdGFydEluZGV4IiwidmlzaWJsZVN0b3BJbmRleCIsIl9lbnN1cmVSb3dzTG9hZGVkIiwiX3NldFJlZiIsImxpc3RSZWYiLCJfbGlzdFJlZiIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsInNldFByb3RvdHlwZU9mIiwiaW5oZXJpdHMiLCJhdXRvUmVsb2FkIiwib25JdGVtc1JlbmRlcmVkIiwic3RhcnRJbmRleCIsInN0b3BJbmRleCIsIl9wcm9wcyIsImlzSXRlbUxvYWRlZCIsIml0ZW1Db3VudCIsIl9wcm9wcyRtaW5pbXVtQmF0Y2hTaSIsIm1pbmltdW1CYXRjaFNpemUiLCJfcHJvcHMkdGhyZXNob2xkIiwidGhyZXNob2xkIiwidW5sb2FkZWRSYW5nZXMiLCJyYW5nZVN0YXJ0SW5kZXgiLCJyYW5nZVN0b3BJbmRleCIsIl9pbmRleCIsInBvdGVudGlhbFN0b3BJbmRleCIsIm1pbiIsIm1heCIsIl9pbmRleDIiLCJfaW5kZXgzIiwic2NhbkZvclVubG9hZGVkUmFuZ2VzIiwic29tZSIsInN0YXJ0T3JTdG9wIiwiX2xvYWRVbmxvYWRlZFJhbmdlcyIsIl90aGlzMiIsImxvYWRNb3JlSXRlbXMiLCJsb2FkTW9yZVJvd3MiLCJfbG9vcCIsImxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgiLCJsYXN0UmVuZGVyZWRTdG9wSW5kZXgiLCJyZXNldEFmdGVySW5kZXgiLCJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCJmb3JjZVVwZGF0ZSIsIlB1cmVDb21wb25lbnQiLCJfZXh0ZW5kcyIsInNvdXJjZSIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfaW5oZXJpdHNMb29zZSIsInNhZmVJc05hTiIsIk51bWJlciIsImlzTmFOIiwiYXJlSW5wdXRzRXF1YWwiLCJuZXdJbnB1dHMiLCJsYXN0SW5wdXRzIiwiZmlyc3QiLCJzZWNvbmQiLCJyZXN1bHRGbiIsImlzRXF1YWwiLCJsYXN0VGhpcyIsImxhc3RSZXN1bHQiLCJsYXN0QXJncyIsImNhbGxlZE9uY2UiLCJuZXdBcmdzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJub3ciLCJwZXJmb3JtYW5jZSIsImNhbmNlbFRpbWVvdXQiLCJ0aW1lb3V0SUQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImlkIiwicmVxdWVzdFRpbWVvdXQiLCJkZWxheSIsInN0YXJ0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGljayIsInNpemUiLCJnZXRTY3JvbGxiYXJTaXplIiwicmVjYWxjdWxhdGUiLCJkaXYiLCJvdmVyZmxvdyIsImFwcGVuZENoaWxkIiwib2Zmc2V0V2lkdGgiLCJjbGllbnRXaWR0aCIsInJlbW92ZUNoaWxkIiwiY2FjaGVkUlRMUmVzdWx0IiwiZ2V0UlRMT2Zmc2V0VHlwZSIsIm91dGVyRGl2Iiwib3V0ZXJTdHlsZSIsImRpcmVjdGlvbiIsImlubmVyRGl2IiwiaW5uZXJTdHlsZSIsInNjcm9sbExlZnQiLCJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwiLCJkZWZhdWx0SXRlbUtleSIsImNvbHVtbkluZGV4Iiwicm93SW5kZXgiLCJjcmVhdGVHcmlkQ29tcG9uZW50IiwiX2NsYXNzIiwiZ2V0Q29sdW1uT2Zmc2V0IiwiZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCIsImdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJnZXRDb2x1bW5XaWR0aCIsImdldEVzdGltYXRlZFRvdGFsSGVpZ2h0IiwiZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCIsImdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCIsImdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCIsImdldFJvd0hlaWdodCIsImdldFJvd09mZnNldCIsImdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiaW5pdEluc3RhbmNlUHJvcHMiLCJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwidmFsaWRhdGVQcm9wcyIsIkdyaWQiLCJfaW5zdGFuY2VQcm9wcyIsIl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkIiwiX291dGVyUmVmIiwiaXNTY3JvbGxpbmciLCJob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiaW5pdGlhbFNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJpbml0aWFsU2Nyb2xsVG9wIiwic2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwidmVydGljYWxTY3JvbGxEaXJlY3Rpb24iLCJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsIm92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIm92ZXJzY2FuQ29sdW1uU3RvcEluZGV4Iiwib3ZlcnNjYW5Sb3dTdGFydEluZGV4Iiwib3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJ2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsInZpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJ2aXNpYmxlUm93U3RhcnRJbmRleCIsInZpc2libGVSb3dTdG9wSW5kZXgiLCJfY2FsbE9uU2Nyb2xsIiwib25TY3JvbGwiLCJfZ2V0SXRlbVN0eWxlIiwiX3RoaXMkcHJvcHMiLCJjb2x1bW5XaWR0aCIsInJvd0hlaWdodCIsIml0ZW1TdHlsZUNhY2hlIiwiX29mZnNldCIsImlzUnRsIiwiX19fIiwiX29uU2Nyb2xsIiwiX2V2ZW50JGN1cnJlbnRUYXJnZXQiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxXaWR0aCIsInNldFN0YXRlIiwicHJldlN0YXRlIiwiY2FsY3VsYXRlZFNjcm9sbExlZnQiLCJjYWxjdWxhdGVkU2Nyb2xsVG9wIiwiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCJfb3V0ZXJSZWZTZXR0ZXIiLCJvdXRlclJlZiIsIl9yZXNldElzU2Nyb2xsaW5nIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibmV4dFByb3BzIiwidmFsaWRhdGVTaGFyZWRQcm9wcyIsIl9wcm90byIsInNjcm9sbFRvIiwiX3JlZjMiLCJzY3JvbGxUb0l0ZW0iLCJfcmVmNCIsIl9yZWY0JGFsaWduIiwiYWxpZ24iLCJfdGhpcyRwcm9wczIiLCJjb2x1bW5Db3VudCIsInJvd0NvdW50IiwiX3RoaXMkc3RhdGUiLCJzY3JvbGxiYXJTaXplIiwiZXN0aW1hdGVkVG90YWxIZWlnaHQiLCJob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSIsInZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSIsImNvbXBvbmVudERpZE1vdW50IiwiX3RoaXMkcHJvcHMzIiwiX2NhbGxQcm9wc0NhbGxiYWNrcyIsImNvbXBvbmVudERpZFVwZGF0ZSIsIl90aGlzJHN0YXRlMiIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiX3RoaXMkcHJvcHM0IiwiaW5uZXJSZWYiLCJpbm5lckVsZW1lbnRUeXBlIiwiaW5uZXJUYWdOYW1lIiwiaXRlbURhdGEiLCJfdGhpcyRwcm9wczQkaXRlbUtleSIsIml0ZW1LZXkiLCJvdXRlckVsZW1lbnRUeXBlIiwib3V0ZXJUYWdOYW1lIiwidXNlSXNTY3JvbGxpbmciLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIiLCJfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIiLCJjb2x1bW5TdGFydEluZGV4IiwiY29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuIiwiX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciIsInJvd1N0YXJ0SW5kZXgiLCJyb3dTdG9wSW5kZXgiLCJpdGVtcyIsIl9yb3dJbmRleCIsIl9jb2x1bW5JbmRleCIsImVzdGltYXRlZFRvdGFsV2lkdGgiLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsIndpbGxDaGFuZ2UiLCJfdGhpcyRwcm9wczUiLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyIiwiX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIl9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuMiIsIl9vdmVyc2NhblJvd1N0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJfdmlzaWJsZVJvd1N0YXJ0SW5kZXgiLCJfdmlzaWJsZVJvd1N0b3BJbmRleCIsIl90aGlzJHN0YXRlMyIsIl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiX3Njcm9sbExlZnQiLCJfc2Nyb2xsVG9wIiwiX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsIl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiIsIl90aGlzJHByb3BzNiIsIm92ZXJzY2FuQ29sdW1uQ291bnQiLCJvdmVyc2NhbkNvbHVtbnNDb3VudCIsIm92ZXJzY2FuQ291bnQiLCJfdGhpcyRzdGF0ZTQiLCJvdmVyc2NhbkNvdW50UmVzb2x2ZWQiLCJvdmVyc2NhbkJhY2t3YXJkIiwib3ZlcnNjYW5Gb3J3YXJkIiwiX3RoaXMkcHJvcHM3Iiwib3ZlcnNjYW5Sb3dDb3VudCIsIm92ZXJzY2FuUm93c0NvdW50IiwiX3RoaXMkc3RhdGU1IiwiZGVmYXVsdFByb3BzIiwiX3JlZjUiLCJfcmVmNiIsInJvd01ldGFkYXRhTWFwIiwiZXN0aW1hdGVkUm93SGVpZ2h0IiwibGFzdE1lYXN1cmVkUm93SW5kZXgiLCJ0b3RhbFNpemVPZk1lYXN1cmVkUm93cyIsIml0ZW1NZXRhZGF0YSIsIm9mZnNldCIsImNvbHVtbk1ldGFkYXRhTWFwIiwiZXN0aW1hdGVkQ29sdW1uV2lkdGgiLCJsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCIsImdldEl0ZW1NZXRhZGF0YSIsIml0ZW1UeXBlIiwiaW5zdGFuY2VQcm9wcyIsIml0ZW1NZXRhZGF0YU1hcCIsIml0ZW1TaXplIiwibGFzdE1lYXN1cmVkSW5kZXgiLCJmaW5kTmVhcmVzdEl0ZW0iLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2giLCJmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCIsImhpZ2giLCJsb3ciLCJtaWRkbGUiLCJmbG9vciIsImN1cnJlbnRPZmZzZXQiLCJpbnRlcnZhbCIsImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50Iiwic2Nyb2xsT2Zmc2V0IiwiZXN0aW1hdGVkVG90YWxTaXplIiwibWF4T2Zmc2V0IiwibWluT2Zmc2V0Iiwicm91bmQiLCJWYXJpYWJsZVNpemVHcmlkIiwicmVzZXRBZnRlckNvbHVtbkluZGV4Iiwic2hvdWxkRm9yY2VVcGRhdGUiLCJyZXNldEFmdGVySW5kaWNlcyIsInJlc2V0QWZ0ZXJSb3dJbmRleCIsIl9yZWY2JHNob3VsZEZvcmNlVXBkYSIsIl9yZWY3IiwiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEiLCJkZWZhdWx0SXRlbUtleSQxIiwiY3JlYXRlTGlzdENvbXBvbmVudCIsImdldEl0ZW1PZmZzZXQiLCJnZXRFc3RpbWF0ZWRUb3RhbFNpemUiLCJnZXRJdGVtU2l6ZSIsImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiTGlzdCIsInNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxPZmZzZXQiLCJvdmVyc2NhblN0YXJ0SW5kZXgiLCJvdmVyc2NhblN0b3BJbmRleCIsImxheW91dCIsImlzSG9yaXpvbnRhbCIsIm9mZnNldEhvcml6b250YWwiLCJfb25TY3JvbGxIb3Jpem9udGFsIiwiX29uU2Nyb2xsVmVydGljYWwiLCJfZXZlbnQkY3VycmVudFRhcmdldDIiLCJ2YWxpZGF0ZVNoYXJlZFByb3BzJDEiLCJfdGhpcyRwcm9wczUkaXRlbUtleSIsIl90aGlzJF9nZXRSYW5nZVRvUmVuZCIsIl9nZXRSYW5nZVRvUmVuZGVyIiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kMiIsIl9vdmVyc2NhblN0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5TdG9wSW5kZXgiLCJfdmlzaWJsZVN0YXJ0SW5kZXgiLCJfdmlzaWJsZVN0b3BJbmRleCIsIl9zY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsT2Zmc2V0IiwiZ2V0SXRlbU1ldGFkYXRhJDEiLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSIsImVzdGltYXRlZEl0ZW1TaXplIiwidG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zIiwiVmFyaWFibGVTaXplTGlzdCIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEiLCJmaW5kTmVhcmVzdEl0ZW0kMSIsIkZpeGVkU2l6ZUdyaWQiLCJsYXN0Q29sdW1uT2Zmc2V0IiwibWlkZGxlT2Zmc2V0IiwiY2VpbCIsIl9yZWY4IiwibGFzdFJvd09mZnNldCIsIl9yZWY5IiwiX3JlZjEwIiwibnVtVmlzaWJsZUNvbHVtbnMiLCJfcmVmMTEiLCJfcmVmMTIiLCJudW1WaXNpYmxlUm93cyIsIl9yZWYxMyIsIkZpeGVkU2l6ZUxpc3QiLCJsYXN0SXRlbU9mZnNldCIsIm51bVZpc2libGVJdGVtcyIsInNoYWxsb3dEaWZmZXJzIiwiYXR0cmlidXRlIiwiX2F0dHJpYnV0ZSIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJhcmVFcXVhbCIsInByZXZQcm9wcyIsInByZXZTdHlsZSIsInByZXZSZXN0IiwibmV4dFN0eWxlIiwibmV4dFJlc3QiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0U3RhdGUiLCJvblBvaW50ZXJEb3duIiwiY29udGFpbmVyUmVmIiwiZGlzYWJsZWQiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoSG9yaXpvbnRhbGx5Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsImNvbnRhaW5lciIsImxlZnRPZmZzZXQiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiYnV0dG9uQmFkZ2UiLCJDb21wb25lbnQiLCJwbGFjZWhvbGRlciIsImNoZWNrZWQiLCJuYW1lIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsIkxhYmVsIiwiaW5wdXRSZWYiLCJjaGVja2JveCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImNhblRvZ2dsZSIsImNvbG9yUGlja2VyIiwiQ29sb3JTd2F0Y2giLCJpc1NlbGVjdGVkIiwiY29sb3JTd2F0Y2giLCJzZWxlY3RlZCIsImhleENvZGUiLCJzck9ubHkiLCJDb25maXJtYXRpb25Nb2RhbCIsImhlYWRlciIsImlzT3BlbiIsImJ1dHRvbnNMZWZ0IiwiYnV0dG9uc1JpZ2h0Iiwib25DbG9zZSIsIm5vT3ZlcmxheSIsImJhc2VaSW5kZXgiLCJNb2RhbCIsIm1vZGFsSGVhZGVyIiwibW9kYWxDb250ZW50IiwibW9kYWxCdXR0b25zQ29udGFpbmVyIiwibW9kYWxCdXR0b25zIiwiZGlzcGxheU5hbWUiLCJpc0Rpc2FibGVkIiwiQnV0dG9uIiwiSWNvbiIsInNyYyIsIml0ZW1Cb2R5UmVuZGVyZXIiLCJoYW5kbGVTZWxlY3QiLCJyZW5kZXJDbGlja2FibGUiLCJzZWxlY3RlZEl0ZW0iLCJwbGFjZW1lbnQiLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJzZXRJc09wZW4iLCJ0b2dnbGVJc09wZW4iLCJNZW51Q29udGFpbmVyIiwiYnV0dG9uIiwiQ2xpY2thYmxlIiwiTWVudSIsIk1lbnVJdGVtIiwiaXNBY3RpdmUiLCJEcm9wZG93biIsImFjY2VwdCIsIm11bHRpcGxlIiwiaW5wdXQiLCJwYXJlbnQiLCJob3Jpem9udGFsUGxhY2VtZW50IiwidmVydGljYWxQbGFjZW1lbnQiLCJmaXhlZCIsImljb24iLCJjcm9zc09yaWdpbiIsInRvcE9mZnNldCIsImJvdHRvbU9mZnNldCIsInNyY1dpZHRoIiwic3JjSGVpZ2h0IiwiZGVjb2RpbmciLCJsb2FkaW5nIiwiaW1hZ2VFbGVtZW50IiwiaW1hZ2UiLCJoYXNPdmVybGF5Iiwib3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsImxpc3QiLCJhY3RpdmUiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b25MaW5rIiwiYXMiLCJmb290ZXIiLCJzbWFydExheW91dCIsIm1lbnVQbGFjZW1lbnQiLCJQbGFjZW1lbnRDb250ZXh0IiwiRXJyb3IiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJib3R0b20iLCJkaXN0YW5jZVRvRWRnZSIsImlubmVySGVpZ2h0IiwidWxFbCIsInF1ZXJ5U2VsZWN0b3IiLCJjaGlsZEVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsIm5ld0hlaWdodCIsIm1pbkhlaWdodCIsIm1heEhlaWdodCIsIm1lbnUiLCJvcGVuIiwiZm9yd2FyZFJlZiIsIm1lbnVDb250YWluZXIiLCJtZW51SXRlbSIsIm1lbnVMaW5rSXRlbSIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm1vZGFsIiwibW9kYWxCdXR0b24iLCJhcHBlbmREaWdpdCIsIm51bWJlciIsImRpZ2l0IiwicG9wRGlnaXQiLCJldmVudERpZ2l0S2V5cyIsIk51bXBhZCIsImNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyIiwibmV3TnVtYmVyIiwiTnVtcGFkS2V5cyIsImZpbGwiLCJudW1wYWRWYWx1ZSIsIm51bXBhZCIsInBhcnNlSW50IiwibnVtYmVycyIsImlzRml4ZWQiLCJzaG93RXhwYW5kZWRHcm91cCIsIlNlbGVjdENvbnRleHQiLCJleHBhbmRlZCIsInRvZ2dsZUV4cGFuZCIsImhhbmRsZUdyb3VwQ2xpY2siLCJJY29uQnV0dG9uIiwiT3B0aW9uIiwic2VsZWN0ZWRPcHRpb25zIiwidXBkYXRlU2VsZWN0ZWRPcHRpb24iLCJpc0NoZWNrZWQiLCJjaGVja2JveENvbnRhaW5lciIsIkNoZWNrYm94IiwiaXNPcHRpb24iLCJvbkZpbHRlciIsInNlbGVjdEFsbENoZWNrZWQiLCJ0b2dnbGVTZWxlY3RBbGxDaGVja2VkIiwic2VhcmNoS2V5d29yZCIsInNlbGVjdEFsbCIsInNldFNlbGVjdGVkT3B0aW9ucyIsImhhc0dyb3VwT3B0aW9uIiwiZmlsdGVyT3B0aW9ucyIsImtleXdvcmQiLCJ0cmltIiwiZmlsdGVyZWRPcHRpb25zIiwicmVkdWNlIiwiZmlsdGVyZWQiLCJncm91cE9wdGlvbiIsImZpbHRlcmVkR3JvdXBPcHRpb25zIiwiZmlsdGVyZWRPcHRpb25zQ291bnQiLCJuZXh0T3B0aW9uIiwic2VsZWN0ZWRPcHRpb25zQ291bnQiLCJzZWxlY3RlZE9wdGlvbiIsImZpbHRlcmVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0QWxsQ2xpY2siLCJvcHRpb25zVG9TZWxlY3QiLCJmbGF0Iiwic2VsZWN0QWxsQ29udGFpbmVyIiwiR3JvdXBPcHRpb24iLCJub09wdGlvbnMiLCJzZXRTZWFyY2hLZXl3b3JkIiwiaGFuZGxlU2VhcmNoS2V5d29yZENoYW5nZSIsImhhbmRsZVNlYXJjaEtleXdvcmRSZXNldENsaWNrIiwiaWNvblNlYXJjaENvbnRhaW5lciIsIlRleHRJbnB1dCIsInJlc2V0QnV0dG9uIiwic2hvd1NlbGVjdGVkQXNUYWdzIiwic2hvd1NlYXJjaCIsIm9wZW5lZCIsInRvZ2dsZU9wZW5lZCIsImhhbmRsZU9wZW5TZWxlY3QiLCJ2YWx1ZXMiLCJTZWxlY3RDb250ZXh0UHJvdmlkZXIiLCJTZWxlY3RvciIsImlzRHJvcGRvd25PcGVuZWQiLCJpY29uQnV0dG9uIiwic2VhcmNoQ29udGFpbmVyIiwiU2VhcmNoIiwiT3B0aW9uTGlzdCIsImluaXRpYWxTdGF0ZSIsInVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMiLCJjb250ZXh0VmFsdWUiLCJoYW5kbGVUYWdDbGljayIsImhhbmRsZVRhZ0Nsb3NlIiwicGxhY2Vob2xkZXJUb1Nob3ciLCJzaG93QXNUYWdzIiwidGFnV3JhcHBlciIsIlRhZyIsImNsb3NhYmxlIiwic2hvd0FzVGV4dCIsImNvbHVtbnMiLCJkYXRhU291cmNlIiwib25Sb3dDbGljayIsImhhc0Fycm93Iiwib25Mb2FkTW9yZSIsInBhZ2UiLCJzZXRQYWdlIiwicGFnZVNpemUiLCJUYWJsZUNvbmZpZyIsIlBBR0VfU0laRSIsInRhYmxlSGVpZ2h0IiwiUk9XX0hFSUdIVCIsImhlYWRlckhlaWdodCIsIkhFQURFUl9IRUlHSFQiLCJkaXNhYmxlTGF6eUxvYWRlciIsImFjdGl2ZVJvd3MiLCJpdGVtc0NvdW50IiwiaXNIZWFkZXJTdGlja3kiLCJoYXNWaXJ0dWFsU2Nyb2xsIiwic2V0U2Nyb2xsVG9wIiwicmVuZGVyUm93Iiwicm93IiwiaGFuZGxlTGlzdFNjcm9sbCIsImxvYWRNb3JlIiwiSVRFTVNfTE9BREVEIiwicGxhY2Vob2xkZXJDb250YWluZXIiLCJzY3JvbGxiYXJDb250YWluZXIiLCJib3JkZXJCb3R0b20iLCJjb2x1bW4iLCJvblNvcnQiLCJzb3J0YWJsZSIsInNvcnRlZCIsImRlZmF1bHRTb3J0T3JkZXIiLCJ0aXRsZSIsIlNvcnRPcmRlciIsIkRFU0MiLCJzb3J0T3JkZXIiLCJzZXRTb3J0T3JkZXIiLCJoYW5kbGVTb3J0Q29sdW1uIiwibmV3U29ydE9yZGVyIiwiQVNDIiwiY2VsbFByb3BzIiwidGFibGVIZWFkZXJDZWxsIiwic29ydEljb25WaXNpYmxlIiwiaGFuZGxlUm93Q2xpY2siLCJkYXRhSW5kZXgiLCJvbkRlbGV0ZSIsImNsb3NlQnV0dG9uIiwicGF0dGVybiIsImlucHV0TW9kZSIsInRhZ09wdGlvbnMiLCJ0YWdzIiwic2V0VGFncyIsImhhbmRsZVRleHRDaGFuZ2UiLCJoYW5kbGVUYWdEZWxldGUiLCJ0YWciLCJ1cGRhdGVkVGFncyIsInRhZ0l0ZW0iLCJoYW5kbGVLZXlEb3duIiwiaW5wdXRFbGVtZW50IiwidGV4dElucHV0IiwidGFnSW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwic2hvd1Rvb2x0aXAiLCJ0b29sdGlwSXNWaXNpYmxlIiwic2V0VG9vbHRpcElzVmlzaWJsZSIsIm9uVG91Y2hFbmRIYW5kbGVyIiwidGltZXIiLCJjbGVhclRpbWVvdXQiLCJ0b29sdGlwIiwidmlzaWJsZSIsIm5vdFZpc2libGUiLCJvblRvdWNoRW5kIiwicG9zdGVyIiwibXV0ZWQiLCJsb29wIiwiYXV0b1BsYXkiLCJ2aWRlbyIsInBsYXlzSW5saW5lIiwiaXMiLCJsIiwidXNlRGVidWdWYWx1ZSIsImdldFNuYXBzaG90IiwiZCIsInUiLCJjIiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJtb2R1bGUiLCJyZXF1aXJlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsImRlZmluaXRpb24iLCJwcm9wIiwidG9TdHJpbmdUYWciLCJfX3dlYnBhY2tfZXhwb3J0c19fIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
2
|
+
(()=>{"use strict";var e={5348:(e,t,n)=>{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 c=new WeakMap,d={},s={},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=c.get(e);return[()=>e.get(t)||d,r=>{if(!h(t)){const o=e.get(t);t in s||(s[t]=o),n[5](t,_(o,r),o||d)}},n[6],()=>!h(t)&&t in s?s[t]:e.get(t)||d]},w=new WeakMap;let M=0;const S=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=++M+"~",w.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=S(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+":"+S(e[a])+",");w.set(e,o)}}return o};let P=!0;const[C,x]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[f,f],j={isOnline:()=>P,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},E={initFocus:e=>(y&&document.addEventListener("visibilitychange",e),C("focus",e),()=>{y&&document.removeEventListener("visibilitychange",e),x("focus",e)}),initReconnect:e=>{const t=()=>{P=!0,e()},n=()=>{P=!1};return C("online",t),C("offline",n),()=>{x("online",t),x("offline",n)}}},I=!r.useId,k=!b||"Deno"in window,D=k?r.useEffect:r.useLayoutEffect,R="undefined"!=typeof navigator&&navigator.connection,L=!k&&R&&(["slow-2g","2g"].includes(R.effectiveType)||R.saveData),T=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)?S(e):"",t]};let z=0;const N=()=>++z,H=2;var A=H;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 d=!1!==a.revalidate,s=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;!o.startsWith("$inf$")&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(v))}return v(n);async function v(n){const[o]=T(n);if(!o)return;const[a,l]=O(t,o),[v,_,g]=c.get(t),b=v[o],y=()=>d&&(delete g[o],b&&b[0])?b[0](H).then((()=>a().data)):a().data;if(e.length<3)return y();let w,M=r;const S=N();_[o]=[S,0];const P=!h(u),C=a(),x=C.data,j=C._c,E=h(j)?x:j;if(P&&(u=m(u)?u(E):u,l({data:u,_c:E})),m(M))try{M=M(E)}catch(e){w=e}if(M&&m(M.then)){if(M=await M.catch((e=>{w=e})),S!==_[o][0]){if(w)throw w;return M}w&&P&&s(w)&&(i=!0,M=E,l({data:M,_c:p}))}i&&(w||(m(i)&&(M=i(M,E)),l({data:M,_c:p}))),_[o][1]=N();const I=await y();if(l({_c:p}),!w)return i?I:M;if(f)throw w}}const F=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},V=(e,t)=>{if(!c.has(e)){const n=_(E,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(let e=o.length;e--;)o[e](n,r)},d=()=>{if(!c.has(e)&&(c.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(),c.delete(e)}}};return d(),[e,o,d,a]}return[e,c.get(e)[4]]},[W,G]=V(new Map),K=_({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:L?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:L?5e3:3e3,compare:(e,t)=>S(e)==S(t),isPaused:()=>!1,cache:W,mutate:G,fallback:{}},j),U=(0,r.createContext)({}),Z=b&&window.__SWR_DEVTOOLS_USE__,q=Z?window.__SWR_DEVTOOLS_USE__:[],Q=()=>_(K,(0,r.useContext)(U));q.concat((e=>(t,n,r)=>e(t,n&&((...e)=>{const r=T(t)[0],[,,,o]=c.get(W),a=o[r];return a?(delete o[r],a):n(...e)}),r)));Z&&(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)(U),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.useState)((()=>l?V(l(i.cache||W),a):p));return u&&(i.cache=u[0],i.mutate=u[1]),D((()=>{if(u)return u[2]&&u[2](),u[3]}),[]),(0,r.createElement)(U.Provider,_(e,{value:i}))}),"defaultValue",{value:K})},7659:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ZZVHcX45XCblmDab9ewZ",modalHeader:"xTX1XJfCSUsrh_yLlZoi",modalContent:"Te6jHdlyjsQXmnTs9ban",noPadding:"Lz_gwSwP3QCN5zYzFsEi",modalButtonsContainer:"Gh1uvxMfEgPTdt66Qis2",modalButtons:"Iaw34FkMJqjrGQ58BGfx"}},6114:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{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)=>{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)=>{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)=>{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)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4"}},186:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={header:"WSYYBAz53dhquIOZPWBP",label:"b55hyZ0oHl0s4Ot9OhwM",expanded:"N3AzO5kZlh4HAPknnYzq"}},8054:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ",iconSearchContainer:"Z5LPx47ybEKeX29XBYBC",resetButton:"hjT9ZXvmvc5QUruwz8El"}},7917:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={placeholder:"ddlRidnIzYhQC9DGpgIt",active:"shHsEJGtbz4cmA6x1G1l",tagWrapper:"BGEShc7qu2fk9DZE2RUs",selectedOption:"ma9BIjuGCQeKF44sgucT",selectedOptions:"nRpAwv97CesqQbDLcet9"}},6684:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",content:"o_21r_EjLKB3xhgGy74s",closeButton:"ZZPRZLUq9MQyifD8x2jH",disabled:"uCLz0vbNnQZFX8kVuUiG"}},9067:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"gwYKRPpGdIMVXkiN0H9B",tagInput:"avImGs3XcLeDLGhxD8bw",disabled:"yT8Pp8TUvP7sQSGeGLNJ",textInput:"ZiNNf2oLVjExxp9RT2s_",small:"LemMUTseigxHbmIYVVTc",medium:"PUHJdM7ZEb3LFReM1_Ug",large:"j9mk52hGhoFwjw4FWHQ9",xlarge:"EiWqeFqQXE9LHUh1vxpX",noBorder:"O6WsOpUZoZeThUb_ViXn"}},7792:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},8907:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={tooltip:"Km6UUy0jpqM0LA2eXccc",visible:"uToJfcRCR6eVHIm80wGb",notVisible:"hGxgyhPmQmM97ViOpcv8",left:"yBv1lwDHpexxO3DPpd1v",right:"v852ExxmQ6AtSQF2sX8A",top:"iV2yzPizoou9omW811hg",bottom:"VmmE8ENsCkzbwLpL3XJg"}},6504:(e,t,n)=>{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){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,c=e.allowTabFill,d=e.allowEnterFill,s=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],M=O[1],S=l.useState(""),P=S[0],C=S[1],x=l.useState(),j=x[0],E=x[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&&T(m,_,e)}}));var R=function(e){M(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):"",C(t),E(n),f&&f(n)},L=function(){if(""!==P&&k){var e=b+P;k.target.value=e,v.onChange&&v.onChange(k),R(""),s&&s(j),y(e)}},T=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)},z=l.cloneElement(o).ref,N=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?L():(t&&c&&"Tab"===e.key&&""!==P||t&&d&&"Enter"===e.key&&""!==P)&&(e.preventDefault(),L()),v.onKeyDown&&v.onKeyDown(e)},ref:z&&"string"!=typeof z?u.mergeRefs(z,h):h}));return l.default.createElement("div",{className:"rah-input-wrapper",style:{position:"relative"}},i?o:l.default.createElement(l.default.Fragment,null,N,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?P&&""!==P&&(L(),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:P&&""!==P?"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:P,tabIndex:-1}))))}},2394:(e,t)=>{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)=>{n.r(t),n.d(t,{isHotkeyPressed:()=>D,useHotkeys:()=>k,useIsHotkeyPressed:()=>j});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},c={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},d={16:!1,18:!1,17:!1,91:!1},s={},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],c="*"===i?"*":_(i);if(s[c]){n||(n=b());var d=o>1?a(u,t):[];s[c]=s[c].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,d))}))}}))};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,d)Object.prototype.hasOwnProperty.call(d,a)&&(!d[a]&&t.mods.indexOf(+a)>-1||d[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||d[16]||d[18]||d[17]||d[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=s["*"],r=e.keyCode||e.which||e.charCode;if(M.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=c[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 d){for(var o in d[r]=!0,u)u[o]===r&&(M[o]=!0);if(!n)return}for(var a in d)Object.prototype.hasOwnProperty.call(d,a)&&(d[a]=e[c[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===p.indexOf(17)&&p.push(17),-1===p.indexOf(18)&&p.push(18),d[17]=!0,d[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 s)for(var f=0;f<s[r].length;f++)if(("keydown"===e.type&&s[r][f].keydown||"keyup"===e.type&&s[r][f].keyup)&&s[r][f].key){for(var v=s[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 M(e,t,n){p=[];var r=i(e),l=[],c="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&&(c=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&&(c=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 s||(s[e]=[]),s[e].push({keyup:g,keydown:b,scope:c,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 d)for(var r in d[t]=!1,u)u[r]===t&&(M[r]=!1)}(e)}),O))}var S={setScope:g,getScope:b,deleteScope:function(e,t){var n,r;for(var o in e||(e=b()),s)if(Object.prototype.hasOwnProperty.call(s,o))for(n=s[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(s).forEach((function(n){var r=s[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(s).forEach((function(e){return delete s[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:c};for(var P in S)Object.prototype.hasOwnProperty.call(S,P)&&(M[P]=S[P]);if("undefined"!=typeof window){var C=window.hotkeys;M.noConflict=function(e){return e&&window.hotkeys===M&&(window.hotkeys=C),M},window.hotkeys=M}var x=n(6689);function j(){return M.isPressed}M.filter=function(){return!0};var E=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},I=function(e){return E(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,c=o.filterPreventDefault,d=void 0===c||c,s=o.enabled,f=void 0===s||s,p=o.enableOnContentEditable,v=void 0!==p&&p,h=(0,x.useRef)(null),m=(0,x.useCallback)((function(e,n){var r,o;return i&&!i(e)?!d:!!(I(e)&&!E(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,x.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),M(e,n||{},m),function(){return M.unbind(e,m)};M.unbind(e,m)}),[m,e,f]),h}var D=M.isPressed},5691:(e,t,n)=>{n.r(t),n.d(t,{default:()=>u});var r=n(6689),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},a=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}}(),i=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},l=function(e){function t(){var e,n,r;o(this,t);for(var a=arguments.length,l=Array(a),u=0;u<a;u++)l[u]=arguments[u];return n=r=i(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),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},i(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),a(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,c=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 c=Math.min(Math.max(l,i+r-1),n-1),d=l+1;d<=c&&!t(d);d++)l=d;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var s=a[0]-1;if(t(s))break;a[0]=s}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==c.length||this._memoizedUnloadedRanges.some((function(e,t){return c[t]!==e})))&&(this._memoizedUnloadedRanges=c,this._loadUnloadedRanges(c))}},{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 u=l},5022:(e,t,n)=>{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)}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.r(t),n.d(t,{FixedSizeGrid:()=>H,FixedSizeList:()=>A,VariableSizeGrid:()=>E,VariableSizeList:()=>N,areEqual:()=>W,shouldComponentUpdate:()=>G});var 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 c=n(6689);function d(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}var s="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=s(),r={id:requestAnimationFrame((function o(){s()-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,d=e.getColumnWidth,s=e.getEstimatedTotalHeight,v=e.getEstimatedTotalWidth,m=e.getOffsetForColumnAndAlignment,y=e.getOffsetForRowAndAlignment,w=e.getRowHeight,M=e.getRowOffset,S=e.getRowStartIndexForOffset,P=e.getRowStopIndexForStartIndex,C=e.initInstanceProps,x=e.shouldResetStyleCacheOnItemSizeChange,j=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=C(r.props,o(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:o(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,c=r._getItemStyleCache(x&&i,x&&l,x&&u),s=e+":"+t;if(c.hasOwnProperty(s))o=c[s];else{var f=n(r.props,t,r._instanceProps),p="rtl"===l;c[s]=o={position:"absolute",left:p?void 0:f,right:p?f:void 0,top:M(r.props,e,r._instanceProps),height:w(r.props,e,r._instanceProps),width:d(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,c=a;if("rtl"===t)switch(_()){case"negative":c=-a;break;case"positive-descending":c=u-o-a}c=Math.max(0,Math.min(c,u-o));var d=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:c,scrollTop:d,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}a(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),j(e),null};var E=t.prototype;return E.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)},E.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,c=a.width,d=this.state,f=d.scrollLeft,p=d.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=s(this.props,this._instanceProps),b=v(this.props,this._instanceProps)>c?_: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})},E.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()},E.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()},E.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},E.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,d=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,M=this.state.isScrolling,S=this._getHorizontalRangeToRender(),P=S[0],C=S[1],x=this._getVerticalRangeToRender(),j=x[0],E=x[1],I=[];if(o>0&&g)for(var k=j;k<=E;k++)for(var D=P;D<=C;D++)I.push((0,c.createElement)(t,{columnIndex:D,data:f,isScrolling:O?M:void 0,key:h({columnIndex:D,data:f,rowIndex:k}),rowIndex:k,style:this._getItemStyle(k,D)}));var R=s(this.props,this._instanceProps),L=v(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:r({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},y)},(0,c.createElement)(u||d||"div",{children:I,ref:l,style:{height:R,pointerEvents:M?"none":void 0,width:L}}))},E._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],c=a[3],d=this._getVerticalRangeToRender(),s=d[0],f=d[1],p=d[2],v=d[3];this._callOnItemsRendered(i,l,s,f,u,c,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)}},E._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,c=u.horizontalScrollDirection,d=u.isScrolling,s=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var p=i(this.props,s,this._instanceProps),v=l(this.props,p,s,this._instanceProps),h=d&&"backward"!==c?1:Math.max(1,f),m=d&&"forward"!==c?1:Math.max(1,f);return[Math.max(0,p-h),Math.max(0,Math.min(t-1,v+m)),p,v]},E._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,c=i.scrollTop,d=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var s=S(this.props,c,this._instanceProps),f=P(this.props,s,c,this._instanceProps),p=l&&"backward"!==u?1:Math.max(1,d),v=l&&"forward"!==u?1:Math.max(1,d);return[Math.max(0,s-p),Math.max(0,Math.min(a-1,f+v)),s,f]},t}(c.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},M=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},S=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 c=i+1;c<=n;c++){var d=a(c);o[c]={offset:l,size:d},l+=d}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},P=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?C(e,t,n,a,0,r):x(e,t,n,Math.max(0,a),r)},C=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=S(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},x=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&S(e,t,r,n).offset<o;)r+=i,i*=2;return C(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},j=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=S(e,t,n,a),c="column"===e?M(t,a):w(t,a),d=Math.max(0,Math.min(c-l,u.offset)),s=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=s-l&&o<=d+l?"auto":"center"),r){case"start":return d;case"end":return s;case"center":return Math.round(s+(d-s)/2);default:return o>=s&&o<=d?o:s>d||o<s?s:d}},E=y({getColumnOffset:function(e,t,n){return S("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return P("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=S("column",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("column",e,c,r).size;return c},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:M,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return j("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return j("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return S("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return P("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=S("row",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("row",e,c,r).size;return c},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,d=e.getOffsetForIndexAndAlignment,s=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,o(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:o(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,c=r._getItemStyleCache(g&&i,g&&u,g&&a);if(c.hasOwnProperty(e))t=c[e];else{var d=n(r.props,e,r._instanceProps),s=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,p="rtl"===a,v=f?d:0;c[e]=t={position:"absolute",left:p?void 0:v,right:p?v:void 0,top:f?0:d,height:f?"100%":s,width:f?s:"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}a(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(d(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,d=e.innerTagName,s=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,M=w?this._onScrollHorizontal:this._onScrollVertical,S=this._getRangeToRender(),P=S[0],C=S[1],x=[];if(s>0)for(var j=P;j<=C;j++)x.push((0,c.createElement)(t,{data:f,key:v(j,f),index:j,isScrolling:b?O:void 0,style:this._getItemStyle(j)}));var E=i(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:M,ref:this._outerRefSetter,style:r({position:"relative",height:a,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},g)},(0,c.createElement)(u||d||"div",{children:x,ref:l,style:{height:w?"100%":E,pointerEvents:O?"none":void 0,width:w?E:"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=s(this.props,i,this._instanceProps),u=v(this.props,l,i,this._instanceProps),c=o&&"backward"!==a?1:Math.max(1,n),d=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-c),Math.max(0,Math.min(t-1,u+d)),l,u]},t}(c.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},L=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 c=r(u);o[u]={offset:i,size:c},i+=c}n.lastMeasuredIndex=t}return o[t]},T=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=L(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},z=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},N=D({getItemOffset:function(e,t,n){return L(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:z,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,c=e.width,d="horizontal"===i||"horizontal"===u?c:l,s=L(e,t,o),f=z(e,o),p=Math.max(0,Math.min(f-d,s.offset)),v=Math.max(0,s.offset-d+s.size+a);switch("smart"===n&&(n=r>=v-d&&r<=p+d?"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?T(e,t,o,0,n):function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&L(e,n,t).offset<r;)n+=a,a*=2;return T(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,c="horizontal"===o||"horizontal"===l?u:a,d=L(e,t,r),s=n+c,f=d.offset+d.size,p=t;p<i-1&&f<s;)p++,f+=L(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}}),H=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,c=Math.max(0,i*l-u),d=Math.min(c,t*l),s=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=s-u&&r<=d+u?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(u/2)?0:f>c+Math.floor(u/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,c=Math.max(0,u*i-l),d=Math.min(c,t*i),s=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=s-l&&r<=d+l?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(l/2)?0:f>c+Math.floor(l/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},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}}),A=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,c=e.itemSize,d=e.layout,s=e.width,f="horizontal"===i||"horizontal"===d?s:l,p=Math.max(0,u*c-f),v=Math.min(p,t*c),h=Math.max(0,t*c-f+c+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,c=t*i,d="horizontal"===r||"horizontal"===l?u:o,s=Math.ceil((d+n-c)/i);return Math.max(0,Math.min(a-1,t+s-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=d(e,F),o=t.style,a=d(t,V);return!B(n,o)&&!B(r,a)}function G(e,t){return!W(this.props,e)||B(this.state,t)}},7237:function(e,t,n){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,c=e.containerRef,d=e.disabled,s=void 0!==d&&d,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,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,x=void 0!==C&&C,j=e.autoFocus,E=void 0!==j&&j,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,L=e.size,T=void 0===L?"medium":L,z=e.type;return o.default.createElement("button",{ref:c,className:(0,a.default)([i.default.container,i.default[T],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]=M,t[i.default.stretchHorizontally]=P,t[i.default.stretchVertically]=x,t[i.default.leftOffset]=h&&k.includes("left"),t[i.default.rightOffset]=h&&k.includes("right"),t),r]),disabled:s,autoFocus:E,type:z,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){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){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){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){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,c=e.className,d=e.size,s=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,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,x=void 0!==C&&C,j=e.disabled,E=void 0!==j&&j,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,L=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:s,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[d],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]=M,t[u.default.disabled]=E,t[u.default.transparent]=_,t[u.default.stretchHorizontally]=P,t[u.default.stretchVertically]=x,t[u.default.leftOffset]=h&&k.includes("left"),t[u.default.rightOffset]=h&&k.includes("right"),t),c])},L),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){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){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)),c=n(4115),d=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,s=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]);return l.default.createElement(c.Label,{value:t},l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([d.default.checkbox,s,d.default[v]]),onChange:_,placeholder:r,name:i,type:"checkbox",autoFocus:m}))}},4616:function(e,t,n){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){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,c=e.direction,d=void 0===c?"vertical":c,s=e.canToggle,f=void 0!==s&&s;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[d]])},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){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){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,c=e.size,d=void 0===c?"medium":c,s=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[d],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:s,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){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){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,c=e.header,d=e.isOpen,s=e.buttonsLeft,f=void 0===s?[]:s,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,M=e.baseZIndex,S=void 0===M?1019:M;return o.default.createElement(i.Modal,{containerRef:u,isOpen:d,onClose:m,noOverlay:y,noShadow:w,baseZIndex:S},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!c&&o.default.createElement("h1",{className:l.default.modalHeader},c),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){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}})},943:function(e,t,n){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){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),c=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,d=e.selectedItem,s=e.placement,f=void 0===s?{vertical:"bottom",horizontal:"left"}:s,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(c.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:_,selectedItem:d,toggleIsOpen:g}):i.default.createElement(u.Clickable,{display:o,isDisabled:_,onClick:g}),placement:f,ref:m},i.default.createElement(c.Menu,{isOpen:v},n&&n.map((function(e){return i.default.createElement(c.MenuItem,{isActive:e.id===(null==d?void 0:d.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==d?void 0:d.id)}):e.name)}))))}},1889:(e,t,n)=>{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){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,c=e.multiple,d=void 0!==c&&c,s=e.disabled,f=void 0!==s&&s,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,M=e.stretchHorizontally,S=void 0!==M&&M,P=e.stretchVertically,C=void 0!==P&&P,x=e.rounded,j=void 0!==x&&x,E=e.size,I=void 0===E?"medium":E;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]=j,t[i.default.noShadow]=m,t[i.default.noBorder]=g,t[i.default.noPadding]=y,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=C,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:d,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){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){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,c=void 0===u?"column":u,d=e.placement,s=void 0===d?{horizontal:"center",vertical:"bottom",parent:"viewport"}:d,f="center"===s.horizontal?"horizontalCenter":s.horizontal,p="center"===s.vertical?"verticalCenter":s.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[c],(t={},t[i.default.fixed]="container"!==s.parent,t),n])},r)}},6384:function(e,t,n){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){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,c=void 0===u?"medium":u,d=e.inverted,s=void 0!==d&&d;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[c],(t={},t[i.default.inverted]=s,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){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){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,c=e.src,d=e.alt,s=e.offsetSides,f=void 0===s?[]:s,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,M=e.transparent,S=void 0!==M&&M,P=e.rounded,C=void 0!==P&&P,x=e.size,j=void 0===x?"medium":x,E=e.type,I=void 0===E?"button":E;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[j],(t={},t[l.default.inverted]=g,t[l.default.rounded]=C,t[l.default.noShadow]=y,t[l.default.noBorder]=w,t[l.default.transparent]=S,t[l.default.topOffset]=C&&f.includes("top"),t[l.default.rightOffset]=C&&f.includes("right"),t[l.default.bottomOffset]=C&&f.includes("bottom"),t[l.default.leftOffset]=C&&f.includes("left"),t),n]),disabled:m,onClick:v,type:I,role:"button"},o.default.createElement(i.Icon,{src:c,alt:d,size:j,inverted:g}),u)}},2847:function(e,t,n){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){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),c=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,d=e.children,s=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,M=void 0!==w&&w,S=e.offsetSides,P=void 0===S?[]:S,C=e.disabled,x=void 0!==C&&C,j=e.size,E=void 0===j?"medium":j,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)([c.default.container,c.default[E],(t={},t[c.default.inverted]=h,t[c.default.rounded]=M,t[c.default.noShadow]=_,t[c.default.noBorder]=b,t[c.default.disabled]=x,t[c.default.transparent]=O,t[c.default.topOffset]=M&&P.includes("top"),t[c.default.rightOffset]=M&&P.includes("right"),t[c.default.bottomOffset]=M&&P.includes("bottom"),t[c.default.leftOffset]=M&&P.includes("left"),t),s])},I),i.default.createElement(u.Icon,{src:f,alt:p,size:E,inverted:h}),d)}},5860:function(e,t,n){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){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,c=e.containerRef,d=e.layout,s=void 0===d?"contain":d,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[s]]),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:c,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){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){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){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){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){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,c=void 0!==u&&u,d=e.transparent,s=void 0!==d&&d,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:c,inverted:r,transparent:s,noPadding:p,align:_,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){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),c=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,d=void 0!==a&&a,s=e.transparent,f=void 0!==s&&s,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)([c.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:d,transparent:f,noPadding:v,align:m,size:g,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){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){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)),c=n(9633),d=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,s=void 0===i||i,f=e.header,p=e.footer,v=e.smartLayout,h=void 0===v||v,m=(0,l.useContext)(c.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,")")}}}),[s,m,h]),s?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:g,className:(0,u.default)([d.default.menu,(t={},t[d.default.open]=s,t),a])},l.default.createElement("div",null,f&&s&&l.default.createElement("h3",{className:d.default.header},f),l.default.createElement("ul",null,r)),p&&s&&l.default.createElement("div",{className:(0,u.default)([d.default.footer,(n={},n[d.default.noBorder]=!r,n)])},p))):null}},9633:function(e,t,n){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)),c=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,d=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([c.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return d}),[d])},l.default.createElement("div",{className:(0,u.default)([c.default.menuContainer,c.default[d.horizontal],c.default[d.vertical]])},r)))}))},9385:function(e,t,n){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,c=e.noPadding,d=void 0!==c&&c,s=e.isActive,f=void 0!==s&&s;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=d,n),l]),onClick:u},r)}},9762:function(e,t,n){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,c=e.className,d=e.noPadding,s=void 0!==d&&d,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,c,(t={},t[u.default.noPadding]=s,t)])},f),a)}},3814:function(e,t,n){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){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),c=i(n(7659)),d=i(n(9118));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,s=e.transparent,f=void 0!==s&&s,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,c.default)([d.default.overlay,(t={},t[d.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:y+1},className:(0,c.default)([d.default.modal,(n={},n[d.default.transparent]=f,n[d.default.noShadow]=v,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:y+2},className:d.default.modalButton},i))}},1391:function(e,t,n){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){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)),c=function(e,t){return 10*e+t},d=function(e){return Math.floor(e/10)},s=["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(c(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(d(n));else if(s.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(c(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(d(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{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){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,c=e.isFixed,d=void 0!==c&&c,s=e.onClick,f=void 0===s?function(){}:s;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]=d,t)]),onClick:f},n)}},6650:function(e,t,n){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){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)),c=i(n(4685)),d=n(5348),s=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,d.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:c.default.header,onClick:_},l.default.createElement("div",{className:c.default.label},r),l.default.createElement(f.IconButton,{className:(0,u.default)([(t={},t[c.default.expanded]=h,t)]),src:p.default,alt:h?"Collapse":"Expand",noBorder:!0,transparent:!0})),h&&o.map((function(e){return l.default.createElement(s.Option,{key:e.value,data:e},e.label)})))}},9087:function(e,t,n){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){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)),c=i(n(8054)),d=n(4616),s=n(2568);t.default=function(e){var t,n=e.children,r=e.className,o=e.data,a=(0,l.useContext)(s.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)([c.default.container,(t={},t[c.default.selected]=v&&!i,t),r]),onClick:h},i&&l.default.createElement("span",{className:c.default.checkboxContainer},l.default.createElement(d.Checkbox,{className:c.default.checkbox,checked:v,size:"small"})),l.default.createElement("span",{className:c.default.label},n))}},3781:function(e,t,n){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){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 c=n(5348),d=i(n(6689)),s=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,c.useToggle)(!1),u=i[0],m=i[1],_=(0,d.useContext)(v.SelectContext),g=_.multiple,b=_.searchKeyword,y=_.selectAll,O=_.selectedOptions,w=_.setSelectedOptions,M=n.some((function(e){return!(0,t.isOption)(e)})),S=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},P=(0,d.useMemo)((function(){return M?n.reduce((function(e,t){var n=S(t.options);return n.length?l(l([],e,!0),[r(r({},t),{options:n})],!1):e}),[]):S(n)}),[M,n,b]),C=(0,d.useMemo)((function(){return P.reduce((function(e,n){return(0,t.isOption)(n)?e+1:e+n.options.length}),0)}),[M,P,t.isOption]),x=(0,d.useMemo)((function(){return O.filter((function(e){return P.find((function(n){return(0,t.isOption)(n)?n.value===e.value:n.options.find((function(t){return t.value===e.value}))}))})).length}),[O,P]),j=(0,d.useCallback)((function(){if(u)w([]),a&&a([]);else{var e=P.map((function(e){return(0,t.isOption)(e)?e:e.options})).flat();w(e),a&&a(e.map((function(e){return e.value})))}m()}),[P,t.isOption,u,w,m]);return(0,d.useEffect)((function(){x===C?m(!0):u&&m(!1)}),[x,C,u,m]),d.default.createElement("div",{className:h.default.container},y&&g&&!!P.length&&d.default.createElement("div",{className:h.default.selectAllContainer,onClick:j},d.default.createElement("span",{className:h.default.checkboxContainer},d.default.createElement(s.Checkbox,{className:h.default.checkbox,checked:u,indeterminate:!!x&&x!==C,size:"small"})),d.default.createElement("span",{className:h.default.label},"Select All")),P.length?P.map((function(e){return(0,t.isOption)(e)?d.default.createElement(p.Option,{key:e.value,data:e},e.label):d.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})):d.default.createElement("div",{className:h.default.noOptions},"No matches for",d.default.createElement("span",{className:h.default.searchKeyword}," ".concat(b))))}},4292:function(e,t,n){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){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)),c=i(n(2396)),d=n(2568),s=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)(d.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)([c.default.container,t])},l.default.createElement("div",{className:c.default.iconSearchContainer},l.default.createElement(f.Icon,{src:p.default})),l.default.createElement(s.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(h.IconButton,{className:c.default.resetButton,src:v.default,alt:"Clear",onClick:i,disabled:!r,noBorder:!0,noShadow:!0,transparent:!0}))}},8947:function(e,t,n){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){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)),c=i(n(3790)),d=i(n(7917)),s=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,M=e.selectAll,S=e.showExpandedGroup,P=e.size,C=void 0===P?"medium":P,x=e.showSelectedAsTags,j=void 0!==x&&x,E=e.showSearch,I=void 0!==E&&E,k=e.width,D=e.onChange,R=e.onFilter,L=(0,s.useToggle)(!1),T=L[0],z=L[1],N=(0,s.useOutsideClick)((function(){return z(!1)})),H=(0,l.useCallback)((function(){z()}),[]),A=(0,l.useCallback)((function(e){b||z(!1),D&&D(e)}),[]);return l.default.createElement(f.SelectContextProvider,{defaultValue:a,multiple:b,options:y,onChange:A,selectAll:M,showExpandedGroup:S},l.default.createElement("div",{ref:N},w?l.default.createElement(_.Label,{value:w}):null,l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.disabled]=i,t),d.default[C],o]),style:{width:k}},l.default.createElement("div",{className:(0,u.default)([d.default.header,(n={},n[d.default.active]=T,n)]),onClick:H},l.default.createElement(p.Selector,{placeholder:O,showSelectedAsTags:j,isDropdownOpened:T}),l.default.createElement(h.IconButton,{className:(0,u.default)([d.default.iconButton,(r={},r[d.default.expanded]=T,r)]),src:c.default,alt:T?"Collapse":"Expand",noBorder:!0,transparent:!0})),T&&l.default.createElement("div",{className:d.default.content},0===y.length?l.default.createElement("div",{className:d.default.noOptions},"No options available"):l.default.createElement(l.default.Fragment,null,I&&l.default.createElement("div",{className:d.default.searchContainer},l.default.createElement(v.Search,null)),l.default.createElement(m.OptionList,{options:y,onFilter:R,onChange:A}))))))}},2568:function(e,t,n){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),c={multiple:!1,selectAll:!1,showExpandedGroup:!0,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){}},d=(0,l.createContext)(c);t.SelectContext=d,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,s=void 0!==a&&a,f=e.showExpandedGroup,p=void 0===f||f,v=e.options,h=e.onChange,m=(0,l.useState)(c.selectedOptions),_=m[0],g=m[1],b=(0,l.useState)(c.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]);(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 M=(0,l.useMemo)((function(){return{multiple:o,selectAll:s,showExpandedGroup:p,selectedOptions:_,updateSelectedOption:w,searchKeyword:y,setSearchKeyword:O,setSelectedOptions:g}}),[s,_,g,w,y,O]);return l.default.createElement(d.Provider,{value:M},t)}},237:function(e,t,n){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)),c=n(2568),d=n(2149),s=i(n(7659));t.default=function(e){var t=e.placeholder,n=e.showSelectedAsTags,r=e.isDropdownOpened,o=(0,l.useContext)(c.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,s.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(d.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){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){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){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)),c=l(n(7659)),d=n(5022),s=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,M=e.headerHeight,S=void 0===M?v.TableConfig.HEADER_HEIGHT:M,P=e.disableLazyLoader,C=e.activeRows,x=e.itemsCount,j=e.isHeaderSticky,E=void 0!==j&&j,I=e.hasVirtualScroll,k=void 0===I||I,D=e.className,R=(0,u.useState)(0),L=R[0],T=R[1],z=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,c=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(p.default,{data:c,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==C?void 0:C[c.id])}))}),[t,C,a,w,o]),N=(0,u.useCallback)((function(e){var t=e.scrollOffset;T(t)}),[]),H=(0,u.useCallback)((function(){P||n.length!==x&&(n.length<g*l||m&&i&&(m(l+1),i(l+1)))}),[P,n.length,x,g,l,m,i]),A=(0,u.useCallback)((function(e){return!P&&e<n.length-v.TableConfig.ITEMS_LOADED}),[n.length,P]);return u.default.createElement(u.default.Fragment,null,k?u.default.createElement("div",{className:(0,c.default)([h.default.container,D])},u.default.createElement("div",{className:h.default.table},u.default.createElement(f.default,{columns:t,scrollTop:L,headerHeight:S}),y&&!n.length?u.default.createElement("div",{className:h.default.placeholderContainer,style:{height:b}},y):u.default.createElement(s.default,{isItemLoaded:A,itemCount:n.length,loadMoreItems:H},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(d.FixedSizeList,{ref:r,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:N,onItemsRendered:t,className:h.default.scrollbarContainer},z)})))):u.default.createElement("div",{className:(0,c.default)([h.default.container,h.default.scrollbarContainer,D]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:L,isHeaderSticky:E,headerHeight:S}),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==C?void 0:C[null==e?void 0:e.id])})}))))}},5038:function(e,t,n){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,c=e.isHeaderSticky,d=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]=c,n)]),style:{height:d}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){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)),c=i(n(6689)),d=n(4958),s=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,c.useState)((function(){return l||p.SortOrder.DESC})),b=g[0],y=g[1],O=(0,c.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 c.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?c.default.createElement(d.Icon,{alt:"Sort button",size:"small",src:b===p.SortOrder.DESC?s.default:f.default}):null)}},8784:function(e,t,n){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)),c=i(n(8605)),d=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,s=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.hasArrow]=a,t[d.default.active]=s,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(c.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){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){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){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)),c=i(n(7451)),d=n(4958),s=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=(0,l.useCallback)((function(e){"function"==typeof f&&f(o),"function"==typeof a&&a(e,o)}),[a]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,(t={},t[s.default.disabled]=i,t)])},l.default.createElement("span",{className:s.default.content},n),r&&l.default.createElement("span",{className:s.default.closeButton,onClick:p},l.default.createElement(d.Icon,{src:c.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){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){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)),c=l(n(7659)),d=n(1914),s=l(n(9067)),f=n(2149);t.default=function(e){var t,n,r=e.className,o=e.onChange,a=e.placeholder,l=e.value,p=e.name,v=e.pattern,h=e.inputRef,m=e.size,_=void 0===m?"small":m,g=e.type,b=void 0===g?"text":g,y=e.autoFocus,O=void 0!==y&&y,w=e.noBorder,M=void 0!==w&&w,S=e.inputMode,P=e.disabled,C=e.tagOptions,x=void 0===C?[]:C,j=(0,u.useState)(""),E=j[0],I=j[1],k=(0,u.useState)(l),D=k[0],R=k[1];(0,u.useEffect)((function(){l&&R(l)}),[l,R]);var L=(0,u.useCallback)((function(e){var t=e.target.value;I(t)}),[I]),T=(0,u.useCallback)((function(e){var t=D.filter((function(t){return t!==e}));R(t),o&&o(t)}),[D,R]),z=(0,u.useCallback)((function(e){if("Enter"===e.code||"NumpadEnter"===e.code){e.preventDefault();var t=i(i([],D,!0),[E],!1);R(t),I(""),e.target,o&&o(t)}}),[D,E,R,I]),N=u.default.createElement(d.Hint,{options:x,allowEnterFill:!1,allowTabFill:!0},u.default.createElement("input",{"data-testid":"input",ref:h,className:(0,c.default)([s.default.textInput,s.default[_],(t={},t[s.default.noBorder]=M,t)]),onChange:L,onKeyDown:z,pattern:v,placeholder:a,name:p,type:b,value:E,autoFocus:O,inputMode:S,disabled:P}));return u.default.createElement("div",{className:(0,c.default)([s.default.container,(n={},n[s.default.disabled]=P,n),r])},D.map((function(e){return u.default.createElement(f.Tag,{key:e,value:e,onDelete:T,closable:!0},e)})),u.default.createElement("div",{className:s.default.tagInput},N))}},2819:function(e,t,n){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){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)),c=n(4115),d=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,s=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,M=e.inputMode,S=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),P=l.default.createElement("input",{"data-testid":"input",ref:v,className:(0,u.default)([d.default.textInput,d.default[m],(t={},t[d.default.noBorder]=w,t)]),onChange:S,onBlur:o,onKeyDown:a,pattern:p,placeholder:i,name:f,type:g,value:s,autoFocus:y,inputMode:M});return n?l.default.createElement(c.Label,{value:n},P):l.default.createElement(l.default.Fragment,null,P)}},1143:function(e,t,n){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){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){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){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){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)),c=i(n(8907));t.default=function(e){var t=e.children,n=e.text,r=e.placement,o=e.showTooltip,a=(0,l.useState)(),i=a[0],d=a[1],s=(0,l.useCallback)((function(){d(!0)}),[]);return(0,l.useEffect)((function(){var e=setTimeout((function(){return Boolean}));return i&&(e=setTimeout((function(){return d(!1)}),5e3)),function(){return clearTimeout(e)}}),[i]),l.default.createElement(l.default.Fragment,null,o?l.default.createElement("div",{"data-text":n,"data-testid":"tooltip",className:(0,u.default)([c.default.tooltip,c.default[r],void 0===i?null:i?c.default.visible:c.default.notVisible]),onTouchEnd:s},t):t)}},746:function(e,t,n){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){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,c=e.muted,d=void 0===c||c,s=e.loop,f=void 0===s||s,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:d,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:d,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){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)=>{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){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){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)},2802:(e,t)=>{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)=>{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)=>{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)=>{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"},7451:(e,t,n)=>{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)=>{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)=>{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)=>{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 c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var d="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,d=r[1];return l((function(){o.value=n,o.getSnapshot=t,c(o)&&d({inst:o})}),[e,n,t]),i((function(){return c(o)&&d({inst:o}),e((function(){c(o)&&d({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:d},1688:(e,t,n)=>{e.exports=n(3250)},6689:e=>{e.exports=require("react")}},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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bjZCLFFBQVNtNkIsRUFBUUEsRUFBT242QixRQUFTczZCLEdBR3BFSCxFQUFPbjZCLE9BQ2YsQ0NyQkFzNkIsRUFBb0JwckMsRUFBS2lyQyxJQUN4QixJQUFJTyxFQUFTUCxHQUFVQSxFQUFPcDZCLFdBQzdCLElBQU9vNkIsRUFBaUIsUUFDeEIsSUFBTSxFQUVQLE9BREFHLEVBQW9CUCxFQUFFVyxFQUFRLENBQUUvbUMsRUFBRyttQyxJQUM1QkEsQ0FBTSxFQ0xkSixFQUFvQlAsRUFBSSxDQUFDLzVCLEVBQVMyNkIsS0FDakMsSUFBSSxJQUFJeG1DLEtBQU93bUMsRUFDWEwsRUFBb0JyckMsRUFBRTByQyxFQUFZeG1DLEtBQVNtbUMsRUFBb0JyckMsRUFBRStRLEVBQVM3TCxJQUM1RXBCLE9BQU9pTCxlQUFlZ0MsRUFBUzdMLEVBQUssQ0FBRXdMLFlBQVksRUFBTXRMLElBQUtzbUMsRUFBV3htQyxJQUUxRSxFQ05EbW1DLEVBQW9CcnJDLEVBQUksQ0FBQzZQLEVBQUs4N0IsSUFBVTduQyxPQUFPeU0sVUFBVU4sZUFBZXpQLEtBQUtxUCxFQUFLODdCLEdDQ2xGTixFQUFvQmhyQyxFQUFLMFEsSUFDSCxvQkFBWDVRLFFBQTBCQSxPQUFPeXJDLGFBQzFDOW5DLE9BQU9pTCxlQUFlZ0MsRUFBUzVRLE9BQU95ckMsWUFBYSxDQUFFL3FDLE1BQU8sV0FFN0RpRCxPQUFPaUwsZUFBZWdDLEVBQVMsYUFBYyxDQUFFbFEsT0FBTyxHQUFPLEVDRjlELElBQUlnckMsRUFBc0JSLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VPdXRzaWRlQ2xpY2svdXNlT3V0c2lkZUNsaWNrLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9zd3IvX2ludGVybmFsL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3N3ci9jb3JlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlU1dSSG9va3NDb25maWcvdXNlU1dSSG9va3NDb25maWcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VUb2dnbGUvdXNlVG9nZ2xlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2NsYXNzY2F0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9mZjFiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UubW9kdWxlLmNzcz80MzI4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLm1vZHVsZS5jc3M/YzBiNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94Lm1vZHVsZS5jc3M/ZmYyZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ODcxOSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3M/ZmNlMiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3M/YThhZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0NsaWNrYWJsZS5tb2R1bGUuY3NzPzdhMGQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/ZDU1NyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzPzA5OWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24ubW9kdWxlLmNzcz8xY2FjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/NTk2ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3M/MmM0NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLm1vZHVsZS5jc3M/ZjEwZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLm1vZHVsZS5jc3M/NDY5ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/M2NkNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzP2RmZmEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8xOTBhIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/Y2QzNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUl0ZW0ubW9kdWxlLmNzcz9hYWNlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz9iNWRiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwubW9kdWxlLmNzcz84YTg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzY1YmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8zNzE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLm1vZHVsZS5jc3M/NGRiNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLm1vZHVsZS5jc3M/YjY3NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L09wdGlvbkxpc3QubW9kdWxlLmNzcz80OWFjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gubW9kdWxlLmNzcz9lZDQzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5tb2R1bGUuY3NzPzFlNzkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0b3IvU2VsZWN0b3IubW9kdWxlLmNzcz85YWJkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGUubW9kdWxlLmNzcz85M2E5Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXIubW9kdWxlLmNzcz83MGRmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXJDZWxsLm1vZHVsZS5jc3M/MWQwYyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Lm1vZHVsZS5jc3M/Yjk1NSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Q2VsbC5tb2R1bGUuY3NzP2RhNWEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLm1vZHVsZS5jc3M/OGYzNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9UYWdzSW5wdXQubW9kdWxlLmNzcz84ZmQxIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC5tb2R1bGUuY3NzPzNmMWYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC5tb2R1bGUuY3NzPzU4ODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzP2VjODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL1Rvb2x0aXAubW9kdWxlLmNzcz8wNmFkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8ubW9kdWxlLmNzcz9lZGE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWF1dG9jb21wbGV0ZS1oaW50L2Rpc3Qvc3JjL2luZGV4LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWF1dG9jb21wbGV0ZS1oaW50L2Rpc3Qvc3JjL3V0aWxzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3RrZXlzLWhvb2svZGlzdC9yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy1pbmZpbml0ZS1sb2FkZXIvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9kaXN0L21lbW9pemUtb25lLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL051bXBhZC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9PcHRpb25MaXN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdENvbnRleHQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdG9yL1NlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyQ2VsbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9UYWdzSW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnc0lucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1Rvb2x0aXAvVG9vbHRpcC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29uc3RhbnRzL1RhYmxlLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbnN0YW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy90eXBlcy90YWJsZS50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LXVwLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jcm9zc2VkLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9zZWFyY2guc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xudmFyIG9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPdXRzaWRlQ2xpY2soY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlUmVmKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgfSwgW2NhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZU91dHNpZGVDbGljay5qcy5tYXAiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IsIF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlUHJvbWlzZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgIH0pLCAyKSwgcmVzdWx0ID0gX2FbMF0sIHNldFJlc3VsdCA9IF9hWzFdO1xuICAgIC8vIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBpZiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIHVubW91bnRlZFxuICAgIC8vIHdoaWxlIHRoZSBwcm9taXNlIHdhcyBzdGlsbCBwZW5kaW5nIHRvIGF2b2lkIHNldHRpbmcgc3RhdGVcbiAgICAvLyBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlxuICAgIHZhciBoYXNVbm1vdW50ZWQgPSB1c2VSZWYoZmFsc2UpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhhc1VubW91bnRlZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciBkaXNwYXRjaCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwcm9taXNlKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhLCBlcnJvcl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcHJvbWlzZV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGRhdGFdO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JfMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfSwgW2hhc1VubW91bnRlZF0pO1xuICAgIHJldHVybiBbcmVzdWx0LCBkaXNwYXRjaF07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VQcm9taXNlLmpzLm1hcCIsImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlU3RhdGUsIGNyZWF0ZUVsZW1lbnQsIHVzZVJlZiwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5cbi8vIEdsb2JhbCBzdGF0ZSB1c2VkIHRvIGRlZHVwbGljYXRlIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnNcbmNvbnN0IFNXUkdsb2JhbFN0YXRlID0gbmV3IFdlYWtNYXAoKTtcblxuY29uc3QgRU1QVFlfQ0FDSEUgPSB7fTtcbmNvbnN0IElOSVRJQUxfQ0FDSEUgPSB7fTtcbmNvbnN0IG5vb3AgPSAoKT0+e307XG4vLyBVc2luZyBub29wKCkgYXMgdGhlIHVuZGVmaW5lZCB2YWx1ZSBhcyB1bmRlZmluZWQgY2FuIGJlIHJlcGxhY2VkXG4vLyBieSBzb21ldGhpbmcgZWxzZS4gUHJldHRpZXIgaWdub3JlIGFuZCBleHRyYSBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5IGhlcmVcbi8vIHRvIGVuc3VyZSB0aGF0IHRzYyBkb2Vzbid0IHJlbW92ZSB0aGUgX19OT0lOTElORV9fIGNvbW1lbnQuXG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IFVOREVGSU5FRCA9IC8qI19fTk9JTkxJTkVfXyovIG5vb3AoKTtcbmNvbnN0IE9CSkVDVCA9IE9iamVjdDtcbmNvbnN0IGlzVW5kZWZpbmVkID0gKHYpPT52ID09PSBVTkRFRklORUQ7XG5jb25zdCBpc0Z1bmN0aW9uID0gKHYpPT50eXBlb2YgdiA9PSAnZnVuY3Rpb24nO1xuY29uc3QgbWVyZ2VPYmplY3RzID0gKGEsIGIpPT4oe1xuICAgICAgICAuLi5hLFxuICAgICAgICAuLi5iXG4gICAgfSk7XG5jb25zdCBTVFJfVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG4vLyBOT1RFOiBVc2UgdGhlIGZ1bmN0aW9uIHRvIGd1YXJhbnRlZSBpdCdzIHJlLWV2YWx1YXRlZCBiZXR3ZWVuIGpzZG9tIGFuZCBub2RlIHJ1bnRpbWUgZm9yIHRlc3RzLlxuY29uc3QgaXNXaW5kb3dEZWZpbmVkID0gdHlwZW9mIHdpbmRvdyAhPSBTVFJfVU5ERUZJTkVEO1xuY29uc3QgaXNEb2N1bWVudERlZmluZWQgPSB0eXBlb2YgZG9jdW1lbnQgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSA9ICgpPT5pc1dpbmRvd0RlZmluZWQgJiYgdHlwZW9mIHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10gIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGNyZWF0ZUNhY2hlSGVscGVyID0gKGNhY2hlLCBrZXkpPT57XG4gICAgY29uc3Qgc3RhdGUgPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIHJldHVybiBbXG4gICAgICAgIC8vIEdldHRlclxuICAgICAgICAoKT0+Y2FjaGUuZ2V0KGtleSkgfHwgRU1QVFlfQ0FDSEUsXG4gICAgICAgIC8vIFNldHRlclxuICAgICAgICAoaW5mbyk9PntcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAvLyBCZWZvcmUgd3JpdGluZyB0byB0aGUgc3RvcmUsIHdlIGtlZXAgdGhlIHZhbHVlIGluIHRoZSBpbml0aWFsIGNhY2hlXG4gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBub3QgdGhlcmUgeWV0LlxuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBJTklUSUFMX0NBQ0hFKSkge1xuICAgICAgICAgICAgICAgICAgICBJTklUSUFMX0NBQ0hFW2tleV0gPSBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZVs1XShrZXksIG1lcmdlT2JqZWN0cyhwcmV2LCBpbmZvKSwgcHJldiB8fCBFTVBUWV9DQUNIRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFN1YnNjcmliZXJcbiAgICAgICAgc3RhdGVbNl0sXG4gICAgICAgIC8vIEdldCBzZXJ2ZXIgY2FjaGUgc25hcHNob3RcbiAgICAgICAgKCk9PntcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjYWNoZSB3YXMgdXBkYXRlZCBvbiB0aGUgY2xpZW50LCB3ZSByZXR1cm4gdGhlIHN0b3JlZCBpbml0aWFsIHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gSU5JVElBTF9DQUNIRSkgcmV0dXJuIElOSVRJQUxfQ0FDSEVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZG9uZSBhbnkgY2xpZW50LXNpZGUgdXBkYXRlcywgd2UgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpIHx8IEVNUFRZX0NBQ0hFO1xuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8vIHVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBvYmplY3QtPmtleSBtYXBwaW5nXG4vLyBzbyB0aGUgb2JqZWN0cyBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4vLyBXZWFrTWFwIHVzZXMgYSBoYXNodGFibGUgdW5kZXIgdGhlIGhvb2QsIHNvIHRoZSBsb29rdXBcbi8vIGNvbXBsZXhpdHkgaXMgYWxtb3N0IE8oMSkuXG5jb25zdCB0YWJsZSA9IG5ldyBXZWFrTWFwKCk7XG4vLyBjb3VudGVyIG9mIHRoZSBrZXlcbmxldCBjb3VudGVyID0gMDtcbi8vIEEgc3RhYmxlIGhhc2ggaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0czpcbi8vIC0gRmFzdCBhbmQgZW5zdXJlcyB1bmlxdWUgaGFzaCBwcm9wZXJ0aWVzXG4vLyAtIEhhbmRsZXMgdW5zZXJpYWxpemFibGUgdmFsdWVzXG4vLyAtIEhhbmRsZXMgb2JqZWN0IGtleSBvcmRlcmluZ1xuLy8gLSBHZW5lcmF0ZXMgc2hvcnQgcmVzdWx0c1xuLy9cbi8vIFRoaXMgaXMgbm90IGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiwgYW5kIHRoZSByZXN1bHQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmVcbi8vIHBhcnNhYmxlLlxuY29uc3Qgc3RhYmxlSGFzaCA9IChhcmcpPT57XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgY29uc3QgY29uc3RydWN0b3IgPSBhcmcgJiYgYXJnLmNvbnN0cnVjdG9yO1xuICAgIGNvbnN0IGlzRGF0ZSA9IGNvbnN0cnVjdG9yID09IERhdGU7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBsZXQgaW5kZXg7XG4gICAgaWYgKE9CSkVDVChhcmcpID09PSBhcmcgJiYgIWlzRGF0ZSAmJiBjb25zdHJ1Y3RvciAhPSBSZWdFeHApIHtcbiAgICAgICAgLy8gT2JqZWN0L2Z1bmN0aW9uLCBub3QgbnVsbC9kYXRlL3JlZ2V4cC4gVXNlIFdlYWtNYXAgdG8gc3RvcmUgdGhlIGlkIGZpcnN0LlxuICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkgaGFzaGVkLCBkaXJlY3RseSByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgICAgcmVzdWx0ID0gdGFibGUuZ2V0KGFyZyk7XG4gICAgICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBoYXNoIGZpcnN0IGZvciBjaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0aW9uIGJlZm9yZSBlbnRlcmluZyB0aGVcbiAgICAgICAgLy8gcmVjdXJzaXZlIGBzdGFibGVIYXNoYCBjYWxscy5cbiAgICAgICAgLy8gRm9yIG90aGVyIG9iamVjdHMgbGlrZSBzZXQgYW5kIG1hcCwgd2UgdXNlIHRoaXMgaWQgZGlyZWN0bHkgYXMgdGhlIGhhc2guXG4gICAgICAgIHJlc3VsdCA9ICsrY291bnRlciArICd+JztcbiAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IEFycmF5KSB7XG4gICAgICAgICAgICAvLyBBcnJheS5cbiAgICAgICAgICAgIHJlc3VsdCA9ICdAJztcbiAgICAgICAgICAgIGZvcihpbmRleCA9IDA7IGluZGV4IDwgYXJnLmxlbmd0aDsgaW5kZXgrKyl7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBPQkpFQ1QpIHtcbiAgICAgICAgICAgIC8vIE9iamVjdCwgc29ydCBrZXlzLlxuICAgICAgICAgICAgcmVzdWx0ID0gJyMnO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9CSkVDVC5rZXlzKGFyZykuc29ydCgpO1xuICAgICAgICAgICAgd2hpbGUoIWlzVW5kZWZpbmVkKGluZGV4ID0ga2V5cy5wb3AoKSkpe1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGluZGV4ICsgJzonICsgc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaXNEYXRlID8gYXJnLnRvSlNPTigpIDogdHlwZSA9PSAnc3ltYm9sJyA/IGFyZy50b1N0cmluZygpIDogdHlwZSA9PSAnc3RyaW5nJyA/IEpTT04uc3RyaW5naWZ5KGFyZykgOiAnJyArIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogRHVlIHRvIHRoZSBidWcgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Njc4MDc1LFxuICogaXQncyBub3QgcmVsaWFibGUgdG8gZGV0ZWN0IGlmIHRoZSBicm93c2VyIGlzIGN1cnJlbnRseSBvbmxpbmUgb3Igb2ZmbGluZVxuICogYmFzZWQgb24gYG5hdmlnYXRvci5vbkxpbmVgLlxuICogQXMgYSB3b3JrYXJvdW5kLCB3ZSBhbHdheXMgYXNzdW1lIGl0J3Mgb25saW5lIG9uIHRoZSBmaXJzdCBsb2FkLCBhbmQgY2hhbmdlXG4gKiB0aGUgc3RhdHVzIHVwb24gYG9ubGluZWAgb3IgYG9mZmxpbmVgIGV2ZW50cy5cbiAqLyBsZXQgb25saW5lID0gdHJ1ZTtcbmNvbnN0IGlzT25saW5lID0gKCk9Pm9ubGluZTtcbi8vIEZvciBub2RlIGFuZCBSZWFjdCBOYXRpdmUsIGBhZGQvcmVtb3ZlRXZlbnRMaXN0ZW5lcmAgZG9lc24ndCBleGlzdCBvbiB3aW5kb3cuXG5jb25zdCBbb25XaW5kb3dFdmVudCwgb2ZmV2luZG93RXZlbnRdID0gaXNXaW5kb3dEZWZpbmVkICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID8gW1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyLmJpbmQod2luZG93KSxcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdylcbl0gOiBbXG4gICAgbm9vcCxcbiAgICBub29wXG5dO1xuY29uc3QgaXNWaXNpYmxlID0gKCk9PntcbiAgICBjb25zdCB2aXNpYmlsaXR5U3RhdGUgPSBpc0RvY3VtZW50RGVmaW5lZCAmJiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZpc2liaWxpdHlTdGF0ZSkgfHwgdmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJztcbn07XG5jb25zdCBpbml0Rm9jdXMgPSAoY2FsbGJhY2spPT57XG4gICAgLy8gZm9jdXMgcmV2YWxpZGF0ZVxuICAgIGlmIChpc0RvY3VtZW50RGVmaW5lZCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgIH1cbiAgICBvbldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgaWYgKGlzRG9jdW1lbnREZWZpbmVkKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICB9O1xufTtcbmNvbnN0IGluaXRSZWNvbm5lY3QgPSAoY2FsbGJhY2spPT57XG4gICAgLy8gcmV2YWxpZGF0ZSBvbiByZWNvbm5lY3RlZFxuICAgIGNvbnN0IG9uT25saW5lID0gKCk9PntcbiAgICAgICAgb25saW5lID0gdHJ1ZTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICAgIC8vIG5vdGhpbmcgdG8gcmV2YWxpZGF0ZSwganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICAgIGNvbnN0IG9uT2ZmbGluZSA9ICgpPT57XG4gICAgICAgIG9ubGluZSA9IGZhbHNlO1xuICAgIH07XG4gICAgb25XaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgIG9uV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgfTtcbn07XG5jb25zdCBwcmVzZXQgPSB7XG4gICAgaXNPbmxpbmUsXG4gICAgaXNWaXNpYmxlXG59O1xuY29uc3QgZGVmYXVsdENvbmZpZ09wdGlvbnMgPSB7XG4gICAgaW5pdEZvY3VzLFxuICAgIGluaXRSZWNvbm5lY3Rcbn07XG5cbmNvbnN0IElTX1JFQUNUX0xFR0FDWSA9ICFSZWFjdC51c2VJZDtcbmNvbnN0IElTX1NFUlZFUiA9ICFpc1dpbmRvd0RlZmluZWQgfHwgJ0Rlbm8nIGluIHdpbmRvdztcbi8vIFBvbHlmaWxsIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuY29uc3QgckFGID0gKGYpPT5oYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSA/IHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10oZikgOiBzZXRUaW1lb3V0KGYsIDEpO1xuLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gSVNfU0VSVkVSID8gdXNlRWZmZWN0IDogdXNlTGF5b3V0RWZmZWN0O1xuLy8gVGhpcyBhc3NpZ25tZW50IGlzIHRvIGV4dGVuZCB0aGUgTmF2aWdhdG9yIHR5cGUgdG8gdXNlIGVmZmVjdGl2ZVR5cGUuXG5jb25zdCBuYXZpZ2F0b3JDb25uZWN0aW9uID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4vLyBBZGp1c3QgdGhlIGNvbmZpZyBiYXNlZCBvbiBzbG93IGNvbm5lY3Rpb24gc3RhdHVzICg8PSA3MEticHMpLlxuY29uc3Qgc2xvd0Nvbm5lY3Rpb24gPSAhSVNfU0VSVkVSICYmIG5hdmlnYXRvckNvbm5lY3Rpb24gJiYgKFtcbiAgICAnc2xvdy0yZycsXG4gICAgJzJnJ1xuXS5pbmNsdWRlcyhuYXZpZ2F0b3JDb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUpIHx8IG5hdmlnYXRvckNvbm5lY3Rpb24uc2F2ZURhdGEpO1xuXG5jb25zdCBzZXJpYWxpemUgPSAoa2V5KT0+e1xuICAgIGlmIChpc0Z1bmN0aW9uKGtleSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGtleSA9IGtleSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBub3QgcmVhZHlcbiAgICAgICAgICAgIGtleSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwga2V5IGFzIHRoZSBhcmd1bWVudCBvZiBmZXRjaGVyLiBUaGlzIGNhbiBiZSBhIHN0cmluZyBvciBhblxuICAgIC8vIGFycmF5IG9mIHZhbHVlcy5cbiAgICBjb25zdCBhcmdzID0ga2V5O1xuICAgIC8vIElmIGtleSBpcyBub3QgZmFsc3ksIG9yIG5vdCBhbiBlbXB0eSBhcnJheSwgaGFzaCBpdC5cbiAgICBrZXkgPSB0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleS5sZW5ndGggOiBrZXkpID8gc3RhYmxlSGFzaChrZXkpIDogJyc7XG4gICAgcmV0dXJuIFtcbiAgICAgICAga2V5LFxuICAgICAgICBhcmdzXG4gICAgXTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lc3RhbXAuXG5sZXQgX190aW1lc3RhbXAgPSAwO1xuY29uc3QgZ2V0VGltZXN0YW1wID0gKCk9PisrX190aW1lc3RhbXA7XG5cbmNvbnN0IEZPQ1VTX0VWRU5UID0gMDtcbmNvbnN0IFJFQ09OTkVDVF9FVkVOVCA9IDE7XG5jb25zdCBNVVRBVEVfRVZFTlQgPSAyO1xuXG52YXIgY29uc3RhbnRzID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIEZPQ1VTX0VWRU5UOiBGT0NVU19FVkVOVCxcbiAgUkVDT05ORUNUX0VWRU5UOiBSRUNPTk5FQ1RfRVZFTlQsXG4gIE1VVEFURV9FVkVOVDogTVVUQVRFX0VWRU5UXG59O1xuXG5hc3luYyBmdW5jdGlvbiBpbnRlcm5hbE11dGF0ZSguLi5hcmdzKSB7XG4gICAgY29uc3QgW2NhY2hlLCBfa2V5LCBfZGF0YSwgX29wdHNdID0gYXJncztcbiAgICAvLyBXaGVuIHBhc3NpbmcgYXMgYSBib29sZWFuLCBpdCdzIGV4cGxpY2l0bHkgdXNlZCB0byBkaXNhYmxlL2VuYWJsZVxuICAgIC8vIHJldmFsaWRhdGlvbi5cbiAgICBjb25zdCBvcHRpb25zID0gbWVyZ2VPYmplY3RzKHtcbiAgICAgICAgcG9wdWxhdGVDYWNoZTogdHJ1ZSxcbiAgICAgICAgdGhyb3dPbkVycm9yOiB0cnVlXG4gICAgfSwgdHlwZW9mIF9vcHRzID09PSAnYm9vbGVhbicgPyB7XG4gICAgICAgIHJldmFsaWRhdGU6IF9vcHRzXG4gICAgfSA6IF9vcHRzIHx8IHt9KTtcbiAgICBsZXQgcG9wdWxhdGVDYWNoZSA9IG9wdGlvbnMucG9wdWxhdGVDYWNoZTtcbiAgICBjb25zdCByb2xsYmFja09uRXJyb3JPcHRpb24gPSBvcHRpb25zLnJvbGxiYWNrT25FcnJvcjtcbiAgICBsZXQgb3B0aW1pc3RpY0RhdGEgPSBvcHRpb25zLm9wdGltaXN0aWNEYXRhO1xuICAgIGNvbnN0IHJldmFsaWRhdGUgPSBvcHRpb25zLnJldmFsaWRhdGUgIT09IGZhbHNlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvciA9IChlcnJvcik9PntcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByb2xsYmFja09uRXJyb3JPcHRpb24gPT09ICdmdW5jdGlvbicgPyByb2xsYmFja09uRXJyb3JPcHRpb24oZXJyb3IpIDogcm9sbGJhY2tPbkVycm9yT3B0aW9uICE9PSBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHRocm93T25FcnJvciA9IG9wdGlvbnMudGhyb3dPbkVycm9yO1xuICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBrZXkgZmlsdGVyLCByZXR1cm4gdGhlIG11dGF0aW9uIHJlc3VsdHMgZm9yIGFsbFxuICAgIC8vIGZpbHRlcmVkIGtleXMuXG4gICAgaWYgKGlzRnVuY3Rpb24oX2tleSkpIHtcbiAgICAgICAgY29uc3Qga2V5RmlsdGVyID0gX2tleTtcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleXMgPSBbXTtcbiAgICAgICAgY29uc3QgaXQgPSBjYWNoZS5rZXlzKCk7XG4gICAgICAgIGZvcihsZXQga2V5SXQgPSBpdC5uZXh0KCk7ICFrZXlJdC5kb25lOyBrZXlJdCA9IGl0Lm5leHQoKSl7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlJdC52YWx1ZTtcbiAgICAgICAgICAgIGlmICgvLyBTa2lwIHRoZSBzcGVjaWFsIHVzZVNXUkluZmluaXRlIGtleXMuXG4gICAgICAgICAgICAha2V5LnN0YXJ0c1dpdGgoJyRpbmYkJykgJiYga2V5RmlsdGVyKGNhY2hlLmdldChrZXkpLl9rKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWF0Y2hlZEtleXMubWFwKG11dGF0ZUJ5S2V5KSk7XG4gICAgfVxuICAgIHJldHVybiBtdXRhdGVCeUtleShfa2V5KTtcbiAgICBhc3luYyBmdW5jdGlvbiBtdXRhdGVCeUtleShfaykge1xuICAgICAgICAvLyBTZXJpYWxpemUga2V5XG4gICAgICAgIGNvbnN0IFtrZXldID0gc2VyaWFsaXplKF9rKTtcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3QgW2dldCwgc2V0XSA9IGNyZWF0ZUNhY2hlSGVscGVyKGNhY2hlLCBrZXkpO1xuICAgICAgICBjb25zdCBbRVZFTlRfUkVWQUxJREFUT1JTLCBNVVRBVElPTiwgRkVUQ0hdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAgICAgY29uc3QgcmV2YWxpZGF0b3JzID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV07XG4gICAgICAgIGNvbnN0IHN0YXJ0UmV2YWxpZGF0ZSA9ICgpPT57XG4gICAgICAgICAgICBpZiAocmV2YWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIEludmFsaWRhdGUgdGhlIGtleSBieSBkZWxldGluZyB0aGUgY29uY3VycmVudCByZXF1ZXN0IG1hcmtlcnMgc28gbmV3XG4gICAgICAgICAgICAgICAgLy8gcmVxdWVzdHMgd2lsbCBub3QgYmUgZGVkdXBlZC5cbiAgICAgICAgICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAocmV2YWxpZGF0b3JzICYmIHJldmFsaWRhdG9yc1swXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0b3JzWzBdKE1VVEFURV9FVkVOVCkudGhlbigoKT0+Z2V0KCkuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdldCgpLmRhdGE7XG4gICAgICAgIH07XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG5ldyBkYXRhIHByb3ZpZGVkLCByZXZhbGlkYXRlIHRoZSBrZXkgd2l0aCBjdXJyZW50IHN0YXRlLlxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGFuZCBicm9hZGNhc3Qgc3RhdGUuXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRSZXZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGEgPSBfZGF0YTtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAvLyBVcGRhdGUgZ2xvYmFsIHRpbWVzdGFtcHMuXG4gICAgICAgIGNvbnN0IGJlZm9yZU11dGF0aW9uVHMgPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgTVVUQVRJT05ba2V5XSA9IFtcbiAgICAgICAgICAgIGJlZm9yZU11dGF0aW9uVHMsXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGhhc09wdGltaXN0aWNEYXRhID0gIWlzVW5kZWZpbmVkKG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBnZXQoKTtcbiAgICAgICAgLy8gYGRpc3BsYXllZERhdGFgIGlzIHRoZSBjdXJyZW50IHZhbHVlIG9uIHNjcmVlbi4gSXQgY291bGQgYmUgdGhlIG9wdGltaXN0aWMgdmFsdWVcbiAgICAgICAgLy8gdGhhdCBpcyBnb2luZyB0byBiZSBvdmVycmlkZGVuIGJ5IGEgYGNvbW1pdHRlZERhdGFgLCBvciBnZXQgcmV2ZXJ0ZWQgYmFjay5cbiAgICAgICAgLy8gYGNvbW1pdHRlZERhdGFgIGlzIHRoZSB2YWxpZGF0ZWQgdmFsdWUgdGhhdCBjb21lcyBmcm9tIGEgZmV0Y2ggb3IgbXV0YXRpb24uXG4gICAgICAgIGNvbnN0IGRpc3BsYXllZERhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0YSA9IHN0YXRlLl9jO1xuICAgICAgICBjb25zdCBjb21taXR0ZWREYXRhID0gaXNVbmRlZmluZWQoY3VycmVudERhdGEpID8gZGlzcGxheWVkRGF0YSA6IGN1cnJlbnREYXRhO1xuICAgICAgICAvLyBEbyBvcHRpbWlzdGljIGRhdGEgdXBkYXRlLlxuICAgICAgICBpZiAoaGFzT3B0aW1pc3RpY0RhdGEpIHtcbiAgICAgICAgICAgIG9wdGltaXN0aWNEYXRhID0gaXNGdW5jdGlvbihvcHRpbWlzdGljRGF0YSkgPyBvcHRpbWlzdGljRGF0YShjb21taXR0ZWREYXRhKSA6IG9wdGltaXN0aWNEYXRhO1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBzZXQgb3B0aW1pc3RpYyBkYXRhLCBiYWNrdXAgdGhlIGN1cnJlbnQgY29tbWl0dGVkRGF0YSBkYXRhIGluIGBfY2AuXG4gICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IG9wdGltaXN0aWNEYXRhLFxuICAgICAgICAgICAgICAgIF9jOiBjb21taXR0ZWREYXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgICAgLy8gYGRhdGFgIGlzIGEgZnVuY3Rpb24sIGNhbGwgaXQgcGFzc2luZyBjdXJyZW50IGNhY2hlIHZhbHVlLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YShjb21taXR0ZWREYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0IHRocm93cyBhbiBlcnJvciBzeW5jaHJvbm91c2x5LCB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBgZGF0YWAgaXMgYSBwcm9taXNlL3RoZW5hYmxlLCByZXNvbHZlIHRoZSBmaW5hbCBkYXRhIGZpcnN0LlxuICAgICAgICBpZiAoZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEudGhlbikpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgbXV0YXRpb24gaXMgYXN5bmMsIHdlIG5lZWQgdG8gY2hlY2sgdGltZXN0YW1wcyB0b1xuICAgICAgICAgICAgLy8gYXZvaWQgcmFjZSBjb25kaXRpb25zLlxuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IGRhdGEuY2F0Y2goKGVycik9PntcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb3RoZXIgbXV0YXRpb25zIGhhdmUgb2NjdXJyZWQgc2luY2Ugd2UndmUgc3RhcnRlZCB0aGlzIG11dGF0aW9uLlxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhIHJhY2Ugd2UgZG9uJ3QgdXBkYXRlIGNhY2hlIG9yIGJyb2FkY2FzdCB0aGUgY2hhbmdlLFxuICAgICAgICAgICAgLy8ganVzdCByZXR1cm4gdGhlIGRhdGEuXG4gICAgICAgICAgICBpZiAoYmVmb3JlTXV0YXRpb25UcyAhPT0gTVVUQVRJT05ba2V5XVswXSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGhhc09wdGltaXN0aWNEYXRhICYmIHJvbGxiYWNrT25FcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAvLyBSb2xsYmFjay4gQWx3YXlzIHBvcHVsYXRlIHRoZSBjYWNoZSBpbiB0aGlzIGNhc2UgYnV0IHdpdGhvdXRcbiAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm1pbmcgdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgcG9wdWxhdGVDYWNoZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGNvbW1pdHRlZERhdGE7XG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSB0byBiZSB0aGUgbGF0ZXN0IGNvbW1pdHRlZCBkYXRhLCBhbmQgY2xlYXIgdGhlIGBfY2AgdmFsdWUuXG4gICAgICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHdlIHNob3VsZCB3cml0ZSBiYWNrIHRoZSBjYWNoZSBhZnRlciByZXF1ZXN0LlxuICAgICAgICBpZiAocG9wdWxhdGVDYWNoZSkge1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcmVzdWx0IGludG8gZGF0YS5cbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwb3B1bGF0ZUNhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gcG9wdWxhdGVDYWNoZShkYXRhLCBjb21taXR0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgY2FjaGVkIGRhdGEgaWYgdGhlcmUncyBubyBlcnJvci4gRGF0YSBjYW4gYmUgYHVuZGVmaW5lZGAgaGVyZS5cbiAgICAgICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVzZXQgdGhlIHRpbWVzdGFtcCB0byBtYXJrIHRoZSBtdXRhdGlvbiBoYXMgZW5kZWQuXG4gICAgICAgIE1VVEFUSU9OW2tleV1bMV0gPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIFNXUiBIb29rcycgaW50ZXJuYWwgc3RhdGVzOlxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBzdGFydFJldmFsaWRhdGUoKTtcbiAgICAgICAgLy8gVGhlIG11dGF0aW9uIGFuZCByZXZhbGlkYXRpb24gYXJlIGVuZGVkLCB3ZSBjYW4gY2xlYXIgaXQgc2luY2UgdGhlIGRhdGEgaXNcbiAgICAgICAgLy8gbm90IGFuIG9wdGltaXN0aWMgdmFsdWUgYW55bW9yZS5cbiAgICAgICAgc2V0KHtcbiAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRocm93IGVycm9yIG9yIHJldHVybiBkYXRhXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHRocm93T25FcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvcHVsYXRlQ2FjaGUgPyByZXMgOiBkYXRhO1xuICAgIH1cbn1cblxuY29uc3QgcmV2YWxpZGF0ZUFsbEtleXMgPSAocmV2YWxpZGF0b3JzLCB0eXBlKT0+e1xuICAgIGZvcihjb25zdCBrZXkgaW4gcmV2YWxpZGF0b3JzKXtcbiAgICAgICAgaWYgKHJldmFsaWRhdG9yc1trZXldWzBdKSByZXZhbGlkYXRvcnNba2V5XVswXSh0eXBlKTtcbiAgICB9XG59O1xuY29uc3QgaW5pdENhY2hlID0gKHByb3ZpZGVyLCBvcHRpb25zKT0+e1xuICAgIC8vIFRoZSBnbG9iYWwgc3RhdGUgZm9yIGEgc3BlY2lmaWMgcHJvdmlkZXIgd2lsbCBiZSB1c2VkIHRvIGRlZHVwbGljYXRlXG4gICAgLy8gcmVxdWVzdHMgYW5kIHN0b3JlIGxpc3RlbmVycy4gQXMgd2VsbCBhcyBhIG11dGF0ZSBmdW5jdGlvbiB0aGF0IGlzIGJvdW5kIHRvXG4gICAgLy8gdGhlIGNhY2hlLlxuICAgIC8vIFRoZSBwcm92aWRlcidzIGdsb2JhbCBzdGF0ZSBtaWdodCBiZSBhbHJlYWR5IGluaXRpYWxpemVkLiBMZXQncyB0cnkgdG8gZ2V0IHRoZVxuICAgIC8vIGdsb2JhbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVyIGZpcnN0LlxuICAgIGlmICghU1dSR2xvYmFsU3RhdGUuaGFzKHByb3ZpZGVyKSkge1xuICAgICAgICBjb25zdCBvcHRzID0gbWVyZ2VPYmplY3RzKGRlZmF1bHRDb25maWdPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBnbG9iYWwgc3RhdGUgYm91bmQgdG8gdGhlIHByb3ZpZGVyLCBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlXG4gICAgICAgIC8vIG5ldyBtdXRhdGUgZnVuY3Rpb24uXG4gICAgICAgIGNvbnN0IEVWRU5UX1JFVkFMSURBVE9SUyA9IHt9O1xuICAgICAgICBjb25zdCBtdXRhdGUgPSBpbnRlcm5hbE11dGF0ZS5iaW5kKFVOREVGSU5FRCwgcHJvdmlkZXIpO1xuICAgICAgICBsZXQgdW5tb3VudCA9IG5vb3A7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlID0gKGtleSwgY2FsbGJhY2spPT57XG4gICAgICAgICAgICBjb25zdCBzdWJzID0gc3Vic2NyaXB0aW9uc1trZXldIHx8IFtdO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uc1trZXldID0gc3VicztcbiAgICAgICAgICAgIHN1YnMucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICByZXR1cm4gKCk9PnN1YnMuc3BsaWNlKHN1YnMuaW5kZXhPZihjYWxsYmFjayksIDEpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXR0ZXIgPSAoa2V5LCB2YWx1ZSwgcHJldik9PntcbiAgICAgICAgICAgIHByb3ZpZGVyLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YnMgPSBzdWJzY3JpcHRpb25zW2tleV07XG4gICAgICAgICAgICBpZiAoc3Vicykge1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IHN1YnMubGVuZ3RoOyBpLS07KXtcbiAgICAgICAgICAgICAgICAgICAgc3Vic1tpXSh2YWx1ZSwgcHJldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbml0UHJvdmlkZXIgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGF0ZSBpZiBpdCdzIG5ldywgb3IgaWYgdGhlIHByb3ZpZGVyIGhhcyBiZWVuIGV4dGVuZGVkLlxuICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLnNldChwcm92aWRlciwgW1xuICAgICAgICAgICAgICAgICAgICBFVkVOVF9SRVZBTElEQVRPUlMsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVyLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlTX1NFUlZFUikge1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGxpc3RlbmluZyB0byB0aGUgbmF0aXZlIGV2ZW50cyBmb3IgYXV0byByZXZhbGlkYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IHB1dCBhIGRlbGF5IChzZXRUaW1lb3V0KSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZVxuICAgICAgICAgICAgICAgICAgICAvLyBmaXJlZCBhZnRlciBpbW1lZGlhdGUgSmF2YVNjcmlwdCBleGVjdXRpb25zLCB3aGljaCBjYW4gYmVcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVhY3QncyBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGF2b2lkcyBzb21lIHVubmVjZXNzYXJ5IHJldmFsaWRhdGlvbnMgc3VjaCBhc1xuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTY4MC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZUZvY3VzID0gb3B0cy5pbml0Rm9jdXMoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgRk9DVVNfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VSZWNvbm5lY3QgPSBvcHRzLmluaXRSZWNvbm5lY3Qoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgUkVDT05ORUNUX0VWRU5UKSkpO1xuICAgICAgICAgICAgICAgICAgICB1bm1vdW50ID0gKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VGb2N1cyAmJiByZWxlYXNlRm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VSZWNvbm5lY3QgJiYgcmVsZWFzZVJlY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB1bi1tb3VudGluZywgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNhY2hlIHByb3ZpZGVyIGZyb20gdGhlIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yYWdlIHRvbyBiZWNhdXNlIGl0J3MgYSBzaWRlLWVmZmVjdC4gT3RoZXJ3aXNlLCB3aGVuIHJlLW1vdW50aW5nIHdlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCByZS1yZWdpc3RlciB0aG9zZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBTV1JHbG9iYWxTdGF0ZS5kZWxldGUocHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaW5pdFByb3ZpZGVyKCk7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvdmlkZXIsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdCBhbmQgc2V0dXAgRE9NIGV2ZW50c1xuICAgICAgICAvLyBsaXN0ZW5lcnMgZm9yIGBmb2N1c2AgYW5kIGByZWNvbm5lY3RgIGFjdGlvbnMuXG4gICAgICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gaW5qZWN0IGFuIGV4dHJhIGxheWVyIG9uIHRvcCBvZiBgcHJvdmlkZXJgIGluIHRoZSBmdXR1cmUsXG4gICAgICAgIC8vIHN1Y2ggYXMga2V5IHNlcmlhbGl6YXRpb24sIGF1dG8gR0MsIGV0Yy5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQncyBqdXN0IGEgYE1hcGAgaW50ZXJmYWNlIHdpdGhvdXQgYW55IG1vZGlmaWNhdGlvbnMuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgIGluaXRQcm92aWRlcixcbiAgICAgICAgICAgIHVubW91bnRcbiAgICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgIFNXUkdsb2JhbFN0YXRlLmdldChwcm92aWRlcilbNF1cbiAgICBdO1xufTtcblxuLy8gZXJyb3IgcmV0cnlcbmNvbnN0IG9uRXJyb3JSZXRyeSA9IChfLCBfXywgY29uZmlnLCByZXZhbGlkYXRlLCBvcHRzKT0+e1xuICAgIGNvbnN0IG1heFJldHJ5Q291bnQgPSBjb25maWcuZXJyb3JSZXRyeUNvdW50O1xuICAgIGNvbnN0IGN1cnJlbnRSZXRyeUNvdW50ID0gb3B0cy5yZXRyeUNvdW50O1xuICAgIC8vIEV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICBjb25zdCB0aW1lb3V0ID0gfn4oKE1hdGgucmFuZG9tKCkgKyAwLjUpICogKDEgPDwgKGN1cnJlbnRSZXRyeUNvdW50IDwgOCA/IGN1cnJlbnRSZXRyeUNvdW50IDogOCkpKSAqIGNvbmZpZy5lcnJvclJldHJ5SW50ZXJ2YWw7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtYXhSZXRyeUNvdW50KSAmJiBjdXJyZW50UmV0cnlDb3VudCA+IG1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJldmFsaWRhdGUsIHRpbWVvdXQsIG9wdHMpO1xufTtcbmNvbnN0IGNvbXBhcmUgPSAoY3VycmVudERhdGEsIG5ld0RhdGEpPT5zdGFibGVIYXNoKGN1cnJlbnREYXRhKSA9PSBzdGFibGVIYXNoKG5ld0RhdGEpO1xuLy8gRGVmYXVsdCBjYWNoZSBwcm92aWRlclxuY29uc3QgW2NhY2hlLCBtdXRhdGVdID0gaW5pdENhY2hlKG5ldyBNYXAoKSk7XG4vLyBEZWZhdWx0IGNvbmZpZ1xuY29uc3QgZGVmYXVsdENvbmZpZyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgLy8gZXZlbnRzXG4gICAgb25Mb2FkaW5nU2xvdzogbm9vcCxcbiAgICBvblN1Y2Nlc3M6IG5vb3AsXG4gICAgb25FcnJvcjogbm9vcCxcbiAgICBvbkVycm9yUmV0cnksXG4gICAgb25EaXNjYXJkZWQ6IG5vb3AsXG4gICAgLy8gc3dpdGNoZXNcbiAgICByZXZhbGlkYXRlT25Gb2N1czogdHJ1ZSxcbiAgICByZXZhbGlkYXRlT25SZWNvbm5lY3Q6IHRydWUsXG4gICAgcmV2YWxpZGF0ZUlmU3RhbGU6IHRydWUsXG4gICAgc2hvdWxkUmV0cnlPbkVycm9yOiB0cnVlLFxuICAgIC8vIHRpbWVvdXRzXG4gICAgZXJyb3JSZXRyeUludGVydmFsOiBzbG93Q29ubmVjdGlvbiA/IDEwMDAwIDogNTAwMCxcbiAgICBmb2N1c1Rocm90dGxlSW50ZXJ2YWw6IDUgKiAxMDAwLFxuICAgIGRlZHVwaW5nSW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgIGxvYWRpbmdUaW1lb3V0OiBzbG93Q29ubmVjdGlvbiA/IDUwMDAgOiAzMDAwLFxuICAgIC8vIHByb3ZpZGVyc1xuICAgIGNvbXBhcmUsXG4gICAgaXNQYXVzZWQ6ICgpPT5mYWxzZSxcbiAgICBjYWNoZSxcbiAgICBtdXRhdGUsXG4gICAgZmFsbGJhY2s6IHt9XG59LCAvLyB1c2Ugd2ViIHByZXNldCBieSBkZWZhdWx0XG5wcmVzZXQpO1xuXG5jb25zdCBtZXJnZUNvbmZpZ3MgPSAoYSwgYik9PntcbiAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGhlcmUuXG4gICAgY29uc3QgdiA9IG1lcmdlT2JqZWN0cyhhLCBiKTtcbiAgICAvLyBJZiB0d28gY29uZmlncyBhcmUgcHJvdmlkZWQsIG1lcmdlIHRoZWlyIGB1c2VgIGFuZCBgZmFsbGJhY2tgIG9wdGlvbnMuXG4gICAgaWYgKGIpIHtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUxICwgZmFsbGJhY2s6IGYxICB9ID0gYTtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUyICwgZmFsbGJhY2s6IGYyICB9ID0gYjtcbiAgICAgICAgaWYgKHUxICYmIHUyKSB7XG4gICAgICAgICAgICB2LnVzZSA9IHUxLmNvbmNhdCh1Mik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYxICYmIGYyKSB7XG4gICAgICAgICAgICB2LmZhbGxiYWNrID0gbWVyZ2VPYmplY3RzKGYxLCBmMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG5jb25zdCBTV1JDb25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5jb25zdCBTV1JDb25maWcgPSAocHJvcHMpPT57XG4gICAgY29uc3QgeyB2YWx1ZSAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBhcmVudENvbmZpZyA9IHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCk7XG4gICAgY29uc3QgaXNGdW5jdGlvbmFsQ29uZmlnID0gaXNGdW5jdGlvbih2YWx1ZSk7XG4gICAgY29uc3QgY29uZmlnID0gdXNlTWVtbygoKT0+aXNGdW5jdGlvbmFsQ29uZmlnID8gdmFsdWUocGFyZW50Q29uZmlnKSA6IHZhbHVlLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICB2YWx1ZVxuICAgIF0pO1xuICAgIC8vIEV4dGVuZCBwYXJlbnQgY29udGV4dCB2YWx1ZXMgYW5kIG1pZGRsZXdhcmUuXG4gICAgY29uc3QgZXh0ZW5kZWRDb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyBjb25maWcgOiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICBjb25maWdcbiAgICBdKTtcbiAgICAvLyBTaG91bGQgbm90IHVzZSB0aGUgaW5oZXJpdGVkIHByb3ZpZGVyLlxuICAgIGNvbnN0IHByb3ZpZGVyID0gY29uZmlnICYmIGNvbmZpZy5wcm92aWRlcjtcbiAgICAvLyBVc2UgYSBsYXp5IGluaXRpYWxpemVkIHN0YXRlIHRvIGNyZWF0ZSB0aGUgY2FjaGUgb24gZmlyc3QgYWNjZXNzLlxuICAgIGNvbnN0IFtjYWNoZUNvbnRleHRdID0gdXNlU3RhdGUoKCk9PnByb3ZpZGVyID8gaW5pdENhY2hlKHByb3ZpZGVyKGV4dGVuZGVkQ29uZmlnLmNhY2hlIHx8IGNhY2hlKSwgY29uZmlnKSA6IFVOREVGSU5FRCk7XG4gICAgLy8gT3ZlcnJpZGUgdGhlIGNhY2hlIGlmIGEgbmV3IHByb3ZpZGVyIGlzIGdpdmVuLlxuICAgIGlmIChjYWNoZUNvbnRleHQpIHtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcuY2FjaGUgPSBjYWNoZUNvbnRleHRbMF07XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLm11dGF0ZSA9IGNhY2hlQ29udGV4dFsxXTtcbiAgICB9XG4gICAgLy8gVW5zdWJzY3JpYmUgZXZlbnRzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICAgICAgY2FjaGVDb250ZXh0WzJdICYmIGNhY2hlQ29udGV4dFsyXSgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlQ29udGV4dFszXTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChTV1JDb25maWdDb250ZXh0LlByb3ZpZGVyLCBtZXJnZU9iamVjdHMocHJvcHMsIHtcbiAgICAgICAgdmFsdWU6IGV4dGVuZGVkQ29uZmlnXG4gICAgfSkpO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvclxuY29uc3QgZW5hYmxlRGV2dG9vbHMgPSBpc1dpbmRvd0RlZmluZWQgJiYgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1VTRV9fO1xuY29uc3QgdXNlID0gZW5hYmxlRGV2dG9vbHMgPyB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX18gOiBbXTtcbmNvbnN0IHNldHVwRGV2VG9vbHMgPSAoKT0+e1xuICAgIGlmIChlbmFibGVEZXZ0b29scykge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHdpbmRvdy5fX1NXUl9ERVZUT09MU19SRUFDVF9fID0gUmVhY3Q7XG4gICAgfVxufTtcblxuY29uc3Qgbm9ybWFsaXplID0gKGFyZ3MpPT57XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oYXJnc1sxXSkgPyBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIGFyZ3NbMV0sXG4gICAgICAgIGFyZ3NbMl0gfHwge31cbiAgICBdIDogW1xuICAgICAgICBhcmdzWzBdLFxuICAgICAgICBudWxsLFxuICAgICAgICAoYXJnc1sxXSA9PT0gbnVsbCA/IGFyZ3NbMl0gOiBhcmdzWzFdKSB8fCB7fVxuICAgIF07XG59O1xuXG5jb25zdCB1c2VTV1JDb25maWcgPSAoKT0+e1xuICAgIHJldHVybiBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZywgdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KSk7XG59O1xuXG5jb25zdCBwcmVsb2FkID0gKGtleV8sIGZldGNoZXIpPT57XG4gICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gUHJldmVudCBwcmVsb2FkIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdXNlZC5cbiAgICBpZiAoUFJFTE9BRFtrZXldKSByZXR1cm4gUFJFTE9BRFtrZXldO1xuICAgIGNvbnN0IHJlcSA9IGZldGNoZXIoa2V5Xyk7XG4gICAgUFJFTE9BRFtrZXldID0gcmVxO1xuICAgIHJldHVybiByZXE7XG59O1xuY29uc3QgbWlkZGxld2FyZSA9ICh1c2VTV1JOZXh0KT0+KGtleV8sIGZldGNoZXJfLCBjb25maWcpPT57XG4gICAgICAgIC8vIGZldGNoZXIgbWlnaHQgYmUgYSBzeW5jIGZ1bmN0aW9uLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICAgICAgY29uc3QgZmV0Y2hlciA9IGZldGNoZXJfICYmICgoLi4uYXJncyk9PntcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlcmlhbGl6ZShrZXlfKVswXTtcbiAgICAgICAgICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBQUkVMT0FEW2tleV07XG4gICAgICAgICAgICBpZiAocmVxKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZldGNoZXJfKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUk5leHQoa2V5XywgZmV0Y2hlciwgY29uZmlnKTtcbiAgICB9O1xuXG5jb25zdCBCVUlMVF9JTl9NSURETEVXQVJFID0gdXNlLmNvbmNhdChtaWRkbGV3YXJlKTtcblxuLy8gSXQncyB0cmlja3kgdG8gcGFzcyBnZW5lcmljIHR5cGVzIGFzIHBhcmFtZXRlcnMsIHNvIHdlIGp1c3QgZGlyZWN0bHkgb3ZlcnJpZGVcbi8vIHRoZSB0eXBlcyBoZXJlLlxuY29uc3Qgd2l0aEFyZ3MgPSAoaG9vayk9PntcbiAgICByZXR1cm4gZnVuY3Rpb24gdXNlU1dSQXJncyguLi5hcmdzKSB7XG4gICAgICAgIC8vIEdldCB0aGUgZGVmYXVsdCBhbmQgaW5oZXJpdGVkIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBhcmd1bWVudHMuXG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBfY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgLy8gTWVyZ2UgY29uZmlndXJhdGlvbnMuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IG1lcmdlQ29uZmlncyhmYWxsYmFja0NvbmZpZywgX2NvbmZpZyk7XG4gICAgICAgIC8vIEFwcGx5IG1pZGRsZXdhcmVcbiAgICAgICAgbGV0IG5leHQgPSBob29rO1xuICAgICAgICBjb25zdCB7IHVzZSAgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZSA9ICh1c2UgfHwgW10pLmNvbmNhdChCVUlMVF9JTl9NSURETEVXQVJFKTtcbiAgICAgICAgZm9yKGxldCBpID0gbWlkZGxld2FyZS5sZW5ndGg7IGktLTspe1xuICAgICAgICAgICAgbmV4dCA9IG1pZGRsZXdhcmVbaV0obmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQoa2V5LCBmbiB8fCBjb25maWcuZmV0Y2hlciB8fCBudWxsLCBjb25maWcpO1xuICAgIH07XG59O1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHdpdGggZGVwZW5kZW5jeS10cmFja2luZy5cbiAqLyBjb25zdCB1c2VTdGF0ZVdpdGhEZXBzID0gKHN0YXRlKT0+e1xuICAgIGNvbnN0IHJlcmVuZGVyID0gdXNlU3RhdGUoe30pWzFdO1xuICAgIGNvbnN0IHVubW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qgc3RhdGVSZWYgPSB1c2VSZWYoc3RhdGUpO1xuICAgIC8vIElmIGEgc3RhdGUgcHJvcGVydHkgKGRhdGEsIGVycm9yLCBvciBpc1ZhbGlkYXRpbmcpIGlzIGFjY2Vzc2VkIGJ5IHRoZSByZW5kZXJcbiAgICAvLyBmdW5jdGlvbiwgd2UgbWFyayB0aGUgcHJvcGVydHkgYXMgYSBkZXBlbmRlbmN5IHNvIGlmIGl0IGlzIHVwZGF0ZWQgYWdhaW5cbiAgICAvLyBpbiB0aGUgZnV0dXJlLCB3ZSB0cmlnZ2VyIGEgcmVyZW5kZXIuXG4gICAgLy8gVGhpcyBpcyBhbHNvIGtub3duIGFzIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gICAgY29uc3Qgc3RhdGVEZXBlbmRlbmNpZXNSZWYgPSB1c2VSZWYoe1xuICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgfSk7XG4gICAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRvIGNoYW5nZSBzdGF0ZVJlZiwgcGFzcyB0aGUgdmFsdWVzIGV4cGxpY2l0bHkgdG8gc2V0U3RhdGU6XG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogbmV3RGF0YSAvLyBzZXQgZGF0YSB0byBuZXdEYXRhXG4gICAqICAgZXJyb3I6IHVuZGVmaW5lZCAvLyBzZXQgZXJyb3IgdG8gdW5kZWZpbmVkXG4gICAqIH0pXG4gICAqXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogdW5kZWZpbmVkIC8vIHNldCBkYXRhIHRvIHVuZGVmaW5lZFxuICAgKiAgIGVycm9yOiBlcnIgLy8gc2V0IGVycm9yIHRvIGVyclxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovIGNvbnN0IHNldFN0YXRlID0gdXNlQ2FsbGJhY2soKHBheWxvYWQpPT57XG4gICAgICAgIGxldCBzaG91bGRSZXJlbmRlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBzdGF0ZVJlZi5jdXJyZW50O1xuICAgICAgICBmb3IoY29uc3QgXyBpbiBwYXlsb2FkKXtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBfO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBtYXJrIHJlcmVuZGVyIGFzXG4gICAgICAgICAgICAvLyBuZWVkZWQuXG4gICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlW2tdICE9PSBwYXlsb2FkW2tdKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlW2tdID0gcGF5bG9hZFtrXTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYWNjZXNzZWQgYnkgdGhlIGNvbXBvbmVudCwgYSByZXJlbmRlciBzaG91bGQgYmVcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVyZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkUmVyZW5kZXIgJiYgIXVubW91bnRlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmVyZW5kZXIoe30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBSZWFjdC5zdGFydFRyYW5zaXRpb24oKCk9PnJlcmVuZGVyKHt9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCAvLyBjb25maWcuc3VzcGVuc2UgaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlY3ljbGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3RhdGVSZWYsXG4gICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnQsXG4gICAgICAgIHNldFN0YXRlXG4gICAgXTtcbn07XG5cbi8vIEFkZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgbGlzdCBvZiBrZXllZCBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHJldHVyblxuLy8gdGhlIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLlxuY29uc3Qgc3Vic2NyaWJlQ2FsbGJhY2sgPSAoa2V5LCBjYWxsYmFja3MsIGNhbGxiYWNrKT0+e1xuICAgIGNvbnN0IGtleWVkUmV2YWxpZGF0b3JzID0gY2FsbGJhY2tzW2tleV0gfHwgKGNhbGxiYWNrc1trZXldID0gW10pO1xuICAgIGtleWVkUmV2YWxpZGF0b3JzLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBjb25zdCBpbmRleCA9IGtleWVkUmV2YWxpZGF0b3JzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gTygxKTogZmFzdGVyIHRoYW4gc3BsaWNlXG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9yc1tpbmRleF0gPSBrZXllZFJldmFsaWRhdG9yc1trZXllZFJldmFsaWRhdG9ycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbi8vIENyZWF0ZSBhIGN1c3RvbSBob29rIHdpdGggYSBtaWRkbGV3YXJlXG5jb25zdCB3aXRoTWlkZGxld2FyZSA9ICh1c2VTV1IsIG1pZGRsZXdhcmUpPT57XG4gICAgcmV0dXJuICguLi5hcmdzKT0+e1xuICAgICAgICBjb25zdCBba2V5LCBmbiwgY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgY29uc3QgdXNlcyA9IChjb25maWcudXNlIHx8IFtdKS5jb25jYXQobWlkZGxld2FyZSk7XG4gICAgICAgIHJldHVybiB1c2VTV1Ioa2V5LCBmbiwge1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgdXNlOiB1c2VzXG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuXG5zZXR1cERldlRvb2xzKCk7XG5cbmV4cG9ydCB7IElTX1JFQUNUX0xFR0FDWSwgSVNfU0VSVkVSLCBPQkpFQ1QsIFNXUkNvbmZpZywgU1dSR2xvYmFsU3RhdGUsIFVOREVGSU5FRCwgY2FjaGUsIGNvbXBhcmUsIGNyZWF0ZUNhY2hlSGVscGVyLCBkZWZhdWx0Q29uZmlnLCBkZWZhdWx0Q29uZmlnT3B0aW9ucywgZ2V0VGltZXN0YW1wLCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGluaXRDYWNoZSwgaW50ZXJuYWxNdXRhdGUsIGlzRG9jdW1lbnREZWZpbmVkLCBpc0Z1bmN0aW9uLCBpc1VuZGVmaW5lZCwgaXNXaW5kb3dEZWZpbmVkLCBtZXJnZUNvbmZpZ3MsIG1lcmdlT2JqZWN0cywgbXV0YXRlLCBub29wLCBub3JtYWxpemUsIHByZWxvYWQsIHByZXNldCwgckFGLCBjb25zdGFudHMgYXMgcmV2YWxpZGF0ZUV2ZW50cywgc2VyaWFsaXplLCBzbG93Q29ubmVjdGlvbiwgc3RhYmxlSGFzaCwgc3Vic2NyaWJlQ2FsbGJhY2ssIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHVzZVNXUkNvbmZpZywgdXNlU3RhdGVXaXRoRGVwcywgd2l0aEFyZ3MsIHdpdGhNaWRkbGV3YXJlIH07XG4iLCJpbXBvcnQgeyB1c2VSZWYsIHVzZU1lbW8sIHVzZUNhbGxiYWNrLCB1c2VEZWJ1Z1ZhbHVlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzJztcbmltcG9ydCB7IE9CSkVDVCwgU1dSQ29uZmlnIGFzIFNXUkNvbmZpZyQxLCBkZWZhdWx0Q29uZmlnLCB3aXRoQXJncywgU1dSR2xvYmFsU3RhdGUsIHNlcmlhbGl6ZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGlzVW5kZWZpbmVkLCBnZXRUaW1lc3RhbXAsIFVOREVGSU5FRCwgaXNGdW5jdGlvbiwgaW50ZXJuYWxNdXRhdGUsIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHN1YnNjcmliZUNhbGxiYWNrLCBJU19TRVJWRVIsIHJBRiwgSVNfUkVBQ1RfTEVHQUNZLCBtZXJnZU9iamVjdHMsIHJldmFsaWRhdGVFdmVudHMgfSBmcm9tICdzd3IvX2ludGVybmFsJztcbmV4cG9ydCB7IG11dGF0ZSwgcHJlbG9hZCwgdXNlU1dSQ29uZmlnIH0gZnJvbSAnc3dyL19pbnRlcm5hbCc7XG5cbmNvbnN0IFdJVEhfREVEVVBFID0ge1xuICAgIGRlZHVwZTogdHJ1ZVxufTtcbmNvbnN0IHVzZVNXUkhhbmRsZXIgPSAoX2tleSwgZmV0Y2hlciwgY29uZmlnKT0+e1xuICAgIGNvbnN0IHsgY2FjaGUgLCBjb21wYXJlICwgc3VzcGVuc2UgLCBmYWxsYmFja0RhdGEgLCByZXZhbGlkYXRlT25Nb3VudCAsIHJldmFsaWRhdGVJZlN0YWxlICwgcmVmcmVzaEludGVydmFsICwgcmVmcmVzaFdoZW5IaWRkZW4gLCByZWZyZXNoV2hlbk9mZmxpbmUgLCBrZWVwUHJldmlvdXNEYXRhICB9ID0gY29uZmlnO1xuICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIC8vIGBrZXlgIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBTV1IgYGRhdGFgIHN0YXRlLCBga2V5SW5mb2AgaG9sZHMgZXh0cmFcbiAgICAvLyBzdGF0ZXMgc3VjaCBhcyBgZXJyb3JgIGFuZCBgaXNWYWxpZGF0aW5nYCBpbnNpZGUsXG4gICAgLy8gYWxsIG9mIHRoZW0gYXJlIGRlcml2ZWQgZnJvbSBgX2tleWAuXG4gICAgLy8gYGZuQXJnYCBpcyB0aGUgYXJndW1lbnQvYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBrZXksIHdoaWNoIHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdG8gdGhlIGZldGNoZXIuXG4gICAgY29uc3QgW2tleSwgZm5BcmddID0gc2VyaWFsaXplKF9rZXkpO1xuICAgIC8vIElmIGl0J3MgdGhlIGluaXRpYWwgcmVuZGVyIG9mIHRoaXMgaG9vay5cbiAgICBjb25zdCBpbml0aWFsTW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gSWYgdGhlIGhvb2sgaXMgdW5tb3VudGVkIGFscmVhZHkuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByZXZlbnQgc29tZSBlZmZlY3RzXG4gICAgLy8gdG8gYmUgY2FsbGVkIGFmdGVyIHVubW91bnRpbmcuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBSZWZzIHRvIGtlZXAgdGhlIGtleSBhbmQgY29uZmlnLlxuICAgIGNvbnN0IGtleVJlZiA9IHVzZVJlZihrZXkpO1xuICAgIGNvbnN0IGZldGNoZXJSZWYgPSB1c2VSZWYoZmV0Y2hlcik7XG4gICAgY29uc3QgY29uZmlnUmVmID0gdXNlUmVmKGNvbmZpZyk7XG4gICAgY29uc3QgZ2V0Q29uZmlnID0gKCk9PmNvbmZpZ1JlZi5jdXJyZW50O1xuICAgIGNvbnN0IGlzQWN0aXZlID0gKCk9PmdldENvbmZpZygpLmlzVmlzaWJsZSgpICYmIGdldENvbmZpZygpLmlzT25saW5lKCk7XG4gICAgY29uc3QgW2dldENhY2hlLCBzZXRDYWNoZSwgc3Vic2NyaWJlQ2FjaGUsIGdldEluaXRpYWxDYWNoZV0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llcyA9IHVzZVJlZih7fSkuY3VycmVudDtcbiAgICBjb25zdCBmYWxsYmFjayA9IGlzVW5kZWZpbmVkKGZhbGxiYWNrRGF0YSkgPyBjb25maWcuZmFsbGJhY2tba2V5XSA6IGZhbGxiYWNrRGF0YTtcbiAgICBjb25zdCBpc0VxdWFsID0gKHByZXYsIGN1cnJlbnQpPT57XG4gICAgICAgIGxldCBlcXVhbCA9IHRydWU7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHN0YXRlRGVwZW5kZW5jaWVzKXtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBfO1xuICAgICAgICAgICAgaWYgKHQgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCBwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJldlt0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCByZXR1cm5lZERhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50W3RdICE9PSBwcmV2W3RdKSB7XG4gICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcXVhbDtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNuYXBzaG90ID0gdXNlTWVtbygoKT0+e1xuICAgICAgICBjb25zdCBzaG91bGRTdGFydFJlcXVlc3QgPSAoKCk9PntcbiAgICAgICAgICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWZldGNoZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIGByZXZhbGlkYXRlT25Nb3VudGAgaXMgc2V0LCB3ZSB0YWtlIHRoZSB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVJZlN0YWxlKSkgcmV0dXJuIHJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIC8vIEdldCB0aGUgY2FjaGUgYW5kIG1lcmdlIGl0IHdpdGggZXhwZWN0ZWQgc3RhdGVzLlxuICAgICAgICBjb25zdCBnZXRTZWxlY3RlZENhY2hlID0gKHN0YXRlKT0+e1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzZWxlY3QgdGhlIG5lZWRlZCBmaWVsZHMgZnJvbSB0aGUgc3RhdGUuXG4gICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IG1lcmdlT2JqZWN0cyhzdGF0ZSk7XG4gICAgICAgICAgICBkZWxldGUgc25hcHNob3QuX2s7XG4gICAgICAgICAgICBpZiAoIXNob3VsZFN0YXJ0UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5zbmFwc2hvdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVG8gbWFrZSBzdXJlIHRoYXQgd2UgYXJlIHJldHVybmluZyB0aGUgc2FtZSBvYmplY3QgcmVmZXJlbmNlIHRvIGF2b2lkXG4gICAgICAgIC8vIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMsIHdlIGtlZXAgdGhlIHByZXZpb3VzIHNuYXBzaG90IGFuZCB1c2UgZGVlcFxuICAgICAgICAvLyBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmV0dXJuIGEgbmV3IG9uZS5cbiAgICAgICAgbGV0IG1lbW9yaXplZFNuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShnZXRDYWNoZSgpKTtcbiAgICAgICAgY29uc3QgbWVtb3JpemVkSW5pdGlhbFNuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShnZXRJbml0aWFsQ2FjaGUoKSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAoKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShnZXRDYWNoZSgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNFcXVhbChuZXdTbmFwc2hvdCwgbWVtb3JpemVkU25hcHNob3QpID8gbWVtb3JpemVkU25hcHNob3QgOiBtZW1vcml6ZWRTbmFwc2hvdCA9IG5ld1NuYXBzaG90O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpPT5tZW1vcml6ZWRJbml0aWFsU25hcHNob3RcbiAgICAgICAgXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgU1dSIHNob3VsZCByZXR1cm4uXG4gICAgY29uc3QgY2FjaGVkID0gdXNlU3luY0V4dGVybmFsU3RvcmUodXNlQ2FsbGJhY2soKGNhbGxiYWNrKT0+c3Vic2NyaWJlQ2FjaGUoa2V5LCAoY3VycmVudCwgcHJldik9PntcbiAgICAgICAgICAgIGlmICghaXNFcXVhbChwcmV2LCBjdXJyZW50KSkgY2FsbGJhY2soKTtcbiAgICAgICAgfSksIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKSwgZ2V0U25hcHNob3RbMF0sIGdldFNuYXBzaG90WzFdKTtcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9ICFpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGhhc1JldmFsaWRhdG9yID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV0gJiYgRVZFTlRfUkVWQUxJREFUT1JTW2tleV0ubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gY2FjaGVkLmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGlzVW5kZWZpbmVkKGNhY2hlZERhdGEpID8gZmFsbGJhY2sgOiBjYWNoZWREYXRhO1xuICAgIGNvbnN0IGVycm9yID0gY2FjaGVkLmVycm9yO1xuICAgIC8vIFVzZSBhIHJlZiB0byBzdG9yZSBwcmV2aW91c2x5IHJldHVybmVkIGRhdGEuIFVzZSB0aGUgaW5pdGlhbCBkYXRhIGFzIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgIGNvbnN0IGxhZ2d5RGF0YVJlZiA9IHVzZVJlZihkYXRhKTtcbiAgICBjb25zdCByZXR1cm5lZERhdGEgPSBrZWVwUHJldmlvdXNEYXRhID8gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBsYWdneURhdGFSZWYuY3VycmVudCA6IGNhY2hlZERhdGEgOiBkYXRhO1xuICAgIC8vIC0gU3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUncyBzdGFsZSBkYXRhIGZvciB0aGUgaW5pdGlhbCByZW5kZXIuXG4gICAgLy8gLSBOb3Qgc3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUgaXMgbm8gZmFsbGJhY2sgZGF0YSBhbmQgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkLlxuICAgIC8vIC0gYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkIGJ1dCBgZGF0YWAgaXMgbm90IGRlZmluZWQuXG4gICAgY29uc3Qgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uID0gKCgpPT57XG4gICAgICAgIC8vIGlmIGEga2V5IGFscmVhZHkgaGFzIHJldmFsaWRhdG9ycyBhbmQgYWxzbyBoYXMgZXJyb3IsIHdlIHNob3VsZCBub3QgdHJpZ2dlciByZXZhbGlkYXRpb25cbiAgICAgICAgaWYgKGhhc1JldmFsaWRhdG9yICYmICFpc1VuZGVmaW5lZChlcnJvcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnQgJiYgIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSkgcmV0dXJuIHJldmFsaWRhdGVPbk1vdW50O1xuICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIFVuZGVyIHN1c3BlbnNlIG1vZGUsIGl0IHdpbGwgYWx3YXlzIGZldGNoIG9uIHJlbmRlciBpZiB0aGVyZSBpcyBub1xuICAgICAgICAvLyBzdGFsZSBkYXRhIHNvIG5vIG5lZWQgdG8gcmV2YWxpZGF0ZSBpbW1lZGlhdGVseSBtb3VudCBpdCBhZ2Fpbi5cbiAgICAgICAgLy8gSWYgZGF0YSBleGlzdHMsIG9ubHkgcmV2YWxpZGF0ZSBpZiBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIHRydWUuXG4gICAgICAgIGlmIChzdXNwZW5zZSkgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpID8gZmFsc2UgOiByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3RhbGUgZGF0YSwgd2UgbmVlZCB0byByZXZhbGlkYXRlIHdoZW4gbW91bnQ7XG4gICAgICAgIC8vIElmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgc2V0IHRvIHRydWUsIHdlIHdpbGwgYWx3YXlzIHJldmFsaWRhdGUuXG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChkYXRhKSB8fCByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9KSgpO1xuICAgIC8vIFJlc29sdmUgdGhlIGRlZmF1bHQgdmFsaWRhdGluZyBzdGF0ZTpcbiAgICAvLyBJZiBpdCdzIGFibGUgdG8gdmFsaWRhdGUsIGFuZCBpdCBzaG91bGQgcmV2YWxpZGF0ZSB3aGVuIG1vdW50LCB0aGlzIHdpbGwgYmUgdHJ1ZS5cbiAgICBjb25zdCBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlID0gISEoa2V5ICYmIGZldGNoZXIgJiYgaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKTtcbiAgICBjb25zdCBpc1ZhbGlkYXRpbmcgPSBpc1VuZGVmaW5lZChjYWNoZWQuaXNWYWxpZGF0aW5nKSA/IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgOiBjYWNoZWQuaXNWYWxpZGF0aW5nO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc0xvYWRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc0xvYWRpbmc7XG4gICAgLy8gVGhlIHJldmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBhIGNhcmVmdWxseSBjcmFmdGVkIHdyYXBwZXIgb2YgdGhlIG9yaWdpbmFsXG4gICAgLy8gYGZldGNoZXJgLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBtYW55IGVkZ2UgY2FzZXMuXG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChyZXZhbGlkYXRlT3B0cyk9PntcbiAgICAgICAgY29uc3QgY3VycmVudEZldGNoZXIgPSBmZXRjaGVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICgha2V5IHx8ICFjdXJyZW50RmV0Y2hlciB8fCB1bm1vdW50ZWRSZWYuY3VycmVudCB8fCBnZXRDb25maWcoKS5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0RhdGE7XG4gICAgICAgIGxldCBzdGFydEF0O1xuICAgICAgICBsZXQgbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IG9wdHMgPSByZXZhbGlkYXRlT3B0cyB8fCB7fTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gb25nb2luZyBjb25jdXJyZW50IHJlcXVlc3QsIG9yIGBkZWR1cGVgIGlzIG5vdCBzZXQsIGFcbiAgICAgICAgLy8gbmV3IHJlcXVlc3Qgc2hvdWxkIGJlIGluaXRpYXRlZC5cbiAgICAgICAgY29uc3Qgc2hvdWxkU3RhcnROZXdSZXF1ZXN0ID0gIUZFVENIW2tleV0gfHwgIW9wdHMuZGVkdXBlO1xuICAgICAgICAvKlxuICAgICAgICAgRm9yIFJlYWN0IDE3XG4gICAgICAgICBEbyB1bm1vdW50IGNoZWNrIGZvciBjYWxsczpcbiAgICAgICAgIElmIGtleSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIHJldmFsaWRhdGlvbiwgb3IgdGhlIGNvbXBvbmVudCBoYXMgYmVlblxuICAgICAgICAgdW5tb3VudGVkLCBvbGQgZGlzcGF0Y2ggYW5kIG9sZCBldmVudCBjYWxsYmFja3Mgc2hvdWxkIG5vdCB0YWtlIGFueVxuICAgICAgICAgZWZmZWN0XG5cbiAgICAgICAgRm9yIFJlYWN0IDE4XG4gICAgICAgIG9ubHkgY2hlY2sgaWYga2V5IGhhcyBjaGFuZ2VkXG4gICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdHdnL3JlYWN0LTE4L2Rpc2N1c3Npb25zLzgyXG4gICAgICAqLyBjb25zdCBjYWxsYmFja1NhZmVndWFyZCA9ICgpPT57XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF1bm1vdW50ZWRSZWYuY3VycmVudCAmJiBrZXkgPT09IGtleVJlZi5jdXJyZW50ICYmIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5ID09PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVGhlIGZpbmFsIHN0YXRlIG9iamVjdCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzLlxuICAgICAgICBjb25zdCBmaW5hbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlID0gKCk9PntcbiAgICAgICAgICAgIHNldENhY2hlKGZpbmFsU3RhdGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjbGVhbnVwU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBzdGlsbCB0aGUgc2FtZSByZXF1ZXN0IGJlZm9yZSBkZWxldGluZyBpdC5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJbmZvID0gRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SW5mbyAmJiByZXF1ZXN0SW5mb1sxXSA9PT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTdGFydCBmZXRjaGluZy4gQ2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZSwgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIC8vIEl0IGlzIGluIHRoZSBgaXNMb2FkaW5nYCBzdGF0ZSwgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgbm8gY2FjaGVkIGRhdGEuXG4gICAgICAgIC8vIFRoaXMgYnlwYXNzZXMgZmFsbGJhY2sgZGF0YSBhbmQgbGFnZ3kgZGF0YS5cbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGdldENhY2hlKCkuZGF0YSkpIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgc2V0Q2FjaGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAvLyBJZiBubyBjYWNoZSBpcyBiZWluZyByZW5kZXJlZCBjdXJyZW50bHkgKGl0IHNob3dzIGEgYmxhbmsgcGFnZSksXG4gICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgIGlmIChjb25maWcubG9hZGluZ1RpbWVvdXQgJiYgaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZyAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25Mb2FkaW5nU2xvdyhrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSByZXF1ZXN0IGFuZCBzYXZlIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgICAgLy8gS2V5IG11c3QgYmUgdHJ1dGh5IGlmIGVudGVyaW5nIGhlcmUuXG4gICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZldGNoZXIoZm5BcmcpLFxuICAgICAgICAgICAgICAgICAgICBnZXRUaW1lc3RhbXAoKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbbmV3RGF0YSwgc3RhcnRBdF0gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgbmV3RGF0YSA9IGF3YWl0IG5ld0RhdGE7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXNuJ3QgaW50ZXJydXB0ZWQsIGNsZWFuIGl0IHVwIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChjbGVhbnVwU3RhdGUsIGNvbmZpZy5kZWR1cGluZ0ludGVydmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgY3VycmVudCBvbmUgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zOlxuICAgICAgICAgICAgLy8gICByZXExLS0tLS0tLS0tLS0tLS0tLS0tPnJlczEgICAgICAgIChjdXJyZW50IG9uZSlcbiAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAvLyB0aGUgcmVxdWVzdCB0aGF0IGZpcmVkIGxhdGVyIHdpbGwgYWx3YXlzIGJlIGtlcHQuXG4gICAgICAgICAgICAvLyBUaGUgdGltZXN0YW1wIG1heWJlIGJlIGB1bmRlZmluZWRgIG9yIGEgbnVtYmVyXG4gICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xlYXIgZXJyb3IuXG4gICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gVU5ERUZJTkVEO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgbXV0YXRpb25zKHMpLCB0aGF0IG92ZXJsYXBwZWQgd2l0aCB0aGUgY3VycmVudCByZXZhbGlkYXRpb246XG4gICAgICAgICAgICAvLyBjYXNlIDE6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMjpcbiAgICAgICAgICAgIC8vICAgICAgICAgcmVxLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICBtdXRhdGUtLS0tLS0+ZW5kXG4gICAgICAgICAgICAvLyBjYXNlIDM6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLS0uLi4tLS0tLS0tLS0tPlxuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBpZ25vcmUgdGhlIHJldmFsaWRhdGlvbiByZXN1bHQgKHJlcykgYmVjYXVzZSBpdCdzIG5vIGxvbmdlciBmcmVzaC5cbiAgICAgICAgICAgIC8vIG1lYW53aGlsZSwgYSBuZXcgcmV2YWxpZGF0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbXV0YXRpb24gZW5kcy5cbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uSW5mbyA9IE1VVEFUSU9OW2tleV07XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKG11dGF0aW9uSW5mbykgJiYgLy8gY2FzZSAxXG4gICAgICAgICAgICAoc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMF0gfHwgLy8gY2FzZSAyXG4gICAgICAgICAgICBzdGFydEF0IDw9IG11dGF0aW9uSW5mb1sxXSB8fCAvLyBjYXNlIDNcbiAgICAgICAgICAgIG11dGF0aW9uSW5mb1sxXSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlZXAgY29tcGFyZSB3aXRoIHRoZSBsYXRlc3Qgc3RhdGUgdG8gYXZvaWQgZXh0cmEgcmUtcmVuZGVycy5cbiAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgY29uc3QgY2FjaGVEYXRhID0gZ2V0Q2FjaGUoKS5kYXRhO1xuICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbXBhcmUgZm4gY291bGQgYmUgY3VzdG9tIGZuXG4gICAgICAgICAgICAvLyBjYWNoZURhdGEgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gbmV3RGF0YSBldmVuIHdoZW4gY29tcGFyZSBmbiByZXR1cm5zIFRydWVcbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZGF0YSA9IGNvbXBhcmUoY2FjaGVEYXRhLCBuZXdEYXRhKSA/IGNhY2hlRGF0YSA6IG5ld0RhdGE7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25TdWNjZXNzKG5ld0RhdGEsIGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY2xlYW51cFN0YXRlKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICBjb25zdCB7IHNob3VsZFJldHJ5T25FcnJvciAgfSA9IGN1cnJlbnRDb25maWc7XG4gICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSwgZGlzY2FyZCBpdC5cbiAgICAgICAgICAgIGlmICghY3VycmVudENvbmZpZy5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3IGVycm9yLCBkb24ndCB1c2UgZGVlcCBjb21wYXJpc29uIGZvciBlcnJvcnMuXG4gICAgICAgICAgICAgICAgZmluYWxTdGF0ZS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAvLyBFcnJvciBldmVudCBhbmQgcmV0cnkgbG9naWMuIE9ubHkgZm9yIHRoZSBhY3R1YWwgcmVxdWVzdCwgbm90XG4gICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QgJiYgY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3IoZXJyLCBrZXksIGN1cnJlbnRDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmV0cnlPbkVycm9yID09PSB0cnVlIHx8IGlzRnVuY3Rpb24oc2hvdWxkUmV0cnlPbkVycm9yKSAmJiBzaG91bGRSZXRyeU9uRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGluYWN0aXZlLCBzdG9wLiBJdCB3aWxsIGF1dG8tcmV2YWxpZGF0ZSB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmb2N1c2luZyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBsaWNhdGlvbiBpcyBhbHdheXMgZW5hYmxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3JSZXRyeShlcnIsIGtleSwgY3VycmVudENvbmZpZywgcmV2YWxpZGF0ZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50OiAob3B0cy5yZXRyeUNvdW50IHx8IDApICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdXBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFyayBsb2FkaW5nIGFzIHN0b3BwZWQuXG4gICAgICAgIGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IGhvb2sncyBzdGF0ZS5cbiAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIC8vIGBzZXRTdGF0ZWAgaXMgaW1tdXRhYmxlLCBhbmQgYGV2ZW50c0NhbGxiYWNrYCwgYGZuQXJnYCwgYW5kXG4gICAgLy8gYGtleVZhbGlkYXRpbmdgIGFyZSBkZXBlbmRpbmcgb24gYGtleWAsIHNvIHdlIGNhbiBleGNsdWRlIHRoZW0gZnJvbVxuICAgIC8vIHRoZSBkZXBzIGFycmF5LlxuICAgIC8vXG4gICAgLy8gRklYTUU6XG4gICAgLy8gYGZuYCBhbmQgYGNvbmZpZ2AgbWlnaHQgYmUgY2hhbmdlZCBkdXJpbmcgdGhlIGxpZmVjeWNsZSxcbiAgICAvLyBidXQgdGhleSBtaWdodCBiZSBjaGFuZ2VkIGV2ZXJ5IHJlbmRlciBsaWtlIHRoaXMuXG4gICAgLy8gYHVzZVNXUigna2V5JywgKCkgPT4gZmV0Y2goJy9hcGkvJyksIHsgc3VzcGVuc2U6IHRydWUgfSlgXG4gICAgLy8gU28gd2Ugb21pdCB0aGUgdmFsdWVzIGZyb20gdGhlIGRlcHMgYXJyYXlcbiAgICAvLyBldmVuIHRob3VnaCBpdCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW1xuICAgICAgICBrZXksXG4gICAgICAgIGNhY2hlXG4gICAgXSk7XG4gICAgLy8gU2ltaWxhciB0byB0aGUgZ2xvYmFsIG11dGF0ZSBidXQgYm91bmQgdG8gdGhlIGN1cnJlbnQgY2FjaGUgYW5kIGtleS5cbiAgICAvLyBgY2FjaGVgIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBjb25zdCBib3VuZE11dGF0ZSA9IHVzZUNhbGxiYWNrKC8vIFVzZSBjYWxsYmFjayB0byBtYWtlIHN1cmUgYGtleVJlZi5jdXJyZW50YCByZXR1cm5zIGxhdGVzdCByZXN1bHQgZXZlcnkgdGltZVxuICAgICguLi5hcmdzKT0+e1xuICAgICAgICByZXR1cm4gaW50ZXJuYWxNdXRhdGUoY2FjaGUsIGtleVJlZi5jdXJyZW50LCAuLi5hcmdzKTtcbiAgICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIC8vIFRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgcmVmcy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGZldGNoZXJSZWYuY3VycmVudCA9IGZldGNoZXI7XG4gICAgICAgIGNvbmZpZ1JlZi5jdXJyZW50ID0gY29uZmlnO1xuICAgICAgICAvLyBIYW5kbGUgbGFnZ3kgZGF0YSB1cGRhdGVzLiBJZiB0aGVyZSdzIGNhY2hlZCBkYXRhIG9mIHRoZSBjdXJyZW50IGtleSxcbiAgICAgICAgLy8gaXQnbGwgYmUgdGhlIGNvcnJlY3QgcmVmZXJlbmNlLlxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGNhY2hlZERhdGEpKSB7XG4gICAgICAgICAgICBsYWdneURhdGFSZWYuY3VycmVudCA9IGNhY2hlZERhdGE7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBZnRlciBtb3VudGVkIG9yIGtleSBjaGFuZ2VkLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc29mdFJldmFsaWRhdGUgPSByZXZhbGlkYXRlLmJpbmQoVU5ERUZJTkVELCBXSVRIX0RFRFVQRSk7XG4gICAgICAgIC8vIEV4cG9zZSByZXZhbGlkYXRvcnMgdG8gZ2xvYmFsIGV2ZW50IGxpc3RlbmVycy4gU28gd2UgY2FuIHRyaWdnZXJcbiAgICAgICAgLy8gcmV2YWxpZGF0aW9uIGZyb20gdGhlIG91dHNpZGUuXG4gICAgICAgIGxldCBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gMDtcbiAgICAgICAgY29uc3Qgb25SZXZhbGlkYXRlID0gKHR5cGUpPT57XG4gICAgICAgICAgICBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uRm9jdXMgJiYgbm93ID4gbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSBub3cgKyBnZXRDb25maWcoKS5mb2N1c1Rocm90dGxlSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuTVVUQVRFX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdW5zdWJFdmVudHMgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIEVWRU5UX1JFVkFMSURBVE9SUywgb25SZXZhbGlkYXRlKTtcbiAgICAgICAgLy8gTWFyayB0aGUgY29tcG9uZW50IGFzIG1vdW50ZWQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIHJlZnMuXG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGtleVJlZi5jdXJyZW50ID0ga2V5O1xuICAgICAgICBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwga2V5IGluIHRoZSBjYWNoZS5cbiAgICAgICAgc2V0Q2FjaGUoe1xuICAgICAgICAgICAgX2s6IGZuQXJnXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgcmV2YWxpZGF0ZSBpZiB3ZSBoYXZlIGRhdGEgdG8gcmV0dXJuIHNvIHdlIHdvbid0IGJsb2NrXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgIHJBRihzb2Z0UmV2YWxpZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViRXZlbnRzKCk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBsZXQgdGltZXI7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIHBhc3NlZCBpbnRlcnZhbFxuICAgICAgICAgICAgLy8gLi4ub3IgaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSB1cGRhdGVkIGRhdGEgdG8gZ2V0IHRoZSBpbnRlcnZhbFxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbCkgPyByZWZyZXNoSW50ZXJ2YWwoZGF0YSkgOiByZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHN0YXJ0IHRoZSBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUsIGFuZCBub3QgZXJyb3JlZC5cbiAgICAgICAgICAgIGlmICghZ2V0Q2FjaGUoKS5lcnJvciAmJiAocmVmcmVzaFdoZW5IaWRkZW4gfHwgZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkpICYmIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmICh0aW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgdGltZXIgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbCxcbiAgICAgICAgcmVmcmVzaFdoZW5IaWRkZW4sXG4gICAgICAgIHJlZnJlc2hXaGVuT2ZmbGluZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gRGlzcGxheSBkZWJ1ZyBpbmZvIGluIFJlYWN0IERldlRvb2xzLlxuICAgIHVzZURlYnVnVmFsdWUocmV0dXJuZWREYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIFNXUiBzaG91bGQgdGhyb3cgd2hlbiB0cnlpbmcgdG8gdXNlIFN1c3BlbnNlIG9uIHRoZSBzZXJ2ZXIgd2l0aCBSZWFjdCAxOCxcbiAgICAgICAgLy8gd2l0aG91dCBwcm92aWRpbmcgYW55IGluaXRpYWwgZGF0YS4gU2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTgzMlxuICAgICAgICBpZiAoIUlTX1JFQUNUX0xFR0FDWSAmJiBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFsbGJhY2sgZGF0YSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHN1c3BlbnNlIGluIFNTUi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGZldGNoZXIgYW5kIGNvbmZpZyByZWZzIGV2ZW4gd2l0aCB0aGUgU3VzcGVuc2UgbW9kZS5cbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHRocm93IGlzVW5kZWZpbmVkKGVycm9yKSA/IHJldmFsaWRhdGUoV0lUSF9ERURVUEUpIDogZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG11dGF0ZTogYm91bmRNdXRhdGUsXG4gICAgICAgIGdldCBkYXRhICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkRGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVycm9yICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzVmFsaWRhdGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzTG9hZGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgU1dSQ29uZmlnID0gT0JKRUNULmRlZmluZVByb3BlcnR5KFNXUkNvbmZpZyQxLCAnZGVmYXVsdFZhbHVlJywge1xuICAgIHZhbHVlOiBkZWZhdWx0Q29uZmlnXG59KTtcbmNvbnN0IHVuc3RhYmxlX3NlcmlhbGl6ZSA9IChrZXkpPT5zZXJpYWxpemUoa2V5KVswXTtcbi8qKlxuICogQSBob29rIHRvIGZldGNoIGRhdGEuXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9zd3IudmVyY2VsLmFwcFxuICogQGV4YW1wbGVcbiAqIGBgYGpzeFxuICogaW1wb3J0IHVzZVNXUiBmcm9tICdzd3InXG4gKiBmdW5jdGlvbiBQcm9maWxlKCkge1xuICogICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSB1c2VTV1IoJy9hcGkvdXNlcicsIGZldGNoZXIpXG4gKiAgIGlmIChlcnJvcikgcmV0dXJuIDxkaXY+ZmFpbGVkIHRvIGxvYWQ8L2Rpdj5cbiAqICAgaWYgKCFkYXRhKSByZXR1cm4gPGRpdj5sb2FkaW5nLi4uPC9kaXY+XG4gKiAgIHJldHVybiA8ZGl2PmhlbGxvIHtkYXRhLm5hbWV9ITwvZGl2PlxuICogfVxuICogYGBgXG4gKi8gdmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgdW5zdGFibGVfc2VyaWFsaXplIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTV1JDb25maWcgfSBmcm9tIFwic3dyXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTV1JIb29rc0NvbmZpZygpIHtcbiAgICB2YXIgc3dyQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgdmFyIHZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBtdXRhdGU6IHN3ckNvbmZpZy5tdXRhdGUsIGNhY2hlOiBzd3JDb25maWcuY2FjaGUgfSk7IH0sIFtzd3JDb25maWcubXV0YXRlLCBzd3JDb25maWcuY2FjaGVdKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VTV1JIb29rc0NvbmZpZy5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKGluaXRpYWxWYWx1ZSkge1xuICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgeyBpbml0aWFsVmFsdWUgPSBmYWxzZTsgfVxuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShpbml0aWFsVmFsdWUpLCAyKSwgdmFsdWUgPSBfYVswXSwgc2V0VmFsdWUgPSBfYVsxXTtcbiAgICB2YXIgdG9nZ2xlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShmdW5jdGlvbiAocHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlVG9nZ2xlLmpzLm1hcCIsInZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYyhvYmopIHtcbiAgdmFyIG91dCA9IFwiXCJcblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiKSByZXR1cm4gb2JqIHx8IFwiXCJcblxuICBpZiAoaXNBcnJheShvYmopKVxuICAgIGZvciAodmFyIGsgPSAwLCB0bXA7IGsgPCBvYmoubGVuZ3RoOyBrKyspIHtcbiAgICAgIGlmICgodG1wID0gY2Mob2JqW2tdKSkgIT09IFwiXCIpIHtcbiAgICAgICAgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsgdG1wXG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykgJiYgb2JqW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ1bUtBWm1Ma0FSTHpYM2dudUtrcFwiLFwibGVmdFwiOlwidTFsNUFKR2JVaVA2UlZGSUt4T0lcIixcInNtYWxsXCI6XCJoeFpwSzlDcEJLMXdSMFcwdjRTRFwiLFwibGFyZ2VcIjpcIm85RFltdDR4ZkxhSW1pVnpJOWRRXCIsXCJ4bGFyZ2VcIjpcInFtRVZ4U1pTNWtmTDNhVmJlZTFuXCIsXCJpbnZlcnRlZFwiOlwiQ05PWkhMZDlYYm9rek9XNkxZQlBcIixcInJvdW5kZWRcIjpcImpKQ0F6dzJTeWFINHRJV1hyQWxSXCIsXCJyaWdodE9mZnNldFwiOlwiS0dDdTdhUGpReV9hRk5qSFdOdXdcIixcImxlZnRPZmZzZXRcIjpcImRESFl5R3pYTmk3NzNGQWwxM0dYXCIsXCJub1NoYWRvd1wiOlwibFFGMVljVXFNME9IdlBTbFN3bF9cIixcIm5vQm9yZGVyXCI6XCJzRW8yNUVpdjZ6czFEX3g1cThWeVwiLFwidHJhbnNwYXJlbnRcIjpcInZtM2NtQU5OdVlsYVFNNVlxejlHXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJQaWtmemo3ellnMkludGRKeW11S1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIm9TZ1Y1Y3dYNmlua1NiQ0c5OHc4XCIsXCJub1BhZGRpbmdcIjpcImdTWnJHUjF4cW04UTFpUlVmR2dhXCIsXCJjb250ZW50XCI6XCJwWUxVajlub0FxVDhXeXRqRE9PYlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImJ1dHRvbkJhZGdlXCI6XCJpT3lfdGhVZnd4SXFaT3JXU0l6eFwiLFwiaW52ZXJ0ZWRcIjpcImc3OWpqY1dWbm14TG9QTnlBeDQ5XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJVbmo0cnAxRHk3MUFDcnV6WGw3NVwiLFwibGVmdFwiOlwiRVhXTVJ2dmVSdlFpZml4elRIMDJcIixcInNtYWxsXCI6XCJfVTB6blVrNVFUQXpQblMyZ2FMQ1wiLFwibWVkaXVtXCI6XCJhSDh1NHMyTXRZYzV5NHZ5dWJEd1wiLFwibGFyZ2VcIjpcImMzMDZ5Vjc4YWxfZUd3QlNrbUZtXCIsXCJ4bGFyZ2VcIjpcInh2QTFtZVVtRTI4QUVPcGpzV2M5XCIsXCJpbnZlcnRlZFwiOlwiV0I3N1lJRE9Td0pvWDY4TmpsVUdcIixcInJvdW5kZWRcIjpcImsybkpDc0VOTmdDejJIbHNqX2JHXCIsXCJyaWdodE9mZnNldFwiOlwiakFlNUVWRTM3T3JLWXZrWGRjMXNcIixcImxlZnRPZmZzZXRcIjpcIkRnYnRCNkc0TG9CRGQwNFBfTXpPXCIsXCJub1NoYWRvd1wiOlwiS3BRSTk1X2Y4bkh2azdHMko2aDhcIixcInRyYW5zcGFyZW50XCI6XCJMOFBueFVRb2d6Z0ZNTVQ3UUk0ZFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSnVsYXhTY2NvR21xdGdUTkptazlcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ6VFlyOVc3ZzJTcWJWalBGQW9rR1wiLFwibm9QYWRkaW5nXCI6XCJVSHpUbTUxa1Z5bGw1Ml9TN3NHQlwiLFwibm9Cb3JkZXJcIjpcImhSUDFYWWZ1SjQ5VHNZVV9jTzVBXCIsXCJkaXNhYmxlZFwiOlwibHdXSVRQaE05VE1vNTg1RHNhdzhcIixcImNvbnRlbnRcIjpcIk15VF9QdWZKZEV2c1pFM2hTVzhQXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY2hlY2tib3hcIjpcInN5OGxLVldQNTZBbE9SN3lzXzlBXCIsXCJzbWFsbFwiOlwiWGpmcGN1UHRndUZadktyeHh0N3lcIixcIm1lZGl1bVwiOlwidExQM2RaV2VwWEgzSEtnMTdzT0hcIixcImxhcmdlXCI6XCJXZ3A5cUhXRHJRaTlmbWN4UUlWS1wiLFwieGxhcmdlXCI6XCJsVUE2dHBMa1djR0Znbm9xQ0Z2dVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yUGlja2VyXCI6XCJLazJkcDE1SHdNWnpJTmJVRkFaNFwiLFwiaG9yaXpvbnRhbFwiOlwiSnN6T19VZzdwS0xZUTBEZWhOOF9cIixcInZlcnRpY2FsXCI6XCJFVlQ2MmxnaEM5OWU5YmRqWWx5NVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yU3dhdGNoXCI6XCJQdmJlQm00U010TXFsUU5UeVFqUVwiLFwic21hbGxcIjpcIlM3RTNFUHlfQVdRdWtFZXh1dlRmXCIsXCJsYXJnZVwiOlwiYTFGc0l0S1BRRU9CZVRxQkN1RGxcIixcInhsYXJnZVwiOlwic0ZoZ1FFTl9VT0wzWnhPQVIxSWVcIixcInNlbGVjdGVkXCI6XCJhVXgydVNCU3MxNFZxd1BxanZsUVwiLFwic3JPbmx5XCI6XCJKSVFtZVpkZDlURmw1SV9naWZQaVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiWlpWSGNYNDVYQ2JsbURhYjlld1pcIixcIm1vZGFsSGVhZGVyXCI6XCJ4VFgxWEpmQ1NVc3JoX3lMbFpvaVwiLFwibW9kYWxDb250ZW50XCI6XCJUZTZqSGRseWpzUVhtblRzOWJhblwiLFwibm9QYWRkaW5nXCI6XCJMel9nd1N3UDNRQ041ell6RnNFaVwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJHaDF1dnhNZkVnUFRkdDY2UWlzMlwiLFwibW9kYWxCdXR0b25zXCI6XCJJYXczNEZrTUpxanJHUTU4QkdmeFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwickJhZlhrb1RDbjJBaDZ4WVlteGZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpbnB1dFwiOlwiS1drN29aOHR2UGZRaWNnUVlsVmFcIixcImxhYmVsXCI6XCJlNnpyeDdVT1BfQlNvTU0zR3JqUVwiLFwic21hbGxcIjpcImloU25EUWcweWd4Y1ZMSXlTSmtNXCIsXCJsYXJnZVwiOlwiRnB3aGJEN0hYeF91RlQzbDAxd2JcIixcInhsYXJnZVwiOlwiWVZkczR1X0RmV1NHMXIwU0FHblNcIixcImludmVydGVkXCI6XCJDS3lub0xoaUxkNkt6QVlpNU50R1wiLFwicm91bmRlZFwiOlwidjcybXpKdW1GU2lET09FMU1uWEhcIixcIm5vU2hhZG93XCI6XCJFb2V3SkVEYkdkdGVKX05SZlM1RlwiLFwibm9Cb3JkZXJcIjpcImNiN2w0eHZjTm5ITmxRWm1MamtiXCIsXCJub1BhZGRpbmdcIjpcInZjT3dEWXVHRjJldG9QZnlGRFg1XCIsXCJ0cmFuc3BhcmVudFwiOlwibDA4a2hhWElVT2NydUJGSHdzN1hcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkkweHZKYkIwTE5UMFMxNWpUTVdXXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiWDZmcVVjVkgxQmxDUkpCaWlKaWlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImoxbWZpWUVHb2xUUm1iQm1HS2xRXCIsXCJyb3dcIjpcIkVHYUt2bXFNMlNhd2lGclc4Q3R1XCIsXCJjb2x1bW5cIjpcIk5NaTBNVDFiN3JwMVpqeWU4VVZBXCIsXCJmaXhlZFwiOlwiZzBqM2trUXJfQWpDS0ZkOTRTMXNcIixcInBsYWluXCI6XCJGcjFxN1duRjFuRm5uYmZncGFSelwiLFwidHJhbnNwYXJlbnRcIjpcInVkUlplOUgwYktVSFhqT3dHMUZuXCIsXCJ0b3BcIjpcInVZaUt3NlZ2REVraGpaSHp2bzdlXCIsXCJ0b3BFZGdlXCI6XCJ0UmJFY1lqRTNLbmNzTndUYnZWTVwiLFwidG9wT25FZGdlXCI6XCJMR3VuRzM3WDFfSFJldXczcXp1YVwiLFwicmlnaHRcIjpcImx3MjdyR1ZsbzM0YXhDeHczUUhpXCIsXCJyaWdodEVkZ2VcIjpcIlBaSXR2bGVGSUlqMEp4Mk1pa1JFXCIsXCJyaWdodE9uRWRnZVwiOlwiS051R2FEUHE5cm1YZmdtTzNwY2JcIixcImJvdHRvbVwiOlwiZG4xdWgxdGFzR3hER3FtVTE4SE5cIixcImJvdHRvbUVkZ2VcIjpcImVEMFVDckJScHNSVFBQd3dJb1ZnXCIsXCJib3R0b21PbkVkZ2VcIjpcIklyaEg1Z2Z5R3NRNmtkY1A5NFJRXCIsXCJsZWZ0XCI6XCJENWZHSG5BR0NNUjRMdGI5eTRIclwiLFwibGVmdEVkZ2VcIjpcIl9BdEFkMnRyN3Qxa1h1c1JiWFN6XCIsXCJsZWZ0T25FZGdlXCI6XCJfOEM5ZGQwWF9KWFk0dUh6dzVOalwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiUURrczhvdnQ5UlZjRldlRUI4d2JcIixcInZlcnRpY2FsQ2VudGVyXCI6XCJDVnVRUkU2NTJHSDJWSm44ek9Uc1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImljb25cIjpcImZwX0JMSjJGVzRPeXliMGJIaUQ0XCIsXCJzbWFsbFwiOlwienNWRE5mTlJrb3MwUTV1djlGUjlcIixcIm1lZGl1bVwiOlwiZVNsaWwzZXZQdFBCc3dXRjgwQzVcIixcImxhcmdlXCI6XCJUN1VMeXExeUU5QVZYRU1rblY0R1wiLFwieGxhcmdlXCI6XCJRUEFjZVZRZFo2UUlRMlF2aWp3Z1wiLFwiaW52ZXJ0ZWRcIjpcIm1GVEdiaExhNE5sVU8xNm52SnJrXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJXY2VteXIyR3I4WkNHYzZCamJxd1wiLFwic21hbGxcIjpcIlRfcGE4Q2NwTDFHdnVEc2R2c3FxXCIsXCJtZWRpdW1cIjpcIm5MTEVyak9nZmE1YjJzT2VaclE1XCIsXCJsYXJnZVwiOlwiUTcxTkZCSHJTeFFMUUU0QUdEMmhcIixcInhsYXJnZVwiOlwiRWJCaXlGMXJnNndSYXhTTUs4c29cIixcInJvdW5kZWRcIjpcInRManV3UlNzSWlMSkdWc3JhcmJkXCIsXCJ0b3BPZmZzZXRcIjpcImQ0S0xwSTc5Q3VTVTZna1BQSW5BXCIsXCJyaWdodE9mZnNldFwiOlwiRzdoSlpvWXY4cUlyTm1GQ3lnTUVcIixcImJvdHRvbU9mZnNldFwiOlwiRFpzM0F2R2tWZE92SmZMZUo4R2hcIixcImxlZnRPZmZzZXRcIjpcIndFRW5XUmN2dXZvbWhfT0xPNWlxXCIsXCJpbnZlcnRlZFwiOlwiSzlXR0NGcFVhZE85V0lYd0Zhal9cIixcIm5vU2hhZG93XCI6XCJlQVFKMTBrRWtQbUR4TUd2bFl6eVwiLFwibm9Cb3JkZXJcIjpcIk9sRU5SOW50dVdZTEdPS0tLckdSXCIsXCJ0cmFuc3BhcmVudFwiOlwiS09jc1ByaXZyOTRyeG5mSFZsZmVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImdVU1R5M19OcDFtR0pIVzFOM2d4XCIsXCJzbWFsbFwiOlwiSVl1VnpoMUhCemdvVENpMldRX3BcIixcIm1lZGl1bVwiOlwiSk5nM19iQ0VmSXZpNGdlRWNzUzNcIixcImxhcmdlXCI6XCJuNjFzYXhBMjBfRXdNZ3Q5R3c0c1wiLFwieGxhcmdlXCI6XCJncUdudm5IOVg2bUd2endsNGFHelwiLFwicm91bmRlZFwiOlwiRGt6dXFoRWFpTVIzWE1zMU0xSWZcIixcInRvcE9mZnNldFwiOlwic0dudmV2dnN4QlpVYVhycFpRcElcIixcInJpZ2h0T2Zmc2V0XCI6XCJoZ1kzWnBreUQ3MHA3RThybjNiaVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJST29RWTZPYVJuUXpET2ZYX1FERlwiLFwibGVmdE9mZnNldFwiOlwiS2V2bTU4MmUzZ1hQSkUzT0RvcGFcIixcImludmVydGVkXCI6XCJPT3puQ2JBYmpPTGM0X2JDRXFmeVwiLFwibm9TaGFkb3dcIjpcInhySHhmY2UwMzRkZ1lORWtubFZNXCIsXCJub0JvcmRlclwiOlwiZUh0X1JJcThKR29ZSGM0aUNvZWdcIixcInRyYW5zcGFyZW50XCI6XCJuZmdxdFNnZnJ0ckdGRFdmWm9uUVwiLFwiZGlzYWJsZWRcIjpcIklfbmhKOXU2cFREXzJTRjNxbF9sXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJyTzVXNkRRazROdG9XcndtS01XZ1wiLFwiaGFzT3ZlcmxheVwiOlwibGx2bm1JOEsxM2c5UFRCaUNOejNcIixcIm92ZXJsYXlcIjpcIkdWazJqOHdWMXQzZ1k1dVhRNHFJXCIsXCJpbWFnZVwiOlwiZ1hqWXFLZTl3M05nWXVyWXdVUXBcIixcImNvdmVyXCI6XCJfbDdPTk9XYXlyOHR5dUdpeVVzY1wiLFwiY29udGFpblwiOlwiU1lqT2I4bEFobURiZHlsRklRWTlcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkhrcm96U2ZsbFRGbGtrYnF4WFdoXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwieHlIWGhoSEVZWE1ZZWF2V1p3X05cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlJEWnlsQ01sR2ZlQ1V3U2J5ZUlxXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJpOEd1X1cxdzhXQkFZZmxMSVl6d1wiLFwiaGVhZGVyXCI6XCJHcDdSOHdZd2FMdEZvS0ZjUnRnTlwiLFwiaGVhZGVyTGFiZWxcIjpcIlZHa290TVRucVBSYUtjR1Y4UmpnXCIsXCJsaXN0XCI6XCJ2ZzlRTHRDWVRBczV4M2ZGNzl6cFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImxpc3RWaWV3SXRlbVwiOlwiWkZVZDdvU3BQTHQwRWQyWHFhV1pcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJ4UTlCZmswWDFIbVpnaWhDdXRaVlwiLFwib3BlblwiOlwidXR2OUZZT1U3UTBKTm5aVzFlanZcIixcImVudHJhbmNlXCI6XCJ5WUtqY0N2RDJMOTRGcFBnT2lnUVwiLFwiaGVhZGVyXCI6XCJ3Tkw4NnM5ekdGaThYSzExS2xvUlwiLFwiZm9vdGVyXCI6XCJtdTRKZXYxYzRLY2lmZUY4TXpxZ1wiLFwibm9Cb3JkZXJcIjpcIkVhUFNqTDFuWHN6N1RDeDExTHJmXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrWWg3REtZcUg2amRMWGQ3UGRKd1wiLFwibWVudUNvbnRhaW5lclwiOlwiUWxlQU8zeW1UbGlVNlpOQlF4ZmdcIixcInRvcFwiOlwiYXhmY3JqU0g0bHZ1anpyc2syUXBcIixcInJpZ2h0XCI6XCJMdFZsdFczQlBaNWdOWFZ4eGtyUFwiLFwibGVmdFwiOlwiUFJiNWY4WGNNWk9jWTV1ZlBNZHFcIixcImJvdHRvbVwiOlwiX19NWjVPb2lJclZpZEZYYlFmanVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51SXRlbVwiOlwiZ0daZl9Hc1dzd2tyME5URF9uYlFcIixcIm5vUGFkZGluZ1wiOlwiQ00yYkhTQ3h3dWl0TWVzN3U5V2ZcIixcImFjdGl2ZVwiOlwiczR0SmxLNE9GYzNyblhMME14cWtcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51TGlua0l0ZW1cIjpcIlgxRjRTUWtoUWgwZnh6NVl1M3RIXCIsXCJub1BhZGRpbmdcIjpcImtwRExYWlNEMktwMTloOXN1UkxBXCIsXCJhY3RpdmVcIjpcIkl3SVRqR242dlRadGVFS2pOb1ljXCIsXCJtZW51SXRlbVwiOlwibGRvUjZwR09ydGdITVhTcG1IN0ZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJqMGg5aGRfZ2x2STl4ZE9uYWF1WVwiLFwibm9PdmVybGF5XCI6XCJTTDQ4U3padWZLZ2RNaUdZM1lUTlwiLFwibW9kYWxcIjpcImhUWGNaZXZHeXlJMEFjdnByWFZKXCIsXCJ0cmFuc3BhcmVudFwiOlwiaWJxbG9HMUh4SHgzc3Rka1ZaU2pcIixcIm5vU2hhZG93XCI6XCJJRW81dkVlZnR2THBtd2kwVnlqRFwiLFwibW9kYWxCdXR0b25cIjpcIkZvUGZDM2o3Y0lnMkJZZnpxUUdFXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibnVtcGFkXCI6XCJHZXZiYkczRDBSMzR4R1VGczVZMVwiLFwibnVtYmVyc1wiOlwiZkw1STFXS1hDYVU5dnJCR3lKQjRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJEaDZqc1ExNWVNeWRzU01UQ3dSd1wiLFwidHJhbnNwYXJlbnRcIjpcIldUNk9QbGpDMnFmYkFXc2swejRyXCIsXCJmaXhlZFwiOlwicHU2czlNajVUMVlJZ212NExPbkNcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJoZWFkZXJcIjpcIldTWVlCQXo1M2RocXVJT1pQV0JQXCIsXCJsYWJlbFwiOlwiYjU1aHlaMG9IbDBzNE90OU9od01cIixcImV4cGFuZGVkXCI6XCJOM0F6TzVrWmxoNEhBUGtubll6cVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiU21DaTR4T3hFc0x0aTYxR29ZazRcIixcInNlbGVjdGVkXCI6XCJfNHJKdENPWnBuZjN4bjhwbUZ2Q1FcIixcImNoZWNrYm94Q29udGFpbmVyXCI6XCJNU1haRjd4Y0M1YW9xSGxxcEkwZ1wiLFwiY2hlY2tib3hcIjpcIk5KanE5X2dBZWREUnJPRV9YV0UxXCIsXCJsYWJlbFwiOlwidndtRExjOTZEOXRYZ1dxczRJS3pcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImUzeVhKQnJZVFc0c1ZaS1kyTkZtXCIsXCJzZWxlY3RBbGxDb250YWluZXJcIjpcImN6SExhNEwzdFJDSkRDaURCNkF6XCIsXCJjaGVja2JveFwiOlwiaUtxaldVZDk2elNwOXhtb2NYemtcIixcImNoZWNrYm94Q29udGFpbmVyXCI6XCJheGloOUVudXpLMWZ3aHFZRFZSQVwiLFwibGFiZWxcIjpcInE1V3M5aHI4Wk1YN2ZTdkRLX3FuXCIsXCJub09wdGlvbnNcIjpcIm92S3ZCNUg4RW9Gem51TXFVdWpsXCIsXCJzZWFyY2hLZXl3b3JkXCI6XCJUd2NWYVJEejhjb2tJSzlEOUR4SlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiaXgzYVpXTWVONUFsNFVLOHllYkpcIixcImljb25TZWFyY2hDb250YWluZXJcIjpcIlo1TFB4NDd5YkVLZVgyOVhCWUJDXCIsXCJyZXNldEJ1dHRvblwiOlwiaGpUOVpYdm12YzVRVXJ1d3o4RWxcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkVUR2JYVGRZQXAwRzQwVEpQTG5LXCIsXCJkaXNhYmxlZFwiOlwibkVDZ0dkWE9zcFVyUVdIanp3a2dcIixcImhlYWRlclwiOlwiWEFvSmh4VEFwY1I5bEdlZ3lwOUFcIixcImFjdGl2ZVwiOlwiZWJlbXp0WkVXSVY0XzZBc0tQUUhcIixcImNvbnRlbnRcIjpcInJSRFd2MnFxd1NyQnkzZXZaN0R3XCIsXCJub09wdGlvbnNcIjpcImZMUDR4NEl4bnlpV2hwNUJQNXNUXCIsXCJzZWFyY2hDb250YWluZXJcIjpcInlPRUNESmVEVlQ1ejVZYVhwZUpuXCIsXCJpY29uQnV0dG9uXCI6XCJhVktwM0gzSldyYUJmN0c1VWRhUFwiLFwiZXhwYW5kZWRcIjpcIkJyeHJ0RDNhTVg3SVU1MnJBMjIwXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wicGxhY2Vob2xkZXJcIjpcImRkbFJpZG5JelloUUM5REdwZ0l0XCIsXCJhY3RpdmVcIjpcInNoSHNFSkd0Yno0Y21BNngxRzFsXCIsXCJ0YWdXcmFwcGVyXCI6XCJCR0VTaGM3cXUyZms5RFpFMlJVc1wiLFwic2VsZWN0ZWRPcHRpb25cIjpcIm1hOUJJanVHQ1FlS0Y0NHNndWNUXCIsXCJzZWxlY3RlZE9wdGlvbnNcIjpcIm5ScEF3djk3Q2VzcVFiRExjZXQ5XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnNU9SMGFPTk9XMU9zMXh0a05IaVwiLFwidGFibGVcIjpcInNNUjFWYjYyWEV2T09XUnJXYzRRXCIsXCJwbGFjZWhvbGRlckNvbnRhaW5lclwiOlwiXzd4Mno3cF9rYlFPTERtRVg1NGlBXCIsXCJzY3JvbGxiYXJDb250YWluZXJcIjpcIkVBSDE0WFBlSkJ1RFdHcDVOVllvXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJqNFBpZ0pPTDVEZ3pEOE9ZeHNrelwiLFwiaXNIZWFkZXJTdGlja3lcIjpcIkFZUl80SGVvbEFqSkNPc2wzSFpKXCIsXCJib3JkZXJCb3R0b21cIjpcImlackQzdEgxMnpESUZPV3ZKVUQ3XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGFibGVIZWFkZXJDZWxsXCI6XCJKY0ExVnpWNE13VlEzTkVoMHZ6RVwiLFwic29ydEljb25WaXNpYmxlXCI6XCJJcTdPeHNRekwwNnhqOThPMExxSlwiLFwic29ydGFibGVcIjpcIlZTVFNoWTdMVGhfSUlqbnJQX19sXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJkT3ZpZ1NnaHh5UTRDYmJDTWtDUlwiLFwiYWN0aXZlXCI6XCJ0cW5ZZFkwSHREbG1XNjF0akdiUVwiLFwiaGFzQXJyb3dcIjpcInFxTzZhMWpOTDZIVEpHN0hSMTF0XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJBdlI3V0NEUnhDd3ZSVUFfajgwUFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiektGMzRhS3ZZWm5iTHVaempFZU9cIixcImNvbnRlbnRcIjpcIm9fMjFyX0VqTEtCM3hoZ0d5NzRzXCIsXCJjbG9zZUJ1dHRvblwiOlwiWlpQUlpMVXE5TVF5aWZEOHgyakhcIixcImRpc2FibGVkXCI6XCJ1Q0x6MHZiTm5RWkZYOGtWdVVpR1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZ3dZS1JQcEdkSU1WWGtpTjBIOUJcIixcInRhZ0lucHV0XCI6XCJhdkltR3MzWGNMZURMR2h4RDhid1wiLFwiZGlzYWJsZWRcIjpcInlUOFBwOFRVdlA3c1FTR2VHTE5KXCIsXCJ0ZXh0SW5wdXRcIjpcIlppTk5mMm9MVmpFeHhwOVJUMnNfXCIsXCJzbWFsbFwiOlwiTGVtTVVUc2VpZ3hIYm1JWVZWVGNcIixcIm1lZGl1bVwiOlwiUFVISmRNN1pFYjNMRlJlTTFfVWdcIixcImxhcmdlXCI6XCJqOW1rNTJoR2hvRndqdzRGV0hROVwiLFwieGxhcmdlXCI6XCJFaVdxZUZxUVhFOUxIVWgxdnhwWFwiLFwibm9Cb3JkZXJcIjpcIk82V3NPcFVab1plVGhVYl9WaVhuXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGV4dElucHV0XCI6XCJOUFpya3NDcG5YVkpTcV9zbkhqUlwiLFwic21hbGxcIjpcImpRR3JpUUpTYTA0enNvRzFhMnU5XCIsXCJtZWRpdW1cIjpcImxWb1k5RHAxN0hPQmluTWowUTdvXCIsXCJsYXJnZVwiOlwiUWxVYVBiWDhFYUlpN3JaNEZiOG9cIixcInhsYXJnZVwiOlwicllQT005Zk50VkxkUEZ5V0trR0VcIixcIm5vQm9yZGVyXCI6XCJLRFRJTnNIZG9sWVJlU2JMY29vSFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0XCI6XCJ6Rml1QVRnc1NCNDJWZEVtY0paWVwiLFwiZW50cmFuY2VcIjpcIlI4cnBPVU90bmdZT0V0N0kwcEdNXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIlhsTFFPZTQ3NE90QmlhY19nVTdIXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9vbHRpcFwiOlwiS202VVV5MGpwcU0wTEEyZVhjY2NcIixcInZpc2libGVcIjpcInVUb0pmY1JDUjZlVkhJbTgwd0diXCIsXCJub3RWaXNpYmxlXCI6XCJoR3hneWhQbVFtTTk3VmlPcGN2OFwiLFwibGVmdFwiOlwieUJ2MWx3REhwZXh4TzNEUHBkMXZcIixcInJpZ2h0XCI6XCJ2ODUyRXh4bVE2QXRTUUYyc1g4QVwiLFwidG9wXCI6XCJpVjJ5elBpem9vdTlvbVc4MTFoZ1wiLFwiYm90dG9tXCI6XCJWbW1FOEVOc0NremJ3THBMM1hKZ1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwieVk5SFY0MElUVFdnQVY4cUx3MXdcIixcImhhc092ZXJsYXlcIjpcInp1YjVicWRWWG00TkZ4cEk0SEJmXCIsXCJ2aWRlb1wiOlwiTVZDRFZqZmdtSEU3UWVtY1l4R2xcIixcImNvdmVyXCI6XCJWNG5FY20xNzl2WmUyTUxnUlZhTVwiLFwiY29udGFpblwiOlwidTJfTWZlQ2pNU2xfYUJOSm41bkxcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcImxqZnNZczhCUXFsZUt6Ykxra2FkXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiSEp0UnFiQUZMT25YVnlHejhpRlVcIixcIm92ZXJsYXlcIjpcIkFMSGhPSEFlTGxCRHkxRHBZcWl2XCJ9OyIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkhpbnQgPSB2b2lkIDA7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIHV0aWxzXzEgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmV4cG9ydHMuSGludCA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciBfYSwgX2I7XG4gICAgdmFyIGNoaWxkID0gcmVhY3RfMS5kZWZhdWx0LkNoaWxkcmVuLm9ubHkocHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmICgoKF9iID0gKF9hID0gY2hpbGQudHlwZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvU3RyaW5nKCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50b0xvd2VyQ2FzZSgpKSAhPT0gJ2lucHV0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnQ6ICdIaW50JyBvbmx5IGFjY2VwdHMgYW4gJ2lucHV0JyBlbGVtZW50IGFzIGNoaWxkLlwiKTtcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zLCBkaXNhYmxlSGludCA9IHByb3BzLmRpc2FibGVIaW50LCBhbGxvd1RhYkZpbGwgPSBwcm9wcy5hbGxvd1RhYkZpbGwsIGFsbG93RW50ZXJGaWxsID0gcHJvcHMuYWxsb3dFbnRlckZpbGwsIG9uRmlsbCA9IHByb3BzLm9uRmlsbCwgb25IaW50ID0gcHJvcHMub25IaW50LCB2YWx1ZU1vZGlmaWVyID0gcHJvcHMudmFsdWVNb2RpZmllcjtcbiAgICB2YXIgY2hpbGRQcm9wcyA9IGNoaWxkLnByb3BzO1xuICAgIHZhciBtYWluSW5wdXRSZWYgPSByZWFjdF8xLnVzZVJlZihudWxsKTtcbiAgICB2YXIgaGludFdyYXBwZXJSZWYgPSByZWFjdF8xLnVzZVJlZihudWxsKTtcbiAgICB2YXIgaGludFJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBfYyA9IHJlYWN0XzEudXNlU3RhdGUoJycpLCB1bk1vZGlmaWVkSW5wdXRUZXh0ID0gX2NbMF0sIHNldFVubW9kaWZpZWRJbnB1dFRleHQgPSBfY1sxXTtcbiAgICB2YXIgX2QgPSByZWFjdF8xLnVzZVN0YXRlKCcnKSwgdGV4dCA9IF9kWzBdLCBzZXRUZXh0ID0gX2RbMV07XG4gICAgdmFyIF9lID0gcmVhY3RfMS51c2VTdGF0ZSgnJyksIGhpbnQgPSBfZVswXSwgc2V0SGludCA9IF9lWzFdO1xuICAgIHZhciBfZiA9IHJlYWN0XzEudXNlU3RhdGUoKSwgbWF0Y2ggPSBfZlswXSwgc2V0TWF0Y2ggPSBfZlsxXTtcbiAgICB2YXIgX2cgPSByZWFjdF8xLnVzZVN0YXRlKCksIGNoYW5nZUV2ZW50ID0gX2dbMF0sIHNldENoYW5nZUV2ZW50ID0gX2dbMV07XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB2YXIgZHVwbGljYXRlID0gdXRpbHNfMS5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbihvcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJyZWFjdC1hdXRvY29tcGxldGUtaGludDogXFxcIlwiICsgZHVwbGljYXRlICsgXCJcXFwiIG9jY3VycyBtb3JlIHRoYW4gb25jZSBhbmQgbWF5IGNhdXNlIGVycm9ycy4gT3B0aW9ucyBzaG91bGQgbm90IGNvbnRhaW4gZHVwbGljYXRlIHZhbHVlcyFcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbb3B0aW9uc10pO1xuICAgIHJlYWN0XzEudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGRpc2FibGVIaW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlucHV0U3R5bGUgPSBtYWluSW5wdXRSZWYuY3VycmVudCAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShtYWluSW5wdXRSZWYuY3VycmVudCk7XG4gICAgICAgIGlucHV0U3R5bGUgJiYgc3R5bGVIaW50KGhpbnRXcmFwcGVyUmVmLCBoaW50UmVmLCBpbnB1dFN0eWxlKTtcbiAgICB9KTtcbiAgICB2YXIgZ2V0TWF0Y2ggPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBpZiAoIXRleHQgfHwgdGV4dCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIChvcHRpb25zWzBdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaF8xID0gb3B0aW9uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudG9Mb3dlckNhc2UoKSAhPT0gdGV4dC50b0xvd2VyQ2FzZSgpICYmIHgudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHRleHQudG9Mb3dlckNhc2UoKSk7IH0pXG4gICAgICAgICAgICAgICAgLnNvcnQoKVswXTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaF8xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIG1hdGNoXzIgPSBvcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5sYWJlbC50b0xvd2VyQ2FzZSgpICE9PSB0ZXh0LnRvTG93ZXJDYXNlKCkgJiYgeC5sYWJlbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGV4dC50b0xvd2VyQ2FzZSgpKTsgfSlcbiAgICAgICAgICAgICAgICAuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gdXRpbHNfMS5zb3J0QXNjKGEubGFiZWwsIGIubGFiZWwpOyB9KVswXTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaF8yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgc2V0SGludFRleHRBbmRJZCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHNldFRleHQodGV4dCk7XG4gICAgICAgIHZhciBtYXRjaCA9IGdldE1hdGNoKHRleHQpO1xuICAgICAgICB2YXIgaGludDtcbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgaGludCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGhpbnQgPSBtYXRjaC5zbGljZSh0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoaW50ID0gbWF0Y2gubGFiZWwuc2xpY2UodGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHNldEhpbnQoaGludCk7XG4gICAgICAgIHNldE1hdGNoKG1hdGNoKTtcbiAgICAgICAgb25IaW50ICYmIG9uSGludChtYXRjaCk7XG4gICAgfTtcbiAgICB2YXIgaGFuZGxlT25GaWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaGludCA9PT0gJycgfHwgIWNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5ld1VuTW9kaWZpZWRUZXh0ID0gdW5Nb2RpZmllZElucHV0VGV4dCArIGhpbnQ7XG4gICAgICAgIGNoYW5nZUV2ZW50LnRhcmdldC52YWx1ZSA9IG5ld1VuTW9kaWZpZWRUZXh0O1xuICAgICAgICBjaGlsZFByb3BzLm9uQ2hhbmdlICYmIGNoaWxkUHJvcHMub25DaGFuZ2UoY2hhbmdlRXZlbnQpO1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKCcnKTtcbiAgICAgICAgb25GaWxsICYmIG9uRmlsbChtYXRjaCk7XG4gICAgICAgIHNldFVubW9kaWZpZWRJbnB1dFRleHQobmV3VW5Nb2RpZmllZFRleHQpO1xuICAgIH07XG4gICAgdmFyIHN0eWxlSGludCA9IGZ1bmN0aW9uIChoaW50V3JhcHBlclJlZiwgaGludFJlZiwgaW5wdXRTdHlsZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAoKF9hID0gaGludFdyYXBwZXJSZWYgPT09IG51bGwgfHwgaGludFdyYXBwZXJSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdHlsZSkge1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5mb250RmFtaWx5ID0gaW5wdXRTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5mb250U2l6ZSA9IGlucHV0U3R5bGUuZm9udFNpemU7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLndpZHRoID0gaW5wdXRTdHlsZS53aWR0aDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gaW5wdXRTdHlsZS5oZWlnaHQ7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmxpbmVIZWlnaHQgPSBpbnB1dFN0eWxlLmxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmJveFNpemluZyA9IGlucHV0U3R5bGUuYm94U2l6aW5nO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5tYXJnaW4gPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ21hcmdpbicpO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5wYWRkaW5nID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdwYWRkaW5nJyk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmJvcmRlclN0eWxlID0gdXRpbHNfMS5pbnRlcnBvbGF0ZVN0eWxlKGlucHV0U3R5bGUsICdib3JkZXInLCAnc3R5bGUnKTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm9yZGVyV2lkdGggPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ2JvcmRlcicsICd3aWR0aCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoX2IgPSBoaW50UmVmID09PSBudWxsIHx8IGhpbnRSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGhpbnRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnN0eWxlKSB7XG4gICAgICAgICAgICBoaW50UmVmLmN1cnJlbnQuc3R5bGUuZm9udEZhbWlseSA9IGlucHV0U3R5bGUuZm9udEZhbWlseTtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5mb250U2l6ZSA9IGlucHV0U3R5bGUuZm9udFNpemU7XG4gICAgICAgICAgICBoaW50UmVmLmN1cnJlbnQuc3R5bGUubGluZUhlaWdodCA9IGlucHV0U3R5bGUubGluZUhlaWdodDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIG9uQ2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgc2V0Q2hhbmdlRXZlbnQoZSk7XG4gICAgICAgIGUucGVyc2lzdCgpO1xuICAgICAgICBzZXRVbm1vZGlmaWVkSW5wdXRUZXh0KGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgdmFyIG1vZGlmaWVkVmFsdWUgPSB2YWx1ZU1vZGlmaWVyID8gdmFsdWVNb2RpZmllcihlLnRhcmdldC52YWx1ZSkgOiBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgc2V0SGludFRleHRBbmRJZChtb2RpZmllZFZhbHVlKTtcbiAgICAgICAgY2hpbGRQcm9wcy5vbkNoYW5nZSAmJiBjaGlsZFByb3BzLm9uQ2hhbmdlKGUpO1xuICAgIH07XG4gICAgdmFyIG9uRm9jdXMgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgY2hpbGRQcm9wcy5vbkZvY3VzICYmIGNoaWxkUHJvcHMub25Gb2N1cyhlKTtcbiAgICB9O1xuICAgIHZhciBvbkJsdXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAvL09ubHkgYmx1ciBpdCBpZiB0aGUgbmV3IGZvY3VzIGlzbid0IHRoZSB0aGUgaGludCBpbnB1dFxuICAgICAgICBpZiAoKGhpbnRSZWYgPT09IG51bGwgfHwgaGludFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFJlZi5jdXJyZW50KSAhPT0gZS5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICBzZXRIaW50VGV4dEFuZElkKCcnKTtcbiAgICAgICAgICAgIGNoaWxkUHJvcHMub25CbHVyICYmIGNoaWxkUHJvcHMub25CbHVyKGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgQVJST1dSSUdIVCA9ICdBcnJvd1JpZ2h0JztcbiAgICB2YXIgVEFCID0gJ1RhYic7XG4gICAgdmFyIEVOVEVSID0gJ0VudGVyJztcbiAgICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIGNhcmV0SXNBdFRleHRFbmQgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gRm9yIHNlbGVjdGFibGUgaW5wdXQgdHlwZXMgKFwidGV4dFwiLCBcInNlYXJjaFwiKSwgb25seSBzZWxlY3QgdGhlIGhpbnQgaWZcbiAgICAgICAgICAgIC8vIGl0J3MgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgdmFsdWUuIEZvciBub24tc2VsZWN0YWJsZSB0eXBlcyAoXCJlbWFpbFwiLFxuICAgICAgICAgICAgLy8gXCJudW1iZXJcIiksIGFsd2F5cyBzZWxlY3QgdGhlIGhpbnQuXG4gICAgICAgICAgICB2YXIgaXNOb25TZWxlY3RhYmxlVHlwZSA9IGUuY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgPT09IG51bGw7XG4gICAgICAgICAgICB2YXIgY2FyZXRJc0F0VGV4dEVuZCA9IGlzTm9uU2VsZWN0YWJsZVR5cGUgfHwgZS5jdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9PT0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBjYXJldElzQXRUZXh0RW5kO1xuICAgICAgICB9KSgpO1xuICAgICAgICBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBlLmtleSA9PT0gQVJST1dSSUdIVCkge1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBhbGxvd1RhYkZpbGwgJiYgZS5rZXkgPT09IFRBQiAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZXRJc0F0VGV4dEVuZCAmJiBhbGxvd0VudGVyRmlsbCAmJiBlLmtleSA9PT0gRU5URVIgJiYgaGludCAhPT0gJycpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGhhbmRsZU9uRmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkUHJvcHMub25LZXlEb3duICYmIGNoaWxkUHJvcHMub25LZXlEb3duKGUpO1xuICAgIH07XG4gICAgdmFyIG9uSGludENsaWNrID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgaGludENhcmV0UG9zaXRpb24gPSBlLmN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uRW5kIHx8IDA7XG4gICAgICAgIC8vIElmIHVzZXIgY2xpY2tzIHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgaGludCwgXG4gICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gdGhlIGVuZCBvZiB0aGUgbWFpbklucHV0IHRleHRcbiAgICAgICAgaWYgKGhpbnRDYXJldFBvc2l0aW9uID09PSAwKSB7XG4gICAgICAgICAgICAoX2EgPSBtYWluSW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhaGludCAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIChfYSA9IG1haW5JbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB2YXIgY2FyZXRQb3NpdGlvbiA9IHRleHQubGVuZ3RoICsgaGludENhcmV0UG9zaXRpb247XG4gICAgICAgICAgICAgICAgKF9iID0gbWFpbklucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZXRTZWxlY3Rpb25SYW5nZShjYXJldFBvc2l0aW9uLCBjYXJldFBvc2l0aW9uKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgY2hpbGRSZWYgPSByZWFjdF8xLmNsb25lRWxlbWVudChjaGlsZCkucmVmO1xuICAgIHZhciBtYWluSW5wdXQgPSByZWFjdF8xLmNsb25lRWxlbWVudChjaGlsZCwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNoaWxkUHJvcHMpLCB7IG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgICAgb25CbHVyOiBvbkJsdXIsXG4gICAgICAgIG9uRm9jdXM6IG9uRm9jdXMsXG4gICAgICAgIG9uS2V5RG93bjogb25LZXlEb3duLCByZWY6IGNoaWxkUmVmICYmIHR5cGVvZiAoY2hpbGRSZWYpICE9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyB1dGlsc18xLm1lcmdlUmVmcyhjaGlsZFJlZiwgbWFpbklucHV0UmVmKVxuICAgICAgICAgICAgOiBtYWluSW5wdXRSZWYgfSkpO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicmFoLWlucHV0LXdyYXBwZXJcIiwgc3R5bGU6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gICAgICAgIH0gfSwgZGlzYWJsZUhpbnRcbiAgICAgICAgPyBjaGlsZFxuICAgICAgICA6IChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyZWFjdF8xLmRlZmF1bHQuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgICAgICBtYWluSW5wdXQsXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmFoLWhpbnQtd3JhcHBlclwiLCByZWY6IGhpbnRXcmFwcGVyUmVmLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjM1KScsXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgfSB9LFxuICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogJ3JhaC10ZXh0LWZpbGxlcicsIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdwcmUnXG4gICAgICAgICAgICAgICAgICAgIH0gfSwgdGV4dCksXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaGludFwiLCByZWY6IGhpbnRSZWYsIG9uQ2xpY2s6IG9uSGludENsaWNrLCBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogIWhpbnQgfHwgaGludCA9PT0gJycgPyAnbm9uZScgOiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuMzApJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgICAgICAgICAgICAgICAgfSwgZGVmYXVsdFZhbHVlOiBoaW50LCB0YWJJbmRleDogLTEgfSkpKSkpKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24gPSBleHBvcnRzLnNvcnRBc2MgPSBleHBvcnRzLmludGVycG9sYXRlU3R5bGUgPSBleHBvcnRzLm1lcmdlUmVmcyA9IHZvaWQgMDtcbmZ1bmN0aW9uIG1lcmdlUmVmcygpIHtcbiAgICB2YXIgcmVmcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHJlZnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGZpbHRlcmVkUmVmcyA9IHJlZnMuZmlsdGVyKEJvb2xlYW4pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoaW5zdCkge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGZpbHRlcmVkUmVmc18xID0gZmlsdGVyZWRSZWZzOyBfaSA8IGZpbHRlcmVkUmVmc18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgdmFyIHJlZiA9IGZpbHRlcmVkUmVmc18xW19pXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmVmKGluc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydHMubWVyZ2VSZWZzID0gbWVyZ2VSZWZzO1xuO1xuLy8gSUUgZG9lc24ndCBzZWVtIHRvIGdldCB0aGUgY29tcG9zaXRlIGNvbXB1dGVkIHZhbHVlIChlZzogJ3BhZGRpbmcnLFxuLy8gJ2JvcmRlclN0eWxlJywgZXRjLiksIHNvIGdlbmVyYXRlIHRoZXNlIGZyb20gdGhlIGluZGl2aWR1YWwgdmFsdWVzLlxuZnVuY3Rpb24gaW50ZXJwb2xhdGVTdHlsZShzdHlsZXMsIGF0dHIsIHN1YmF0dHIpIHtcbiAgICBpZiAoc3ViYXR0ciA9PT0gdm9pZCAwKSB7IHN1YmF0dHIgPSAnJzsgfVxuICAgIC8vIFRpdGxlLWNhc2UgdGhlIHN1Yi1hdHRyaWJ1dGUuXG4gICAgaWYgKHN1YmF0dHIpIHtcbiAgICAgICAgc3ViYXR0ciA9IHN1YmF0dHIucmVwbGFjZShzdWJhdHRyWzBdLCBzdWJhdHRyWzBdLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gWydUb3AnLCAnUmlnaHQnLCAnQm90dG9tJywgJ0xlZnQnXVxuICAgICAgICAvLyBAdHMtaWdub3JlOiAoYXR0ciArIGRpciArIHN1YmF0dHIpIHByb3BlcnR5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChkaXIpIHsgcmV0dXJuIHN0eWxlc1thdHRyICsgZGlyICsgc3ViYXR0cl07IH0pXG4gICAgICAgIC5qb2luKCcgJyk7XG59XG5leHBvcnRzLmludGVycG9sYXRlU3R5bGUgPSBpbnRlcnBvbGF0ZVN0eWxlO1xuZnVuY3Rpb24gc29ydEFzYyhhLCBiKSB7XG4gICAgaWYgKGEgPiBiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmV4cG9ydHMuc29ydEFzYyA9IHNvcnRBc2M7XG5mdW5jdGlvbiBnZXRGaXJzdER1cGxpY2F0ZU9wdGlvbihhcnJheSkge1xuICAgIHZhciB0cmFja2VyID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodHJhY2tlclthcnJheVtpXS5sYWJlbF0pIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheVtpXS5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgICB0cmFja2VyW2FycmF5W2ldLmxhYmVsXSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZXhwb3J0cy5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbiA9IGdldEZpcnN0RHVwbGljYXRlT3B0aW9uO1xuIiwiLyoqISBcbiAqIGhvdGtleXMtanMgdjMuOS40IFxuICogQSBzaW1wbGUgbWljcm8tbGlicmFyeSBmb3IgZGVmaW5pbmcgYW5kIGRpc3BhdGNoaW5nIGtleWJvYXJkIHNob3J0Y3V0cy4gSXQgaGFzIG5vIGRlcGVuZGVuY2llcy4gXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAyMiBrZW5ueSB3b25nIDx3b3dvaG9vQHFxLmNvbT4gXG4gKiBodHRwOi8vamF5d2NqbG92ZS5naXRodWIuaW8vaG90a2V5cyBcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBcbiAqL1xuXG52YXIgaXNmZiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnID8gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IDAgOiBmYWxzZTsgLy8g57uR5a6a5LqL5Lu2XG5cbmZ1bmN0aW9uIGFkZEV2ZW50KG9iamVjdCwgZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSkge1xuICBpZiAob2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKTtcbiAgfSBlbHNlIGlmIChvYmplY3QuYXR0YWNoRXZlbnQpIHtcbiAgICBvYmplY3QuYXR0YWNoRXZlbnQoXCJvblwiLmNvbmNhdChldmVudCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1ldGhvZCh3aW5kb3cuZXZlbnQpO1xuICAgIH0pO1xuICB9XG59IC8vIOS/rumlsOmUrui9rOaNouaIkOWvueW6lOeahOmUrueggVxuXG5cbmZ1bmN0aW9uIGdldE1vZHMobW9kaWZpZXIsIGtleSkge1xuICB2YXIgbW9kcyA9IGtleS5zbGljZSgwLCBrZXkubGVuZ3RoIC0gMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgbW9kc1tpXSA9IG1vZGlmaWVyW21vZHNbaV0udG9Mb3dlckNhc2UoKV07XG4gIH1cblxuICByZXR1cm4gbW9kcztcbn0gLy8g5aSE55CG5Lyg55qEa2V55a2X56ym5Liy6L2s5o2i5oiQ5pWw57uEXG5cblxuZnVuY3Rpb24gZ2V0S2V5cyhrZXkpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBrZXkgPSAnJztcbiAga2V5ID0ga2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7IC8vIOWMuemFjeS7u+S9leepuueZveWtl+espizljIXmi6znqbrmoLzjgIHliLbooajnrKbjgIHmjaLpobXnrKbnrYnnrYlcblxuICB2YXIga2V5cyA9IGtleS5zcGxpdCgnLCcpOyAvLyDlkIzml7borr7nva7lpJrkuKrlv6vmjbfplK7vvIzku6UnLCfliIblibJcblxuICB2YXIgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTsgLy8g5b+r5o236ZSu5Y+v6IO95YyF5ZCrJywn77yM6ZyA54m55q6K5aSE55CGXG5cbiAgZm9yICg7IGluZGV4ID49IDA7KSB7XG4gICAga2V5c1tpbmRleCAtIDFdICs9ICcsJztcbiAgICBrZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufSAvLyDmr5TovoPkv67ppbDplK7nmoTmlbDnu4RcblxuXG5mdW5jdGlvbiBjb21wYXJlQXJyYXkoYTEsIGEyKSB7XG4gIHZhciBhcnIxID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGExIDogYTI7XG4gIHZhciBhcnIyID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGEyIDogYTE7XG4gIHZhciBpc0luZGV4ID0gdHJ1ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyMi5pbmRleE9mKGFycjFbaV0pID09PSAtMSkgaXNJbmRleCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzSW5kZXg7XG59XG5cbnZhciBfa2V5TWFwID0ge1xuICBiYWNrc3BhY2U6IDgsXG4gIHRhYjogOSxcbiAgY2xlYXI6IDEyLFxuICBlbnRlcjogMTMsXG4gIHJldHVybjogMTMsXG4gIGVzYzogMjcsXG4gIGVzY2FwZTogMjcsXG4gIHNwYWNlOiAzMixcbiAgbGVmdDogMzcsXG4gIHVwOiAzOCxcbiAgcmlnaHQ6IDM5LFxuICBkb3duOiA0MCxcbiAgZGVsOiA0NixcbiAgZGVsZXRlOiA0NixcbiAgaW5zOiA0NSxcbiAgaW5zZXJ0OiA0NSxcbiAgaG9tZTogMzYsXG4gIGVuZDogMzUsXG4gIHBhZ2V1cDogMzMsXG4gIHBhZ2Vkb3duOiAzNCxcbiAgY2Fwc2xvY2s6IDIwLFxuICBudW1fMDogOTYsXG4gIG51bV8xOiA5NyxcbiAgbnVtXzI6IDk4LFxuICBudW1fMzogOTksXG4gIG51bV80OiAxMDAsXG4gIG51bV81OiAxMDEsXG4gIG51bV82OiAxMDIsXG4gIG51bV83OiAxMDMsXG4gIG51bV84OiAxMDQsXG4gIG51bV85OiAxMDUsXG4gIG51bV9tdWx0aXBseTogMTA2LFxuICBudW1fYWRkOiAxMDcsXG4gIG51bV9lbnRlcjogMTA4LFxuICBudW1fc3VidHJhY3Q6IDEwOSxcbiAgbnVtX2RlY2ltYWw6IDExMCxcbiAgbnVtX2RpdmlkZTogMTExLFxuICAn4oeqJzogMjAsXG4gICcsJzogMTg4LFxuICAnLic6IDE5MCxcbiAgJy8nOiAxOTEsXG4gICdgJzogMTkyLFxuICAnLSc6IGlzZmYgPyAxNzMgOiAxODksXG4gICc9JzogaXNmZiA/IDYxIDogMTg3LFxuICAnOyc6IGlzZmYgPyA1OSA6IDE4NixcbiAgJ1xcJyc6IDIyMixcbiAgJ1snOiAyMTksXG4gICddJzogMjIxLFxuICAnXFxcXCc6IDIyMFxufTsgLy8gTW9kaWZpZXIgS2V5c1xuXG52YXIgX21vZGlmaWVyID0ge1xuICAvLyBzaGlmdEtleVxuICAn4oenJzogMTYsXG4gIHNoaWZ0OiAxNixcbiAgLy8gYWx0S2V5XG4gICfijKUnOiAxOCxcbiAgYWx0OiAxOCxcbiAgb3B0aW9uOiAxOCxcbiAgLy8gY3RybEtleVxuICAn4oyDJzogMTcsXG4gIGN0cmw6IDE3LFxuICBjb250cm9sOiAxNyxcbiAgLy8gbWV0YUtleVxuICAn4oyYJzogOTEsXG4gIGNtZDogOTEsXG4gIGNvbW1hbmQ6IDkxXG59O1xudmFyIG1vZGlmaWVyTWFwID0ge1xuICAxNjogJ3NoaWZ0S2V5JyxcbiAgMTg6ICdhbHRLZXknLFxuICAxNzogJ2N0cmxLZXknLFxuICA5MTogJ21ldGFLZXknLFxuICBzaGlmdEtleTogMTYsXG4gIGN0cmxLZXk6IDE3LFxuICBhbHRLZXk6IDE4LFxuICBtZXRhS2V5OiA5MVxufTtcbnZhciBfbW9kcyA9IHtcbiAgMTY6IGZhbHNlLFxuICAxODogZmFsc2UsXG4gIDE3OiBmYWxzZSxcbiAgOTE6IGZhbHNlXG59O1xudmFyIF9oYW5kbGVycyA9IHt9OyAvLyBGMX5GMTIgc3BlY2lhbCBrZXlcblxuZm9yICh2YXIgayA9IDE7IGsgPCAyMDsgaysrKSB7XG4gIF9rZXlNYXBbXCJmXCIuY29uY2F0KGspXSA9IDExMSArIGs7XG59XG5cbnZhciBfZG93bktleXMgPSBbXTsgLy8g6K6w5b2V5pGB5LiL55qE57uR5a6a6ZSuXG5cbnZhciB3aW5MaXN0ZW5kRm9jdXMgPSBmYWxzZTsgLy8gd2luZG935piv5ZCm5bey57uP55uR5ZCs5LqGZm9jdXPkuovku7ZcblxudmFyIF9zY29wZSA9ICdhbGwnOyAvLyDpu5jorqTng63plK7ojIPlm7RcblxudmFyIGVsZW1lbnRIYXNCaW5kRXZlbnQgPSBbXTsgLy8g5bey57uR5a6a5LqL5Lu255qE6IqC54K56K6w5b2VXG4vLyDov5Tlm57plK7noIFcblxudmFyIGNvZGUgPSBmdW5jdGlvbiBjb2RlKHgpIHtcbiAgcmV0dXJuIF9rZXlNYXBbeC50b0xvd2VyQ2FzZSgpXSB8fCBfbW9kaWZpZXJbeC50b0xvd2VyQ2FzZSgpXSB8fCB4LnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKTtcbn07IC8vIOiuvue9ruiOt+WPluW9k+WJjeiMg+WbtO+8iOm7mOiupOS4uifmiYDmnIkn77yJXG5cblxuZnVuY3Rpb24gc2V0U2NvcGUoc2NvcGUpIHtcbiAgX3Njb3BlID0gc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluW9k+WJjeiMg+WbtFxuXG5cbmZ1bmN0aW9uIGdldFNjb3BlKCkge1xuICByZXR1cm4gX3Njb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5bmkYHkuIvnu5HlrprplK7nmoTplK7lgLxcblxuXG5mdW5jdGlvbiBnZXRQcmVzc2VkS2V5Q29kZXMoKSB7XG4gIHJldHVybiBfZG93bktleXMuc2xpY2UoMCk7XG59IC8vIOihqOWNleaOp+S7tuaOp+S7tuWIpOaWrSDov5Tlm54gQm9vbGVhblxuLy8gaG90a2V5IGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gZmlsdGVyIHJldHVybiB0cnVlXG5cblxuZnVuY3Rpb24gZmlsdGVyKGV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgdmFyIHRhZ05hbWUgPSB0YXJnZXQudGFnTmFtZTtcbiAgdmFyIGZsYWcgPSB0cnVlOyAvLyBpZ25vcmU6IGlzQ29udGVudEVkaXRhYmxlID09PSAndHJ1ZScsIDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4gd2hlbiByZWFkT25seSBzdGF0ZSBpcyBmYWxzZSwgPHNlbGVjdD5cblxuICBpZiAodGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlIHx8ICh0YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgdGFnTmFtZSA9PT0gJ1NFTEVDVCcpICYmICF0YXJnZXQucmVhZE9ubHkpIHtcbiAgICBmbGFnID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmxhZztcbn0gLy8g5Yik5pat5pGB5LiL55qE6ZSu5piv5ZCm5Li65p+Q5Liq6ZSu77yM6L+U5ZuedHJ1ZeaIluiAhWZhbHNlXG5cblxuZnVuY3Rpb24gaXNQcmVzc2VkKGtleUNvZGUpIHtcbiAgaWYgKHR5cGVvZiBrZXlDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGtleUNvZGUgPSBjb2RlKGtleUNvZGUpOyAvLyDovazmjaLmiJDplK7noIFcbiAgfVxuXG4gIHJldHVybiBfZG93bktleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTE7XG59IC8vIOW+queOr+WIoOmZpGhhbmRsZXJz5Lit55qE5omA5pyJIHNjb3BlKOiMg+WbtClcblxuXG5mdW5jdGlvbiBkZWxldGVTY29wZShzY29wZSwgbmV3U2NvcGUpIHtcbiAgdmFyIGhhbmRsZXJzO1xuICB2YXIgaTsgLy8g5rKh5pyJ5oyH5a6ac2NvcGXvvIzojrflj5ZzY29wZVxuXG4gIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gX2hhbmRsZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfaGFuZGxlcnMsIGtleSkpIHtcbiAgICAgIGhhbmRsZXJzID0gX2hhbmRsZXJzW2tleV07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChoYW5kbGVyc1tpXS5zY29wZSA9PT0gc2NvcGUpIGhhbmRsZXJzLnNwbGljZShpLCAxKTtlbHNlIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8g5aaC5p6cc2NvcGXooqvliKDpmaTvvIzlsIZzY29wZemHjee9ruS4umFsbFxuXG5cbiAgaWYgKGdldFNjb3BlKCkgPT09IHNjb3BlKSBzZXRTY29wZShuZXdTY29wZSB8fCAnYWxsJyk7XG59IC8vIOa4hemZpOS/rumlsOmUrlxuXG5cbmZ1bmN0aW9uIGNsZWFyTW9kaWZpZXIoZXZlbnQpIHtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7XG5cbiAgdmFyIGkgPSBfZG93bktleXMuaW5kZXhPZihrZXkpOyAvLyDku47liJfooajkuK3muIXpmaTmjInljovov4fnmoTplK5cblxuXG4gIGlmIChpID49IDApIHtcbiAgICBfZG93bktleXMuc3BsaWNlKGksIDEpO1xuICB9IC8vIOeJueauiuWkhOeQhiBjbW1hbmQg6ZSu77yM5ZyoIGNtbWFuZCDnu4TlkIjlv6vmjbfplK4ga2V5dXAg5Y+q5omn6KGM5LiA5qyh55qE6Zeu6aKYXG5cblxuICBpZiAoZXZlbnQua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbWV0YScpIHtcbiAgICBfZG93bktleXMuc3BsaWNlKDAsIF9kb3duS2V5cy5sZW5ndGgpO1xuICB9IC8vIOS/rumlsOmUriBzaGlmdEtleSBhbHRLZXkgY3RybEtleSAoY29tbWFuZHx8bWV0YUtleSkg5riF6ZmkXG5cblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSBmYWxzZTsgLy8g5bCG5L+u6aWw6ZSu6YeN572u5Li6ZmFsc2VcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5iaW5kKGtleXNJbmZvKSB7XG4gIC8vIHVuYmluZCgpLCB1bmJpbmQgYWxsIGtleXNcbiAgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGRlbGV0ZSBfaGFuZGxlcnNba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXNJbmZvKSkge1xuICAgIC8vIHN1cHBvcnQgbGlrZSA6IHVuYmluZChbe2tleTogJ2N0cmwrYScsIHNjb3BlOiAnczEnfSwge2tleTogJ2N0cmwtYScsIHNjb3BlOiAnczInLCBzcGxpdEtleTogJy0nfV0pXG4gICAga2V5c0luZm8uZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgaWYgKGluZm8ua2V5KSBlYWNoVW5iaW5kKGluZm8pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgdW5iaW5kKHtrZXk6ICdjdHJsK2EsIGN0cmwrYicsIHNjb3BlOidhYmMnfSlcbiAgICBpZiAoa2V5c0luZm8ua2V5KSBlYWNoVW5iaW5kKGtleXNJbmZvKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBvbGQgbWV0aG9kXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBzY29wZSA9IGFyZ3NbMF0sXG4gICAgICAgIG1ldGhvZCA9IGFyZ3NbMV07XG5cbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtZXRob2QgPSBzY29wZTtcbiAgICAgIHNjb3BlID0gJyc7XG4gICAgfVxuXG4gICAgZWFjaFVuYmluZCh7XG4gICAgICBrZXk6IGtleXNJbmZvLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBzcGxpdEtleTogJysnXG4gICAgfSk7XG4gIH1cbn0gLy8g6Kej6Zmk57uR5a6a5p+Q5Liq6IyD5Zu055qE5b+r5o236ZSuXG5cblxudmFyIGVhY2hVbmJpbmQgPSBmdW5jdGlvbiBlYWNoVW5iaW5kKF9yZWYpIHtcbiAgdmFyIGtleSA9IF9yZWYua2V5LFxuICAgICAgc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgbWV0aG9kID0gX3JlZi5tZXRob2QsXG4gICAgICBfcmVmJHNwbGl0S2V5ID0gX3JlZi5zcGxpdEtleSxcbiAgICAgIHNwbGl0S2V5ID0gX3JlZiRzcGxpdEtleSA9PT0gdm9pZCAwID8gJysnIDogX3JlZiRzcGxpdEtleTtcbiAgdmFyIG11bHRpcGxlS2V5cyA9IGdldEtleXMoa2V5KTtcbiAgbXVsdGlwbGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbktleSkge1xuICAgIHZhciB1bmJpbmRLZXlzID0gb3JpZ2luS2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICB2YXIgbGVuID0gdW5iaW5kS2V5cy5sZW5ndGg7XG4gICAgdmFyIGxhc3RLZXkgPSB1bmJpbmRLZXlzW2xlbiAtIDFdO1xuICAgIHZhciBrZXlDb2RlID0gbGFzdEtleSA9PT0gJyonID8gJyonIDogY29kZShsYXN0S2V5KTtcbiAgICBpZiAoIV9oYW5kbGVyc1trZXlDb2RlXSkgcmV0dXJuOyAvLyDliKTmlq3mmK/lkKbkvKDlhaXojIPlm7TvvIzmsqHmnInlsLHojrflj5bojIPlm7RcblxuICAgIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICB2YXIgbW9kcyA9IGxlbiA+IDEgPyBnZXRNb2RzKF9tb2RpZmllciwgdW5iaW5kS2V5cykgOiBbXTtcbiAgICBfaGFuZGxlcnNba2V5Q29kZV0gPSBfaGFuZGxlcnNba2V5Q29kZV0uZmlsdGVyKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgIC8vIOmAmui/h+WHveaVsOWIpOaWre+8jOaYr+WQpuino+mZpOe7keWumu+8jOWHveaVsOebuOetieebtOaOpei/lOWbnlxuICAgICAgdmFyIGlzTWF0Y2hpbmdNZXRob2QgPSBtZXRob2QgPyByZWNvcmQubWV0aG9kID09PSBtZXRob2QgOiB0cnVlO1xuICAgICAgcmV0dXJuICEoaXNNYXRjaGluZ01ldGhvZCAmJiByZWNvcmQuc2NvcGUgPT09IHNjb3BlICYmIGNvbXBhcmVBcnJheShyZWNvcmQubW9kcywgbW9kcykpO1xuICAgIH0pO1xuICB9KTtcbn07IC8vIOWvueebkeWQrOWvueW6lOW/q+aNt+mUrueahOWbnuiwg+WHveaVsOi/m+ihjOWkhOeQhlxuXG5cbmZ1bmN0aW9uIGV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlciwgc2NvcGUsIGVsZW1lbnQpIHtcbiAgaWYgKGhhbmRsZXIuZWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtb2RpZmllcnNNYXRjaDsgLy8g55yL5a6D5piv5ZCm5Zyo5b2T5YmN6IyD5Zu0XG5cbiAgaWYgKGhhbmRsZXIuc2NvcGUgPT09IHNjb3BlIHx8IGhhbmRsZXIuc2NvcGUgPT09ICdhbGwnKSB7XG4gICAgLy8g5qOA5p+l5piv5ZCm5Yy56YWN5L+u6aWw56ym77yI5aaC5p6c5pyJ6L+U5ZuedHJ1Ze+8iVxuICAgIG1vZGlmaWVyc01hdGNoID0gaGFuZGxlci5tb2RzLmxlbmd0aCA+IDA7XG5cbiAgICBmb3IgKHZhciB5IGluIF9tb2RzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCB5KSkge1xuICAgICAgICBpZiAoIV9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA+IC0xIHx8IF9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA9PT0gLTEpIHtcbiAgICAgICAgICBtb2RpZmllcnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyDosIPnlKjlpITnkIbnqIvluo/vvIzlpoLmnpzmmK/kv67ppbDplK7kuI3lgZrlpITnkIZcblxuXG4gICAgaWYgKGhhbmRsZXIubW9kcy5sZW5ndGggPT09IDAgJiYgIV9tb2RzWzE2XSAmJiAhX21vZHNbMThdICYmICFfbW9kc1sxN10gJiYgIV9tb2RzWzkxXSB8fCBtb2RpZmllcnNNYXRjaCB8fCBoYW5kbGVyLnNob3J0Y3V0ID09PSAnKicpIHtcbiAgICAgIGlmIChoYW5kbGVyLm1ldGhvZChldmVudCwgaGFuZGxlcikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNlIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDlpITnkIZrZXlkb3du5LqL5Lu2XG5cblxuZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIGFzdGVyaXNrID0gX2hhbmRsZXJzWycqJ107XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlOyAvLyDooajljZXmjqfku7bov4fmu6Qg6buY6K6k6KGo5Y2V5o6n5Lu25LiN6Kem5Y+R5b+r5o236ZSuXG5cbiAgaWYgKCFob3RrZXlzLmZpbHRlci5jYWxsKHRoaXMsIGV2ZW50KSkgcmV0dXJuOyAvLyBHZWNrbyhGaXJlZm94KeeahGNvbW1hbmTplK7lgLwyMjTvvIzlnKhXZWJraXQoQ2hyb21lKeS4reS/neaMgeS4gOiHtFxuICAvLyBXZWJraXTlt6blj7MgY29tbWFuZCDplK7lgLzkuI3kuIDmoLdcblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG4gIC8qKlxuICAgKiBDb2xsZWN0IGJvdW5kIGtleXNcbiAgICogSWYgYW4gSW5wdXQgTWV0aG9kIEVkaXRvciBpcyBwcm9jZXNzaW5nIGtleSBpbnB1dCBhbmQgdGhlIGV2ZW50IGlzIGtleWRvd24sIHJldHVybiAyMjkuXG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1MDQzOTM0L2lzLWl0LW9rLXRvLWlnbm9yZS1rZXlkb3duLWV2ZW50cy13aXRoLWtleWNvZGUtMjI5XG4gICAqIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1kb20vMjAxMEp1bFNlcC9hdHQtMDE4Mi9rZXlDb2RlLXNwZWMuaHRtbFxuICAgKi9cblxuICBpZiAoX2Rvd25LZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYga2V5ICE9PSAyMjkpIF9kb3duS2V5cy5wdXNoKGtleSk7XG4gIC8qKlxuICAgKiBKZXN0IHRlc3QgY2FzZXMgYXJlIHJlcXVpcmVkLlxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqL1xuXG4gIFsnY3RybEtleScsICdhbHRLZXknLCAnc2hpZnRLZXknLCAnbWV0YUtleSddLmZvckVhY2goZnVuY3Rpb24gKGtleU5hbWUpIHtcbiAgICB2YXIga2V5TnVtID0gbW9kaWZpZXJNYXBba2V5TmFtZV07XG5cbiAgICBpZiAoZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKGtleU51bSk7XG4gICAgfSBlbHNlIGlmICghZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA+IC0xKSB7XG4gICAgICBfZG93bktleXMuc3BsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSksIDEpO1xuICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PT0gJ21ldGFLZXknICYmIGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRml4IGlmIENvbW1hbmQgaXMgcHJlc3NlZDpcbiAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAqL1xuICAgICAgaWYgKCEoZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IF9kb3duS2V5cy5zbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IHRydWU7IC8vIOWwhueJueauiuWtl+espueahGtleeazqOWGjOWIsCBob3RrZXlzIOS4ilxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhc3RlcmlzaykgcmV0dXJuO1xuICB9IC8vIOWwhiBtb2RpZmllck1hcCDph4zpnaLnmoTkv67ppbDplK7nu5HlrprliLAgZXZlbnQg5LitXG5cblxuICBmb3IgKHZhciBlIGluIF9tb2RzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgZSkpIHtcbiAgICAgIF9tb2RzW2VdID0gZXZlbnRbbW9kaWZpZXJNYXBbZV1dO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvaG90a2V5cy9wdWxsLzEyOVxuICAgKiBUaGlzIHNvbHZlcyB0aGUgaXNzdWUgaW4gRmlyZWZveCBvbiBXaW5kb3dzIHdoZXJlIGhvdGtleXMgY29ycmVzcG9uZGluZyB0byBzcGVjaWFsIGNoYXJhY3RlcnMgd291bGQgbm90IHRyaWdnZXIuXG4gICAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBjdHJsK2FsdCttIG9uIGEgU3dlZGlzaCBrZXlib2FyZCB3aGljaCBpcyB1c2VkIHRvIHR5cGUgzrwuXG4gICAqIEJyb3dzZXIgc3VwcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1rZXlib2FyZGV2ZW50LWdldG1vZGlmaWVyc3RhdGVcbiAgICovXG5cblxuICBpZiAoZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAhKGV2ZW50LmFsdEtleSAmJiAhZXZlbnQuY3RybEtleSkgJiYgZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSgnQWx0R3JhcGgnKSkge1xuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxNykgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxNyk7XG4gICAgfVxuXG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE4KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE4KTtcbiAgICB9XG5cbiAgICBfbW9kc1sxN10gPSB0cnVlO1xuICAgIF9tb2RzWzE4XSA9IHRydWU7XG4gIH0gLy8g6I635Y+W6IyD5Zu0IOm7mOiupOS4uiBgYWxsYFxuXG5cbiAgdmFyIHNjb3BlID0gZ2V0U2NvcGUoKTsgLy8g5a+55Lu75L2V5b+r5o236ZSu6YO96ZyA6KaB5YGa55qE5aSE55CGXG5cbiAgaWYgKGFzdGVyaXNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3Rlcmlzay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzdGVyaXNrW2ldLnNjb3BlID09PSBzY29wZSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIGFzdGVyaXNrW2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBhc3Rlcmlza1tpXS5rZXl1cCkpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCBhc3Rlcmlza1tpXSwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBrZXkg5LiN5ZyoIF9oYW5kbGVycyDkuK3ov5Tlm55cblxuXG4gIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSByZXR1cm47XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9oYW5kbGVyc1trZXldLmxlbmd0aDsgX2krKykge1xuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5dXApIHtcbiAgICAgIGlmIChfaGFuZGxlcnNba2V5XVtfaV0ua2V5KSB7XG4gICAgICAgIHZhciByZWNvcmQgPSBfaGFuZGxlcnNba2V5XVtfaV07XG4gICAgICAgIHZhciBzcGxpdEtleSA9IHJlY29yZC5zcGxpdEtleTtcbiAgICAgICAgdmFyIGtleVNob3J0Y3V0ID0gcmVjb3JkLmtleS5zcGxpdChzcGxpdEtleSk7XG4gICAgICAgIHZhciBfZG93bktleXNDdXJyZW50ID0gW107IC8vIOiusOW9leW9k+WJjeaMiemUrumUruWAvFxuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwga2V5U2hvcnRjdXQubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICBfZG93bktleXNDdXJyZW50LnB1c2goY29kZShrZXlTaG9ydGN1dFthXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9kb3duS2V5c0N1cnJlbnQuc29ydCgpLmpvaW4oJycpID09PSBfZG93bktleXMuc29ydCgpLmpvaW4oJycpKSB7XG4gICAgICAgICAgLy8g5om+5Yiw5aSE55CG5YaF5a65XG4gICAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCByZWNvcmQsIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDliKTmlq0gZWxlbWVudCDmmK/lkKblt7Lnu4/nu5Hlrprkuovku7ZcblxuXG5mdW5jdGlvbiBpc0VsZW1lbnRCaW5kKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnRIYXNCaW5kRXZlbnQuaW5kZXhPZihlbGVtZW50KSA+IC0xO1xufVxuXG5mdW5jdGlvbiBob3RrZXlzKGtleSwgb3B0aW9uLCBtZXRob2QpIHtcbiAgX2Rvd25LZXlzID0gW107XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhrZXkpOyAvLyDpnIDopoHlpITnkIbnmoTlv6vmjbfplK7liJfooahcblxuICB2YXIgbW9kcyA9IFtdO1xuICB2YXIgc2NvcGUgPSAnYWxsJzsgLy8gc2NvcGXpu5jorqTkuLphbGzvvIzmiYDmnInojIPlm7Tpg73mnInmlYhcblxuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50OyAvLyDlv6vmjbfplK7kuovku7bnu5HlrproioLngrlcblxuICB2YXIgaSA9IDA7XG4gIHZhciBrZXl1cCA9IGZhbHNlO1xuICB2YXIga2V5ZG93biA9IHRydWU7XG4gIHZhciBzcGxpdEtleSA9ICcrJztcbiAgdmFyIGNhcHR1cmUgPSBmYWxzZTsgLy8g5a+55Li66K6+5a6a6IyD5Zu055qE5Yik5patXG5cbiAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBtZXRob2QgPSBvcHRpb247XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgaWYgKG9wdGlvbi5zY29wZSkgc2NvcGUgPSBvcHRpb24uc2NvcGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uZWxlbWVudCkgZWxlbWVudCA9IG9wdGlvbi5lbGVtZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleXVwKSBrZXl1cCA9IG9wdGlvbi5rZXl1cDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXlkb3duICE9PSB1bmRlZmluZWQpIGtleWRvd24gPSBvcHRpb24ua2V5ZG93bjsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5jYXB0dXJlICE9PSB1bmRlZmluZWQpIGNhcHR1cmUgPSBvcHRpb24uY2FwdHVyZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uc3BsaXRLZXkgPT09ICdzdHJpbmcnKSBzcGxpdEtleSA9IG9wdGlvbi5zcGxpdEtleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSBzY29wZSA9IG9wdGlvbjsgLy8g5a+55LqO5q+P5Liq5b+r5o236ZSu6L+b6KGM5aSE55CGXG5cbiAgZm9yICg7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXS5zcGxpdChzcGxpdEtleSk7IC8vIOaMiemUruWIl+ihqFxuXG4gICAgbW9kcyA9IFtdOyAvLyDlpoLmnpzmmK/nu4TlkIjlv6vmjbfplK7lj5blvpfnu4TlkIjlv6vmjbfplK5cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMSkgbW9kcyA9IGdldE1vZHMoX21vZGlmaWVyLCBrZXkpOyAvLyDlsIbpnZ7kv67ppbDplK7ovazljJbkuLrplK7noIFcblxuICAgIGtleSA9IGtleVtrZXkubGVuZ3RoIC0gMV07XG4gICAga2V5ID0ga2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGtleSk7IC8vICrooajnpLrljLnphY3miYDmnInlv6vmjbfplK5cbiAgICAvLyDliKTmlq1rZXnmmK/lkKblnKhfaGFuZGxlcnPkuK3vvIzkuI3lnKjlsLHotYvkuIDkuKrnqbrmlbDnu4RcblxuICAgIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSBfaGFuZGxlcnNba2V5XSA9IFtdO1xuXG4gICAgX2hhbmRsZXJzW2tleV0ucHVzaCh7XG4gICAgICBrZXl1cDoga2V5dXAsXG4gICAgICBrZXlkb3duOiBrZXlkb3duLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbW9kczogbW9kcyxcbiAgICAgIHNob3J0Y3V0OiBrZXlzW2ldLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBrZXk6IGtleXNbaV0sXG4gICAgICBzcGxpdEtleTogc3BsaXRLZXksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gLy8g5Zyo5YWo5bGAZG9jdW1lbnTkuIrorr7nva7lv6vmjbfplK5cblxuXG4gIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRWxlbWVudEJpbmQoZWxlbWVudCkgJiYgd2luZG93KSB7XG4gICAgZWxlbWVudEhhc0JpbmRFdmVudC5wdXNoKGVsZW1lbnQpO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgIH0sIGNhcHR1cmUpO1xuXG4gICAgaWYgKCF3aW5MaXN0ZW5kRm9jdXMpIHtcbiAgICAgIHdpbkxpc3RlbmRGb2N1cyA9IHRydWU7XG4gICAgICBhZGRFdmVudCh3aW5kb3csICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gW107XG4gICAgICB9LCBjYXB0dXJlKTtcbiAgICB9XG5cbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5dXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgICBjbGVhck1vZGlmaWVyKGUpO1xuICAgIH0sIGNhcHR1cmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIoc2hvcnRjdXQpIHtcbiAgdmFyIHNjb3BlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnYWxsJztcbiAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZGF0YSA9IF9oYW5kbGVyc1trZXldLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnNjb3BlID09PSBzY29wZSAmJiBpdGVtLnNob3J0Y3V0ID09PSBzaG9ydGN1dDtcbiAgICB9KTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEubWV0aG9kKSB7XG4gICAgICBkYXRhLm1ldGhvZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBfYXBpID0ge1xuICBzZXRTY29wZTogc2V0U2NvcGUsXG4gIGdldFNjb3BlOiBnZXRTY29wZSxcbiAgZGVsZXRlU2NvcGU6IGRlbGV0ZVNjb3BlLFxuICBnZXRQcmVzc2VkS2V5Q29kZXM6IGdldFByZXNzZWRLZXlDb2RlcyxcbiAgaXNQcmVzc2VkOiBpc1ByZXNzZWQsXG4gIGZpbHRlcjogZmlsdGVyLFxuICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICB1bmJpbmQ6IHVuYmluZCxcbiAga2V5TWFwOiBfa2V5TWFwLFxuICBtb2RpZmllcjogX21vZGlmaWVyLFxuICBtb2RpZmllck1hcDogbW9kaWZpZXJNYXBcbn07XG5cbmZvciAodmFyIGEgaW4gX2FwaSkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9hcGksIGEpKSB7XG4gICAgaG90a2V5c1thXSA9IF9hcGlbYV07XG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBfaG90a2V5cyA9IHdpbmRvdy5ob3RrZXlzO1xuXG4gIGhvdGtleXMubm9Db25mbGljdCA9IGZ1bmN0aW9uIChkZWVwKSB7XG4gICAgaWYgKGRlZXAgJiYgd2luZG93LmhvdGtleXMgPT09IGhvdGtleXMpIHtcbiAgICAgIHdpbmRvdy5ob3RrZXlzID0gX2hvdGtleXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdGtleXM7XG4gIH07XG5cbiAgd2luZG93LmhvdGtleXMgPSBob3RrZXlzO1xufVxuXG5leHBvcnQgeyBob3RrZXlzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBob3RrZXlzIGZyb20gJ2hvdGtleXMtanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIGlzSG90a2V5UHJlc3NlZCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgdmVyc2lvbiA0LlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlSXNIb3RrZXlQcmVzc2VkKCkge1xuICByZXR1cm4gaG90a2V5cy5pc1ByZXNzZWQ7XG59XG5cbmhvdGtleXMuZmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciB0YWdGaWx0ZXIgPSBmdW5jdGlvbiB0YWdGaWx0ZXIoX3JlZiwgZW5hYmxlT25UYWdzKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgdmFyIHRhcmdldFRhZ05hbWUgPSB0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWU7XG4gIHJldHVybiBCb29sZWFuKHRhcmdldFRhZ05hbWUgJiYgZW5hYmxlT25UYWdzICYmIGVuYWJsZU9uVGFncy5pbmNsdWRlcyh0YXJnZXRUYWdOYW1lKSk7XG59O1xuXG52YXIgaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCA9IGZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoZXYpIHtcbiAgcmV0dXJuIHRhZ0ZpbHRlcihldiwgWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXSk7XG59O1xuXG5mdW5jdGlvbiB1c2VIb3RrZXlzKGtleXMsIGNhbGxiYWNrLCBvcHRpb25zLCBkZXBzKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBkZXBzID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIF9yZWYyID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgIGVuYWJsZU9uVGFncyA9IF9yZWYyLmVuYWJsZU9uVGFncyxcbiAgICAgIGZpbHRlciA9IF9yZWYyLmZpbHRlcixcbiAgICAgIGtleXVwID0gX3JlZjIua2V5dXAsXG4gICAgICBrZXlkb3duID0gX3JlZjIua2V5ZG93bixcbiAgICAgIF9yZWYyJGZpbHRlclByZXZlbnREZSA9IF9yZWYyLmZpbHRlclByZXZlbnREZWZhdWx0LFxuICAgICAgZmlsdGVyUHJldmVudERlZmF1bHQgPSBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUsXG4gICAgICBfcmVmMiRlbmFibGVkID0gX3JlZjIuZW5hYmxlZCxcbiAgICAgIGVuYWJsZWQgPSBfcmVmMiRlbmFibGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZW5hYmxlZCxcbiAgICAgIF9yZWYyJGVuYWJsZU9uQ29udGVudCA9IF9yZWYyLmVuYWJsZU9uQ29udGVudEVkaXRhYmxlLFxuICAgICAgZW5hYmxlT25Db250ZW50RWRpdGFibGUgPSBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZW5hYmxlT25Db250ZW50O1xuXG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7IC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIGlmIHRoZSBicm93c2VycyBkZWZhdWx0IGJlaGF2aW9yIGlzIHByZXZlbnRlZC5cblxuICB2YXIgbWVtb2lzZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpIHtcbiAgICB2YXIgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LCBfcmVmJGN1cnJlbnQ7XG5cbiAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoa2V5Ym9hcmRFdmVudCkpIHtcbiAgICAgIHJldHVybiAhZmlsdGVyUHJldmVudERlZmF1bHQ7XG4gICAgfSAvLyBDaGVjayB3aGV0aGVyIHRoZSBob3RrZXlzIHdhcyB0cmlnZ2VyZWQgaW5zaWRlIGFuIGlucHV0IGFuZCB0aGF0IGlucHV0IGlzIGVuYWJsZWQgb3IgaWYgaXQgd2FzIHRyaWdnZXJlZCBieSBhIGNvbnRlbnQgZWRpdGFibGUgdGFnIGFuZCBpdCBpcyBlbmFibGVkLlxuXG5cbiAgICBpZiAoaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChrZXlib2FyZEV2ZW50KSAmJiAhdGFnRmlsdGVyKGtleWJvYXJkRXZlbnQsIGVuYWJsZU9uVGFncykgfHwgKF9rZXlib2FyZEV2ZW50JHRhcmdldCA9IGtleWJvYXJkRXZlbnQudGFyZ2V0KSAhPSBudWxsICYmIF9rZXlib2FyZEV2ZW50JHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhZW5hYmxlT25Db250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZWYuY3VycmVudCA9PT0gbnVsbCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSByZWYuY3VycmVudCB8fCAoX3JlZiRjdXJyZW50ID0gcmVmLmN1cnJlbnQpICE9IG51bGwgJiYgX3JlZiRjdXJyZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICBjYWxsYmFjayhrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBkZXBzID8gW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdLmNvbmNhdChkZXBzKSA6IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHRoaXMgY2FzZSBrZXlkb3duIGlzIGxpa2VseSB1bmRlZmluZWQsIHNvIHdlIHNldCBpdCB0byBmYWxzZSwgc2luY2UgaG90a2V5cyBuZWVkcyB0aGUgYGtleWRvd25gIGtleSB0byBoYXZlIGEgdmFsdWUuXG5cblxuICAgIGlmIChrZXl1cCAmJiBrZXlkb3duICE9PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmtleWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBob3RrZXlzKGtleXMsIG9wdGlvbnMgfHwge30sIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW21lbW9pc2VkQ2FsbGJhY2ssIGtleXMsIGVuYWJsZWRdKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleXMuaXNQcmVzc2VkO1xuXG5leHBvcnQgeyBpc0hvdGtleVByZXNzZWQsIHVzZUhvdGtleXMsIHVzZUlzSG90a2V5UHJlc3NlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcy5tYXBcbiIsImltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpc1JhbmdlVmlzaWJsZShfcmVmKSB7XG4gIHZhciBsYXN0UmVuZGVyZWRTdGFydEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgcmV0dXJuICEoc3RhcnRJbmRleCA+IGxhc3RSZW5kZXJlZFN0b3BJbmRleCB8fCBzdG9wSW5kZXggPCBsYXN0UmVuZGVyZWRTdGFydEluZGV4KTtcbn1cblxuZnVuY3Rpb24gc2NhbkZvclVubG9hZGVkUmFuZ2VzKF9yZWYpIHtcbiAgdmFyIGlzSXRlbUxvYWRlZCA9IF9yZWYuaXNJdGVtTG9hZGVkLFxuICAgICAgaXRlbUNvdW50ID0gX3JlZi5pdGVtQ291bnQsXG4gICAgICBtaW5pbXVtQmF0Y2hTaXplID0gX3JlZi5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgc3RhcnRJbmRleCA9IF9yZWYuc3RhcnRJbmRleCxcbiAgICAgIHN0b3BJbmRleCA9IF9yZWYuc3RvcEluZGV4O1xuXG4gIHZhciB1bmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gIHZhciByYW5nZVN0YXJ0SW5kZXggPSBudWxsO1xuICB2YXIgcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuXG4gIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0SW5kZXg7IF9pbmRleCA8PSBzdG9wSW5kZXg7IF9pbmRleCsrKSB7XG4gICAgdmFyIGxvYWRlZCA9IGlzSXRlbUxvYWRlZChfaW5kZXgpO1xuXG4gICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgIHJhbmdlU3RvcEluZGV4ID0gX2luZGV4O1xuICAgICAgaWYgKHJhbmdlU3RhcnRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICByYW5nZVN0YXJ0SW5kZXggPSBfaW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyYW5nZVN0b3BJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcblxuICAgICAgcmFuZ2VTdGFydEluZGV4ID0gcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIDpyYW5nZVN0b3BJbmRleCBpcyBub3QgbnVsbCBpdCBtZWFucyB3ZSBoYXZlbid0IHJhbiBvdXQgb2YgdW5sb2FkZWQgcm93cy5cbiAgLy8gU2NhbiBmb3J3YXJkIHRvIHRyeSBmaWxsaW5nIG91ciA6bWluaW11bUJhdGNoU2l6ZS5cbiAgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgdmFyIHBvdGVudGlhbFN0b3BJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KHJhbmdlU3RvcEluZGV4LCByYW5nZVN0YXJ0SW5kZXggKyBtaW5pbXVtQmF0Y2hTaXplIC0gMSksIGl0ZW1Db3VudCAtIDEpO1xuXG4gICAgZm9yICh2YXIgX2luZGV4MiA9IHJhbmdlU3RvcEluZGV4ICsgMTsgX2luZGV4MiA8PSBwb3RlbnRpYWxTdG9wSW5kZXg7IF9pbmRleDIrKykge1xuICAgICAgaWYgKCFpc0l0ZW1Mb2FkZWQoX2luZGV4MikpIHtcbiAgICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXgyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcbiAgfVxuXG4gIC8vIENoZWNrIHRvIHNlZSBpZiBvdXIgZmlyc3QgcmFuZ2UgZW5kZWQgcHJlbWF0dXJlbHkuXG4gIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc2NhbiBiYWNrd2FyZHMgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAodW5sb2FkZWRSYW5nZXMubGVuZ3RoKSB7XG4gICAgd2hpbGUgKHVubG9hZGVkUmFuZ2VzWzFdIC0gdW5sb2FkZWRSYW5nZXNbMF0gKyAxIDwgbWluaW11bUJhdGNoU2l6ZSAmJiB1bmxvYWRlZFJhbmdlc1swXSA+IDApIHtcbiAgICAgIHZhciBfaW5kZXgzID0gdW5sb2FkZWRSYW5nZXNbMF0gLSAxO1xuXG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgzKSkge1xuICAgICAgICB1bmxvYWRlZFJhbmdlc1swXSA9IF9pbmRleDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5sb2FkZWRSYW5nZXM7XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cbnZhciBpbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07XG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG52YXIgSW5maW5pdGVMb2FkZXIgPSBmdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoSW5maW5pdGVMb2FkZXIsIF9QdXJlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBJbmZpbml0ZUxvYWRlcigpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBJbmZpbml0ZUxvYWRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9yZWYgPSBJbmZpbml0ZUxvYWRlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEluZmluaXRlTG9hZGVyKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSAtMSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IC0xLCBfdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdLCBfdGhpcy5fb25JdGVtc1JlbmRlcmVkID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgdmlzaWJsZVN0YXJ0SW5kZXggPSBfcmVmMi52aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4ID0gX3JlZjIudmlzaWJsZVN0b3BJbmRleDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIodmlzaWJsZVN0YXJ0SW5kZXgpIHx8ICFpc0ludGVnZXIodmlzaWJsZVN0b3BJbmRleCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgb25JdGVtc1JlbmRlcmVkIHNpZ25hdHVyZTsgcGxlYXNlIHJlZmVyIHRvIEluZmluaXRlTG9hZGVyIGRvY3VtZW50YXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmxvYWRNb3JlUm93cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW5maW5pdGVMb2FkZXIgXCJsb2FkTW9yZVJvd3NcIiBwcm9wIGhhcyBiZWVuIHJlbmFtZWQgdG8gXCJsb2FkTW9yZUl0ZW1zXCIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSB2aXNpYmxlU3RhcnRJbmRleDtcbiAgICAgIF90aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXggPSB2aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBfdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh2aXNpYmxlU3RhcnRJbmRleCwgdmlzaWJsZVN0b3BJbmRleCk7XG4gICAgfSwgX3RoaXMuX3NldFJlZiA9IGZ1bmN0aW9uIChsaXN0UmVmKSB7XG4gICAgICBfdGhpcy5fbGlzdFJlZiA9IGxpc3RSZWY7XG4gICAgfSwgX3RlbXApLCBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIGNyZWF0ZUNsYXNzKEluZmluaXRlTG9hZGVyLCBbe1xuICAgIGtleTogJ3Jlc2V0bG9hZE1vcmVJdGVtc0NhY2hlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUoKSB7XG4gICAgICB2YXIgYXV0b1JlbG9hZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSBbXTtcblxuICAgICAgaWYgKGF1dG9SZWxvYWQpIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh0aGlzLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LCB0aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodGhpcy5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGxpc3QgcmVmOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG5cblxuICAgICAgcmV0dXJuIGNoaWxkcmVuKHtcbiAgICAgICAgb25JdGVtc1JlbmRlcmVkOiB0aGlzLl9vbkl0ZW1zUmVuZGVyZWQsXG4gICAgICAgIHJlZjogdGhpcy5fc2V0UmVmXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZW5zdXJlUm93c0xvYWRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9lbnN1cmVSb3dzTG9hZGVkKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNJdGVtTG9hZGVkID0gX3Byb3BzLmlzSXRlbUxvYWRlZCxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfcHJvcHMuaXRlbUNvdW50LFxuICAgICAgICAgIF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9IF9wcm9wcy5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcHJvcHMkbWluaW11bUJhdGNoU2kgPT09IHVuZGVmaW5lZCA/IDEwIDogX3Byb3BzJG1pbmltdW1CYXRjaFNpLFxuICAgICAgICAgIF9wcm9wcyR0aHJlc2hvbGQgPSBfcHJvcHMudGhyZXNob2xkLFxuICAgICAgICAgIHRocmVzaG9sZCA9IF9wcm9wcyR0aHJlc2hvbGQgPT09IHVuZGVmaW5lZCA/IDE1IDogX3Byb3BzJHRocmVzaG9sZDtcblxuXG4gICAgICB2YXIgdW5sb2FkZWRSYW5nZXMgPSBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoe1xuICAgICAgICBpc0l0ZW1Mb2FkZWQ6IGlzSXRlbUxvYWRlZCxcbiAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgIG1pbmltdW1CYXRjaFNpemU6IG1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgIHN0YXJ0SW5kZXg6IE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSB0aHJlc2hvbGQpLFxuICAgICAgICBzdG9wSW5kZXg6IE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIHRocmVzaG9sZClcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIGxvYWQtcm93cyB1bmxlc3MgcmFuZ2UgaGFzIGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpcyBtYXliZSBuaWNlIHRvIGRvLlxuICAgICAgaWYgKHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMubGVuZ3RoICE9PSB1bmxvYWRlZFJhbmdlcy5sZW5ndGggfHwgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5zb21lKGZ1bmN0aW9uIChzdGFydE9yU3RvcCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHVubG9hZGVkUmFuZ2VzW2luZGV4XSAhPT0gc3RhcnRPclN0b3A7XG4gICAgICB9KSkge1xuICAgICAgICB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gdW5sb2FkZWRSYW5nZXM7XG4gICAgICAgIHRoaXMuX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2xvYWRVbmxvYWRlZFJhbmdlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9sb2FkVW5sb2FkZWRSYW5nZXModW5sb2FkZWRSYW5nZXMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBsb2FkTW9yZVJvd3Mgd2FzIHJlbmFtZWQgdG8gbG9hZE1vcmVJdGVtcyBpbiB2MS4wLjM7IHdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wXG4gICAgICB2YXIgbG9hZE1vcmVJdGVtcyA9IHRoaXMucHJvcHMubG9hZE1vcmVJdGVtcyB8fCB0aGlzLnByb3BzLmxvYWRNb3JlUm93cztcblxuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHVubG9hZGVkUmFuZ2VzW2ldO1xuICAgICAgICB2YXIgc3RvcEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaSArIDFdO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IGxvYWRNb3JlSXRlbXMoc3RhcnRJbmRleCwgc3RvcEluZGV4KTtcbiAgICAgICAgaWYgKHByb21pc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSB2aXNpYmxlIHJvd3MgaWYgYW55IG9mIHRoZW0gaGF2ZSBqdXN0IGJlZW4gbG9hZGVkLlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgd2lsbCByZW1haW4gaW4gdGhlaXIgdW5sb2FkZWQgdmlzdWFsIHN0YXRlLlxuICAgICAgICAgICAgaWYgKGlzUmFuZ2VWaXNpYmxlKHtcbiAgICAgICAgICAgICAgbGFzdFJlbmRlcmVkU3RhcnRJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXg6IF90aGlzMi5fbGFzdFJlbmRlcmVkU3RvcEluZGV4LFxuICAgICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgICBzdG9wSW5kZXg6IHN0b3BJbmRleFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGFuIHVubW91bnQgd2hpbGUgcHJvbWlzZXMgYXJlIHN0aWxsIGluIGZsaWdodC5cbiAgICAgICAgICAgICAgaWYgKF90aGlzMi5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gUmVzaXplIGNhY2hlZCByb3cgc2l6ZXMgZm9yIFZhcmlhYmxlU2l6ZUxpc3QsXG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHJlLXJlbmRlciB0aGUgbGlzdC5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLnJlc2V0QWZ0ZXJJbmRleChzdGFydEluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBIQUNLIHJlc2V0IHRlbXBvcmFyaWx5IGNhY2hlZCBpdGVtIHN0eWxlcyB0byBmb3JjZSBQdXJlQ29tcG9uZW50IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBncm9zcywgYnV0IEknbSBva2F5IHdpdGggaXQgZm9yIG5vdy5cbiAgICAgICAgICAgICAgICAvLyBEb24ndCBqdWRnZSBtZS5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVubG9hZGVkUmFuZ2VzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gSW5maW5pdGVMb2FkZXI7XG59KFB1cmVDb21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBJbmZpbml0ZUxvYWRlcjtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59IiwidmFyIHNhZmVJc05hTiA9IE51bWJlci5pc05hTiB8fFxuICAgIGZ1bmN0aW9uIHBvbnlmaWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZTtcbiAgICB9O1xuZnVuY3Rpb24gaXNFcXVhbChmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKGZpcnN0ID09PSBzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzYWZlSXNOYU4oZmlyc3QpICYmIHNhZmVJc05hTihzZWNvbmQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgICBpZiAobmV3SW5wdXRzLmxlbmd0aCAhPT0gbGFzdElucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0lucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXF1YWwobmV3SW5wdXRzW2ldLCBsYXN0SW5wdXRzW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplT25lKHJlc3VsdEZuLCBpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gYXJlSW5wdXRzRXF1YWw7IH1cbiAgICB2YXIgbGFzdFRoaXM7XG4gICAgdmFyIGxhc3RBcmdzID0gW107XG4gICAgdmFyIGxhc3RSZXN1bHQ7XG4gICAgdmFyIGNhbGxlZE9uY2UgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGVkT25jZSAmJiBsYXN0VGhpcyA9PT0gdGhpcyAmJiBpc0VxdWFsKG5ld0FyZ3MsIGxhc3RBcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0QXJncyA9IG5ld0FyZ3M7XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVPbmU7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UnO1xuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcbnZhciBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBub3cgPSBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA/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/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoKHNpemUgKyBzY3JvbGxPZmZzZXQgLSBvZmZzZXQpIC8gaXRlbVNpemUpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUl0ZW1zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcykgey8vIE5vb3BcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNykge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWY3Lml0ZW1TaXplO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAoaXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemUpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBQdWxsZWQgZnJvbSByZWFjdC1jb21wYXRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9ibG9iLzdjNWRlMDBlN2M4NWUyZmZkMDExYmYzYWYwMjg5OWI2M2Y2OTlkM2Evc3JjL2luZGV4LmpzI0wzNDlcbmZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKHByZXYsIG5leHQpIHtcbiAgZm9yICh2YXIgYXR0cmlidXRlIGluIHByZXYpIHtcbiAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbmV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIF9hdHRyaWJ1dGUgaW4gbmV4dCkge1xuICAgIGlmIChwcmV2W19hdHRyaWJ1dGVdICE9PSBuZXh0W19hdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZVwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wic3R5bGVcIl07XG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0bWVtb1xuXG5mdW5jdGlvbiBhcmVFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0eWxlID0gcHJldlByb3BzLnN0eWxlLFxuICAgICAgcHJldlJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcmV2UHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgdmFyIG5leHRTdHlsZSA9IG5leHRQcm9wcy5zdHlsZSxcbiAgICAgIG5leHRSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UobmV4dFByb3BzLCBfZXhjbHVkZWQyKTtcblxuICByZXR1cm4gIXNoYWxsb3dEaWZmZXJzKHByZXZTdHlsZSwgbmV4dFN0eWxlKSAmJiAhc2hhbGxvd0RpZmZlcnMocHJldlJlc3QsIG5leHRSZXN0KTtcbn1cblxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcblxuZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gIHJldHVybiAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpO1xufVxuXG5leHBvcnQgeyBGaXhlZFNpemVHcmlkLCBGaXhlZFNpemVMaXN0LCBWYXJpYWJsZVNpemVHcmlkLCBWYXJpYWJsZVNpemVMaXN0LCBhcmVFcXVhbCwgc2hvdWxkQ29tcG9uZW50VXBkYXRlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20uanMubWFwXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIEJ1dHRvblByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gIG9uUG9pbnRlckRvd24/OiAoZXZlbnQ6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwibGVmdFwiIHwgXCJyaWdodFwiPjtcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG9uUG9pbnRlckRvd24sXG4gIGNvbnRhaW5lclJlZixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSxcbn06IEJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBvblBvaW50ZXJEb3duPXtvblBvaW50ZXJEb3dufVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uIH0gZnJvbSBcIi4vQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uQmFkZ2UubW9kdWxlLmNzc1wiO1xuXG50eXBlIEJ1dHRvbkJhZGdlUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQnV0dG9uQmFkZ2UoeyBjaGlsZHJlbiwgaW52ZXJ0ZWQgPSBmYWxzZSwgY2xhc3NOYW1lIH06IEJ1dHRvbkJhZGdlUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5idXR0b25CYWRnZSwge1tzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZH0sIGNsYXNzTmFtZV0pfT57Y2hpbGRyZW59PC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhZGdlO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25CYWRnZSB9IGZyb20gXCIuL0J1dHRvbkJhZGdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuXG50eXBlIEJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gICAgICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBCdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc2l6ZSxcbiAgY29udGFpbmVyUmVmLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgLi4ucHJvcHNcbn06IEJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25MaW5rO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25MaW5rIH0gZnJvbSBcIi4vQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuXG50eXBlIENoZWNrYm94UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpemU/OiBTaXplO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIHBsYWNlaG9sZGVyLFxuICBjaGVja2VkLFxuICBkaXNhYmxlZCxcbiAgbmFtZSxcbiAgY2xhc3NOYW1lLFxuICBpbmRldGVybWluYXRlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG59OiBDaGVja2JveFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TGFiZWwgdmFsdWU9e2xhYmVsfT5cbiAgICAgIDxpbnB1dFxuICAgICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPXsoaW5wdXRSZWYpID0+IHtcbiAgICAgICAgICBpZiAoaW5wdXRSZWYpIHtcbiAgICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY2hlY2tib3gsIGNsYXNzTmFtZSwgc3R5bGVzW3NpemVdXSl9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAvPlxuICAgIDwvTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGVja2JveCB9IGZyb20gXCIuL0NoZWNrYm94XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbG9yU3dhdGNoIH0gZnJvbSBcIi4uL0NvbG9yU3dhdGNoXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yUGlja2VyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JQaWNrZXJQcm9wcyA9IHtcbiAgY29sb3JzOiBDb2xvcltdO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBkaXJlY3Rpb24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcbiAgb25TZWxlY3Q6IChjb2xvcjogQ29sb3IpID0+IHZvaWQ7XG4gIHNlbGVjdGVkQ29sb3I/OiBDb2xvcjtcbiAgY2FuVG9nZ2xlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIENvbG9yUGlja2VyKHtcbiAgY29sb3JzLFxuICBjb250YWluZXJSZWYsXG4gIG9uU2VsZWN0LFxuICBzZWxlY3RlZENvbG9yLFxuICBkaXJlY3Rpb24gPSBcInZlcnRpY2FsXCIsXG4gIGNhblRvZ2dsZSA9IGZhbHNlLFxufTogQ29sb3JQaWNrZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbG9yUGlja2VyLCBzdHlsZXNbZGlyZWN0aW9uXV0pfVxuICAgID5cbiAgICAgIHtjb2xvcnMubWFwKChjb2xvcjogQ29sb3IpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ub2dnbGUgJiYgY29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXkpIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvblNlbGVjdChjb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPENvbG9yU3dhdGNoXG4gICAgICAgICAgICBrZXk9e2NvbG9yLmtleX1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2NvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JQaWNrZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yUGlja2VyIH0gZnJvbSBcIi4vQ29sb3JQaWNrZXJcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclN3YXRjaC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xvciwgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIENvbG9yU3dhdGNoUHJvcHMgPSB7XG4gIGNvbG9yOiBDb2xvcjtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIENvbG9yU3dhdGNoKHtcbiAgY29sb3IsXG4gIGNvbnRhaW5lclJlZixcbiAgaXNTZWxlY3RlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgb25DbGljayxcbn06IENvbG9yU3dhdGNoUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29sb3JTd2F0Y2gsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc1NlbGVjdGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBkYXRhLXRlc3RpZD1cImNvbG9yLXN3YXRjaFwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvci5oZXhDb2RlIH19XG4gICAgPlxuICAgICAge2NvbG9yLmxhYmVsICYmIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNyT25seX0+e2BTZWxlY3QgJHtjb2xvci5sYWJlbH0gY29sb3JgfTwvc3Bhbj59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yU3dhdGNoO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclN3YXRjaCB9IGZyb20gXCIuL0NvbG9yU3dhdGNoXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuLi9Nb2RhbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ29uZmlybWF0aW9uTW9kYWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBidXR0b25zTGVmdD86IFJlYWN0RWxlbWVudFtdO1xuICBidXR0b25zUmlnaHQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaXNPcGVuOiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gQ29uZmlybWF0aW9uTW9kYWwoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaXNPcGVuLFxuICBidXR0b25zTGVmdCA9IFtdLFxuICBidXR0b25zUmlnaHQgPSBbXSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIGJhc2VaSW5kZXggPSAxMDE5LFxufTogQ29uZmlybWF0aW9uTW9kYWxQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgY29udGFpbmVyUmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBub092ZXJsYXk9e25vT3ZlcmxheX1cbiAgICAgIG5vU2hhZG93PXtub1NoYWRvd31cbiAgICAgIGJhc2VaSW5kZXg9e2Jhc2VaSW5kZXh9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgIHshIWhlYWRlciAmJiA8aDEgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxIZWFkZXJ9PntoZWFkZXJ9PC9oMT59XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbENvbnRlbnQsXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zTGVmdH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNSaWdodH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L01vZGFsPlxuICApO1xufVxuXG5Db25maXJtYXRpb25Nb2RhbC5kaXNwbGF5TmFtZSA9IFwiQ29uZmlybWF0aW9uTW9kYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlybWF0aW9uTW9kYWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgeyBJdGVtLCBSZW5kZXJEaXNwbGF5UHJvcHMgfSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL0NsaWNrYWJsZS5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBpY29uTWVudSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5cbmV4cG9ydCB0eXBlIENsaWNrYWJsZVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IE9taXQ8XG4gIFJlbmRlckRpc3BsYXlQcm9wczxUPixcbiAgXCJzZWxlY3RlZEl0ZW1cIiB8IFwidG9nZ2xlSXNPcGVuXCJcbj4gJiB7XG4gIG9uQ2xpY2s6IFJlbmRlckRpc3BsYXlQcm9wczxUPltcInRvZ2dsZUlzT3BlblwiXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDbGlja2FibGU8VCBleHRlbmRzIEl0ZW0+KHtcbiAgZGlzcGxheSxcbiAgaXNEaXNhYmxlZCxcbiAgb25DbGljazogaGFuZGxlQ2xpY2ssXG59OiBDbGlja2FibGVQcm9wczxUPikge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5jb250YWluZXJ9PlxuICAgICAgICB7ZGlzcGxheX1cbiAgICAgICAgPEljb24gYWx0PVwiRHJvcGRvd25cIiBzcmM9e2ljb25NZW51fSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RDaGlsZCwgUmVhY3RFbGVtZW50LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5cbmltcG9ydCB7IENsaWNrYWJsZSB9IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuaW1wb3J0IHsgTWVudSwgTWVudUNvbnRhaW5lciwgTWVudUl0ZW0sIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi4vTWVudVwiO1xuXG5leHBvcnQgdHlwZSBJdGVtID0geyBpZDogbnVtYmVyIHwgc3RyaW5nOyBuYW1lOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyRGlzcGxheVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IFBpY2s8XG4gIERyb3Bkb3duUHJvcHM8VD4sXG4gIFwiZGlzcGxheVwiIHwgXCJzZWxlY3RlZEl0ZW1cIlxuPiAmIHsgaXNEaXNhYmxlZDogYm9vbGVhbjsgdG9nZ2xlSXNPcGVuOiAoKSA9PiB2b2lkIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckNsaWNrYWJsZUZuPFQgZXh0ZW5kcyBJdGVtPiA9IChcbiAgcHJvcHM6IFJlbmRlckRpc3BsYXlQcm9wczxUPlxuKSA9PiBSZWFjdEVsZW1lbnQ7XG5cbmV4cG9ydCB0eXBlIEl0ZW1Cb2R5UmVuZGVyZXJGbjxUIGV4dGVuZHMgSXRlbT4gPSAoc3RhdGU6IHtcbiAgaXRlbTogVDtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbn0pID0+IFJlYWN0Q2hpbGQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25Qcm9wczxUIGV4dGVuZHMgSXRlbT4ge1xuICBpdGVtQm9keVJlbmRlcmVyPzogSXRlbUJvZHlSZW5kZXJlckZuPFQ+O1xuICBpdGVtczogVFtdO1xuICBvblNlbGVjdDogKGl0ZW06IFQpID0+IHZvaWQ7XG4gIGRpc3BsYXk6IFJlYWN0Q2hpbGQ7XG4gIHJlbmRlckNsaWNrYWJsZT86IFJlbmRlckNsaWNrYWJsZUZuPFQ+O1xuICBzZWxlY3RlZEl0ZW06IFQgfCBudWxsO1xuICBwbGFjZW1lbnQ/OiBNZW51UGxhY2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd248VCBleHRlbmRzIEl0ZW0+KHtcbiAgaXRlbUJvZHlSZW5kZXJlcixcbiAgaXRlbXMsXG4gIG9uU2VsZWN0OiBoYW5kbGVTZWxlY3QsXG4gIGRpc3BsYXksXG4gIHJlbmRlckNsaWNrYWJsZSxcbiAgc2VsZWN0ZWRJdGVtLFxuICBwbGFjZW1lbnQgPSB7IHZlcnRpY2FsOiBcImJvdHRvbVwiLCBob3Jpem9udGFsOiBcImxlZnRcIiB9XG59OiBEcm9wZG93blByb3BzPFQ+KSB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiBzZXRJc09wZW4oZmFsc2UpKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoaXRlbTogVCkgPT4ge1xuICAgIGhhbmRsZVNlbGVjdChpdGVtKTtcbiAgICBzZXRJc09wZW4oZmFsc2UpO1xuICB9O1xuICBjb25zdCBpc0Rpc2FibGVkID0gIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgdG9nZ2xlSXNPcGVuID0gKCkgPT4gc2V0SXNPcGVuKCFpc09wZW4pO1xuXG4gIHJldHVybiAoXG4gICAgPE1lbnVDb250YWluZXJcbiAgICAgIGJ1dHRvbj17XG4gICAgICAgIHR5cGVvZiByZW5kZXJDbGlja2FibGUgPT09IFwiZnVuY3Rpb25cIiA/IChcbiAgICAgICAgICByZW5kZXJDbGlja2FibGUoe1xuICAgICAgICAgICAgZGlzcGxheSxcbiAgICAgICAgICAgIGlzRGlzYWJsZWQsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW0sXG4gICAgICAgICAgICB0b2dnbGVJc09wZW4sXG4gICAgICAgICAgfSlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q2xpY2thYmxlXG4gICAgICAgICAgICBkaXNwbGF5PXtkaXNwbGF5fVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUlzT3Blbn1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG4gICAgICBwbGFjZW1lbnQ9e3BsYWNlbWVudH1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIDxNZW51IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAge2l0ZW1zICYmXG4gICAgICAgICAgaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICA8TWVudUl0ZW1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9e2l0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWR9XG4gICAgICAgICAgICAgIGtleT17aXRlbS5pZH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ2xpY2soaXRlbSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtpdGVtQm9keVJlbmRlcmVyXG4gICAgICAgICAgICAgICAgPyBpdGVtQm9keVJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogaXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBpdGVtLm5hbWV9XG4gICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICkpfVxuICAgICAgPC9NZW51PlxuICAgIDwvTWVudUNvbnRhaW5lcj5cbiAgKTtcbn1cbiIsImV4cG9ydCB7XG4gIERyb3Bkb3duLFxuICBEcm9wZG93blByb3BzLFxuICBJdGVtIGFzIERyb3Bkb3duSXRlbSxcbiAgSXRlbUJvZHlSZW5kZXJlckZuIGFzIERyb3Bkb3duSXRlbUJvZHlSZW5kZXJlckZuLFxuICBSZW5kZXJDbGlja2FibGVGbiBhcyBEcm9wZG93blJlbmRlckNsaWNrYWJsZUZuLFxuICBSZW5kZXJEaXNwbGF5UHJvcHMgYXMgRHJvcGRvd25SZW5kZXJEaXNwbGF5UHJvcHMsXG59IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5leHBvcnQge1xuICBDbGlja2FibGUgYXMgRHJvcGRvd25DbGlja2FibGUsXG4gIENsaWNrYWJsZVByb3BzIGFzIERyb3Bkb3duQ2xpY2thYmxlUHJvcHNcbn0gZnJvbSBcIi4vQ2xpY2thYmxlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcblxudHlwZSBQcm9wcyA9IHtcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIHNpemU/OiBGaWxlSW5wdXRTaXplO1xufTtcblxuZnVuY3Rpb24gRmlsZUlucHV0KHtcbiAgY2hpbGRyZW4sXG4gIGFjY2VwdCxcbiAgb25DaGFuZ2UsXG4gIGlucHV0UmVmLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubGFiZWwsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGlkPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEZpbGVJbnB1dCB9IGZyb20gXCIuL0ZpbGVJbnB1dFwiO1xuZXhwb3J0IHsgRmlsZUlucHV0U2l6ZSB9IGZyb20gXCIuL0ZpbGVJbnB1dFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUGxhY2VtZW50ID0ge1xuICBob3Jpem9udGFsOlxuICAgIHwgXCJyaWdodFwiXG4gICAgfCBcInJpZ2h0RWRnZVwiXG4gICAgfCBcInJpZ2h0T25FZGdlXCJcbiAgICB8IFwibGVmdFwiXG4gICAgfCBcImxlZnRFZGdlXCJcbiAgICB8IFwibGVmdE9uRWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJjZW50ZXJcIjtcbiAgdmVydGljYWw6XG4gICAgfCBcInRvcFwiXG4gICAgfCBcInRvcEVkZ2VcIlxuICAgIHwgXCJ0b3BPbkVkZ2VcIlxuICAgIHwgXCJib3R0b21cIlxuICAgIHwgXCJib3R0b21FZGdlXCJcbiAgICB8IFwiYm90dG9tT25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHBhcmVudDogXCJ2aWV3cG9ydFwiIHwgXCJjb250YWluZXJcIjtcbn07XG5cbnR5cGUgRmxvYXRpbmdQYW5lbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGxheW91dD86IFwiY29sdW1uXCIgfCBcInJvd1wiO1xuICBwbGFjZW1lbnQ/OiBQbGFjZW1lbnQ7XG59O1xuXG5mdW5jdGlvbiBGbG9hdGluZ1BhbmVsKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbHVtblwiLFxuICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiLCBwYXJlbnQ6IFwidmlld3BvcnRcIiB9LFxufTogRmxvYXRpbmdQYW5lbFByb3BzKSB7XG4gIGNvbnN0IGhvcml6b250YWxQbGFjZW1lbnQgPVxuICAgIHBsYWNlbWVudC5ob3Jpem9udGFsID09PSBcImNlbnRlclwiXG4gICAgICA/IFwiaG9yaXpvbnRhbENlbnRlclwiXG4gICAgICA6IHBsYWNlbWVudC5ob3Jpem9udGFsO1xuXG4gIGNvbnN0IHZlcnRpY2FsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQudmVydGljYWwgPT09IFwiY2VudGVyXCIgPyBcInZlcnRpY2FsQ2VudGVyXCIgOiBwbGFjZW1lbnQudmVydGljYWw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiZmxvYXRpbmctcGFuZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tob3Jpem9udGFsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW3ZlcnRpY2FsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW2xheW91dF0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogcGxhY2VtZW50LnBhcmVudCAhPT0gXCJjb250YWluZXJcIixcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGbG9hdGluZ1BhbmVsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9hdGluZ1BhbmVsIH0gZnJvbSBcIi4vRmxvYXRpbmdQYW5lbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBJY29uUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxJbWFnZUVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHNyYzogc3RyaW5nO1xuICBzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIiB8IFwieGxhcmdlXCI7XG59O1xuXG5mdW5jdGlvbiBJY29uKHtcbiAgc3JjLFxuICBhbHQsXG4gIGNvbnRhaW5lclJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGludmVydGVkID0gZmFsc2UsXG59OiBJY29uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8aW1nXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCB9LFxuICAgICAgXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImljb25cIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e3NyY31cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uIH0gZnJvbSBcIi4vSWNvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBCdXR0b25CYWRnZSB9IGZyb20gXCIuLi9CdXR0b25CYWRnZVwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIEljb25CdXR0b25Qcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgc3JjOiBzdHJpbmc7XG4gIGFsdDogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIj47XG59O1xuXG5mdW5jdGlvbiBJY29uQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIGNoaWxkcmVuLFxuICBzcmMsXG4gIGFsdCxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgb25DbGljayA9ICgpID0+IHt9LFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlID0gXCJidXR0b25cIixcbn06IEljb25CdXR0b25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMudG9wT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInRvcFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICAgIFtzdHlsZXMuYm90dG9tT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImJvdHRvbVwiKSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uIH0gZnJvbSBcIi4vSWNvbkJ1dHRvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIjtcblxudHlwZSBJY29uQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIHNyYzogc3RyaW5nO1xuICAgICAgYWx0OiBzdHJpbmc7XG4gICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEljb25CdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzcmMsXG4gIGFsdCxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IEljb25CdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImljb24tYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uTGluaztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9JY29uQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ltYWdlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VQcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNyY1dpZHRoPzogbnVtYmVyO1xuICBzcmNIZWlnaHQ/OiBudW1iZXI7XG4gIGRlY29kaW5nPzogXCJhc3luY1wiIHwgXCJzeW5jXCIgfCBcImF1dG9cIjtcbiAgbG9hZGluZz86IFwiZWFnZXJcIiB8IFwibGF6eVwiO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBJbWFnZUNvbXBvbmVudCh7XG4gIHNyYyxcbiAgYWx0LFxuICBzcmNXaWR0aCxcbiAgc3JjSGVpZ2h0LFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbiAgZGVjb2RpbmcgPSBcImF1dG9cIixcbiAgbG9hZGluZyA9IFwiZWFnZXJcIixcbiAgc3R5bGUsXG59OiBJbWFnZVByb3BzKSB7XG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IChcbiAgICA8aW1nXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW1hZ2UsIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImltYWdlXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgICB3aWR0aD17c3JjV2lkdGh9XG4gICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cbiAgICAgIGRlY29kaW5nPXtkZWNvZGluZ31cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgLz5cbiAgKTtcblxuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIHtpbWFnZUVsZW1lbnR9XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIGltYWdlRWxlbWVudFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZUNvbXBvbmVudDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiLi9JbWFnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGFiZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIExhYmVsSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxMYWJlbEVsZW1lbnQ+O1xuICB2YWx1ZTogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGFiZWwoeyBjbGFzc05hbWUsIGNoaWxkcmVuLCB2YWx1ZSwgY29udGFpbmVyUmVmIH06IExhYmVsSW5wdXRQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX1cbiAgICA+XG4gICAgICB7dmFsdWV9XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIExhYmVsIH0gZnJvbSBcIi4vTGFiZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld1Byb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHsgdGV4dDogc3RyaW5nOyBpZDogc3RyaW5nIH07XG4gIGhlYWRlckFjdGlvbnM/OiBSZWFjdE5vZGU7XG59O1xuXG5mdW5jdGlvbiBMaXN0Vmlldyh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgaGVhZGVyLFxuICBoZWFkZXJBY3Rpb25zLFxufTogTGlzdFZpZXdQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIHsoaGVhZGVyIHx8IGhlYWRlckFjdGlvbnMpICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PlxuICAgICAgICAgIHtoZWFkZXIgJiYgKFxuICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlckxhYmVsfSBpZD17aGVhZGVyLmlkfT5cbiAgICAgICAgICAgICAge2hlYWRlci50ZXh0fVxuICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtoZWFkZXJBY3Rpb25zfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8dWwgYXJpYS1sYWJlbGxlZGJ5PXtoZWFkZXI/LmlkfSBjbGFzc05hbWU9e3N0eWxlcy5saXN0fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXc7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld0l0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYWN0aXZlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBMaXN0Vmlld0l0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0l0ZW07XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b25MaW5rIH0gZnJvbSBcIi4uL0J1dHRvbkxpbmtcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBMaXN0Vmlld0xpbmtJdGVtUHJvcHMgPVxuICB8IHtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgYWN0aXZlOiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc6IGJvb2xlYW47XG4gICAgICBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgICAgc2l6ZTogU2l6ZTtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0xpbmtJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFzOiBDb21wb25lbnQsXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IExpc3RWaWV3TGlua0l0ZW1Qcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25MaW5rXG4gICAgICAgIGFzPXtDb21wb25lbnR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uTGluaz5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0xpbmtJdGVtO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0VmlldyB9IGZyb20gXCIuL0xpc3RWaWV3XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3SXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0xpbmtJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdMaW5rSXRlbVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFBsYWNlbWVudENvbnRleHQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnUubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcbiAgc21hcnRMYXlvdXQ/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gTWVudSh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGNsYXNzTmFtZSxcbiAgaXNPcGVuID0gdHJ1ZSxcbiAgaGVhZGVyLFxuICBmb290ZXIsXG4gIHNtYXJ0TGF5b3V0ID0gdHJ1ZSxcbn06IE1lbnVQcm9wcykge1xuICBjb25zdCBtZW51UGxhY2VtZW50ID0gdXNlQ29udGV4dChQbGFjZW1lbnRDb250ZXh0KTtcbiAgY29uc3QgaW5uZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVmID0gY29udGFpbmVyUmVmIHx8IGlubmVyUmVmO1xuXG4gIGlmICghbWVudVBsYWNlbWVudClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIk1lbnUgY29tcG9uZW50IG11c3QgYmUgd3JhcHBlZCBieSBhIE1lbnVDb250YWluZXIgY29tcG9uZW50LlwiXG4gICAgKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzbWFydExheW91dCAmJiByZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgeyB0b3AsIGJvdHRvbSB9ID0gcmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBkaXN0YW5jZVRvRWRnZSA9XG4gICAgICAgIG1lbnVQbGFjZW1lbnQudmVydGljYWwgPT09IFwidG9wXCIgPyB0b3AgOiB3aW5kb3cuaW5uZXJIZWlnaHQgLSBib3R0b207XG5cbiAgICAgIGlmIChkaXN0YW5jZVRvRWRnZSA8IDApIHtcbiAgICAgICAgY29uc3QgdWxFbCA9IHJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJ1bFwiKTtcbiAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IHVsRWwucXVlcnlTZWxlY3RvckFsbChcImxpLGFcIik7XG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHVsRWwuY2xpZW50SGVpZ2h0ICsgZGlzdGFuY2VUb0VkZ2U7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGNoaWxkRWxlbWVudHMubGVuZ3RoXG4gICAgICAgICAgPyBnZXRDb21wdXRlZFN0eWxlKGNoaWxkRWxlbWVudHNbMF0pLm1pbkhlaWdodFxuICAgICAgICAgIDogMDtcbiAgICAgICAgdWxFbC5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke25ld0hlaWdodH1weCAtICR7b2Zmc2V0fSlgO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgbWVudVBsYWNlbWVudCwgc21hcnRMYXlvdXRdKTtcblxuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLm1lbnUsXG4gICAgICAgICAgeyBbc3R5bGVzLm9wZW5dOiBpc09wZW4gfSxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIF0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHtoZWFkZXIgJiYgaXNPcGVuICYmIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PntoZWFkZXJ9PC9oMz59XG4gICAgICAgICAgPHVsPntjaGlsZHJlbn08L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2Zvb3RlciAmJiBpc09wZW4gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuZm9vdGVyLFxuICAgICAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiAhY2hpbGRyZW4gfSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmb290ZXJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudTtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIFJlYWN0RWxlbWVudCxcbiAgZm9yd2FyZFJlZixcbiAgRm9yd2FyZGVkUmVmLFxuICB1c2VNZW1vLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTWVudVBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDogXCJyaWdodFwiIHwgXCJsZWZ0XCI7XG4gIHZlcnRpY2FsOiBcInRvcFwiIHwgXCJib3R0b21cIjtcbn07XG5cbnR5cGUgTWVudUNvbnRhaW5lclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBidXR0b24/OiBSZWFjdEVsZW1lbnQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBQbGFjZW1lbnRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxcbiAgTWVudUNvbnRhaW5lclByb3BzW1wicGxhY2VtZW50XCJdIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmZ1bmN0aW9uIE1lbnVDb250YWluZXIoXG4gIHtcbiAgICBjaGlsZHJlbixcbiAgICBidXR0b24sXG4gICAgY2xhc3NOYW1lLFxuICAgIHBsYWNlbWVudCA9IHsgaG9yaXpvbnRhbDogXCJsZWZ0XCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiIH0sXG4gIH06IE1lbnVDb250YWluZXJQcm9wcyxcbiAgcmVmOiBGb3J3YXJkZWRSZWY8SFRNTERpdkVsZW1lbnQ+XG4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7YnV0dG9ufVxuICAgICAgPFBsYWNlbWVudENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3VzZU1lbW8oKCkgPT4gcGxhY2VtZW50LCBbcGxhY2VtZW50XSl9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubWVudUNvbnRhaW5lcixcbiAgICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQuaG9yaXpvbnRhbF0sXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50LnZlcnRpY2FsXSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1BsYWNlbWVudENvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcndhcmRSZWYoTWVudUNvbnRhaW5lcik7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51SXRlbVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxMSUVsZW1lbnQ+KSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTWVudUl0ZW0oe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBvbkNsaWNrLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgaXNBY3RpdmUgPSBmYWxzZSxcbn06IE1lbnVJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGlcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubWVudUl0ZW0sXG4gICAgICAgIHsgW3N0eWxlcy5hY3RpdmVdOiBpc0FjdGl2ZSB9LFxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudUl0ZW07XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVMaW5rSXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudUxpbmtJdGVtUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzOiBFbGVtZW50VHlwZTtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU6IHN0cmluZztcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gTWVudUxpbmtJdGVtKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIC4uLnByb3BzXG59OiBNZW51TGlua0l0ZW1Qcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICBkYXRhLXRlc3RpZD1cIm1lbnUtbGluay1pdGVtXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubWVudUxpbmtJdGVtLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudUxpbmtJdGVtO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51IH0gZnJvbSBcIi4vTWVudVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51Q29udGFpbmVyLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4vTWVudUNvbnRhaW5lclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51SXRlbSB9IGZyb20gXCIuL01lbnVJdGVtXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVMaW5rSXRlbSB9IGZyb20gXCIuL01lbnVMaW5rSXRlbVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTW9kYWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYnV0dG9uPzogUmVhY3ROb2RlO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIE1vZGFsKHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaXNPcGVuLFxuICBidXR0b24sXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIGJhc2VaSW5kZXggPSAxMDA5LFxufTogTW9kYWxQcm9wcykge1xuICB1c2VIb3RrZXlzKFwiRXNjYXBlXCIsIG9uQ2xvc2UpO1xuXG4gIGNvbnN0IGhhbmRsZU92ZXJsYXlDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNsb3NlKCk7XG4gIH0sIFtvbkNsb3NlXSk7XG5cbiAgcmV0dXJuIChcbiAgICBpc09wZW4gJiYgKFxuICAgICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlT3ZlcmxheUNsaWNrfVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMSB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7YnV0dG9uICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAyIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YnV0dG9ufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTW9kYWwgfSBmcm9tIFwiLi9Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9OdW1wYWQubW9kdWxlLmNzc1wiO1xuXG5pbXBvcnQgYmFja3NwYWNlSWNvbiBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2JhY2tzcGFjZS5zdmdcIjtcblxudHlwZSBEaWdpdCA9IDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDk7XG5cbmNvbnN0IGFwcGVuZERpZ2l0ID0gKG51bWJlcjogbnVtYmVyLCBkaWdpdDogRGlnaXQpID0+IHtcbiAgcmV0dXJuIG51bWJlciAqIDEwICsgZGlnaXQ7XG59O1xuXG5jb25zdCBwb3BEaWdpdCA9IChudW1iZXI6IG51bWJlcikgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIgLyAxMCk7XG59O1xuXG5jb25zdCBldmVudERpZ2l0S2V5cyA9IFtcIjBcIiwgXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtcGFkUHJvcHMge1xuICBudW1iZXI6IG51bWJlcjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBvbkNoYW5nZTogKG5ld051bWJlcjogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgTnVtcGFkID0gUmVhY3QuZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgTnVtcGFkUHJvcHM+KFxuICAoeyBudW1iZXIsIG9uQ2hhbmdlLCBkaXNhYmxlZCA9IGZhbHNlIH0sIHJlZikgPT4geyAgICBcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwiQmFja3NwYWNlXCIpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShwb3BEaWdpdChudW1iZXIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnREaWdpdEtleXMuaW5jbHVkZXMoZS5rZXkpKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZGlnaXQgPSBwYXJzZUludChlLmtleSwgMTApIGFzIERpZ2l0O1xuICAgICAgICBvbkNoYW5nZShhcHBlbmREaWdpdChudW1iZXIsIGRpZ2l0KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyID0gKG5ld051bWJlcjogbnVtYmVyKSA9PlxuICAgICAgKGU6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShuZXdOdW1iZXIpO1xuICAgICAgfTtcblxuICAgIGNvbnN0IE51bXBhZEtleXMgPSBBcnJheSgxMClcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBudW1wYWRWYWx1ZSA9ICgoaW5kZXggKyAxKSAlIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihhcHBlbmREaWdpdChudW1iZXIsIG51bXBhZFZhbHVlKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge251bXBhZFZhbHVlfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1wYWR9IHJlZj17cmVmfSB0YWJJbmRleD17LTF9IG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn0gZGF0YS10ZXN0aWQ9XCJudW1wYWRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1iZXJzfT5cbiAgICAgICAgICB7TnVtcGFkS2V5c31cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihwb3BEaWdpdChudW1iZXIpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBhbHQ9XCJCYWNrc3BhY2VcIiBzcmM9e2JhY2tzcGFjZUljb259IC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuKTtcbiIsImV4cG9ydCB7IE51bXBhZCB9IGZyb20gXCIuL051bXBhZFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL092ZXJsYXkubW9kdWxlLmNzc1wiO1xuXG50eXBlIE92ZXJsYXlQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBpc0ZpeGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBPdmVybGF5KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgaXNGaXhlZCA9IGZhbHNlLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBPdmVybGF5UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IGlzRml4ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPdmVybGF5O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5IH0gZnJvbSBcIi4vT3ZlcmxheVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vR3JvdXBPcHRpb24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tIFwiLi4vT3B0aW9uXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uLy4uL0ljb25CdXR0b25cIjtcbmltcG9ydCBpY29uQ2FyZXREb3duIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvc2VsZWN0LWNhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlPjtcbn07XG5cbmZ1bmN0aW9uIEdyb3VwT3B0aW9uKHsgY2xhc3NOYW1lLCBsYWJlbCwgb3B0aW9ucyB9OiBQcm9wcykge1xuICBjb25zdCB7IHNob3dFeHBhbmRlZEdyb3VwIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuICBjb25zdCBbZXhwYW5kZWQsIHRvZ2dsZUV4cGFuZF0gPSB1c2VUb2dnbGUoc2hvd0V4cGFuZGVkR3JvdXApO1xuXG4gIGNvbnN0IGhhbmRsZUdyb3VwQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlRXhwYW5kKCk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9IG9uQ2xpY2s9e2hhbmRsZUdyb3VwQ2xpY2t9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT57bGFiZWx9PC9kaXY+XG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICB7IFtzdHlsZXMuZXhwYW5kZWRdOiBleHBhbmRlZCB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIHNyYz17aWNvbkNhcmV0RG93bn1cbiAgICAgICAgICBhbHQ9e2V4cGFuZGVkID8gXCJDb2xsYXBzZVwiIDogXCJFeHBhbmRcIn1cbiAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtleHBhbmRlZCAmJlxuICAgICAgICBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiAoXG4gICAgICAgICAgPE9wdGlvbiBrZXk9e29wdGlvbi52YWx1ZX0gZGF0YT17b3B0aW9ufT5cbiAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgPC9PcHRpb24+XG4gICAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBHcm91cE9wdGlvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgR3JvdXBPcHRpb24gfSBmcm9tIFwiLi9Hcm91cE9wdGlvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIHVzZUNhbGxiYWNrLFxuICB1c2VDb250ZXh0LFxuICB1c2VNZW1vLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PcHRpb24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tIFwiLi4vLi4vQ2hlY2tib3hcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRhdGE6IE9wdGlvblR5cGU7XG59O1xuXG5mdW5jdGlvbiBPcHRpb24oeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBkYXRhIH06IFByb3BzKSB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIHNlbGVjdGVkT3B0aW9ucywgdXBkYXRlU2VsZWN0ZWRPcHRpb24gfSA9XG4gICAgdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcblxuICBjb25zdCBpc0NoZWNrZWQgPSB1c2VNZW1vKFxuICAgICgpID0+IHNlbGVjdGVkT3B0aW9ucy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpLmluY2x1ZGVzKGRhdGEudmFsdWUpLFxuICAgIFtkYXRhLCBzZWxlY3RlZE9wdGlvbnNdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24oZGF0YSk7XG4gIH0sIFtkYXRhLCBzZWxlY3RlZE9wdGlvbnNdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuc2VsZWN0ZWRdOiBpc0NoZWNrZWQgJiYgIW11bHRpcGxlIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgPlxuICAgICAge211bHRpcGxlICYmIChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3hDb250YWluZXJ9PlxuICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3h9XG4gICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICl9XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sYWJlbH0+e2NoaWxkcmVufTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3B0aW9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPcHRpb24gfSBmcm9tIFwiLi9PcHRpb25cIjtcbiIsImltcG9ydCB7IHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gXCIuLi8uLi9DaGVja2JveFwiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb24gfSBmcm9tIFwiLi4vR3JvdXBPcHRpb25cIjtcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gXCIuLi9PcHRpb25cIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL09wdGlvbkxpc3QubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlPjtcbiAgb25GaWx0ZXI/OiAob3B0aW9uOiBPcHRpb25UeXBlLCBzZWFyY2hLZXl3b3JkOiBzdHJpbmcpID0+IGJvb2xlYW47XG4gIG9uQ2hhbmdlPzogKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDtcbn07XG5cbi8vIHNlZSBkb2NzIHRvIHVuZGVyc3RhbmQgbmVlZCBvZiB0aGUgZnVuY3Rpb24gYmVsb3cgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9uYXJyb3dpbmcuaHRtbCN1c2luZy10eXBlLXByZWRpY2F0ZXNcbmV4cG9ydCBjb25zdCBpc09wdGlvbiA9IChcbiAgb3B0aW9uOiBPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlXG4pOiBvcHRpb24gaXMgT3B0aW9uVHlwZSA9PiB7XG4gIHJldHVybiAob3B0aW9uIGFzIE9wdGlvblR5cGUpLnZhbHVlICE9PSB1bmRlZmluZWQ7XG59O1xuXG5mdW5jdGlvbiBPcHRpb25MaXN0KHsgb3B0aW9ucywgb25GaWx0ZXIsIG9uQ2hhbmdlIH06IFByb3BzKSB7XG4gIGNvbnN0IFtzZWxlY3RBbGxDaGVja2VkLCB0b2dnbGVTZWxlY3RBbGxDaGVja2VkXSA9IHVzZVRvZ2dsZShmYWxzZSk7XG4gIGNvbnN0IHtcbiAgICBtdWx0aXBsZSxcbiAgICBzZWFyY2hLZXl3b3JkLFxuICAgIHNlbGVjdEFsbCxcbiAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICB9ID0gdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcblxuICBjb25zdCBoYXNHcm91cE9wdGlvbiA9IG9wdGlvbnMuc29tZSgob3B0aW9uKSA9PiAhaXNPcHRpb24ob3B0aW9uKSk7XG5cbiAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IChvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlPikgPT4ge1xuICAgIGNvbnN0IGtleXdvcmQgPSBzZWFyY2hLZXl3b3JkLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgcmV0dXJuIGtleXdvcmQubGVuZ3RoXG4gICAgICA/IG9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgb25GaWx0ZXJcbiAgICAgICAgICAgID8gb25GaWx0ZXIob3B0aW9uLCBrZXl3b3JkKVxuICAgICAgICAgICAgOiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhrZXl3b3JkKVxuICAgICAgICApXG4gICAgICA6IG9wdGlvbnM7XG4gIH07XG5cbiAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gdXNlTWVtbzxBcnJheTxHcm91cE9wdGlvblR5cGUgfCBPcHRpb25UeXBlPj4oKCkgPT4ge1xuICAgIGlmIChoYXNHcm91cE9wdGlvbikge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAoZmlsdGVyZWQ6IEFycmF5PEdyb3VwT3B0aW9uVHlwZT4sIGdyb3VwT3B0aW9uOiBHcm91cE9wdGlvblR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZEdyb3VwT3B0aW9ucyA9IGZpbHRlck9wdGlvbnMoZ3JvdXBPcHRpb24ub3B0aW9ucyk7XG5cbiAgICAgICAgICBpZiAoZmlsdGVyZWRHcm91cE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAuLi5maWx0ZXJlZCxcbiAgICAgICAgICAgICAgeyAuLi5ncm91cE9wdGlvbiwgb3B0aW9uczogZmlsdGVyZWRHcm91cE9wdGlvbnMgfSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgICAgICB9LFxuICAgICAgICBbXVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbHRlck9wdGlvbnMob3B0aW9ucyBhcyBBcnJheTxPcHRpb25UeXBlPik7XG4gICAgfVxuICB9LCBbaGFzR3JvdXBPcHRpb24sIG9wdGlvbnMsIHNlYXJjaEtleXdvcmRdKTtcblxuICBjb25zdCBmaWx0ZXJlZE9wdGlvbnNDb3VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBmaWx0ZXJlZE9wdGlvbnMucmVkdWNlKChsZW5ndGg6IG51bWJlciwgbmV4dE9wdGlvbikgPT4ge1xuICAgICAgaWYgKGlzT3B0aW9uKG5leHRPcHRpb24pKSB7XG4gICAgICAgIHJldHVybiBsZW5ndGggKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCArIG5leHRPcHRpb24ub3B0aW9ucy5sZW5ndGg7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH0sIFtoYXNHcm91cE9wdGlvbiwgZmlsdGVyZWRPcHRpb25zLCBpc09wdGlvbl0pO1xuXG4gIGNvbnN0IHNlbGVjdGVkT3B0aW9uc0NvdW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKHNlbGVjdGVkT3B0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zLmZpbmQoKGZpbHRlcmVkT3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBpc09wdGlvbihmaWx0ZXJlZE9wdGlvbilcbiAgICAgICAgICA/IGZpbHRlcmVkT3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvbi52YWx1ZVxuICAgICAgICAgIDogZmlsdGVyZWRPcHRpb24ub3B0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IHNlbGVjdGVkT3B0aW9uLnZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSkubGVuZ3RoO1xuICB9LCBbc2VsZWN0ZWRPcHRpb25zLCBmaWx0ZXJlZE9wdGlvbnNdKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBbGxDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXNlbGVjdEFsbENoZWNrZWQpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnNUb1NlbGVjdCA9IGZpbHRlcmVkT3B0aW9uc1xuICAgICAgICAubWFwKChmaWx0ZXJlZE9wdGlvbikgPT5cbiAgICAgICAgICBpc09wdGlvbihmaWx0ZXJlZE9wdGlvbikgPyBmaWx0ZXJlZE9wdGlvbiA6IGZpbHRlcmVkT3B0aW9uLm9wdGlvbnNcbiAgICAgICAgKVxuICAgICAgICAuZmxhdCgpO1xuXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMob3B0aW9uc1RvU2VsZWN0KTtcbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKG9wdGlvbnNUb1NlbGVjdC5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKFtdKTtcbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKFtdKTtcbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkKCk7XG4gIH0sIFtcbiAgICBmaWx0ZXJlZE9wdGlvbnMsXG4gICAgaXNPcHRpb24sXG4gICAgc2VsZWN0QWxsQ2hlY2tlZCxcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCxcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb25zQ291bnQgPT09IGZpbHRlcmVkT3B0aW9uc0NvdW50KSB7XG4gICAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkKHRydWUpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0QWxsQ2hlY2tlZCkge1xuICAgICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZChmYWxzZSk7XG4gICAgfVxuICB9LCBbXG4gICAgc2VsZWN0ZWRPcHRpb25zQ291bnQsXG4gICAgZmlsdGVyZWRPcHRpb25zQ291bnQsXG4gICAgc2VsZWN0QWxsQ2hlY2tlZCxcbiAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkLFxuICBdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgIHtzZWxlY3RBbGwgJiYgbXVsdGlwbGUgJiYgISFmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNlbGVjdEFsbENvbnRhaW5lcn1cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3RBbGxDbGlja31cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94Q29udGFpbmVyfT5cbiAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveH1cbiAgICAgICAgICAgICAgY2hlY2tlZD17c2VsZWN0QWxsQ2hlY2tlZH1cbiAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZT17XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZE9wdGlvbnNDb3VudCAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uc0NvdW50ICE9PSBmaWx0ZXJlZE9wdGlvbnNDb3VudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sYWJlbH0+U2VsZWN0IEFsbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgeyEhZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICAgICAgZmlsdGVyZWRPcHRpb25zLm1hcCgob3B0aW9uKSA9PlxuICAgICAgICAgIGlzT3B0aW9uKG9wdGlvbikgPyAoXG4gICAgICAgICAgICA8T3B0aW9uIGtleT17b3B0aW9uLnZhbHVlfSBkYXRhPXtvcHRpb259PlxuICAgICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgPC9PcHRpb24+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxHcm91cE9wdGlvblxuICAgICAgICAgICAgICBrZXk9e29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgbGFiZWw9e29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uLm9wdGlvbnN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ub09wdGlvbnN9PlxuICAgICAgICAgIE5vIG1hdGNoZXMgZm9yXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc2VhcmNoS2V5d29yZH0+e2AgJHtzZWFyY2hLZXl3b3JkfWB9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wdGlvbkxpc3Q7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE9wdGlvbkxpc3QsIGlzT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uTGlzdFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vU2VhcmNoLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSBcIi4uLy4uL1RleHRJbnB1dFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi8uLi9JY29uXCI7XG5pbXBvcnQgaWNvblNlYXJjaCBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL3NlYXJjaC5zdmdcIjtcbmltcG9ydCBpY29uQ3Jvc3NlZCBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL2Nyb3NzZWQuc3ZnXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uLy4uL0ljb25CdXR0b25cIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gU2VhcmNoKHsgY2xhc3NOYW1lIH06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2VhcmNoS2V5d29yZCwgc2V0U2VhcmNoS2V5d29yZCB9ID0gdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hLZXl3b3JkQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldFNlYXJjaEtleXdvcmQodmFsdWUpO1xuICAgIH0sXG4gICAgW3NlYXJjaEtleXdvcmRdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoS2V5d29yZFJlc2V0Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2VhcmNoS2V5d29yZChcIlwiKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb25TZWFyY2hDb250YWluZXJ9PlxuICAgICAgICA8SWNvbiBzcmM9e2ljb25TZWFyY2h9IC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgdmFsdWU9e3NlYXJjaEtleXdvcmR9XG4gICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBzZWFyY2guLi5cIlxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlU2VhcmNoS2V5d29yZENoYW5nZX1cbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgIC8+XG4gICAgICA8SWNvbkJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5yZXNldEJ1dHRvbn1cbiAgICAgICAgc3JjPXtpY29uQ3Jvc3NlZH1cbiAgICAgICAgYWx0PVwiQ2xlYXJcIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGlja31cbiAgICAgICAgZGlzYWJsZWQ9eyFzZWFyY2hLZXl3b3JkfVxuICAgICAgICBub0JvcmRlclxuICAgICAgICBub1NoYWRvd1xuICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VhcmNoO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWFyY2ggfSBmcm9tIFwiLi9TZWFyY2hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2ssIHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dFByb3ZpZGVyIH0gZnJvbSBcIi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uL0ljb25CdXR0b25cIjtcbmltcG9ydCB7IE9wdGlvbkxpc3QgfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuXG50eXBlIFNlbGVjdFByb3BzID0ge1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzaG93U2VsZWN0ZWRBc1RhZ3M/OiBib29sZWFuO1xuICBzaG93U2VhcmNoPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlPjtcbiAgd2lkdGg6IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG4gIGNsYXNzTmFtZSxcbiAgZGVmYXVsdFZhbHVlLFxuICBkaXNhYmxlZCxcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgb3B0aW9ucyxcbiAgcGxhY2Vob2xkZXIsXG4gIGxhYmVsLFxuICBzZWxlY3RBbGwsXG4gIHNob3dFeHBhbmRlZEdyb3VwLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgc2hvd1NlbGVjdGVkQXNUYWdzID0gZmFsc2UsXG4gIHNob3dTZWFyY2ggPSBmYWxzZSxcbiAgd2lkdGgsXG4gIG9uQ2hhbmdlLFxuICBvbkZpbHRlcixcbn06IFNlbGVjdFByb3BzKSB7XG4gIGNvbnN0IFtvcGVuZWQsIHRvZ2dsZU9wZW5lZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuXG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiB0b2dnbGVPcGVuZWQoZmFsc2UpKTtcblxuICBjb25zdCBoYW5kbGVPcGVuU2VsZWN0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZU9wZW5lZCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4ge1xuICAgIGlmICghbXVsdGlwbGUpIHRvZ2dsZU9wZW5lZChmYWxzZSk7XG5cbiAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZSh2YWx1ZXMpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0Q29udGV4dFByb3ZpZGVyXG4gICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgc2VsZWN0QWxsPXtzZWxlY3RBbGx9XG4gICAgICBzaG93RXhwYW5kZWRHcm91cD17c2hvd0V4cGFuZGVkR3JvdXB9XG4gICAgPlxuICAgICAgPGRpdiByZWY9e3JlZn0+XG4gICAgICAgIHtsYWJlbCA/IDxMYWJlbCB2YWx1ZT17bGFiZWx9IC8+IDogbnVsbH1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aCB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmhlYWRlciwgeyBbc3R5bGVzLmFjdGl2ZV06IG9wZW5lZCB9XSl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPcGVuU2VsZWN0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWxlY3RvclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIHNob3dTZWxlY3RlZEFzVGFncz17c2hvd1NlbGVjdGVkQXNUYWdzfVxuICAgICAgICAgICAgICBpc0Ryb3Bkb3duT3BlbmVkPXtvcGVuZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmljb25CdXR0b24sXG4gICAgICAgICAgICAgICAgeyBbc3R5bGVzLmV4cGFuZGVkXTogb3BlbmVkIH0sXG4gICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICBzcmM9e2ljb25DYXJldERvd259XG4gICAgICAgICAgICAgIGFsdD17b3BlbmVkID8gXCJDb2xsYXBzZVwiIDogXCJFeHBhbmRcIn1cbiAgICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge29wZW5lZCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PlxuICAgICAgICAgICAgICB7b3B0aW9ucy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ub09wdGlvbnN9Pk5vIG9wdGlvbnMgYXZhaWxhYmxlPC9kaXY+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtzaG93U2VhcmNoICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5zZWFyY2hDb250YWluZXJ9PlxuICAgICAgICAgICAgICAgICAgICAgIDxTZWFyY2ggLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPE9wdGlvbkxpc3RcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgb25GaWx0ZXI9e29uRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9TZWxlY3RDb250ZXh0UHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDtcbiIsImltcG9ydCBSZWFjdCwge1xuICBjcmVhdGVDb250ZXh0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHVzZUVmZmVjdCxcbiAgdXNlUmVmLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEdyb3VwT3B0aW9uVHlwZSwgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgaXNPcHRpb24gfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGRlZmF1bHRWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlIHwgR3JvdXBPcHRpb25UeXBlPjtcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xufTtcblxudHlwZSBTZWxlY3RDb250ZXh0U3RhdGUgPSB7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBzZWxlY3RlZE9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+O1xuICB1cGRhdGVTZWxlY3RlZE9wdGlvbjogKG9wdGlvbjogT3B0aW9uVHlwZSkgPT4gdm9pZDtcbiAgc2VhcmNoS2V5d29yZDogc3RyaW5nO1xuICBzZXRTZWFyY2hLZXl3b3JkOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgc2V0U2VsZWN0ZWRPcHRpb25zOiAodmFsdWVzOiBPcHRpb25UeXBlW10pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBpbml0aWFsU3RhdGU6IFNlbGVjdENvbnRleHRTdGF0ZSA9IHtcbiAgbXVsdGlwbGU6IGZhbHNlLFxuICBzZWxlY3RBbGw6IGZhbHNlLFxuICBzaG93RXhwYW5kZWRHcm91cDogdHJ1ZSxcbiAgc2VsZWN0ZWRPcHRpb25zOiBbXSxcbiAgdXBkYXRlU2VsZWN0ZWRPcHRpb246ICh2YWx1ZTogT3B0aW9uVHlwZSkgPT4ge30sXG4gIHNlYXJjaEtleXdvcmQ6IFwiXCIsXG4gIHNldFNlYXJjaEtleXdvcmQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB7fSxcbiAgc2V0U2VsZWN0ZWRPcHRpb25zOiAodmFsdWVzOiBPcHRpb25UeXBlW10pID0+IHt9LFxufTtcblxuY29uc3QgU2VsZWN0Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8U2VsZWN0Q29udGV4dFN0YXRlPihpbml0aWFsU3RhdGUpO1xuXG5jb25zdCBTZWxlY3RDb250ZXh0UHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgZGVmYXVsdFZhbHVlLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBzZWxlY3RBbGwgPSBmYWxzZSxcbiAgc2hvd0V4cGFuZGVkR3JvdXAgPSB0cnVlLFxuICBvcHRpb25zLFxuICBvbkNoYW5nZSxcbn06IFByb3BzKSA9PiB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxPcHRpb25UeXBlW10+KFxuICAgIGluaXRpYWxTdGF0ZS5zZWxlY3RlZE9wdGlvbnNcbiAgKTtcbiAgY29uc3QgW3NlYXJjaEtleXdvcmQsIHNldFNlYXJjaEtleXdvcmRdID0gdXNlU3RhdGUoXG4gICAgaW5pdGlhbFN0YXRlLnNlYXJjaEtleXdvcmRcbiAgKTtcblxuICBjb25zdCB1cGRhdGVTZWxlY3RlZE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IE9wdGlvblR5cGUpID0+IHtcbiAgICAgIGxldCB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zO1xuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBzZWxlY3RlZE9wdGlvbnMuc29tZShcbiAgICAgICAgICAoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlXG4gICAgICAgIClcbiAgICAgICAgICA/IHNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gdmFsdWUgIT09IG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICA6IFsuLi5zZWxlY3RlZE9wdGlvbnMsIG9wdGlvbl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gW29wdGlvbl07XG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnModXBkYXRlZFNlbGVjdGVkT3B0aW9ucyk7XG5cbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSk7XG4gICAgfSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpXG4gICAgICAgID8gZGVmYXVsdFZhbHVlXG4gICAgICAgIDogW2RlZmF1bHRWYWx1ZV07XG5cbiAgICAgIGxldCB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYWxsT3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKChhbGwsIGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXNPcHRpb24oaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWxsLCBpdGVtXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIC4uLml0ZW0ub3B0aW9uc107XG4gICAgICAgICAgfVxuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IGFsbE9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgZGVmYXVsdFZhbHVlcy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnModXBkYXRlZFNlbGVjdGVkT3B0aW9ucyk7XG4gICAgfVxuICB9LCBbZGVmYXVsdFZhbHVlLCBvcHRpb25zXSk7XG5cbiAgY29uc3QgY29udGV4dFZhbHVlOiBTZWxlY3RDb250ZXh0U3RhdGUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBtdWx0aXBsZSxcbiAgICAgIHNlbGVjdEFsbCxcbiAgICAgIHNob3dFeHBhbmRlZEdyb3VwLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24sXG4gICAgICBzZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VhcmNoS2V5d29yZCxcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgICB9KSxcbiAgICBbXG4gICAgICBzZWxlY3RBbGwsXG4gICAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICAgIHNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWFyY2hLZXl3b3JkLFxuICAgIF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU2VsZWN0Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCB7IFNlbGVjdENvbnRleHQsIFNlbGVjdENvbnRleHRQcm92aWRlciB9O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vU2VsZWN0b3IubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vLi4vVGFnXCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHNob3dTZWxlY3RlZEFzVGFnczogYm9vbGVhbjtcbiAgaXNEcm9wZG93bk9wZW5lZDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFNlbGVjdG9yKHtcbiAgcGxhY2Vob2xkZXIsXG4gIHNob3dTZWxlY3RlZEFzVGFncyxcbiAgaXNEcm9wZG93bk9wZW5lZCxcbn06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2VsZWN0ZWRPcHRpb25zLCBtdWx0aXBsZSwgdXBkYXRlU2VsZWN0ZWRPcHRpb24gfSA9XG4gICAgdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcblxuICBjb25zdCBoYW5kbGVUYWdDbGljayA9IHVzZUNhbGxiYWNrKChldmVudDogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlVGFnQ2xvc2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gc2VsZWN0ZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sXG4gICAgW3NlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICBjb25zdCBwbGFjZWhvbGRlclRvU2hvdyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIHsgW3N0eWxlcy5hY3RpdmVdOiBpc0Ryb3Bkb3duT3BlbmVkIH0sXG4gICAgICAgIF0pfVxuICAgICAgPlxuICAgICAgICB7cGxhY2Vob2xkZXJ9XG4gICAgICA8L3NwYW4+XG4gICAgKSxcbiAgICBbcGxhY2Vob2xkZXIsIGlzRHJvcGRvd25PcGVuZWRdXG4gICk7XG5cbiAgY29uc3Qgc2hvd0FzVGFncyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgICAgICBwbGFjZWhvbGRlclRvU2hvd1xuICAgICAgKSA6IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7c2VsZWN0ZWRPcHRpb25zLm1hcCgoeyBsYWJlbCwgdmFsdWUgfSkgPT4gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAga2V5PXt2YWx1ZX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudGFnV3JhcHBlcn1cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlVGFnQ2xpY2t9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxUYWcga2V5PXt2YWx1ZX0gdmFsdWU9e3ZhbHVlfSBjbG9zYWJsZSBvbkNsb3NlPXtoYW5kbGVUYWdDbG9zZX0+XG4gICAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgICA8L1RhZz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC8+XG4gICAgICApLFxuICAgIFtzZWxlY3RlZE9wdGlvbnMsIHBsYWNlaG9sZGVyVG9TaG93XVxuICApO1xuXG4gIGNvbnN0IHNob3dBc1RleHQgPSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RlZE9wdGlvbnN9XG4gICAgPntgJHtwbGFjZWhvbGRlcn0gKCR7c2VsZWN0ZWRPcHRpb25zLmxlbmd0aH0pYH08L3NwYW4+XG4gICkgOiAoXG4gICAgcGxhY2Vob2xkZXJUb1Nob3dcbiAgKTtcblxuICBsZXQgY29udGVudDtcbiAgaWYgKG11bHRpcGxlKSB7XG4gICAgY29udGVudCA9IHNob3dTZWxlY3RlZEFzVGFncyA/IHNob3dBc1RhZ3MgOiBzaG93QXNUZXh0O1xuICB9IGVsc2Uge1xuICAgIGNvbnRlbnQgPSAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICAgIHBsYWNlaG9sZGVyVG9TaG93XG4gICAgKSA6IChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNlbGVjdGVkT3B0aW9ufT57c2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsfTwvc3Bhbj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdG9yO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWxlY3RvciB9IGZyb20gXCIuL1NlbGVjdG9yXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdCB9IGZyb20gXCIuL1NlbGVjdFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgRml4ZWRTaXplTGlzdCwgTGlzdE9uU2Nyb2xsUHJvcHMgfSBmcm9tIFwicmVhY3Qtd2luZG93XCI7XG5pbXBvcnQgSW5maW5pdGVMb2FkZXIgZnJvbSBcInJlYWN0LXdpbmRvdy1pbmZpbml0ZS1sb2FkZXJcIjtcblxuaW1wb3J0IFRhYmxlSGVhZGVyIGZyb20gXCIuL1RhYmxlSGVhZGVyXCI7XG5pbXBvcnQgVGFibGVSb3cgZnJvbSBcIi4vVGFibGVSb3dcIjtcbmltcG9ydCB7IFNvcnRPcmRlciB9IGZyb20gXCIuLi8uLi90eXBlcy90YWJsZVwiO1xuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGUubW9kdWxlLmNzc1wiO1xuXG5cblxuXG5leHBvcnQgdHlwZSBDb2x1bW5UeXBlID0ge1xuICBrZXk6IHN0cmluZztcbiAgdGl0bGU6IEpTWC5FbGVtZW50IHwgc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRhdGFJbmRleDogc3RyaW5nO1xuICByZW5kZXI/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZykgPT4gSlNYLkVsZW1lbnQ7XG4gIHdpZHRoPzogc3RyaW5nO1xuICBkZWZhdWx0U29ydE9yZGVyPzogU29ydE9yZGVyO1xuICBzb3J0ZWQ/OiBib29sZWFuO1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIG9uU29ydD86IChzb3J0T3JkZXI6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgZGF0YVNvdXJjZTogUmVjb3JkPHN0cmluZywgYW55PltdO1xuICB0YWJsZUhlaWdodDogbnVtYmVyO1xuICBvblJvd0NsaWNrPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIGhhc0Fycm93PzogYm9vbGVhbjtcbiAgb25Mb2FkTW9yZT86IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIHNldFBhZ2U/OiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgcGxhY2Vob2xkZXI/OiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIHJvd0hlaWdodD86IG51bWJlcjtcbiAgaGVhZGVySGVpZ2h0PzogbnVtYmVyO1xuICBkaXNhYmxlTGF6eUxvYWRlcj86IGJvb2xlYW47XG4gIGFjdGl2ZVJvd3M/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpdGVtc0NvdW50PzogbnVtYmVyO1xuICBpc0hlYWRlclN0aWNreT86IGJvb2xlYW47XG4gIGhhc1ZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBUYWJsZSh7XG4gIGNvbHVtbnMsXG4gIGRhdGFTb3VyY2UsXG4gIG9uUm93Q2xpY2ssXG4gIGhhc0Fycm93LFxuICBvbkxvYWRNb3JlLFxuICBwYWdlLFxuICBzZXRQYWdlLFxuICBwYWdlU2l6ZSA9IFRhYmxlQ29uZmlnLlBBR0VfU0laRSxcbiAgdGFibGVIZWlnaHQsXG4gIHBsYWNlaG9sZGVyLFxuICByb3dIZWlnaHQgPSBUYWJsZUNvbmZpZy5ST1dfSEVJR0hULFxuICBoZWFkZXJIZWlnaHQgPSBUYWJsZUNvbmZpZy5IRUFERVJfSEVJR0hULFxuICBkaXNhYmxlTGF6eUxvYWRlcixcbiAgYWN0aXZlUm93cyxcbiAgaXRlbXNDb3VudCxcbiAgaXNIZWFkZXJTdGlja3kgPSBmYWxzZSxcbiAgaGFzVmlydHVhbFNjcm9sbCA9IHRydWUsXG4gIGNsYXNzTmFtZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IFtzY3JvbGxUb3AsIHNldFNjcm9sbFRvcF0gPSB1c2VTdGF0ZSgwKTtcblxuICBjb25zdCByZW5kZXJSb3cgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBkYXRhLCBpbmRleCwgc3R5bGUgfTogeyBkYXRhOiBhbnk7IGluZGV4OiBudW1iZXI7IHN0eWxlOiBhbnkgfSkgPT4ge1xuICAgICAgY29uc3Qgcm93ID0gZGF0YVtpbmRleF07XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLnN0eWxlLCB0b3A6IHN0eWxlLnRvcCB9fT5cbiAgICAgICAgICA8VGFibGVSb3dcbiAgICAgICAgICAgIGRhdGE9e3Jvd31cbiAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBvblJvd0NsaWNrPXtvblJvd0NsaWNrfVxuICAgICAgICAgICAgaGFzQXJyb3c9e2hhc0Fycm93fVxuICAgICAgICAgICAgcm93SGVpZ2h0PXtyb3dIZWlnaHR9XG4gICAgICAgICAgICBpc0FjdGl2ZT17ISFhY3RpdmVSb3dzPy5bcm93LmlkXX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSxcbiAgICBbY29sdW1ucywgYWN0aXZlUm93cywgaGFzQXJyb3csIHJvd0hlaWdodCwgb25Sb3dDbGlja11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVMaXN0U2Nyb2xsID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgc2Nyb2xsT2Zmc2V0IH06IExpc3RPblNjcm9sbFByb3BzKSA9PiB7XG4gICAgICBzZXRTY3JvbGxUb3Aoc2Nyb2xsT2Zmc2V0KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgbG9hZE1vcmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVMYXp5TG9hZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGFTb3VyY2UubGVuZ3RoID09PSBpdGVtc0NvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGFTb3VyY2UubGVuZ3RoIDwgcGFnZVNpemUgKiBwYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNldFBhZ2UgJiYgb25Mb2FkTW9yZSkge1xuICAgICAgc2V0UGFnZShwYWdlICsgMSk7XG4gICAgICBvbkxvYWRNb3JlKHBhZ2UgKyAxKTtcbiAgICB9XG4gIH0sIFtcbiAgICBkaXNhYmxlTGF6eUxvYWRlcixcbiAgICBkYXRhU291cmNlLmxlbmd0aCxcbiAgICBpdGVtc0NvdW50LFxuICAgIHBhZ2VTaXplLFxuICAgIHBhZ2UsXG4gICAgc2V0UGFnZSxcbiAgICBvbkxvYWRNb3JlLFxuICBdKTtcblxuICBjb25zdCBpc0l0ZW1Mb2FkZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKGRpc2FibGVMYXp5TG9hZGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZGV4IDwgZGF0YVNvdXJjZS5sZW5ndGggLSBUYWJsZUNvbmZpZy5JVEVNU19MT0FERUQ7XG4gICAgfSxcbiAgICBbZGF0YVNvdXJjZS5sZW5ndGgsIGRpc2FibGVMYXp5TG9hZGVyXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtoYXNWaXJ0dWFsU2Nyb2xsID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRhYmxlfT5cbiAgICAgICAgICAgIDxUYWJsZUhlYWRlclxuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBzY3JvbGxUb3A9e3Njcm9sbFRvcH1cbiAgICAgICAgICAgICAgaGVhZGVySGVpZ2h0PXtoZWFkZXJIZWlnaHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyEhcGxhY2Vob2xkZXIgJiYgIWRhdGFTb3VyY2UubGVuZ3RoID8gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucGxhY2Vob2xkZXJDb250YWluZXJ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUhlaWdodCB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxJbmZpbml0ZUxvYWRlclxuICAgICAgICAgICAgICAgIGlzSXRlbUxvYWRlZD17aXNJdGVtTG9hZGVkfVxuICAgICAgICAgICAgICAgIGl0ZW1Db3VudD17ZGF0YVNvdXJjZS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgbG9hZE1vcmVJdGVtcz17bG9hZE1vcmV9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7KHsgb25JdGVtc1JlbmRlcmVkLCByZWYgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPEZpeGVkU2l6ZUxpc3RcbiAgICAgICAgICAgICAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17dGFibGVIZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1TaXplPXtyb3dIZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Db3VudD17ZGF0YVNvdXJjZS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhPXtkYXRhU291cmNlfVxuICAgICAgICAgICAgICAgICAgICBvblNjcm9sbD17aGFuZGxlTGlzdFNjcm9sbH1cbiAgICAgICAgICAgICAgICAgICAgb25JdGVtc1JlbmRlcmVkPXtvbkl0ZW1zUmVuZGVyZWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNjcm9sbGJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3JlbmRlclJvd31cbiAgICAgICAgICAgICAgICAgIDwvRml4ZWRTaXplTGlzdD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L0luZmluaXRlTG9hZGVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICAgICAgc3R5bGVzLnNjcm9sbGJhckNvbnRhaW5lcixcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlSGVpZ2h0IH19XG4gICAgICAgID5cbiAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBzY3JvbGxUb3A9e3Njcm9sbFRvcH1cbiAgICAgICAgICAgIGlzSGVhZGVyU3RpY2t5PXtpc0hlYWRlclN0aWNreX1cbiAgICAgICAgICAgIGhlYWRlckhlaWdodD17aGVhZGVySGVpZ2h0fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2RhdGFTb3VyY2UubWFwKChyb3csIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8VGFibGVSb3dcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgZGF0YT17cm93fVxuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBvblJvd0NsaWNrPXtvblJvd0NsaWNrfVxuICAgICAgICAgICAgICBoYXNBcnJvdz17aGFzQXJyb3d9XG4gICAgICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAgICAgICBpc0FjdGl2ZT17ISFhY3RpdmVSb3dzPy5bcm93Py5pZF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgVGFibGVIZWFkZXJDZWxsIGZyb20gXCIuL1RhYmxlSGVhZGVyQ2VsbFwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVIZWFkZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIHNjcm9sbFRvcDogbnVtYmVyO1xuICBpc0hlYWRlclN0aWNreT86IGJvb2xlYW47XG4gIGhlYWRlckhlaWdodD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlSGVhZGVyKHtcbiAgY29sdW1ucyxcbiAgc2Nyb2xsVG9wLFxuICBpc0hlYWRlclN0aWNreSxcbiAgaGVhZGVySGVpZ2h0LFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgeyBbc3R5bGVzLmJvcmRlckJvdHRvbV06ICEhc2Nyb2xsVG9wIH0sXG4gICAgICAgIHsgW3N0eWxlcy5pc0hlYWRlclN0aWNreV06IGlzSGVhZGVyU3RpY2t5IH0sXG4gICAgICBdKX1cbiAgICAgIHN0eWxlPXt7IGhlaWdodDogaGVhZGVySGVpZ2h0IH19XG4gICAgPlxuICAgICAge2NvbHVtbnMubWFwKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiAoXG4gICAgICAgIDxUYWJsZUhlYWRlckNlbGxcbiAgICAgICAgICBrZXk9e2B0YWJsZS1oZWFkLWNlbGwtJHtjb2x1bW5JbmRleH1gfVxuICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyO1xuIiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBpY29uQ2FyZXREb3duIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtZG93bi5zdmdcIjtcbmltcG9ydCBpY29uQ2FyZXRVcCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LXVwLnN2Z1wiO1xuaW1wb3J0IHsgU29ydE9yZGVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3RhYmxlXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZUhlYWRlckNlbGwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW46IENvbHVtblR5cGU7XG59O1xuXG5mdW5jdGlvbiBUYWJsZUhlYWRlckNlbGwoeyBjb2x1bW4gfTogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIG9uU29ydCxcbiAgICBzb3J0YWJsZSxcbiAgICBzb3J0ZWQsXG4gICAgZGVmYXVsdFNvcnRPcmRlcixcbiAgICB0aXRsZSxcbiAgICB3aWR0aCxcbiAgICBjbGFzc05hbWUsXG4gIH0gPSBjb2x1bW47XG5cbiAgY29uc3QgW3NvcnRPcmRlciwgc2V0U29ydE9yZGVyXSA9IHVzZVN0YXRlKFxuICAgICgpID0+IGRlZmF1bHRTb3J0T3JkZXIgfHwgU29ydE9yZGVyLkRFU0NcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTb3J0Q29sdW1uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc29ydGVkKSB7XG4gICAgICByZXR1cm4gb25Tb3J0KHNvcnRPcmRlcik7XG4gICAgfVxuICAgIGNvbnN0IG5ld1NvcnRPcmRlciA9XG4gICAgICBzb3J0T3JkZXIgPT09IFNvcnRPcmRlci5ERVNDID8gU29ydE9yZGVyLkFTQyA6IFNvcnRPcmRlci5ERVNDO1xuICAgIHNldFNvcnRPcmRlcihuZXdTb3J0T3JkZXIpO1xuICAgIG9uU29ydChuZXdTb3J0T3JkZXIpO1xuICB9LCBbb25Tb3J0LCBzb3J0T3JkZXIsIHNvcnRlZF0pO1xuXG4gIGNvbnN0IGNlbGxQcm9wcyA9XG4gICAgb25Tb3J0ICYmIHNvcnRhYmxlXG4gICAgICA/IHtcbiAgICAgICAgICBvbkNsaWNrOiBoYW5kbGVTb3J0Q29sdW1uLFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuXG4gIGNvbnN0IGRpc3BsYXlBcnJvdyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgIGlmIChzb3J0T3JkZXIgPT09IFNvcnRPcmRlci5ERVNDKSB7XG4gICAgICByZXR1cm4gaWNvbkNhcmV0RG93bjtcbiAgICB9XG4gICAgcmV0dXJuIGljb25DYXJldFVwO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLmNlbGxQcm9wc31cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMudGFibGVIZWFkZXJDZWxsLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnNvcnRJY29uVmlzaWJsZV06IHNvcnRhYmxlICYmIHNvcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnNvcnRhYmxlXTogc29ydGFibGUsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIHN0eWxlPXt7IHdpZHRoIH19XG4gICAgPlxuICAgICAge3RpdGxlfVxuICAgICAge3NvcnRhYmxlID8gKFxuICAgICAgICA8SWNvbiBhbHQ9e1wiU29ydCBidXR0b25cIn0gc2l6ZT1cInNtYWxsXCIgc3JjPXtkaXNwbGF5QXJyb3coKX0gLz5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlckNlbGw7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IFRhYmxlUm93Q2VsbCBmcm9tIFwiLi9UYWJsZVJvd0NlbGxcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlUm93Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBvblJvd0NsaWNrPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIGhhc0Fycm93PzogYm9vbGVhbjtcbiAgcm93SGVpZ2h0OiBudW1iZXI7XG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93KHtcbiAgZGF0YSxcbiAgY29sdW1ucyxcbiAgb25Sb3dDbGljayxcbiAgaGFzQXJyb3csXG4gIHJvd0hlaWdodCxcbiAgaXNBY3RpdmUsXG59OiBQcm9wcykge1xuICBjb25zdCBoYW5kbGVSb3dDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Sb3dDbGljayAmJiB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgb25Sb3dDbGljayhkYXRhKTtcbiAgICB9XG4gIH0sIFtkYXRhLCBvblJvd0NsaWNrXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaGFzQXJyb3ddOiBoYXNBcnJvdyxcbiAgICAgICAgICBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVSb3dDbGlja31cbiAgICA+XG4gICAgICB7Y29sdW1ucy5tYXAoKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IChcbiAgICAgICAgPFRhYmxlUm93Q2VsbFxuICAgICAgICAgIGtleT17YHRhYmxlLXJvdy1jZWxsLSR7Y29sdW1uSW5kZXh9YH1cbiAgICAgICAgICBpdGVtPXtkYXRhfVxuICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZVJvd0NlbGwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBpdGVtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nO1xuICBjb2x1bW46IENvbHVtblR5cGU7XG4gIHJvd0hlaWdodDogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gVGFibGVSb3dDZWxsKHsgaXRlbSwgY29sdW1uLCByb3dIZWlnaHQgfTogUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IGRhdGEgPSB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIiA/IGl0ZW0gOiBpdGVtW2NvbHVtbi5kYXRhSW5kZXhdO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY29sdW1uLmNsYXNzTmFtZV0pfVxuICAgICAgc3R5bGU9e3sgaGVpZ2h0OiByb3dIZWlnaHQsIHdpZHRoOiBjb2x1bW4/LndpZHRoIH19XG4gICAgPlxuICAgICAge2NvbHVtbi5yZW5kZXIgPyBjb2x1bW4ucmVuZGVyKGRhdGEpIDogZGF0YX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3dDZWxsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWJsZSB9IGZyb20gXCIuL1RhYmxlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IGljb25Dcm9zc2VkIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY3Jvc3NlZC5zdmdcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWcubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNsb3NhYmxlPzogYm9vbGVhbjtcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25EZWxldGU/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuICBvbkNsb3NlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRhZyh7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGNsb3NhYmxlLCB2YWx1ZSwgb25DbG9zZSwgZGlzYWJsZWQsIG9uRGVsZXRlIH06IFByb3BzKSB7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgICAgaWYodHlwZW9mIG9uRGVsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25EZWxldGUodmFsdWUpXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9uQ2xvc2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsb3NlKGV2ZW50LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DbG9zZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgeyBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQgfV0pfT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L3NwYW4+XG4gICAgICB7Y2xvc2FibGUgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZUJ1dHRvbn0gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxuICAgICAgICAgIDxJY29uIHNyYz17aWNvbkNyb3NzZWR9IGFsdD1cIkNsb3NlXCIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFnO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWcgfSBmcm9tIFwiLi9UYWdcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgSGludCB9IGZyb20gXCJyZWFjdC1hdXRvY29tcGxldGUtaGludFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhZ3NJbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vVGFnXCI7XG5cbnR5cGUgVGFnc0lucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nW107XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICBzaXplPzogU2l6ZTtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW5wdXRNb2RlPzogVGV4dElucHV0TW9kZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0YWdPcHRpb25zPzogc3RyaW5nW107XG59O1xuXG5mdW5jdGlvbiBUYWdzSW5wdXQoe1xuICBjbGFzc05hbWUsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIHBhdHRlcm4sXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJzbWFsbFwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBpbnB1dE1vZGUsXG4gIGRpc2FibGVkLFxuICB0YWdPcHRpb25zID0gW10sXG59OiBUYWdzSW5wdXRQcm9wcykge1xuICBjb25zdCBbdGV4dCwgc2V0VGV4dF0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpO1xuICBjb25zdCBbdGFncywgc2V0VGFnc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4odmFsdWUpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBzZXRUYWdzKHZhbHVlKTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgc2V0VGFnc10pO1xuXG4gIGNvbnN0IGhhbmRsZVRleHRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgICAgc2V0VGV4dCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0VGV4dF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUYWdEZWxldGUgPSB1c2VDYWxsYmFjayhcbiAgICAodGFnOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUYWdzID0gdGFncy5maWx0ZXIoKHRhZ0l0ZW0pID0+IHRhZ0l0ZW0gIT09IHRhZyk7XG4gICAgICBzZXRUYWdzKHVwZGF0ZWRUYWdzKTtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZSh1cGRhdGVkVGFncyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdGFncywgc2V0VGFnc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5jb2RlID09PSBcIkVudGVyXCIgfHwgZS5jb2RlID09PSBcIk51bXBhZEVudGVyXCIpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCB1cGRhdGVkVGFncyA9IFsuLi50YWdzLCB0ZXh0XTtcblxuICAgICAgICBzZXRUYWdzKHVwZGF0ZWRUYWdzKTtcbiAgICAgICAgc2V0VGV4dChcIlwiKTtcblxuICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICBvbkNoYW5nZSh1cGRhdGVkVGFncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFt0YWdzLCB0ZXh0LCBzZXRUYWdzLCBzZXRUZXh0XVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8SGludCBvcHRpb25zPXt0YWdPcHRpb25zfSBhbGxvd0VudGVyRmlsbD17ZmFsc2V9IGFsbG93VGFiRmlsbD17dHJ1ZX0+XG4gICAgICA8aW5wdXRcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy50ZXh0SW5wdXQsXG4gICAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyIH0sXG4gICAgICAgIF0pfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlVGV4dENoYW5nZX1cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICBwYXR0ZXJuPXtwYXR0ZXJufVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgIHZhbHVlPXt0ZXh0fVxuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgICAgaW5wdXRNb2RlPXtpbnB1dE1vZGV9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIC8+XG4gICAgPC9IaW50PlxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHt0YWdzLm1hcCgodGFnKSA9PiAoXG4gICAgICAgIDxUYWcga2V5PXt0YWd9IHZhbHVlPXt0YWd9IG9uRGVsZXRlPXtoYW5kbGVUYWdEZWxldGV9IGNsb3NhYmxlPlxuICAgICAgICAgIHt0YWd9XG4gICAgICAgIDwvVGFnPlxuICAgICAgKSl9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRhZ0lucHV0fT57aW5wdXRFbGVtZW50fTwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuZXhwb3J0IGRlZmF1bHQgVGFnc0lucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWdzSW5wdXQgfSBmcm9tIFwiLi9UYWdzSW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UZXh0SW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSwgVGV4dElucHV0TW9kZSwgVGV4dElucHV0VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcbiAgb25LZXlEb3duPzogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICBzaXplPzogU2l6ZTtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW5wdXRNb2RlPzogVGV4dElucHV0TW9kZTtcbn07XG5cbmZ1bmN0aW9uIFRleHRJbnB1dCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgb25CbHVyLFxuICBvbktleURvd24sXG4gIHBsYWNlaG9sZGVyLFxuICB2YWx1ZSxcbiAgbmFtZSxcbiAgcGF0dGVybixcbiAgaW5wdXRSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBpbnB1dE1vZGUsXG59OiBUZXh0SW5wdXRQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXG4gICAgPGlucHV0XG4gICAgICBkYXRhLXRlc3RpZD1cImlucHV0XCJcbiAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLnRleHRJbnB1dCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlciB9LFxuICAgICAgXSl9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgIHBhdHRlcm49e3BhdHRlcm59XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgaW5wdXRNb2RlPXtpbnB1dE1vZGV9XG4gICAgLz5cbiAgKTtcbiAgaWYgKGxhYmVsKSB7XG4gICAgcmV0dXJuIDxMYWJlbCB2YWx1ZT17bGFiZWx9PntpbnB1dEVsZW1lbnR9PC9MYWJlbD47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDw+e2lucHV0RWxlbWVudH08Lz47XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IFRleHRJbnB1dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGV4dElucHV0IH0gZnJvbSBcIi4vVGV4dElucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBUb2FzdCh7IGNoaWxkcmVuLCBjb250YWluZXJSZWYsIG9uQ2xpY2sgPSAoKSA9PiB7fSB9OiBUb2FzdFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy50b2FzdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0XCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb2FzdENvbnRhaW5lclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5mdW5jdGlvbiBUb2FzdENvbnRhaW5lcih7IGNoaWxkcmVuLCBiYXNlWkluZGV4IH06IFRvYXN0Q29udGFpbmVyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudG9hc3RDb250YWluZXJdKX1cbiAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdC1jb250YWluZXJcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9hc3RDb250YWluZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0IH0gZnJvbSBcIi4vVG9hc3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3RDb250YWluZXIgfSBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub29sdGlwLm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb29sdGlwUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIHRleHQ6IHN0cmluZztcbiAgcGxhY2VtZW50OiBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiO1xuICBzaG93VG9vbHRpcDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFRvb2x0aXAoeyBjaGlsZHJlbiwgdGV4dCwgcGxhY2VtZW50LCBzaG93VG9vbHRpcCB9OiBUb29sdGlwUHJvcHMpIHtcbiAgY29uc3QgW3Rvb2x0aXBJc1Zpc2libGUsIHNldFRvb2x0aXBJc1Zpc2libGVdID0gdXNlU3RhdGU8Ym9vbGVhbj4oKTtcblxuICBjb25zdCBvblRvdWNoRW5kSGFuZGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRUb29sdGlwSXNWaXNpYmxlKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gc2V0VGltZW91dCgoKSA9PiBCb29sZWFuKTtcbiAgICBpZiAodG9vbHRpcElzVmlzaWJsZSkge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHNldFRvb2x0aXBJc1Zpc2libGUoZmFsc2UpLCA1MDAwKTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XG4gIH0sIFt0b29sdGlwSXNWaXNpYmxlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge3Nob3dUb29sdGlwID8gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXh0PXt0ZXh0fVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwidG9vbHRpcFwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMudG9vbHRpcCxcbiAgICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnRdLFxuICAgICAgICAgICAgdHlwZW9mIHRvb2x0aXBJc1Zpc2libGUgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogdG9vbHRpcElzVmlzaWJsZVxuICAgICAgICAgICAgICA/IHN0eWxlcy52aXNpYmxlXG4gICAgICAgICAgICAgIDogc3R5bGVzLm5vdFZpc2libGUsXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgb25Ub3VjaEVuZD17b25Ub3VjaEVuZEhhbmRsZXJ9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXA7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvb2x0aXAgfSBmcm9tIFwiLi9Ub29sdGlwXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9WaWRlby5tb2R1bGUuY3NzXCI7XG5cbi8qKlxuICogVGhlcmUgaXMgYSBrbm93biBpc3N1ZSBpbiBSZWFjdCBpbiByZWdhcmRzIHRvIHRoZSAnbXV0ZWQnIHByb3BlcnR5IHdoaWNoIGNhdXNlcyB0aGUgd2FybmluZzpcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEwMzg5XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcbiAqL1xuXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG5cbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSB7XG4gIHNyYzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGxheW91dD86IExheW91dDtcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xuICBsb29wPzogYm9vbGVhbjtcbiAgbXV0ZWQ/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcG9zdGVyPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlkZW8oe1xuICBzcmMsXG4gIHR5cGUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHBvc3RlcixcbiAgbXV0ZWQgPSB0cnVlLFxuICBsb29wID0gdHJ1ZSxcbiAgYXV0b1BsYXkgPSB0cnVlLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbn06IFZpZGVvUHJvcHMpIHtcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICA8dmlkZW9cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICAgIGxvb3A9e2xvb3B9XG4gICAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICAgIHBsYXlzSW5saW5lXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICAgIDwvdmlkZW8+XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDx2aWRlb1xuICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICBsb29wPXtsb29wfVxuICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICBwbGF5c0lubGluZVxuICAgID5cbiAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICA8L3ZpZGVvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW8sIFZpZGVvUHJvcHMgfSBmcm9tIFwiLi9WaWRlb1wiO1xuIiwiZXhwb3J0IGVudW0gVGFibGVDb25maWcge1xuICBST1dfSEVJR0hUID0gNDgsXG4gIEhFQURFUl9IRUlHSFQ9MzIsXG4gIFBBR0VfU0laRSA9IDEwMCxcbiAgSVRFTVNfTE9BREVEID0gNSxcbn1cbiIsImV4cG9ydCAqIGZyb20gXCIuLi9jb25zdGFudHMvVGFibGVcIjtcbiIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTnVtcGFkXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL092ZXJsYXlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvU2VsZWN0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhYmxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UYWdzSW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGV4dElucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RvYXN0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1Rvb2x0aXBcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVmlkZW9cIjtcbiIsImV4cG9ydCBlbnVtIFNvcnRPcmRlciB7XG4gICAgQVNDID0gXCJhc2NcIixcbiAgICBERVNDID0gXCJkZXNjXCIsXG4gIH1cbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nNjknIGhlaWdodD0nMjcnIHZpZXdCb3g9JzAgMCA2OSAyNycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC4xMzMzIDI2TDEzLjc4ODYgMjYuMzYyMkMxMy44ODE2IDI2LjQ1MDcgMTQuMDA1IDI2LjUgMTQuMTMzMyAyNi41VjI2Wk0xIDEzLjVMMC42NTUyODcgMTMuMTM3OEMwLjU1NjEyNyAxMy4yMzIyIDAuNSAxMy4zNjMxIDAuNSAxMy41QzAuNSAxMy42MzY5IDAuNTU2MTI3IDEzLjc2NzggMC42NTUyODcgMTMuODYyMkwxIDEzLjVaTTE0LjEzMzMgMVYwLjVDMTQuMDA1IDAuNSAxMy44ODE2IDAuNTQ5MzQ1IDEzLjc4ODYgMC42Mzc4MjJMMTQuMTMzMyAxWk02Ny41IDJWMjVINjguNVYySDY3LjVaTTYzLjQ2NjcgMjUuNUgxNC4xMzMzVjI2LjVINjMuNDY2N1YyNS41Wk0xNC40NzggMjUuNjM3OEwxLjM0NDcxIDEzLjEzNzhMMC42NTUyODcgMTMuODYyMkwxMy43ODg2IDI2LjM2MjJMMTQuNDc4IDI1LjYzNzhaTTEuMzQ0NzEgMTMuODYyMkwxNC40NzggMS4zNjIxOEwxMy43ODg2IDAuNjM3ODIyTDAuNjU1Mjg3IDEzLjEzNzhMMS4zNDQ3MSAxMy44NjIyWk0xNC4xMzMzIDEuNUg2My40NjY3VjAuNUgxNC4xMzMzVjEuNVpNNjcgMjUuNUg2My40NjY3VjI2LjVINjdWMjUuNVpNNjcgMC41SDYzLjQ2NjdWMS41SDY3VjAuNVpNNjcuNSAyNUM2Ny41IDI1LjI3NjEgNjcuMjc2MSAyNS41IDY3IDI1LjVWMjYuNUM2Ny44Mjg0IDI2LjUgNjguNSAyNS44Mjg0IDY4LjUgMjVINjcuNVpNNjguNSAyQzY4LjUgMS4xNzE1NyA2Ny44Mjg0IDAuNSA2NyAwLjVWMS41QzY3LjI3NjEgMS41IDY3LjUgMS43MjM4NiA2Ny41IDJINjguNVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzY3BhdGggZD0nTTMyLjY0NjQgNi4zNTM1NUw0Ni42NDY0IDIwLjM1MzZMNDcuMzUzNiAxOS42NDY0TDMzLjM1MzYgNS42NDY0NUwzMi42NDY0IDYuMzUzNTVaTTQ2LjY0NjQgNS42NDY0NUwzMi42NDY0IDE5LjY0NjRMMzMuMzUzNiAyMC4zNTM2TDQ3LjM1MzYgNi4zNTM1NUw0Ni42NDY0IDUuNjQ2NDVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTEgMTBMNy41IDNMMTQgMTAnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMS41IDEuNUwxMy41IDEzLjVNMS41IDEzLjVMMTMuNSAxLjUnIHN0cm9rZT0nYmxhY2snLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTUuNDY4NSAxNS40NjY1TDExLjIwMTggMTEuMTk5OU02LjkzNTE2IDEzLjMzMzJDMy40MDA1MyAxMy4zMzMyIDAuNTM1MTU2IDEwLjQ2NzggMC41MzUxNTYgNi45MzMyQzAuNTM1MTU2IDMuMzk4NTggMy40MDA1MyAwLjUzMzIwMyA2LjkzNTE2IDAuNTMzMjAzQzEwLjQ2OTggMC41MzMyMDMgMTMuMzM1MiAzLjM5ODU4IDEzLjMzNTIgNi45MzMyQzEzLjMzNTIgMTAuNDY3OCAxMC40Njk4IDEzLjMzMzIgNi45MzUxNiAxMy4zMzMyWicgc3Ryb2tlPSclMjM4OTg4OTEnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQuOTMzMSA0LjI2NzU4TDcuOTk5NzQgMTEuNzM0MkwxLjA2NjQxIDQuMjY3NTgnIHN0cm9rZT0nJTIzODk4ODkxJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGU9cmVxdWlyZShcInJlYWN0XCIpO2Z1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBrPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmgsbD1lLnVzZVN0YXRlLG09ZS51c2VFZmZlY3Qsbj1lLnVzZUxheW91dEVmZmVjdCxwPWUudXNlRGVidWdWYWx1ZTtmdW5jdGlvbiBxKGEsYil7dmFyIGQ9YigpLGY9bCh7aW5zdDp7dmFsdWU6ZCxnZXRTbmFwc2hvdDpifX0pLGM9ZlswXS5pbnN0LGc9ZlsxXTtuKGZ1bmN0aW9uKCl7Yy52YWx1ZT1kO2MuZ2V0U25hcHNob3Q9YjtyKGMpJiZnKHtpbnN0OmN9KX0sW2EsZCxiXSk7bShmdW5jdGlvbigpe3IoYykmJmcoe2luc3Q6Y30pO3JldHVybiBhKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSl9KX0sW2FdKTtwKGQpO3JldHVybiBkfVxuZnVuY3Rpb24gcihhKXt2YXIgYj1hLmdldFNuYXBzaG90O2E9YS52YWx1ZTt0cnl7dmFyIGQ9YigpO3JldHVybiFrKGEsZCl9Y2F0Y2goZil7cmV0dXJuITB9fWZ1bmN0aW9uIHQoYSxiKXtyZXR1cm4gYigpfXZhciB1PVwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudHx8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudD90OnE7ZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZT12b2lkIDAhPT1lLnVzZVN5bmNFeHRlcm5hbFN0b3JlP2UudXNlU3luY0V4dGVybmFsU3RvcmU6dTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNjA3KTtcbiJdLCJuYW1lcyI6WyJvcHRpb25zIiwiY2FwdHVyZSIsInVzZU91dHNpZGVDbGljayIsImNhbGxiYWNrIiwicmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaGFuZGxlQ2xpY2siLCJldmVudCIsImN1cnJlbnQiLCJjb250YWlucyIsInRhcmdldCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX3JlYWQiLCJvIiwibiIsIm0iLCJTeW1ib2wiLCJpdGVyYXRvciIsInIiLCJlIiwiaSIsImNhbGwiLCJhciIsIm5leHQiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiZXJyb3IiLCJ1c2VQcm9taXNlIiwiX3RoaXMiLCJ0aGlzIiwiX2EiLCJ1c2VTdGF0ZSIsImRhdGEiLCJ1bmRlZmluZWQiLCJpc1BlbmRpbmciLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsImlzU2V0dGxlZCIsInJlc3VsdCIsInNldFJlc3VsdCIsImhhc1VubW91bnRlZCIsImRpc3BhdGNoIiwidXNlQ2FsbGJhY2siLCJwcm9taXNlIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJnZW5lcmF0b3IiLCJlcnJvcl8xIiwiYm9keSIsImYiLCJ5IiwidCIsImciLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJsZW5ndGgiLCJzdGVwIiwiX19nZW5lcmF0b3IiLCJQIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInRoZW4iLCJhcHBseSIsIk9iamVjdCIsImNyZWF0ZSIsIlNXUkdsb2JhbFN0YXRlIiwiV2Vha01hcCIsIkVNUFRZX0NBQ0hFIiwiSU5JVElBTF9DQUNIRSIsIm5vb3AiLCJVTkRFRklORUQiLCJPQkpFQ1QiLCJpc1VuZGVmaW5lZCIsImlzRnVuY3Rpb24iLCJtZXJnZU9iamVjdHMiLCJhIiwiYiIsIlNUUl9VTkRFRklORUQiLCJpc1dpbmRvd0RlZmluZWQiLCJ3aW5kb3ciLCJpc0RvY3VtZW50RGVmaW5lZCIsImNyZWF0ZUNhY2hlSGVscGVyIiwiY2FjaGUiLCJrZXkiLCJzdGF0ZSIsImdldCIsImluZm8iLCJwcmV2IiwidGFibGUiLCJjb3VudGVyIiwic3RhYmxlSGFzaCIsImFyZyIsInR5cGUiLCJjb25zdHJ1Y3RvciIsImlzRGF0ZSIsIkRhdGUiLCJpbmRleCIsIlJlZ0V4cCIsInRvSlNPTiIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldCIsIkFycmF5Iiwia2V5cyIsInNvcnQiLCJvbmxpbmUiLCJvbldpbmRvd0V2ZW50Iiwib2ZmV2luZG93RXZlbnQiLCJiaW5kIiwicHJlc2V0IiwiaXNPbmxpbmUiLCJpc1Zpc2libGUiLCJ2aXNpYmlsaXR5U3RhdGUiLCJkZWZhdWx0Q29uZmlnT3B0aW9ucyIsImluaXRGb2N1cyIsImluaXRSZWNvbm5lY3QiLCJvbk9ubGluZSIsIm9uT2ZmbGluZSIsIklTX1JFQUNUX0xFR0FDWSIsIklTX1NFUlZFUiIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJuYXZpZ2F0b3JDb25uZWN0aW9uIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsInNsb3dDb25uZWN0aW9uIiwiaW5jbHVkZXMiLCJlZmZlY3RpdmVUeXBlIiwic2F2ZURhdGEiLCJlcnIiLCJhcmdzIiwiaXNBcnJheSIsIl9fdGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiTVVUQVRFX0VWRU5UIiwiY29uc3RhbnRzIiwiYXN5bmMiLCJpbnRlcm5hbE11dGF0ZSIsIl9rZXkiLCJfZGF0YSIsIl9vcHRzIiwicG9wdWxhdGVDYWNoZSIsInRocm93T25FcnJvciIsInJldmFsaWRhdGUiLCJyb2xsYmFja09uRXJyb3JPcHRpb24iLCJyb2xsYmFja09uRXJyb3IiLCJvcHRpbWlzdGljRGF0YSIsImtleUZpbHRlciIsIm1hdGNoZWRLZXlzIiwiaXQiLCJrZXlJdCIsInN0YXJ0c1dpdGgiLCJfayIsImFsbCIsIm1hcCIsIm11dGF0ZUJ5S2V5IiwiRVZFTlRfUkVWQUxJREFUT1JTIiwiTVVUQVRJT04iLCJGRVRDSCIsInJldmFsaWRhdG9ycyIsInN0YXJ0UmV2YWxpZGF0ZSIsImJlZm9yZU11dGF0aW9uVHMiLCJoYXNPcHRpbWlzdGljRGF0YSIsImRpc3BsYXllZERhdGEiLCJjdXJyZW50RGF0YSIsIl9jIiwiY29tbWl0dGVkRGF0YSIsImNhdGNoIiwicmVzIiwicmV2YWxpZGF0ZUFsbEtleXMiLCJpbml0Q2FjaGUiLCJwcm92aWRlciIsImhhcyIsIm9wdHMiLCJtdXRhdGUiLCJ1bm1vdW50Iiwic3Vic2NyaXB0aW9ucyIsInN1YnNjcmliZSIsInN1YnMiLCJzcGxpY2UiLCJpbmRleE9mIiwic2V0dGVyIiwiaW5pdFByb3ZpZGVyIiwicmVsZWFzZUZvY3VzIiwic2V0VGltZW91dCIsInJlbGVhc2VSZWNvbm5lY3QiLCJkZWxldGUiLCJNYXAiLCJkZWZhdWx0Q29uZmlnIiwib25Mb2FkaW5nU2xvdyIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJvbkVycm9yUmV0cnkiLCJfXyIsImNvbmZpZyIsIm1heFJldHJ5Q291bnQiLCJlcnJvclJldHJ5Q291bnQiLCJjdXJyZW50UmV0cnlDb3VudCIsInJldHJ5Q291bnQiLCJ0aW1lb3V0IiwiTWF0aCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIlNXUkNvbmZpZ0NvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZW5hYmxlRGV2dG9vbHMiLCJfX1NXUl9ERVZUT09MU19VU0VfXyIsInVzZSIsInVzZVNXUkNvbmZpZyIsInVzZUNvbnRleHQiLCJjb25jYXQiLCJ1c2VTV1JOZXh0Iiwia2V5XyIsImZldGNoZXJfIiwiUFJFTE9BRCIsInJlcSIsIl9fU1dSX0RFVlRPT0xTX1JFQUNUX18iLCJXSVRIX0RFRFVQRSIsImRlZHVwZSIsInVzZVNXUkhvb2tzQ29uZmlnIiwic3dyQ29uZmlnIiwidXNlTWVtbyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJkZWZpbmVQcm9wZXJ0eSIsInByb3BzIiwicGFyZW50Q29uZmlnIiwiaXNGdW5jdGlvbmFsQ29uZmlnIiwiZXh0ZW5kZWRDb25maWciLCJ1MSIsImYxIiwidTIiLCJmMiIsIm1lcmdlQ29uZmlncyIsImNhY2hlQ29udGV4dCIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsImNjIiwib2JqIiwib3V0IiwidG1wIiwiayIsImhhc093blByb3BlcnR5IiwiX19hc3NpZ24iLCJhc3NpZ24iLCJzIiwiYXJndW1lbnRzIiwicCIsInByb3RvdHlwZSIsIl9fY3JlYXRlQmluZGluZyIsImsyIiwiZW51bWVyYWJsZSIsIl9fc2V0TW9kdWxlRGVmYXVsdCIsIl9faW1wb3J0U3RhciIsIm1vZCIsIl9fZXNNb2R1bGUiLCJleHBvcnRzIiwiSGludCIsInJlYWN0XzEiLCJ1dGlsc18xIiwiX2IiLCJjaGlsZCIsImRlZmF1bHQiLCJDaGlsZHJlbiIsIm9ubHkiLCJjaGlsZHJlbiIsInRvTG93ZXJDYXNlIiwiZGlzYWJsZUhpbnQiLCJhbGxvd1RhYkZpbGwiLCJhbGxvd0VudGVyRmlsbCIsIm9uRmlsbCIsIm9uSGludCIsInZhbHVlTW9kaWZpZXIiLCJjaGlsZFByb3BzIiwibWFpbklucHV0UmVmIiwiaGludFdyYXBwZXJSZWYiLCJoaW50UmVmIiwidW5Nb2RpZmllZElucHV0VGV4dCIsInNldFVubW9kaWZpZWRJbnB1dFRleHQiLCJfZCIsInRleHQiLCJzZXRUZXh0IiwiX2UiLCJoaW50Iiwic2V0SGludCIsIl9mIiwibWF0Y2giLCJzZXRNYXRjaCIsIl9nIiwiY2hhbmdlRXZlbnQiLCJzZXRDaGFuZ2VFdmVudCIsImR1cGxpY2F0ZSIsImdldEZpcnN0RHVwbGljYXRlT3B0aW9uIiwiY29uc29sZSIsIndhcm4iLCJpbnB1dFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlSGludCIsInNldEhpbnRUZXh0QW5kSWQiLCJmaWx0ZXIiLCJ4Iiwic29ydEFzYyIsImdldE1hdGNoIiwic2xpY2UiLCJoYW5kbGVPbkZpbGwiLCJuZXdVbk1vZGlmaWVkVGV4dCIsIm9uQ2hhbmdlIiwic3R5bGUiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJ3aWR0aCIsImhlaWdodCIsImxpbmVIZWlnaHQiLCJib3hTaXppbmciLCJtYXJnaW4iLCJpbnRlcnBvbGF0ZVN0eWxlIiwicGFkZGluZyIsImJvcmRlclN0eWxlIiwiYm9yZGVyV2lkdGgiLCJjaGlsZFJlZiIsImNsb25lRWxlbWVudCIsIm1haW5JbnB1dCIsInBlcnNpc3QiLCJtb2RpZmllZFZhbHVlIiwib25CbHVyIiwicmVsYXRlZFRhcmdldCIsIm9uRm9jdXMiLCJvbktleURvd24iLCJjYXJldElzQXRUZXh0RW5kIiwiY3VycmVudFRhcmdldCIsInNlbGVjdGlvbkVuZCIsInByZXZlbnREZWZhdWx0IiwibWVyZ2VSZWZzIiwiY2xhc3NOYW1lIiwicG9zaXRpb24iLCJGcmFnbWVudCIsImRpc3BsYXkiLCJwb2ludGVyRXZlbnRzIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3hTaGFkb3ciLCJjb2xvciIsInRvcCIsImxlZnQiLCJ2aXNpYmlsaXR5Iiwid2hpdGVTcGFjZSIsIm9uQ2xpY2siLCJoaW50Q2FyZXRQb3NpdGlvbiIsImZvY3VzIiwiY2FyZXRQb3NpdGlvbiIsInNldFNlbGVjdGlvblJhbmdlIiwiYmFja2dyb3VuZCIsIm91dGxpbmUiLCJib3JkZXIiLCJjYXJldENvbG9yIiwiZGVmYXVsdFZhbHVlIiwidGFiSW5kZXgiLCJyZWZzIiwiX2kiLCJmaWx0ZXJlZFJlZnMiLCJCb29sZWFuIiwiaW5zdCIsImZpbHRlcmVkUmVmc18xIiwic3R5bGVzIiwiYXR0ciIsInN1YmF0dHIiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJkaXIiLCJqb2luIiwiYXJyYXkiLCJ0cmFja2VyIiwiaXNmZiIsInVzZXJBZ2VudCIsImFkZEV2ZW50Iiwib2JqZWN0IiwibWV0aG9kIiwidXNlQ2FwdHVyZSIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsImdldEtleXMiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsInVwIiwicmlnaHQiLCJkb3duIiwiZGVsIiwiaW5zIiwiaW5zZXJ0IiwiaG9tZSIsImVuZCIsInBhZ2V1cCIsInBhZ2Vkb3duIiwiY2Fwc2xvY2siLCJudW1fMCIsIm51bV8xIiwibnVtXzIiLCJudW1fMyIsIm51bV80IiwibnVtXzUiLCJudW1fNiIsIm51bV83IiwibnVtXzgiLCJudW1fOSIsIm51bV9tdWx0aXBseSIsIm51bV9hZGQiLCJudW1fZW50ZXIiLCJudW1fc3VidHJhY3QiLCJudW1fZGVjaW1hbCIsIm51bV9kaXZpZGUiLCJfbW9kaWZpZXIiLCJzaGlmdCIsImFsdCIsIm9wdGlvbiIsImN0cmwiLCJjb250cm9sIiwiY21kIiwiY29tbWFuZCIsIm1vZGlmaWVyTWFwIiwic2hpZnRLZXkiLCJjdHJsS2V5IiwiYWx0S2V5IiwibWV0YUtleSIsIl9tb2RzIiwiX2hhbmRsZXJzIiwiX2Rvd25LZXlzIiwid2luTGlzdGVuZEZvY3VzIiwiX3Njb3BlIiwiZWxlbWVudEhhc0JpbmRFdmVudCIsImNvZGUiLCJjaGFyQ29kZUF0Iiwic2V0U2NvcGUiLCJzY29wZSIsImdldFNjb3BlIiwiZWFjaFVuYmluZCIsIl9yZWYiLCJfcmVmJHNwbGl0S2V5Iiwic3BsaXRLZXkiLCJmb3JFYWNoIiwib3JpZ2luS2V5IiwidW5iaW5kS2V5cyIsImxlbiIsImxhc3RLZXkiLCJrZXlDb2RlIiwicmVjb3JkIiwiYTEiLCJhMiIsImFycjEiLCJhcnIyIiwiaXNJbmRleCIsImNvbXBhcmVBcnJheSIsImV2ZW50SGFuZGxlciIsImhhbmRsZXIiLCJlbGVtZW50IiwibW9kaWZpZXJzTWF0Y2giLCJzaG9ydGN1dCIsInJldHVyblZhbHVlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2FuY2VsQnViYmxlIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImtleU5hbWUiLCJrZXlOdW0iLCJnZXRNb2RpZmllclN0YXRlIiwia2V5ZG93biIsImtleXVwIiwia2V5U2hvcnRjdXQiLCJfZG93bktleXNDdXJyZW50IiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInRyaWdnZXIiLCJmaW5kIiwiaXRlbSIsInVuYmluZCIsImtleXNJbmZvIiwiX2xlbiIsImtleU1hcCIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCIsImV2IiwidXNlSG90a2V5cyIsImRlcHMiLCJfcmVmMiIsIl9yZWYyJGZpbHRlclByZXZlbnREZSIsImZpbHRlclByZXZlbnREZWZhdWx0IiwiX3JlZjIkZW5hYmxlZCIsImVuYWJsZWQiLCJfcmVmMiRlbmFibGVPbkNvbnRlbnQiLCJlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSIsIm1lbW9pc2VkQ2FsbGJhY2siLCJrZXlib2FyZEV2ZW50IiwiaG90a2V5c0V2ZW50IiwiX2tleWJvYXJkRXZlbnQkdGFyZ2V0IiwiX3JlZiRjdXJyZW50IiwiYWN0aXZlRWxlbWVudCIsImlzSG90a2V5UHJlc3NlZCIsImNsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsImNyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJJbmZpbml0ZUxvYWRlciIsIl9QdXJlQ29tcG9uZW50IiwiX3RlbXAiLCJfX3Byb3RvX18iLCJnZXRQcm90b3R5cGVPZiIsIl9sYXN0UmVuZGVyZWRTdGFydEluZGV4IiwiX2xhc3RSZW5kZXJlZFN0b3BJbmRleCIsIl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzIiwiX29uSXRlbXNSZW5kZXJlZCIsInZpc2libGVTdGFydEluZGV4IiwidmlzaWJsZVN0b3BJbmRleCIsIl9lbnN1cmVSb3dzTG9hZGVkIiwiX3NldFJlZiIsImxpc3RSZWYiLCJfbGlzdFJlZiIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsInNldFByb3RvdHlwZU9mIiwiaW5oZXJpdHMiLCJhdXRvUmVsb2FkIiwib25JdGVtc1JlbmRlcmVkIiwic3RhcnRJbmRleCIsInN0b3BJbmRleCIsIl9wcm9wcyIsImlzSXRlbUxvYWRlZCIsIml0ZW1Db3VudCIsIl9wcm9wcyRtaW5pbXVtQmF0Y2hTaSIsIm1pbmltdW1CYXRjaFNpemUiLCJfcHJvcHMkdGhyZXNob2xkIiwidGhyZXNob2xkIiwidW5sb2FkZWRSYW5nZXMiLCJyYW5nZVN0YXJ0SW5kZXgiLCJyYW5nZVN0b3BJbmRleCIsIl9pbmRleCIsInBvdGVudGlhbFN0b3BJbmRleCIsIm1pbiIsIm1heCIsIl9pbmRleDIiLCJfaW5kZXgzIiwic2NhbkZvclVubG9hZGVkUmFuZ2VzIiwic29tZSIsInN0YXJ0T3JTdG9wIiwiX2xvYWRVbmxvYWRlZFJhbmdlcyIsIl90aGlzMiIsImxvYWRNb3JlSXRlbXMiLCJsb2FkTW9yZVJvd3MiLCJfbG9vcCIsImxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgiLCJsYXN0UmVuZGVyZWRTdG9wSW5kZXgiLCJyZXNldEFmdGVySW5kZXgiLCJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCJmb3JjZVVwZGF0ZSIsIlB1cmVDb21wb25lbnQiLCJfZXh0ZW5kcyIsInNvdXJjZSIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfaW5oZXJpdHNMb29zZSIsInNhZmVJc05hTiIsIk51bWJlciIsImlzTmFOIiwiYXJlSW5wdXRzRXF1YWwiLCJuZXdJbnB1dHMiLCJsYXN0SW5wdXRzIiwiZmlyc3QiLCJzZWNvbmQiLCJyZXN1bHRGbiIsImlzRXF1YWwiLCJsYXN0VGhpcyIsImxhc3RSZXN1bHQiLCJsYXN0QXJncyIsImNhbGxlZE9uY2UiLCJuZXdBcmdzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJub3ciLCJwZXJmb3JtYW5jZSIsImNhbmNlbFRpbWVvdXQiLCJ0aW1lb3V0SUQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImlkIiwicmVxdWVzdFRpbWVvdXQiLCJkZWxheSIsInN0YXJ0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGljayIsInNpemUiLCJnZXRTY3JvbGxiYXJTaXplIiwicmVjYWxjdWxhdGUiLCJkaXYiLCJvdmVyZmxvdyIsImFwcGVuZENoaWxkIiwib2Zmc2V0V2lkdGgiLCJjbGllbnRXaWR0aCIsInJlbW92ZUNoaWxkIiwiY2FjaGVkUlRMUmVzdWx0IiwiZ2V0UlRMT2Zmc2V0VHlwZSIsIm91dGVyRGl2Iiwib3V0ZXJTdHlsZSIsImRpcmVjdGlvbiIsImlubmVyRGl2IiwiaW5uZXJTdHlsZSIsInNjcm9sbExlZnQiLCJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwiLCJkZWZhdWx0SXRlbUtleSIsImNvbHVtbkluZGV4Iiwicm93SW5kZXgiLCJjcmVhdGVHcmlkQ29tcG9uZW50IiwiX2NsYXNzIiwiZ2V0Q29sdW1uT2Zmc2V0IiwiZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCIsImdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJnZXRDb2x1bW5XaWR0aCIsImdldEVzdGltYXRlZFRvdGFsSGVpZ2h0IiwiZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCIsImdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCIsImdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCIsImdldFJvd0hlaWdodCIsImdldFJvd09mZnNldCIsImdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiaW5pdEluc3RhbmNlUHJvcHMiLCJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwidmFsaWRhdGVQcm9wcyIsIkdyaWQiLCJfaW5zdGFuY2VQcm9wcyIsIl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkIiwiX291dGVyUmVmIiwiaXNTY3JvbGxpbmciLCJob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiaW5pdGlhbFNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJpbml0aWFsU2Nyb2xsVG9wIiwic2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwidmVydGljYWxTY3JvbGxEaXJlY3Rpb24iLCJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsIm92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIm92ZXJzY2FuQ29sdW1uU3RvcEluZGV4Iiwib3ZlcnNjYW5Sb3dTdGFydEluZGV4Iiwib3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJ2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsInZpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJ2aXNpYmxlUm93U3RhcnRJbmRleCIsInZpc2libGVSb3dTdG9wSW5kZXgiLCJfY2FsbE9uU2Nyb2xsIiwib25TY3JvbGwiLCJfZ2V0SXRlbVN0eWxlIiwiX3RoaXMkcHJvcHMiLCJjb2x1bW5XaWR0aCIsInJvd0hlaWdodCIsIml0ZW1TdHlsZUNhY2hlIiwiX29mZnNldCIsImlzUnRsIiwiX19fIiwiX29uU2Nyb2xsIiwiX2V2ZW50JGN1cnJlbnRUYXJnZXQiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxXaWR0aCIsInNldFN0YXRlIiwicHJldlN0YXRlIiwiY2FsY3VsYXRlZFNjcm9sbExlZnQiLCJjYWxjdWxhdGVkU2Nyb2xsVG9wIiwiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCJfb3V0ZXJSZWZTZXR0ZXIiLCJvdXRlclJlZiIsIl9yZXNldElzU2Nyb2xsaW5nIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibmV4dFByb3BzIiwidmFsaWRhdGVTaGFyZWRQcm9wcyIsIl9wcm90byIsInNjcm9sbFRvIiwiX3JlZjMiLCJzY3JvbGxUb0l0ZW0iLCJfcmVmNCIsIl9yZWY0JGFsaWduIiwiYWxpZ24iLCJfdGhpcyRwcm9wczIiLCJjb2x1bW5Db3VudCIsInJvd0NvdW50IiwiX3RoaXMkc3RhdGUiLCJzY3JvbGxiYXJTaXplIiwiZXN0aW1hdGVkVG90YWxIZWlnaHQiLCJob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSIsInZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSIsImNvbXBvbmVudERpZE1vdW50IiwiX3RoaXMkcHJvcHMzIiwiX2NhbGxQcm9wc0NhbGxiYWNrcyIsImNvbXBvbmVudERpZFVwZGF0ZSIsIl90aGlzJHN0YXRlMiIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiX3RoaXMkcHJvcHM0IiwiaW5uZXJSZWYiLCJpbm5lckVsZW1lbnRUeXBlIiwiaW5uZXJUYWdOYW1lIiwiaXRlbURhdGEiLCJfdGhpcyRwcm9wczQkaXRlbUtleSIsIml0ZW1LZXkiLCJvdXRlckVsZW1lbnRUeXBlIiwib3V0ZXJUYWdOYW1lIiwidXNlSXNTY3JvbGxpbmciLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIiLCJfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIiLCJjb2x1bW5TdGFydEluZGV4IiwiY29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuIiwiX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciIsInJvd1N0YXJ0SW5kZXgiLCJyb3dTdG9wSW5kZXgiLCJpdGVtcyIsIl9yb3dJbmRleCIsIl9jb2x1bW5JbmRleCIsImVzdGltYXRlZFRvdGFsV2lkdGgiLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsIndpbGxDaGFuZ2UiLCJfdGhpcyRwcm9wczUiLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyIiwiX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIl9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsIl92aXNpYmxlQ29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuMiIsIl9vdmVyc2NhblJvd1N0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJfdmlzaWJsZVJvd1N0YXJ0SW5kZXgiLCJfdmlzaWJsZVJvd1N0b3BJbmRleCIsIl90aGlzJHN0YXRlMyIsIl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiX3Njcm9sbExlZnQiLCJfc2Nyb2xsVG9wIiwiX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsIl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiIsIl90aGlzJHByb3BzNiIsIm92ZXJzY2FuQ29sdW1uQ291bnQiLCJvdmVyc2NhbkNvbHVtbnNDb3VudCIsIm92ZXJzY2FuQ291bnQiLCJfdGhpcyRzdGF0ZTQiLCJvdmVyc2NhbkNvdW50UmVzb2x2ZWQiLCJvdmVyc2NhbkJhY2t3YXJkIiwib3ZlcnNjYW5Gb3J3YXJkIiwiX3RoaXMkcHJvcHM3Iiwib3ZlcnNjYW5Sb3dDb3VudCIsIm92ZXJzY2FuUm93c0NvdW50IiwiX3RoaXMkc3RhdGU1IiwiZGVmYXVsdFByb3BzIiwiX3JlZjUiLCJfcmVmNiIsInJvd01ldGFkYXRhTWFwIiwiZXN0aW1hdGVkUm93SGVpZ2h0IiwibGFzdE1lYXN1cmVkUm93SW5kZXgiLCJ0b3RhbFNpemVPZk1lYXN1cmVkUm93cyIsIml0ZW1NZXRhZGF0YSIsIm9mZnNldCIsImNvbHVtbk1ldGFkYXRhTWFwIiwiZXN0aW1hdGVkQ29sdW1uV2lkdGgiLCJsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCIsImdldEl0ZW1NZXRhZGF0YSIsIml0ZW1UeXBlIiwiaW5zdGFuY2VQcm9wcyIsIml0ZW1NZXRhZGF0YU1hcCIsIml0ZW1TaXplIiwibGFzdE1lYXN1cmVkSW5kZXgiLCJmaW5kTmVhcmVzdEl0ZW0iLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2giLCJmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCIsImhpZ2giLCJsb3ciLCJtaWRkbGUiLCJmbG9vciIsImN1cnJlbnRPZmZzZXQiLCJpbnRlcnZhbCIsImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50Iiwic2Nyb2xsT2Zmc2V0IiwiZXN0aW1hdGVkVG90YWxTaXplIiwibWF4T2Zmc2V0IiwibWluT2Zmc2V0Iiwicm91bmQiLCJWYXJpYWJsZVNpemVHcmlkIiwicmVzZXRBZnRlckNvbHVtbkluZGV4Iiwic2hvdWxkRm9yY2VVcGRhdGUiLCJyZXNldEFmdGVySW5kaWNlcyIsInJlc2V0QWZ0ZXJSb3dJbmRleCIsIl9yZWY2JHNob3VsZEZvcmNlVXBkYSIsIl9yZWY3IiwiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEiLCJkZWZhdWx0SXRlbUtleSQxIiwiY3JlYXRlTGlzdENvbXBvbmVudCIsImdldEl0ZW1PZmZzZXQiLCJnZXRFc3RpbWF0ZWRUb3RhbFNpemUiLCJnZXRJdGVtU2l6ZSIsImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiTGlzdCIsInNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxPZmZzZXQiLCJvdmVyc2NhblN0YXJ0SW5kZXgiLCJvdmVyc2NhblN0b3BJbmRleCIsImxheW91dCIsImlzSG9yaXpvbnRhbCIsIm9mZnNldEhvcml6b250YWwiLCJfb25TY3JvbGxIb3Jpem9udGFsIiwiX29uU2Nyb2xsVmVydGljYWwiLCJfZXZlbnQkY3VycmVudFRhcmdldDIiLCJ2YWxpZGF0ZVNoYXJlZFByb3BzJDEiLCJfdGhpcyRwcm9wczUkaXRlbUtleSIsIl90aGlzJF9nZXRSYW5nZVRvUmVuZCIsIl9nZXRSYW5nZVRvUmVuZGVyIiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kMiIsIl9vdmVyc2NhblN0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5TdG9wSW5kZXgiLCJfdmlzaWJsZVN0YXJ0SW5kZXgiLCJfdmlzaWJsZVN0b3BJbmRleCIsIl9zY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsT2Zmc2V0IiwiZ2V0SXRlbU1ldGFkYXRhJDEiLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSIsImVzdGltYXRlZEl0ZW1TaXplIiwidG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zIiwiVmFyaWFibGVTaXplTGlzdCIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEiLCJmaW5kTmVhcmVzdEl0ZW0kMSIsIkZpeGVkU2l6ZUdyaWQiLCJsYXN0Q29sdW1uT2Zmc2V0IiwibWlkZGxlT2Zmc2V0IiwiY2VpbCIsIl9yZWY4IiwibGFzdFJvd09mZnNldCIsIl9yZWY5IiwiX3JlZjEwIiwibnVtVmlzaWJsZUNvbHVtbnMiLCJfcmVmMTEiLCJfcmVmMTIiLCJudW1WaXNpYmxlUm93cyIsIl9yZWYxMyIsIkZpeGVkU2l6ZUxpc3QiLCJsYXN0SXRlbU9mZnNldCIsIm51bVZpc2libGVJdGVtcyIsInNoYWxsb3dEaWZmZXJzIiwiYXR0cmlidXRlIiwiX2F0dHJpYnV0ZSIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJhcmVFcXVhbCIsInByZXZQcm9wcyIsInByZXZTdHlsZSIsInByZXZSZXN0IiwibmV4dFN0eWxlIiwibmV4dFJlc3QiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0U3RhdGUiLCJvblBvaW50ZXJEb3duIiwiY29udGFpbmVyUmVmIiwiZGlzYWJsZWQiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoSG9yaXpvbnRhbGx5Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsImNvbnRhaW5lciIsImxlZnRPZmZzZXQiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiYnV0dG9uQmFkZ2UiLCJDb21wb25lbnQiLCJwbGFjZWhvbGRlciIsImNoZWNrZWQiLCJuYW1lIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsIkxhYmVsIiwiaW5wdXRSZWYiLCJjaGVja2JveCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImNhblRvZ2dsZSIsImNvbG9yUGlja2VyIiwiQ29sb3JTd2F0Y2giLCJpc1NlbGVjdGVkIiwiY29sb3JTd2F0Y2giLCJzZWxlY3RlZCIsImhleENvZGUiLCJzck9ubHkiLCJDb25maXJtYXRpb25Nb2RhbCIsImhlYWRlciIsImlzT3BlbiIsImJ1dHRvbnNMZWZ0IiwiYnV0dG9uc1JpZ2h0Iiwib25DbG9zZSIsIm5vT3ZlcmxheSIsImJhc2VaSW5kZXgiLCJNb2RhbCIsIm1vZGFsSGVhZGVyIiwibW9kYWxDb250ZW50IiwibW9kYWxCdXR0b25zQ29udGFpbmVyIiwibW9kYWxCdXR0b25zIiwiZGlzcGxheU5hbWUiLCJpc0Rpc2FibGVkIiwiQnV0dG9uIiwiSWNvbiIsInNyYyIsIml0ZW1Cb2R5UmVuZGVyZXIiLCJoYW5kbGVTZWxlY3QiLCJyZW5kZXJDbGlja2FibGUiLCJzZWxlY3RlZEl0ZW0iLCJwbGFjZW1lbnQiLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJzZXRJc09wZW4iLCJ0b2dnbGVJc09wZW4iLCJNZW51Q29udGFpbmVyIiwiYnV0dG9uIiwiQ2xpY2thYmxlIiwiTWVudSIsIk1lbnVJdGVtIiwiaXNBY3RpdmUiLCJEcm9wZG93biIsImFjY2VwdCIsIm11bHRpcGxlIiwiaW5wdXQiLCJwYXJlbnQiLCJob3Jpem9udGFsUGxhY2VtZW50IiwidmVydGljYWxQbGFjZW1lbnQiLCJmaXhlZCIsImljb24iLCJjcm9zc09yaWdpbiIsInRvcE9mZnNldCIsImJvdHRvbU9mZnNldCIsInNyY1dpZHRoIiwic3JjSGVpZ2h0IiwiZGVjb2RpbmciLCJsb2FkaW5nIiwiaW1hZ2VFbGVtZW50IiwiaW1hZ2UiLCJoYXNPdmVybGF5Iiwib3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsImxpc3QiLCJhY3RpdmUiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b25MaW5rIiwiYXMiLCJmb290ZXIiLCJzbWFydExheW91dCIsIm1lbnVQbGFjZW1lbnQiLCJQbGFjZW1lbnRDb250ZXh0IiwiRXJyb3IiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJib3R0b20iLCJkaXN0YW5jZVRvRWRnZSIsImlubmVySGVpZ2h0IiwidWxFbCIsInF1ZXJ5U2VsZWN0b3IiLCJjaGlsZEVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsIm5ld0hlaWdodCIsIm1pbkhlaWdodCIsIm1heEhlaWdodCIsIm1lbnUiLCJvcGVuIiwiZm9yd2FyZFJlZiIsIm1lbnVDb250YWluZXIiLCJtZW51SXRlbSIsIm1lbnVMaW5rSXRlbSIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm1vZGFsIiwibW9kYWxCdXR0b24iLCJhcHBlbmREaWdpdCIsIm51bWJlciIsImRpZ2l0IiwicG9wRGlnaXQiLCJldmVudERpZ2l0S2V5cyIsIk51bXBhZCIsImNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyIiwibmV3TnVtYmVyIiwiTnVtcGFkS2V5cyIsImZpbGwiLCJudW1wYWRWYWx1ZSIsIm51bXBhZCIsInBhcnNlSW50IiwibnVtYmVycyIsImlzRml4ZWQiLCJzaG93RXhwYW5kZWRHcm91cCIsIlNlbGVjdENvbnRleHQiLCJleHBhbmRlZCIsInRvZ2dsZUV4cGFuZCIsImhhbmRsZUdyb3VwQ2xpY2siLCJJY29uQnV0dG9uIiwiT3B0aW9uIiwic2VsZWN0ZWRPcHRpb25zIiwidXBkYXRlU2VsZWN0ZWRPcHRpb24iLCJpc0NoZWNrZWQiLCJjaGVja2JveENvbnRhaW5lciIsIkNoZWNrYm94IiwiaXNPcHRpb24iLCJvbkZpbHRlciIsInNlbGVjdEFsbENoZWNrZWQiLCJ0b2dnbGVTZWxlY3RBbGxDaGVja2VkIiwic2VhcmNoS2V5d29yZCIsInNlbGVjdEFsbCIsInNldFNlbGVjdGVkT3B0aW9ucyIsImhhc0dyb3VwT3B0aW9uIiwiZmlsdGVyT3B0aW9ucyIsImtleXdvcmQiLCJ0cmltIiwiZmlsdGVyZWRPcHRpb25zIiwicmVkdWNlIiwiZmlsdGVyZWQiLCJncm91cE9wdGlvbiIsImZpbHRlcmVkR3JvdXBPcHRpb25zIiwiZmlsdGVyZWRPcHRpb25zQ291bnQiLCJuZXh0T3B0aW9uIiwic2VsZWN0ZWRPcHRpb25zQ291bnQiLCJzZWxlY3RlZE9wdGlvbiIsImZpbHRlcmVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0QWxsQ2xpY2siLCJvcHRpb25zVG9TZWxlY3QiLCJmbGF0Iiwic2VsZWN0QWxsQ29udGFpbmVyIiwiR3JvdXBPcHRpb24iLCJub09wdGlvbnMiLCJzZXRTZWFyY2hLZXl3b3JkIiwiaGFuZGxlU2VhcmNoS2V5d29yZENoYW5nZSIsImhhbmRsZVNlYXJjaEtleXdvcmRSZXNldENsaWNrIiwiaWNvblNlYXJjaENvbnRhaW5lciIsIlRleHRJbnB1dCIsInJlc2V0QnV0dG9uIiwic2hvd1NlbGVjdGVkQXNUYWdzIiwic2hvd1NlYXJjaCIsIm9wZW5lZCIsInRvZ2dsZU9wZW5lZCIsImhhbmRsZU9wZW5TZWxlY3QiLCJ2YWx1ZXMiLCJTZWxlY3RDb250ZXh0UHJvdmlkZXIiLCJTZWxlY3RvciIsImlzRHJvcGRvd25PcGVuZWQiLCJpY29uQnV0dG9uIiwic2VhcmNoQ29udGFpbmVyIiwiU2VhcmNoIiwiT3B0aW9uTGlzdCIsImluaXRpYWxTdGF0ZSIsInVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMiLCJjb250ZXh0VmFsdWUiLCJoYW5kbGVUYWdDbGljayIsImhhbmRsZVRhZ0Nsb3NlIiwicGxhY2Vob2xkZXJUb1Nob3ciLCJzaG93QXNUYWdzIiwidGFnV3JhcHBlciIsIlRhZyIsImNsb3NhYmxlIiwic2hvd0FzVGV4dCIsImNvbHVtbnMiLCJkYXRhU291cmNlIiwib25Sb3dDbGljayIsImhhc0Fycm93Iiwib25Mb2FkTW9yZSIsInBhZ2UiLCJzZXRQYWdlIiwicGFnZVNpemUiLCJUYWJsZUNvbmZpZyIsIlBBR0VfU0laRSIsInRhYmxlSGVpZ2h0IiwiUk9XX0hFSUdIVCIsImhlYWRlckhlaWdodCIsIkhFQURFUl9IRUlHSFQiLCJkaXNhYmxlTGF6eUxvYWRlciIsImFjdGl2ZVJvd3MiLCJpdGVtc0NvdW50IiwiaXNIZWFkZXJTdGlja3kiLCJoYXNWaXJ0dWFsU2Nyb2xsIiwic2V0U2Nyb2xsVG9wIiwicmVuZGVyUm93Iiwicm93IiwiaGFuZGxlTGlzdFNjcm9sbCIsImxvYWRNb3JlIiwiSVRFTVNfTE9BREVEIiwicGxhY2Vob2xkZXJDb250YWluZXIiLCJzY3JvbGxiYXJDb250YWluZXIiLCJib3JkZXJCb3R0b20iLCJjb2x1bW4iLCJvblNvcnQiLCJzb3J0YWJsZSIsInNvcnRlZCIsImRlZmF1bHRTb3J0T3JkZXIiLCJ0aXRsZSIsIlNvcnRPcmRlciIsIkRFU0MiLCJzb3J0T3JkZXIiLCJzZXRTb3J0T3JkZXIiLCJoYW5kbGVTb3J0Q29sdW1uIiwibmV3U29ydE9yZGVyIiwiQVNDIiwiY2VsbFByb3BzIiwidGFibGVIZWFkZXJDZWxsIiwic29ydEljb25WaXNpYmxlIiwiaGFuZGxlUm93Q2xpY2siLCJkYXRhSW5kZXgiLCJvbkRlbGV0ZSIsImNsb3NlQnV0dG9uIiwicGF0dGVybiIsImlucHV0TW9kZSIsInRhZ09wdGlvbnMiLCJ0YWdzIiwic2V0VGFncyIsImhhbmRsZVRleHRDaGFuZ2UiLCJoYW5kbGVUYWdEZWxldGUiLCJ0YWciLCJ1cGRhdGVkVGFncyIsInRhZ0l0ZW0iLCJoYW5kbGVLZXlEb3duIiwiaW5wdXRFbGVtZW50IiwidGV4dElucHV0IiwidGFnSW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwic2hvd1Rvb2x0aXAiLCJ0b29sdGlwSXNWaXNpYmxlIiwic2V0VG9vbHRpcElzVmlzaWJsZSIsIm9uVG91Y2hFbmRIYW5kbGVyIiwidGltZXIiLCJjbGVhclRpbWVvdXQiLCJ0b29sdGlwIiwidmlzaWJsZSIsIm5vdFZpc2libGUiLCJvblRvdWNoRW5kIiwicG9zdGVyIiwibXV0ZWQiLCJsb29wIiwiYXV0b1BsYXkiLCJ2aWRlbyIsInBsYXlzSW5saW5lIiwiaXMiLCJsIiwidXNlRGVidWdWYWx1ZSIsImdldFNuYXBzaG90IiwiZCIsInUiLCJjIiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJtb2R1bGUiLCJyZXF1aXJlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsImRlZmluaXRpb24iLCJwcm9wIiwidG9TdHJpbmdUYWciLCJfX3dlYnBhY2tfZXhwb3J0c19fIl0sInNvdXJjZVJvb3QiOiIifQ==
|