@touchtech/baselayer-ui 2.21.32 → 2.21.33
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/README.md +79 -79
- package/dist/components/Button/Button.d.ts +24 -24
- package/dist/components/Button/__tests__/Button.test.d.ts +1 -1
- package/dist/components/Button/index.d.ts +1 -1
- package/dist/components/ButtonBadge/ButtonBadge.d.ts +7 -7
- package/dist/components/ButtonBadge/__tests__/ButtonBadge.test.d.ts +1 -1
- package/dist/components/ButtonBadge/index.d.ts +1 -1
- package/dist/components/ButtonLink/ButtonLink.d.ts +22 -22
- package/dist/components/ButtonLink/__tests__/ButtonLink.test.d.ts +1 -1
- package/dist/components/ButtonLink/index.d.ts +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +15 -15
- package/dist/components/Checkbox/__tests__/Checkbox.test.d.ts +1 -1
- package/dist/components/Checkbox/index.d.ts +1 -1
- package/dist/components/ColorPicker/ColorPicker.d.ts +11 -11
- package/dist/components/ColorPicker/__tests__/ColorPicker.test.d.ts +1 -1
- package/dist/components/ColorPicker/index.d.ts +1 -1
- package/dist/components/ColorSwatch/ColorSwatch.d.ts +10 -10
- package/dist/components/ColorSwatch/__tests__/ColorSwatch.test.d.ts +1 -1
- package/dist/components/ColorSwatch/index.d.ts +1 -1
- package/dist/components/ConfirmationModal/ConfirmationModal.d.ts +19 -19
- package/dist/components/ConfirmationModal/__tests__/ConfirmationModal.test.d.ts +1 -1
- package/dist/components/ConfirmationModal/index.d.ts +1 -1
- package/dist/components/FileInput/FileInput.d.ts +22 -22
- package/dist/components/FileInput/__tests__/FileInput.test.d.ts +1 -1
- package/dist/components/FileInput/index.d.ts +2 -2
- package/dist/components/FloatingPanel/FloatingPanel.d.ts +14 -14
- package/dist/components/FloatingPanel/__tests__/FloatingPanel.test.d.ts +1 -1
- package/dist/components/FloatingPanel/index.d.ts +1 -1
- package/dist/components/Icon/Icon.d.ts +10 -10
- package/dist/components/Icon/__tests__/Icon.test.d.ts +1 -1
- package/dist/components/Icon/index.d.ts +1 -1
- package/dist/components/IconButton/IconButton.d.ts +21 -21
- package/dist/components/IconButton/__tests__/IconButton.test.d.ts +1 -1
- package/dist/components/IconButton/index.d.ts +1 -1
- package/dist/components/IconButtonLink/IconButtonLink.d.ts +20 -20
- package/dist/components/IconButtonLink/__tests__/IconButtonLink.test.d.ts +1 -1
- package/dist/components/IconButtonLink/index.d.ts +1 -1
- package/dist/components/Image/Image.d.ts +14 -14
- package/dist/components/Image/__tests__/Image.test.d.ts +1 -1
- package/dist/components/Image/index.d.ts +1 -1
- package/dist/components/Label/Label.d.ts +9 -9
- package/dist/components/Label/__tests/Label.test.d.ts +1 -1
- package/dist/components/Label/index.d.ts +1 -1
- package/dist/components/ListView/ListView.d.ts +10 -10
- package/dist/components/ListView/ListViewItem.d.ts +14 -14
- package/dist/components/ListView/ListViewLinkItem.d.ts +13 -13
- package/dist/components/ListView/__tests__/ListView.test.d.ts +1 -1
- package/dist/components/ListView/index.d.ts +3 -3
- package/dist/components/Menu/LayeredMenu.d.ts +10 -0
- package/dist/components/Menu/LayeredMenuContainer.d.ts +9 -0
- package/dist/components/Menu/Menu.d.ts +11 -11
- package/dist/components/Menu/MenuContainer.d.ts +13 -13
- package/dist/components/Menu/MenuItem.d.ts +10 -10
- package/dist/components/Menu/MenuLinkItem.d.ts +9 -9
- package/dist/components/Menu/MultiMenusContainer.d.ts +7 -0
- package/dist/components/Menu/__tests__/Menu.test.d.ts +1 -1
- package/dist/components/Menu/__tests__/MenuLinkItem.test.d.ts +1 -1
- package/dist/components/Menu/index.d.ts +4 -4
- package/dist/components/Modal/Modal.d.ts +14 -14
- package/dist/components/Modal/__tests__/Modal.test.d.ts +1 -1
- package/dist/components/Modal/index.d.ts +1 -1
- package/dist/components/Overlay/Overlay.d.ts +10 -10
- package/dist/components/Overlay/__tests__/Overlay.test.d.ts +1 -1
- package/dist/components/Overlay/index.d.ts +1 -1
- package/dist/components/TextInput/TextInput.d.ts +18 -18
- package/dist/components/TextInput/__tests__/TextInput.test.d.ts +1 -1
- package/dist/components/TextInput/index.d.ts +1 -1
- package/dist/components/Toast/Toast.d.ts +8 -8
- package/dist/components/Toast/ToastContainer.d.ts +7 -7
- package/dist/components/Toast/__tests__/Toast.test.d.ts +1 -1
- package/dist/components/Toast/__tests__/ToastContainer.test.d.ts +1 -1
- package/dist/components/Toast/index.d.ts +2 -2
- package/dist/components/Video/Video.d.ts +23 -23
- package/dist/components/Video/__tests__/Video.test.d.ts +1 -1
- package/dist/components/Video/index.d.ts +1 -1
- package/dist/hooks/__tests__/useToggle.test.d.ts +1 -1
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/useOutsideClick.d.ts +4 -4
- package/dist/hooks/useToggle.d.ts +1 -1
- package/dist/index.d.ts +22 -22
- package/dist/index.js +1 -1
- package/dist/styles.css +1368 -1368
- package/dist/types/index.d.ts +7 -7
- package/package.json +93 -93
package/dist/index.js
CHANGED
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
* Licensed under the MIT license.
|
|
10
10
|
*/
|
|
11
11
|
var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function a(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function o(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 u(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 i={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},l={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},d={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},f={16:!1,18:!1,17:!1,91:!1},c={},s=1;s<20;s++)i["f".concat(s)]=111+s;var v=[],_="all",p=[],m=function(e){return i[e.toLowerCase()]||l[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function h(e){_=e||"all"}function y(){return _||"all"}var b=function(e){var t=e.key,n=e.scope,r=e.method,a=e.splitKey,i=void 0===a?"+":a;u(t).forEach((function(e){var t=e.split(i),a=t.length,u=t[a-1],d="*"===u?"*":m(u);if(c[d]){n||(n=y());var f=a>1?o(l,t):[];c[d]=c[d].map((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,a=!0,o=0;o<n.length;o++)-1===r.indexOf(n[o])&&(a=!1);return a}(e.mods,f)?{}:e}))}}))};function g(e,t,n){var r;if(t.scope===n||"all"===t.scope){for(var a in r=t.mods.length>0,f)Object.prototype.hasOwnProperty.call(f,a)&&(!f[a]&&t.mods.indexOf(+a)>-1||f[a]&&-1===t.mods.indexOf(+a))&&(r=!1);(0!==t.mods.length||f[16]||f[18]||f[17]||f[91])&&!r&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function O(e){var t=c["*"],n=e.keyCode||e.which||e.charCode;if(P.filter.call(this,e)){if(93!==n&&224!==n||(n=91),-1===v.indexOf(n)&&229!==n&&v.push(n),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=d[t];e[t]&&-1===v.indexOf(n)?v.push(n):!e[t]&&v.indexOf(n)>-1?v.splice(v.indexOf(n),1):"metaKey"===t&&e[t]&&3===v.length&&(e.ctrlKey||e.shiftKey||e.altKey||(v=v.slice(v.indexOf(n))))})),n in f){for(var r in f[n]=!0,l)l[r]===n&&(P[r]=!0);if(!t)return}for(var a in f)Object.prototype.hasOwnProperty.call(f,a)&&(f[a]=e[d[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===v.indexOf(17)&&v.push(17),-1===v.indexOf(18)&&v.push(18),f[17]=!0,f[18]=!0);var o=y();if(t)for(var u=0;u<t.length;u++)t[u].scope===o&&("keydown"===e.type&&t[u].keydown||"keyup"===e.type&&t[u].keyup)&&g(e,t[u],o);if(n in c)for(var i=0;i<c[n].length;i++)if(("keydown"===e.type&&c[n][i].keydown||"keyup"===e.type&&c[n][i].keyup)&&c[n][i].key){for(var s=c[n][i],_=s.splitKey,p=s.key.split(_),h=[],b=0;b<p.length;b++)h.push(m(p[b]));h.sort().join("")===v.sort().join("")&&g(e,s,o)}}}function P(e,t,n){v=[];var r=u(e),i=[],d="all",s=document,_=0,h=!1,y=!0,b="+";for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(d=t.scope),t.element&&(s=t.element),t.keyup&&(h=t.keyup),void 0!==t.keydown&&(y=t.keydown),"string"==typeof t.splitKey&&(b=t.splitKey)),"string"==typeof t&&(d=t);_<r.length;_++)i=[],(e=r[_].split(b)).length>1&&(i=o(l,e)),(e="*"===(e=e[e.length-1])?"*":m(e))in c||(c[e]=[]),c[e].push({keyup:h,keydown:y,scope:d,mods:i,shortcut:r[_],method:n,key:r[_],splitKey:b});void 0!==s&&!function(e){return p.indexOf(e)>-1}(s)&&window&&(p.push(s),a(s,"keydown",(function(e){O(e)})),a(window,"focus",(function(){v=[]})),a(s,"keyup",(function(e){O(e),function(e){var t=e.keyCode||e.which||e.charCode,n=v.indexOf(t);if(n>=0&&v.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&v.splice(0,v.length),93!==t&&224!==t||(t=91),t in f)for(var r in f[t]=!1,l)l[r]===t&&(P[r]=!1)}(e)})))}var j={setScope:h,getScope:y,deleteScope:function(e,t){var n,r;for(var a in e||(e=y()),c)if(Object.prototype.hasOwnProperty.call(c,a))for(n=c[a],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;y()===e&&h(t||"all")},getPressedKeyCodes:function(){return v.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=m(e)),-1!==v.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},unbind:function(e){if(e){if(Array.isArray(e))e.forEach((function(e){e.key&&b(e)}));else if("object"==typeof e)e.key&&b(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 a=n[0],o=n[1];"function"==typeof a&&(o=a,a=""),b({key:e,scope:a,method:o,splitKey:"+"})}}else Object.keys(c).forEach((function(e){return delete c[e]}))}};for(var M in j)Object.prototype.hasOwnProperty.call(j,M)&&(P[M]=j[M]);if("undefined"!=typeof window){var w=window.hotkeys;P.noConflict=function(e){return e&&window.hotkeys===P&&(window.hotkeys=w),P},window.hotkeys=P}var E=P,k=n(0);function C(){return E.isPressed}E.filter=function(){return!0};var x=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))};function S(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var a=n||{},o=a.enableOnTags,u=a.filter,i=a.keyup,l=a.keydown,d=a.filterPreventDefault,f=void 0===d||d,c=a.enabled,s=void 0===c||c,v=a.enableOnContentEditable,_=void 0!==v&&v,p=Object(k.useRef)(null),m=Object(k.useCallback)((function(e,n){var r;return u&&!u(e)?!f:!!(x(e,["INPUT","TEXTAREA","SELECT"])&&!x(e,o)||null!=(r=e.target)&&r.isContentEditable&&!_)||(null===p.current||document.activeElement===p.current)&&(t(e,n),!0)}),r?[p,o,u].concat(r):[p,o,u]);return Object(k.useEffect)((function(){if(s)return i&&!0!==l&&(n.keydown=!1),E(e,n||{},m),function(){return E.unbind(e,m)}}),[m,e,s]),p}var N=E.isPressed}]));
|
|
12
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/OWE0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/MzJhYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLm1vZHVsZS5jc3M/Y2Q0NiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzPzA4NDEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC5tb2R1bGUuY3NzPzFmMTEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gubW9kdWxlLmNzcz80ZWViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gubW9kdWxlLmNzcz8yM2ViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ZTE4OCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLm1vZHVsZS5jc3M/MGVkZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzPzI3YjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQubW9kdWxlLmNzcz8xMjk5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzcz83YWJmIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9JY29uLm1vZHVsZS5jc3M/OWI5MyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/ZDI4ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz9jYzM3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzPzk1YTciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/NDY0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8zNzA5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/OTZkMiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLm1vZHVsZS5jc3M/NTA0OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz8wNDI3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8yMWM1Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9va3MvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9va3MvdXNlT3V0c2lkZUNsaWNrLnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ob3RrZXlzLWpzL2Rpc3QvaG90a2V5cy5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdGtleXMtaG9vay9kaXN0L3JlYWN0LWhvdGtleXMtaG9vay5lc20uanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJyZXF1aXJlIiwiaXNBcnJheSIsIkFycmF5IiwiY2MiLCJvYmoiLCJvdXQiLCJ0bXAiLCJrIiwibGVuZ3RoIiwiZGVmYXVsdCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiYnV0dG9uQmFkZ2UiLCJvbkNsaWNrIiwiY29udGFpbmVyUmVmIiwiZGlzYWJsZWQiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoSG9yaXpvbnRhbGx5Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsImFsaWduIiwic2l6ZSIsInR5cGUiLCJyZWYiLCJjb250YWluZXIiLCJsZWZ0T2Zmc2V0IiwiaW5jbHVkZXMiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiQ29tcG9uZW50IiwicHJvcHMiLCJsYWJlbCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwiZSIsInRhcmdldCIsIkxhYmVsIiwiaW5wdXRSZWYiLCJpbnB1dCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImRpcmVjdGlvbiIsImNvbG9yUGlja2VyIiwibWFwIiwiY29sb3IiLCJDb2xvclN3YXRjaCIsImlzU2VsZWN0ZWQiLCJjb2xvclN3YXRjaCIsInNlbGVjdGVkIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwiYnV0dG9uIiwidXNlSG90a2V5cyIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm92ZXJsYXkiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpZCIsImxheW91dCIsInBsYWNlbWVudCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwic3JjIiwiYWx0IiwiaWNvbiIsImNyb3NzT3JpZ2luIiwiYmFkZ2VDb250ZW50IiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0IiwiSWNvbiIsIkJ1dHRvbkJhZGdlIiwiZW1wdHlJbWFnZSIsInNyY1dpZHRoIiwic3JjSGVpZ2h0IiwiYW5pbWF0aW9uIiwidXNlU3RhdGUiLCJpc0xvYWRlZCIsInNldElzTG9hZGVkIiwiaW1hZ2VSZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJpbWFnZSIsIkltYWdlIiwib25sb2FkIiwiY3VycmVudCIsInNldEF0dHJpYnV0ZSIsImhhc092ZXJsYXkiLCJmYWRlSW4iLCJzY2FsZVVwIiwid2lkdGgiLCJoZWlnaHQiLCJoZWFkZXJBY3Rpb25zIiwiaGVhZGVyTGFiZWwiLCJsaXN0IiwiYWN0aXZlIiwibGlzdFZpZXdJdGVtIiwiQnV0dG9uIiwiQnV0dG9uTGluayIsImFzIiwiZm9vdGVyIiwibWVudSIsIm9wZW4iLCJzY3JvbGxDb250YWluZXIiLCJmb3J3YXJkUmVmIiwibWVudUNvbnRhaW5lciIsImlzQWN0aXZlIiwibWVudUl0ZW0iLCJtZW51TGlua0l0ZW0iLCJpc0ZpeGVkIiwib25CbHVyIiwib25LZXlEb3duIiwiaW5wdXRFbGVtZW50IiwidGV4dElucHV0IiwidG9hc3QiLCJ0b2FzdENvbnRhaW5lciIsInBvc3RlciIsIm11dGVkIiwibG9vcCIsImF1dG9QbGF5IiwidmlkZW8iLCJwbGF5c0lubGluZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJjYWxsYmFjayIsImhhbmRsZUNsaWNrIiwiZXZlbnQiLCJjb250YWlucyIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJpc2ZmIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJpbmRleE9mIiwiYWRkRXZlbnQiLCJtZXRob2QiLCJhdHRhY2hFdmVudCIsImNvbmNhdCIsIndpbmRvdyIsImdldE1vZHMiLCJtb2RpZmllciIsIm1vZHMiLCJzbGljZSIsImdldEtleXMiLCJrZXlzIiwicmVwbGFjZSIsInNwbGl0IiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInNwbGljZSIsIl9rZXlNYXAiLCJiYWNrc3BhY2UiLCJ0YWIiLCJjbGVhciIsImVudGVyIiwicmV0dXJuIiwiZXNjIiwiZXNjYXBlIiwic3BhY2UiLCJsZWZ0IiwidXAiLCJyaWdodCIsImRvd24iLCJkZWwiLCJkZWxldGUiLCJpbnMiLCJpbnNlcnQiLCJob21lIiwiZW5kIiwicGFnZXVwIiwicGFnZWRvd24iLCJjYXBzbG9jayIsIm51bV8wIiwibnVtXzEiLCJudW1fMiIsIm51bV8zIiwibnVtXzQiLCJudW1fNSIsIm51bV82IiwibnVtXzciLCJudW1fOCIsIm51bV85IiwibnVtX211bHRpcGx5IiwibnVtX2FkZCIsIm51bV9lbnRlciIsIm51bV9zdWJ0cmFjdCIsIm51bV9kZWNpbWFsIiwibnVtX2RpdmlkZSIsIiciLCJfbW9kaWZpZXIiLCJzaGlmdCIsIm9wdGlvbiIsImN0cmwiLCJjb250cm9sIiwiY21kIiwiY29tbWFuZCIsIm1vZGlmaWVyTWFwIiwiMTYiLCIxOCIsIjE3IiwiOTEiLCJzaGlmdEtleSIsImN0cmxLZXkiLCJhbHRLZXkiLCJtZXRhS2V5IiwiX21vZHMiLCJfaGFuZGxlcnMiLCJfZG93bktleXMiLCJfc2NvcGUiLCJlbGVtZW50SGFzQmluZEV2ZW50IiwiY29kZSIsIngiLCJ0b1VwcGVyQ2FzZSIsImNoYXJDb2RlQXQiLCJzZXRTY29wZSIsInNjb3BlIiwiZ2V0U2NvcGUiLCJlYWNoVW5iaW5kIiwiX3JlZiIsIl9yZWYkc3BsaXRLZXkiLCJzcGxpdEtleSIsImZvckVhY2giLCJvcmlnaW5LZXkiLCJ1bmJpbmRLZXlzIiwibGVuIiwibGFzdEtleSIsImtleUNvZGUiLCJyZWNvcmQiLCJhMSIsImEyIiwiYXJyMSIsImFycjIiLCJpc0luZGV4IiwiY29tcGFyZUFycmF5IiwiZXZlbnRIYW5kbGVyIiwiaGFuZGxlciIsIm1vZGlmaWVyc01hdGNoIiwieSIsInNob3J0Y3V0IiwicHJldmVudERlZmF1bHQiLCJyZXR1cm5WYWx1ZSIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsImRpc3BhdGNoIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImZpbHRlciIsInRoaXMiLCJwdXNoIiwia2V5TmFtZSIsImtleU51bSIsImdldE1vZGlmaWVyU3RhdGUiLCJrZXlkb3duIiwia2V5dXAiLCJfaSIsImtleVNob3J0Y3V0IiwiX2Rvd25LZXlzQ3VycmVudCIsImEiLCJzb3J0Iiwiam9pbiIsImVsZW1lbnQiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsImlzRWxlbWVudEJpbmQiLCJjbGVhck1vZGlmaWVyIiwiX2FwaSIsImRlbGV0ZVNjb3BlIiwibmV3U2NvcGUiLCJoYW5kbGVycyIsImdldFByZXNzZWRLZXlDb2RlcyIsImlzUHJlc3NlZCIsInNyY0VsZW1lbnQiLCJ0YWdOYW1lIiwiZmxhZyIsImlzQ29udGVudEVkaXRhYmxlIiwicmVhZE9ubHkiLCJ1bmJpbmQiLCJrZXlzSW5mbyIsImluZm8iLCJfbGVuIiwiYXJndW1lbnRzIiwiYXJncyIsIl9rZXkiLCJfaG90a2V5cyIsIm5vQ29uZmxpY3QiLCJkZWVwIiwidXNlSXNIb3RrZXlQcmVzc2VkIiwidGFnRmlsdGVyIiwiZW5hYmxlT25UYWdzIiwidGFyZ2V0VGFnTmFtZSIsIkJvb2xlYW4iLCJvcHRpb25zIiwiZGVwcyIsIl9yZWYyIiwiX3JlZjIkZmlsdGVyUHJldmVudERlIiwiZmlsdGVyUHJldmVudERlZmF1bHQiLCJfcmVmMiRlbmFibGVkIiwiZW5hYmxlZCIsIl9yZWYyJGVuYWJsZU9uQ29udGVudCIsImVuYWJsZU9uQ29udGVudEVkaXRhYmxlIiwibWVtb2lzZWRDYWxsYmFjayIsImtleWJvYXJkRXZlbnQiLCJob3RrZXlzRXZlbnQiLCJfa2V5Ym9hcmRFdmVudCR0YXJnZXQiLCJhY3RpdmVFbGVtZW50IiwiaXNIb3RrZXlQcmVzc2VkIl0sIm1hcHBpbmdzIjoiNkRBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBMERmLE9BckRBRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JV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QixDQUFDLFFBQVMsV0FBWSxhQStCY2QsRUFBVWMsRUFBZWIsSUFBbUUsT0FBakRlLEVBQXdCRixFQUFjdlMsU0FBbUJ5UyxFQUFzQjdCLG9CQUFzQnlCLEtBSW5MLE9BQWhCdFQsRUFBSTBGLFNBQW9CNkMsU0FBU29MLGdCQUFrQjNULEVBQUkwRixXQUN6RHlDLEVBQVNxTCxFQUFlQyxJQUNqQixLQUlSVixFQUFPLENBQUMvUyxFQUFLMlMsRUFBYzFDLEdBQVEvRyxPQUFPNkosR0FBUSxDQUFDL1MsRUFBSzJTLEVBQWMxQyxJQWdCekUsT0FmQSxxQkFBVSxXQUNSLEdBQUttRCxFQVVMLE9BTEk1QyxJQUFxQixJQUFaRCxJQUNYdUMsRUFBUXZDLFNBQVUsR0FHcEIsRUFBUTlHLEVBQU1xSixHQUFXLEdBQUlTLEdBQ3RCLFdBQ0wsT0FBTyxFQUFReEIsT0FBT3RJLEVBQU04SixNQUU3QixDQUFDQSxFQUFrQjlKLEVBQU0ySixJQUNyQnBULEVBR1QsSUFBSTRULEVBQWtCLEVBQVFuQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJ2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2Mob2JqKSB7XG4gIHZhciBvdXQgPSBcIlwiXG5cbiAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIikgcmV0dXJuIG9iaiB8fCBcIlwiXG5cbiAgaWYgKGlzQXJyYXkob2JqKSlcbiAgICBmb3IgKHZhciBrID0gMCwgdG1wOyBrIDwgb2JqLmxlbmd0aDsgaysrKSB7XG4gICAgICBpZiAoKHRtcCA9IGNjKG9ialtrXSkpICE9PSBcIlwiKSB7XG4gICAgICAgIG91dCArPSAob3V0ICYmIFwiIFwiKSArIHRtcFxuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspICYmIG9ialtrXSkgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsga1xuICAgIH1cblxuICByZXR1cm4gb3V0XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4vQnV0dG9uQmFkZ2VcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGFiZWwgfSBmcm9tIFwiLi9MYWJlbFwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uIH0gZnJvbSBcIi4vSWNvblwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uTGluayB9IGZyb20gXCIuL0J1dHRvbkxpbmtcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi9Db2xvclN3YXRjaFwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNb2RhbCB9IGZyb20gXCIuL01vZGFsXCI7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImxpc3RWaWV3SXRlbVwiOlwiXzFmajJhbmllUTBKS3hDQVprU2FhcGtcIn07IiwiZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25CYWRnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uTGlua1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9DaGVja2JveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclBpY2tlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclN3YXRjaFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GaWxlSW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGlzdFZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTWVudVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9PdmVybGF5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RleHRJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub2FzdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9WaWRlb1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaG9va3NcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQnV0dG9uQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQnV0dG9uQmFkZ2UoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH06IEJ1dHRvbkJhZGdlUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5idXR0b25CYWRnZSwgY2xhc3NOYW1lXSl9PntjaGlsZHJlbn08L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFkZ2U7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImJ1dHRvbkJhZGdlXCI6XCJfMVVsWUZFR2MzZE1ndG9OaWw2U094NVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBCdXR0b25Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwibGVmdFwiIHwgXCJyaWdodFwiPjtcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIGNvbnRhaW5lclJlZixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSxcbn06IEJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8xMnc1V09GM0tzYTJKQjUtWU9YeUQ3XCIsXCJsZWZ0XCI6XCJfMlRGVjcyRHJReDVKR1NoTmN1dDRFLVwiLFwic21hbGxcIjpcInVUQnJjanBIcDk2UkN3RjVVRHpmMFwiLFwibGFyZ2VcIjpcIl8xNFNTZnM1U1ZXSzdOeHVaQnFNZ3pCXCIsXCJ4bGFyZ2VcIjpcIl8xU1F1MlFXdzJhN2V3NDdXVzEyWlNnXCIsXCJpbnZlcnRlZFwiOlwiXzJoWmhoaThCZ0VfZWtRVm45ZVg5RFhcIixcInJvdW5kZWRcIjpcIlZCRE9TY1ljUW5VMmV5dGtBX1BjNlwiLFwicmlnaHRPZmZzZXRcIjpcIl8yR1RZM1htYU91OTIzTTlzRVJzNmFrXCIsXCJsZWZ0T2Zmc2V0XCI6XCJfMTVRMEdHa2dZSl9hTG0wMW5HRTVZaFwiLFwibm9TaGFkb3dcIjpcIlJld21EcWpwNm5VZUVZSEVLelRKRFwiLFwibm9Cb3JkZXJcIjpcIm5acUlVUFQ4Y1o4N0JXNHI4a3hVXCIsXCJ0cmFuc3BhcmVudFwiOlwiXzY2OWxSNHkyQUg5N0ExbHk1TVlXT1wiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiXzNpY3V0WEh3eklpb3d0N2JWYTNZaWJcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJfMmtDa3hQa3BsUDF4cWpma2Vwb3lOcFwiLFwibm9QYWRkaW5nXCI6XCJfM2tOYkNnY0ktUl9GRlEtM082VDBsYVwiLFwiY29udGVudFwiOlwiXzJiRjFBU2NFeHNrdU9wdXpkLWNEXzZcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIE9mZnNldFNpZGUgPSBcImxlZnRcIiB8IFwicmlnaHRcIjtcblxudHlwZSBCdXR0b25MaW5rUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gQnV0dG9uTGluayh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHNpemUsXG4gIGNvbnRhaW5lclJlZixcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIC4uLnByb3BzXG59OiBCdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25MaW5rO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8yUXU5UmFHNTVwV3lKYVRfXzNfb0ZBXCIsXCJsZWZ0XCI6XCJfM254M2dOUHpqNkxUXzFod25RSHhPSlwiLFwic21hbGxcIjpcIl8yTHZfNnh4MkdsMzM1S1Q5SW9vajNnXCIsXCJtZWRpdW1cIjpcIl8zSHg4cGhhejN6THFOc2VBcE5JV1pIXCIsXCJsYXJnZVwiOlwiXzItT0VZRm9JdmxzNE4yQ1J1WS1lSnJcIixcInhsYXJnZVwiOlwiXzZ4RllBUEFQd0FXbGhtMGdkdG9aUlwiLFwiaW52ZXJ0ZWRcIjpcIl8ycEVHaUszS3VQbkV2d2lPQ0RnRkRhXCIsXCJyb3VuZGVkXCI6XCJfMXp5VktzbW96UFJ0TEhEdF9qNjE0TlwiLFwicmlnaHRPZmZzZXRcIjpcIl8xcll2dHFuWnlJNFJydWxDN0tHY291XCIsXCJsZWZ0T2Zmc2V0XCI6XCJfM1RyN2VPNEVzMUJvdGgyS19zaVRBTlwiLFwibm9TaGFkb3dcIjpcIl8yd1ozR0lJM29OZDhJWDdhZ2EtYU11XCIsXCJ0cmFuc3BhcmVudFwiOlwiXzFUS2dwU1lsX0EwSVNrQmNUMWpseTdcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIl8zcDJUWTRub2RWaXU5angtTHpHQ05lXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiXzNnRXdrUnByblNfSVJFdTNLdE56TURcIixcIm5vUGFkZGluZ1wiOlwiXzJKcEtKcnVtQVRjVFRSVDd4aWZmOWlcIixcIm5vQm9yZGVyXCI6XCJfMVAzUDI3NHdvdTZsRUE4N2c2ckZWMlwiLFwiY29udGVudFwiOlwic05EcnEzY1g2STZRLU91dXN6N1RpXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9DaGVja2JveFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDaGVja2JveFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpemU/OiBTaXplO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIENoZWNrYm94KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgY2hlY2tlZCxcbiAgZGlzYWJsZWQsXG4gIG5hbWUsXG4gIGluZGV0ZXJtaW5hdGUsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbn06IENoZWNrYm94UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TGFiZWwgdmFsdWU9e2xhYmVsfT5cbiAgICAgIDxpbnB1dFxuICAgICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPXsoaW5wdXRSZWYpID0+IHtcbiAgICAgICAgICBpZiAoaW5wdXRSZWYpIHtcbiAgICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW5wdXQsIHN0eWxlc1tzaXplXV0pfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgLz5cbiAgICA8L0xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMYWJlbElucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MTGFiZWxFbGVtZW50PjtcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9XG4gICAgPlxuICAgICAge3ZhbHVlfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8xNURic19YNUlUOXRrbUFzTVhQTlZKXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaW5wdXRcIjpcIl8xcDJobWptTTFxTlpUWklpRkhGSXh1XCIsXCJzbWFsbFwiOlwiXzFKaV9fOVUtRDVVZFcyTkpXV1VQckNcIixcIm1lZGl1bVwiOlwiXzNLSlMyRlJTMnRkOTBRcjZyMzNMMjhcIixcImxhcmdlXCI6XCJfMWo3b2RDRUVYMkRrZ2dwSVp1RjRNSVwiLFwieGxhcmdlXCI6XCJfM0tad2hVbXhCSmViMnh0azg4Z2FHV1wifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yUGlja2VyIH0gZnJvbSBcIi4vQ29sb3JQaWNrZXJcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi4vQ29sb3JTd2F0Y2hcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xuICBjb2xvcnM6IENvbG9yW107XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBvblNlbGVjdDogKGNvbG9yOiBDb2xvcikgPT4gdm9pZDtcbiAgc2VsZWN0ZWRDb2xvcj86IENvbG9yO1xufTtcblxuZnVuY3Rpb24gQ29sb3JQaWNrZXIoe1xuICBjb2xvcnMsXG4gIGNvbnRhaW5lclJlZixcbiAgb25TZWxlY3QsXG4gIHNlbGVjdGVkQ29sb3IsXG4gIGRpcmVjdGlvbiA9IFwidmVydGljYWxcIixcbn06IENvbG9yUGlja2VyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb2xvclBpY2tlciwgc3R5bGVzW2RpcmVjdGlvbl1dKX1cbiAgICA+XG4gICAgICB7Y29sb3JzLm1hcCgoY29sb3I6IENvbG9yKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPENvbG9yU3dhdGNoXG4gICAgICAgICAgICBrZXk9e2NvbG9yLmtleX1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2NvbG9yID09PSBzZWxlY3RlZENvbG9yfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25TZWxlY3QoY29sb3IpfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JQaWNrZXI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JTd2F0Y2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclN3YXRjaFByb3BzID0ge1xuICBjb2xvcjogQ29sb3I7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIENvbG9yU3dhdGNoKHtcbiAgY29sb3IsXG4gIGNvbnRhaW5lclJlZixcbiAgb25DbGljayxcbiAgaXNTZWxlY3RlZCA9IGZhbHNlLFxufTogQ29sb3JTd2F0Y2hQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb2xvclN3YXRjaCxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc1NlbGVjdGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBkYXRhLXRlc3RpZD1cImNvbG9yLXN3YXRjaFwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvci5oZXhDb2RlIH19XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc3JPbmx5fT57YFNlbGVjdCAke2NvbG9yLmxhYmVsfSBjb2xvcmB9PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclN3YXRjaDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JTd2F0Y2hcIjpcImR2N2l1Y1RRcS1aaFVSVXVwLVB1VlwiLFwic2VsZWN0ZWRcIjpcIl8xTGJBZ3lpaUVfMXVqVzkwZC02aXV1XCIsXCJzck9ubHlcIjpcIl8xZXRrdXNsaFpWRVBOc2sxUWdoVEVvXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JQaWNrZXJcIjpcIl8yRjFPbi1TQTNtTWtoWlBGckRqV0ljXCIsXCJob3Jpem9udGFsXCI6XCJfMVdGWXlNa2tZTEw3M25fX3JQVVVidlwiLFwidmVydGljYWxcIjpcIl8xbElvYTJial90YmtRaWUwSXBFMkxuXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiLi4vTW9kYWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIENvbmZpcm1hdGlvbk1vZGFsUHJvcHMgPSB7XG4gIGJ1dHRvbnNMZWZ0PzogUmVhY3RFbGVtZW50W107XG4gIGJ1dHRvbnNSaWdodD86IFJlYWN0RWxlbWVudFtdO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyOiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1vZGFsKHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaGVhZGVyLFxuICBpc09wZW4sXG4gIGJ1dHRvbnNMZWZ0ID0gW10sXG4gIGJ1dHRvbnNSaWdodCA9IFtdLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgYmFzZVpJbmRleCA9IDEwMTksXG59OiBDb25maXJtYXRpb25Nb2RhbFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBjb250YWluZXJSZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgIG5vT3ZlcmxheT17bm9PdmVybGF5fVxuICAgICAgbm9TaGFkb3c9e25vU2hhZG93fVxuICAgICAgYmFzZVpJbmRleD17YmFzZVpJbmRleH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxoMSBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEhlYWRlcn0+e2hlYWRlcn08L2gxPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWxDb250ZW50LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc0xlZnR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zUmlnaHR9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuQ29uZmlybWF0aW9uTW9kYWwuZGlzcGxheU5hbWUgPSBcIkNvbmZpcm1hdGlvbk1vZGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpcm1hdGlvbk1vZGFsO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTW9kYWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYnV0dG9uPzogUmVhY3ROb2RlO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIE1vZGFsKHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaXNPcGVuLFxuICBidXR0b24sXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIGJhc2VaSW5kZXggPSAxMDA5LFxufTogTW9kYWxQcm9wcykge1xuICB1c2VIb3RrZXlzKFwiRXNjYXBlXCIsIG9uQ2xvc2UpO1xuXG4gIGNvbnN0IGhhbmRsZU92ZXJsYXlDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNsb3NlKCk7XG4gIH0sIFtvbkNsb3NlXSk7XG5cbiAgcmV0dXJuIChcbiAgICBpc09wZW4gJiYgKFxuICAgICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlT3ZlcmxheUNsaWNrfVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMSB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7YnV0dG9uICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAyIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YnV0dG9ufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiXzIwWktHWTRUd1p4cDBLWjZFN3k0V0JcIixcIm5vT3ZlcmxheVwiOlwiXzJBTHcycC1ESHhZRGhZdlJ6UTRpbkJcIixcIm1vZGFsXCI6XCJfMjVMQk4zMV9tSTFJMXVIRERQNE8wSVwiLFwidHJhbnNwYXJlbnRcIjpcIl8zWjJLbDFyRUhaUU1MVXNYRjFmN2xvXCIsXCJub1NoYWRvd1wiOlwiXzNDZlNULXRuLXRzdmNvZFN4ZWxpUXFcIixcIm1vZGFsQnV0dG9uXCI6XCJfMWVPMHgzTTBwTjgtNzlJdVl1VF9DbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiS2dDNXB3dHNIYXZ1Vk9MdWJBTGFlXCIsXCJtb2RhbEhlYWRlclwiOlwiXzFiVE5YTVI1bVpGWHMxbzB1eGtoUlBcIixcIm1vZGFsQ29udGVudFwiOlwicXVQNW80UTlubFVvMWZUN3NiUFZBXCIsXCJub1BhZGRpbmdcIjpcIl8xVWdvX0RIU1Q0UmJXekl4SFBoajduXCIsXCJtb2RhbEJ1dHRvbnNDb250YWluZXJcIjpcIl8yYkdMN1hqRHk2c0UzSmxlVTk4aGp5XCIsXCJtb2RhbEJ1dHRvbnNcIjpcIl8zWGZmRmVOOVZFSXB5dGhtVkoyVThDXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgRmlsZUlucHV0U2l6ZSA9IFNpemU7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9uQ2hhbmdlOiAoKSA9PiB2b2lkO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBhY2NlcHQ/OiBzdHJpbmc7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IEZpbGVJbnB1dFNpemU7XG59O1xuXG5mdW5jdGlvbiBGaWxlSW5wdXQoe1xuICBjaGlsZHJlbixcbiAgYWNjZXB0LFxuICBvbkNoYW5nZSxcbiAgaW5wdXRSZWYsXG4gIG11bHRpcGxlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5sYWJlbCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuaW5wdXR9XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgaWQ9XCJmaWxlXCJcbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVJbnB1dDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaW5wdXRcIjpcIl8zVlh6cjZ6bVc3VDZhcng5X3ZDQUZWXCIsXCJsYWJlbFwiOlwiejdzMmhkd0dUM2tjejUxX21KeG12XCIsXCJzbWFsbFwiOlwiXzJ6cjU4aEtrZ2N3WU1CMXd1QUp0b1JcIixcImxhcmdlXCI6XCJfMUNOYkxlakk0NmozQ1NSVTd0UUdiZVwiLFwieGxhcmdlXCI6XCJfMnRqZVhkd3gzLWRuU185MjFydXBCbFwiLFwiaW52ZXJ0ZWRcIjpcIl8zMmxkTE1FTGtTeWRYZW9nOEJDQmktXCIsXCJyb3VuZGVkXCI6XCJYbjREZjdyUXhtMFFBSE5ldXZOTFwiLFwibm9TaGFkb3dcIjpcIk5lQU9vWWdiMGhPUG5UVnp3dGdERFwiLFwibm9Cb3JkZXJcIjpcIl8zd1Z6YjRQUnFoeHVwWGp1QjBSQmxTXCIsXCJub1BhZGRpbmdcIjpcIl8xeFB0WGVqX21oUERibHp2Y3JsZk84XCIsXCJ0cmFuc3BhcmVudFwiOlwiUzB6RGZnc1UxRGdPMFV1VFNPZms0XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJlbWVnTENILVdfbjdLdVRKbE9zUUFcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJWSFpSNmhXSzZmU0RmUkx1aEg3b05cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9hdGluZ1BhbmVsIH0gZnJvbSBcIi4vRmxvYXRpbmdQYW5lbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUGxhY2VtZW50ID0ge1xuICBob3Jpem9udGFsOlxuICAgIHwgXCJyaWdodFwiXG4gICAgfCBcInJpZ2h0RWRnZVwiXG4gICAgfCBcInJpZ2h0T25FZGdlXCJcbiAgICB8IFwibGVmdFwiXG4gICAgfCBcImxlZnRFZGdlXCJcbiAgICB8IFwibGVmdE9uRWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJjZW50ZXJcIjtcbiAgdmVydGljYWw6XG4gICAgfCBcInRvcFwiXG4gICAgfCBcInRvcEVkZ2VcIlxuICAgIHwgXCJ0b3BPbkVkZ2VcIlxuICAgIHwgXCJib3R0b21cIlxuICAgIHwgXCJib3R0b21FZGdlXCJcbiAgICB8IFwiYm90dG9tT25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHBhcmVudDogXCJ2aWV3cG9ydFwiIHwgXCJjb250YWluZXJcIjtcbn07XG5cbnR5cGUgRmxvYXRpbmdQYW5lbFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvbHVtblwiIHwgXCJyb3dcIjtcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xufTtcblxuZnVuY3Rpb24gRmxvYXRpbmdQYW5lbCh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGxheW91dCA9IFwiY29sdW1uXCIsXG4gIHBsYWNlbWVudCA9IHsgaG9yaXpvbnRhbDogXCJjZW50ZXJcIiwgdmVydGljYWw6IFwiYm90dG9tXCIsIHBhcmVudDogXCJ2aWV3cG9ydFwiIH0sXG59OiBGbG9hdGluZ1BhbmVsUHJvcHMpIHtcbiAgY29uc3QgaG9yaXpvbnRhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50Lmhvcml6b250YWwgPT09IFwiY2VudGVyXCJcbiAgICAgID8gXCJob3Jpem9udGFsQ2VudGVyXCJcbiAgICAgIDogcGxhY2VtZW50Lmhvcml6b250YWw7XG5cbiAgY29uc3QgdmVydGljYWxQbGFjZW1lbnQgPVxuICAgIHBsYWNlbWVudC52ZXJ0aWNhbCA9PT0gXCJjZW50ZXJcIiA/IFwidmVydGljYWxDZW50ZXJcIiA6IHBsYWNlbWVudC52ZXJ0aWNhbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJmbG9hdGluZy1wYW5lbFwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW2hvcml6b250YWxQbGFjZW1lbnRdLFxuICAgICAgICBzdHlsZXNbdmVydGljYWxQbGFjZW1lbnRdLFxuICAgICAgICBzdHlsZXNbbGF5b3V0XSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBwbGFjZW1lbnQucGFyZW50ICE9PSBcImNvbnRhaW5lclwiLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGbG9hdGluZ1BhbmVsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8ycjBGa1lKN1NLMVlqQjNIS0hNQWloXCIsXCJyb3dcIjpcIl8zUi1GRjhlTXUwQ1M0ZU5YM2xUZENSXCIsXCJjb2x1bW5cIjpcIl8xb0tPZUFnWmp3eE5NM3VHZkx0NklPXCIsXCJmaXhlZFwiOlwiXzNvUUdXZ1NJTmJ5dGI0dXY5MkNTdlRcIixcInBsYWluXCI6XCJpTWY4b2QtYklxc0hBdnhvZkR1emJcIixcInRyYW5zcGFyZW50XCI6XCJkMm95eDVweXNxajg5OGFTOEczRThcIixcInRvcFwiOlwiXzExY1BZcTFkaFF5elZJTVplazFfSW9cIixcInRvcEVkZ2VcIjpcIl8yX2luZUN5MU1RbFlQNnFNZXdkMXo1XCIsXCJ0b3BPbkVkZ2VcIjpcIl8xcnZDc0RvZDVibFRPeUFsNGtEd04wXCIsXCJyaWdodFwiOlwiXzFTSVlCY1JncVM0VlBoVzlNODBZNHpcIixcInJpZ2h0RWRnZVwiOlwiUUE2OWYwRDhiVENKSHJET3I4bTFyXCIsXCJyaWdodE9uRWRnZVwiOlwiXzJQaVRVbDBKWXpFQ25PMDg1MWd6M2FcIixcImJvdHRvbVwiOlwiXzMwNWdCbVR3QWVYWmZBX005dHNWTm9cIixcImJvdHRvbUVkZ2VcIjpcIl8xUGNEWGJMWjJYSFBrZWlfSF9yNThwXCIsXCJib3R0b21PbkVkZ2VcIjpcIl8ydm90NHFwcjU4V25iNnB2SFluamtjXCIsXCJsZWZ0XCI6XCJzSXRnQlY0V3REeDR2WjNhLVA0aXhcIixcImxlZnRFZGdlXCI6XCJfMU5KMUZ6SV9hYktpLVc2a2MycjJjNlwiLFwibGVmdE9uRWRnZVwiOlwiXzEyRXZ3YmFWUU5XUFplMzdTbzhMX21cIixcImhvcml6b250YWxDZW50ZXJcIjpcIl8yamlTeEViQ1RLVnpEdGVHUTF1b0VmXCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiXzJmOUQ0NkJCLWdlelB2dzhUWnhKdnBcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBJY29uUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxJbWFnZUVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHNyYzogc3RyaW5nO1xuICBzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIiB8IFwieGxhcmdlXCI7XG59O1xuZnVuY3Rpb24gSWNvbih7XG4gIHNyYyxcbiAgYWx0LFxuICBjb250YWluZXJSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxufTogSWNvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGltZ1xuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmljb24sXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQgfSxcbiAgICAgIF0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaWNvblwiOlwiXzMzY1RNOGk4cWFqRkd5LTAwdHkwUndcIixcInNtYWxsXCI6XCJNVWkzaWt6Y1BaZG81OUFmb1hkT0ZcIixcIm1lZGl1bVwiOlwiXzJWQ0txeTU5TlNGZGZEaUUwb3hhc3pcIixcImxhcmdlXCI6XCJfMlVVVWYybl9hMFBZcFE4a293S0h6cFwiLFwieGxhcmdlXCI6XCJvRElFWThVNFR3Q0prakY3eGFRQk9cIixcImludmVydGVkXCI6XCJfMnF6VXRVMVRkX2M1OHZNOEFMcVNWV1wifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIHNyYzogc3RyaW5nO1xuICBhbHQ6IHN0cmluZztcbiAgYmFkZ2VDb250ZW50PzogUmVhY3ROb2RlO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIj47XG59O1xuXG5mdW5jdGlvbiBJY29uQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIHNyYyxcbiAgYWx0LFxuICBiYWRnZUNvbnRlbnQgPSBudWxsLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxufTogSWNvbkJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7YmFkZ2VDb250ZW50ICYmIDxCdXR0b25CYWRnZT57YmFkZ2VDb250ZW50fTwvQnV0dG9uQmFkZ2U+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlJneWxsWFRxcDNfalo2QTJOYnZnNlwiLFwic21hbGxcIjpcIl8xdzBoWmxPYmVMN0VHODd6c0wtOXZOXCIsXCJtZWRpdW1cIjpcIkVLMWJ2SlpqVzExOURvNzlTdEw3SVwiLFwibGFyZ2VcIjpcIlBneVFYSzF5eUNNcThCU2FZQ2JjaFwiLFwieGxhcmdlXCI6XCJxaGtIeklvSW93bnJleEh6UVN1dVVcIixcInJvdW5kZWRcIjpcIl8zcXFhMWswQzlKTVBzQlJTejZaMHlZXCIsXCJ0b3BPZmZzZXRcIjpcIl8zVlpQN0RvaGhaN3o4Zmk0ei1IOGpOXCIsXCJyaWdodE9mZnNldFwiOlwiXzJYWGhKMy1jWWNYYklWTm1tbk84eUhcIixcImJvdHRvbU9mZnNldFwiOlwiWkpJWDdWcTVtdXNqZDZzNGhDU2JQXCIsXCJsZWZ0T2Zmc2V0XCI6XCJfMVFWV2l5aXZXOVV4ZW9OdTNVZG52NlwiLFwiaW52ZXJ0ZWRcIjpcIl8yalp6WGhuSHFxYnR1bTRkQmRsMWxLXCIsXCJub1NoYWRvd1wiOlwiXzNmeHZXaU9ORkZZdE11RGNYcDhzeXVcIixcIm5vQm9yZGVyXCI6XCJfM0V1eHVwbnFPVnVTb1VzYkt6Tm5cIixcInRyYW5zcGFyZW50XCI6XCJfMzViUklpOEJ0RDRSS1NKdlpial9zbVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b25MaW5rIH0gZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmtcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI7XG5cbnR5cGUgSWNvbkJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBzcmM6IHN0cmluZztcbiAgICAgIGFsdDogc3RyaW5nO1xuICAgICAgYmFkZ2VDb250ZW50PzogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjb250YWluZXJSZWYsXG4gIGNsYXNzTmFtZSxcbiAgc3JjLFxuICBhbHQsXG4gIGJhZGdlQ29udGVudCA9IG51bGwsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBJY29uQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uLWJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2JhZGdlQ29udGVudCAmJiA8QnV0dG9uQmFkZ2U+e2JhZGdlQ29udGVudH08L0J1dHRvbkJhZGdlPn1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbkxpbms7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzN3anhqQ3p2X2xwaGRXbTczSmdBeXBcIixcInNtYWxsXCI6XCJfMzJNWW1aYkh6VVUwYjNkTWNtSnNpTVwiLFwibWVkaXVtXCI6XCJfMTg5cllKMlR2YUJ5ckMzUzdDZjNubVwiLFwibGFyZ2VcIjpcIl8yYVlTU1RVZzh3dnJBRE9TMTg4eE1cIixcInhsYXJnZVwiOlwidnMzS1l2VTdaY25odzJTT3lTQ05mXCIsXCJyb3VuZGVkXCI6XCJfMThpaDY3TEwwbjdYbDYxZ0xHOHMwa1wiLFwidG9wT2Zmc2V0XCI6XCJfMXA3aDdXNlFzREhwYmE2bWd5V1VMOVwiLFwicmlnaHRPZmZzZXRcIjpcIl8zZnhNSUJfSno1Q1lJZnd1WmhRMjhpXCIsXCJib3R0b21PZmZzZXRcIjpcIl8xMTNtNENXaW1MdnNqVTl4SXhQcTdpXCIsXCJsZWZ0T2Zmc2V0XCI6XCJfNkNob3YyTW95VXh5aFd4S24zNjhLXCIsXCJpbnZlcnRlZFwiOlwiXzNlcU9KUXo0dWUtZVhMdnEyN0FzWTVcIixcIm5vU2hhZG93XCI6XCJsRjZEX1YyMHgzMnY5WnlzcXdDNjhcIixcIm5vQm9yZGVyXCI6XCJfM3M2cUNvbExqcGpsNFJybzdtVlR4U1wiLFwidHJhbnNwYXJlbnRcIjpcIl8ySVpPOXBLMTMxVTkxY3lLWGl4Z3hEXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiLi9JbWFnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSW1hZ2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgY29uc3QgZW1wdHlJbWFnZSA9XG4gIFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FRQUFBQzFIQXdDQUFBQUMwbEVRVlI0Mm1Oa1lBQUFBQVlBQWpDQjBDOEFBQUFBU1VWT1JLNUNZSUk9XCI7IC8vIDF4MXBuZ1xuXG5leHBvcnQgdHlwZSBJbWFnZVByb3BzID0ge1xuICBhbmltYXRpb24/OiBcImZhZGVJblwiIHwgXCJzY2FsZVVwXCI7XG4gIGFsdD86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGxheW91dD86IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG4gIHNyYzogc3RyaW5nO1xuICBzcmNXaWR0aD86IG51bWJlcjtcbiAgc3JjSGVpZ2h0PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gSW1hZ2VDb21wb25lbnQoe1xuICBzcmMsXG4gIGFsdCxcbiAgc3JjV2lkdGgsXG4gIHNyY0hlaWdodCxcbiAgY2hpbGRyZW4sXG4gIGFuaW1hdGlvbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbn06IEltYWdlUHJvcHMpIHtcbiAgY29uc3QgW2lzTG9hZGVkLCBzZXRJc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGltYWdlUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiO1xuICAgIGltYWdlLnNyYyA9IHNyYztcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBpbWFnZVJlZi5jdXJyZW50Py5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgc3JjKTtcbiAgICAgIHNldElzTG9hZGVkKHRydWUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaW1hZ2Uuc3JjID0gXCJcIjtcbiAgICAgIGRlbGV0ZSBpbWFnZS5vbmxvYWQ7XG4gICAgICBkZWxldGUgaW1hZ2Uuc3JjO1xuICAgICAgZGVsZXRlIGltYWdlLmNyb3NzT3JpZ2luO1xuICAgICAgaW1hZ2UgPSBudWxsO1xuICAgIH07XG4gIH0sIFtzcmNdKTtcblxuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIDxpbWdcbiAgICAgICAgcmVmPXtpbWFnZVJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLmltYWdlLFxuICAgICAgICAgIHN0eWxlc1tsYXlvdXRdLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFtzdHlsZXMuZmFkZUluXTogYW5pbWF0aW9uID09PSBcImZhZGVJblwiICYmIGlzTG9hZGVkLFxuICAgICAgICAgICAgW3N0eWxlcy5zY2FsZVVwXTogYW5pbWF0aW9uID09PSBcInNjYWxlVXBcIiAmJiBpc0xvYWRlZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdKX1cbiAgICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cImltYWdlXCJcbiAgICAgICAgYWx0PXthbHR9XG4gICAgICAgIHNyYz17ZW1wdHlJbWFnZX1cbiAgICAgICAgd2lkdGg9e3NyY1dpZHRofVxuICAgICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cbiAgICAgIC8+XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDxpbWdcbiAgICAgIHJlZj17aW1hZ2VSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmltYWdlLFxuICAgICAgICBzdHlsZXNbbGF5b3V0XSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuZmFkZUluXTogYW5pbWF0aW9uID09PSBcImZhZGVJblwiICYmIGlzTG9hZGVkLFxuICAgICAgICAgIFtzdHlsZXMuc2NhbGVVcF06IGFuaW1hdGlvbiA9PT0gXCJzY2FsZVVwXCIgJiYgaXNMb2FkZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2VcIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e2VtcHR5SW1hZ2V9XG4gICAgICB3aWR0aD17c3JjV2lkdGh9XG4gICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZUNvbXBvbmVudDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfMVYwMEdwel9rZXFVV0dFZlo3NHdqU1wiLFwiaGFzT3ZlcmxheVwiOlwiXzJNdFVmWXB3NVY4VXByeHFfRV95U2FcIixcIm92ZXJsYXlcIjpcInoxRFZIeGoxWlBLNzNPSVFSY2s3alwiLFwiaW1hZ2VcIjpcIl8zOU9qVEdXZDd4bXhjbDZudUktZzJMXCIsXCJjb3ZlclwiOlwiXzNxS2RwMm1LNmY3RzV6QXpYbHpnckVcIixcImNvbnRhaW5cIjpcIl8yb19HNFhiQi1Rb3piZnVrNF9WMDBoXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJfMnhndURrR3UxbVIyeVBhWS1oek44b1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl8xOVdNYTN0cVJ4dlVoREtGWjhZMlBCXCIsXCJmYWRlSW5cIjpcIl8zNk9TMkdjc2p3RWdIUDBvLThBeDFtXCIsXCJmYWRlSW5BbmltYXRpb25cIjpcIi1leW1ONmhXekpuUng4WGhrMURXT1wiLFwic2NhbGVVcFwiOlwiXzFVVVJBQlpuTWxMZjBLUFVVRDJSTnpcIixcInNjYWxlVXBBbmltYXRpb25cIjpcIl8za290d1Y5anZwSFNQbWp0T1VsZzdNXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXcgfSBmcm9tIFwiLi9MaXN0Vmlld1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0l0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdMaW5rSXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld1Byb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGhlYWRlckFjdGlvbnMsXG59OiBMaXN0Vmlld1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAge2hlYWRlciAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9PntoZWFkZXJ9PC9oMz59XG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDx1bCBjbGFzc05hbWU9e3N0eWxlcy5saXN0fT57Y2hpbGRyZW59PC91bD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXc7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiRGNXb0ViaW9sOXB4LUZRQV9UcE9rXCIsXCJoZWFkZXJcIjpcIl8yamF2QjhzQUR4NmREZ3FYTjNNQ0xQXCIsXCJoZWFkZXJMYWJlbFwiOlwiXzNpTU9mSXlOTDFTRW12Mko4WkREbVdcIixcImxpc3RcIjpcIl8zX0ttdGJNUHBQSGdKRk05WkJfeG5BXCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3SXRlbVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IExpc3RWaWV3SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3SXRlbTtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi4vQnV0dG9uTGlua1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIExpc3RWaWV3TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudDogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZzogYm9vbGVhbjtcbiAgICAgIGFsaWduOiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gICAgICBzaXplOiBTaXplO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIExpc3RWaWV3TGlua0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYXM6IENvbXBvbmVudCxcbiAgYWN0aXZlID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICAuLi5wcm9wc1xufTogTGlzdFZpZXdMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvbkxpbmtcbiAgICAgICAgYXM9e0NvbXBvbmVudH1cbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b25MaW5rPlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3TGlua0l0ZW07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1lbnUgfSBmcm9tIFwiLi9NZW51XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUxpbmtJdGVtIH0gZnJvbSBcIi4vTWVudUxpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNPcGVuPzogYm9vbGVhbjtcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBmb290ZXI/OiBSZWFjdE5vZGU7XG59O1xuXG5mdW5jdGlvbiBNZW51KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgY2xhc3NOYW1lLFxuICBpc09wZW4gPSB0cnVlLFxuICBoZWFkZXIsXG4gIGZvb3Rlcixcbn06IE1lbnVQcm9wcykge1xuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLm1lbnUsXG4gICAgICAgICAgeyBbc3R5bGVzLm9wZW5dOiBpc09wZW4gfSxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIF0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnNjcm9sbENvbnRhaW5lcn0+XG4gICAgICAgICAge2hlYWRlciAmJiBpc09wZW4gJiYgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+e2hlYWRlcn08L2gzPn1cbiAgICAgICAgICA8dWw+e2lzT3BlbiAmJiBjaGlsZHJlbn08L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2Zvb3RlciAmJiBpc09wZW4gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuZm9vdGVyLFxuICAgICAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiAhY2hpbGRyZW4gfSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmb290ZXJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudVwiOlwiXzFMNS1wdl9QNk0yb0dlb1JlTW5PMkpcIixcIm9wZW5cIjpcIl8xSjdwRmt2a2pRUVJXa21nLTBYVFdaXCIsXCJlbnRyYW5jZVwiOlwiXzNjcWVzUUdmOUN5dTY2RHNvS3RGMHFcIixcImhlYWRlclwiOlwicE9QWWFWMDFvOVdCN0J3NFZnaXdcIixcImZvb3RlclwiOlwiXzNtQ2NjbnZOZE4tWFpaUzdQTHhhdjBcIixcIm5vQm9yZGVyXCI6XCJfMjZ0VU9mOWdJLWFSZmFmX0lleVBVSVwiLFwic2Nyb2xsQ29udGFpbmVyXCI6XCJfMW1xTVVyZDEzLTFUbG92R0NCT2VwZlwifTsiLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubWVudUNvbnRhaW5lcixcbiAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQudmVydGljYWxdLFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcndhcmRSZWYoTWVudUNvbnRhaW5lcik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzNENElRWldDdEg4TVRYcnY1OU1ZS0ZcIixcIm1lbnVDb250YWluZXJcIjpcIl8xXzJzRkZWek5YbUpYX1BUcEhaZ0VMXCIsXCJ0b3BcIjpcIlF2QzR5Nm1mMVlXLWJsSzZQU041SVwiLFwicmlnaHRcIjpcIl8zbXJWYndrbVZtbGNGRGFkUG9lY2M3XCIsXCJsZWZ0XCI6XCJYZlE0YmpuS0ZhQVltUVR1UkstNkFcIixcImJvdHRvbVwiOlwiXzM5X3R5Ylg1Slo2WS11ajQ3Z1BzS1ZcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudUl0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MTElFbGVtZW50PikgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE1lbnVJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGlzQWN0aXZlID0gZmFsc2UsXG59OiBNZW51SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVJdGVtLFxuICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUgfSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51SXRlbVwiOlwiXzJLc1JDRWdFX003d29YamhwUnVWdW9cIixcIm5vUGFkZGluZ1wiOlwiXzJjcU1KSEp5Q2pBVThaUFpBVjBZRDVcIixcImFjdGl2ZVwiOlwiXzFYblhaaUFyaHZVZXlYZ3FVYUctUDdcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51TGlua0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBhczogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIE1lbnVMaW5rSXRlbSh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICAuLi5wcm9wc1xufTogTWVudUxpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgZGF0YS10ZXN0aWQ9XCJtZW51LWxpbmstaXRlbVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVMaW5rSXRlbSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVMaW5rSXRlbTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUxpbmtJdGVtXCI6XCJfM3o1dDlDQWhjQXdWT3RPVmxBXzRHd1wiLFwibm9QYWRkaW5nXCI6XCJiTlhpa3lFWklJT00xSGdzQWkzZnRcIixcImFjdGl2ZVwiOlwiXzFaLW1QdmV3R1VnNDg0UVBjOUh4cTJcIixcIm1lbnVJdGVtXCI6XCJfM3RJV0FoTUR0UHpBSDRiQXJ3cFJPdlwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIE92ZXJsYXkgfSBmcm9tIFwiLi9PdmVybGF5XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3ZlcmxheS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgT3ZlcmxheVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIGlzRml4ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE92ZXJsYXkoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBpc0ZpeGVkID0gZmFsc2UsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IE92ZXJsYXlQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJvdmVybGF5XCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogaXNGaXhlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE92ZXJsYXk7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcIkkwZG0tTGRtLVNpUzB2NVgtdm8wZ1wiLFwidHJhbnNwYXJlbnRcIjpcIl8zcWREZGx5bkhMbm9mTjFES3Z2WVE4XCIsXCJmaXhlZFwiOlwiXzFnWHk5WFMzRi1KdHFkalpCY29LU3dcIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0SW5wdXQgfSBmcm9tIFwiLi9UZXh0SW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UZXh0SW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSwgVGV4dElucHV0VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcbiAgb25LZXlEb3duPzogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICBzaXplPzogU2l6ZTtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50Pjtcbn07XG5cbmZ1bmN0aW9uIFRleHRJbnB1dCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgb25CbHVyLFxuICBvbktleURvd24sXG4gIHBsYWNlaG9sZGVyLFxuICB2YWx1ZSxcbiAgbmFtZSxcbiAgaW5wdXRSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxufTogVGV4dElucHV0UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxpbnB1dFxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRleHRJbnB1dCwgc3R5bGVzW3NpemVdLCB7W3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyfV0pfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgIC8+XG4gICk7XG4gIGlmIChsYWJlbCkge1xuICAgIHJldHVybiA8TGFiZWwgdmFsdWU9e2xhYmVsfT57aW5wdXRFbGVtZW50fTwvTGFiZWw+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiA8PntpbnB1dEVsZW1lbnR9PC8+O1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBUZXh0SW5wdXQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRleHRJbnB1dFwiOlwiXzJpZkZUQnl4dlFGNWVSWXdNQVNhZTdcIixcInNtYWxsXCI6XCJfMThpTE5ocWM1VHo1UFBvMms0X1RCaFwiLFwibWVkaXVtXCI6XCJfMWphUnlqZWF0SlJ4RXVqZ1BHeld6eFwiLFwibGFyZ2VcIjpcIl8zNGQ1SDNYOFcwVWdYOUI4ZHRQUkFPXCIsXCJ4bGFyZ2VcIjpcIl8zc3Q4RUdvdW5PZ2pOdUxwb0VyQzBzXCIsXCJub0JvcmRlclwiOlwicHRSWjdBNWdpVzdGQjNtazhRTENNXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3QgfSBmcm9tIFwiLi9Ub2FzdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdENvbnRhaW5lciB9IGZyb20gXCIuL1RvYXN0Q29udGFpbmVyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBUb2FzdCh7IGNoaWxkcmVuLCBjb250YWluZXJSZWYsIG9uQ2xpY2sgPSAoKSA9PiB7fSB9OiBUb2FzdFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy50b2FzdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0XCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdFwiOlwiXzJOM1hpSDhSVm5FQVlsekJEX0pDcVpcIixcImVudHJhbmNlXCI6XCJfMTljdzN6eDZmVTRSTUdNYUdNNXpKWlwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIl8zUlQyYWJmekswcnQtWWpjcnFYTG5yXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW8sIFZpZGVvUHJvcHMgfSBmcm9tIFwiLi9WaWRlb1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVmlkZW8ubW9kdWxlLmNzc1wiO1xuXG4vKipcbiAqIFRoZXJlIGlzIGEga25vd24gaXNzdWUgaW4gUmVhY3QgaW4gcmVnYXJkcyB0byB0aGUgJ211dGVkJyBwcm9wZXJ0eSB3aGljaCBjYXVzZXMgdGhlIHdhcm5pbmc6XG4gKiBcIldhcm5pbmc6IHVuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLlwiXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMDM4OVxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NTQ0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGVzdGluZy1saWJyYXJ5L3JlYWN0LXRlc3RpbmctbGlicmFyeS9pc3N1ZXMvNDcwXG4gKi9cblxudHlwZSBMYXlvdXQgPSBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuXG5leHBvcnQgdHlwZSBWaWRlb1Byb3BzID0ge1xuICBzcmM6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBsYXlvdXQ/OiBMYXlvdXQ7XG4gIGF1dG9QbGF5PzogYm9vbGVhbjtcbiAgbG9vcD86IGJvb2xlYW47XG4gIG11dGVkPzogYm9vbGVhbjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHBvc3Rlcj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZGVvKHtcbiAgc3JjLFxuICB0eXBlLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBwb3N0ZXIsXG4gIG11dGVkID0gdHJ1ZSxcbiAgbG9vcCA9IHRydWUsXG4gIGF1dG9QbGF5ID0gdHJ1ZSxcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXG59OiBWaWRlb1Byb3BzKSB7XG4gIHJldHVybiBjaGlsZHJlbiA/IChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XG4gICAgPlxuICAgICAgPHZpZGVvXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgICBsb29wPXtsb29wfVxuICAgICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgICBwbGF5c0lubGluZVxuICAgICAgPlxuICAgICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XG4gICAgICA8L3ZpZGVvPlxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICA8dmlkZW9cbiAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgbG9vcD17bG9vcH1cbiAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgcGxheXNJbmxpbmVcbiAgICA+XG4gICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XG4gICAgPC92aWRlbz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlkZW87XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzFkNTV3WHVRS3B0OTdQcVFIWXg1bVdcIixcImhhc092ZXJsYXlcIjpcIl8yREFNMXg3UDF3dVlOUDhURG1YR1hjXCIsXCJ2aWRlb1wiOlwiXzNqUV9xcFVMdHIwdUZTVFdiRDBOVlpcIixcImNvdmVyXCI6XCJfMXFuVkxoZUd6REk2Tm85X253YjdobFwiLFwiY29udGFpblwiOlwiXzFYMjg2TklTSTB3cTJLSzNkalZodTNcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIk9lZ2wtOGdkMks1bHozbVVHSl9VelwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl8xLUh6cFRZX1d0R2NaYzI1d0NvdGVZXCIsXCJvdmVybGF5XCI6XCJfMlR2WHNxQUlVbkdTcW02a25KRmhMM1wifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIHVzZVRvZ2dsZSB9IGZyb20gXCIuL3VzZVRvZ2dsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VPdXRzaWRlQ2xpY2sgfSBmcm9tIFwiLi91c2VPdXRzaWRlQ2xpY2tcIjtcbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUb2dnbGUoXG4gIGluaXRpYWxWYWx1ZSA9IGZhbHNlXG4pOiBbYm9vbGVhbiwgKG5ld1ZhbHVlPzogYm9vbGVhbikgPT4gdm9pZF0ge1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGluaXRpYWxWYWx1ZSk7XG5cbiAgY29uc3QgdG9nZ2xlID0gdXNlQ2FsbGJhY2soKG5ld1ZhbHVlPzogYm9vbGVhbikgPT4ge1xuICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFZhbHVlKChwcmV2VmFsdWUpID0+IHtcbiAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcblxudHlwZSBDYWxsYmFjayA9IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU91dHNpZGVDbGljayhjYWxsYmFjazogQ2FsbGJhY2spIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2spO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljayk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2spO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrKTtcbiAgICB9O1xuICB9LCBbY2FsbGJhY2tdKTtcblxuICByZXR1cm4gcmVmO1xufVxuIiwiLyohXG4gKiBob3RrZXlzLWpzIHYzLjguN1xuICogQSBzaW1wbGUgbWljcm8tbGlicmFyeSBmb3IgZGVmaW5pbmcgYW5kIGRpc3BhdGNoaW5nIGtleWJvYXJkIHNob3J0Y3V0cy4gSXQgaGFzIG5vIGRlcGVuZGVuY2llcy5cbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDIxIGtlbm55IHdvbmcgPHdvd29ob29AcXEuY29tPlxuICogaHR0cDovL2pheXdjamxvdmUuZ2l0aHViLmlvL2hvdGtleXNcbiAqIFxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbnZhciBpc2ZmID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gMCA6IGZhbHNlOyAvLyDnu5Hlrprkuovku7ZcblxuZnVuY3Rpb24gYWRkRXZlbnQob2JqZWN0LCBldmVudCwgbWV0aG9kKSB7XG4gIGlmIChvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBtZXRob2QsIGZhbHNlKTtcbiAgfSBlbHNlIGlmIChvYmplY3QuYXR0YWNoRXZlbnQpIHtcbiAgICBvYmplY3QuYXR0YWNoRXZlbnQoXCJvblwiLmNvbmNhdChldmVudCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1ldGhvZCh3aW5kb3cuZXZlbnQpO1xuICAgIH0pO1xuICB9XG59IC8vIOS/rumlsOmUrui9rOaNouaIkOWvueW6lOeahOmUrueggVxuXG5cbmZ1bmN0aW9uIGdldE1vZHMobW9kaWZpZXIsIGtleSkge1xuICB2YXIgbW9kcyA9IGtleS5zbGljZSgwLCBrZXkubGVuZ3RoIC0gMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgbW9kc1tpXSA9IG1vZGlmaWVyW21vZHNbaV0udG9Mb3dlckNhc2UoKV07XG4gIH1cblxuICByZXR1cm4gbW9kcztcbn0gLy8g5aSE55CG5Lyg55qEa2V55a2X56ym5Liy6L2s5o2i5oiQ5pWw57uEXG5cblxuZnVuY3Rpb24gZ2V0S2V5cyhrZXkpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBrZXkgPSAnJztcbiAga2V5ID0ga2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7IC8vIOWMuemFjeS7u+S9leepuueZveWtl+espizljIXmi6znqbrmoLzjgIHliLbooajnrKbjgIHmjaLpobXnrKbnrYnnrYlcblxuICB2YXIga2V5cyA9IGtleS5zcGxpdCgnLCcpOyAvLyDlkIzml7borr7nva7lpJrkuKrlv6vmjbfplK7vvIzku6UnLCfliIblibJcblxuICB2YXIgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTsgLy8g5b+r5o236ZSu5Y+v6IO95YyF5ZCrJywn77yM6ZyA54m55q6K5aSE55CGXG5cbiAgZm9yICg7IGluZGV4ID49IDA7KSB7XG4gICAga2V5c1tpbmRleCAtIDFdICs9ICcsJztcbiAgICBrZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufSAvLyDmr5TovoPkv67ppbDplK7nmoTmlbDnu4RcblxuXG5mdW5jdGlvbiBjb21wYXJlQXJyYXkoYTEsIGEyKSB7XG4gIHZhciBhcnIxID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGExIDogYTI7XG4gIHZhciBhcnIyID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGEyIDogYTE7XG4gIHZhciBpc0luZGV4ID0gdHJ1ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyMi5pbmRleE9mKGFycjFbaV0pID09PSAtMSkgaXNJbmRleCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzSW5kZXg7XG59XG5cbnZhciBfa2V5TWFwID0ge1xuICBiYWNrc3BhY2U6IDgsXG4gIHRhYjogOSxcbiAgY2xlYXI6IDEyLFxuICBlbnRlcjogMTMsXG4gIHJldHVybjogMTMsXG4gIGVzYzogMjcsXG4gIGVzY2FwZTogMjcsXG4gIHNwYWNlOiAzMixcbiAgbGVmdDogMzcsXG4gIHVwOiAzOCxcbiAgcmlnaHQ6IDM5LFxuICBkb3duOiA0MCxcbiAgZGVsOiA0NixcbiAgZGVsZXRlOiA0NixcbiAgaW5zOiA0NSxcbiAgaW5zZXJ0OiA0NSxcbiAgaG9tZTogMzYsXG4gIGVuZDogMzUsXG4gIHBhZ2V1cDogMzMsXG4gIHBhZ2Vkb3duOiAzNCxcbiAgY2Fwc2xvY2s6IDIwLFxuICBudW1fMDogOTYsXG4gIG51bV8xOiA5NyxcbiAgbnVtXzI6IDk4LFxuICBudW1fMzogOTksXG4gIG51bV80OiAxMDAsXG4gIG51bV81OiAxMDEsXG4gIG51bV82OiAxMDIsXG4gIG51bV83OiAxMDMsXG4gIG51bV84OiAxMDQsXG4gIG51bV85OiAxMDUsXG4gIG51bV9tdWx0aXBseTogMTA2LFxuICBudW1fYWRkOiAxMDcsXG4gIG51bV9lbnRlcjogMTA4LFxuICBudW1fc3VidHJhY3Q6IDEwOSxcbiAgbnVtX2RlY2ltYWw6IDExMCxcbiAgbnVtX2RpdmlkZTogMTExLFxuICAn4oeqJzogMjAsXG4gICcsJzogMTg4LFxuICAnLic6IDE5MCxcbiAgJy8nOiAxOTEsXG4gICdgJzogMTkyLFxuICAnLSc6IGlzZmYgPyAxNzMgOiAxODksXG4gICc9JzogaXNmZiA/IDYxIDogMTg3LFxuICAnOyc6IGlzZmYgPyA1OSA6IDE4NixcbiAgJ1xcJyc6IDIyMixcbiAgJ1snOiAyMTksXG4gICddJzogMjIxLFxuICAnXFxcXCc6IDIyMFxufTsgLy8gTW9kaWZpZXIgS2V5c1xuXG52YXIgX21vZGlmaWVyID0ge1xuICAvLyBzaGlmdEtleVxuICAn4oenJzogMTYsXG4gIHNoaWZ0OiAxNixcbiAgLy8gYWx0S2V5XG4gICfijKUnOiAxOCxcbiAgYWx0OiAxOCxcbiAgb3B0aW9uOiAxOCxcbiAgLy8gY3RybEtleVxuICAn4oyDJzogMTcsXG4gIGN0cmw6IDE3LFxuICBjb250cm9sOiAxNyxcbiAgLy8gbWV0YUtleVxuICAn4oyYJzogOTEsXG4gIGNtZDogOTEsXG4gIGNvbW1hbmQ6IDkxXG59O1xudmFyIG1vZGlmaWVyTWFwID0ge1xuICAxNjogJ3NoaWZ0S2V5JyxcbiAgMTg6ICdhbHRLZXknLFxuICAxNzogJ2N0cmxLZXknLFxuICA5MTogJ21ldGFLZXknLFxuICBzaGlmdEtleTogMTYsXG4gIGN0cmxLZXk6IDE3LFxuICBhbHRLZXk6IDE4LFxuICBtZXRhS2V5OiA5MVxufTtcbnZhciBfbW9kcyA9IHtcbiAgMTY6IGZhbHNlLFxuICAxODogZmFsc2UsXG4gIDE3OiBmYWxzZSxcbiAgOTE6IGZhbHNlXG59O1xudmFyIF9oYW5kbGVycyA9IHt9OyAvLyBGMX5GMTIgc3BlY2lhbCBrZXlcblxuZm9yICh2YXIgayA9IDE7IGsgPCAyMDsgaysrKSB7XG4gIF9rZXlNYXBbXCJmXCIuY29uY2F0KGspXSA9IDExMSArIGs7XG59XG5cbnZhciBfZG93bktleXMgPSBbXTsgLy8g6K6w5b2V5pGB5LiL55qE57uR5a6a6ZSuXG5cbnZhciBfc2NvcGUgPSAnYWxsJzsgLy8g6buY6K6k54Ot6ZSu6IyD5Zu0XG5cbnZhciBlbGVtZW50SGFzQmluZEV2ZW50ID0gW107IC8vIOW3sue7keWumuS6i+S7tueahOiKgueCueiusOW9lVxuLy8g6L+U5Zue6ZSu56CBXG5cbnZhciBjb2RlID0gZnVuY3Rpb24gY29kZSh4KSB7XG4gIHJldHVybiBfa2V5TWFwW3gudG9Mb3dlckNhc2UoKV0gfHwgX21vZGlmaWVyW3gudG9Mb3dlckNhc2UoKV0gfHwgeC50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCk7XG59OyAvLyDorr7nva7ojrflj5blvZPliY3ojIPlm7TvvIjpu5jorqTkuLon5omA5pyJJ++8iVxuXG5cbmZ1bmN0aW9uIHNldFNjb3BlKHNjb3BlKSB7XG4gIF9zY29wZSA9IHNjb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5blvZPliY3ojIPlm7RcblxuXG5mdW5jdGlvbiBnZXRTY29wZSgpIHtcbiAgcmV0dXJuIF9zY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5pGB5LiL57uR5a6a6ZSu55qE6ZSu5YC8XG5cblxuZnVuY3Rpb24gZ2V0UHJlc3NlZEtleUNvZGVzKCkge1xuICByZXR1cm4gX2Rvd25LZXlzLnNsaWNlKDApO1xufSAvLyDooajljZXmjqfku7bmjqfku7bliKTmlq0g6L+U5ZueIEJvb2xlYW5cbi8vIGhvdGtleSBpcyBlZmZlY3RpdmUgb25seSB3aGVuIGZpbHRlciByZXR1cm4gdHJ1ZVxuXG5cbmZ1bmN0aW9uIGZpbHRlcihldmVudCkge1xuICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIHZhciB0YWdOYW1lID0gdGFyZ2V0LnRhZ05hbWU7XG4gIHZhciBmbGFnID0gdHJ1ZTsgLy8gaWdub3JlOiBpc0NvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnLCA8aW5wdXQ+IGFuZCA8dGV4dGFyZWE+IHdoZW4gcmVhZE9ubHkgc3RhdGUgaXMgZmFsc2UsIDxzZWxlY3Q+XG5cbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSB8fCAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8IHRhZ05hbWUgPT09ICdTRUxFQ1QnKSAmJiAhdGFyZ2V0LnJlYWRPbmx5KSB7XG4gICAgZmxhZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZsYWc7XG59IC8vIOWIpOaWreaRgeS4i+eahOmUruaYr+WQpuS4uuafkOS4qumUru+8jOi/lOWbnnRydWXmiJbogIVmYWxzZVxuXG5cbmZ1bmN0aW9uIGlzUHJlc3NlZChrZXlDb2RlKSB7XG4gIGlmICh0eXBlb2Yga2V5Q29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICBrZXlDb2RlID0gY29kZShrZXlDb2RlKTsgLy8g6L2s5o2i5oiQ6ZSu56CBXG4gIH1cblxuICByZXR1cm4gX2Rvd25LZXlzLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xO1xufSAvLyDlvqrnjq/liKDpmaRoYW5kbGVyc+S4reeahOaJgOaciSBzY29wZSjojIPlm7QpXG5cblxuZnVuY3Rpb24gZGVsZXRlU2NvcGUoc2NvcGUsIG5ld1Njb3BlKSB7XG4gIHZhciBoYW5kbGVycztcbiAgdmFyIGk7IC8vIOayoeacieaMh+WumnNjb3Bl77yM6I635Y+Wc2NvcGVcblxuICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG5cbiAgZm9yICh2YXIga2V5IGluIF9oYW5kbGVycykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2hhbmRsZXJzLCBrZXkpKSB7XG4gICAgICBoYW5kbGVycyA9IF9oYW5kbGVyc1trZXldO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOykge1xuICAgICAgICBpZiAoaGFuZGxlcnNbaV0uc2NvcGUgPT09IHNjb3BlKSBoYW5kbGVycy5zcGxpY2UoaSwgMSk7ZWxzZSBpKys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIOWmguaenHNjb3Bl6KKr5Yig6Zmk77yM5bCGc2NvcGXph43nva7kuLphbGxcblxuXG4gIGlmIChnZXRTY29wZSgpID09PSBzY29wZSkgc2V0U2NvcGUobmV3U2NvcGUgfHwgJ2FsbCcpO1xufSAvLyDmuIXpmaTkv67ppbDplK5cblxuXG5mdW5jdGlvbiBjbGVhck1vZGlmaWVyKGV2ZW50KSB7XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlO1xuXG4gIHZhciBpID0gX2Rvd25LZXlzLmluZGV4T2Yoa2V5KTsgLy8g5LuO5YiX6KGo5Lit5riF6Zmk5oyJ5Y6L6L+H55qE6ZSuXG5cblxuICBpZiAoaSA+PSAwKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZShpLCAxKTtcbiAgfSAvLyDnibnmrorlpITnkIYgY21tYW5kIOmUru+8jOWcqCBjbW1hbmQg57uE5ZCI5b+r5o236ZSuIGtleXVwIOWPquaJp+ihjOS4gOasoeeahOmXrumimFxuXG5cbiAgaWYgKGV2ZW50LmtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ21ldGEnKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZSgwLCBfZG93bktleXMubGVuZ3RoKTtcbiAgfSAvLyDkv67ppbDplK4gc2hpZnRLZXkgYWx0S2V5IGN0cmxLZXkgKGNvbW1hbmR8fG1ldGFLZXkpIOa4hemZpFxuXG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gZmFsc2U7IC8vIOWwhuS/rumlsOmUrumHjee9ruS4umZhbHNlXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVuYmluZChrZXlzSW5mbykge1xuICAvLyB1bmJpbmQoKSwgdW5iaW5kIGFsbCBrZXlzXG4gIGlmICgha2V5c0luZm8pIHtcbiAgICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGRlbGV0ZSBfaGFuZGxlcnNba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXNJbmZvKSkge1xuICAgIC8vIHN1cHBvcnQgbGlrZSA6IHVuYmluZChbe2tleTogJ2N0cmwrYScsIHNjb3BlOiAnczEnfSwge2tleTogJ2N0cmwtYScsIHNjb3BlOiAnczInLCBzcGxpdEtleTogJy0nfV0pXG4gICAga2V5c0luZm8uZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgaWYgKGluZm8ua2V5KSBlYWNoVW5iaW5kKGluZm8pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgdW5iaW5kKHtrZXk6ICdjdHJsK2EsIGN0cmwrYicsIHNjb3BlOidhYmMnfSlcbiAgICBpZiAoa2V5c0luZm8ua2V5KSBlYWNoVW5iaW5kKGtleXNJbmZvKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBvbGQgbWV0aG9kXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBzY29wZSA9IGFyZ3NbMF0sXG4gICAgICAgIG1ldGhvZCA9IGFyZ3NbMV07XG5cbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtZXRob2QgPSBzY29wZTtcbiAgICAgIHNjb3BlID0gJyc7XG4gICAgfVxuXG4gICAgZWFjaFVuYmluZCh7XG4gICAgICBrZXk6IGtleXNJbmZvLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBzcGxpdEtleTogJysnXG4gICAgfSk7XG4gIH1cbn0gLy8g6Kej6Zmk57uR5a6a5p+Q5Liq6IyD5Zu055qE5b+r5o236ZSuXG5cblxudmFyIGVhY2hVbmJpbmQgPSBmdW5jdGlvbiBlYWNoVW5iaW5kKF9yZWYpIHtcbiAgdmFyIGtleSA9IF9yZWYua2V5LFxuICAgICAgc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgbWV0aG9kID0gX3JlZi5tZXRob2QsXG4gICAgICBfcmVmJHNwbGl0S2V5ID0gX3JlZi5zcGxpdEtleSxcbiAgICAgIHNwbGl0S2V5ID0gX3JlZiRzcGxpdEtleSA9PT0gdm9pZCAwID8gJysnIDogX3JlZiRzcGxpdEtleTtcbiAgdmFyIG11bHRpcGxlS2V5cyA9IGdldEtleXMoa2V5KTtcbiAgbXVsdGlwbGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbktleSkge1xuICAgIHZhciB1bmJpbmRLZXlzID0gb3JpZ2luS2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICB2YXIgbGVuID0gdW5iaW5kS2V5cy5sZW5ndGg7XG4gICAgdmFyIGxhc3RLZXkgPSB1bmJpbmRLZXlzW2xlbiAtIDFdO1xuICAgIHZhciBrZXlDb2RlID0gbGFzdEtleSA9PT0gJyonID8gJyonIDogY29kZShsYXN0S2V5KTtcbiAgICBpZiAoIV9oYW5kbGVyc1trZXlDb2RlXSkgcmV0dXJuOyAvLyDliKTmlq3mmK/lkKbkvKDlhaXojIPlm7TvvIzmsqHmnInlsLHojrflj5bojIPlm7RcblxuICAgIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICB2YXIgbW9kcyA9IGxlbiA+IDEgPyBnZXRNb2RzKF9tb2RpZmllciwgdW5iaW5kS2V5cykgOiBbXTtcbiAgICBfaGFuZGxlcnNba2V5Q29kZV0gPSBfaGFuZGxlcnNba2V5Q29kZV0ubWFwKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgIC8vIOmAmui/h+WHveaVsOWIpOaWre+8jOaYr+WQpuino+mZpOe7keWumu+8jOWHveaVsOebuOetieebtOaOpei/lOWbnlxuICAgICAgdmFyIGlzTWF0Y2hpbmdNZXRob2QgPSBtZXRob2QgPyByZWNvcmQubWV0aG9kID09PSBtZXRob2QgOiB0cnVlO1xuXG4gICAgICBpZiAoaXNNYXRjaGluZ01ldGhvZCAmJiByZWNvcmQuc2NvcGUgPT09IHNjb3BlICYmIGNvbXBhcmVBcnJheShyZWNvcmQubW9kcywgbW9kcykpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH0pO1xuICB9KTtcbn07IC8vIOWvueebkeWQrOWvueW6lOW/q+aNt+mUrueahOWbnuiwg+WHveaVsOi/m+ihjOWkhOeQhlxuXG5cbmZ1bmN0aW9uIGV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlciwgc2NvcGUpIHtcbiAgdmFyIG1vZGlmaWVyc01hdGNoOyAvLyDnnIvlroPmmK/lkKblnKjlvZPliY3ojIPlm7RcblxuICBpZiAoaGFuZGxlci5zY29wZSA9PT0gc2NvcGUgfHwgaGFuZGxlci5zY29wZSA9PT0gJ2FsbCcpIHtcbiAgICAvLyDmo4Dmn6XmmK/lkKbljLnphY3kv67ppbDnrKbvvIjlpoLmnpzmnInov5Tlm550cnVl77yJXG4gICAgbW9kaWZpZXJzTWF0Y2ggPSBoYW5kbGVyLm1vZHMubGVuZ3RoID4gMDtcblxuICAgIGZvciAodmFyIHkgaW4gX21vZHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIHkpKSB7XG4gICAgICAgIGlmICghX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID4gLTEgfHwgX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID09PSAtMSkge1xuICAgICAgICAgIG1vZGlmaWVyc01hdGNoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIOiwg+eUqOWkhOeQhueoi+W6j++8jOWmguaenOaYr+S/rumlsOmUruS4jeWBmuWkhOeQhlxuXG5cbiAgICBpZiAoaGFuZGxlci5tb2RzLmxlbmd0aCA9PT0gMCAmJiAhX21vZHNbMTZdICYmICFfbW9kc1sxOF0gJiYgIV9tb2RzWzE3XSAmJiAhX21vZHNbOTFdIHx8IG1vZGlmaWVyc01hdGNoIHx8IGhhbmRsZXIuc2hvcnRjdXQgPT09ICcqJykge1xuICAgICAgaWYgKGhhbmRsZXIubWV0aG9kKGV2ZW50LCBoYW5kbGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChldmVudC5jYW5jZWxCdWJibGUpIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWkhOeQhmtleWRvd27kuovku7ZcblxuXG5mdW5jdGlvbiBkaXNwYXRjaChldmVudCkge1xuICB2YXIgYXN0ZXJpc2sgPSBfaGFuZGxlcnNbJyonXTtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7IC8vIOihqOWNleaOp+S7tui/h+a7pCDpu5jorqTooajljZXmjqfku7bkuI3op6blj5Hlv6vmjbfplK5cblxuICBpZiAoIWhvdGtleXMuZmlsdGVyLmNhbGwodGhpcywgZXZlbnQpKSByZXR1cm47IC8vIEdlY2tvKEZpcmVmb3gp55qEY29tbWFuZOmUruWAvDIyNO+8jOWcqFdlYmtpdChDaHJvbWUp5Lit5L+d5oyB5LiA6Ie0XG4gIC8vIFdlYmtpdOW3puWPsyBjb21tYW5kIOmUruWAvOS4jeS4gOagt1xuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcbiAgLyoqXG4gICAqIENvbGxlY3QgYm91bmQga2V5c1xuICAgKiBJZiBhbiBJbnB1dCBNZXRob2QgRWRpdG9yIGlzIHByb2Nlc3Npbmcga2V5IGlucHV0IGFuZCB0aGUgZXZlbnQgaXMga2V5ZG93biwgcmV0dXJuIDIyOS5cbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjUwNDM5MzQvaXMtaXQtb2stdG8taWdub3JlLWtleWRvd24tZXZlbnRzLXdpdGgta2V5Y29kZS0yMjlcbiAgICogaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LWRvbS8yMDEwSnVsU2VwL2F0dC0wMTgyL2tleUNvZGUtc3BlYy5odG1sXG4gICAqL1xuXG4gIGlmIChfZG93bktleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJiBrZXkgIT09IDIyOSkgX2Rvd25LZXlzLnB1c2goa2V5KTtcbiAgLyoqXG4gICAqIEplc3QgdGVzdCBjYXNlcyBhcmUgcmVxdWlyZWQuXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICovXG5cbiAgWydjdHJsS2V5JywgJ2FsdEtleScsICdzaGlmdEtleScsICdtZXRhS2V5J10uZm9yRWFjaChmdW5jdGlvbiAoa2V5TmFtZSkge1xuICAgIHZhciBrZXlOdW0gPSBtb2RpZmllck1hcFtrZXlOYW1lXTtcblxuICAgIGlmIChldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goa2V5TnVtKTtcbiAgICB9IGVsc2UgaWYgKCFldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID4gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5zcGxpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSwgMSk7XG4gICAgfSBlbHNlIGlmIChrZXlOYW1lID09PSAnbWV0YUtleScgJiYgZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmxlbmd0aCA9PT0gMykge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXggaWYgQ29tbWFuZCBpcyBwcmVzc2VkOlxuICAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICovXG4gICAgICBpZiAoIShldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSkpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gX2Rvd25LZXlzLnNsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gdHJ1ZTsgLy8g5bCG54m55q6K5a2X56ym55qEa2V55rOo5YaM5YiwIGhvdGtleXMg5LiKXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFzdGVyaXNrKSByZXR1cm47XG4gIH0gLy8g5bCGIG1vZGlmaWVyTWFwIOmHjOmdoueahOS/rumlsOmUrue7keWumuWIsCBldmVudCDkuK1cblxuXG4gIGZvciAodmFyIGUgaW4gX21vZHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCBlKSkge1xuICAgICAgX21vZHNbZV0gPSBldmVudFttb2RpZmllck1hcFtlXV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vamF5d2NqbG92ZS9ob3RrZXlzL3B1bGwvMTI5XG4gICAqIFRoaXMgc29sdmVzIHRoZSBpc3N1ZSBpbiBGaXJlZm94IG9uIFdpbmRvd3Mgd2hlcmUgaG90a2V5cyBjb3JyZXNwb25kaW5nIHRvIHNwZWNpYWwgY2hhcmFjdGVycyB3b3VsZCBub3QgdHJpZ2dlci5cbiAgICogQW4gZXhhbXBsZSBvZiB0aGlzIGlzIGN0cmwrYWx0K20gb24gYSBTd2VkaXNoIGtleWJvYXJkIHdoaWNoIGlzIHVzZWQgdG8gdHlwZSDOvC5cbiAgICogQnJvd3NlciBzdXBwb3J0OiBodHRwczovL2Nhbml1c2UuY29tLyNmZWF0PWtleWJvYXJkZXZlbnQtZ2V0bW9kaWZpZXJzdGF0ZVxuICAgKi9cblxuXG4gIGlmIChldmVudC5nZXRNb2RpZmllclN0YXRlICYmICEoZXZlbnQuYWx0S2V5ICYmICFldmVudC5jdHJsS2V5KSAmJiBldmVudC5nZXRNb2RpZmllclN0YXRlKCdBbHRHcmFwaCcpKSB7XG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE3KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE3KTtcbiAgICB9XG5cbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTgpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTgpO1xuICAgIH1cblxuICAgIF9tb2RzWzE3XSA9IHRydWU7XG4gICAgX21vZHNbMThdID0gdHJ1ZTtcbiAgfSAvLyDojrflj5bojIPlm7Qg6buY6K6k5Li6IGBhbGxgXG5cblxuICB2YXIgc2NvcGUgPSBnZXRTY29wZSgpOyAvLyDlr7nku7vkvZXlv6vmjbfplK7pg73pnIDopoHlgZrnmoTlpITnkIZcblxuICBpZiAoYXN0ZXJpc2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzdGVyaXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXN0ZXJpc2tbaV0uc2NvcGUgPT09IHNjb3BlICYmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgYXN0ZXJpc2tbaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGFzdGVyaXNrW2ldLmtleXVwKSkge1xuICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIGFzdGVyaXNrW2ldLCBzY29wZSk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGtleSDkuI3lnKggX2hhbmRsZXJzIOS4rei/lOWbnlxuXG5cbiAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIHJldHVybjtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgX2hhbmRsZXJzW2tleV0ubGVuZ3RoOyBfaSsrKSB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXl1cCkge1xuICAgICAgaWYgKF9oYW5kbGVyc1trZXldW19pXS5rZXkpIHtcbiAgICAgICAgdmFyIHJlY29yZCA9IF9oYW5kbGVyc1trZXldW19pXTtcbiAgICAgICAgdmFyIHNwbGl0S2V5ID0gcmVjb3JkLnNwbGl0S2V5O1xuICAgICAgICB2YXIga2V5U2hvcnRjdXQgPSByZWNvcmQua2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICAgICAgdmFyIF9kb3duS2V5c0N1cnJlbnQgPSBbXTsgLy8g6K6w5b2V5b2T5YmN5oyJ6ZSu6ZSu5YC8XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBrZXlTaG9ydGN1dC5sZW5ndGg7IGErKykge1xuICAgICAgICAgIF9kb3duS2V5c0N1cnJlbnQucHVzaChjb2RlKGtleVNob3J0Y3V0W2FdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2Rvd25LZXlzQ3VycmVudC5zb3J0KCkuam9pbignJykgPT09IF9kb3duS2V5cy5zb3J0KCkuam9pbignJykpIHtcbiAgICAgICAgICAvLyDmib7liLDlpITnkIblhoXlrrlcbiAgICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIHJlY29yZCwgc2NvcGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWIpOaWrSBlbGVtZW50IOaYr+WQpuW3sue7j+e7keWumuS6i+S7tlxuXG5cbmZ1bmN0aW9uIGlzRWxlbWVudEJpbmQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudEhhc0JpbmRFdmVudC5pbmRleE9mKGVsZW1lbnQpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGhvdGtleXMoa2V5LCBvcHRpb24sIG1ldGhvZCkge1xuICBfZG93bktleXMgPSBbXTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKGtleSk7IC8vIOmcgOimgeWkhOeQhueahOW/q+aNt+mUruWIl+ihqFxuXG4gIHZhciBtb2RzID0gW107XG4gIHZhciBzY29wZSA9ICdhbGwnOyAvLyBzY29wZem7mOiupOS4umFsbO+8jOaJgOacieiMg+WbtOmDveacieaViFxuXG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQ7IC8vIOW/q+aNt+mUruS6i+S7tue7keWumuiKgueCuVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIGtleXVwID0gZmFsc2U7XG4gIHZhciBrZXlkb3duID0gdHJ1ZTtcbiAgdmFyIHNwbGl0S2V5ID0gJysnOyAvLyDlr7nkuLrorr7lrprojIPlm7TnmoTliKTmlq1cblxuICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG1ldGhvZCA9IG9wdGlvbjtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob3B0aW9uKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBpZiAob3B0aW9uLnNjb3BlKSBzY29wZSA9IG9wdGlvbi5zY29wZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5lbGVtZW50KSBlbGVtZW50ID0gb3B0aW9uLmVsZW1lbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5dXApIGtleXVwID0gb3B0aW9uLmtleXVwOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleWRvd24gIT09IHVuZGVmaW5lZCkga2V5ZG93biA9IG9wdGlvbi5rZXlkb3duOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbi5zcGxpdEtleSA9PT0gJ3N0cmluZycpIHNwbGl0S2V5ID0gb3B0aW9uLnNwbGl0S2V5OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHNjb3BlID0gb3B0aW9uOyAvLyDlr7nkuo7mr4/kuKrlv6vmjbfplK7ov5vooYzlpITnkIZcblxuICBmb3IgKDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldLnNwbGl0KHNwbGl0S2V5KTsgLy8g5oyJ6ZSu5YiX6KGoXG5cbiAgICBtb2RzID0gW107IC8vIOWmguaenOaYr+e7hOWQiOW/q+aNt+mUruWPluW+l+e7hOWQiOW/q+aNt+mUrlxuXG4gICAgaWYgKGtleS5sZW5ndGggPiAxKSBtb2RzID0gZ2V0TW9kcyhfbW9kaWZpZXIsIGtleSk7IC8vIOWwhumdnuS/rumlsOmUrui9rOWMluS4uumUrueggVxuXG4gICAga2V5ID0ga2V5W2tleS5sZW5ndGggLSAxXTtcbiAgICBrZXkgPSBrZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUoa2V5KTsgLy8gKuihqOekuuWMuemFjeaJgOacieW/q+aNt+mUrlxuICAgIC8vIOWIpOaWrWtleeaYr+WQpuWcqF9oYW5kbGVyc+S4re+8jOS4jeWcqOWwsei1i+S4gOS4quepuuaVsOe7hFxuXG4gICAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIF9oYW5kbGVyc1trZXldID0gW107XG5cbiAgICBfaGFuZGxlcnNba2V5XS5wdXNoKHtcbiAgICAgIGtleXVwOiBrZXl1cCxcbiAgICAgIGtleWRvd246IGtleWRvd24sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtb2RzOiBtb2RzLFxuICAgICAgc2hvcnRjdXQ6IGtleXNbaV0sXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGtleToga2V5c1tpXSxcbiAgICAgIHNwbGl0S2V5OiBzcGxpdEtleVxuICAgIH0pO1xuICB9IC8vIOWcqOWFqOWxgGRvY3VtZW505LiK6K6+572u5b+r5o236ZSuXG5cblxuICBpZiAodHlwZW9mIGVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmICFpc0VsZW1lbnRCaW5kKGVsZW1lbnQpICYmIHdpbmRvdykge1xuICAgIGVsZW1lbnRIYXNCaW5kRXZlbnQucHVzaChlbGVtZW50KTtcbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlKTtcbiAgICB9KTtcbiAgICBhZGRFdmVudCh3aW5kb3csICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF9kb3duS2V5cyA9IFtdO1xuICAgIH0pO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXl1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlKTtcbiAgICAgIGNsZWFyTW9kaWZpZXIoZSk7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIF9hcGkgPSB7XG4gIHNldFNjb3BlOiBzZXRTY29wZSxcbiAgZ2V0U2NvcGU6IGdldFNjb3BlLFxuICBkZWxldGVTY29wZTogZGVsZXRlU2NvcGUsXG4gIGdldFByZXNzZWRLZXlDb2RlczogZ2V0UHJlc3NlZEtleUNvZGVzLFxuICBpc1ByZXNzZWQ6IGlzUHJlc3NlZCxcbiAgZmlsdGVyOiBmaWx0ZXIsXG4gIHVuYmluZDogdW5iaW5kXG59O1xuXG5mb3IgKHZhciBhIGluIF9hcGkpIHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfYXBpLCBhKSkge1xuICAgIGhvdGtleXNbYV0gPSBfYXBpW2FdO1xuICB9XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgX2hvdGtleXMgPSB3aW5kb3cuaG90a2V5cztcblxuICBob3RrZXlzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoZGVlcCkge1xuICAgIGlmIChkZWVwICYmIHdpbmRvdy5ob3RrZXlzID09PSBob3RrZXlzKSB7XG4gICAgICB3aW5kb3cuaG90a2V5cyA9IF9ob3RrZXlzO1xuICAgIH1cblxuICAgIHJldHVybiBob3RrZXlzO1xuICB9O1xuXG4gIHdpbmRvdy5ob3RrZXlzID0gaG90a2V5cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaG90a2V5cztcbiIsImltcG9ydCBob3RrZXlzIGZyb20gJ2hvdGtleXMtanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIGlzSG90a2V5UHJlc3NlZCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgdmVyc2lvbiA0LlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlSXNIb3RrZXlQcmVzc2VkKCkge1xuICByZXR1cm4gaG90a2V5cy5pc1ByZXNzZWQ7XG59XG5cbmhvdGtleXMuZmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciB0YWdGaWx0ZXIgPSBmdW5jdGlvbiB0YWdGaWx0ZXIoX3JlZiwgZW5hYmxlT25UYWdzKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgdmFyIHRhcmdldFRhZ05hbWUgPSB0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWU7XG4gIHJldHVybiBCb29sZWFuKHRhcmdldFRhZ05hbWUgJiYgZW5hYmxlT25UYWdzICYmIGVuYWJsZU9uVGFncy5pbmNsdWRlcyh0YXJnZXRUYWdOYW1lKSk7XG59O1xuXG52YXIgaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCA9IGZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoZXYpIHtcbiAgcmV0dXJuIHRhZ0ZpbHRlcihldiwgWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXSk7XG59O1xuXG5mdW5jdGlvbiB1c2VIb3RrZXlzKGtleXMsIGNhbGxiYWNrLCBvcHRpb25zLCBkZXBzKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBkZXBzID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIF9yZWYyID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgIGVuYWJsZU9uVGFncyA9IF9yZWYyLmVuYWJsZU9uVGFncyxcbiAgICAgIGZpbHRlciA9IF9yZWYyLmZpbHRlcixcbiAgICAgIGtleXVwID0gX3JlZjIua2V5dXAsXG4gICAgICBrZXlkb3duID0gX3JlZjIua2V5ZG93bixcbiAgICAgIF9yZWYyJGZpbHRlclByZXZlbnREZSA9IF9yZWYyLmZpbHRlclByZXZlbnREZWZhdWx0LFxuICAgICAgZmlsdGVyUHJldmVudERlZmF1bHQgPSBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUsXG4gICAgICBfcmVmMiRlbmFibGVkID0gX3JlZjIuZW5hYmxlZCxcbiAgICAgIGVuYWJsZWQgPSBfcmVmMiRlbmFibGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZW5hYmxlZCxcbiAgICAgIF9yZWYyJGVuYWJsZU9uQ29udGVudCA9IF9yZWYyLmVuYWJsZU9uQ29udGVudEVkaXRhYmxlLFxuICAgICAgZW5hYmxlT25Db250ZW50RWRpdGFibGUgPSBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZW5hYmxlT25Db250ZW50O1xuXG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7IC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIGlmIHRoZSBicm93c2VycyBkZWZhdWx0IGJlaGF2aW9yIGlzIHByZXZlbnRlZC5cblxuICB2YXIgbWVtb2lzZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpIHtcbiAgICB2YXIgX2tleWJvYXJkRXZlbnQkdGFyZ2V0O1xuXG4gICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKGtleWJvYXJkRXZlbnQpKSB7XG4gICAgICByZXR1cm4gIWZpbHRlclByZXZlbnREZWZhdWx0O1xuICAgIH0gLy8gQ2hlY2sgd2hldGhlciB0aGUgaG90a2V5cyB3YXMgdHJpZ2dlcmVkIGluc2lkZSBhbiBpbnB1dCBhbmQgdGhhdCBpbnB1dCBpcyBlbmFibGVkIG9yIGlmIGl0IHdhcyB0cmlnZ2VyZWQgYnkgYSBjb250ZW50IGVkaXRhYmxlIHRhZyBhbmQgaXQgaXMgZW5hYmxlZC5cblxuXG4gICAgaWYgKGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoa2V5Ym9hcmRFdmVudCkgJiYgIXRhZ0ZpbHRlcihrZXlib2FyZEV2ZW50LCBlbmFibGVPblRhZ3MpIHx8IChfa2V5Ym9hcmRFdmVudCR0YXJnZXQgPSBrZXlib2FyZEV2ZW50LnRhcmdldCkgIT0gbnVsbCAmJiBfa2V5Ym9hcmRFdmVudCR0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgJiYgIWVuYWJsZU9uQ29udGVudEVkaXRhYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IG51bGwgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhbGxiYWNrKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIGRlcHMgPyBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0uY29uY2F0KGRlcHMpIDogW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHRoaXMgY2FzZSBrZXlkb3duIGlzIGxpa2VseSB1bmRlZmluZWQsIHNvIHdlIHNldCBpdCB0byBmYWxzZSwgc2luY2UgaG90a2V5cyBuZWVkcyB0aGUgYGtleWRvd25gIGtleSB0byBoYXZlIGEgdmFsdWUuXG5cblxuICAgIGlmIChrZXl1cCAmJiBrZXlkb3duICE9PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmtleWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBob3RrZXlzKGtleXMsIG9wdGlvbnMgfHwge30sIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW21lbW9pc2VkQ2FsbGJhY2ssIGtleXMsIGVuYWJsZWRdKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleXMuaXNQcmVzc2VkO1xuXG5leHBvcnQgeyBpc0hvdGtleVByZXNzZWQsIHVzZUhvdGtleXMsIHVzZUlzSG90a2V5UHJlc3NlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=
|
|
12
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/OWE0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/MzJhYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLm1vZHVsZS5jc3M/Y2Q0NiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzPzA4NDEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC5tb2R1bGUuY3NzPzFmMTEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gubW9kdWxlLmNzcz80ZWViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gubW9kdWxlLmNzcz8yM2ViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ZTE4OCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLm1vZHVsZS5jc3M/MGVkZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzPzI3YjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9GaWxlSW5wdXQubW9kdWxlLmNzcz8xMjk5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzcz83YWJmIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9JY29uLm1vZHVsZS5jc3M/OWI5MyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/ZDI4ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz9jYzM3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzPzk1YTciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/NDY0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8zNzA5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/OTZkMiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLm1vZHVsZS5jc3M/NTA0OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz8wNDI3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8yMWM1Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9va3MvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9va3MvdXNlT3V0c2lkZUNsaWNrLnRzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ob3RrZXlzLWpzL2Rpc3QvaG90a2V5cy5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWhvdGtleXMtaG9vay9kaXN0L3JlYWN0LWhvdGtleXMtaG9vay5lc20uanMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJyZXF1aXJlIiwiaXNBcnJheSIsIkFycmF5IiwiY2MiLCJvYmoiLCJvdXQiLCJ0bXAiLCJrIiwibGVuZ3RoIiwiZGVmYXVsdCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiYnV0dG9uQmFkZ2UiLCJvbkNsaWNrIiwiY29udGFpbmVyUmVmIiwiZGlzYWJsZWQiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoSG9yaXpvbnRhbGx5Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsImFsaWduIiwic2l6ZSIsInR5cGUiLCJyZWYiLCJjb250YWluZXIiLCJsZWZ0T2Zmc2V0IiwiaW5jbHVkZXMiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiQ29tcG9uZW50IiwicHJvcHMiLCJsYWJlbCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwiZSIsInRhcmdldCIsIkxhYmVsIiwiaW5wdXRSZWYiLCJpbnB1dCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImRpcmVjdGlvbiIsImNvbG9yUGlja2VyIiwibWFwIiwiY29sb3IiLCJDb2xvclN3YXRjaCIsImlzU2VsZWN0ZWQiLCJjb2xvclN3YXRjaCIsInNlbGVjdGVkIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwiYnV0dG9uIiwidXNlSG90a2V5cyIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm92ZXJsYXkiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpZCIsImxheW91dCIsInBsYWNlbWVudCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwic3JjIiwiYWx0IiwiaWNvbiIsImNyb3NzT3JpZ2luIiwiYmFkZ2VDb250ZW50IiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0IiwiSWNvbiIsIkJ1dHRvbkJhZGdlIiwiZW1wdHlJbWFnZSIsInNyY1dpZHRoIiwic3JjSGVpZ2h0IiwiYW5pbWF0aW9uIiwidXNlU3RhdGUiLCJpc0xvYWRlZCIsInNldElzTG9hZGVkIiwiaW1hZ2VSZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJpbWFnZSIsIkltYWdlIiwib25sb2FkIiwiY3VycmVudCIsInNldEF0dHJpYnV0ZSIsImhhc092ZXJsYXkiLCJmYWRlSW4iLCJzY2FsZVVwIiwid2lkdGgiLCJoZWlnaHQiLCJoZWFkZXJBY3Rpb25zIiwiaGVhZGVyTGFiZWwiLCJsaXN0IiwiYWN0aXZlIiwibGlzdFZpZXdJdGVtIiwiQnV0dG9uIiwiQnV0dG9uTGluayIsImFzIiwiZm9vdGVyIiwibWVudSIsIm9wZW4iLCJzY3JvbGxDb250YWluZXIiLCJmb3J3YXJkUmVmIiwibWVudUNvbnRhaW5lciIsImlzQWN0aXZlIiwibWVudUl0ZW0iLCJtZW51TGlua0l0ZW0iLCJpc0ZpeGVkIiwib25CbHVyIiwib25LZXlEb3duIiwiaW5wdXRFbGVtZW50IiwidGV4dElucHV0IiwidG9hc3QiLCJ0b2FzdENvbnRhaW5lciIsInBvc3RlciIsIm11dGVkIiwibG9vcCIsImF1dG9QbGF5IiwidmlkZW8iLCJwbGF5c0lubGluZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJjYWxsYmFjayIsImhhbmRsZUNsaWNrIiwiZXZlbnQiLCJjb250YWlucyIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJpc2ZmIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJpbmRleE9mIiwiYWRkRXZlbnQiLCJtZXRob2QiLCJhdHRhY2hFdmVudCIsImNvbmNhdCIsIndpbmRvdyIsImdldE1vZHMiLCJtb2RpZmllciIsIm1vZHMiLCJzbGljZSIsImdldEtleXMiLCJrZXlzIiwicmVwbGFjZSIsInNwbGl0IiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInNwbGljZSIsIl9rZXlNYXAiLCJiYWNrc3BhY2UiLCJ0YWIiLCJjbGVhciIsImVudGVyIiwicmV0dXJuIiwiZXNjIiwiZXNjYXBlIiwic3BhY2UiLCJsZWZ0IiwidXAiLCJyaWdodCIsImRvd24iLCJkZWwiLCJkZWxldGUiLCJpbnMiLCJpbnNlcnQiLCJob21lIiwiZW5kIiwicGFnZXVwIiwicGFnZWRvd24iLCJjYXBzbG9jayIsIm51bV8wIiwibnVtXzEiLCJudW1fMiIsIm51bV8zIiwibnVtXzQiLCJudW1fNSIsIm51bV82IiwibnVtXzciLCJudW1fOCIsIm51bV85IiwibnVtX211bHRpcGx5IiwibnVtX2FkZCIsIm51bV9lbnRlciIsIm51bV9zdWJ0cmFjdCIsIm51bV9kZWNpbWFsIiwibnVtX2RpdmlkZSIsIiciLCJfbW9kaWZpZXIiLCJzaGlmdCIsIm9wdGlvbiIsImN0cmwiLCJjb250cm9sIiwiY21kIiwiY29tbWFuZCIsIm1vZGlmaWVyTWFwIiwiMTYiLCIxOCIsIjE3IiwiOTEiLCJzaGlmdEtleSIsImN0cmxLZXkiLCJhbHRLZXkiLCJtZXRhS2V5IiwiX21vZHMiLCJfaGFuZGxlcnMiLCJfZG93bktleXMiLCJfc2NvcGUiLCJlbGVtZW50SGFzQmluZEV2ZW50IiwiY29kZSIsIngiLCJ0b1VwcGVyQ2FzZSIsImNoYXJDb2RlQXQiLCJzZXRTY29wZSIsInNjb3BlIiwiZ2V0U2NvcGUiLCJlYWNoVW5iaW5kIiwiX3JlZiIsIl9yZWYkc3BsaXRLZXkiLCJzcGxpdEtleSIsImZvckVhY2giLCJvcmlnaW5LZXkiLCJ1bmJpbmRLZXlzIiwibGVuIiwibGFzdEtleSIsImtleUNvZGUiLCJyZWNvcmQiLCJhMSIsImEyIiwiYXJyMSIsImFycjIiLCJpc0luZGV4IiwiY29tcGFyZUFycmF5IiwiZXZlbnRIYW5kbGVyIiwiaGFuZGxlciIsIm1vZGlmaWVyc01hdGNoIiwieSIsInNob3J0Y3V0IiwicHJldmVudERlZmF1bHQiLCJyZXR1cm5WYWx1ZSIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsImRpc3BhdGNoIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImZpbHRlciIsInRoaXMiLCJwdXNoIiwia2V5TmFtZSIsImtleU51bSIsImdldE1vZGlmaWVyU3RhdGUiLCJrZXlkb3duIiwia2V5dXAiLCJfaSIsImtleVNob3J0Y3V0IiwiX2Rvd25LZXlzQ3VycmVudCIsImEiLCJzb3J0Iiwiam9pbiIsImVsZW1lbnQiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsImlzRWxlbWVudEJpbmQiLCJjbGVhck1vZGlmaWVyIiwiX2FwaSIsImRlbGV0ZVNjb3BlIiwibmV3U2NvcGUiLCJoYW5kbGVycyIsImdldFByZXNzZWRLZXlDb2RlcyIsImlzUHJlc3NlZCIsInNyY0VsZW1lbnQiLCJ0YWdOYW1lIiwiZmxhZyIsImlzQ29udGVudEVkaXRhYmxlIiwicmVhZE9ubHkiLCJ1bmJpbmQiLCJrZXlzSW5mbyIsImluZm8iLCJfbGVuIiwiYXJndW1lbnRzIiwiYXJncyIsIl9rZXkiLCJfaG90a2V5cyIsIm5vQ29uZmxpY3QiLCJkZWVwIiwidXNlSXNIb3RrZXlQcmVzc2VkIiwidGFnRmlsdGVyIiwiZW5hYmxlT25UYWdzIiwidGFyZ2V0VGFnTmFtZSIsIkJvb2xlYW4iLCJvcHRpb25zIiwiZGVwcyIsIl9yZWYyIiwiX3JlZjIkZmlsdGVyUHJldmVudERlIiwiZmlsdGVyUHJldmVudERlZmF1bHQiLCJfcmVmMiRlbmFibGVkIiwiZW5hYmxlZCIsIl9yZWYyJGVuYWJsZU9uQ29udGVudCIsImVuYWJsZU9uQ29udGVudEVkaXRhYmxlIiwibWVtb2lzZWRDYWxsYmFjayIsImtleWJvYXJkRXZlbnQiLCJob3RrZXlzRXZlbnQiLCJfa2V5Ym9hcmRFdmVudCR0YXJnZXQiLCJhY3RpdmVFbGVtZW50IiwiaXNIb3RrZXlQcmVzc2VkIl0sIm1hcHBpbmdzIjoiNkRBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBMERmLE9BckRBRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JV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QixDQUFDLFFBQVMsV0FBWSxhQStCY2QsRUFBVWMsRUFBZWIsSUFBbUUsT0FBakRlLEVBQXdCRixFQUFjdlMsU0FBbUJ5UyxFQUFzQjdCLG9CQUFzQnlCLEtBSW5MLE9BQWhCdFQsRUFBSTBGLFNBQW9CNkMsU0FBU29MLGdCQUFrQjNULEVBQUkwRixXQUN6RHlDLEVBQVNxTCxFQUFlQyxJQUNqQixLQUlSVixFQUFPLENBQUMvUyxFQUFLMlMsRUFBYzFDLEdBQVEvRyxPQUFPNkosR0FBUSxDQUFDL1MsRUFBSzJTLEVBQWMxQyxJQWdCekUsT0FmQSxxQkFBVSxXQUNSLEdBQUttRCxFQVVMLE9BTEk1QyxJQUFxQixJQUFaRCxJQUNYdUMsRUFBUXZDLFNBQVUsR0FHcEIsRUFBUTlHLEVBQU1xSixHQUFXLEdBQUlTLEdBQ3RCLFdBQ0wsT0FBTyxFQUFReEIsT0FBT3RJLEVBQU04SixNQUU3QixDQUFDQSxFQUFrQjlKLEVBQU0ySixJQUNyQnBULEVBR1QsSUFBSTRULEVBQWtCLEVBQVFuQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJ2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2Mob2JqKSB7XG4gIHZhciBvdXQgPSBcIlwiXG5cbiAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIikgcmV0dXJuIG9iaiB8fCBcIlwiXG5cbiAgaWYgKGlzQXJyYXkob2JqKSlcbiAgICBmb3IgKHZhciBrID0gMCwgdG1wOyBrIDwgb2JqLmxlbmd0aDsgaysrKSB7XG4gICAgICBpZiAoKHRtcCA9IGNjKG9ialtrXSkpICE9PSBcIlwiKSB7XG4gICAgICAgIG91dCArPSAob3V0ICYmIFwiIFwiKSArIHRtcFxuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspICYmIG9ialtrXSkgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsga1xuICAgIH1cblxuICByZXR1cm4gb3V0XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4vQnV0dG9uQmFkZ2VcIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMYWJlbCB9IGZyb20gXCIuL0xhYmVsXCI7XHJcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbiB9IGZyb20gXCIuL0ljb25cIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25MaW5rIH0gZnJvbSBcIi4vQnV0dG9uTGlua1wiO1xyXG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yU3dhdGNoIH0gZnJvbSBcIi4vQ29sb3JTd2F0Y2hcIjtcclxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNb2RhbCB9IGZyb20gXCIuL01vZGFsXCI7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibGlzdFZpZXdJdGVtXCI6XCJfMWZqMmFuaWVRMEpLeENBWmtTYWFwa1wifTsiLCJleHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uTGlua1wiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NoZWNrYm94XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclN3YXRjaFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbFwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25cIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmtcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JbWFnZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTWVudVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01vZGFsXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGV4dElucHV0XCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9hc3RcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9WaWRlb1wiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9ob29rc1wiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uQmFkZ2UubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBCdXR0b25CYWRnZVByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQnV0dG9uQmFkZ2UoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH06IEJ1dHRvbkJhZGdlUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuYnV0dG9uQmFkZ2UsIGNsYXNzTmFtZV0pfT57Y2hpbGRyZW59PC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFkZ2U7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcIl8xVWxZRkVHYzNkTWd0b05pbDZTT3g1XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG50eXBlIEJ1dHRvblByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIGludmVydGVkPzogYm9vbGVhbjtcclxuICByb3VuZGVkPzogYm9vbGVhbjtcclxuICBub1NoYWRvdz86IGJvb2xlYW47XHJcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcclxuICBub0JvcmRlcj86IGJvb2xlYW47XHJcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xyXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcclxuICBhdXRvRm9jdXM/OiBib29sZWFuO1xyXG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XHJcbiAgc2l6ZT86IFNpemU7XHJcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xyXG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xyXG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJsZWZ0XCIgfCBcInJpZ2h0XCI+O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQnV0dG9uKHtcclxuICBjaGlsZHJlbixcclxuICBjbGFzc05hbWUsXHJcbiAgb25DbGljayxcclxuICBjb250YWluZXJSZWYsXHJcbiAgZGlzYWJsZWQgPSBmYWxzZSxcclxuICBpbnZlcnRlZCA9IGZhbHNlLFxyXG4gIHJvdW5kZWQgPSBmYWxzZSxcclxuICBub1NoYWRvdyA9IGZhbHNlLFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIG5vQm9yZGVyID0gZmFsc2UsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXHJcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcclxuICBhdXRvRm9jdXMgPSBmYWxzZSxcclxuICBvZmZzZXRTaWRlcyA9IFtdLFxyXG4gIGFsaWduID0gXCJjZW50ZXJcIixcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICB0eXBlLFxyXG59OiBCdXR0b25Qcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxyXG4gICAgICAgIHN0eWxlc1tzaXplXSxcclxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcclxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXHJcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcclxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcclxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcclxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXHJcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXHJcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcclxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGFzc05hbWUsXHJcbiAgICAgIF0pfVxyXG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxyXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgICB0eXBlPXt0eXBlfVxyXG4gICAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgID5cclxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxyXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxyXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XHJcbiAgICAgICkgOiAoXHJcbiAgICAgICAgY2hpbGRyZW5cclxuICAgICAgKX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8xMnc1V09GM0tzYTJKQjUtWU9YeUQ3XCIsXCJsZWZ0XCI6XCJfMlRGVjcyRHJReDVKR1NoTmN1dDRFLVwiLFwic21hbGxcIjpcInVUQnJjanBIcDk2UkN3RjVVRHpmMFwiLFwibGFyZ2VcIjpcIl8xNFNTZnM1U1ZXSzdOeHVaQnFNZ3pCXCIsXCJ4bGFyZ2VcIjpcIl8xU1F1MlFXdzJhN2V3NDdXVzEyWlNnXCIsXCJpbnZlcnRlZFwiOlwiXzJoWmhoaThCZ0VfZWtRVm45ZVg5RFhcIixcInJvdW5kZWRcIjpcIlZCRE9TY1ljUW5VMmV5dGtBX1BjNlwiLFwicmlnaHRPZmZzZXRcIjpcIl8yR1RZM1htYU91OTIzTTlzRVJzNmFrXCIsXCJsZWZ0T2Zmc2V0XCI6XCJfMTVRMEdHa2dZSl9hTG0wMW5HRTVZaFwiLFwibm9TaGFkb3dcIjpcIlJld21EcWpwNm5VZUVZSEVLelRKRFwiLFwibm9Cb3JkZXJcIjpcIm5acUlVUFQ4Y1o4N0JXNHI4a3hVXCIsXCJ0cmFuc3BhcmVudFwiOlwiXzY2OWxSNHkyQUg5N0ExbHk1TVlXT1wiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiXzNpY3V0WEh3eklpb3d0N2JWYTNZaWJcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJfMmtDa3hQa3BsUDF4cWpma2Vwb3lOcFwiLFwibm9QYWRkaW5nXCI6XCJfM2tOYkNnY0ktUl9GRlEtM082VDBsYVwiLFwiY29udGVudFwiOlwiXzJiRjFBU2NFeHNrdU9wdXpkLWNEXzZcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG50eXBlIE9mZnNldFNpZGUgPSBcImxlZnRcIiB8IFwicmlnaHRcIjtcclxuXHJcbnR5cGUgQnV0dG9uTGlua1Byb3BzID1cclxuICB8IHtcclxuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcclxuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xyXG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XHJcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xyXG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcclxuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xyXG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcclxuICAgICAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xyXG4gICAgICBzaXplPzogU2l6ZTtcclxuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcclxuICAgICAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XHJcbiAgICB9XHJcbiAgfCBhbnk7XHJcblxyXG5mdW5jdGlvbiBCdXR0b25MaW5rKHtcclxuICBhczogQ29tcG9uZW50LFxyXG4gIGNoaWxkcmVuLFxyXG4gIGNsYXNzTmFtZSxcclxuICBzaXplLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBpbnZlcnRlZCA9IGZhbHNlLFxyXG4gIHJvdW5kZWQgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXHJcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcclxuICBvZmZzZXRTaWRlcyA9IFtdLFxyXG4gIGFsaWduID0gXCJjZW50ZXJcIixcclxuICAuLi5wcm9wc1xyXG59OiBCdXR0b25MaW5rUHJvcHMpIHtcclxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPENvbXBvbmVudFxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tbGlua1wiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcclxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxyXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcclxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcclxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgXSl9XHJcbiAgICAgIHsuLi5wcm9wc31cclxuICAgID5cclxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxyXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxyXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XHJcbiAgICAgICkgOiAoXHJcbiAgICAgICAgY2hpbGRyZW5cclxuICAgICAgKX1cclxuICAgIDwvQ29tcG9uZW50PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkxpbms7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfMlF1OVJhRzU1cFd5SmFUX18zX29GQVwiLFwibGVmdFwiOlwiXzNueDNnTlB6ajZMVF8xaHduUUh4T0pcIixcInNtYWxsXCI6XCJfMkx2XzZ4eDJHbDMzNUtUOUlvb2ozZ1wiLFwibWVkaXVtXCI6XCJfM0h4OHBoYXozekxxTnNlQXBOSVdaSFwiLFwibGFyZ2VcIjpcIl8yLU9FWUZvSXZsczROMkNSdVktZUpyXCIsXCJ4bGFyZ2VcIjpcIl82eEZZQVBBUHdBV2xobTBnZHRvWlJcIixcImludmVydGVkXCI6XCJfMnBFR2lLM0t1UG5FdndpT0NEZ0ZEYVwiLFwicm91bmRlZFwiOlwiXzF6eVZLc21velBSdExIRHRfajYxNE5cIixcInJpZ2h0T2Zmc2V0XCI6XCJfMXJZdnRxblp5STRScnVsQzdLR2NvdVwiLFwibGVmdE9mZnNldFwiOlwiXzNUcjdlTzRFczFCb3RoMktfc2lUQU5cIixcIm5vU2hhZG93XCI6XCJfMndaM0dJSTNvTmQ4SVg3YWdhLWFNdVwiLFwidHJhbnNwYXJlbnRcIjpcIl8xVEtncFNZbF9BMElTa0JjVDFqbHk3XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJfM3AyVFk0bm9kVml1OWp4LUx6R0NOZVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl8zZ0V3a1Jwcm5TX0lSRXUzS3ROek1EXCIsXCJub1BhZGRpbmdcIjpcIl8ySnBLSnJ1bUFUY1RUUlQ3eGlmZjlpXCIsXCJub0JvcmRlclwiOlwiXzFQM1AyNzR3b3U2bEVBODdnNnJGVjJcIixcImNvbnRlbnRcIjpcInNORHJxM2NYNkk2US1PdXVzejdUaVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vQ2hlY2tib3hcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG50eXBlIENoZWNrYm94UHJvcHMgPSB7XHJcbiAgbGFiZWw/OiBzdHJpbmc7XHJcbiAgb25DaGFuZ2U6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICBjaGVja2VkPzogYm9vbGVhbjtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgbmFtZT86IHN0cmluZztcclxuICBzaXplPzogU2l6ZTtcclxuICBhdXRvRm9jdXM/OiBib29sZWFuO1xyXG4gIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQ2hlY2tib3goe1xyXG4gIGxhYmVsLFxyXG4gIG9uQ2hhbmdlLFxyXG4gIHBsYWNlaG9sZGVyLFxyXG4gIGNoZWNrZWQsXHJcbiAgZGlzYWJsZWQsXHJcbiAgbmFtZSxcclxuICBpbmRldGVybWluYXRlLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxyXG59OiBDaGVja2JveFByb3BzKSB7XHJcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXHJcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxyXG4gICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCksXHJcbiAgICBbb25DaGFuZ2VdXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxMYWJlbCB2YWx1ZT17bGFiZWx9PlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcclxuICAgICAgICByZWY9eyhpbnB1dFJlZikgPT4ge1xyXG4gICAgICAgICAgaWYgKGlucHV0UmVmKSB7XHJcbiAgICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH19XHJcbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cclxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmlucHV0LCBzdHlsZXNbc2l6ZV1dKX1cclxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxyXG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cclxuICAgICAgICBuYW1lPXtuYW1lfVxyXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XHJcbiAgICAgIC8+XHJcbiAgICA8L0xhYmVsPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MYWJlbC5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIExhYmVsSW5wdXRQcm9wcyA9IHtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxMYWJlbEVsZW1lbnQ+O1xyXG4gIHZhbHVlOiBSZWFjdE5vZGU7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBMYWJlbCh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIHZhbHVlLCBjb250YWluZXJSZWYgfTogTGFiZWxJbnB1dFByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxsYWJlbFxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9XHJcbiAgICA+XHJcbiAgICAgIHt2YWx1ZX1cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9sYWJlbD5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMYWJlbDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8xNURic19YNUlUOXRrbUFzTVhQTlZKXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaW5wdXRcIjpcIl8xcDJobWptTTFxTlpUWklpRkhGSXh1XCIsXCJzbWFsbFwiOlwiXzFKaV9fOVUtRDVVZFcyTkpXV1VQckNcIixcIm1lZGl1bVwiOlwiXzNLSlMyRlJTMnRkOTBRcjZyMzNMMjhcIixcImxhcmdlXCI6XCJfMWo3b2RDRUVYMkRrZ2dwSVp1RjRNSVwiLFwieGxhcmdlXCI6XCJfM0tad2hVbXhCSmViMnh0azg4Z2FHV1wifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yUGlja2VyIH0gZnJvbSBcIi4vQ29sb3JQaWNrZXJcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBDb2xvclN3YXRjaCB9IGZyb20gXCIuLi9Db2xvclN3YXRjaFwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yUGlja2VyLm1vZHVsZS5jc3NcIjtcclxuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuXHJcbnR5cGUgQ29sb3JQaWNrZXJQcm9wcyA9IHtcclxuICBjb2xvcnM6IENvbG9yW107XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBkaXJlY3Rpb24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcclxuICBvblNlbGVjdDogKGNvbG9yOiBDb2xvcikgPT4gdm9pZDtcclxuICBzZWxlY3RlZENvbG9yPzogQ29sb3I7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBDb2xvclBpY2tlcih7XHJcbiAgY29sb3JzLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBvblNlbGVjdCxcclxuICBzZWxlY3RlZENvbG9yLFxyXG4gIGRpcmVjdGlvbiA9IFwidmVydGljYWxcIixcclxufTogQ29sb3JQaWNrZXJQcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2XHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29sb3JQaWNrZXIsIHN0eWxlc1tkaXJlY3Rpb25dXSl9XHJcbiAgICA+XHJcbiAgICAgIHtjb2xvcnMubWFwKChjb2xvcjogQ29sb3IpID0+IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPENvbG9yU3dhdGNoXHJcbiAgICAgICAgICAgIGtleT17Y29sb3Iua2V5fVxyXG4gICAgICAgICAgICBjb2xvcj17Y29sb3J9XHJcbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2NvbG9yID09PSBzZWxlY3RlZENvbG9yfVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvblNlbGVjdChjb2xvcil9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pfVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29sb3JQaWNrZXI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclN3YXRjaC5tb2R1bGUuY3NzXCI7XHJcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG50eXBlIENvbG9yU3dhdGNoUHJvcHMgPSB7XHJcbiAgY29sb3I6IENvbG9yO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XHJcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XHJcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBDb2xvclN3YXRjaCh7XHJcbiAgY29sb3IsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIG9uQ2xpY2ssXHJcbiAgaXNTZWxlY3RlZCA9IGZhbHNlLFxyXG59OiBDb2xvclN3YXRjaFByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxidXR0b25cclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb2xvclN3YXRjaCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLnNlbGVjdGVkXTogaXNTZWxlY3RlZCxcclxuICAgICAgICB9LFxyXG4gICAgICBdKX1cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJjb2xvci1zd2F0Y2hcIlxyXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmhleENvZGUgfX1cclxuICAgID5cclxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc3JPbmx5fT57YFNlbGVjdCAke2NvbG9yLmxhYmVsfSBjb2xvcmB9PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29sb3JTd2F0Y2g7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JTd2F0Y2hcIjpcImR2N2l1Y1RRcS1aaFVSVXVwLVB1VlwiLFwic2VsZWN0ZWRcIjpcIl8xTGJBZ3lpaUVfMXVqVzkwZC02aXV1XCIsXCJzck9ubHlcIjpcIl8xZXRrdXNsaFpWRVBOc2sxUWdoVEVvXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JQaWNrZXJcIjpcIl8yRjFPbi1TQTNtTWtoWlBGckRqV0ljXCIsXCJob3Jpem9udGFsXCI6XCJfMVdGWXlNa2tZTEw3M25fX3JQVVVidlwiLFwidmVydGljYWxcIjpcIl8xbElvYTJial90YmtRaWUwSXBFMkxuXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbFwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuLi9Nb2RhbFwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgQ29uZmlybWF0aW9uTW9kYWxQcm9wcyA9IHtcclxuICBidXR0b25zTGVmdD86IFJlYWN0RWxlbWVudFtdO1xyXG4gIGJ1dHRvbnNSaWdodD86IFJlYWN0RWxlbWVudFtdO1xyXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgaGVhZGVyOiBzdHJpbmc7XHJcbiAgaXNPcGVuOiBib29sZWFuO1xyXG4gIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcclxuICBub1NoYWRvdz86IGJvb2xlYW47XHJcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XHJcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1vZGFsKHtcclxuICBjaGlsZHJlbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgaGVhZGVyLFxyXG4gIGlzT3BlbixcclxuICBidXR0b25zTGVmdCA9IFtdLFxyXG4gIGJ1dHRvbnNSaWdodCA9IFtdLFxyXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICBub092ZXJsYXkgPSBmYWxzZSxcclxuICBub1NoYWRvdyA9IGZhbHNlLFxyXG4gIGJhc2VaSW5kZXggPSAxMDE5LFxyXG59OiBDb25maXJtYXRpb25Nb2RhbFByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxNb2RhbFxyXG4gICAgICBjb250YWluZXJSZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgaXNPcGVuPXtpc09wZW59XHJcbiAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XHJcbiAgICAgIG5vT3ZlcmxheT17bm9PdmVybGF5fVxyXG4gICAgICBub1NoYWRvdz17bm9TaGFkb3d9XHJcbiAgICAgIGJhc2VaSW5kZXg9e2Jhc2VaSW5kZXh9XHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cclxuICAgICAgICA8aDEgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxIZWFkZXJ9PntoZWFkZXJ9PC9oMT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICAgICAgc3R5bGVzLm1vZGFsQ29udGVudCxcclxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxyXG4gICAgICAgICAgXSl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zQ29udGFpbmVyfT5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc0xlZnR9PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNSaWdodH08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L01vZGFsPlxyXG4gICk7XHJcbn1cclxuXHJcbkNvbmZpcm1hdGlvbk1vZGFsLmRpc3BsYXlOYW1lID0gXCJDb25maXJtYXRpb25Nb2RhbFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29uZmlybWF0aW9uTW9kYWw7XHJcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIE1vZGFsUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGlzT3BlbjogYm9vbGVhbjtcclxuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcclxuICBidXR0b24/OiBSZWFjdE5vZGU7XHJcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gIG5vU2hhZG93PzogYm9vbGVhbjtcclxuICBub092ZXJsYXk/OiBib29sZWFuO1xyXG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBNb2RhbCh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGlzT3BlbixcclxuICBidXR0b24sXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICBub1NoYWRvdyA9IGZhbHNlLFxyXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxyXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcclxuICBiYXNlWkluZGV4ID0gMTAwOSxcclxufTogTW9kYWxQcm9wcykge1xyXG4gIHVzZUhvdGtleXMoXCJFc2NhcGVcIiwgb25DbG9zZSk7XHJcblxyXG4gIGNvbnN0IGhhbmRsZU92ZXJsYXlDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgIG9uQ2xvc2UoKTtcclxuICB9LCBbb25DbG9zZV0pO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgaXNPcGVuICYmIChcclxuICAgICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICAgICAgc3R5bGVzLm92ZXJsYXksXHJcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub092ZXJsYXldOiBub092ZXJsYXkgfSxcclxuICAgICAgICAgIF0pfVxyXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1vdmVybGF5XCJcclxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU92ZXJsYXlDbGlja31cclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDEgfX1cclxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgICBzdHlsZXMubW9kYWwsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSl9XHJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2J1dHRvbiAmJiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDIgfX1cclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b259XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtidXR0b259XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIClcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJfMjBaS0dZNFR3WnhwMEtaNkU3eTRXQlwiLFwibm9PdmVybGF5XCI6XCJfMkFMdzJwLURIeFlEaFl2UnpRNGluQlwiLFwibW9kYWxcIjpcIl8yNUxCTjMxX21JMUkxdUhERFA0TzBJXCIsXCJ0cmFuc3BhcmVudFwiOlwiXzNaMktsMXJFSFpRTUxVc1hGMWY3bG9cIixcIm5vU2hhZG93XCI6XCJfM0NmU1QtdG4tdHN2Y29kU3hlbGlRcVwiLFwibW9kYWxCdXR0b25cIjpcIl8xZU8weDNNMHBOOC03OUl1WXVUX0NsXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJLZ0M1cHd0c0hhdnVWT0x1YkFMYWVcIixcIm1vZGFsSGVhZGVyXCI6XCJfMWJUTlhNUjVtWkZYczFvMHV4a2hSUFwiLFwibW9kYWxDb250ZW50XCI6XCJxdVA1bzRROW5sVW8xZlQ3c2JQVkFcIixcIm5vUGFkZGluZ1wiOlwiXzFVZ29fREhTVDRSYld6SXhIUGhqN25cIixcIm1vZGFsQnV0dG9uc0NvbnRhaW5lclwiOlwiXzJiR0w3WGpEeTZzRTNKbGVVOThoanlcIixcIm1vZGFsQnV0dG9uc1wiOlwiXzNYZmZGZU45VkVJcHl0aG1WSjJVOENcIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlSW5wdXQgfSBmcm9tIFwiLi9GaWxlSW5wdXRcIjtcclxuZXhwb3J0IHsgRmlsZUlucHV0U2l6ZSB9IGZyb20gXCIuL0ZpbGVJbnB1dFwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ZpbGVJbnB1dC5tb2R1bGUuY3NzXCI7XHJcblxyXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcclxuXHJcbnR5cGUgUHJvcHMgPSB7XHJcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcclxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xyXG4gIGFjY2VwdD86IHN0cmluZztcclxuICBtdWx0aXBsZT86IGJvb2xlYW47XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIGludmVydGVkPzogYm9vbGVhbjtcclxuICBub1NoYWRvdz86IGJvb2xlYW47XHJcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xyXG4gIG5vUGFkZGluZz86IGJvb2xlYW47XHJcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xyXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcclxuICByb3VuZGVkPzogYm9vbGVhbjtcclxuICBzaXplPzogRmlsZUlucHV0U2l6ZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIEZpbGVJbnB1dCh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgYWNjZXB0LFxyXG4gIG9uQ2hhbmdlLFxyXG4gIGlucHV0UmVmLFxyXG4gIG11bHRpcGxlID0gZmFsc2UsXHJcbiAgZGlzYWJsZWQgPSBmYWxzZSxcclxuICBpbnZlcnRlZCA9IGZhbHNlLFxyXG4gIG5vU2hhZG93ID0gZmFsc2UsXHJcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcclxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxyXG4gIHJvdW5kZWQgPSBmYWxzZSxcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxufTogUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGxhYmVsXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5sYWJlbCxcclxuICAgICAgICBzdHlsZXNbc2l6ZV0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcclxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcclxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcclxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxyXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxyXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcclxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcclxuICAgICAgICB9LFxyXG4gICAgICBdKX1cclxuICAgID5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuaW5wdXR9XHJcbiAgICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgIGlkPVwiZmlsZVwiXHJcbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XHJcbiAgICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxyXG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XHJcbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cclxuICAgICAgLz5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9sYWJlbD5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaW5wdXRcIjpcIl8zVlh6cjZ6bVc3VDZhcng5X3ZDQUZWXCIsXCJsYWJlbFwiOlwiejdzMmhkd0dUM2tjejUxX21KeG12XCIsXCJzbWFsbFwiOlwiXzJ6cjU4aEtrZ2N3WU1CMXd1QUp0b1JcIixcImxhcmdlXCI6XCJfMUNOYkxlakk0NmozQ1NSVTd0UUdiZVwiLFwieGxhcmdlXCI6XCJfMnRqZVhkd3gzLWRuU185MjFydXBCbFwiLFwiaW52ZXJ0ZWRcIjpcIl8zMmxkTE1FTGtTeWRYZW9nOEJDQmktXCIsXCJyb3VuZGVkXCI6XCJYbjREZjdyUXhtMFFBSE5ldXZOTFwiLFwibm9TaGFkb3dcIjpcIk5lQU9vWWdiMGhPUG5UVnp3dGdERFwiLFwibm9Cb3JkZXJcIjpcIl8zd1Z6YjRQUnFoeHVwWGp1QjBSQmxTXCIsXCJub1BhZGRpbmdcIjpcIl8xeFB0WGVqX21oUERibHp2Y3JsZk84XCIsXCJ0cmFuc3BhcmVudFwiOlwiUzB6RGZnc1UxRGdPMFV1VFNPZms0XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJlbWVnTENILVdfbjdLdVRKbE9zUUFcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJWSFpSNmhXSzZmU0RmUkx1aEg3b05cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9hdGluZ1BhbmVsIH0gZnJvbSBcIi4vRmxvYXRpbmdQYW5lbFwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgUGxhY2VtZW50ID0ge1xyXG4gIGhvcml6b250YWw6XHJcbiAgICB8IFwicmlnaHRcIlxyXG4gICAgfCBcInJpZ2h0RWRnZVwiXHJcbiAgICB8IFwicmlnaHRPbkVkZ2VcIlxyXG4gICAgfCBcImxlZnRcIlxyXG4gICAgfCBcImxlZnRFZGdlXCJcclxuICAgIHwgXCJsZWZ0T25FZGdlXCJcclxuICAgIHwgXCJsZWZ0T25FZGdlXCJcclxuICAgIHwgXCJjZW50ZXJcIjtcclxuICB2ZXJ0aWNhbDpcclxuICAgIHwgXCJ0b3BcIlxyXG4gICAgfCBcInRvcEVkZ2VcIlxyXG4gICAgfCBcInRvcE9uRWRnZVwiXHJcbiAgICB8IFwiYm90dG9tXCJcclxuICAgIHwgXCJib3R0b21FZGdlXCJcclxuICAgIHwgXCJib3R0b21PbkVkZ2VcIlxyXG4gICAgfCBcImNlbnRlclwiO1xyXG4gIHBhcmVudDogXCJ2aWV3cG9ydFwiIHwgXCJjb250YWluZXJcIjtcclxufTtcclxuXHJcbnR5cGUgRmxvYXRpbmdQYW5lbFByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBsYXlvdXQ/OiBcImNvbHVtblwiIHwgXCJyb3dcIjtcclxuICBwbGFjZW1lbnQ/OiBQbGFjZW1lbnQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBGbG9hdGluZ1BhbmVsKHtcclxuICBjaGlsZHJlbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgbGF5b3V0ID0gXCJjb2x1bW5cIixcclxuICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiLCBwYXJlbnQ6IFwidmlld3BvcnRcIiB9LFxyXG59OiBGbG9hdGluZ1BhbmVsUHJvcHMpIHtcclxuICBjb25zdCBob3Jpem9udGFsUGxhY2VtZW50ID1cclxuICAgIHBsYWNlbWVudC5ob3Jpem9udGFsID09PSBcImNlbnRlclwiXHJcbiAgICAgID8gXCJob3Jpem9udGFsQ2VudGVyXCJcclxuICAgICAgOiBwbGFjZW1lbnQuaG9yaXpvbnRhbDtcclxuXHJcbiAgY29uc3QgdmVydGljYWxQbGFjZW1lbnQgPVxyXG4gICAgcGxhY2VtZW50LnZlcnRpY2FsID09PSBcImNlbnRlclwiID8gXCJ2ZXJ0aWNhbENlbnRlclwiIDogcGxhY2VtZW50LnZlcnRpY2FsO1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdlxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJmbG9hdGluZy1wYW5lbFwiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXHJcbiAgICAgICAgc3R5bGVzW2hvcml6b250YWxQbGFjZW1lbnRdLFxyXG4gICAgICAgIHN0eWxlc1t2ZXJ0aWNhbFBsYWNlbWVudF0sXHJcbiAgICAgICAgc3R5bGVzW2xheW91dF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IHBsYWNlbWVudC5wYXJlbnQgIT09IFwiY29udGFpbmVyXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSl9XHJcbiAgICA+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZsb2F0aW5nUGFuZWw7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfMnIwRmtZSjdTSzFZakIzSEtITUFpaFwiLFwicm93XCI6XCJfM1ItRkY4ZU11MENTNGVOWDNsVGRDUlwiLFwiY29sdW1uXCI6XCJfMW9LT2VBZ1pqd3hOTTN1R2ZMdDZJT1wiLFwiZml4ZWRcIjpcIl8zb1FHV2dTSU5ieXRiNHV2OTJDU3ZUXCIsXCJwbGFpblwiOlwiaU1mOG9kLWJJcXNIQXZ4b2ZEdXpiXCIsXCJ0cmFuc3BhcmVudFwiOlwiZDJveXg1cHlzcWo4OThhUzhHM0U4XCIsXCJ0b3BcIjpcIl8xMWNQWXExZGhReXpWSU1aZWsxX0lvXCIsXCJ0b3BFZGdlXCI6XCJfMl9pbmVDeTFNUWxZUDZxTWV3ZDF6NVwiLFwidG9wT25FZGdlXCI6XCJfMXJ2Q3NEb2Q1YmxUT3lBbDRrRHdOMFwiLFwicmlnaHRcIjpcIl8xU0lZQmNSZ3FTNFZQaFc5TTgwWTR6XCIsXCJyaWdodEVkZ2VcIjpcIlFBNjlmMEQ4YlRDSkhyRE9yOG0xclwiLFwicmlnaHRPbkVkZ2VcIjpcIl8yUGlUVWwwSll6RUNuTzA4NTFnejNhXCIsXCJib3R0b21cIjpcIl8zMDVnQm1Ud0FlWFpmQV9NOXRzVk5vXCIsXCJib3R0b21FZGdlXCI6XCJfMVBjRFhiTFoyWEhQa2VpX0hfcjU4cFwiLFwiYm90dG9tT25FZGdlXCI6XCJfMnZvdDRxcHI1OFduYjZwdkhZbmprY1wiLFwibGVmdFwiOlwic0l0Z0JWNFd0RHg0dlozYS1QNGl4XCIsXCJsZWZ0RWRnZVwiOlwiXzFOSjFGeklfYWJLaS1XNmtjMnIyYzZcIixcImxlZnRPbkVkZ2VcIjpcIl8xMkV2d2JhVlFOV1BaZTM3U284TF9tXCIsXCJob3Jpem9udGFsQ2VudGVyXCI6XCJfMmppU3hFYkNUS1Z6RHRlR1ExdW9FZlwiLFwidmVydGljYWxDZW50ZXJcIjpcIl8yZjlENDZCQi1nZXpQdnc4VFp4SnZwXCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb24ubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBJY29uUHJvcHMgPSB7XHJcbiAgYWx0Pzogc3RyaW5nO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MSW1hZ2VFbGVtZW50PjtcclxuICBpbnZlcnRlZD86IGJvb2xlYW47XHJcbiAgc3JjOiBzdHJpbmc7XHJcbiAgc2l6ZT86IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCIgfCBcInhsYXJnZVwiO1xyXG59O1xyXG5mdW5jdGlvbiBJY29uKHtcclxuICBzcmMsXHJcbiAgYWx0LFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICBpbnZlcnRlZCA9IGZhbHNlLFxyXG59OiBJY29uUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGltZ1xyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLmljb24sXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHsgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkIH0sXHJcbiAgICAgIF0pfVxyXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXHJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvblwiXHJcbiAgICAgIGFsdD17YWx0fVxyXG4gICAgICBzcmM9e3NyY31cclxuICAgIC8+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpY29uXCI6XCJfMzNjVE04aThxYWpGR3ktMDB0eTBSd1wiLFwic21hbGxcIjpcIk1VaTNpa3pjUFpkbzU5QWZvWGRPRlwiLFwibWVkaXVtXCI6XCJfMlZDS3F5NTlOU0ZkZkRpRTBveGFzelwiLFwibGFyZ2VcIjpcIl8yVVVVZjJuX2EwUFlwUThrb3dLSHpwXCIsXCJ4bGFyZ2VcIjpcIm9ESUVZOFU0VHdDSmtqRjd4YVFCT1wiLFwiaW52ZXJ0ZWRcIjpcIl8ycXpVdFUxVGRfYzU4dk04QUxxU1ZXXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbiB9IGZyb20gXCIuL0ljb25CdXR0b25cIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcclxuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcclxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5cclxudHlwZSBJY29uQnV0dG9uUHJvcHMgPSB7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XHJcbiAgc3JjOiBzdHJpbmc7XHJcbiAgYWx0OiBzdHJpbmc7XHJcbiAgYmFkZ2VDb250ZW50PzogUmVhY3ROb2RlO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBpbnZlcnRlZD86IGJvb2xlYW47XHJcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xyXG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcclxuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgcm91bmRlZD86IGJvb2xlYW47XHJcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcclxuICBzaXplPzogU2l6ZTtcclxuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XHJcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiPjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIEljb25CdXR0b24oe1xyXG4gIGNsYXNzTmFtZSxcclxuICBjb250YWluZXJSZWYsXHJcbiAgc3JjLFxyXG4gIGFsdCxcclxuICBiYWRnZUNvbnRlbnQgPSBudWxsLFxyXG4gIG9mZnNldFNpZGVzID0gW10sXHJcbiAgb25DbGljayA9ICgpID0+IHt9LFxyXG4gIGRpc2FibGVkID0gZmFsc2UsXHJcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcclxuICBub1NoYWRvdyA9IGZhbHNlLFxyXG4gIG5vQm9yZGVyID0gZmFsc2UsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICByb3VuZGVkID0gZmFsc2UsXHJcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXHJcbiAgdHlwZSA9IFwiYnV0dG9uXCIsXHJcbn06IEljb25CdXR0b25Qcm9wcykge1xyXG4gIHJldHVybiAoXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxyXG4gICAgICAgIHN0eWxlc1tzaXplXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxyXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxyXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxyXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxyXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcclxuICAgICAgICAgIFtzdHlsZXMuYm90dG9tT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImJvdHRvbVwiKSxcclxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICBdKX1cclxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgICB0eXBlPXt0eXBlfVxyXG4gICAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgID5cclxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XHJcbiAgICAgIHtiYWRnZUNvbnRlbnQgJiYgPEJ1dHRvbkJhZGdlPntiYWRnZUNvbnRlbnR9PC9CdXR0b25CYWRnZT59XHJcbiAgICA8L2J1dHRvbj5cclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uO1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiUmd5bGxYVHFwM19qWjZBMk5idmc2XCIsXCJzbWFsbFwiOlwiXzF3MGhabE9iZUw3RUc4N3pzTC05dk5cIixcIm1lZGl1bVwiOlwiRUsxYnZKWmpXMTE5RG83OVN0TDdJXCIsXCJsYXJnZVwiOlwiUGd5UVhLMXl5Q01xOEJTYVlDYmNoXCIsXCJ4bGFyZ2VcIjpcInFoa0h6SW9Jb3ducmV4SHpRU3V1VVwiLFwicm91bmRlZFwiOlwiXzNxcWExazBDOUpNUHNCUlN6NloweVlcIixcInRvcE9mZnNldFwiOlwiXzNWWlA3RG9oaFo3ejhmaTR6LUg4ak5cIixcInJpZ2h0T2Zmc2V0XCI6XCJfMlhYaEozLWNZY1hiSVZObW1uTzh5SFwiLFwiYm90dG9tT2Zmc2V0XCI6XCJaSklYN1ZxNW11c2pkNnM0aENTYlBcIixcImxlZnRPZmZzZXRcIjpcIl8xUVZXaXlpdlc5VXhlb051M1VkbnY2XCIsXCJpbnZlcnRlZFwiOlwiXzJqWnpYaG5IcXFidHVtNGRCZGwxbEtcIixcIm5vU2hhZG93XCI6XCJfM2Z4dldpT05GRll0TXVEY1hwOHN5dVwiLFwibm9Cb3JkZXJcIjpcIl8zRXV4dXBucU9WdVNvVXNiS3pOblwiLFwidHJhbnNwYXJlbnRcIjpcIl8zNWJSSWk4QnRENFJLU0p2WmJqX3NtXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9JY29uQnV0dG9uTGlua1wiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcblxyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcclxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5pbXBvcnQgeyBCdXR0b25CYWRnZSB9IGZyb20gXCIuLi9CdXR0b25CYWRnZVwiO1xyXG5cclxudHlwZSBPZmZzZXRTaWRlID0gXCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIjtcclxuXHJcbnR5cGUgSWNvbkJ1dHRvbkxpbmtQcm9wcyA9XHJcbiAgfCB7XHJcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XHJcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XHJcbiAgICAgIHNyYzogc3RyaW5nO1xyXG4gICAgICBhbHQ6IHN0cmluZztcclxuICAgICAgYmFkZ2VDb250ZW50PzogUmVhY3ROb2RlO1xyXG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcclxuICAgICAgcm91bmRlZD86IGJvb2xlYW47XHJcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xyXG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XHJcbiAgICAgIHNpemU/OiBTaXplO1xyXG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xyXG4gICAgfVxyXG4gIHwgYW55O1xyXG5cclxuZnVuY3Rpb24gSWNvbkJ1dHRvbkxpbmsoe1xyXG4gIGFzOiBDb21wb25lbnQsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGNsYXNzTmFtZSxcclxuICBzcmMsXHJcbiAgYWx0LFxyXG4gIGJhZGdlQ29udGVudCA9IG51bGwsXHJcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcclxuICBub1NoYWRvdyA9IGZhbHNlLFxyXG4gIG5vQm9yZGVyID0gZmFsc2UsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICByb3VuZGVkID0gZmFsc2UsXHJcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcclxuICBzaXplID0gXCJtZWRpdW1cIixcclxuICAuLi5wcm9wc1xyXG59OiBJY29uQnV0dG9uTGlua1Byb3BzKSB7XHJcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgIENvbXBvbmVudCA9IFwiYVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxDb21wb25lbnRcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvbi1idXR0b24tbGlua1wiXHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXHJcbiAgICAgICAgc3R5bGVzW3NpemVdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcclxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXHJcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXHJcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXHJcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXHJcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXHJcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxyXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGFzc05hbWUsXHJcbiAgICAgIF0pfVxyXG4gICAgICB7Li4ucHJvcHN9XHJcbiAgICA+XHJcbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxyXG4gICAgICB7YmFkZ2VDb250ZW50ICYmIDxCdXR0b25CYWRnZT57YmFkZ2VDb250ZW50fTwvQnV0dG9uQmFkZ2U+fVxyXG4gICAgPC9Db21wb25lbnQ+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgSWNvbkJ1dHRvbkxpbms7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfM3dqeGpDenZfbHBoZFdtNzNKZ0F5cFwiLFwic21hbGxcIjpcIl8zMk1ZbVpiSHpVVTBiM2RNY21Kc2lNXCIsXCJtZWRpdW1cIjpcIl8xODlyWUoyVHZhQnlyQzNTN0NmM25tXCIsXCJsYXJnZVwiOlwiXzJhWVNTVFVnOHd2ckFET1MxODh4TVwiLFwieGxhcmdlXCI6XCJ2czNLWXZVN1pjbmh3MlNPeVNDTmZcIixcInJvdW5kZWRcIjpcIl8xOGloNjdMTDBuN1hsNjFnTEc4czBrXCIsXCJ0b3BPZmZzZXRcIjpcIl8xcDdoN1c2UXNESHBiYTZtZ3lXVUw5XCIsXCJyaWdodE9mZnNldFwiOlwiXzNmeE1JQl9KejVDWUlmd3VaaFEyOGlcIixcImJvdHRvbU9mZnNldFwiOlwiXzExM200Q1dpbUx2c2pVOXhJeFBxN2lcIixcImxlZnRPZmZzZXRcIjpcIl82Q2hvdjJNb3lVeHloV3hLbjM2OEtcIixcImludmVydGVkXCI6XCJfM2VxT0pRejR1ZS1lWEx2cTI3QXNZNVwiLFwibm9TaGFkb3dcIjpcImxGNkRfVjIweDMydjlaeXNxd0M2OFwiLFwibm9Cb3JkZXJcIjpcIl8zczZxQ29sTGpwamw0UnJvN21WVHhTXCIsXCJ0cmFuc3BhcmVudFwiOlwiXzJJWk85cEsxMzFVOTFjeUtYaXhneERcIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJbWFnZSwgSW1hZ2VQcm9wcyB9IGZyb20gXCIuL0ltYWdlXCI7XHJcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ltYWdlLm1vZHVsZS5jc3NcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBlbXB0eUltYWdlID1cclxuICBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPVwiOyAvLyAxeDFwbmdcclxuXHJcbmV4cG9ydCB0eXBlIEltYWdlUHJvcHMgPSB7XHJcbiAgYW5pbWF0aW9uPzogXCJmYWRlSW5cIiB8IFwic2NhbGVVcFwiO1xyXG4gIGFsdD86IHN0cmluZztcclxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcclxuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIGxheW91dD86IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XHJcbiAgc3JjOiBzdHJpbmc7XHJcbiAgc3JjV2lkdGg/OiBudW1iZXI7XHJcbiAgc3JjSGVpZ2h0PzogbnVtYmVyO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gSW1hZ2VDb21wb25lbnQoe1xyXG4gIHNyYyxcclxuICBhbHQsXHJcbiAgc3JjV2lkdGgsXHJcbiAgc3JjSGVpZ2h0LFxyXG4gIGNoaWxkcmVuLFxyXG4gIGFuaW1hdGlvbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXHJcbn06IEltYWdlUHJvcHMpIHtcclxuICBjb25zdCBbaXNMb2FkZWQsIHNldElzTG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBpbWFnZVJlZiA9IHVzZVJlZihudWxsKTtcclxuXHJcbiAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgIGxldCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiO1xyXG4gICAgaW1hZ2Uuc3JjID0gc3JjO1xyXG4gICAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBpbWFnZVJlZi5jdXJyZW50Py5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgc3JjKTtcclxuICAgICAgc2V0SXNMb2FkZWQodHJ1ZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIGltYWdlLnNyYyA9IFwiXCI7XHJcbiAgICAgIGRlbGV0ZSBpbWFnZS5vbmxvYWQ7XHJcbiAgICAgIGRlbGV0ZSBpbWFnZS5zcmM7XHJcbiAgICAgIGRlbGV0ZSBpbWFnZS5jcm9zc09yaWdpbjtcclxuICAgICAgaW1hZ2UgPSBudWxsO1xyXG4gICAgfTtcclxuICB9LCBbc3JjXSk7XHJcblxyXG4gIHJldHVybiBjaGlsZHJlbiA/IChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XHJcbiAgICA+XHJcbiAgICAgIDxpbWdcclxuICAgICAgICByZWY9e2ltYWdlUmVmfVxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgc3R5bGVzLmltYWdlLFxyXG4gICAgICAgICAgc3R5bGVzW2xheW91dF0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFtzdHlsZXMuZmFkZUluXTogYW5pbWF0aW9uID09PSBcImZhZGVJblwiICYmIGlzTG9hZGVkLFxyXG4gICAgICAgICAgICBbc3R5bGVzLnNjYWxlVXBdOiBhbmltYXRpb24gPT09IFwic2NhbGVVcFwiICYmIGlzTG9hZGVkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdKX1cclxuICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXHJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZVwiXHJcbiAgICAgICAgYWx0PXthbHR9XHJcbiAgICAgICAgc3JjPXtlbXB0eUltYWdlfVxyXG4gICAgICAgIHdpZHRoPXtzcmNXaWR0aH1cclxuICAgICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cclxuICAgICAgLz5cclxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cclxuICAgIDwvZGl2PlxyXG4gICkgOiAoXHJcbiAgICA8aW1nXHJcbiAgICAgIHJlZj17aW1hZ2VSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgIHN0eWxlcy5pbWFnZSxcclxuICAgICAgICBzdHlsZXNbbGF5b3V0XSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbc3R5bGVzLmZhZGVJbl06IGFuaW1hdGlvbiA9PT0gXCJmYWRlSW5cIiAmJiBpc0xvYWRlZCxcclxuICAgICAgICAgIFtzdHlsZXMuc2NhbGVVcF06IGFuaW1hdGlvbiA9PT0gXCJzY2FsZVVwXCIgJiYgaXNMb2FkZWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSl9XHJcbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcclxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZVwiXHJcbiAgICAgIGFsdD17YWx0fVxyXG4gICAgICBzcmM9e2VtcHR5SW1hZ2V9XHJcbiAgICAgIHdpZHRoPXtzcmNXaWR0aH1cclxuICAgICAgaGVpZ2h0PXtzcmNIZWlnaHR9XHJcbiAgICAvPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEltYWdlQ29tcG9uZW50O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzFWMDBHcHpfa2VxVVdHRWZaNzR3alNcIixcImhhc092ZXJsYXlcIjpcIl8yTXRVZllwdzVWOFVwcnhxX0VfeVNhXCIsXCJvdmVybGF5XCI6XCJ6MURWSHhqMVpQSzczT0lRUmNrN2pcIixcImltYWdlXCI6XCJfMzlPalRHV2Q3eG14Y2w2bnVJLWcyTFwiLFwiY292ZXJcIjpcIl8zcUtkcDJtSzZmN0c1ekF6WGx6Z3JFXCIsXCJjb250YWluXCI6XCJfMm9fRzRYYkItUW96YmZ1azRfVjAwaFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiXzJ4Z3VEa0d1MW1SMnlQYVktaHpOOG9cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJfMTlXTWEzdHFSeHZVaERLRlo4WTJQQlwiLFwiZmFkZUluXCI6XCJfMzZPUzJHY3Nqd0VnSFAwby04QXgxbVwiLFwiZmFkZUluQW5pbWF0aW9uXCI6XCItZXltTjZoV3pKblJ4OFhoazFEV09cIixcInNjYWxlVXBcIjpcIl8xVVVSQUJabk1sTGYwS1BVVUQyUk56XCIsXCJzY2FsZVVwQW5pbWF0aW9uXCI6XCJfM2tvdHdWOWp2cEhTUG1qdE9VbGc3TVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3IH0gZnJvbSBcIi4vTGlzdFZpZXdcIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0l0ZW1cIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0xpbmtJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdMaW5rSXRlbVwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlldy5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIExpc3RWaWV3UHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBoZWFkZXI/OiBzdHJpbmc7XHJcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIExpc3RWaWV3KHtcclxuICBjaGlsZHJlbixcclxuICBjbGFzc05hbWUsXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIGhlYWRlcixcclxuICBoZWFkZXJBY3Rpb25zLFxyXG59OiBMaXN0Vmlld1Byb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cclxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT5cclxuICAgICAgICAgIHtoZWFkZXIgJiYgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlckxhYmVsfT57aGVhZGVyfTwvaDM+fVxyXG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcbiAgICAgIDx1bCBjbGFzc05hbWU9e3N0eWxlcy5saXN0fT57Y2hpbGRyZW59PC91bD5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiRGNXb0ViaW9sOXB4LUZRQV9UcE9rXCIsXCJoZWFkZXJcIjpcIl8yamF2QjhzQUR4NmREZ3FYTjNNQ0xQXCIsXCJoZWFkZXJMYWJlbFwiOlwiXzNpTU9mSXlOTDFTRW12Mko4WkREbVdcIixcImxpc3RcIjpcIl8zX0ttdGJNUHBQSGdKRk05WkJfeG5BXCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xyXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTGlzdFZpZXdJdGVtUHJvcHMgPSB7XHJcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcclxuICBhY3RpdmU/OiBib29sZWFuO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcclxuICBzaXplPzogU2l6ZTtcclxuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcclxuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIExpc3RWaWV3SXRlbSh7XHJcbiAgY2hpbGRyZW4sXHJcbiAgYWN0aXZlID0gZmFsc2UsXHJcbiAgZGlzYWJsZWQgPSBmYWxzZSxcclxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxyXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIGFsaWduID0gXCJjZW50ZXJcIixcclxuICBvbkNsaWNrID0gKCkgPT4ge30sXHJcbn06IExpc3RWaWV3SXRlbVByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxyXG4gICAgICA8QnV0dG9uXHJcbiAgICAgICAgb25DbGljaz17b25DbGlja31cclxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XHJcbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cclxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XHJcbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XHJcbiAgICAgICAgYWxpZ249e2FsaWdufVxyXG4gICAgICAgIHNpemU9e3NpemV9XHJcbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxyXG4gICAgICAgIG5vU2hhZG93XHJcbiAgICAgICAgbm9Cb3JkZXJcclxuICAgICAgPlxyXG4gICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgPC9CdXR0b24+XHJcbiAgICA8L2xpPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3SXRlbTtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgQnV0dG9uTGluayB9IGZyb20gXCIuLi9CdXR0b25MaW5rXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcclxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5cclxudHlwZSBMaXN0Vmlld0xpbmtJdGVtUHJvcHMgPVxyXG4gIHwge1xyXG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xyXG4gICAgICBhY3RpdmU6IGJvb2xlYW47XHJcbiAgICAgIHRyYW5zcGFyZW50OiBib29sZWFuO1xyXG4gICAgICBub1BhZGRpbmc6IGJvb2xlYW47XHJcbiAgICAgIGFsaWduOiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XHJcbiAgICAgIHNpemU6IFNpemU7XHJcbiAgICB9XHJcbiAgfCBhbnk7XHJcblxyXG5mdW5jdGlvbiBMaXN0Vmlld0xpbmtJdGVtKHtcclxuICBjaGlsZHJlbixcclxuICBhczogQ29tcG9uZW50LFxyXG4gIGFjdGl2ZSA9IGZhbHNlLFxyXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXHJcbiAgbm9QYWRkaW5nID0gZmFsc2UsXHJcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIC4uLnByb3BzXHJcbn06IExpc3RWaWV3TGlua0l0ZW1Qcm9wcykge1xyXG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICBDb21wb25lbnQgPSBcImFcIjtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cclxuICAgICAgPEJ1dHRvbkxpbmtcclxuICAgICAgICBhcz17Q29tcG9uZW50fVxyXG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XHJcbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxyXG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxyXG4gICAgICAgIGFsaWduPXthbGlnbn1cclxuICAgICAgICBzaXplPXtzaXplfVxyXG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcclxuICAgICAgICBub1NoYWRvd1xyXG4gICAgICAgIG5vQm9yZGVyXHJcbiAgICAgICAgey4uLnByb3BzfVxyXG4gICAgICA+XHJcbiAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICA8L0J1dHRvbkxpbms+XHJcbiAgICA8L2xpPlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3TGlua0l0ZW07XHJcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudSB9IGZyb20gXCIuL01lbnVcIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51Q29udGFpbmVyLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4vTWVudUNvbnRhaW5lclwiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51TGlua0l0ZW0gfSBmcm9tIFwiLi9NZW51TGlua0l0ZW1cIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudS5tb2R1bGUuY3NzXCI7XHJcblxyXG50eXBlIE1lbnVQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIGlzT3Blbj86IGJvb2xlYW47XHJcbiAgaGVhZGVyPzogc3RyaW5nO1xyXG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIE1lbnUoe1xyXG4gIGNoaWxkcmVuLFxyXG4gIGNvbnRhaW5lclJlZixcclxuICBjbGFzc05hbWUsXHJcbiAgaXNPcGVuID0gdHJ1ZSxcclxuICBoZWFkZXIsXHJcbiAgZm9vdGVyLFxyXG59OiBNZW51UHJvcHMpIHtcclxuICBpZiAoIWlzT3Blbikge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgc3R5bGVzLm1lbnUsXHJcbiAgICAgICAgICB7IFtzdHlsZXMub3Blbl06IGlzT3BlbiB9LFxyXG4gICAgICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICAgIF0pfVxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5zY3JvbGxDb250YWluZXJ9PlxyXG4gICAgICAgICAge2hlYWRlciAmJiBpc09wZW4gJiYgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+e2hlYWRlcn08L2gzPn1cclxuICAgICAgICAgIDx1bD57aXNPcGVuICYmIGNoaWxkcmVufTwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2Zvb3RlciAmJiBpc09wZW4gJiYgKFxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICAgICAgICBzdHlsZXMuZm9vdGVyLFxyXG4gICAgICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06ICFjaGlsZHJlbiB9LFxyXG4gICAgICAgICAgICBdKX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge2Zvb3Rlcn1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC8+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVudTtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJfMUw1LXB2X1A2TTJvR2VvUmVNbk8ySlwiLFwib3BlblwiOlwiXzFKN3BGa3ZralFRUldrbWctMFhUV1pcIixcImVudHJhbmNlXCI6XCJfM2NxZXNRR2Y5Q3l1NjZEc29LdEYwcVwiLFwiaGVhZGVyXCI6XCJwT1BZYVYwMW85V0I3Qnc0Vmdpd1wiLFwiZm9vdGVyXCI6XCJfM21DY2Nudk5kTi1YWlpTN1BMeGF2MFwiLFwibm9Cb3JkZXJcIjpcIl8yNnRVT2Y5Z0ktYVJmYWZfSWV5UFVJXCIsXCJzY3JvbGxDb250YWluZXJcIjpcIl8xbXFNVXJkMTMtMVRsb3ZHQ0JPZXBmXCJ9OyIsImltcG9ydCBSZWFjdCwge1xyXG4gIFJlYWN0Tm9kZSxcclxuICBSZWFjdEVsZW1lbnQsXHJcbiAgZm9yd2FyZFJlZixcclxuICBGb3J3YXJkZWRSZWYsXHJcbn0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XHJcblxyXG5leHBvcnQgdHlwZSBNZW51UGxhY2VtZW50ID0ge1xyXG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xyXG4gIHZlcnRpY2FsOiBcInRvcFwiIHwgXCJib3R0b21cIjtcclxufTtcclxuXHJcbnR5cGUgTWVudUNvbnRhaW5lclByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxuICBwbGFjZW1lbnQ/OiBNZW51UGxhY2VtZW50O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gTWVudUNvbnRhaW5lcihcclxuICB7XHJcbiAgICBjaGlsZHJlbixcclxuICAgIGJ1dHRvbixcclxuICAgIGNsYXNzTmFtZSxcclxuICAgIHBsYWNlbWVudCA9IHsgaG9yaXpvbnRhbDogXCJsZWZ0XCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiIH0sXHJcbiAgfTogTWVudUNvbnRhaW5lclByb3BzLFxyXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxyXG4pIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxyXG4gICAgICB7YnV0dG9ufVxyXG5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xyXG4gICAgICAgICAgc3R5bGVzLm1lbnVDb250YWluZXIsXHJcbiAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxyXG4gICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC52ZXJ0aWNhbF0sXHJcbiAgICAgICAgXSl9XHJcbiAgICAgID5cclxuICAgICAgICB7Y2hpbGRyZW59XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZm9yd2FyZFJlZihNZW51Q29udGFpbmVyKTtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIl8zRDRJUVpXQ3RIOE1UWHJ2NTlNWUtGXCIsXCJtZW51Q29udGFpbmVyXCI6XCJfMV8yc0ZGVnpOWG1KWF9QVHBIWmdFTFwiLFwidG9wXCI6XCJRdkM0eTZtZjFZVy1ibEs2UFNONUlcIixcInJpZ2h0XCI6XCJfM21yVmJ3a21WbWxjRkRhZFBvZWNjN1wiLFwibGVmdFwiOlwiWGZRNGJqbktGYUFZbVFUdVJLLTZBXCIsXCJib3R0b21cIjpcIl8zOV90eWJYNUpaNlktdWo0N2dQc0tWXCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUl0ZW0ubW9kdWxlLmNzc1wiO1xyXG5cclxudHlwZSBNZW51SXRlbVByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcclxuICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MTElFbGVtZW50PikgPT4gdm9pZDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIE1lbnVJdGVtKHtcclxuICBjaGlsZHJlbixcclxuICBjbGFzc05hbWUsXHJcbiAgb25DbGljayxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICBpc0FjdGl2ZSA9IGZhbHNlLFxyXG59OiBNZW51SXRlbVByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxsaVxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMubWVudUl0ZW0sXHJcbiAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlIH0sXHJcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxyXG4gICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgXSl9XHJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICA+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvbGk+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVudUl0ZW07XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcIl8yS3NSQ0VnRV9NN3dvWGpocFJ1VnVvXCIsXCJub1BhZGRpbmdcIjpcIl8yY3FNSkhKeUNqQVU4WlBaQVYwWUQ1XCIsXCJhY3RpdmVcIjpcIl8xWG5YWmlBcmh2VWV5WGdxVWFHLVA3XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuXHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUxpbmtJdGVtLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgTWVudUxpbmtJdGVtUHJvcHMgPVxyXG4gIHwge1xyXG4gICAgICBhczogRWxlbWVudFR5cGU7XHJcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xyXG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xyXG4gICAgfVxyXG4gIHwgYW55O1xyXG5cclxuZnVuY3Rpb24gTWVudUxpbmtJdGVtKHtcclxuICBhczogQ29tcG9uZW50LFxyXG4gIGNoaWxkcmVuLFxyXG4gIGNsYXNzTmFtZSxcclxuICBub1BhZGRpbmcgPSBmYWxzZSxcclxuICAuLi5wcm9wc1xyXG59OiBNZW51TGlua0l0ZW1Qcm9wcykge1xyXG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICBDb21wb25lbnQgPSBcImFcIjtcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8Q29tcG9uZW50XHJcbiAgICAgIGRhdGEtdGVzdGlkPVwibWVudS1saW5rLWl0ZW1cIlxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcclxuICAgICAgICBzdHlsZXMubWVudUxpbmtJdGVtLFxyXG4gICAgICAgIGNsYXNzTmFtZSxcclxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXHJcbiAgICAgIF0pfVxyXG4gICAgICB7Li4ucHJvcHN9XHJcbiAgICA+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvQ29tcG9uZW50PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lbnVMaW5rSXRlbTtcclxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51TGlua0l0ZW1cIjpcIl8zejV0OUNBaGNBd1ZPdE9WbEFfNEd3XCIsXCJub1BhZGRpbmdcIjpcImJOWGlreUVaSUlPTTFIZ3NBaTNmdFwiLFwiYWN0aXZlXCI6XCJfMVotbVB2ZXdHVWc0ODRRUGM5SHhxMlwiLFwibWVudUl0ZW1cIjpcIl8zdElXQWhNRHRQekFINGJBcndwUk92XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3ZlcmxheSB9IGZyb20gXCIuL092ZXJsYXlcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PdmVybGF5Lm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgT3ZlcmxheVByb3BzID0ge1xyXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgaXNGaXhlZD86IGJvb2xlYW47XHJcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBPdmVybGF5KHtcclxuICBjaGlsZHJlbixcclxuICBjb250YWluZXJSZWYsXHJcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcclxuICBpc0ZpeGVkID0gZmFsc2UsXHJcbiAgb25DbGljayA9ICgpID0+IHt9LFxyXG59OiBPdmVybGF5UHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdlxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJvdmVybGF5XCJcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXHJcbiAgICAgICAgc3R5bGVzLm92ZXJsYXksXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxyXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IGlzRml4ZWQsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSl9XHJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XHJcbiAgICA+XHJcbiAgICAgIHtjaGlsZHJlbn1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE92ZXJsYXk7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiSTBkbS1MZG0tU2lTMHY1WC12bzBnXCIsXCJ0cmFuc3BhcmVudFwiOlwiXzNxZERkbHluSExub2ZOMURLdnZZUThcIixcImZpeGVkXCI6XCJfMWdYeTlYUzNGLUp0cWRqWkJjb0tTd1wifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRleHRJbnB1dCB9IGZyb20gXCIuL1RleHRJbnB1dFwiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UZXh0SW5wdXQubW9kdWxlLmNzc1wiO1xyXG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XHJcblxyXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xyXG4gIGxhYmVsPzogc3RyaW5nO1xyXG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XHJcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcclxuICBvbktleURvd24/OiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XHJcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgdmFsdWU/OiBzdHJpbmc7XHJcbiAgbmFtZT86IHN0cmluZztcclxuICB0eXBlPzogVGV4dElucHV0VHlwZTtcclxuICBzaXplPzogU2l6ZTtcclxuICBub0JvcmRlcj86IGJvb2xlYW47XHJcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcclxuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcclxufTtcclxuXHJcbmZ1bmN0aW9uIFRleHRJbnB1dCh7XHJcbiAgbGFiZWwsXHJcbiAgb25DaGFuZ2UsXHJcbiAgb25CbHVyLFxyXG4gIG9uS2V5RG93bixcclxuICBwbGFjZWhvbGRlcixcclxuICB2YWx1ZSxcclxuICBuYW1lLFxyXG4gIGlucHV0UmVmLFxyXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxyXG4gIHR5cGUgPSBcInRleHRcIixcclxuICBhdXRvRm9jdXMgPSBmYWxzZSxcclxuICBub0JvcmRlciA9IGZhbHNlLFxyXG59OiBUZXh0SW5wdXRQcm9wcykge1xyXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxyXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xyXG4gICAgICBpZiAob25DaGFuZ2UpIHtcclxuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgW29uQ2hhbmdlXVxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcclxuICAgIDxpbnB1dFxyXG4gICAgICBkYXRhLXRlc3RpZD1cImlucHV0XCJcclxuICAgICAgcmVmPXtpbnB1dFJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRleHRJbnB1dCwgc3R5bGVzW3NpemVdLCB7W3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyfV0pfVxyXG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxyXG4gICAgICBvbkJsdXI9e29uQmx1cn1cclxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XHJcbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cclxuICAgICAgbmFtZT17bmFtZX1cclxuICAgICAgdHlwZT17dHlwZX1cclxuICAgICAgdmFsdWU9e3ZhbHVlfVxyXG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cclxuICAgIC8+XHJcbiAgKTtcclxuICBpZiAobGFiZWwpIHtcclxuICAgIHJldHVybiA8TGFiZWwgdmFsdWU9e2xhYmVsfT57aW5wdXRFbGVtZW50fTwvTGFiZWw+O1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xyXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRleHRJbnB1dFwiOlwiXzJpZkZUQnl4dlFGNWVSWXdNQVNhZTdcIixcInNtYWxsXCI6XCJfMThpTE5ocWM1VHo1UFBvMms0X1RCaFwiLFwibWVkaXVtXCI6XCJfMWphUnlqZWF0SlJ4RXVqZ1BHeld6eFwiLFwibGFyZ2VcIjpcIl8zNGQ1SDNYOFcwVWdYOUI4ZHRQUkFPXCIsXCJ4bGFyZ2VcIjpcIl8zc3Q4RUdvdW5PZ2pOdUxwb0VyQzBzXCIsXCJub0JvcmRlclwiOlwicHRSWjdBNWdpVzdGQjNtazhRTENNXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3QgfSBmcm9tIFwiLi9Ub2FzdFwiO1xyXG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0Q29udGFpbmVyIH0gZnJvbSBcIi4vVG9hc3RDb250YWluZXJcIjtcclxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XHJcblxyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Lm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgVG9hc3RQcm9wcyA9IHtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBUb2FzdCh7IGNoaWxkcmVuLCBjb250YWluZXJSZWYsIG9uQ2xpY2sgPSAoKSA9PiB7fSB9OiBUb2FzdFByb3BzKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXZcclxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XHJcbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRvYXN0fVxyXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxyXG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0XCJcclxuICAgID5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVG9hc3Q7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcIl8yTjNYaUg4UlZuRUFZbHpCRF9KQ3FaXCIsXCJlbnRyYW5jZVwiOlwiXzE5Y3czeng2ZlU0Uk1HTWFHTTV6SlpcIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcclxuXHJcbnR5cGUgVG9hc3RDb250YWluZXJQcm9wcyA9IHtcclxuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcclxuICBiYXNlWkluZGV4PzogbnVtYmVyO1xyXG59O1xyXG5mdW5jdGlvbiBUb2FzdENvbnRhaW5lcih7IGNoaWxkcmVuLCBiYXNlWkluZGV4IH06IFRvYXN0Q29udGFpbmVyUHJvcHMpIHtcclxuICByZXR1cm4gKFxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudG9hc3RDb250YWluZXJdKX1cclxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XHJcbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3QtY29udGFpbmVyXCJcclxuICAgID5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVG9hc3RDb250YWluZXI7XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIl8zUlQyYWJmekswcnQtWWpjcnFYTG5yXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW8sIFZpZGVvUHJvcHMgfSBmcm9tIFwiLi9WaWRlb1wiO1xyXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xyXG5cclxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9WaWRlby5tb2R1bGUuY3NzXCI7XHJcblxyXG4vKipcclxuICogVGhlcmUgaXMgYSBrbm93biBpc3N1ZSBpbiBSZWFjdCBpbiByZWdhcmRzIHRvIHRoZSAnbXV0ZWQnIHByb3BlcnR5IHdoaWNoIGNhdXNlcyB0aGUgd2FybmluZzpcclxuICogXCJXYXJuaW5nOiB1bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlczogQ2Fubm90IGZsdXNoIHVwZGF0ZXMgd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy5cIlxyXG4gKlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEwMzg5XHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjU0NFxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGVzdGluZy1saWJyYXJ5L3JlYWN0LXRlc3RpbmctbGlicmFyeS9pc3N1ZXMvNDcwXHJcbiAqL1xyXG5cclxudHlwZSBMYXlvdXQgPSBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xyXG5cclxuZXhwb3J0IHR5cGUgVmlkZW9Qcm9wcyA9IHtcclxuICBzcmM6IHN0cmluZztcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgbGF5b3V0PzogTGF5b3V0O1xyXG4gIGF1dG9QbGF5PzogYm9vbGVhbjtcclxuICBsb29wPzogYm9vbGVhbjtcclxuICBtdXRlZD86IGJvb2xlYW47XHJcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XHJcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuICBwb3N0ZXI/OiBzdHJpbmc7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBWaWRlbyh7XHJcbiAgc3JjLFxyXG4gIHR5cGUsXHJcbiAgY2hpbGRyZW4sXHJcbiAgY29udGFpbmVyUmVmLFxyXG4gIHBvc3RlcixcclxuICBtdXRlZCA9IHRydWUsXHJcbiAgbG9vcCA9IHRydWUsXHJcbiAgYXV0b1BsYXkgPSB0cnVlLFxyXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxyXG59OiBWaWRlb1Byb3BzKSB7XHJcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxyXG4gICAgPGRpdlxyXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cclxuICAgID5cclxuICAgICAgPHZpZGVvXHJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXHJcbiAgICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cclxuICAgICAgICBtdXRlZD17bXV0ZWR9XHJcbiAgICAgICAgbG9vcD17bG9vcH1cclxuICAgICAgICBhdXRvUGxheT17YXV0b1BsYXl9XHJcbiAgICAgICAgcG9zdGVyPXtwb3N0ZXJ9XHJcbiAgICAgICAgcGxheXNJbmxpbmVcclxuICAgICAgPlxyXG4gICAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cclxuICAgICAgPC92aWRlbz5cclxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cclxuICAgIDwvZGl2PlxyXG4gICkgOiAoXHJcbiAgICA8dmlkZW9cclxuICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXHJcbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxyXG4gICAgICBtdXRlZD17bXV0ZWR9XHJcbiAgICAgIGxvb3A9e2xvb3B9XHJcbiAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cclxuICAgICAgcG9zdGVyPXtwb3N0ZXJ9XHJcbiAgICAgIHBsYXlzSW5saW5lXHJcbiAgICA+XHJcbiAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cclxuICAgIDwvdmlkZW8+XHJcbiAgKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmlkZW87XHJcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfMWQ1NXdYdVFLcHQ5N1BxUUhZeDVtV1wiLFwiaGFzT3ZlcmxheVwiOlwiXzJEQU0xeDdQMXd1WU5QOFREbVhHWGNcIixcInZpZGVvXCI6XCJfM2pRX3FwVUx0cjB1RlNUV2JEME5WWlwiLFwiY292ZXJcIjpcIl8xcW5WTGhlR3pESTZObzlfbndiN2hsXCIsXCJjb250YWluXCI6XCJfMVgyODZOSVNJMHdxMktLM2RqVmh1M1wiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiT2VnbC04Z2QySzVsejNtVUdKX1V6XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiXzEtSHpwVFlfV3RHY1pjMjV3Q290ZVlcIixcIm92ZXJsYXlcIjpcIl8yVHZYc3FBSVVuR1NxbTZrbkpGaEwzXCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlVG9nZ2xlIH0gZnJvbSBcIi4vdXNlVG9nZ2xlXCI7XHJcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIi4vdXNlT3V0c2lkZUNsaWNrXCI7XHJcbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKFxyXG4gIGluaXRpYWxWYWx1ZSA9IGZhbHNlXHJcbik6IFtib29sZWFuLCAobmV3VmFsdWU/OiBib29sZWFuKSA9PiB2b2lkXSB7XHJcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZTxib29sZWFuPihpbml0aWFsVmFsdWUpO1xyXG5cclxuICBjb25zdCB0b2dnbGUgPSB1c2VDYWxsYmFjaygobmV3VmFsdWU/OiBib29sZWFuKSA9PiB7XHJcbiAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRWYWx1ZSgocHJldlZhbHVlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0sIFtdKTtcclxuXHJcbiAgcmV0dXJuIFt2YWx1ZSwgdG9nZ2xlXTtcclxufVxyXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxudHlwZSBDYWxsYmFjayA9IChldmVudDogRXZlbnQpID0+IHZvaWQ7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPdXRzaWRlQ2xpY2soY2FsbGJhY2s6IENhbGxiYWNrKSB7XHJcbiAgY29uc3QgcmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICghcmVmLmN1cnJlbnQgfHwgcmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljayk7XHJcblxyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2spO1xyXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2spO1xyXG4gICAgfTtcclxuICB9LCBbY2FsbGJhY2tdKTtcclxuXHJcbiAgcmV0dXJuIHJlZjtcclxufVxyXG4iLCIvKiFcbiAqIGhvdGtleXMtanMgdjMuOC43XG4gKiBBIHNpbXBsZSBtaWNyby1saWJyYXJ5IGZvciBkZWZpbmluZyBhbmQgZGlzcGF0Y2hpbmcga2V5Ym9hcmQgc2hvcnRjdXRzLiBJdCBoYXMgbm8gZGVwZW5kZW5jaWVzLlxuICogXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjEga2Vubnkgd29uZyA8d293b2hvb0BxcS5jb20+XG4gKiBodHRwOi8vamF5d2NqbG92ZS5naXRodWIuaW8vaG90a2V5c1xuICogXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKi9cblxudmFyIGlzZmYgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyA/IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgPiAwIDogZmFsc2U7IC8vIOe7keWumuS6i+S7tlxuXG5mdW5jdGlvbiBhZGRFdmVudChvYmplY3QsIGV2ZW50LCBtZXRob2QpIHtcbiAgaWYgKG9iamVjdC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG1ldGhvZCwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKG9iamVjdC5hdHRhY2hFdmVudCkge1xuICAgIG9iamVjdC5hdHRhY2hFdmVudChcIm9uXCIuY29uY2F0KGV2ZW50KSwgZnVuY3Rpb24gKCkge1xuICAgICAgbWV0aG9kKHdpbmRvdy5ldmVudCk7XG4gICAgfSk7XG4gIH1cbn0gLy8g5L+u6aWw6ZSu6L2s5o2i5oiQ5a+55bqU55qE6ZSu56CBXG5cblxuZnVuY3Rpb24gZ2V0TW9kcyhtb2RpZmllciwga2V5KSB7XG4gIHZhciBtb2RzID0ga2V5LnNsaWNlKDAsIGtleS5sZW5ndGggLSAxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZHMubGVuZ3RoOyBpKyspIHtcbiAgICBtb2RzW2ldID0gbW9kaWZpZXJbbW9kc1tpXS50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHJldHVybiBtb2RzO1xufSAvLyDlpITnkIbkvKDnmoRrZXnlrZfnrKbkuLLovazmjaLmiJDmlbDnu4RcblxuXG5mdW5jdGlvbiBnZXRLZXlzKGtleSkge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIGtleSA9ICcnO1xuICBrZXkgPSBrZXkucmVwbGFjZSgvXFxzL2csICcnKTsgLy8g5Yy56YWN5Lu75L2V56m655m95a2X56ymLOWMheaLrOepuuagvOOAgeWItuihqOespuOAgeaNoumhteespuetieetiVxuXG4gIHZhciBrZXlzID0ga2V5LnNwbGl0KCcsJyk7IC8vIOWQjOaXtuiuvue9ruWkmuS4quW/q+aNt+mUru+8jOS7pScsJ+WIhuWJslxuXG4gIHZhciBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpOyAvLyDlv6vmjbfplK7lj6/og73ljIXlkKsnLCfvvIzpnIDnibnmrorlpITnkIZcblxuICBmb3IgKDsgaW5kZXggPj0gMDspIHtcbiAgICBrZXlzW2luZGV4IC0gMV0gKz0gJywnO1xuICAgIGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59IC8vIOavlOi+g+S/rumlsOmUrueahOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVBcnJheShhMSwgYTIpIHtcbiAgdmFyIGFycjEgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTEgOiBhMjtcbiAgdmFyIGFycjIgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTIgOiBhMTtcbiAgdmFyIGlzSW5kZXggPSB0cnVlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnIyLmluZGV4T2YoYXJyMVtpXSkgPT09IC0xKSBpc0luZGV4ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNJbmRleDtcbn1cblxudmFyIF9rZXlNYXAgPSB7XG4gIGJhY2tzcGFjZTogOCxcbiAgdGFiOiA5LFxuICBjbGVhcjogMTIsXG4gIGVudGVyOiAxMyxcbiAgcmV0dXJuOiAxMyxcbiAgZXNjOiAyNyxcbiAgZXNjYXBlOiAyNyxcbiAgc3BhY2U6IDMyLFxuICBsZWZ0OiAzNyxcbiAgdXA6IDM4LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICBkZWw6IDQ2LFxuICBkZWxldGU6IDQ2LFxuICBpbnM6IDQ1LFxuICBpbnNlcnQ6IDQ1LFxuICBob21lOiAzNixcbiAgZW5kOiAzNSxcbiAgcGFnZXVwOiAzMyxcbiAgcGFnZWRvd246IDM0LFxuICBjYXBzbG9jazogMjAsXG4gIG51bV8wOiA5NixcbiAgbnVtXzE6IDk3LFxuICBudW1fMjogOTgsXG4gIG51bV8zOiA5OSxcbiAgbnVtXzQ6IDEwMCxcbiAgbnVtXzU6IDEwMSxcbiAgbnVtXzY6IDEwMixcbiAgbnVtXzc6IDEwMyxcbiAgbnVtXzg6IDEwNCxcbiAgbnVtXzk6IDEwNSxcbiAgbnVtX211bHRpcGx5OiAxMDYsXG4gIG51bV9hZGQ6IDEwNyxcbiAgbnVtX2VudGVyOiAxMDgsXG4gIG51bV9zdWJ0cmFjdDogMTA5LFxuICBudW1fZGVjaW1hbDogMTEwLFxuICBudW1fZGl2aWRlOiAxMTEsXG4gICfih6onOiAyMCxcbiAgJywnOiAxODgsXG4gICcuJzogMTkwLFxuICAnLyc6IDE5MSxcbiAgJ2AnOiAxOTIsXG4gICctJzogaXNmZiA/IDE3MyA6IDE4OSxcbiAgJz0nOiBpc2ZmID8gNjEgOiAxODcsXG4gICc7JzogaXNmZiA/IDU5IDogMTg2LFxuICAnXFwnJzogMjIyLFxuICAnWyc6IDIxOSxcbiAgJ10nOiAyMjEsXG4gICdcXFxcJzogMjIwXG59OyAvLyBNb2RpZmllciBLZXlzXG5cbnZhciBfbW9kaWZpZXIgPSB7XG4gIC8vIHNoaWZ0S2V5XG4gICfih6cnOiAxNixcbiAgc2hpZnQ6IDE2LFxuICAvLyBhbHRLZXlcbiAgJ+KMpSc6IDE4LFxuICBhbHQ6IDE4LFxuICBvcHRpb246IDE4LFxuICAvLyBjdHJsS2V5XG4gICfijIMnOiAxNyxcbiAgY3RybDogMTcsXG4gIGNvbnRyb2w6IDE3LFxuICAvLyBtZXRhS2V5XG4gICfijJgnOiA5MSxcbiAgY21kOiA5MSxcbiAgY29tbWFuZDogOTFcbn07XG52YXIgbW9kaWZpZXJNYXAgPSB7XG4gIDE2OiAnc2hpZnRLZXknLFxuICAxODogJ2FsdEtleScsXG4gIDE3OiAnY3RybEtleScsXG4gIDkxOiAnbWV0YUtleScsXG4gIHNoaWZ0S2V5OiAxNixcbiAgY3RybEtleTogMTcsXG4gIGFsdEtleTogMTgsXG4gIG1ldGFLZXk6IDkxXG59O1xudmFyIF9tb2RzID0ge1xuICAxNjogZmFsc2UsXG4gIDE4OiBmYWxzZSxcbiAgMTc6IGZhbHNlLFxuICA5MTogZmFsc2Vcbn07XG52YXIgX2hhbmRsZXJzID0ge307IC8vIEYxfkYxMiBzcGVjaWFsIGtleVxuXG5mb3IgKHZhciBrID0gMTsgayA8IDIwOyBrKyspIHtcbiAgX2tleU1hcFtcImZcIi5jb25jYXQoayldID0gMTExICsgaztcbn1cblxudmFyIF9kb3duS2V5cyA9IFtdOyAvLyDorrDlvZXmkYHkuIvnmoTnu5HlrprplK5cblxudmFyIF9zY29wZSA9ICdhbGwnOyAvLyDpu5jorqTng63plK7ojIPlm7RcblxudmFyIGVsZW1lbnRIYXNCaW5kRXZlbnQgPSBbXTsgLy8g5bey57uR5a6a5LqL5Lu255qE6IqC54K56K6w5b2VXG4vLyDov5Tlm57plK7noIFcblxudmFyIGNvZGUgPSBmdW5jdGlvbiBjb2RlKHgpIHtcbiAgcmV0dXJuIF9rZXlNYXBbeC50b0xvd2VyQ2FzZSgpXSB8fCBfbW9kaWZpZXJbeC50b0xvd2VyQ2FzZSgpXSB8fCB4LnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKTtcbn07IC8vIOiuvue9ruiOt+WPluW9k+WJjeiMg+WbtO+8iOm7mOiupOS4uifmiYDmnIkn77yJXG5cblxuZnVuY3Rpb24gc2V0U2NvcGUoc2NvcGUpIHtcbiAgX3Njb3BlID0gc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluW9k+WJjeiMg+WbtFxuXG5cbmZ1bmN0aW9uIGdldFNjb3BlKCkge1xuICByZXR1cm4gX3Njb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5bmkYHkuIvnu5HlrprplK7nmoTplK7lgLxcblxuXG5mdW5jdGlvbiBnZXRQcmVzc2VkS2V5Q29kZXMoKSB7XG4gIHJldHVybiBfZG93bktleXMuc2xpY2UoMCk7XG59IC8vIOihqOWNleaOp+S7tuaOp+S7tuWIpOaWrSDov5Tlm54gQm9vbGVhblxuLy8gaG90a2V5IGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gZmlsdGVyIHJldHVybiB0cnVlXG5cblxuZnVuY3Rpb24gZmlsdGVyKGV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgdmFyIHRhZ05hbWUgPSB0YXJnZXQudGFnTmFtZTtcbiAgdmFyIGZsYWcgPSB0cnVlOyAvLyBpZ25vcmU6IGlzQ29udGVudEVkaXRhYmxlID09PSAndHJ1ZScsIDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4gd2hlbiByZWFkT25seSBzdGF0ZSBpcyBmYWxzZSwgPHNlbGVjdD5cblxuICBpZiAodGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlIHx8ICh0YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgdGFnTmFtZSA9PT0gJ1NFTEVDVCcpICYmICF0YXJnZXQucmVhZE9ubHkpIHtcbiAgICBmbGFnID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmxhZztcbn0gLy8g5Yik5pat5pGB5LiL55qE6ZSu5piv5ZCm5Li65p+Q5Liq6ZSu77yM6L+U5ZuedHJ1ZeaIluiAhWZhbHNlXG5cblxuZnVuY3Rpb24gaXNQcmVzc2VkKGtleUNvZGUpIHtcbiAgaWYgKHR5cGVvZiBrZXlDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGtleUNvZGUgPSBjb2RlKGtleUNvZGUpOyAvLyDovazmjaLmiJDplK7noIFcbiAgfVxuXG4gIHJldHVybiBfZG93bktleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTE7XG59IC8vIOW+queOr+WIoOmZpGhhbmRsZXJz5Lit55qE5omA5pyJIHNjb3BlKOiMg+WbtClcblxuXG5mdW5jdGlvbiBkZWxldGVTY29wZShzY29wZSwgbmV3U2NvcGUpIHtcbiAgdmFyIGhhbmRsZXJzO1xuICB2YXIgaTsgLy8g5rKh5pyJ5oyH5a6ac2NvcGXvvIzojrflj5ZzY29wZVxuXG4gIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gX2hhbmRsZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfaGFuZGxlcnMsIGtleSkpIHtcbiAgICAgIGhhbmRsZXJzID0gX2hhbmRsZXJzW2tleV07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChoYW5kbGVyc1tpXS5zY29wZSA9PT0gc2NvcGUpIGhhbmRsZXJzLnNwbGljZShpLCAxKTtlbHNlIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8g5aaC5p6cc2NvcGXooqvliKDpmaTvvIzlsIZzY29wZemHjee9ruS4umFsbFxuXG5cbiAgaWYgKGdldFNjb3BlKCkgPT09IHNjb3BlKSBzZXRTY29wZShuZXdTY29wZSB8fCAnYWxsJyk7XG59IC8vIOa4hemZpOS/rumlsOmUrlxuXG5cbmZ1bmN0aW9uIGNsZWFyTW9kaWZpZXIoZXZlbnQpIHtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7XG5cbiAgdmFyIGkgPSBfZG93bktleXMuaW5kZXhPZihrZXkpOyAvLyDku47liJfooajkuK3muIXpmaTmjInljovov4fnmoTplK5cblxuXG4gIGlmIChpID49IDApIHtcbiAgICBfZG93bktleXMuc3BsaWNlKGksIDEpO1xuICB9IC8vIOeJueauiuWkhOeQhiBjbW1hbmQg6ZSu77yM5ZyoIGNtbWFuZCDnu4TlkIjlv6vmjbfplK4ga2V5dXAg5Y+q5omn6KGM5LiA5qyh55qE6Zeu6aKYXG5cblxuICBpZiAoZXZlbnQua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbWV0YScpIHtcbiAgICBfZG93bktleXMuc3BsaWNlKDAsIF9kb3duS2V5cy5sZW5ndGgpO1xuICB9IC8vIOS/rumlsOmUriBzaGlmdEtleSBhbHRLZXkgY3RybEtleSAoY29tbWFuZHx8bWV0YUtleSkg5riF6ZmkXG5cblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSBmYWxzZTsgLy8g5bCG5L+u6aWw6ZSu6YeN572u5Li6ZmFsc2VcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5iaW5kKGtleXNJbmZvKSB7XG4gIC8vIHVuYmluZCgpLCB1bmJpbmQgYWxsIGtleXNcbiAgaWYgKCFrZXlzSW5mbykge1xuICAgIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gZGVsZXRlIF9oYW5kbGVyc1trZXldO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5c0luZm8pKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIDogdW5iaW5kKFt7a2V5OiAnY3RybCthJywgc2NvcGU6ICdzMSd9LCB7a2V5OiAnY3RybC1hJywgc2NvcGU6ICdzMicsIHNwbGl0S2V5OiAnLSd9XSlcbiAgICBrZXlzSW5mby5mb3JFYWNoKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICBpZiAoaW5mby5rZXkpIGVhY2hVbmJpbmQoaW5mbyk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnb2JqZWN0Jykge1xuICAgIC8vIHN1cHBvcnQgbGlrZSB1bmJpbmQoe2tleTogJ2N0cmwrYSwgY3RybCtiJywgc2NvcGU6J2FiYyd9KVxuICAgIGlmIChrZXlzSW5mby5rZXkpIGVhY2hVbmJpbmQoa2V5c0luZm8pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IG9sZCBtZXRob2RcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIHNjb3BlID0gYXJnc1swXSxcbiAgICAgICAgbWV0aG9kID0gYXJnc1sxXTtcblxuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1ldGhvZCA9IHNjb3BlO1xuICAgICAgc2NvcGUgPSAnJztcbiAgICB9XG5cbiAgICBlYWNoVW5iaW5kKHtcbiAgICAgIGtleToga2V5c0luZm8sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHNwbGl0S2V5OiAnKydcbiAgICB9KTtcbiAgfVxufSAvLyDop6PpmaTnu5Hlrprmn5DkuKrojIPlm7TnmoTlv6vmjbfplK5cblxuXG52YXIgZWFjaFVuYmluZCA9IGZ1bmN0aW9uIGVhY2hVbmJpbmQoX3JlZikge1xuICB2YXIga2V5ID0gX3JlZi5rZXksXG4gICAgICBzY29wZSA9IF9yZWYuc2NvcGUsXG4gICAgICBtZXRob2QgPSBfcmVmLm1ldGhvZCxcbiAgICAgIF9yZWYkc3BsaXRLZXkgPSBfcmVmLnNwbGl0S2V5LFxuICAgICAgc3BsaXRLZXkgPSBfcmVmJHNwbGl0S2V5ID09PSB2b2lkIDAgPyAnKycgOiBfcmVmJHNwbGl0S2V5O1xuICB2YXIgbXVsdGlwbGVLZXlzID0gZ2V0S2V5cyhrZXkpO1xuICBtdWx0aXBsZUtleXMuZm9yRWFjaChmdW5jdGlvbiAob3JpZ2luS2V5KSB7XG4gICAgdmFyIHVuYmluZEtleXMgPSBvcmlnaW5LZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgIHZhciBsZW4gPSB1bmJpbmRLZXlzLmxlbmd0aDtcbiAgICB2YXIgbGFzdEtleSA9IHVuYmluZEtleXNbbGVuIC0gMV07XG4gICAgdmFyIGtleUNvZGUgPSBsYXN0S2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGxhc3RLZXkpO1xuICAgIGlmICghX2hhbmRsZXJzW2tleUNvZGVdKSByZXR1cm47IC8vIOWIpOaWreaYr+WQpuS8oOWFpeiMg+WbtO+8jOayoeacieWwseiOt+WPluiMg+WbtFxuXG4gICAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIHZhciBtb2RzID0gbGVuID4gMSA/IGdldE1vZHMoX21vZGlmaWVyLCB1bmJpbmRLZXlzKSA6IFtdO1xuICAgIF9oYW5kbGVyc1trZXlDb2RlXSA9IF9oYW5kbGVyc1trZXlDb2RlXS5tYXAoZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgLy8g6YCa6L+H5Ye95pWw5Yik5pat77yM5piv5ZCm6Kej6Zmk57uR5a6a77yM5Ye95pWw55u4562J55u05o6l6L+U5ZueXG4gICAgICB2YXIgaXNNYXRjaGluZ01ldGhvZCA9IG1ldGhvZCA/IHJlY29yZC5tZXRob2QgPT09IG1ldGhvZCA6IHRydWU7XG5cbiAgICAgIGlmIChpc01hdGNoaW5nTWV0aG9kICYmIHJlY29yZC5zY29wZSA9PT0gc2NvcGUgJiYgY29tcGFyZUFycmF5KHJlY29yZC5tb2RzLCBtb2RzKSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSk7XG4gIH0pO1xufTsgLy8g5a+555uR5ZCs5a+55bqU5b+r5o236ZSu55qE5Zue6LCD5Ye95pWw6L+b6KGM5aSE55CGXG5cblxuZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBzY29wZSkge1xuICB2YXIgbW9kaWZpZXJzTWF0Y2g7IC8vIOeci+Wug+aYr+WQpuWcqOW9k+WJjeiMg+WbtFxuXG4gIGlmIChoYW5kbGVyLnNjb3BlID09PSBzY29wZSB8fCBoYW5kbGVyLnNjb3BlID09PSAnYWxsJykge1xuICAgIC8vIOajgOafpeaYr+WQpuWMuemFjeS/rumlsOespu+8iOWmguaenOaciei/lOWbnnRydWXvvIlcbiAgICBtb2RpZmllcnNNYXRjaCA9IGhhbmRsZXIubW9kcy5sZW5ndGggPiAwO1xuXG4gICAgZm9yICh2YXIgeSBpbiBfbW9kcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgeSkpIHtcbiAgICAgICAgaWYgKCFfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPiAtMSB8fCBfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPT09IC0xKSB7XG4gICAgICAgICAgbW9kaWZpZXJzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8g6LCD55So5aSE55CG56iL5bqP77yM5aaC5p6c5piv5L+u6aWw6ZSu5LiN5YGa5aSE55CGXG5cblxuICAgIGlmIChoYW5kbGVyLm1vZHMubGVuZ3RoID09PSAwICYmICFfbW9kc1sxNl0gJiYgIV9tb2RzWzE4XSAmJiAhX21vZHNbMTddICYmICFfbW9kc1s5MV0gfHwgbW9kaWZpZXJzTWF0Y2ggfHwgaGFuZGxlci5zaG9ydGN1dCA9PT0gJyonKSB7XG4gICAgICBpZiAoaGFuZGxlci5tZXRob2QoZXZlbnQsIGhhbmRsZXIpID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZWxzZSBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGV2ZW50LmNhbmNlbEJ1YmJsZSkgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5aSE55CGa2V5ZG93buS6i+S7tlxuXG5cbmZ1bmN0aW9uIGRpc3BhdGNoKGV2ZW50KSB7XG4gIHZhciBhc3RlcmlzayA9IF9oYW5kbGVyc1snKiddO1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTsgLy8g6KGo5Y2V5o6n5Lu26L+H5rukIOm7mOiupOihqOWNleaOp+S7tuS4jeinpuWPkeW/q+aNt+mUrlxuXG4gIGlmICghaG90a2V5cy5maWx0ZXIuY2FsbCh0aGlzLCBldmVudCkpIHJldHVybjsgLy8gR2Vja28oRmlyZWZveCnnmoRjb21tYW5k6ZSu5YC8MjI077yM5ZyoV2Via2l0KENocm9tZSnkuK3kv53mjIHkuIDoh7RcbiAgLy8gV2Via2l05bem5Y+zIGNvbW1hbmQg6ZSu5YC85LiN5LiA5qC3XG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuICAvKipcbiAgICogQ29sbGVjdCBib3VuZCBrZXlzXG4gICAqIElmIGFuIElucHV0IE1ldGhvZCBFZGl0b3IgaXMgcHJvY2Vzc2luZyBrZXkgaW5wdXQgYW5kIHRoZSBldmVudCBpcyBrZXlkb3duLCByZXR1cm4gMjI5LlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNTA0MzkzNC9pcy1pdC1vay10by1pZ25vcmUta2V5ZG93bi1ldmVudHMtd2l0aC1rZXljb2RlLTIyOVxuICAgKiBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctZG9tLzIwMTBKdWxTZXAvYXR0LTAxODIva2V5Q29kZS1zcGVjLmh0bWxcbiAgICovXG5cbiAgaWYgKF9kb3duS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmIGtleSAhPT0gMjI5KSBfZG93bktleXMucHVzaChrZXkpO1xuICAvKipcbiAgICogSmVzdCB0ZXN0IGNhc2VzIGFyZSByZXF1aXJlZC5cbiAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgKi9cblxuICBbJ2N0cmxLZXknLCAnYWx0S2V5JywgJ3NoaWZ0S2V5JywgJ21ldGFLZXknXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlOYW1lKSB7XG4gICAgdmFyIGtleU51bSA9IG1vZGlmaWVyTWFwW2tleU5hbWVdO1xuXG4gICAgaWYgKGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaChrZXlOdW0pO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPiAtMSkge1xuICAgICAgX2Rvd25LZXlzLnNwbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pLCAxKTtcbiAgICB9IGVsc2UgaWYgKGtleU5hbWUgPT09ICdtZXRhS2V5JyAmJiBldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpeCBpZiBDb21tYW5kIGlzIHByZXNzZWQ6XG4gICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgKi9cbiAgICAgIGlmICghKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KSkge1xuICAgICAgICBfZG93bktleXMgPSBfZG93bktleXMuc2xpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSB0cnVlOyAvLyDlsIbnibnmrorlrZfnrKbnmoRrZXnms6jlhozliLAgaG90a2V5cyDkuIpcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYXN0ZXJpc2spIHJldHVybjtcbiAgfSAvLyDlsIYgbW9kaWZpZXJNYXAg6YeM6Z2i55qE5L+u6aWw6ZSu57uR5a6a5YiwIGV2ZW50IOS4rVxuXG5cbiAgZm9yICh2YXIgZSBpbiBfbW9kcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIGUpKSB7XG4gICAgICBfbW9kc1tlXSA9IGV2ZW50W21vZGlmaWVyTWFwW2VdXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXl3Y2psb3ZlL2hvdGtleXMvcHVsbC8xMjlcbiAgICogVGhpcyBzb2x2ZXMgdGhlIGlzc3VlIGluIEZpcmVmb3ggb24gV2luZG93cyB3aGVyZSBob3RrZXlzIGNvcnJlc3BvbmRpbmcgdG8gc3BlY2lhbCBjaGFyYWN0ZXJzIHdvdWxkIG5vdCB0cmlnZ2VyLlxuICAgKiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgY3RybCthbHQrbSBvbiBhIFN3ZWRpc2gga2V5Ym9hcmQgd2hpY2ggaXMgdXNlZCB0byB0eXBlIM68LlxuICAgKiBCcm93c2VyIHN1cHBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9a2V5Ym9hcmRldmVudC1nZXRtb2RpZmllcnN0YXRlXG4gICAqL1xuXG5cbiAgaWYgKGV2ZW50LmdldE1vZGlmaWVyU3RhdGUgJiYgIShldmVudC5hbHRLZXkgJiYgIWV2ZW50LmN0cmxLZXkpICYmIGV2ZW50LmdldE1vZGlmaWVyU3RhdGUoJ0FsdEdyYXBoJykpIHtcbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTcpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTcpO1xuICAgIH1cblxuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxOCkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxOCk7XG4gICAgfVxuXG4gICAgX21vZHNbMTddID0gdHJ1ZTtcbiAgICBfbW9kc1sxOF0gPSB0cnVlO1xuICB9IC8vIOiOt+WPluiMg+WbtCDpu5jorqTkuLogYGFsbGBcblxuXG4gIHZhciBzY29wZSA9IGdldFNjb3BlKCk7IC8vIOWvueS7u+S9leW/q+aNt+mUrumDvemcgOimgeWBmueahOWkhOeQhlxuXG4gIGlmIChhc3Rlcmlzaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN0ZXJpc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhc3Rlcmlza1tpXS5zY29wZSA9PT0gc2NvcGUgJiYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBhc3Rlcmlza1tpXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgYXN0ZXJpc2tbaV0ua2V5dXApKSB7XG4gICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgYXN0ZXJpc2tbaV0sIHNjb3BlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8ga2V5IOS4jeWcqCBfaGFuZGxlcnMg5Lit6L+U5ZueXG5cblxuICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgcmV0dXJuO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBfaGFuZGxlcnNba2V5XS5sZW5ndGg7IF9pKyspIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleXVwKSB7XG4gICAgICBpZiAoX2hhbmRsZXJzW2tleV1bX2ldLmtleSkge1xuICAgICAgICB2YXIgcmVjb3JkID0gX2hhbmRsZXJzW2tleV1bX2ldO1xuICAgICAgICB2YXIgc3BsaXRLZXkgPSByZWNvcmQuc3BsaXRLZXk7XG4gICAgICAgIHZhciBrZXlTaG9ydGN1dCA9IHJlY29yZC5rZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgICAgICB2YXIgX2Rvd25LZXlzQ3VycmVudCA9IFtdOyAvLyDorrDlvZXlvZPliY3mjInplK7plK7lgLxcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGtleVNob3J0Y3V0Lmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgX2Rvd25LZXlzQ3VycmVudC5wdXNoKGNvZGUoa2V5U2hvcnRjdXRbYV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfZG93bktleXNDdXJyZW50LnNvcnQoKS5qb2luKCcnKSA9PT0gX2Rvd25LZXlzLnNvcnQoKS5qb2luKCcnKSkge1xuICAgICAgICAgIC8vIOaJvuWIsOWkhOeQhuWGheWuuVxuICAgICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgcmVjb3JkLCBzY29wZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5Yik5patIGVsZW1lbnQg5piv5ZCm5bey57uP57uR5a6a5LqL5Lu2XG5cblxuZnVuY3Rpb24gaXNFbGVtZW50QmluZChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50SGFzQmluZEV2ZW50LmluZGV4T2YoZWxlbWVudCkgPiAtMTtcbn1cblxuZnVuY3Rpb24gaG90a2V5cyhrZXksIG9wdGlvbiwgbWV0aG9kKSB7XG4gIF9kb3duS2V5cyA9IFtdO1xuICB2YXIga2V5cyA9IGdldEtleXMoa2V5KTsgLy8g6ZyA6KaB5aSE55CG55qE5b+r5o236ZSu5YiX6KGoXG5cbiAgdmFyIG1vZHMgPSBbXTtcbiAgdmFyIHNjb3BlID0gJ2FsbCc7IC8vIHNjb3Bl6buY6K6k5Li6YWxs77yM5omA5pyJ6IyD5Zu06YO95pyJ5pWIXG5cbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudDsgLy8g5b+r5o236ZSu5LqL5Lu257uR5a6a6IqC54K5XG5cbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5dXAgPSBmYWxzZTtcbiAgdmFyIGtleWRvd24gPSB0cnVlO1xuICB2YXIgc3BsaXRLZXkgPSAnKyc7IC8vIOWvueS4uuiuvuWumuiMg+WbtOeahOWIpOaWrVxuXG4gIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbWV0aG9kID0gb3B0aW9uO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb24pID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIGlmIChvcHRpb24uc2NvcGUpIHNjb3BlID0gb3B0aW9uLnNjb3BlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmVsZW1lbnQpIGVsZW1lbnQgPSBvcHRpb24uZWxlbWVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXl1cCkga2V5dXAgPSBvcHRpb24ua2V5dXA7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5ZG93biAhPT0gdW5kZWZpbmVkKSBrZXlkb3duID0gb3B0aW9uLmtleWRvd247IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uLnNwbGl0S2V5ID09PSAnc3RyaW5nJykgc3BsaXRLZXkgPSBvcHRpb24uc3BsaXRLZXk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgc2NvcGUgPSBvcHRpb247IC8vIOWvueS6juavj+S4quW/q+aNt+mUrui/m+ihjOWkhOeQhlxuXG4gIGZvciAoOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV0uc3BsaXQoc3BsaXRLZXkpOyAvLyDmjInplK7liJfooahcblxuICAgIG1vZHMgPSBbXTsgLy8g5aaC5p6c5piv57uE5ZCI5b+r5o236ZSu5Y+W5b6X57uE5ZCI5b+r5o236ZSuXG5cbiAgICBpZiAoa2V5Lmxlbmd0aCA+IDEpIG1vZHMgPSBnZXRNb2RzKF9tb2RpZmllciwga2V5KTsgLy8g5bCG6Z2e5L+u6aWw6ZSu6L2s5YyW5Li66ZSu56CBXG5cbiAgICBrZXkgPSBrZXlba2V5Lmxlbmd0aCAtIDFdO1xuICAgIGtleSA9IGtleSA9PT0gJyonID8gJyonIDogY29kZShrZXkpOyAvLyAq6KGo56S65Yy56YWN5omA5pyJ5b+r5o236ZSuXG4gICAgLy8g5Yik5pata2V55piv5ZCm5ZyoX2hhbmRsZXJz5Lit77yM5LiN5Zyo5bCx6LWL5LiA5Liq56m65pWw57uEXG5cbiAgICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgX2hhbmRsZXJzW2tleV0gPSBbXTtcblxuICAgIF9oYW5kbGVyc1trZXldLnB1c2goe1xuICAgICAga2V5dXA6IGtleXVwLFxuICAgICAga2V5ZG93bjoga2V5ZG93bixcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1vZHM6IG1vZHMsXG4gICAgICBzaG9ydGN1dDoga2V5c1tpXSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAga2V5OiBrZXlzW2ldLFxuICAgICAgc3BsaXRLZXk6IHNwbGl0S2V5XG4gICAgfSk7XG4gIH0gLy8g5Zyo5YWo5bGAZG9jdW1lbnTkuIrorr7nva7lv6vmjbfplK5cblxuXG4gIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRWxlbWVudEJpbmQoZWxlbWVudCkgJiYgd2luZG93KSB7XG4gICAgZWxlbWVudEhhc0JpbmRFdmVudC5wdXNoKGVsZW1lbnQpO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUpO1xuICAgIH0pO1xuICAgIGFkZEV2ZW50KHdpbmRvdywgJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgX2Rvd25LZXlzID0gW107XG4gICAgfSk7XG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleXVwJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUpO1xuICAgICAgY2xlYXJNb2RpZmllcihlKTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgX2FwaSA9IHtcbiAgc2V0U2NvcGU6IHNldFNjb3BlLFxuICBnZXRTY29wZTogZ2V0U2NvcGUsXG4gIGRlbGV0ZVNjb3BlOiBkZWxldGVTY29wZSxcbiAgZ2V0UHJlc3NlZEtleUNvZGVzOiBnZXRQcmVzc2VkS2V5Q29kZXMsXG4gIGlzUHJlc3NlZDogaXNQcmVzc2VkLFxuICBmaWx0ZXI6IGZpbHRlcixcbiAgdW5iaW5kOiB1bmJpbmRcbn07XG5cbmZvciAodmFyIGEgaW4gX2FwaSkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9hcGksIGEpKSB7XG4gICAgaG90a2V5c1thXSA9IF9hcGlbYV07XG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBfaG90a2V5cyA9IHdpbmRvdy5ob3RrZXlzO1xuXG4gIGhvdGtleXMubm9Db25mbGljdCA9IGZ1bmN0aW9uIChkZWVwKSB7XG4gICAgaWYgKGRlZXAgJiYgd2luZG93LmhvdGtleXMgPT09IGhvdGtleXMpIHtcbiAgICAgIHdpbmRvdy5ob3RrZXlzID0gX2hvdGtleXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdGtleXM7XG4gIH07XG5cbiAgd2luZG93LmhvdGtleXMgPSBob3RrZXlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBob3RrZXlzO1xuIiwiaW1wb3J0IGhvdGtleXMgZnJvbSAnaG90a2V5cy1qcyc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2UgaXNIb3RrZXlQcmVzc2VkIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCB2ZXJzaW9uIDQuXHJcbiAqL1xuXG5mdW5jdGlvbiB1c2VJc0hvdGtleVByZXNzZWQoKSB7XG4gIHJldHVybiBob3RrZXlzLmlzUHJlc3NlZDtcbn1cblxuaG90a2V5cy5maWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIHRhZ0ZpbHRlciA9IGZ1bmN0aW9uIHRhZ0ZpbHRlcihfcmVmLCBlbmFibGVPblRhZ3MpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0O1xuICB2YXIgdGFyZ2V0VGFnTmFtZSA9IHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZTtcbiAgcmV0dXJuIEJvb2xlYW4odGFyZ2V0VGFnTmFtZSAmJiBlbmFibGVPblRhZ3MgJiYgZW5hYmxlT25UYWdzLmluY2x1ZGVzKHRhcmdldFRhZ05hbWUpKTtcbn07XG5cbnZhciBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0ID0gZnVuY3Rpb24gaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChldikge1xuICByZXR1cm4gdGFnRmlsdGVyKGV2LCBbJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ1NFTEVDVCddKTtcbn07XG5cbmZ1bmN0aW9uIHVzZUhvdGtleXMoa2V5cywgY2FsbGJhY2ssIG9wdGlvbnMsIGRlcHMpIHtcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGRlcHMgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgX3JlZjIgPSBvcHRpb25zIHx8IHt9LFxuICAgICAgZW5hYmxlT25UYWdzID0gX3JlZjIuZW5hYmxlT25UYWdzLFxuICAgICAgZmlsdGVyID0gX3JlZjIuZmlsdGVyLFxuICAgICAga2V5dXAgPSBfcmVmMi5rZXl1cCxcbiAgICAgIGtleWRvd24gPSBfcmVmMi5rZXlkb3duLFxuICAgICAgX3JlZjIkZmlsdGVyUHJldmVudERlID0gX3JlZjIuZmlsdGVyUHJldmVudERlZmF1bHQsXG4gICAgICBmaWx0ZXJQcmV2ZW50RGVmYXVsdCA9IF9yZWYyJGZpbHRlclByZXZlbnREZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGZpbHRlclByZXZlbnREZSxcbiAgICAgIF9yZWYyJGVuYWJsZWQgPSBfcmVmMi5lbmFibGVkLFxuICAgICAgZW5hYmxlZCA9IF9yZWYyJGVuYWJsZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRlbmFibGVkLFxuICAgICAgX3JlZjIkZW5hYmxlT25Db250ZW50ID0gX3JlZjIuZW5hYmxlT25Db250ZW50RWRpdGFibGUsXG4gICAgICBlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSA9IF9yZWYyJGVuYWJsZU9uQ29udGVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRlbmFibGVPbkNvbnRlbnQ7XG5cbiAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTsgLy8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGNhbGxiYWNrIGRldGVybWluZXMgaWYgdGhlIGJyb3dzZXJzIGRlZmF1bHQgYmVoYXZpb3IgaXMgcHJldmVudGVkLlxuXG4gIHZhciBtZW1vaXNlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCkge1xuICAgIHZhciBfa2V5Ym9hcmRFdmVudCR0YXJnZXQ7XG5cbiAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoa2V5Ym9hcmRFdmVudCkpIHtcbiAgICAgIHJldHVybiAhZmlsdGVyUHJldmVudERlZmF1bHQ7XG4gICAgfSAvLyBDaGVjayB3aGV0aGVyIHRoZSBob3RrZXlzIHdhcyB0cmlnZ2VyZWQgaW5zaWRlIGFuIGlucHV0IGFuZCB0aGF0IGlucHV0IGlzIGVuYWJsZWQgb3IgaWYgaXQgd2FzIHRyaWdnZXJlZCBieSBhIGNvbnRlbnQgZWRpdGFibGUgdGFnIGFuZCBpdCBpcyBlbmFibGVkLlxuXG5cbiAgICBpZiAoaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChrZXlib2FyZEV2ZW50KSAmJiAhdGFnRmlsdGVyKGtleWJvYXJkRXZlbnQsIGVuYWJsZU9uVGFncykgfHwgKF9rZXlib2FyZEV2ZW50JHRhcmdldCA9IGtleWJvYXJkRXZlbnQudGFyZ2V0KSAhPSBudWxsICYmIF9rZXlib2FyZEV2ZW50JHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhZW5hYmxlT25Db250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZWYuY3VycmVudCA9PT0gbnVsbCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSByZWYuY3VycmVudCkge1xuICAgICAgY2FsbGJhY2soa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgZGVwcyA/IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXS5jb25jYXQoZGVwcykgOiBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSW4gdGhpcyBjYXNlIGtleWRvd24gaXMgbGlrZWx5IHVuZGVmaW5lZCwgc28gd2Ugc2V0IGl0IHRvIGZhbHNlLCBzaW5jZSBob3RrZXlzIG5lZWRzIHRoZSBga2V5ZG93bmAga2V5IHRvIGhhdmUgYSB2YWx1ZS5cblxuXG4gICAgaWYgKGtleXVwICYmIGtleWRvd24gIT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMua2V5ZG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhvdGtleXMoa2V5cywgb3B0aW9ucyB8fCB7fSwgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICB9O1xuICB9LCBbbWVtb2lzZWRDYWxsYmFjaywga2V5cywgZW5hYmxlZF0pO1xuICByZXR1cm4gcmVmO1xufVxuXG52YXIgaXNIb3RrZXlQcmVzc2VkID0gaG90a2V5cy5pc1ByZXNzZWQ7XG5cbmV4cG9ydCB7IGlzSG90a2V5UHJlc3NlZCwgdXNlSG90a2V5cywgdXNlSXNIb3RrZXlQcmVzc2VkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzLm1hcFxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|